]> git.openstreetmap.org Git - rails.git/blob - vendor/assets/iD/iD.js
Merge remote-tracking branch 'upstream/pull/2601'
[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 complexity: [2, 18], max-statements: [2, 33] */
1987         var shams = function hasSymbols() {
1988                 if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
1989                 if (typeof Symbol.iterator === 'symbol') { return true; }
1990
1991                 var obj = {};
1992                 var sym = Symbol('test');
1993                 var symObj = Object(sym);
1994                 if (typeof sym === 'string') { return false; }
1995
1996                 if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
1997                 if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
1998
1999                 // temp disabled per https://github.com/ljharb/object.assign/issues/17
2000                 // if (sym instanceof Symbol) { return false; }
2001                 // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
2002                 // if (!(symObj instanceof Symbol)) { return false; }
2003
2004                 // if (typeof Symbol.prototype.toString !== 'function') { return false; }
2005                 // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
2006
2007                 var symVal = 42;
2008                 obj[sym] = symVal;
2009                 for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax
2010                 if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
2011
2012                 if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
2013
2014                 var syms = Object.getOwnPropertySymbols(obj);
2015                 if (syms.length !== 1 || syms[0] !== sym) { return false; }
2016
2017                 if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
2018
2019                 if (typeof Object.getOwnPropertyDescriptor === 'function') {
2020                         var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
2021                         if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
2022                 }
2023
2024                 return true;
2025         };
2026
2027         var origSymbol = commonjsGlobal.Symbol;
2028
2029
2030         var hasSymbols$1 = function hasNativeSymbols() {
2031                 if (typeof origSymbol !== 'function') { return false; }
2032                 if (typeof Symbol !== 'function') { return false; }
2033                 if (typeof origSymbol('foo') !== 'symbol') { return false; }
2034                 if (typeof Symbol('bar') !== 'symbol') { return false; }
2035
2036                 return shams();
2037         };
2038
2039         /* eslint no-invalid-this: 1 */
2040
2041         var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
2042         var slice$1 = Array.prototype.slice;
2043         var toStr$3 = Object.prototype.toString;
2044         var funcType = '[object Function]';
2045
2046         var implementation$2 = function bind(that) {
2047             var target = this;
2048             if (typeof target !== 'function' || toStr$3.call(target) !== funcType) {
2049                 throw new TypeError(ERROR_MESSAGE + target);
2050             }
2051             var args = slice$1.call(arguments, 1);
2052
2053             var bound;
2054             var binder = function () {
2055                 if (this instanceof bound) {
2056                     var result = target.apply(
2057                         this,
2058                         args.concat(slice$1.call(arguments))
2059                     );
2060                     if (Object(result) === result) {
2061                         return result;
2062                     }
2063                     return this;
2064                 } else {
2065                     return target.apply(
2066                         that,
2067                         args.concat(slice$1.call(arguments))
2068                     );
2069                 }
2070             };
2071
2072             var boundLength = Math.max(0, target.length - args.length);
2073             var boundArgs = [];
2074             for (var i = 0; i < boundLength; i++) {
2075                 boundArgs.push('$' + i);
2076             }
2077
2078             bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
2079
2080             if (target.prototype) {
2081                 var Empty = function Empty() {};
2082                 Empty.prototype = target.prototype;
2083                 bound.prototype = new Empty();
2084                 Empty.prototype = null;
2085             }
2086
2087             return bound;
2088         };
2089
2090         var functionBind = Function.prototype.bind || implementation$2;
2091
2092         /* globals
2093                 Atomics,
2094                 SharedArrayBuffer,
2095         */
2096
2097         var undefined$1;
2098
2099         var $TypeError = TypeError;
2100
2101         var $gOPD = Object.getOwnPropertyDescriptor;
2102         if ($gOPD) {
2103                 try {
2104                         $gOPD({}, '');
2105                 } catch (e) {
2106                         $gOPD = null; // this is IE 8, which has a broken gOPD
2107                 }
2108         }
2109
2110         var throwTypeError = function () { throw new $TypeError(); };
2111         var ThrowTypeError = $gOPD
2112                 ? (function () {
2113                         try {
2114                                 // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
2115                                 arguments.callee; // IE 8 does not throw here
2116                                 return throwTypeError;
2117                         } catch (calleeThrows) {
2118                                 try {
2119                                         // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
2120                                         return $gOPD(arguments, 'callee').get;
2121                                 } catch (gOPDthrows) {
2122                                         return throwTypeError;
2123                                 }
2124                         }
2125                 }())
2126                 : throwTypeError;
2127
2128         var hasSymbols$2 = hasSymbols$1();
2129
2130         var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
2131         var generatorFunction =  undefined$1;
2132         var asyncFunction =  undefined$1;
2133         var asyncGenFunction =  undefined$1;
2134
2135         var TypedArray = typeof Uint8Array === 'undefined' ? undefined$1 : getProto(Uint8Array);
2136
2137         var INTRINSICS = {
2138                 '%Array%': Array,
2139                 '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer,
2140                 '%ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer.prototype,
2141                 '%ArrayIteratorPrototype%': hasSymbols$2 ? getProto([][Symbol.iterator]()) : undefined$1,
2142                 '%ArrayPrototype%': Array.prototype,
2143                 '%ArrayProto_entries%': Array.prototype.entries,
2144                 '%ArrayProto_forEach%': Array.prototype.forEach,
2145                 '%ArrayProto_keys%': Array.prototype.keys,
2146                 '%ArrayProto_values%': Array.prototype.values,
2147                 '%AsyncFromSyncIteratorPrototype%': undefined$1,
2148                 '%AsyncFunction%': asyncFunction,
2149                 '%AsyncFunctionPrototype%':  undefined$1,
2150                 '%AsyncGenerator%':  undefined$1,
2151                 '%AsyncGeneratorFunction%': asyncGenFunction,
2152                 '%AsyncGeneratorPrototype%':  undefined$1,
2153                 '%AsyncIteratorPrototype%':  undefined$1,
2154                 '%Atomics%': typeof Atomics === 'undefined' ? undefined$1 : Atomics,
2155                 '%Boolean%': Boolean,
2156                 '%BooleanPrototype%': Boolean.prototype,
2157                 '%DataView%': typeof DataView === 'undefined' ? undefined$1 : DataView,
2158                 '%DataViewPrototype%': typeof DataView === 'undefined' ? undefined$1 : DataView.prototype,
2159                 '%Date%': Date,
2160                 '%DatePrototype%': Date.prototype,
2161                 '%decodeURI%': decodeURI,
2162                 '%decodeURIComponent%': decodeURIComponent,
2163                 '%encodeURI%': encodeURI,
2164                 '%encodeURIComponent%': encodeURIComponent,
2165                 '%Error%': Error,
2166                 '%ErrorPrototype%': Error.prototype,
2167                 '%eval%': eval, // eslint-disable-line no-eval
2168                 '%EvalError%': EvalError,
2169                 '%EvalErrorPrototype%': EvalError.prototype,
2170                 '%Float32Array%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array,
2171                 '%Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array.prototype,
2172                 '%Float64Array%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array,
2173                 '%Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array.prototype,
2174                 '%Function%': Function,
2175                 '%FunctionPrototype%': Function.prototype,
2176                 '%Generator%':  undefined$1,
2177                 '%GeneratorFunction%': generatorFunction,
2178                 '%GeneratorPrototype%':  undefined$1,
2179                 '%Int8Array%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array,
2180                 '%Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2181                 '%Int16Array%': typeof Int16Array === 'undefined' ? undefined$1 : Int16Array,
2182                 '%Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined$1 : Int8Array.prototype,
2183                 '%Int32Array%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array,
2184                 '%Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array.prototype,
2185                 '%isFinite%': isFinite,
2186                 '%isNaN%': isNaN,
2187                 '%IteratorPrototype%': hasSymbols$2 ? getProto(getProto([][Symbol.iterator]())) : undefined$1,
2188                 '%JSON%': typeof JSON === 'object' ? JSON : undefined$1,
2189                 '%JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined$1,
2190                 '%Map%': typeof Map === 'undefined' ? undefined$1 : Map,
2191                 '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols$2 ? undefined$1 : getProto(new Map()[Symbol.iterator]()),
2192                 '%MapPrototype%': typeof Map === 'undefined' ? undefined$1 : Map.prototype,
2193                 '%Math%': Math,
2194                 '%Number%': Number,
2195                 '%NumberPrototype%': Number.prototype,
2196                 '%Object%': Object,
2197                 '%ObjectPrototype%': Object.prototype,
2198                 '%ObjProto_toString%': Object.prototype.toString,
2199                 '%ObjProto_valueOf%': Object.prototype.valueOf,
2200                 '%parseFloat%': parseFloat,
2201                 '%parseInt%': parseInt,
2202                 '%Promise%': typeof Promise === 'undefined' ? undefined$1 : Promise,
2203                 '%PromisePrototype%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype,
2204                 '%PromiseProto_then%': typeof Promise === 'undefined' ? undefined$1 : Promise.prototype.then,
2205                 '%Promise_all%': typeof Promise === 'undefined' ? undefined$1 : Promise.all,
2206                 '%Promise_reject%': typeof Promise === 'undefined' ? undefined$1 : Promise.reject,
2207                 '%Promise_resolve%': typeof Promise === 'undefined' ? undefined$1 : Promise.resolve,
2208                 '%Proxy%': typeof Proxy === 'undefined' ? undefined$1 : Proxy,
2209                 '%RangeError%': RangeError,
2210                 '%RangeErrorPrototype%': RangeError.prototype,
2211                 '%ReferenceError%': ReferenceError,
2212                 '%ReferenceErrorPrototype%': ReferenceError.prototype,
2213                 '%Reflect%': typeof Reflect === 'undefined' ? undefined$1 : Reflect,
2214                 '%RegExp%': RegExp,
2215                 '%RegExpPrototype%': RegExp.prototype,
2216                 '%Set%': typeof Set === 'undefined' ? undefined$1 : Set,
2217                 '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols$2 ? undefined$1 : getProto(new Set()[Symbol.iterator]()),
2218                 '%SetPrototype%': typeof Set === 'undefined' ? undefined$1 : Set.prototype,
2219                 '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer,
2220                 '%SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer.prototype,
2221                 '%String%': String,
2222                 '%StringIteratorPrototype%': hasSymbols$2 ? getProto(''[Symbol.iterator]()) : undefined$1,
2223                 '%StringPrototype%': String.prototype,
2224                 '%Symbol%': hasSymbols$2 ? Symbol : undefined$1,
2225                 '%SymbolPrototype%': hasSymbols$2 ? Symbol.prototype : undefined$1,
2226                 '%SyntaxError%': SyntaxError,
2227                 '%SyntaxErrorPrototype%': SyntaxError.prototype,
2228                 '%ThrowTypeError%': ThrowTypeError,
2229                 '%TypedArray%': TypedArray,
2230                 '%TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined$1,
2231                 '%TypeError%': $TypeError,
2232                 '%TypeErrorPrototype%': $TypeError.prototype,
2233                 '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array,
2234                 '%Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array.prototype,
2235                 '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray,
2236                 '%Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray.prototype,
2237                 '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array,
2238                 '%Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array.prototype,
2239                 '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array,
2240                 '%Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array.prototype,
2241                 '%URIError%': URIError,
2242                 '%URIErrorPrototype%': URIError.prototype,
2243                 '%WeakMap%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap,
2244                 '%WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap.prototype,
2245                 '%WeakSet%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet,
2246                 '%WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet.prototype
2247         };
2248
2249
2250         var $replace = functionBind.call(Function.call, String.prototype.replace);
2251
2252         /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
2253         var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
2254         var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
2255         var stringToPath = function stringToPath(string) {
2256                 var result = [];
2257                 $replace(string, rePropName, function (match, number, quote, subString) {
2258                         result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);
2259                 });
2260                 return result;
2261         };
2262         /* end adaptation */
2263
2264         var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
2265                 if (!(name in INTRINSICS)) {
2266                         throw new SyntaxError('intrinsic ' + name + ' does not exist!');
2267                 }
2268
2269                 // istanbul ignore if // hopefully this is impossible to test :-)
2270                 if (typeof INTRINSICS[name] === 'undefined' && !allowMissing) {
2271                         throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
2272                 }
2273
2274                 return INTRINSICS[name];
2275         };
2276
2277         var GetIntrinsic = function GetIntrinsic(name, allowMissing) {
2278                 if (typeof name !== 'string' || name.length === 0) {
2279                         throw new TypeError('intrinsic name must be a non-empty string');
2280                 }
2281                 if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
2282                         throw new TypeError('"allowMissing" argument must be a boolean');
2283                 }
2284
2285                 var parts = stringToPath(name);
2286
2287                 var value = getBaseIntrinsic('%' + (parts.length > 0 ? parts[0] : '') + '%', allowMissing);
2288                 for (var i = 1; i < parts.length; i += 1) {
2289                         if (value != null) {
2290                                 if ($gOPD && (i + 1) >= parts.length) {
2291                                         var desc = $gOPD(value, parts[i]);
2292                                         if (!allowMissing && !(parts[i] in value)) {
2293                                                 throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
2294                                         }
2295                                         value = desc ? (desc.get || desc.value) : value[parts[i]];
2296                                 } else {
2297                                         value = value[parts[i]];
2298                                 }
2299                         }
2300                 }
2301                 return value;
2302         };
2303
2304         var $Function = GetIntrinsic('%Function%');
2305         var $apply = $Function.apply;
2306         var $call = $Function.call;
2307
2308         var callBind = function callBind() {
2309                 return functionBind.apply($call, arguments);
2310         };
2311
2312         var apply = function applyBind() {
2313                 return functionBind.apply($apply, arguments);
2314         };
2315         callBind.apply = apply;
2316
2317         var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
2318
2319         var callBound = function callBoundIntrinsic(name, allowMissing) {
2320                 var intrinsic = GetIntrinsic(name, !!allowMissing);
2321                 if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.')) {
2322                         return callBind(intrinsic);
2323                 }
2324                 return intrinsic;
2325         };
2326
2327         var $test = GetIntrinsic('RegExp.prototype.test');
2328
2329
2330
2331         var regexTester = function regexTester(regex) {
2332                 return callBind($test, regex);
2333         };
2334
2335         var isPrimitive = function isPrimitive(value) {
2336                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2337         };
2338
2339         var isPrimitive$1 = function isPrimitive(value) {
2340                 return value === null || (typeof value !== 'function' && typeof value !== 'object');
2341         };
2342
2343         var fnToStr = Function.prototype.toString;
2344
2345         var constructorRegex = /^\s*class\b/;
2346         var isES6ClassFn = function isES6ClassFunction(value) {
2347                 try {
2348                         var fnStr = fnToStr.call(value);
2349                         return constructorRegex.test(fnStr);
2350                 } catch (e) {
2351                         return false; // not a function
2352                 }
2353         };
2354
2355         var tryFunctionObject = function tryFunctionToStr(value) {
2356                 try {
2357                         if (isES6ClassFn(value)) { return false; }
2358                         fnToStr.call(value);
2359                         return true;
2360                 } catch (e) {
2361                         return false;
2362                 }
2363         };
2364         var toStr$4 = Object.prototype.toString;
2365         var fnClass = '[object Function]';
2366         var genClass = '[object GeneratorFunction]';
2367         var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2368
2369         var isCallable = function isCallable(value) {
2370                 if (!value) { return false; }
2371                 if (typeof value !== 'function' && typeof value !== 'object') { return false; }
2372                 if (typeof value === 'function' && !value.prototype) { return true; }
2373                 if (hasToStringTag) { return tryFunctionObject(value); }
2374                 if (isES6ClassFn(value)) { return false; }
2375                 var strClass = toStr$4.call(value);
2376                 return strClass === fnClass || strClass === genClass;
2377         };
2378
2379         var getDay = Date.prototype.getDay;
2380         var tryDateObject = function tryDateGetDayCall(value) {
2381                 try {
2382                         getDay.call(value);
2383                         return true;
2384                 } catch (e) {
2385                         return false;
2386                 }
2387         };
2388
2389         var toStr$5 = Object.prototype.toString;
2390         var dateClass = '[object Date]';
2391         var hasToStringTag$1 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
2392
2393         var isDateObject = function isDateObject(value) {
2394                 if (typeof value !== 'object' || value === null) {
2395                         return false;
2396                 }
2397                 return hasToStringTag$1 ? tryDateObject(value) : toStr$5.call(value) === dateClass;
2398         };
2399
2400         var isSymbol$2 = createCommonjsModule(function (module) {
2401
2402         var toStr = Object.prototype.toString;
2403         var hasSymbols = hasSymbols$1();
2404
2405         if (hasSymbols) {
2406                 var symToStr = Symbol.prototype.toString;
2407                 var symStringRegex = /^Symbol\(.*\)$/;
2408                 var isSymbolObject = function isRealSymbolObject(value) {
2409                         if (typeof value.valueOf() !== 'symbol') {
2410                                 return false;
2411                         }
2412                         return symStringRegex.test(symToStr.call(value));
2413                 };
2414
2415                 module.exports = function isSymbol(value) {
2416                         if (typeof value === 'symbol') {
2417                                 return true;
2418                         }
2419                         if (toStr.call(value) !== '[object Symbol]') {
2420                                 return false;
2421                         }
2422                         try {
2423                                 return isSymbolObject(value);
2424                         } catch (e) {
2425                                 return false;
2426                         }
2427                 };
2428         } else {
2429
2430                 module.exports = function isSymbol(value) {
2431                         // this environment does not support Symbols.
2432                         return false ;
2433                 };
2434         }
2435         });
2436
2437         var hasSymbols$3 = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
2438
2439
2440
2441
2442
2443
2444         var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
2445                 if (typeof O === 'undefined' || O === null) {
2446                         throw new TypeError('Cannot call method on ' + O);
2447                 }
2448                 if (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {
2449                         throw new TypeError('hint must be "string" or "number"');
2450                 }
2451                 var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
2452                 var method, result, i;
2453                 for (i = 0; i < methodNames.length; ++i) {
2454                         method = O[methodNames[i]];
2455                         if (isCallable(method)) {
2456                                 result = method.call(O);
2457                                 if (isPrimitive$1(result)) {
2458                                         return result;
2459                                 }
2460                         }
2461                 }
2462                 throw new TypeError('No default value');
2463         };
2464
2465         var GetMethod = function GetMethod(O, P) {
2466                 var func = O[P];
2467                 if (func !== null && typeof func !== 'undefined') {
2468                         if (!isCallable(func)) {
2469                                 throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
2470                         }
2471                         return func;
2472                 }
2473                 return void 0;
2474         };
2475
2476         // http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
2477         var es2015 = function ToPrimitive(input) {
2478                 if (isPrimitive$1(input)) {
2479                         return input;
2480                 }
2481                 var hint = 'default';
2482                 if (arguments.length > 1) {
2483                         if (arguments[1] === String) {
2484                                 hint = 'string';
2485                         } else if (arguments[1] === Number) {
2486                                 hint = 'number';
2487                         }
2488                 }
2489
2490                 var exoticToPrim;
2491                 if (hasSymbols$3) {
2492                         if (Symbol.toPrimitive) {
2493                                 exoticToPrim = GetMethod(input, Symbol.toPrimitive);
2494                         } else if (isSymbol$2(input)) {
2495                                 exoticToPrim = Symbol.prototype.valueOf;
2496                         }
2497                 }
2498                 if (typeof exoticToPrim !== 'undefined') {
2499                         var result = exoticToPrim.call(input, hint);
2500                         if (isPrimitive$1(result)) {
2501                                 return result;
2502                         }
2503                         throw new TypeError('unable to convert exotic object to primitive');
2504                 }
2505                 if (hint === 'default' && (isDateObject(input) || isSymbol$2(input))) {
2506                         hint = 'string';
2507                 }
2508                 return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
2509         };
2510
2511         // https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
2512
2513         var ToPrimitive = function ToPrimitive(input) {
2514                 if (arguments.length > 1) {
2515                         return es2015(input, arguments[1]);
2516                 }
2517                 return es2015(input);
2518         };
2519
2520         var $TypeError$1 = GetIntrinsic('%TypeError%');
2521         var $Number = GetIntrinsic('%Number%');
2522         var $RegExp = GetIntrinsic('%RegExp%');
2523         var $parseInteger = GetIntrinsic('%parseInt%');
2524
2525
2526
2527
2528
2529         var $strSlice = callBound('String.prototype.slice');
2530         var isBinary = regexTester(/^0b[01]+$/i);
2531         var isOctal = regexTester(/^0o[0-7]+$/i);
2532         var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
2533         var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
2534         var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
2535         var hasNonWS = regexTester(nonWSregex);
2536
2537         // whitespace from: https://es5.github.io/#x15.5.4.20
2538         // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
2539         var ws = [
2540                 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
2541                 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
2542                 '\u2029\uFEFF'
2543         ].join('');
2544         var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
2545         var $replace$1 = callBound('String.prototype.replace');
2546         var $trim = function (value) {
2547                 return $replace$1(value, trimRegex, '');
2548         };
2549
2550
2551
2552         // https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
2553
2554         var ToNumber = function ToNumber(argument) {
2555                 var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
2556                 if (typeof value === 'symbol') {
2557                         throw new $TypeError$1('Cannot convert a Symbol value to a number');
2558                 }
2559                 if (typeof value === 'string') {
2560                         if (isBinary(value)) {
2561                                 return ToNumber($parseInteger($strSlice(value, 2), 2));
2562                         } else if (isOctal(value)) {
2563                                 return ToNumber($parseInteger($strSlice(value, 2), 8));
2564                         } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
2565                                 return NaN;
2566                         } else {
2567                                 var trimmed = $trim(value);
2568                                 if (trimmed !== value) {
2569                                         return ToNumber(trimmed);
2570                                 }
2571                         }
2572                 }
2573                 return $Number(value);
2574         };
2575
2576         // https://www.ecma-international.org/ecma-262/5.1/#sec-8
2577
2578         var Type = function Type(x) {
2579                 if (x === null) {
2580                         return 'Null';
2581                 }
2582                 if (typeof x === 'undefined') {
2583                         return 'Undefined';
2584                 }
2585                 if (typeof x === 'function' || typeof x === 'object') {
2586                         return 'Object';
2587                 }
2588                 if (typeof x === 'number') {
2589                         return 'Number';
2590                 }
2591                 if (typeof x === 'boolean') {
2592                         return 'Boolean';
2593                 }
2594                 if (typeof x === 'string') {
2595                         return 'String';
2596                 }
2597         };
2598
2599         // https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
2600
2601         var Type$1 = function Type$1(x) {
2602                 if (typeof x === 'symbol') {
2603                         return 'Symbol';
2604                 }
2605                 return Type(x);
2606         };
2607
2608         // https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
2609
2610         var AbstractEqualityComparison = function AbstractEqualityComparison(x, y) {
2611                 var xType = Type$1(x);
2612                 var yType = Type$1(y);
2613                 if (xType === yType) {
2614                         return x === y; // ES6+ specified this shortcut anyways.
2615                 }
2616                 if (x == null && y == null) {
2617                         return true;
2618                 }
2619                 if (xType === 'Number' && yType === 'String') {
2620                         return AbstractEqualityComparison(x, ToNumber(y));
2621                 }
2622                 if (xType === 'String' && yType === 'Number') {
2623                         return AbstractEqualityComparison(ToNumber(x), y);
2624                 }
2625                 if (xType === 'Boolean') {
2626                         return AbstractEqualityComparison(ToNumber(x), y);
2627                 }
2628                 if (yType === 'Boolean') {
2629                         return AbstractEqualityComparison(x, ToNumber(y));
2630                 }
2631                 if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
2632                         return AbstractEqualityComparison(x, ToPrimitive(y));
2633                 }
2634                 if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
2635                         return AbstractEqualityComparison(ToPrimitive(x), y);
2636                 }
2637                 return false;
2638         };
2639
2640         var _isNaN = Number.isNaN || function isNaN(a) {
2641                 return a !== a;
2642         };
2643
2644         var $isNaN = Number.isNaN || function (a) { return a !== a; };
2645
2646         var _isFinite = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };
2647
2648         var $strSlice$1 = callBound('String.prototype.slice');
2649
2650         var isPrefixOf = function isPrefixOf(prefix, string) {
2651                 if (prefix === string) {
2652                         return true;
2653                 }
2654                 if (prefix.length > string.length) {
2655                         return false;
2656                 }
2657                 return $strSlice$1(string, 0, prefix.length) === prefix;
2658         };
2659
2660         var $Number$1 = GetIntrinsic('%Number%');
2661         var $TypeError$2 = GetIntrinsic('%TypeError%');
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671         // https://www.ecma-international.org/ecma-262/5.1/#sec-11.8.5
2672
2673         // eslint-disable-next-line max-statements
2674         var AbstractRelationalComparison = function AbstractRelationalComparison(x, y, LeftFirst) {
2675                 if (Type$1(LeftFirst) !== 'Boolean') {
2676                         throw new $TypeError$2('Assertion failed: LeftFirst argument must be a Boolean');
2677                 }
2678                 var px;
2679                 var py;
2680                 if (LeftFirst) {
2681                         px = ToPrimitive(x, $Number$1);
2682                         py = ToPrimitive(y, $Number$1);
2683                 } else {
2684                         py = ToPrimitive(y, $Number$1);
2685                         px = ToPrimitive(x, $Number$1);
2686                 }
2687                 var bothStrings = Type$1(px) === 'String' && Type$1(py) === 'String';
2688                 if (!bothStrings) {
2689                         var nx = ToNumber(px);
2690                         var ny = ToNumber(py);
2691                         if (_isNaN(nx) || _isNaN(ny)) {
2692                                 return undefined;
2693                         }
2694                         if (_isFinite(nx) && _isFinite(ny) && nx === ny) {
2695                                 return false;
2696                         }
2697                         if (nx === 0 && ny === 0) {
2698                                 return false;
2699                         }
2700                         if (nx === Infinity) {
2701                                 return false;
2702                         }
2703                         if (ny === Infinity) {
2704                                 return true;
2705                         }
2706                         if (ny === -Infinity) {
2707                                 return false;
2708                         }
2709                         if (nx === -Infinity) {
2710                                 return true;
2711                         }
2712                         return nx < ny; // by now, these are both nonzero, finite, and not equal
2713                 }
2714                 if (isPrefixOf(py, px)) {
2715                         return false;
2716                 }
2717                 if (isPrefixOf(px, py)) {
2718                         return true;
2719                 }
2720                 return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
2721         };
2722
2723         // https://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6
2724
2725         var StrictEqualityComparison = function StrictEqualityComparison(x, y) {
2726                 var xType = Type$1(x);
2727                 var yType = Type$1(y);
2728                 if (xType !== yType) {
2729                         return false;
2730                 }
2731                 if (xType === 'Undefined' || xType === 'Null') {
2732                         return true;
2733                 }
2734                 return x === y; // shortcut for steps 4-7
2735         };
2736
2737         var $Math = GetIntrinsic('%Math%');
2738
2739         var $floor = $Math.floor;
2740         var $abs = $Math.abs;
2741
2742
2743
2744
2745         // https://www.ecma-international.org/ecma-262/6.0/#sec-isinteger
2746
2747         var IsInteger = function IsInteger(argument) {
2748                 if (typeof argument !== 'number' || _isNaN(argument) || !_isFinite(argument)) {
2749                         return false;
2750                 }
2751                 var abs = $abs(argument);
2752                 return $floor(abs) === abs;
2753         };
2754
2755         var $Math$1 = GetIntrinsic('%Math%');
2756         var $Number$2 = GetIntrinsic('%Number%');
2757
2758         var maxSafeInteger = $Number$2.MAX_SAFE_INTEGER || $Math$1.pow(2, 53) - 1;
2759
2760         var $TypeError$3 = GetIntrinsic('%TypeError%');
2761
2762         var $charCodeAt = callBound('String.prototype.charCodeAt');
2763
2764         // https://ecma-international.org/ecma-262/6.0/#sec-advancestringindex
2765
2766         var AdvanceStringIndex = function AdvanceStringIndex(S, index, unicode) {
2767                 if (Type$1(S) !== 'String') {
2768                         throw new $TypeError$3('Assertion failed: `S` must be a String');
2769                 }
2770                 if (!IsInteger(index) || index < 0 || index > maxSafeInteger) {
2771                         throw new $TypeError$3('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
2772                 }
2773                 if (Type$1(unicode) !== 'Boolean') {
2774                         throw new $TypeError$3('Assertion failed: `unicode` must be a Boolean');
2775                 }
2776                 if (!unicode) {
2777                         return index + 1;
2778                 }
2779                 var length = S.length;
2780                 if ((index + 1) >= length) {
2781                         return index + 1;
2782                 }
2783
2784                 var first = $charCodeAt(S, index);
2785                 if (first < 0xD800 || first > 0xDBFF) {
2786                         return index + 1;
2787                 }
2788
2789                 var second = $charCodeAt(S, index + 1);
2790                 if (second < 0xDC00 || second > 0xDFFF) {
2791                         return index + 1;
2792                 }
2793
2794                 return index + 2;
2795         };
2796
2797         var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
2798         var $RangeError = GetIntrinsic('%RangeError%');
2799         var $SyntaxError = GetIntrinsic('%SyntaxError%');
2800         var $TypeError$4 = GetIntrinsic('%TypeError%');
2801
2802
2803
2804         var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
2805
2806         var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
2807                 // eslint-disable-next-line no-proto, no-negated-condition
2808                 [].__proto__ !== $ArrayPrototype
2809                         ? null
2810                         : function (O, proto) {
2811                                 O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
2812                                 return O;
2813                         }
2814         );
2815
2816         // https://www.ecma-international.org/ecma-262/6.0/#sec-arraycreate
2817
2818         var ArrayCreate = function ArrayCreate(length) {
2819                 if (!IsInteger(length) || length < 0) {
2820                         throw new $TypeError$4('Assertion failed: `length` must be an integer Number >= 0');
2821                 }
2822                 if (length > MAX_ARRAY_LENGTH) {
2823                         throw new $RangeError('length is greater than (2**32 - 1)');
2824                 }
2825                 var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
2826                 var A = []; // steps 5 - 7, and 9
2827                 if (proto !== $ArrayPrototype) { // step 8
2828                         if (!$setProto) {
2829                                 throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
2830                         }
2831                         $setProto(A, proto);
2832                 }
2833                 if (length !== 0) { // bypasses the need for step 2
2834                         A.length = length;
2835                 }
2836                 /* step 10, the above as a shortcut for the below
2837             OrdinaryDefineOwnProperty(A, 'length', {
2838                 '[[Configurable]]': false,
2839                 '[[Enumerable]]': false,
2840                 '[[Value]]': length,
2841                 '[[Writable]]': true
2842             });
2843             */
2844                 return A;
2845         };
2846
2847         // modified from https://github.com/es-shims/es6-shim
2848
2849
2850         var canBeObject = function (obj) {
2851                 return typeof obj !== 'undefined' && obj !== null;
2852         };
2853         var hasSymbols$4 = shams();
2854         var toObject = Object;
2855         var push = functionBind.call(Function.call, Array.prototype.push);
2856         var propIsEnumerable = functionBind.call(Function.call, Object.prototype.propertyIsEnumerable);
2857         var originalGetSymbols = hasSymbols$4 ? Object.getOwnPropertySymbols : null;
2858
2859         var implementation$3 = function assign(target, source1) {
2860                 var arguments$1 = arguments;
2861
2862                 if (!canBeObject(target)) { throw new TypeError('target must be an object'); }
2863                 var objTarget = toObject(target);
2864                 var s, source, i, props, syms, value, key;
2865                 for (s = 1; s < arguments.length; ++s) {
2866                         source = toObject(arguments$1[s]);
2867                         props = objectKeys(source);
2868                         var getSymbols = hasSymbols$4 && (Object.getOwnPropertySymbols || originalGetSymbols);
2869                         if (getSymbols) {
2870                                 syms = getSymbols(source);
2871                                 for (i = 0; i < syms.length; ++i) {
2872                                         key = syms[i];
2873                                         if (propIsEnumerable(source, key)) {
2874                                                 push(props, key);
2875                                         }
2876                                 }
2877                         }
2878                         for (i = 0; i < props.length; ++i) {
2879                                 key = props[i];
2880                                 value = source[key];
2881                                 if (propIsEnumerable(source, key)) {
2882                                         objTarget[key] = value;
2883                                 }
2884                         }
2885                 }
2886                 return objTarget;
2887         };
2888
2889         var lacksProperEnumerationOrder = function () {
2890                 if (!Object.assign) {
2891                         return false;
2892                 }
2893                 // v8, specifically in node 4.x, has a bug with incorrect property enumeration order
2894                 // note: this does not detect the bug unless there's 20 characters
2895                 var str = 'abcdefghijklmnopqrst';
2896                 var letters = str.split('');
2897                 var map = {};
2898                 for (var i = 0; i < letters.length; ++i) {
2899                         map[letters[i]] = letters[i];
2900                 }
2901                 var obj = Object.assign({}, map);
2902                 var actual = '';
2903                 for (var k in obj) {
2904                         actual += k;
2905                 }
2906                 return str !== actual;
2907         };
2908
2909         var assignHasPendingExceptions = function () {
2910                 if (!Object.assign || !Object.preventExtensions) {
2911                         return false;
2912                 }
2913                 // Firefox 37 still has "pending exception" logic in its Object.assign implementation,
2914                 // which is 72% slower than our shim, and Firefox 40's native implementation.
2915                 var thrower = Object.preventExtensions({ 1: 2 });
2916                 try {
2917                         Object.assign(thrower, 'xy');
2918                 } catch (e) {
2919                         return thrower[1] === 'y';
2920                 }
2921                 return false;
2922         };
2923
2924         var polyfill$4 = function getPolyfill() {
2925                 if (!Object.assign) {
2926                         return implementation$3;
2927                 }
2928                 if (lacksProperEnumerationOrder()) {
2929                         return implementation$3;
2930                 }
2931                 if (assignHasPendingExceptions()) {
2932                         return implementation$3;
2933                 }
2934                 return Object.assign;
2935         };
2936
2937         var shim$8 = function shimAssign() {
2938                 var polyfill = polyfill$4();
2939                 defineProperties_1(
2940                         Object,
2941                         { assign: polyfill },
2942                         { assign: function () { return Object.assign !== polyfill; } }
2943                 );
2944                 return polyfill;
2945         };
2946
2947         var polyfill$5 = polyfill$4();
2948
2949         defineProperties_1(polyfill$5, {
2950                 getPolyfill: polyfill$4,
2951                 implementation: implementation$3,
2952                 shim: shim$8
2953         });
2954
2955         var object_assign = polyfill$5;
2956
2957         var src = functionBind.call(Function.call, Object.prototype.hasOwnProperty);
2958
2959         var $TypeError$5 = GetIntrinsic('%TypeError%');
2960
2961         var isPropertyDescriptor = function IsPropertyDescriptor(ES, Desc) {
2962                 if (ES.Type(Desc) !== 'Object') {
2963                         return false;
2964                 }
2965                 var allowed = {
2966                         '[[Configurable]]': true,
2967                         '[[Enumerable]]': true,
2968                         '[[Get]]': true,
2969                         '[[Set]]': true,
2970                         '[[Value]]': true,
2971                         '[[Writable]]': true
2972                 };
2973
2974             for (var key in Desc) { // eslint-disable-line
2975                         if (src(Desc, key) && !allowed[key]) {
2976                                 return false;
2977                         }
2978                 }
2979
2980                 if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {
2981                         throw new $TypeError$5('Property Descriptors may not be both accessor and data descriptors');
2982                 }
2983                 return true;
2984         };
2985
2986         var $Array = GetIntrinsic('%Array%');
2987
2988         // eslint-disable-next-line global-require
2989         var toStr$6 = !$Array.isArray && callBound('Object.prototype.toString');
2990
2991         // https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
2992
2993         var IsArray = $Array.isArray || function IsArray(argument) {
2994                 return toStr$6(argument) === '[object Array]';
2995         };
2996
2997         var $TypeError$6 = GetIntrinsic('%TypeError%');
2998         var $SyntaxError$1 = GetIntrinsic('%SyntaxError%');
2999
3000
3001
3002         var predicates = {
3003                 // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
3004                 'Property Descriptor': function isPropertyDescriptor(Type, Desc) {
3005                         if (Type(Desc) !== 'Object') {
3006                                 return false;
3007                         }
3008                         var allowed = {
3009                                 '[[Configurable]]': true,
3010                                 '[[Enumerable]]': true,
3011                                 '[[Get]]': true,
3012                                 '[[Set]]': true,
3013                                 '[[Value]]': true,
3014                                 '[[Writable]]': true
3015                         };
3016
3017                         for (var key in Desc) { // eslint-disable-line
3018                                 if (src(Desc, key) && !allowed[key]) {
3019                                         return false;
3020                                 }
3021                         }
3022
3023                         var isData = src(Desc, '[[Value]]');
3024                         var IsAccessor = src(Desc, '[[Get]]') || src(Desc, '[[Set]]');
3025                         if (isData && IsAccessor) {
3026                                 throw new $TypeError$6('Property Descriptors may not be both accessor and data descriptors');
3027                         }
3028                         return true;
3029                 }
3030         };
3031
3032         var assertRecord = function assertRecord(Type, recordType, argumentName, value) {
3033                 var predicate = predicates[recordType];
3034                 if (typeof predicate !== 'function') {
3035                         throw new $SyntaxError$1('unknown record type: ' + recordType);
3036                 }
3037                 if (!predicate(Type, value)) {
3038                         throw new $TypeError$6(argumentName + ' must be a ' + recordType);
3039                 }
3040         };
3041
3042         // https://www.ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
3043
3044         var IsAccessorDescriptor = function IsAccessorDescriptor(Desc) {
3045                 if (typeof Desc === 'undefined') {
3046                         return false;
3047                 }
3048
3049                 assertRecord(Type$1, 'Property Descriptor', 'Desc', Desc);
3050
3051                 if (!src(Desc, '[[Get]]') && !src(Desc, '[[Set]]')) {
3052                         return false;
3053                 }
3054
3055                 return true;
3056         };
3057
3058         // https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
3059
3060         var IsDataDescriptor = function IsDataDescriptor(Desc) {
3061                 if (typeof Desc === 'undefined') {
3062                         return false;
3063                 }
3064
3065                 assertRecord(Type$1, 'Property Descriptor', 'Desc', Desc);
3066
3067                 if (!src(Desc, '[[Value]]') && !src(Desc, '[[Writable]]')) {
3068                         return false;
3069                 }
3070
3071                 return true;
3072         };
3073
3074         var $gOPD$1 = GetIntrinsic('%Object.getOwnPropertyDescriptor%');
3075         if ($gOPD$1) {
3076                 try {
3077                         $gOPD$1([], 'length');
3078                 } catch (e) {
3079                         // IE 8 has a broken gOPD
3080                         $gOPD$1 = null;
3081                 }
3082         }
3083
3084         var getOwnPropertyDescriptor = $gOPD$1;
3085
3086         var $Object = GetIntrinsic('%Object%');
3087
3088
3089
3090         var $preventExtensions = $Object.preventExtensions;
3091         var $isExtensible = $Object.isExtensible;
3092
3093         // https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
3094
3095         var IsExtensible = $preventExtensions
3096                 ? function IsExtensible(obj) {
3097                         return !isPrimitive(obj) && $isExtensible(obj);
3098                 }
3099                 : function IsExtensible(obj) {
3100                         return !isPrimitive(obj);
3101                 };
3102
3103         // https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
3104
3105         var IsPropertyKey = function IsPropertyKey(argument) {
3106                 return typeof argument === 'string' || typeof argument === 'symbol';
3107         };
3108
3109         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
3110
3111         var ToBoolean = function ToBoolean(value) { return !!value; };
3112
3113         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
3114
3115         var IsCallable = isCallable;
3116
3117         var $TypeError$7 = GetIntrinsic('%TypeError%');
3118
3119
3120
3121
3122
3123         // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
3124
3125         var ToPropertyDescriptor = function ToPropertyDescriptor(Obj) {
3126                 if (Type$1(Obj) !== 'Object') {
3127                         throw new $TypeError$7('ToPropertyDescriptor requires an object');
3128                 }
3129
3130                 var desc = {};
3131                 if (src(Obj, 'enumerable')) {
3132                         desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
3133                 }
3134                 if (src(Obj, 'configurable')) {
3135                         desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
3136                 }
3137                 if (src(Obj, 'value')) {
3138                         desc['[[Value]]'] = Obj.value;
3139                 }
3140                 if (src(Obj, 'writable')) {
3141                         desc['[[Writable]]'] = ToBoolean(Obj.writable);
3142                 }
3143                 if (src(Obj, 'get')) {
3144                         var getter = Obj.get;
3145                         if (typeof getter !== 'undefined' && !IsCallable(getter)) {
3146                                 throw new TypeError('getter must be a function');
3147                         }
3148                         desc['[[Get]]'] = getter;
3149                 }
3150                 if (src(Obj, 'set')) {
3151                         var setter = Obj.set;
3152                         if (typeof setter !== 'undefined' && !IsCallable(setter)) {
3153                                 throw new $TypeError$7('setter must be a function');
3154                         }
3155                         desc['[[Set]]'] = setter;
3156                 }
3157
3158                 if ((src(desc, '[[Get]]') || src(desc, '[[Set]]')) && (src(desc, '[[Value]]') || src(desc, '[[Writable]]'))) {
3159                         throw new $TypeError$7('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
3160                 }
3161                 return desc;
3162         };
3163
3164         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
3165
3166         var SameValue = function SameValue(x, y) {
3167                 if (x === y) { // 0 === -0, but they are not identical.
3168                         if (x === 0) { return 1 / x === 1 / y; }
3169                         return true;
3170                 }
3171                 return _isNaN(x) && _isNaN(y);
3172         };
3173
3174         var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
3175
3176         if ($defineProperty) {
3177                 try {
3178                         $defineProperty({}, 'a', { value: 1 });
3179                 } catch (e) {
3180                         // IE 8 has a broken defineProperty
3181                         $defineProperty = null;
3182                 }
3183         }
3184
3185
3186
3187         var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
3188
3189         // eslint-disable-next-line max-params
3190         var DefineOwnProperty = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {
3191                 if (!$defineProperty) {
3192                         if (!IsDataDescriptor(desc)) {
3193                                 // ES3 does not support getters/setters
3194                                 return false;
3195                         }
3196                         if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
3197                                 return false;
3198                         }
3199
3200                         // fallback for ES3
3201                         if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
3202                                 // a non-enumerable existing property
3203                                 return false;
3204                         }
3205
3206                         // property does not exist at all, or exists but is enumerable
3207                         var V = desc['[[Value]]'];
3208                         // eslint-disable-next-line no-param-reassign
3209                         O[P] = V; // will use [[Define]]
3210                         return SameValue(O[P], V);
3211                 }
3212                 $defineProperty(O, P, FromPropertyDescriptor(desc));
3213                 return true;
3214         };
3215
3216         var every = function every(array, predicate) {
3217                 for (var i = 0; i < array.length; i += 1) {
3218                         if (!predicate(array[i], i, array)) {
3219                                 return false;
3220                         }
3221                 }
3222                 return true;
3223         };
3224
3225         var isSamePropertyDescriptor = function isSamePropertyDescriptor(ES, D1, D2) {
3226                 var fields = [
3227                         '[[Configurable]]',
3228                         '[[Enumerable]]',
3229                         '[[Get]]',
3230                         '[[Set]]',
3231                         '[[Value]]',
3232                         '[[Writable]]'
3233                 ];
3234                 return every(fields, function (field) {
3235                         if ((field in D1) !== (field in D2)) {
3236                                 return false;
3237                         }
3238                         return ES.SameValue(D1[field], D2[field]);
3239                 });
3240         };
3241
3242         // https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
3243
3244         var FromPropertyDescriptor = function FromPropertyDescriptor(Desc) {
3245                 if (typeof Desc === 'undefined') {
3246                         return Desc;
3247                 }
3248
3249                 assertRecord(Type$1, 'Property Descriptor', 'Desc', Desc);
3250
3251                 var obj = {};
3252                 if ('[[Value]]' in Desc) {
3253                         obj.value = Desc['[[Value]]'];
3254                 }
3255                 if ('[[Writable]]' in Desc) {
3256                         obj.writable = Desc['[[Writable]]'];
3257                 }
3258                 if ('[[Get]]' in Desc) {
3259                         obj.get = Desc['[[Get]]'];
3260                 }
3261                 if ('[[Set]]' in Desc) {
3262                         obj.set = Desc['[[Set]]'];
3263                 }
3264                 if ('[[Enumerable]]' in Desc) {
3265                         obj.enumerable = Desc['[[Enumerable]]'];
3266                 }
3267                 if ('[[Configurable]]' in Desc) {
3268                         obj.configurable = Desc['[[Configurable]]'];
3269                 }
3270                 return obj;
3271         };
3272
3273         // https://www.ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
3274
3275         var IsGenericDescriptor = function IsGenericDescriptor(Desc) {
3276                 if (typeof Desc === 'undefined') {
3277                         return false;
3278                 }
3279
3280                 assertRecord(Type$1, 'Property Descriptor', 'Desc', Desc);
3281
3282                 if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
3283                         return true;
3284                 }
3285
3286                 return false;
3287         };
3288
3289         var $TypeError$8 = GetIntrinsic('%TypeError%');
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303         // https://www.ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
3304         // https://www.ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
3305
3306         // eslint-disable-next-line max-lines-per-function, max-statements, max-params
3307         var ValidateAndApplyPropertyDescriptor = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
3308                 // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
3309                 var oType = Type$1(O);
3310                 if (oType !== 'Undefined' && oType !== 'Object') {
3311                         throw new $TypeError$8('Assertion failed: O must be undefined or an Object');
3312                 }
3313                 if (Type$1(extensible) !== 'Boolean') {
3314                         throw new $TypeError$8('Assertion failed: extensible must be a Boolean');
3315                 }
3316                 if (!isPropertyDescriptor({
3317                         Type: Type$1,
3318                         IsDataDescriptor: IsDataDescriptor,
3319                         IsAccessorDescriptor: IsAccessorDescriptor
3320                 }, Desc)) {
3321                         throw new $TypeError$8('Assertion failed: Desc must be a Property Descriptor');
3322                 }
3323                 if (Type$1(current) !== 'Undefined' && !isPropertyDescriptor({
3324                         Type: Type$1,
3325                         IsDataDescriptor: IsDataDescriptor,
3326                         IsAccessorDescriptor: IsAccessorDescriptor
3327                 }, current)) {
3328                         throw new $TypeError$8('Assertion failed: current must be a Property Descriptor, or undefined');
3329                 }
3330                 if (oType !== 'Undefined' && !IsPropertyKey(P)) {
3331                         throw new $TypeError$8('Assertion failed: if O is not undefined, P must be a Property Key');
3332                 }
3333                 if (Type$1(current) === 'Undefined') {
3334                         if (!extensible) {
3335                                 return false;
3336                         }
3337                         if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
3338                                 if (oType !== 'Undefined') {
3339                                         DefineOwnProperty(
3340                                                 IsDataDescriptor,
3341                                                 SameValue,
3342                                                 FromPropertyDescriptor,
3343                                                 O,
3344                                                 P,
3345                                                 {
3346                                                         '[[Configurable]]': Desc['[[Configurable]]'],
3347                                                         '[[Enumerable]]': Desc['[[Enumerable]]'],
3348                                                         '[[Value]]': Desc['[[Value]]'],
3349                                                         '[[Writable]]': Desc['[[Writable]]']
3350                                                 }
3351                                         );
3352                                 }
3353                         } else {
3354                                 if (!IsAccessorDescriptor(Desc)) {
3355                                         throw new $TypeError$8('Assertion failed: Desc is not an accessor descriptor');
3356                                 }
3357                                 if (oType !== 'Undefined') {
3358                                         return DefineOwnProperty(
3359                                                 IsDataDescriptor,
3360                                                 SameValue,
3361                                                 FromPropertyDescriptor,
3362                                                 O,
3363                                                 P,
3364                                                 Desc
3365                                         );
3366                                 }
3367                         }
3368                         return true;
3369                 }
3370                 if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
3371                         return true;
3372                 }
3373                 if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
3374                         return true; // removed by ES2017, but should still be correct
3375                 }
3376                 // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
3377                 if (!current['[[Configurable]]']) {
3378                         if (Desc['[[Configurable]]']) {
3379                                 return false;
3380                         }
3381                         if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
3382                                 return false;
3383                         }
3384                 }
3385                 if (IsGenericDescriptor(Desc)) ; else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
3386                         if (!current['[[Configurable]]']) {
3387                                 return false;
3388                         }
3389                         if (IsDataDescriptor(current)) {
3390                                 if (oType !== 'Undefined') {
3391                                         DefineOwnProperty(
3392                                                 IsDataDescriptor,
3393                                                 SameValue,
3394                                                 FromPropertyDescriptor,
3395                                                 O,
3396                                                 P,
3397                                                 {
3398                                                         '[[Configurable]]': current['[[Configurable]]'],
3399                                                         '[[Enumerable]]': current['[[Enumerable]]'],
3400                                                         '[[Get]]': undefined
3401                                                 }
3402                                         );
3403                                 }
3404                         } else if (oType !== 'Undefined') {
3405                                 DefineOwnProperty(
3406                                         IsDataDescriptor,
3407                                         SameValue,
3408                                         FromPropertyDescriptor,
3409                                         O,
3410                                         P,
3411                                         {
3412                                                 '[[Configurable]]': current['[[Configurable]]'],
3413                                                 '[[Enumerable]]': current['[[Enumerable]]'],
3414                                                 '[[Value]]': undefined
3415                                         }
3416                                 );
3417                         }
3418                 } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
3419                         if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
3420                                 if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
3421                                         return false;
3422                                 }
3423                                 if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
3424                                         return false;
3425                                 }
3426                                 return true;
3427                         }
3428                 } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
3429                         if (!current['[[Configurable]]']) {
3430                                 if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
3431                                         return false;
3432                                 }
3433                                 if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
3434                                         return false;
3435                                 }
3436                                 return true;
3437                         }
3438                 } else {
3439                         throw new $TypeError$8('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
3440                 }
3441                 if (oType !== 'Undefined') {
3442                         return DefineOwnProperty(
3443                                 IsDataDescriptor,
3444                                 SameValue,
3445                                 FromPropertyDescriptor,
3446                                 O,
3447                                 P,
3448                                 Desc
3449                         );
3450                 }
3451                 return true;
3452         };
3453
3454         var $SyntaxError$2 = GetIntrinsic('%SyntaxError%');
3455         var $TypeError$9 = GetIntrinsic('%TypeError%');
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468         // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
3469
3470         var OrdinaryDefineOwnProperty = function OrdinaryDefineOwnProperty(O, P, Desc) {
3471                 if (Type$1(O) !== 'Object') {
3472                         throw new $TypeError$9('Assertion failed: O must be an Object');
3473                 }
3474                 if (!IsPropertyKey(P)) {
3475                         throw new $TypeError$9('Assertion failed: P must be a Property Key');
3476                 }
3477                 if (!isPropertyDescriptor({
3478                         Type: Type$1,
3479                         IsDataDescriptor: IsDataDescriptor,
3480                         IsAccessorDescriptor: IsAccessorDescriptor
3481                 }, Desc)) {
3482                         throw new $TypeError$9('Assertion failed: Desc must be a Property Descriptor');
3483                 }
3484                 if (!getOwnPropertyDescriptor) {
3485                         // ES3/IE 8 fallback
3486                         if (IsAccessorDescriptor(Desc)) {
3487                                 throw new $SyntaxError$2('This environment does not support accessor property descriptors.');
3488                         }
3489                         var creatingNormalDataProperty = !(P in O)
3490                                 && Desc['[[Writable]]']
3491                                 && Desc['[[Enumerable]]']
3492                                 && Desc['[[Configurable]]']
3493                                 && '[[Value]]' in Desc;
3494                         var settingExistingDataProperty = (P in O)
3495                                 && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
3496                                 && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
3497                                 && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
3498                                 && '[[Value]]' in Desc;
3499                         if (creatingNormalDataProperty || settingExistingDataProperty) {
3500                                 O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
3501                                 return SameValue(O[P], Desc['[[Value]]']);
3502                         }
3503                         throw new $SyntaxError$2('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
3504                 }
3505                 var desc = getOwnPropertyDescriptor(O, P);
3506                 var current = desc && ToPropertyDescriptor(desc);
3507                 var extensible = IsExtensible(O);
3508                 return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
3509         };
3510
3511         var regexExec = RegExp.prototype.exec;
3512         var gOPD = Object.getOwnPropertyDescriptor;
3513
3514         var tryRegexExecCall = function tryRegexExec(value) {
3515                 try {
3516                         var lastIndex = value.lastIndex;
3517                         value.lastIndex = 0; // eslint-disable-line no-param-reassign
3518
3519                         regexExec.call(value);
3520                         return true;
3521                 } catch (e) {
3522                         return false;
3523                 } finally {
3524                         value.lastIndex = lastIndex; // eslint-disable-line no-param-reassign
3525                 }
3526         };
3527         var toStr$7 = Object.prototype.toString;
3528         var regexClass = '[object RegExp]';
3529         var hasToStringTag$2 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
3530
3531         var isRegex = function isRegex(value) {
3532                 if (!value || typeof value !== 'object') {
3533                         return false;
3534                 }
3535                 if (!hasToStringTag$2) {
3536                         return toStr$7.call(value) === regexClass;
3537                 }
3538
3539                 var descriptor = gOPD(value, 'lastIndex');
3540                 var hasLastIndexDataProperty = descriptor && src(descriptor, 'value');
3541                 if (!hasLastIndexDataProperty) {
3542                         return false;
3543                 }
3544
3545                 return tryRegexExecCall(value);
3546         };
3547
3548         var $match = GetIntrinsic('%Symbol.match%', true);
3549
3550
3551
3552
3553
3554         // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
3555
3556         var IsRegExp = function IsRegExp(argument) {
3557                 if (!argument || typeof argument !== 'object') {
3558                         return false;
3559                 }
3560                 if ($match) {
3561                         var isRegExp = argument[$match];
3562                         if (typeof isRegExp !== 'undefined') {
3563                                 return ToBoolean(isRegExp);
3564                         }
3565                 }
3566                 return isRegex(argument);
3567         };
3568
3569         var $TypeError$a = GetIntrinsic('%TypeError%');
3570
3571
3572
3573         var $isEnumerable$1 = callBound('Object.prototype.propertyIsEnumerable');
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583         // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
3584
3585         var OrdinaryGetOwnProperty = function OrdinaryGetOwnProperty(O, P) {
3586                 if (Type$1(O) !== 'Object') {
3587                         throw new $TypeError$a('Assertion failed: O must be an Object');
3588                 }
3589                 if (!IsPropertyKey(P)) {
3590                         throw new $TypeError$a('Assertion failed: P must be a Property Key');
3591                 }
3592                 if (!src(O, P)) {
3593                         return void 0;
3594                 }
3595                 if (!getOwnPropertyDescriptor) {
3596                         // ES3 / IE 8 fallback
3597                         var arrayLength = IsArray(O) && P === 'length';
3598                         var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
3599                         return {
3600                                 '[[Configurable]]': !(arrayLength || regexLastIndex),
3601                                 '[[Enumerable]]': $isEnumerable$1(O, P),
3602                                 '[[Value]]': O[P],
3603                                 '[[Writable]]': true
3604                         };
3605                 }
3606                 return ToPropertyDescriptor(getOwnPropertyDescriptor(O, P));
3607         };
3608
3609         var $String = GetIntrinsic('%String%');
3610         var $TypeError$b = GetIntrinsic('%TypeError%');
3611
3612         // https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
3613
3614         var ToString = function ToString(argument) {
3615                 if (typeof argument === 'symbol') {
3616                         throw new $TypeError$b('Cannot convert a Symbol value to a string');
3617                 }
3618                 return $String(argument);
3619         };
3620
3621         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.6
3622
3623         var ToUint32 = function ToUint32(x) {
3624                 return ToNumber(x) >>> 0;
3625         };
3626
3627         var $RangeError$1 = GetIntrinsic('%RangeError%');
3628         var $TypeError$c = GetIntrinsic('%TypeError%');
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644         // https://www.ecma-international.org/ecma-262/6.0/#sec-arraysetlength
3645
3646         // eslint-disable-next-line max-statements, max-lines-per-function
3647         var ArraySetLength = function ArraySetLength(A, Desc) {
3648                 if (!IsArray(A)) {
3649                         throw new $TypeError$c('Assertion failed: A must be an Array');
3650                 }
3651                 if (!isPropertyDescriptor({
3652                         Type: Type$1,
3653                         IsDataDescriptor: IsDataDescriptor,
3654                         IsAccessorDescriptor: IsAccessorDescriptor
3655                 }, Desc)) {
3656                         throw new $TypeError$c('Assertion failed: Desc must be a Property Descriptor');
3657                 }
3658                 if (!('[[Value]]' in Desc)) {
3659                         return OrdinaryDefineOwnProperty(A, 'length', Desc);
3660                 }
3661                 var newLenDesc = object_assign({}, Desc);
3662                 var newLen = ToUint32(Desc['[[Value]]']);
3663                 var numberLen = ToNumber(Desc['[[Value]]']);
3664                 if (newLen !== numberLen) {
3665                         throw new $RangeError$1('Invalid array length');
3666                 }
3667                 newLenDesc['[[Value]]'] = newLen;
3668                 var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
3669                 if (!IsDataDescriptor(oldLenDesc)) {
3670                         throw new $TypeError$c('Assertion failed: an array had a non-data descriptor on `length`');
3671                 }
3672                 var oldLen = oldLenDesc['[[Value]]'];
3673                 if (newLen >= oldLen) {
3674                         return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
3675                 }
3676                 if (!oldLenDesc['[[Writable]]']) {
3677                         return false;
3678                 }
3679                 var newWritable;
3680                 if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
3681                         newWritable = true;
3682                 } else {
3683                         newWritable = false;
3684                         newLenDesc['[[Writable]]'] = true;
3685                 }
3686                 var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
3687                 if (!succeeded) {
3688                         return false;
3689                 }
3690                 while (newLen < oldLen) {
3691                         oldLen -= 1;
3692                         // eslint-disable-next-line no-param-reassign
3693                         var deleteSucceeded = delete A[ToString(oldLen)];
3694                         if (!deleteSucceeded) {
3695                                 newLenDesc['[[Value]]'] = oldLen + 1;
3696                                 if (!newWritable) {
3697                                         newLenDesc['[[Writable]]'] = false;
3698                                         OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
3699                                         return false;
3700                                 }
3701                         }
3702                 }
3703                 if (!newWritable) {
3704                         return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
3705                 }
3706                 return true;
3707         };
3708
3709         var objectInspect = function inspect_ (obj, opts, depth, seen) {
3710             if (!opts) { opts = {}; }
3711             
3712             var maxDepth = opts.depth === undefined ? 5 : opts.depth;
3713             if (depth === undefined) { depth = 0; }
3714             if (depth > maxDepth && maxDepth > 0) { return '...'; }
3715             
3716             if (seen === undefined) { seen = []; }
3717             else if (indexOf$2(seen, obj) >= 0) {
3718                 return '[Circular]';
3719             }
3720             
3721             function inspect (value, from) {
3722                 if (from) {
3723                     seen = seen.slice();
3724                     seen.push(from);
3725                 }
3726                 return inspect_(value, opts, depth + 1, seen);
3727             }
3728             
3729             if (typeof obj === 'string') {
3730                 return inspectString(obj);
3731             }
3732             else if (typeof obj === 'function') {
3733                 var name = nameOf(obj);
3734                 return '[Function' + (name ? ': ' + name : '') + ']';
3735             }
3736             else if (obj === null) {
3737                 return 'null';
3738             }
3739             else if (isElement(obj)) {
3740                 var s = '<' + String(obj.nodeName).toLowerCase();
3741                 var attrs = obj.attributes || [];
3742                 for (var i = 0; i < attrs.length; i++) {
3743                     s += ' ' + attrs[i].name + '="' + quote(attrs[i].value) + '"';
3744                 }
3745                 s += '>';
3746                 if (obj.childNodes && obj.childNodes.length) { s += '...'; }
3747                 s += '</' + String(obj.tagName).toLowerCase() + '>';
3748                 return s;
3749             }
3750             else if (isArray$3(obj)) {
3751                 if (obj.length === 0) { return '[]'; }
3752                 var xs = Array(obj.length);
3753                 for (var i = 0; i < obj.length; i++) {
3754                     xs[i] = has$1(obj, i) ? inspect(obj[i], obj) : '';
3755                 }
3756                 return '[ ' + xs.join(', ') + ' ]';
3757             }
3758             else if (typeof obj === 'object' && typeof obj.inspect === 'function') {
3759                 return obj.inspect();
3760             }
3761             else if (typeof obj === 'object' && !isDate(obj) && !isRegExp(obj)) {
3762                 var xs = [], keys = [];
3763                 for (var key in obj) {
3764                     if (has$1(obj, key)) { keys.push(key); }
3765                 }
3766                 keys.sort();
3767                 for (var i = 0; i < keys.length; i++) {
3768                     var key = keys[i];
3769                     if (/[^\w$]/.test(key)) {
3770                         xs.push(inspect(key) + ': ' + inspect(obj[key], obj));
3771                     }
3772                     else { xs.push(key + ': ' + inspect(obj[key], obj)); }
3773                 }
3774                 if (xs.length === 0) { return '{}'; }
3775                 return '{ ' + xs.join(', ') + ' }';
3776             }
3777             else { return String(obj); }
3778         };
3779
3780         function quote (s) {
3781             return String(s).replace(/"/g, '&quot;');
3782         }
3783
3784         function isArray$3 (obj) {
3785             return {}.toString.call(obj) === '[object Array]';
3786         }
3787
3788         function isDate (obj) {
3789             return {}.toString.call(obj) === '[object Date]';
3790         }
3791
3792         function isRegExp (obj) {
3793             return {}.toString.call(obj) === '[object RegExp]';
3794         }
3795
3796         function has$1 (obj, key) {
3797             if (!{}.hasOwnProperty) { return key in obj; }
3798             return {}.hasOwnProperty.call(obj, key);
3799         }
3800
3801         function nameOf (f) {
3802             if (f.name) { return f.name; }
3803             var m = f.toString().match(/^function\s*([\w$]+)/);
3804             if (m) { return m[1]; }
3805         }
3806
3807         function indexOf$2 (xs, x) {
3808             if (xs.indexOf) { return xs.indexOf(x); }
3809             for (var i = 0, l = xs.length; i < l; i++) {
3810                 if (xs[i] === x) { return i; }
3811             }
3812             return -1;
3813         }
3814
3815         function isElement (x) {
3816             if (!x || typeof x !== 'object') { return false; }
3817             if (typeof HTMLElement !== 'undefined') {
3818                 return x instanceof HTMLElement;
3819             }
3820             else { return typeof x.nodeName === 'string'
3821                 && typeof x.getAttribute === 'function'
3822             ; }
3823         }
3824
3825         function inspectString (str) {
3826             var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);
3827             return "'" + s + "'";
3828             
3829             function lowbyte (c) {
3830                 var n = c.charCodeAt(0);
3831                 var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n];
3832                 if (x) { return '\\' + x; }
3833                 return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16);
3834             }
3835         }
3836
3837         var $TypeError$d = GetIntrinsic('%TypeError%');
3838
3839
3840
3841
3842
3843
3844         /**
3845          * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
3846          * 1. Assert: Type(O) is Object.
3847          * 2. Assert: IsPropertyKey(P) is true.
3848          * 3. Return O.[[Get]](P, O).
3849          */
3850
3851         var Get = function Get(O, P) {
3852                 // 7.3.1.1
3853                 if (Type$1(O) !== 'Object') {
3854                         throw new $TypeError$d('Assertion failed: Type(O) is not Object');
3855                 }
3856                 // 7.3.1.2
3857                 if (!IsPropertyKey(P)) {
3858                         throw new $TypeError$d('Assertion failed: IsPropertyKey(P) is not true, got ' + objectInspect(P));
3859                 }
3860                 // 7.3.1.3
3861                 return O[P];
3862         };
3863
3864         // https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
3865
3866         var IsConstructor = function IsConstructor(argument) {
3867                 return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
3868         };
3869
3870         var $Array$1 = GetIntrinsic('%Array%');
3871         var $species = GetIntrinsic('%Symbol.species%', true);
3872         var $TypeError$e = GetIntrinsic('%TypeError%');
3873
3874
3875
3876
3877
3878
3879
3880         // https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
3881
3882         var ArraySpeciesCreate = function ArraySpeciesCreate(originalArray, length) {
3883                 if (!IsInteger(length) || length < 0) {
3884                         throw new $TypeError$e('Assertion failed: length must be an integer >= 0');
3885                 }
3886                 var len = length === 0 ? 0 : length;
3887                 var C;
3888                 var isArray = IsArray(originalArray);
3889                 if (isArray) {
3890                         C = Get(originalArray, 'constructor');
3891                         // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
3892                         // if (IsConstructor(C)) {
3893                         //      if C is another realm's Array, C = undefined
3894                         //      Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
3895                         // }
3896                         if ($species && Type$1(C) === 'Object') {
3897                                 C = Get(C, $species);
3898                                 if (C === null) {
3899                                         C = void 0;
3900                                 }
3901                         }
3902                 }
3903                 if (typeof C === 'undefined') {
3904                         return $Array$1(len);
3905                 }
3906                 if (!IsConstructor(C)) {
3907                         throw new $TypeError$e('C must be a constructor');
3908                 }
3909                 return new C(len); // Construct(C, len);
3910         };
3911
3912         var $TypeError$f = GetIntrinsic('%TypeError%');
3913
3914
3915
3916
3917
3918         // https://www.ecma-international.org/ecma-262/6.0/#sec-call
3919
3920         var Call = function Call(F, V) {
3921                 var args = arguments.length > 2 ? arguments[2] : [];
3922                 if (!IsCallable(F)) {
3923                         throw new $TypeError$f(objectInspect(F) + ' is not a function');
3924                 }
3925                 return F.apply(V, args);
3926         };
3927
3928         var $TypeError$g = GetIntrinsic('%TypeError%');
3929
3930
3931
3932
3933
3934
3935         // https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
3936
3937         var CanonicalNumericIndexString = function CanonicalNumericIndexString(argument) {
3938                 if (Type$1(argument) !== 'String') {
3939                         throw new $TypeError$g('Assertion failed: `argument` must be a String');
3940                 }
3941                 if (argument === '-0') { return -0; }
3942                 var n = ToNumber(argument);
3943                 if (SameValue(ToString(n), argument)) { return n; }
3944                 return void 0;
3945         };
3946
3947         // https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
3948
3949         var CompletePropertyDescriptor = function CompletePropertyDescriptor(Desc) {
3950                 /* eslint no-param-reassign: 0 */
3951                 assertRecord(Type$1, 'Property Descriptor', 'Desc', Desc);
3952
3953                 if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
3954                         if (!src(Desc, '[[Value]]')) {
3955                                 Desc['[[Value]]'] = void 0;
3956                         }
3957                         if (!src(Desc, '[[Writable]]')) {
3958                                 Desc['[[Writable]]'] = false;
3959                         }
3960                 } else {
3961                         if (!src(Desc, '[[Get]]')) {
3962                                 Desc['[[Get]]'] = void 0;
3963                         }
3964                         if (!src(Desc, '[[Set]]')) {
3965                                 Desc['[[Set]]'] = void 0;
3966                         }
3967                 }
3968                 if (!src(Desc, '[[Enumerable]]')) {
3969                         Desc['[[Enumerable]]'] = false;
3970                 }
3971                 if (!src(Desc, '[[Configurable]]')) {
3972                         Desc['[[Configurable]]'] = false;
3973                 }
3974                 return Desc;
3975         };
3976
3977         var $TypeError$h = GetIntrinsic('%TypeError%');
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989         // https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
3990
3991         var CreateDataProperty = function CreateDataProperty(O, P, V) {
3992                 if (Type$1(O) !== 'Object') {
3993                         throw new $TypeError$h('Assertion failed: Type(O) is not Object');
3994                 }
3995                 if (!IsPropertyKey(P)) {
3996                         throw new $TypeError$h('Assertion failed: IsPropertyKey(P) is not true');
3997                 }
3998                 var oldDesc = OrdinaryGetOwnProperty(O, P);
3999                 var extensible = oldDesc || IsExtensible(O);
4000                 var immutable = oldDesc && (!oldDesc.writable || !oldDesc.configurable);
4001                 if (immutable || !extensible) {
4002                         return false;
4003                 }
4004                 return DefineOwnProperty(
4005                         IsDataDescriptor,
4006                         SameValue,
4007                         FromPropertyDescriptor,
4008                         O,
4009                         P,
4010                         {
4011                                 '[[Configurable]]': true,
4012                                 '[[Enumerable]]': true,
4013                                 '[[Value]]': V,
4014                                 '[[Writable]]': true
4015                         }
4016                 );
4017         };
4018
4019         var $TypeError$i = GetIntrinsic('%TypeError%');
4020
4021
4022
4023
4024
4025         // // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
4026
4027         var CreateDataPropertyOrThrow = function CreateDataPropertyOrThrow(O, P, V) {
4028                 if (Type$1(O) !== 'Object') {
4029                         throw new $TypeError$i('Assertion failed: Type(O) is not Object');
4030                 }
4031                 if (!IsPropertyKey(P)) {
4032                         throw new $TypeError$i('Assertion failed: IsPropertyKey(P) is not true');
4033                 }
4034                 var success = CreateDataProperty(O, P, V);
4035                 if (!success) {
4036                         throw new $TypeError$i('unable to create data property');
4037                 }
4038                 return success;
4039         };
4040
4041         var $TypeError$j = GetIntrinsic('%TypeError%');
4042
4043         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.10
4044
4045         var CheckObjectCoercible = function CheckObjectCoercible(value, optMessage) {
4046                 if (value == null) {
4047                         throw new $TypeError$j(optMessage || ('Cannot call method on ' + value));
4048                 }
4049                 return value;
4050         };
4051
4052         var RequireObjectCoercible = CheckObjectCoercible;
4053
4054         var $TypeError$k = GetIntrinsic('%TypeError%');
4055
4056
4057
4058         var $replace$2 = callBound('String.prototype.replace');
4059
4060
4061
4062
4063
4064         // https://www.ecma-international.org/ecma-262/6.0/#sec-createhtml
4065
4066         var CreateHTML = function CreateHTML(string, tag, attribute, value) {
4067                 if (Type$1(tag) !== 'String' || Type$1(attribute) !== 'String') {
4068                         throw new $TypeError$k('Assertion failed: `tag` and `attribute` must be strings');
4069                 }
4070                 var str = RequireObjectCoercible(string);
4071                 var S = ToString(str);
4072                 var p1 = '<' + tag;
4073                 if (attribute !== '') {
4074                         var V = ToString(value);
4075                         var escapedV = $replace$2(V, /\x22/g, '&quot;');
4076                         p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
4077                 }
4078                 return p1 + '>' + S + '</' + tag + '>';
4079         };
4080
4081         var $TypeError$l = GetIntrinsic('%TypeError%');
4082
4083
4084
4085         // https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
4086
4087         var CreateIterResultObject = function CreateIterResultObject(value, done) {
4088                 if (Type$1(done) !== 'Boolean') {
4089                         throw new $TypeError$l('Assertion failed: Type(done) is not Boolean');
4090                 }
4091                 return {
4092                         value: value,
4093                         done: done
4094                 };
4095         };
4096
4097         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.3
4098
4099         var ToNumber$1 = function ToNumber(value) {
4100                 return +value; // eslint-disable-line no-implicit-coercion
4101         };
4102
4103         var sign$1 = function sign(number) {
4104                 return number >= 0 ? 1 : -1;
4105         };
4106
4107         var $Math$2 = GetIntrinsic('%Math%');
4108
4109
4110
4111
4112
4113
4114         var $floor$1 = $Math$2.floor;
4115         var $abs$1 = $Math$2.abs;
4116
4117         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.4
4118
4119         var ToInteger = function ToInteger(value) {
4120                 var number = ToNumber$1(value);
4121                 if (_isNaN(number)) { return 0; }
4122                 if (number === 0 || !_isFinite(number)) { return number; }
4123                 return sign$1(number) * $floor$1($abs$1(number));
4124         };
4125
4126         // https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
4127
4128         var ToInteger$1 = function ToInteger$1(value) {
4129                 var number = ToNumber(value);
4130                 return ToInteger(number);
4131         };
4132
4133         var ToLength = function ToLength(argument) {
4134                 var len = ToInteger$1(argument);
4135                 if (len <= 0) { return 0; } // includes converting -0 to +0
4136                 if (len > maxSafeInteger) { return maxSafeInteger; }
4137                 return len;
4138         };
4139
4140         var $TypeError$m = GetIntrinsic('%TypeError%');
4141         var $indexOf$1 = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
4142         var $push = callBound('Array.prototype.push');
4143
4144
4145
4146
4147
4148
4149
4150         // https://ecma-international.org/ecma-262/6.0/#sec-createlistfromarraylike
4151         var CreateListFromArrayLike = function CreateListFromArrayLike(obj) {
4152                 var elementTypes = arguments.length > 1
4153                         ? arguments[1]
4154                         : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
4155
4156                 if (Type$1(obj) !== 'Object') {
4157                         throw new $TypeError$m('Assertion failed: `obj` must be an Object');
4158                 }
4159                 if (!IsArray(elementTypes)) {
4160                         throw new $TypeError$m('Assertion failed: `elementTypes`, if provided, must be an array');
4161                 }
4162                 var len = ToLength(Get(obj, 'length'));
4163                 var list = [];
4164                 var index = 0;
4165                 while (index < len) {
4166                         var indexName = ToString(index);
4167                         var next = Get(obj, indexName);
4168                         var nextType = Type$1(next);
4169                         if ($indexOf$1(elementTypes, nextType) < 0) {
4170                                 throw new $TypeError$m('item type ' + nextType + ' is not a valid elementType');
4171                         }
4172                         $push(list, next);
4173                         index += 1;
4174                 }
4175                 return list;
4176         };
4177
4178         var $TypeError$n = GetIntrinsic('%TypeError%');
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188         // https://www.ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
4189
4190         var CreateMethodProperty = function CreateMethodProperty(O, P, V) {
4191                 if (Type$1(O) !== 'Object') {
4192                         throw new $TypeError$n('Assertion failed: Type(O) is not Object');
4193                 }
4194
4195                 if (!IsPropertyKey(P)) {
4196                         throw new $TypeError$n('Assertion failed: IsPropertyKey(P) is not true');
4197                 }
4198
4199                 var newDesc = {
4200                         '[[Configurable]]': true,
4201                         '[[Enumerable]]': false,
4202                         '[[Value]]': V,
4203                         '[[Writable]]': true
4204                 };
4205                 return DefineOwnProperty(
4206                         IsDataDescriptor,
4207                         SameValue,
4208                         FromPropertyDescriptor,
4209                         O,
4210                         P,
4211                         newDesc
4212                 );
4213         };
4214
4215         var HoursPerDay = 24;
4216         var MinutesPerHour = 60;
4217         var SecondsPerMinute = 60;
4218         var msPerSecond = 1e3;
4219         var msPerMinute = msPerSecond * SecondsPerMinute;
4220         var msPerHour = msPerMinute * MinutesPerHour;
4221         var msPerDay = 86400000;
4222
4223         var timeConstants = {
4224                 HoursPerDay: HoursPerDay,
4225                 MinutesPerHour: MinutesPerHour,
4226                 SecondsPerMinute: SecondsPerMinute,
4227                 msPerSecond: msPerSecond,
4228                 msPerMinute: msPerMinute,
4229                 msPerHour: msPerHour,
4230                 msPerDay: msPerDay
4231         };
4232
4233         var $floor$2 = GetIntrinsic('%Math.floor%');
4234
4235         var msPerDay$1 = timeConstants.msPerDay;
4236
4237         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
4238
4239         var Day = function Day(t) {
4240                 return $floor$2(t / msPerDay$1);
4241         };
4242
4243         var $floor$3 = GetIntrinsic('%Math.floor%');
4244
4245         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
4246
4247         var DayFromYear = function DayFromYear(y) {
4248                 return (365 * (y - 1970)) + $floor$3((y - 1969) / 4) - $floor$3((y - 1901) / 100) + $floor$3((y - 1601) / 400);
4249         };
4250
4251         var $Date = GetIntrinsic('%Date%');
4252
4253
4254
4255         var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
4256
4257         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
4258
4259         var YearFromTime = function YearFromTime(t) {
4260                 // largest y such that this.TimeFromYear(y) <= t
4261                 return $getUTCFullYear(new $Date(t));
4262         };
4263
4264         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
4265
4266         var DayWithinYear = function DayWithinYear(t) {
4267                 return Day(t) - DayFromYear(YearFromTime(t));
4268         };
4269
4270         var mod = function mod(number, modulo) {
4271                 var remain = number % modulo;
4272                 return Math.floor(remain >= 0 ? remain : remain + modulo);
4273         };
4274
4275         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
4276
4277         var DaysInYear = function DaysInYear(y) {
4278                 if (mod(y, 4) !== 0) {
4279                         return 365;
4280                 }
4281                 if (mod(y, 100) !== 0) {
4282                         return 366;
4283                 }
4284                 if (mod(y, 400) !== 0) {
4285                         return 365;
4286                 }
4287                 return 366;
4288         };
4289
4290         var $EvalError = GetIntrinsic('%EvalError%');
4291
4292
4293
4294
4295         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
4296
4297         var InLeapYear = function InLeapYear(t) {
4298                 var days = DaysInYear(YearFromTime(t));
4299                 if (days === 365) {
4300                         return 0;
4301                 }
4302                 if (days === 366) {
4303                         return 1;
4304                 }
4305                 throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
4306         };
4307
4308         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.4
4309
4310         var MonthFromTime = function MonthFromTime(t) {
4311                 var day = DayWithinYear(t);
4312                 if (0 <= day && day < 31) {
4313                         return 0;
4314                 }
4315                 var leap = InLeapYear(t);
4316                 if (31 <= day && day < (59 + leap)) {
4317                         return 1;
4318                 }
4319                 if ((59 + leap) <= day && day < (90 + leap)) {
4320                         return 2;
4321                 }
4322                 if ((90 + leap) <= day && day < (120 + leap)) {
4323                         return 3;
4324                 }
4325                 if ((120 + leap) <= day && day < (151 + leap)) {
4326                         return 4;
4327                 }
4328                 if ((151 + leap) <= day && day < (181 + leap)) {
4329                         return 5;
4330                 }
4331                 if ((181 + leap) <= day && day < (212 + leap)) {
4332                         return 6;
4333                 }
4334                 if ((212 + leap) <= day && day < (243 + leap)) {
4335                         return 7;
4336                 }
4337                 if ((243 + leap) <= day && day < (273 + leap)) {
4338                         return 8;
4339                 }
4340                 if ((273 + leap) <= day && day < (304 + leap)) {
4341                         return 9;
4342                 }
4343                 if ((304 + leap) <= day && day < (334 + leap)) {
4344                         return 10;
4345                 }
4346                 if ((334 + leap) <= day && day < (365 + leap)) {
4347                         return 11;
4348                 }
4349         };
4350
4351         var $EvalError$1 = GetIntrinsic('%EvalError%');
4352
4353
4354
4355
4356
4357         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.5
4358
4359         var DateFromTime = function DateFromTime(t) {
4360                 var m = MonthFromTime(t);
4361                 var d = DayWithinYear(t);
4362                 if (m === 0) {
4363                         return d + 1;
4364                 }
4365                 if (m === 1) {
4366                         return d - 30;
4367                 }
4368                 var leap = InLeapYear(t);
4369                 if (m === 2) {
4370                         return d - 58 - leap;
4371                 }
4372                 if (m === 3) {
4373                         return d - 89 - leap;
4374                 }
4375                 if (m === 4) {
4376                         return d - 119 - leap;
4377                 }
4378                 if (m === 5) {
4379                         return d - 150 - leap;
4380                 }
4381                 if (m === 6) {
4382                         return d - 180 - leap;
4383                 }
4384                 if (m === 7) {
4385                         return d - 211 - leap;
4386                 }
4387                 if (m === 8) {
4388                         return d - 242 - leap;
4389                 }
4390                 if (m === 9) {
4391                         return d - 272 - leap;
4392                 }
4393                 if (m === 10) {
4394                         return d - 303 - leap;
4395                 }
4396                 if (m === 11) {
4397                         return d - 333 - leap;
4398                 }
4399                 throw new $EvalError$1('Assertion failed: MonthFromTime returned an impossible value: ' + m);
4400         };
4401
4402         var $TypeError$o = GetIntrinsic('%TypeError%');
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415         // https://www.ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
4416
4417         var DefinePropertyOrThrow = function DefinePropertyOrThrow(O, P, desc) {
4418                 if (Type$1(O) !== 'Object') {
4419                         throw new $TypeError$o('Assertion failed: Type(O) is not Object');
4420                 }
4421
4422                 if (!IsPropertyKey(P)) {
4423                         throw new $TypeError$o('Assertion failed: IsPropertyKey(P) is not true');
4424                 }
4425
4426                 var Desc = isPropertyDescriptor({
4427                         Type: Type$1,
4428                         IsDataDescriptor: IsDataDescriptor,
4429                         IsAccessorDescriptor: IsAccessorDescriptor
4430                 }, desc) ? desc : ToPropertyDescriptor(desc);
4431                 if (!isPropertyDescriptor({
4432                         Type: Type$1,
4433                         IsDataDescriptor: IsDataDescriptor,
4434                         IsAccessorDescriptor: IsAccessorDescriptor
4435                 }, Desc)) {
4436                         throw new $TypeError$o('Assertion failed: Desc is not a valid Property Descriptor');
4437                 }
4438
4439                 return DefineOwnProperty(
4440                         IsDataDescriptor,
4441                         SameValue,
4442                         FromPropertyDescriptor,
4443                         O,
4444                         P,
4445                         Desc
4446                 );
4447         };
4448
4449         var $TypeError$p = GetIntrinsic('%TypeError%');
4450
4451
4452
4453
4454         // https://www.ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
4455
4456         var DeletePropertyOrThrow = function DeletePropertyOrThrow(O, P) {
4457                 if (Type$1(O) !== 'Object') {
4458                         throw new $TypeError$p('Assertion failed: Type(O) is not Object');
4459                 }
4460
4461                 if (!IsPropertyKey(P)) {
4462                         throw new $TypeError$p('Assertion failed: IsPropertyKey(P) is not true');
4463                 }
4464
4465                 // eslint-disable-next-line no-param-reassign
4466                 var success = delete O[P];
4467                 if (!success) {
4468                         throw new $TypeError$p('Attempt to delete property failed.');
4469                 }
4470                 return success;
4471         };
4472
4473         var $TypeError$q = GetIntrinsic('%TypeError%');
4474
4475
4476
4477
4478
4479         // https://www.ecma-international.org/ecma-262/6.0/#sec-enumerableownnames
4480
4481         var EnumerableOwnNames = function EnumerableOwnNames(O) {
4482                 if (Type$1(O) !== 'Object') {
4483                         throw new $TypeError$q('Assertion failed: Type(O) is not Object');
4484                 }
4485
4486                 return objectKeys(O);
4487         };
4488
4489         var hasSymbols$5 = hasSymbols$1();
4490
4491
4492
4493         var $iterator = GetIntrinsic('%Symbol.iterator%', true);
4494         var $stringSlice = callBound('String.prototype.slice');
4495
4496         var getIteratorMethod = function getIteratorMethod(ES, iterable) {
4497                 var usingIterator;
4498                 if (hasSymbols$5) {
4499                         usingIterator = ES.GetMethod(iterable, $iterator);
4500                 } else if (ES.IsArray(iterable)) {
4501                         usingIterator = function () {
4502                                 var i = -1;
4503                                 var arr = this; // eslint-disable-line no-invalid-this
4504                                 return {
4505                                         next: function () {
4506                                                 i += 1;
4507                                                 return {
4508                                                         done: i >= arr.length,
4509                                                         value: arr[i]
4510                                                 };
4511                                         }
4512                                 };
4513                         };
4514                 } else if (ES.Type(iterable) === 'String') {
4515                         usingIterator = function () {
4516                                 var i = 0;
4517                                 return {
4518                                         next: function () {
4519                                                 var nextIndex = ES.AdvanceStringIndex(iterable, i, true);
4520                                                 var value = $stringSlice(iterable, i, nextIndex);
4521                                                 i = nextIndex;
4522                                                 return {
4523                                                         done: nextIndex > iterable.length,
4524                                                         value: value
4525                                                 };
4526                                         }
4527                                 };
4528                         };
4529                 }
4530                 return usingIterator;
4531         };
4532
4533         var $Object$1 = GetIntrinsic('%Object%');
4534
4535
4536
4537         // https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
4538
4539         var ToObject = function ToObject(value) {
4540                 RequireObjectCoercible(value);
4541                 return $Object$1(value);
4542         };
4543
4544         var $TypeError$r = GetIntrinsic('%TypeError%');
4545
4546
4547
4548
4549         /**
4550          * 7.3.2 GetV (V, P)
4551          * 1. Assert: IsPropertyKey(P) is true.
4552          * 2. Let O be ToObject(V).
4553          * 3. ReturnIfAbrupt(O).
4554          * 4. Return O.[[Get]](P, V).
4555          */
4556
4557         var GetV = function GetV(V, P) {
4558                 // 7.3.2.1
4559                 if (!IsPropertyKey(P)) {
4560                         throw new $TypeError$r('Assertion failed: IsPropertyKey(P) is not true');
4561                 }
4562
4563                 // 7.3.2.2-3
4564                 var O = ToObject(V);
4565
4566                 // 7.3.2.4
4567                 return O[P];
4568         };
4569
4570         var $TypeError$s = GetIntrinsic('%TypeError%');
4571
4572
4573
4574
4575
4576         /**
4577          * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
4578          * 1. Assert: IsPropertyKey(P) is true.
4579          * 2. Let func be GetV(O, P).
4580          * 3. ReturnIfAbrupt(func).
4581          * 4. If func is either undefined or null, return undefined.
4582          * 5. If IsCallable(func) is false, throw a TypeError exception.
4583          * 6. Return func.
4584          */
4585
4586         var GetMethod$1 = function GetMethod(O, P) {
4587                 // 7.3.9.1
4588                 if (!IsPropertyKey(P)) {
4589                         throw new $TypeError$s('Assertion failed: IsPropertyKey(P) is not true');
4590                 }
4591
4592                 // 7.3.9.2
4593                 var func = GetV(O, P);
4594
4595                 // 7.3.9.4
4596                 if (func == null) {
4597                         return void 0;
4598                 }
4599
4600                 // 7.3.9.5
4601                 if (!IsCallable(func)) {
4602                         throw new $TypeError$s(P + 'is not a function');
4603                 }
4604
4605                 // 7.3.9.6
4606                 return func;
4607         };
4608
4609         var $TypeError$t = GetIntrinsic('%TypeError%');
4610
4611
4612
4613
4614
4615
4616
4617
4618         // https://ecma-international.org/ecma-262/6.0/#sec-getiterator
4619
4620         var GetIterator = function GetIterator(obj, method) {
4621                 var actualMethod = method;
4622                 if (arguments.length < 2) {
4623                         actualMethod = getIteratorMethod(
4624                                 {
4625                                         AdvanceStringIndex: AdvanceStringIndex,
4626                                         GetMethod: GetMethod$1,
4627                                         IsArray: IsArray,
4628                                         Type: Type$1
4629                                 },
4630                                 obj
4631                         );
4632                 }
4633                 var iterator = Call(actualMethod, obj);
4634                 if (Type$1(iterator) !== 'Object') {
4635                         throw new $TypeError$t('iterator must return an object');
4636                 }
4637
4638                 return iterator;
4639         };
4640
4641         var hasSymbols$6 = hasSymbols$1();
4642
4643         var $TypeError$u = GetIntrinsic('%TypeError%');
4644
4645         var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
4646         var $gOPS = hasSymbols$6 && GetIntrinsic('%Object.getOwnPropertySymbols%');
4647
4648
4649
4650
4651         // https://www.ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
4652
4653         var GetOwnPropertyKeys = function GetOwnPropertyKeys(O, Type) {
4654                 if (Type$1(O) !== 'Object') {
4655                         throw new $TypeError$u('Assertion failed: Type(O) is not Object');
4656                 }
4657                 if (Type === 'Symbol') {
4658                         return $gOPS ? $gOPS(O) : [];
4659                 }
4660                 if (Type === 'String') {
4661                         if (!$gOPN) {
4662                                 return objectKeys(O);
4663                         }
4664                         return $gOPN(O);
4665                 }
4666                 throw new $TypeError$u('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
4667         };
4668
4669         var $Function$1 = GetIntrinsic('%Function%');
4670         var $TypeError$v = GetIntrinsic('%TypeError%');
4671
4672
4673
4674
4675
4676         // https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
4677
4678         var GetPrototypeFromConstructor = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
4679                 var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
4680                 if (!IsConstructor(constructor)) {
4681                         throw new $TypeError$v('Assertion failed: `constructor` must be a constructor');
4682                 }
4683                 var proto = Get(constructor, 'prototype');
4684                 if (Type$1(proto) !== 'Object') {
4685                         if (!(constructor instanceof $Function$1)) {
4686                                 // ignore other realms, for now
4687                                 throw new $TypeError$v('cross-realm constructors not currently supported');
4688                         }
4689                         proto = intrinsic;
4690                 }
4691                 return proto;
4692         };
4693
4694         var $TypeError$w = GetIntrinsic('%TypeError%');
4695         var $parseInt = GetIntrinsic('%parseInt%');
4696
4697
4698
4699
4700
4701
4702
4703         var isDigit = regexTester(/^[0-9]$/);
4704
4705         var $charAt = callBound('String.prototype.charAt');
4706         var $strSlice$2 = callBound('String.prototype.slice');
4707
4708
4709
4710
4711
4712         var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
4713
4714         var isStringOrHole = function (capture, index, arr) {
4715                 return Type$1(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type$1(capture) === 'Undefined');
4716         };
4717
4718         // https://www.ecma-international.org/ecma-262/6.0/#sec-getsubstitution
4719
4720         // eslint-disable-next-line max-statements, max-params, max-lines-per-function
4721         var GetSubstitution = function GetSubstitution(matched, str, position, captures, replacement) {
4722                 if (Type$1(matched) !== 'String') {
4723                         throw new $TypeError$w('Assertion failed: `matched` must be a String');
4724                 }
4725                 var matchLength = matched.length;
4726
4727                 if (Type$1(str) !== 'String') {
4728                         throw new $TypeError$w('Assertion failed: `str` must be a String');
4729                 }
4730                 var stringLength = str.length;
4731
4732                 if (!IsInteger(position) || position < 0 || position > stringLength) {
4733                         throw new $TypeError$w('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + objectInspect(position));
4734                 }
4735
4736                 if (!IsArray(captures) || !every(captures, isStringOrHole)) {
4737                         throw new $TypeError$w('Assertion failed: `captures` must be a List of Strings, got ' + objectInspect(captures));
4738                 }
4739
4740                 if (Type$1(replacement) !== 'String') {
4741                         throw new $TypeError$w('Assertion failed: `replacement` must be a String');
4742                 }
4743
4744                 var tailPos = position + matchLength;
4745                 var m = captures.length;
4746
4747                 var result = '';
4748                 for (var i = 0; i < replacement.length; i += 1) {
4749                         // if this is a $, and it's not the end of the replacement
4750                         var current = $charAt(replacement, i);
4751                         var isLast = (i + 1) >= replacement.length;
4752                         var nextIsLast = (i + 2) >= replacement.length;
4753                         if (current === '$' && !isLast) {
4754                                 var next = $charAt(replacement, i + 1);
4755                                 if (next === '$') {
4756                                         result += '$';
4757                                         i += 1;
4758                                 } else if (next === '&') {
4759                                         result += matched;
4760                                         i += 1;
4761                                 } else if (next === '`') {
4762                                         result += position === 0 ? '' : $strSlice$2(str, 0, position - 1);
4763                                         i += 1;
4764                                 } else if (next === "'") {
4765                                         result += tailPos >= stringLength ? '' : $strSlice$2(str, tailPos);
4766                                         i += 1;
4767                                 } else {
4768                                         var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
4769                                         if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
4770                                                 // $1 through $9, and not followed by a digit
4771                                                 var n = $parseInt(next, 10);
4772                                                 // if (n > m, impl-defined)
4773                                                 result += (n <= m && Type$1(captures[n - 1]) === 'Undefined') ? '' : captures[n - 1];
4774                                                 i += 1;
4775                                         } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
4776                                                 // $00 through $99
4777                                                 var nn = next + nextNext;
4778                                                 var nnI = $parseInt(nn, 10) - 1;
4779                                                 // if nn === '00' or nn > m, impl-defined
4780                                                 result += (nn <= m && Type$1(captures[nnI]) === 'Undefined') ? '' : captures[nnI];
4781                                                 i += 2;
4782                                         } else {
4783                                                 result += '$';
4784                                         }
4785                                 }
4786                         } else {
4787                                 // the final $, or else not a $
4788                                 result += $charAt(replacement, i);
4789                         }
4790                 }
4791                 return result;
4792         };
4793
4794         var $TypeError$x = GetIntrinsic('%TypeError%');
4795
4796
4797
4798
4799
4800
4801         // https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
4802
4803         var HasOwnProperty = function HasOwnProperty(O, P) {
4804                 if (Type$1(O) !== 'Object') {
4805                         throw new $TypeError$x('Assertion failed: `O` must be an Object');
4806                 }
4807                 if (!IsPropertyKey(P)) {
4808                         throw new $TypeError$x('Assertion failed: `P` must be a Property Key');
4809                 }
4810                 return src(O, P);
4811         };
4812
4813         var $TypeError$y = GetIntrinsic('%TypeError%');
4814
4815
4816
4817
4818         // https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
4819
4820         var HasProperty = function HasProperty(O, P) {
4821                 if (Type$1(O) !== 'Object') {
4822                         throw new $TypeError$y('Assertion failed: `O` must be an Object');
4823                 }
4824                 if (!IsPropertyKey(P)) {
4825                         throw new $TypeError$y('Assertion failed: `P` must be a Property Key');
4826                 }
4827                 return P in O;
4828         };
4829
4830         var $floor$4 = GetIntrinsic('%Math.floor%');
4831
4832
4833
4834         var msPerHour$1 = timeConstants.msPerHour;
4835         var HoursPerDay$1 = timeConstants.HoursPerDay;
4836
4837         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
4838
4839         var HourFromTime = function HourFromTime(t) {
4840                 return mod($floor$4(t / msPerHour$1), HoursPerDay$1);
4841         };
4842
4843         var $TypeError$z = GetIntrinsic('%TypeError%');
4844
4845
4846
4847
4848
4849         // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
4850
4851         var OrdinaryHasInstance = function OrdinaryHasInstance(C, O) {
4852                 if (IsCallable(C) === false) {
4853                         return false;
4854                 }
4855                 if (Type$1(O) !== 'Object') {
4856                         return false;
4857                 }
4858                 var P = Get(C, 'prototype');
4859                 if (Type$1(P) !== 'Object') {
4860                         throw new $TypeError$z('OrdinaryHasInstance called on an object with an invalid prototype property.');
4861                 }
4862                 return O instanceof C;
4863         };
4864
4865         var $TypeError$A = GetIntrinsic('%TypeError%');
4866
4867         var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
4868
4869
4870
4871
4872
4873
4874
4875
4876         // https://www.ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
4877
4878         var InstanceofOperator = function InstanceofOperator(O, C) {
4879                 if (Type$1(O) !== 'Object') {
4880                         throw new $TypeError$A('Assertion failed: Type(O) is not Object');
4881                 }
4882                 var instOfHandler = $hasInstance ? GetMethod$1(C, $hasInstance) : void 0;
4883                 if (typeof instOfHandler !== 'undefined') {
4884                         return ToBoolean(Call(instOfHandler, C, [O]));
4885                 }
4886                 if (!IsCallable(C)) {
4887                         throw new $TypeError$A('`C` is not Callable');
4888                 }
4889                 return OrdinaryHasInstance(C, O);
4890         };
4891
4892         var $TypeError$B = GetIntrinsic('%TypeError%');
4893
4894         var $arraySlice = callBound('Array.prototype.slice');
4895
4896
4897
4898
4899
4900         // https://ecma-international.org/ecma-262/6.0/#sec-invoke
4901
4902         var Invoke = function Invoke(O, P) {
4903                 if (!IsPropertyKey(P)) {
4904                         throw new $TypeError$B('P must be a Property Key');
4905                 }
4906                 var argumentsList = $arraySlice(arguments, 2);
4907                 var func = GetV(O, P);
4908                 return Call(func, O, argumentsList);
4909         };
4910
4911         var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
4912
4913
4914
4915
4916
4917
4918         // https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
4919
4920         var IsConcatSpreadable = function IsConcatSpreadable(O) {
4921                 if (Type$1(O) !== 'Object') {
4922                         return false;
4923                 }
4924                 if ($isConcatSpreadable) {
4925                         var spreadable = Get(O, $isConcatSpreadable);
4926                         if (typeof spreadable !== 'undefined') {
4927                                 return ToBoolean(spreadable);
4928                         }
4929                 }
4930                 return IsArray(O);
4931         };
4932
4933         var $PromiseThen = callBound('Promise.prototype.then', true);
4934
4935
4936
4937         // https://www.ecma-international.org/ecma-262/6.0/#sec-ispromise
4938
4939         var IsPromise = function IsPromise(x) {
4940                 if (Type$1(x) !== 'Object') {
4941                         return false;
4942                 }
4943                 if (!$PromiseThen) { // Promises are not supported
4944                         return false;
4945                 }
4946                 try {
4947                         $PromiseThen(x); // throws if not a promise
4948                 } catch (e) {
4949                         return false;
4950                 }
4951                 return true;
4952         };
4953
4954         // https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type
4955
4956         var IsPropertyDescriptor = function IsPropertyDescriptor(Desc) {
4957                 return isPropertyDescriptor({
4958                         IsDataDescriptor: IsDataDescriptor,
4959                         IsAccessorDescriptor: IsAccessorDescriptor,
4960                         Type: Type$1
4961                 }, Desc);
4962         };
4963
4964         var $TypeError$C = GetIntrinsic('%TypeError%');
4965
4966
4967
4968
4969
4970
4971         // https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
4972
4973         var IteratorClose = function IteratorClose(iterator, completion) {
4974                 if (Type$1(iterator) !== 'Object') {
4975                         throw new $TypeError$C('Assertion failed: Type(iterator) is not Object');
4976                 }
4977                 if (!IsCallable(completion)) {
4978                         throw new $TypeError$C('Assertion failed: completion is not a thunk for a Completion Record');
4979                 }
4980                 var completionThunk = completion;
4981
4982                 var iteratorReturn = GetMethod$1(iterator, 'return');
4983
4984                 if (typeof iteratorReturn === 'undefined') {
4985                         return completionThunk();
4986                 }
4987
4988                 var completionRecord;
4989                 try {
4990                         var innerResult = Call(iteratorReturn, iterator, []);
4991                 } catch (e) {
4992                         // if we hit here, then "e" is the innerResult completion that needs re-throwing
4993
4994                         // if the completion is of type "throw", this will throw.
4995                         completionThunk();
4996                         completionThunk = null; // ensure it's not called twice.
4997
4998                         // if not, then return the innerResult completion
4999                         throw e;
5000                 }
5001                 completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
5002                 completionThunk = null; // ensure it's not called twice.
5003
5004                 if (Type$1(innerResult) !== 'Object') {
5005                         throw new $TypeError$C('iterator .return must return an object');
5006                 }
5007
5008                 return completionRecord;
5009         };
5010
5011         var $TypeError$D = GetIntrinsic('%TypeError%');
5012
5013
5014
5015
5016
5017         // https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
5018
5019         var IteratorComplete = function IteratorComplete(iterResult) {
5020                 if (Type$1(iterResult) !== 'Object') {
5021                         throw new $TypeError$D('Assertion failed: Type(iterResult) is not Object');
5022                 }
5023                 return ToBoolean(Get(iterResult, 'done'));
5024         };
5025
5026         var $TypeError$E = GetIntrinsic('%TypeError%');
5027
5028
5029
5030
5031         // https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
5032
5033         var IteratorNext = function IteratorNext(iterator, value) {
5034                 var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
5035                 if (Type$1(result) !== 'Object') {
5036                         throw new $TypeError$E('iterator next must return an object');
5037                 }
5038                 return result;
5039         };
5040
5041         // https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
5042
5043         var IteratorStep = function IteratorStep(iterator) {
5044                 var result = IteratorNext(iterator);
5045                 var done = IteratorComplete(result);
5046                 return done === true ? false : result;
5047         };
5048
5049         var $TypeError$F = GetIntrinsic('%TypeError%');
5050
5051
5052
5053
5054         // https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
5055
5056         var IteratorValue = function IteratorValue(iterResult) {
5057                 if (Type$1(iterResult) !== 'Object') {
5058                         throw new $TypeError$F('Assertion failed: Type(iterResult) is not Object');
5059                 }
5060                 return Get(iterResult, 'value');
5061         };
5062
5063         var msPerDay$2 = timeConstants.msPerDay;
5064
5065         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.13
5066
5067         var MakeDate = function MakeDate(day, time) {
5068                 if (!_isFinite(day) || !_isFinite(time)) {
5069                         return NaN;
5070                 }
5071                 return (day * msPerDay$2) + time;
5072         };
5073
5074         var $floor$5 = GetIntrinsic('%Math.floor%');
5075         var $DateUTC = GetIntrinsic('%Date.UTC%');
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
5087
5088         var MakeDay = function MakeDay(year, month, date) {
5089                 if (!_isFinite(year) || !_isFinite(month) || !_isFinite(date)) {
5090                         return NaN;
5091                 }
5092                 var y = ToInteger$1(year);
5093                 var m = ToInteger$1(month);
5094                 var dt = ToInteger$1(date);
5095                 var ym = y + $floor$5(m / 12);
5096                 var mn = mod(m, 12);
5097                 var t = $DateUTC(ym, mn, 1);
5098                 if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
5099                         return NaN;
5100                 }
5101                 return Day(t) + dt - 1;
5102         };
5103
5104         var msPerSecond$1 = timeConstants.msPerSecond;
5105         var msPerMinute$1 = timeConstants.msPerMinute;
5106         var msPerHour$2 = timeConstants.msPerHour;
5107
5108
5109
5110         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
5111
5112         var MakeTime = function MakeTime(hour, min, sec, ms) {
5113                 if (!_isFinite(hour) || !_isFinite(min) || !_isFinite(sec) || !_isFinite(ms)) {
5114                         return NaN;
5115                 }
5116                 var h = ToInteger$1(hour);
5117                 var m = ToInteger$1(min);
5118                 var s = ToInteger$1(sec);
5119                 var milli = ToInteger$1(ms);
5120                 var t = (h * msPerHour$2) + (m * msPerMinute$1) + (s * msPerSecond$1) + milli;
5121                 return t;
5122         };
5123
5124         var $floor$6 = GetIntrinsic('%Math.floor%');
5125
5126
5127
5128         var msPerMinute$2 = timeConstants.msPerMinute;
5129         var MinutesPerHour$1 = timeConstants.MinutesPerHour;
5130
5131         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
5132
5133         var MinFromTime = function MinFromTime(t) {
5134                 return mod($floor$6(t / msPerMinute$2), MinutesPerHour$1);
5135         };
5136
5137         // https://ecma-international.org/ecma-262/5.1/#sec-5.2
5138
5139         var modulo = function modulo(x, y) {
5140                 return mod(x, y);
5141         };
5142
5143         var msPerSecond$2 = timeConstants.msPerSecond;
5144
5145         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
5146
5147         var msFromTime = function msFromTime(t) {
5148                 return mod(t, msPerSecond$2);
5149         };
5150
5151         var $ObjectCreate = GetIntrinsic('%Object.create%', true);
5152         var $TypeError$G = GetIntrinsic('%TypeError%');
5153         var $SyntaxError$3 = GetIntrinsic('%SyntaxError%');
5154
5155
5156
5157         var hasProto = !({ __proto__: null } instanceof Object);
5158
5159         // https://www.ecma-international.org/ecma-262/6.0/#sec-objectcreate
5160
5161         var ObjectCreate = function ObjectCreate(proto, internalSlotsList) {
5162                 if (proto !== null && Type$1(proto) !== 'Object') {
5163                         throw new $TypeError$G('Assertion failed: `proto` must be null or an object');
5164                 }
5165                 var slots = arguments.length < 2 ? [] : internalSlotsList;
5166                 if (slots.length > 0) {
5167                         throw new $SyntaxError$3('es-abstract does not yet support internal slots');
5168                 }
5169
5170                 if ($ObjectCreate) {
5171                         return $ObjectCreate(proto);
5172                 }
5173                 if (hasProto) {
5174                         return { __proto__: proto };
5175                 }
5176
5177                 if (proto === null) {
5178                         throw new $SyntaxError$3('native Object.create support is required to create null objects');
5179                 }
5180                 var T = function T() {};
5181                 T.prototype = proto;
5182                 return new T();
5183         };
5184
5185         var $TypeError$H = GetIntrinsic('%TypeError%');
5186
5187
5188
5189
5190         // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
5191
5192         var OrdinaryHasProperty = function OrdinaryHasProperty(O, P) {
5193                 if (Type$1(O) !== 'Object') {
5194                         throw new $TypeError$H('Assertion failed: Type(O) is not Object');
5195                 }
5196                 if (!IsPropertyKey(P)) {
5197                         throw new $TypeError$H('Assertion failed: P must be a Property Key');
5198                 }
5199                 return P in O;
5200         };
5201
5202         var $TypeError$I = GetIntrinsic('%TypeError%');
5203
5204         var regexExec$1 = callBound('RegExp.prototype.exec');
5205
5206
5207
5208
5209
5210
5211         // https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
5212
5213         var RegExpExec = function RegExpExec(R, S) {
5214                 if (Type$1(R) !== 'Object') {
5215                         throw new $TypeError$I('Assertion failed: `R` must be an Object');
5216                 }
5217                 if (Type$1(S) !== 'String') {
5218                         throw new $TypeError$I('Assertion failed: `S` must be a String');
5219                 }
5220                 var exec = Get(R, 'exec');
5221                 if (IsCallable(exec)) {
5222                         var result = Call(exec, R, [S]);
5223                         if (result === null || Type$1(result) === 'Object') {
5224                                 return result;
5225                         }
5226                         throw new $TypeError$I('"exec" method must return `null` or an Object');
5227                 }
5228                 return regexExec$1(R, S);
5229         };
5230
5231         // https://www.ecma-international.org/ecma-262/6.0/#sec-samevaluezero
5232
5233         var SameValueZero = function SameValueZero(x, y) {
5234                 return (x === y) || (_isNaN(x) && _isNaN(y));
5235         };
5236
5237         var $floor$7 = GetIntrinsic('%Math.floor%');
5238
5239
5240
5241         var msPerSecond$3 = timeConstants.msPerSecond;
5242         var SecondsPerMinute$1 = timeConstants.SecondsPerMinute;
5243
5244         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.10
5245
5246         var SecFromTime = function SecFromTime(t) {
5247                 return mod($floor$7(t / msPerSecond$3), SecondsPerMinute$1);
5248         };
5249
5250         var $TypeError$J = GetIntrinsic('%TypeError%');
5251
5252
5253
5254
5255         // https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
5256
5257         var _Set = function Set(O, P, V, Throw) {
5258                 if (Type$1(O) !== 'Object') {
5259                         throw new $TypeError$J('Assertion failed: `O` must be an Object');
5260                 }
5261                 if (!IsPropertyKey(P)) {
5262                         throw new $TypeError$J('Assertion failed: `P` must be a Property Key');
5263                 }
5264                 if (Type$1(Throw) !== 'Boolean') {
5265                         throw new $TypeError$J('Assertion failed: `Throw` must be a Boolean');
5266                 }
5267                 if (Throw) {
5268                         O[P] = V; // eslint-disable-line no-param-reassign
5269                         return true;
5270                 } else {
5271                         try {
5272                                 O[P] = V; // eslint-disable-line no-param-reassign
5273                         } catch (e) {
5274                                 return false;
5275                         }
5276                 }
5277         };
5278
5279         var getInferredName;
5280         try {
5281                 // eslint-disable-next-line no-new-func
5282                 getInferredName = Function('s', 'return { [s]() {} }[s].name;');
5283         } catch (e) {}
5284
5285         var inferred = function () {};
5286         var getInferredName_1 = getInferredName && inferred.name === 'inferred' ? getInferredName : null;
5287
5288         var $SyntaxError$4 = GetIntrinsic('%SyntaxError%');
5289         var symToStr = callBound('Symbol.prototype.toString', true);
5290
5291
5292
5293         var getSymbolDescription = function getSymbolDescription(symbol) {
5294                 if (!symToStr) {
5295                         throw new $SyntaxError$4('Symbols are not supported in this environment');
5296                 }
5297                 var str = symToStr(symbol); // will throw if not a symbol
5298
5299                 if (getInferredName_1) {
5300                         var name = getInferredName_1(symbol);
5301                         if (name === '') { return; }
5302                         // eslint-disable-next-line consistent-return
5303                         return name.slice(1, -1); // name.slice('['.length, -']'.length);
5304                 }
5305
5306                 var desc = str.slice(7, -1); // str.slice('Symbol('.length, -')'.length);
5307                 if (desc) {
5308                         // eslint-disable-next-line consistent-return
5309                         return desc;
5310                 }
5311         };
5312
5313         var $TypeError$K = GetIntrinsic('%TypeError%');
5314
5315
5316
5317
5318
5319
5320
5321         // https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
5322
5323         var SetFunctionName = function SetFunctionName(F, name) {
5324                 if (typeof F !== 'function') {
5325                         throw new $TypeError$K('Assertion failed: `F` must be a function');
5326                 }
5327                 if (!IsExtensible(F) || src(F, 'name')) {
5328                         throw new $TypeError$K('Assertion failed: `F` must be extensible, and must not have a `name` own property');
5329                 }
5330                 var nameType = Type$1(name);
5331                 if (nameType !== 'Symbol' && nameType !== 'String') {
5332                         throw new $TypeError$K('Assertion failed: `name` must be a Symbol or a String');
5333                 }
5334                 if (nameType === 'Symbol') {
5335                         var description = getSymbolDescription(name);
5336                         // eslint-disable-next-line no-param-reassign
5337                         name = typeof description === 'undefined' ? '' : '[' + description + ']';
5338                 }
5339                 if (arguments.length > 2) {
5340                         var prefix = arguments[2];
5341                         // eslint-disable-next-line no-param-reassign
5342                         name = prefix + ' ' + name;
5343                 }
5344                 return DefinePropertyOrThrow(F, 'name', {
5345                         '[[Value]]': name,
5346                         '[[Writable]]': false,
5347                         '[[Enumerable]]': false,
5348                         '[[Configurable]]': true
5349                 });
5350         };
5351
5352         var forEach$3 = function forEach(array, callback) {
5353                 for (var i = 0; i < array.length; i += 1) {
5354                         callback(array[i], i, array); // eslint-disable-line callback-return
5355                 }
5356         };
5357
5358         var $SyntaxError$5 = GetIntrinsic('%SyntaxError%');
5359         var $TypeError$L = GetIntrinsic('%TypeError%');
5360         var $preventExtensions$1 = GetIntrinsic('%Object.preventExtensions%');
5361
5362         var $gOPN$1 = GetIntrinsic('%Object.getOwnPropertyNames%');
5363
5364
5365
5366
5367
5368
5369
5370
5371         // https://www.ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
5372
5373         var SetIntegrityLevel = function SetIntegrityLevel(O, level) {
5374                 if (Type$1(O) !== 'Object') {
5375                         throw new $TypeError$L('Assertion failed: Type(O) is not Object');
5376                 }
5377                 if (level !== 'sealed' && level !== 'frozen') {
5378                         throw new $TypeError$L('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
5379                 }
5380                 if (!$preventExtensions$1) {
5381                         throw new $SyntaxError$5('SetIntegrityLevel requires native `Object.preventExtensions` support');
5382                 }
5383                 var status = $preventExtensions$1(O);
5384                 if (!status) {
5385                         return false;
5386                 }
5387                 if (!$gOPN$1) {
5388                         throw new $SyntaxError$5('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
5389                 }
5390                 var theKeys = $gOPN$1(O);
5391                 if (level === 'sealed') {
5392                         forEach$3(theKeys, function (k) {
5393                                 DefinePropertyOrThrow(O, k, { configurable: false });
5394                         });
5395                 } else if (level === 'frozen') {
5396                         forEach$3(theKeys, function (k) {
5397                                 var currentDesc = getOwnPropertyDescriptor(O, k);
5398                                 if (typeof currentDesc !== 'undefined') {
5399                                         var desc;
5400                                         if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
5401                                                 desc = { configurable: false };
5402                                         } else {
5403                                                 desc = { configurable: false, writable: false };
5404                                         }
5405                                         DefinePropertyOrThrow(O, k, desc);
5406                                 }
5407                         });
5408                 }
5409                 return true;
5410         };
5411
5412         var $species$1 = GetIntrinsic('%Symbol.species%', true);
5413         var $TypeError$M = GetIntrinsic('%TypeError%');
5414
5415
5416
5417
5418         // https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
5419
5420         var SpeciesConstructor = function SpeciesConstructor(O, defaultConstructor) {
5421                 if (Type$1(O) !== 'Object') {
5422                         throw new $TypeError$M('Assertion failed: Type(O) is not Object');
5423                 }
5424                 var C = O.constructor;
5425                 if (typeof C === 'undefined') {
5426                         return defaultConstructor;
5427                 }
5428                 if (Type$1(C) !== 'Object') {
5429                         throw new $TypeError$M('O.constructor is not an Object');
5430                 }
5431                 var S = $species$1 ? C[$species$1] : void 0;
5432                 if (S == null) {
5433                         return defaultConstructor;
5434                 }
5435                 if (IsConstructor(S)) {
5436                         return S;
5437                 }
5438                 throw new $TypeError$M('no constructor found');
5439         };
5440
5441         var $TypeError$N = GetIntrinsic('%TypeError%');
5442
5443
5444
5445         var $SymbolToString = callBound('Symbol.prototype.toString', true);
5446
5447
5448
5449         // https://www.ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
5450
5451         var SymbolDescriptiveString = function SymbolDescriptiveString(sym) {
5452                 if (Type$1(sym) !== 'Symbol') {
5453                         throw new $TypeError$N('Assertion failed: `sym` must be a Symbol');
5454                 }
5455                 return $SymbolToString(sym);
5456         };
5457
5458         var $gOPN$2 = GetIntrinsic('%Object.getOwnPropertyNames%');
5459         var $TypeError$O = GetIntrinsic('%TypeError%');
5460
5461
5462
5463
5464
5465
5466
5467
5468         // https://www.ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
5469
5470         var TestIntegrityLevel = function TestIntegrityLevel(O, level) {
5471                 if (Type$1(O) !== 'Object') {
5472                         throw new $TypeError$O('Assertion failed: Type(O) is not Object');
5473                 }
5474                 if (level !== 'sealed' && level !== 'frozen') {
5475                         throw new $TypeError$O('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
5476                 }
5477                 var status = IsExtensible(O);
5478                 if (status) {
5479                         return false;
5480                 }
5481                 var theKeys = $gOPN$2(O);
5482                 return theKeys.length === 0 || every(theKeys, function (k) {
5483                         var currentDesc = getOwnPropertyDescriptor(O, k);
5484                         if (typeof currentDesc !== 'undefined') {
5485                                 if (currentDesc.configurable) {
5486                                         return false;
5487                                 }
5488                                 if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
5489                                         return false;
5490                                 }
5491                         }
5492                         return true;
5493                 });
5494         };
5495
5496         var $BooleanValueOf = callBound('Boolean.prototype.valueOf');
5497
5498
5499
5500         // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
5501
5502         var thisBooleanValue = function thisBooleanValue(value) {
5503                 if (Type$1(value) === 'Boolean') {
5504                         return value;
5505                 }
5506
5507                 return $BooleanValueOf(value);
5508         };
5509
5510         var $NumberValueOf = callBound('Number.prototype.valueOf');
5511
5512         // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
5513
5514         var thisNumberValue = function thisNumberValue(value) {
5515                 if (Type$1(value) === 'Number') {
5516                         return value;
5517                 }
5518
5519                 return $NumberValueOf(value);
5520         };
5521
5522         var $StringValueOf = callBound('String.prototype.valueOf');
5523
5524
5525
5526         // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
5527
5528         var thisStringValue = function thisStringValue(value) {
5529                 if (Type$1(value) === 'String') {
5530                         return value;
5531                 }
5532
5533                 return $StringValueOf(value);
5534         };
5535
5536         var $DateValueOf = callBound('Date.prototype.valueOf');
5537
5538         // https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-date-prototype-object
5539
5540         var thisTimeValue = function thisTimeValue(value) {
5541                 return $DateValueOf(value);
5542         };
5543
5544         var $Date$1 = GetIntrinsic('%Date%');
5545         var $Number$3 = GetIntrinsic('%Number%');
5546         var $abs$2 = GetIntrinsic('%Math.abs%');
5547
5548
5549
5550
5551
5552         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.14
5553
5554         var TimeClip = function TimeClip(time) {
5555                 if (!_isFinite(time) || $abs$2(time) > 8.64e15) {
5556                         return NaN;
5557                 }
5558                 return $Number$3(new $Date$1(ToNumber(time)));
5559         };
5560
5561         var msPerDay$3 = timeConstants.msPerDay;
5562
5563
5564
5565         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.3
5566
5567         var TimeFromYear = function TimeFromYear(y) {
5568                 return msPerDay$3 * DayFromYear(y);
5569         };
5570
5571         var msPerDay$4 = timeConstants.msPerDay;
5572
5573         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.2
5574
5575         var TimeWithinDay = function TimeWithinDay(t) {
5576                 return mod(t, msPerDay$4);
5577         };
5578
5579         var $TypeError$P = GetIntrinsic('%TypeError%');
5580         var $Date$2 = GetIntrinsic('%Date%');
5581
5582
5583
5584
5585
5586         // https://ecma-international.org/ecma-262/6.0/#sec-todatestring
5587
5588         var ToDateString = function ToDateString(tv) {
5589                 if (Type$1(tv) !== 'Number') {
5590                         throw new $TypeError$P('Assertion failed: `tv` must be a Number');
5591                 }
5592                 if (_isNaN(tv)) {
5593                         return 'Invalid Date';
5594                 }
5595                 return $Date$2(tv);
5596         };
5597
5598         var $Math$3 = GetIntrinsic('%Math%');
5599
5600
5601
5602
5603
5604
5605
5606
5607         var $floor$8 = $Math$3.floor;
5608         var $abs$3 = $Math$3.abs;
5609
5610         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.7
5611
5612         var ToUint16 = function ToUint16(value) {
5613                 var number = ToNumber(value);
5614                 if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
5615                 var posInt = sign$1(number) * $floor$8($abs$3(number));
5616                 return mod(posInt, 0x10000);
5617         };
5618
5619         // https://www.ecma-international.org/ecma-262/6.0/#sec-toint16
5620
5621         var ToInt16 = function ToInt16(argument) {
5622                 var int16bit = ToUint16(argument);
5623                 return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
5624         };
5625
5626         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.5
5627
5628         var ToInt32 = function ToInt32(x) {
5629                 return ToNumber(x) >> 0;
5630         };
5631
5632         var $Math$4 = GetIntrinsic('%Math%');
5633
5634
5635
5636
5637
5638
5639
5640
5641         var $floor$9 = $Math$4.floor;
5642         var $abs$4 = $Math$4.abs;
5643
5644         var ToUint8 = function ToUint8(argument) {
5645                 var number = ToNumber(argument);
5646                 if (_isNaN(number) || number === 0 || !_isFinite(number)) { return 0; }
5647                 var posInt = sign$1(number) * $floor$9($abs$4(number));
5648                 return mod(posInt, 0x100);
5649         };
5650
5651         // https://www.ecma-international.org/ecma-262/6.0/#sec-toint8
5652
5653         var ToInt8 = function ToInt8(argument) {
5654                 var int8bit = ToUint8(argument);
5655                 return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
5656         };
5657
5658         var $String$1 = GetIntrinsic('%String%');
5659
5660
5661
5662
5663         // https://www.ecma-international.org/ecma-262/6.0/#sec-topropertykey
5664
5665         var ToPropertyKey = function ToPropertyKey(argument) {
5666                 var key = ToPrimitive(argument, $String$1);
5667                 return typeof key === 'symbol' ? key : ToString(key);
5668         };
5669
5670         var $Math$5 = GetIntrinsic('%Math%');
5671
5672
5673
5674
5675
5676         var $floor$a = $Math$5.floor;
5677
5678         // https://www.ecma-international.org/ecma-262/6.0/#sec-touint8clamp
5679
5680         var ToUint8Clamp = function ToUint8Clamp(argument) {
5681                 var number = ToNumber(argument);
5682                 if (_isNaN(number) || number <= 0) { return 0; }
5683                 if (number >= 0xFF) { return 0xFF; }
5684                 var f = $floor$a(argument);
5685                 if (f + 0.5 < number) { return f + 1; }
5686                 if (number < f + 0.5) { return f; }
5687                 if (f % 2 !== 0) { return f + 1; }
5688                 return f;
5689         };
5690
5691         // https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.6
5692
5693         var WeekDay = function WeekDay(t) {
5694                 return mod(Day(t) + 4, 7);
5695         };
5696
5697         /* eslint global-require: 0 */
5698         // https://www.ecma-international.org/ecma-262/6.0/#sec-abstract-operations
5699         var ES6 = {
5700                 'Abstract Equality Comparison': AbstractEqualityComparison,
5701                 'Abstract Relational Comparison': AbstractRelationalComparison,
5702                 'Strict Equality Comparison': StrictEqualityComparison,
5703                 AdvanceStringIndex: AdvanceStringIndex,
5704                 ArrayCreate: ArrayCreate,
5705                 ArraySetLength: ArraySetLength,
5706                 ArraySpeciesCreate: ArraySpeciesCreate,
5707                 Call: Call,
5708                 CanonicalNumericIndexString: CanonicalNumericIndexString,
5709                 CompletePropertyDescriptor: CompletePropertyDescriptor,
5710                 CreateDataProperty: CreateDataProperty,
5711                 CreateDataPropertyOrThrow: CreateDataPropertyOrThrow,
5712                 CreateHTML: CreateHTML,
5713                 CreateIterResultObject: CreateIterResultObject,
5714                 CreateListFromArrayLike: CreateListFromArrayLike,
5715                 CreateMethodProperty: CreateMethodProperty,
5716                 DateFromTime: DateFromTime,
5717                 Day: Day,
5718                 DayFromYear: DayFromYear,
5719                 DaysInYear: DaysInYear,
5720                 DayWithinYear: DayWithinYear,
5721                 DefinePropertyOrThrow: DefinePropertyOrThrow,
5722                 DeletePropertyOrThrow: DeletePropertyOrThrow,
5723                 EnumerableOwnNames: EnumerableOwnNames,
5724                 FromPropertyDescriptor: FromPropertyDescriptor,
5725                 Get: Get,
5726                 GetIterator: GetIterator,
5727                 GetMethod: GetMethod$1,
5728                 GetOwnPropertyKeys: GetOwnPropertyKeys,
5729                 GetPrototypeFromConstructor: GetPrototypeFromConstructor,
5730                 GetSubstitution: GetSubstitution,
5731                 GetV: GetV,
5732                 HasOwnProperty: HasOwnProperty,
5733                 HasProperty: HasProperty,
5734                 HourFromTime: HourFromTime,
5735                 InLeapYear: InLeapYear,
5736                 InstanceofOperator: InstanceofOperator,
5737                 Invoke: Invoke,
5738                 IsAccessorDescriptor: IsAccessorDescriptor,
5739                 IsArray: IsArray,
5740                 IsCallable: IsCallable,
5741                 IsConcatSpreadable: IsConcatSpreadable,
5742                 IsConstructor: IsConstructor,
5743                 IsDataDescriptor: IsDataDescriptor,
5744                 IsExtensible: IsExtensible,
5745                 IsGenericDescriptor: IsGenericDescriptor,
5746                 IsInteger: IsInteger,
5747                 IsPromise: IsPromise,
5748                 IsPropertyDescriptor: IsPropertyDescriptor,
5749                 IsPropertyKey: IsPropertyKey,
5750                 IsRegExp: IsRegExp,
5751                 IteratorClose: IteratorClose,
5752                 IteratorComplete: IteratorComplete,
5753                 IteratorNext: IteratorNext,
5754                 IteratorStep: IteratorStep,
5755                 IteratorValue: IteratorValue,
5756                 MakeDate: MakeDate,
5757                 MakeDay: MakeDay,
5758                 MakeTime: MakeTime,
5759                 MinFromTime: MinFromTime,
5760                 modulo: modulo,
5761                 MonthFromTime: MonthFromTime,
5762                 msFromTime: msFromTime,
5763                 ObjectCreate: ObjectCreate,
5764                 OrdinaryDefineOwnProperty: OrdinaryDefineOwnProperty,
5765                 OrdinaryGetOwnProperty: OrdinaryGetOwnProperty,
5766                 OrdinaryHasInstance: OrdinaryHasInstance,
5767                 OrdinaryHasProperty: OrdinaryHasProperty,
5768                 RegExpExec: RegExpExec,
5769                 RequireObjectCoercible: RequireObjectCoercible,
5770                 SameValue: SameValue,
5771                 SameValueZero: SameValueZero,
5772                 SecFromTime: SecFromTime,
5773                 Set: _Set,
5774                 SetFunctionName: SetFunctionName,
5775                 SetIntegrityLevel: SetIntegrityLevel,
5776                 SpeciesConstructor: SpeciesConstructor,
5777                 SymbolDescriptiveString: SymbolDescriptiveString,
5778                 TestIntegrityLevel: TestIntegrityLevel,
5779                 thisBooleanValue: thisBooleanValue,
5780                 thisNumberValue: thisNumberValue,
5781                 thisStringValue: thisStringValue,
5782                 thisTimeValue: thisTimeValue,
5783                 TimeClip: TimeClip,
5784                 TimeFromYear: TimeFromYear,
5785                 TimeWithinDay: TimeWithinDay,
5786                 ToBoolean: ToBoolean,
5787                 ToDateString: ToDateString,
5788                 ToInt16: ToInt16,
5789                 ToInt32: ToInt32,
5790                 ToInt8: ToInt8,
5791                 ToInteger: ToInteger$1,
5792                 ToLength: ToLength,
5793                 ToNumber: ToNumber,
5794                 ToObject: ToObject,
5795                 ToPrimitive: ToPrimitive,
5796                 ToPropertyDescriptor: ToPropertyDescriptor,
5797                 ToPropertyKey: ToPropertyKey,
5798                 ToString: ToString,
5799                 ToUint16: ToUint16,
5800                 ToUint32: ToUint32,
5801                 ToUint8: ToUint8,
5802                 ToUint8Clamp: ToUint8Clamp,
5803                 Type: Type$1,
5804                 ValidateAndApplyPropertyDescriptor: ValidateAndApplyPropertyDescriptor,
5805                 WeekDay: WeekDay,
5806                 YearFromTime: YearFromTime
5807         };
5808
5809         var es2015$1 = ES6;
5810
5811         var es6 = es2015$1;
5812
5813         var implementation$4 = function find(predicate) {
5814                 var list = es6.ToObject(this);
5815                 var length = es6.ToLength(list.length);
5816                 if (!es6.IsCallable(predicate)) {
5817                         throw new TypeError('Array#find: predicate must be a function');
5818                 }
5819                 if (length === 0) {
5820                         return void 0;
5821                 }
5822                 var thisArg;
5823                 if (arguments.length > 0) {
5824                         thisArg = arguments[1];
5825                 }
5826
5827                 for (var i = 0, value; i < length; i++) {
5828                         value = list[i];
5829                         // inlined for performance: if (ES.Call(predicate, thisArg, [value, i, list])) {
5830                         if (predicate.apply(thisArg, [value, i, list])) {
5831                                 return value;
5832                         }
5833                 }
5834                 return void 0;
5835         };
5836
5837         var polyfill$6 = function getPolyfill() {
5838                 // Detect if an implementation exists
5839                 // Detect early implementations which skipped holes in sparse arrays
5840                 // eslint-disable-next-line no-sparse-arrays
5841                 var implemented = Array.prototype.find && [, 1].find(function () {
5842                         return true;
5843                 }) !== 1;
5844
5845                 // eslint-disable-next-line global-require
5846                 return implemented ? Array.prototype.find : implementation$4;
5847         };
5848
5849         var shim$9 = function shimArrayPrototypeFind() {
5850                 var polyfill = polyfill$6();
5851
5852                 defineProperties_1(Array.prototype, { find: polyfill }, {
5853                         find: function () {
5854                                 return Array.prototype.find !== polyfill;
5855                         }
5856                 });
5857
5858                 return polyfill;
5859         };
5860
5861         var slice$2 = Array.prototype.slice;
5862
5863         var polyfill$7 = polyfill$6();
5864
5865         var boundFindShim = function find(array, predicate) { // eslint-disable-line no-unused-vars
5866                 es6.RequireObjectCoercible(array);
5867                 var args = slice$2.call(arguments, 1);
5868                 return polyfill$7.apply(array, args);
5869         };
5870
5871         defineProperties_1(boundFindShim, {
5872                 getPolyfill: polyfill$6,
5873                 implementation: implementation$4,
5874                 shim: shim$9
5875         });
5876
5877         var array_prototype_find = boundFindShim;
5878
5879         var implementation$5 = function findIndex(predicate) {
5880                 var list = es6.ToObject(this);
5881                 var length = es6.ToLength(list.length);
5882                 if (!es6.IsCallable(predicate)) {
5883                         throw new TypeError('Array#findIndex: predicate must be a function');
5884                 }
5885                 if (length === 0) { return -1; }
5886                 var thisArg = arguments[1];
5887                 for (var i = 0, value; i < length; i++) {
5888                         value = list[i];
5889                         if (es6.Call(predicate, thisArg, [value, i, list])) { return i; }
5890                 }
5891                 return -1;
5892         };
5893
5894         var polyfill$8 = function getPolyfill() {
5895                 // Detect if an implementation exists
5896                 // Detect early implementations which skipped holes in sparse arrays
5897                 var implemented = Array.prototype.findIndex && ([, 1].findIndex(function (item, idx) {
5898                         return idx === 0;
5899                 }) === 0);
5900
5901
5902                 return implemented ? Array.prototype.findIndex : implementation$5;
5903         };
5904
5905         var shim$a = function shimArrayPrototypeFindIndex() {
5906                 var polyfill = polyfill$8();
5907
5908                 defineProperties_1(Array.prototype, { findIndex: polyfill }, {
5909                         findIndex: function () {
5910                                 return Array.prototype.findIndex !== polyfill;
5911                         }
5912                 });
5913
5914                 return polyfill;
5915         };
5916
5917         var slice$3 = Array.prototype.slice;
5918
5919         var polyfill$9 = polyfill$8();
5920
5921         var boundShim = function findIndex(array, predicate) {
5922                 es6.RequireObjectCoercible(array);
5923                 var args = slice$3.call(arguments, 1);
5924                 return polyfill$9.apply(array, args);
5925         };
5926
5927         defineProperties_1(boundShim, {
5928                 implementation: implementation$5,
5929                 getPolyfill: polyfill$8,
5930                 shim: shim$a
5931         });
5932
5933         var array_prototype_findindex = boundShim;
5934
5935         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.11
5936
5937         var IsCallable$1 = isCallable;
5938
5939         var $TypeError$Q = GetIntrinsic('%TypeError%');
5940
5941
5942
5943
5944
5945         // https://www.ecma-international.org/ecma-262/6.0/#sec-call
5946
5947         var Call$1 = function Call(F, V) {
5948                 var args = arguments.length > 2 ? arguments[2] : [];
5949                 if (!IsCallable$1(F)) {
5950                         throw new $TypeError$Q(objectInspect(F) + ' is not a function');
5951                 }
5952                 return F.apply(V, args);
5953         };
5954
5955         // https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
5956
5957         var Type$2 = function Type$1(x) {
5958                 if (typeof x === 'symbol') {
5959                         return 'Symbol';
5960                 }
5961                 return Type(x);
5962         };
5963
5964         // https://www.ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
5965
5966         var FromPropertyDescriptor$1 = function FromPropertyDescriptor(Desc) {
5967                 if (typeof Desc === 'undefined') {
5968                         return Desc;
5969                 }
5970
5971                 assertRecord(Type$2, 'Property Descriptor', 'Desc', Desc);
5972
5973                 var obj = {};
5974                 if ('[[Value]]' in Desc) {
5975                         obj.value = Desc['[[Value]]'];
5976                 }
5977                 if ('[[Writable]]' in Desc) {
5978                         obj.writable = Desc['[[Writable]]'];
5979                 }
5980                 if ('[[Get]]' in Desc) {
5981                         obj.get = Desc['[[Get]]'];
5982                 }
5983                 if ('[[Set]]' in Desc) {
5984                         obj.set = Desc['[[Set]]'];
5985                 }
5986                 if ('[[Enumerable]]' in Desc) {
5987                         obj.enumerable = Desc['[[Enumerable]]'];
5988                 }
5989                 if ('[[Configurable]]' in Desc) {
5990                         obj.configurable = Desc['[[Configurable]]'];
5991                 }
5992                 return obj;
5993         };
5994
5995         var $Array$2 = GetIntrinsic('%Array%');
5996
5997         // eslint-disable-next-line global-require
5998         var toStr$8 = !$Array$2.isArray && callBound('Object.prototype.toString');
5999
6000         // https://www.ecma-international.org/ecma-262/6.0/#sec-isarray
6001
6002         var IsArray$1 = $Array$2.isArray || function IsArray(argument) {
6003                 return toStr$8(argument) === '[object Array]';
6004         };
6005
6006         // https://www.ecma-international.org/ecma-262/6.0/#sec-ispropertykey
6007
6008         var IsPropertyKey$1 = function IsPropertyKey(argument) {
6009                 return typeof argument === 'string' || typeof argument === 'symbol';
6010         };
6011
6012         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.2
6013
6014         var ToBoolean$1 = function ToBoolean(value) { return !!value; };
6015
6016         var $match$1 = GetIntrinsic('%Symbol.match%', true);
6017
6018
6019
6020
6021
6022         // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
6023
6024         var IsRegExp$1 = function IsRegExp(argument) {
6025                 if (!argument || typeof argument !== 'object') {
6026                         return false;
6027                 }
6028                 if ($match$1) {
6029                         var isRegExp = argument[$match$1];
6030                         if (typeof isRegExp !== 'undefined') {
6031                                 return ToBoolean$1(isRegExp);
6032                         }
6033                 }
6034                 return isRegex(argument);
6035         };
6036
6037         var $TypeError$R = GetIntrinsic('%TypeError%');
6038
6039
6040
6041
6042
6043         // https://ecma-international.org/ecma-262/5.1/#sec-8.10.5
6044
6045         var ToPropertyDescriptor$1 = function ToPropertyDescriptor(Obj) {
6046                 if (Type$2(Obj) !== 'Object') {
6047                         throw new $TypeError$R('ToPropertyDescriptor requires an object');
6048                 }
6049
6050                 var desc = {};
6051                 if (src(Obj, 'enumerable')) {
6052                         desc['[[Enumerable]]'] = ToBoolean$1(Obj.enumerable);
6053                 }
6054                 if (src(Obj, 'configurable')) {
6055                         desc['[[Configurable]]'] = ToBoolean$1(Obj.configurable);
6056                 }
6057                 if (src(Obj, 'value')) {
6058                         desc['[[Value]]'] = Obj.value;
6059                 }
6060                 if (src(Obj, 'writable')) {
6061                         desc['[[Writable]]'] = ToBoolean$1(Obj.writable);
6062                 }
6063                 if (src(Obj, 'get')) {
6064                         var getter = Obj.get;
6065                         if (typeof getter !== 'undefined' && !IsCallable$1(getter)) {
6066                                 throw new TypeError('getter must be a function');
6067                         }
6068                         desc['[[Get]]'] = getter;
6069                 }
6070                 if (src(Obj, 'set')) {
6071                         var setter = Obj.set;
6072                         if (typeof setter !== 'undefined' && !IsCallable$1(setter)) {
6073                                 throw new $TypeError$R('setter must be a function');
6074                         }
6075                         desc['[[Set]]'] = setter;
6076                 }
6077
6078                 if ((src(desc, '[[Get]]') || src(desc, '[[Set]]')) && (src(desc, '[[Value]]') || src(desc, '[[Writable]]'))) {
6079                         throw new $TypeError$R('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
6080                 }
6081                 return desc;
6082         };
6083
6084         var $TypeError$S = GetIntrinsic('%TypeError%');
6085
6086
6087
6088         var $isEnumerable$2 = callBound('Object.prototype.propertyIsEnumerable');
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098         // https://www.ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
6099
6100         var OrdinaryGetOwnProperty$1 = function OrdinaryGetOwnProperty(O, P) {
6101                 if (Type$2(O) !== 'Object') {
6102                         throw new $TypeError$S('Assertion failed: O must be an Object');
6103                 }
6104                 if (!IsPropertyKey$1(P)) {
6105                         throw new $TypeError$S('Assertion failed: P must be a Property Key');
6106                 }
6107                 if (!src(O, P)) {
6108                         return void 0;
6109                 }
6110                 if (!getOwnPropertyDescriptor) {
6111                         // ES3 / IE 8 fallback
6112                         var arrayLength = IsArray$1(O) && P === 'length';
6113                         var regexLastIndex = IsRegExp$1(O) && P === 'lastIndex';
6114                         return {
6115                                 '[[Configurable]]': !(arrayLength || regexLastIndex),
6116                                 '[[Enumerable]]': $isEnumerable$2(O, P),
6117                                 '[[Value]]': O[P],
6118                                 '[[Writable]]': true
6119                         };
6120                 }
6121                 return ToPropertyDescriptor$1(getOwnPropertyDescriptor(O, P));
6122         };
6123
6124         // https://www.ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
6125
6126         var IsDataDescriptor$1 = function IsDataDescriptor(Desc) {
6127                 if (typeof Desc === 'undefined') {
6128                         return false;
6129                 }
6130
6131                 assertRecord(Type$2, 'Property Descriptor', 'Desc', Desc);
6132
6133                 if (!src(Desc, '[[Value]]') && !src(Desc, '[[Writable]]')) {
6134                         return false;
6135                 }
6136
6137                 return true;
6138         };
6139
6140         var $Object$2 = GetIntrinsic('%Object%');
6141
6142
6143
6144         var $preventExtensions$2 = $Object$2.preventExtensions;
6145         var $isExtensible$1 = $Object$2.isExtensible;
6146
6147         // https://www.ecma-international.org/ecma-262/6.0/#sec-isextensible-o
6148
6149         var IsExtensible$1 = $preventExtensions$2
6150                 ? function IsExtensible(obj) {
6151                         return !isPrimitive(obj) && $isExtensible$1(obj);
6152                 }
6153                 : function IsExtensible(obj) {
6154                         return !isPrimitive(obj);
6155                 };
6156
6157         // http://www.ecma-international.org/ecma-262/5.1/#sec-9.12
6158
6159         var SameValue$1 = function SameValue(x, y) {
6160                 if (x === y) { // 0 === -0, but they are not identical.
6161                         if (x === 0) { return 1 / x === 1 / y; }
6162                         return true;
6163                 }
6164                 return _isNaN(x) && _isNaN(y);
6165         };
6166
6167         var $TypeError$T = GetIntrinsic('%TypeError%');
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179         // https://www.ecma-international.org/ecma-262/6.0/#sec-createdataproperty
6180
6181         var CreateDataProperty$1 = function CreateDataProperty(O, P, V) {
6182                 if (Type$2(O) !== 'Object') {
6183                         throw new $TypeError$T('Assertion failed: Type(O) is not Object');
6184                 }
6185                 if (!IsPropertyKey$1(P)) {
6186                         throw new $TypeError$T('Assertion failed: IsPropertyKey(P) is not true');
6187                 }
6188                 var oldDesc = OrdinaryGetOwnProperty$1(O, P);
6189                 var extensible = oldDesc || IsExtensible$1(O);
6190                 var immutable = oldDesc && (!oldDesc.writable || !oldDesc.configurable);
6191                 if (immutable || !extensible) {
6192                         return false;
6193                 }
6194                 return DefineOwnProperty(
6195                         IsDataDescriptor$1,
6196                         SameValue$1,
6197                         FromPropertyDescriptor$1,
6198                         O,
6199                         P,
6200                         {
6201                                 '[[Configurable]]': true,
6202                                 '[[Enumerable]]': true,
6203                                 '[[Value]]': V,
6204                                 '[[Writable]]': true
6205                         }
6206                 );
6207         };
6208
6209         var $TypeError$U = GetIntrinsic('%TypeError%');
6210
6211
6212
6213
6214
6215         // // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
6216
6217         var CreateDataPropertyOrThrow$1 = function CreateDataPropertyOrThrow(O, P, V) {
6218                 if (Type$2(O) !== 'Object') {
6219                         throw new $TypeError$U('Assertion failed: Type(O) is not Object');
6220                 }
6221                 if (!IsPropertyKey$1(P)) {
6222                         throw new $TypeError$U('Assertion failed: IsPropertyKey(P) is not true');
6223                 }
6224                 var success = CreateDataProperty$1(O, P, V);
6225                 if (!success) {
6226                         throw new $TypeError$U('unable to create data property');
6227                 }
6228                 return success;
6229         };
6230
6231         var $TypeError$V = GetIntrinsic('%TypeError%');
6232
6233
6234
6235
6236
6237
6238         /**
6239          * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
6240          * 1. Assert: Type(O) is Object.
6241          * 2. Assert: IsPropertyKey(P) is true.
6242          * 3. Return O.[[Get]](P, O).
6243          */
6244
6245         var Get$1 = function Get(O, P) {
6246                 // 7.3.1.1
6247                 if (Type$2(O) !== 'Object') {
6248                         throw new $TypeError$V('Assertion failed: Type(O) is not Object');
6249                 }
6250                 // 7.3.1.2
6251                 if (!IsPropertyKey$1(P)) {
6252                         throw new $TypeError$V('Assertion failed: IsPropertyKey(P) is not true, got ' + objectInspect(P));
6253                 }
6254                 // 7.3.1.3
6255                 return O[P];
6256         };
6257
6258         // https://www.ecma-international.org/ecma-262/6.0/#sec-isconstructor
6259
6260         var IsConstructor$1 = function IsConstructor(argument) {
6261                 return typeof argument === 'function' && !!argument.prototype; // unfortunately there's no way to truly check this without try/catch `new argument`
6262         };
6263
6264         var RequireObjectCoercible$1 = CheckObjectCoercible;
6265
6266         var $Object$3 = GetIntrinsic('%Object%');
6267
6268
6269
6270         // https://www.ecma-international.org/ecma-262/6.0/#sec-toobject
6271
6272         var ToObject$1 = function ToObject(value) {
6273                 RequireObjectCoercible$1(value);
6274                 return $Object$3(value);
6275         };
6276
6277         // https://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
6278
6279         var ToPrimitive$1 = function ToPrimitive(input) {
6280                 if (arguments.length > 1) {
6281                         return es2015(input, arguments[1]);
6282                 }
6283                 return es2015(input);
6284         };
6285
6286         var $TypeError$W = GetIntrinsic('%TypeError%');
6287         var $Number$4 = GetIntrinsic('%Number%');
6288         var $RegExp$1 = GetIntrinsic('%RegExp%');
6289         var $parseInteger$1 = GetIntrinsic('%parseInt%');
6290
6291
6292
6293
6294
6295         var $strSlice$3 = callBound('String.prototype.slice');
6296         var isBinary$1 = regexTester(/^0b[01]+$/i);
6297         var isOctal$1 = regexTester(/^0o[0-7]+$/i);
6298         var isInvalidHexLiteral$1 = regexTester(/^[-+]0x[0-9a-f]+$/i);
6299         var nonWS$1 = ['\u0085', '\u200b', '\ufffe'].join('');
6300         var nonWSregex$1 = new $RegExp$1('[' + nonWS$1 + ']', 'g');
6301         var hasNonWS$1 = regexTester(nonWSregex$1);
6302
6303         // whitespace from: https://es5.github.io/#x15.5.4.20
6304         // implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
6305         var ws$1 = [
6306                 '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003',
6307                 '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028',
6308                 '\u2029\uFEFF'
6309         ].join('');
6310         var trimRegex$1 = new RegExp('(^[' + ws$1 + ']+)|([' + ws$1 + ']+$)', 'g');
6311         var $replace$3 = callBound('String.prototype.replace');
6312         var $trim$1 = function (value) {
6313                 return $replace$3(value, trimRegex$1, '');
6314         };
6315
6316
6317
6318         // https://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
6319
6320         var ToNumber$2 = function ToNumber(argument) {
6321                 var value = isPrimitive(argument) ? argument : ToPrimitive$1(argument, $Number$4);
6322                 if (typeof value === 'symbol') {
6323                         throw new $TypeError$W('Cannot convert a Symbol value to a number');
6324                 }
6325                 if (typeof value === 'string') {
6326                         if (isBinary$1(value)) {
6327                                 return ToNumber($parseInteger$1($strSlice$3(value, 2), 2));
6328                         } else if (isOctal$1(value)) {
6329                                 return ToNumber($parseInteger$1($strSlice$3(value, 2), 8));
6330                         } else if (hasNonWS$1(value) || isInvalidHexLiteral$1(value)) {
6331                                 return NaN;
6332                         } else {
6333                                 var trimmed = $trim$1(value);
6334                                 if (trimmed !== value) {
6335                                         return ToNumber(trimmed);
6336                                 }
6337                         }
6338                 }
6339                 return $Number$4(value);
6340         };
6341
6342         // https://www.ecma-international.org/ecma-262/6.0/#sec-tointeger
6343
6344         var ToInteger$2 = function ToInteger$1(value) {
6345                 var number = ToNumber$2(value);
6346                 return ToInteger(number);
6347         };
6348
6349         var ToLength$1 = function ToLength(argument) {
6350                 var len = ToInteger$2(argument);
6351                 if (len <= 0) { return 0; } // includes converting -0 to +0
6352                 if (len > maxSafeInteger) { return maxSafeInteger; }
6353                 return len;
6354         };
6355
6356         var $String$2 = GetIntrinsic('%String%');
6357         var $TypeError$X = GetIntrinsic('%TypeError%');
6358
6359         // https://www.ecma-international.org/ecma-262/6.0/#sec-tostring
6360
6361         var ToString$1 = function ToString(argument) {
6362                 if (typeof argument === 'symbol') {
6363                         throw new $TypeError$X('Cannot convert a Symbol value to a string');
6364                 }
6365                 return $String$2(argument);
6366         };
6367
6368         var hasToStringTag$3 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
6369         var toStr$9 = Object.prototype.toString;
6370
6371         var isStandardArguments = function isArguments(value) {
6372                 if (hasToStringTag$3 && value && typeof value === 'object' && Symbol.toStringTag in value) {
6373                         return false;
6374                 }
6375                 return toStr$9.call(value) === '[object Arguments]';
6376         };
6377
6378         var isLegacyArguments = function isArguments(value) {
6379                 if (isStandardArguments(value)) {
6380                         return true;
6381                 }
6382                 return value !== null &&
6383                         typeof value === 'object' &&
6384                         typeof value.length === 'number' &&
6385                         value.length >= 0 &&
6386                         toStr$9.call(value) !== '[object Array]' &&
6387                         toStr$9.call(value.callee) === '[object Function]';
6388         };
6389
6390         var supportsStandardArguments = (function () {
6391                 return isStandardArguments(arguments);
6392         }());
6393
6394         isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
6395
6396         var isArguments$2 = supportsStandardArguments ? isStandardArguments : isLegacyArguments;
6397
6398         var toString = {}.toString;
6399
6400         var isarray = Array.isArray || function (arr) {
6401           return toString.call(arr) == '[object Array]';
6402         };
6403
6404         var strValue = String.prototype.valueOf;
6405         var tryStringObject = function tryStringObject(value) {
6406                 try {
6407                         strValue.call(value);
6408                         return true;
6409                 } catch (e) {
6410                         return false;
6411                 }
6412         };
6413         var toStr$a = Object.prototype.toString;
6414         var strClass = '[object String]';
6415         var hasToStringTag$4 = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
6416
6417         var isString$1 = function isString(value) {
6418                 if (typeof value === 'string') {
6419                         return true;
6420                 }
6421                 if (typeof value !== 'object') {
6422                         return false;
6423                 }
6424                 return hasToStringTag$4 ? tryStringObject(value) : toStr$a.call(value) === strClass;
6425         };
6426
6427         var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
6428         var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
6429
6430         var exported;
6431
6432         if (!$Map) {
6433                 // eslint-disable-next-line no-unused-vars
6434                 exported = function isMap(x) {
6435                         // `Map` is not present in this environment.
6436                         return false;
6437                 };
6438         }
6439
6440         var $mapHas = $Map ? Map.prototype.has : null;
6441         var $setHas = $Set ? Set.prototype.has : null;
6442         if (!exported && !$mapHas) {
6443                 // eslint-disable-next-line no-unused-vars
6444                 exported = function isMap(x) {
6445                         // `Map` does not have a `has` method
6446                         return false;
6447                 };
6448         }
6449
6450         var isMap = exported || function isMap(x) {
6451                 if (!x || typeof x !== 'object') {
6452                         return false;
6453                 }
6454                 try {
6455                         $mapHas.call(x);
6456                         if ($setHas) {
6457                                 try {
6458                                         $setHas.call(x);
6459                                 } catch (e) {
6460                                         return true;
6461                                 }
6462                         }
6463                         return x instanceof $Map; // core-js workaround, pre-v2.5.0
6464                 } catch (e) {}
6465                 return false;
6466         };
6467
6468         var $Map$1 = typeof Map === 'function' && Map.prototype ? Map : null;
6469         var $Set$1 = typeof Set === 'function' && Set.prototype ? Set : null;
6470
6471         var exported$1;
6472
6473         if (!$Set$1) {
6474                 // eslint-disable-next-line no-unused-vars
6475                 exported$1 = function isSet(x) {
6476                         // `Set` is not present in this environment.
6477                         return false;
6478                 };
6479         }
6480
6481         var $mapHas$1 = $Map$1 ? Map.prototype.has : null;
6482         var $setHas$1 = $Set$1 ? Set.prototype.has : null;
6483         if (!exported$1 && !$setHas$1) {
6484                 // eslint-disable-next-line no-unused-vars
6485                 exported$1 = function isSet(x) {
6486                         // `Set` does not have a `has` method
6487                         return false;
6488                 };
6489         }
6490
6491         var isSet = exported$1 || function isSet(x) {
6492                 if (!x || typeof x !== 'object') {
6493                         return false;
6494                 }
6495                 try {
6496                         $setHas$1.call(x);
6497                         if ($mapHas$1) {
6498                                 try {
6499                                         $mapHas$1.call(x);
6500                                 } catch (e) {
6501                                         return true;
6502                                 }
6503                         }
6504                         return x instanceof $Set$1; // core-js workaround, pre-v2.5.0
6505                 } catch (e) {}
6506                 return false;
6507         };
6508
6509         var esGetIterator = createCommonjsModule(function (module) {
6510
6511         /* eslint global-require: 0 */
6512         // the code is structured this way so that bundlers can
6513         // alias out `has-symbols` to `() => true` or `() => false` if your target
6514         // environments' Symbol capabilities are known, and then use
6515         // dead code elimination on the rest of this module.
6516         //
6517         // Similarly, `isarray` can be aliased to `Array.isArray` if
6518         // available in all target environments.
6519
6520
6521
6522         if (hasSymbols$1() || shams()) {
6523                 var $iterator = Symbol.iterator;
6524                 // Symbol is available natively or shammed
6525                 // natively:
6526                 //  - Chrome >= 38
6527                 //  - Edge 12-14?, Edge >= 15 for sure
6528                 //  - FF >= 36
6529                 //  - Safari >= 9
6530                 //  - node >= 0.12
6531                 module.exports = function getIterator(iterable) {
6532                         // alternatively, `iterable[$iterator]?.()`
6533                         if (iterable != null && typeof iterable[$iterator] !== 'undefined') {
6534                                 return iterable[$iterator]();
6535                         }
6536                         if (isArguments$2(iterable)) {
6537                                 // arguments objects lack Symbol.iterator
6538                                 // - node 0.12
6539                                 return Array.prototype[$iterator].call(iterable);
6540                         }
6541                 };
6542         } else {
6543                 // Symbol is not available, native or shammed
6544                 var isArray = isarray;
6545                 var isString = isString$1;
6546                 var GetIntrinsic$1 = GetIntrinsic;
6547                 var $Map = GetIntrinsic$1('%Map%', true);
6548                 var $Set = GetIntrinsic$1('%Set%', true);
6549                 var callBound$1 = callBound;
6550                 var $arrayPush = callBound$1('Array.prototype.push');
6551                 var $charCodeAt = callBound$1('String.prototype.charCodeAt');
6552                 var $stringSlice = callBound$1('String.prototype.slice');
6553
6554                 var advanceStringIndex = function advanceStringIndex(S, index) {
6555                         var length = S.length;
6556                         if ((index + 1) >= length) {
6557                                 return index + 1;
6558                         }
6559
6560                         var first = $charCodeAt(S, index);
6561                         if (first < 0xD800 || first > 0xDBFF) {
6562                                 return index + 1;
6563                         }
6564
6565                         var second = $charCodeAt(S, index + 1);
6566                         if (second < 0xDC00 || second > 0xDFFF) {
6567                                 return index + 1;
6568                         }
6569
6570                         return index + 2;
6571                 };
6572
6573                 var getArrayIterator = function getArrayIterator(arraylike) {
6574                         var i = 0;
6575                         return {
6576                                 next: function next() {
6577                                         var done = i >= arraylike.length;
6578                                         var value;
6579                                         if (!done) {
6580                                                 value = arraylike[i];
6581                                                 i += 1;
6582                                         }
6583                                         return {
6584                                                 done: done,
6585                                                 value: value
6586                                         };
6587                                 }
6588                         };
6589                 };
6590
6591                 var getNonCollectionIterator = function getNonCollectionIterator(iterable) {
6592                         if (isArray(iterable) || isArguments$2(iterable)) {
6593                                 return getArrayIterator(iterable);
6594                         }
6595                         if (isString(iterable)) {
6596                                 var i = 0;
6597                                 return {
6598                                         next: function next() {
6599                                                 var nextIndex = advanceStringIndex(iterable, i);
6600                                                 var value = $stringSlice(iterable, i, nextIndex);
6601                                                 i = nextIndex;
6602                                                 return {
6603                                                         done: nextIndex > iterable.length,
6604                                                         value: value
6605                                                 };
6606                                         }
6607                                 };
6608                         }
6609                 };
6610
6611                 if (!$Map && !$Set) {
6612                         // the only language iterables are Array, String, arguments
6613                         // - Safari <= 6.0
6614                         // - Chrome < 38
6615                         // - node < 0.12
6616                         // - FF < 13
6617                         // - IE < 11
6618                         // - Edge < 11
6619
6620                         module.exports = getNonCollectionIterator;
6621                 } else {
6622                         // either Map or Set are available, but Symbol is not
6623                         // - es6-shim on an ES5 browser
6624                         // - Safari 6.2 (maybe 6.1?)
6625                         // - FF v[13, 36)
6626                         // - IE 11
6627                         // - Edge 11
6628                         // - Safari v[6, 9)
6629
6630                         var isMap$1 = isMap;
6631                         var isSet$1 = isSet;
6632
6633                         // Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach
6634                         var $mapForEach = callBound$1('Map.prototype.forEach', true);
6635                         var $setForEach = callBound$1('Set.prototype.forEach', true);
6636                         if (typeof process === 'undefined' || !process.versions || !process.versions.node) { // "if is not node"
6637
6638                                 // Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either
6639                                 // returns a value, or throws a StopIteration object. These browsers
6640                                 // do not have any other mechanism for iteration.
6641                                 var $mapIterator = callBound$1('Map.prototype.iterator', true);
6642                                 var $setIterator = callBound$1('Set.prototype.iterator', true);
6643                                 var getStopIterationIterator = function (iterator) {
6644                                         var done = false;
6645                                         return {
6646                                                 next: function next() {
6647                                                         try {
6648                                                                 return {
6649                                                                         done: done,
6650                                                                         value: done ? undefined : iterator.next()
6651                                                                 };
6652                                                         } catch (e) {
6653                                                                 done = true;
6654                                                                 return {
6655                                                                         done: true,
6656                                                                         value: undefined
6657                                                                 };
6658                                                         }
6659                                                 }
6660                                         };
6661                                 };
6662                         }
6663                         // Firefox 27-35, and some older es6-shim versions, use a string "@@iterator" property
6664                         // this returns a proper iterator object, so we should use it instead of forEach.
6665                         // newer es6-shim versions use a string "_es6-shim iterator_" property.
6666                         var $mapAtAtIterator = callBound$1('Map.prototype.@@iterator', true) || callBound$1('Map.prototype._es6-shim iterator_', true);
6667                         var $setAtAtIterator = callBound$1('Set.prototype.@@iterator', true) || callBound$1('Set.prototype._es6-shim iterator_', true);
6668
6669                         var getCollectionIterator = function getCollectionIterator(iterable) {
6670                                 if (isMap$1(iterable)) {
6671                                         if ($mapIterator) {
6672                                                 return getStopIterationIterator($mapIterator(iterable));
6673                                         }
6674                                         if ($mapAtAtIterator) {
6675                                                 return $mapAtAtIterator(iterable);
6676                                         }
6677                                         if ($mapForEach) {
6678                                                 var entries = [];
6679                                                 $mapForEach(iterable, function (v, k) {
6680                                                         $arrayPush(entries, [k, v]);
6681                                                 });
6682                                                 return getArrayIterator(entries);
6683                                         }
6684                                 }
6685                                 if (isSet$1(iterable)) {
6686                                         if ($setIterator) {
6687                                                 return getStopIterationIterator($setIterator(iterable));
6688                                         }
6689                                         if ($setAtAtIterator) {
6690                                                 return $setAtAtIterator(iterable);
6691                                         }
6692                                         if ($setForEach) {
6693                                                 var values = [];
6694                                                 $setForEach(iterable, function (v) {
6695                                                         $arrayPush(values, v);
6696                                                 });
6697                                                 return getArrayIterator(values);
6698                                         }
6699                                 }
6700                         };
6701
6702                         module.exports = function getIterator(iterable) {
6703                                 return getCollectionIterator(iterable) || getNonCollectionIterator(iterable);
6704                         };
6705                 }
6706         }
6707         });
6708
6709         var $TypeError$Y = TypeError;
6710
6711         // eslint-disable-next-line consistent-return
6712         var iterateIterator = function iterateIterator(iterator) {
6713                 if (!iterator || typeof iterator.next !== 'function') {
6714                         throw new $TypeError$Y('iterator must be an object with a `next` method');
6715                 }
6716                 if (arguments.length > 1) {
6717                         var callback = arguments[1];
6718                         if (typeof callback !== 'function') {
6719                                 throw new $TypeError$Y('`callback`, if provided, must be a function');
6720                         }
6721                 }
6722                 var values = callback || [];
6723                 var result;
6724                 while ((result = iterator.next()) && !result.done) {
6725                         if (callback) {
6726                                 callback(result.value); // eslint-disable-line callback-return
6727                         } else {
6728                                 values.push(result.value);
6729                         }
6730                 }
6731                 if (!callback) {
6732                         return values;
6733                 }
6734         };
6735
6736         var $TypeError$Z = TypeError;
6737
6738
6739         var iterateValue = function iterateValue(iterable) {
6740                 var iterator = esGetIterator(iterable);
6741                 if (!iterator) {
6742                         throw new $TypeError$Z('non-iterable value provided');
6743                 }
6744                 if (arguments.length > 1) {
6745                         return iterateIterator(iterator, arguments[1]);
6746                 }
6747                 return iterateIterator(iterator);
6748         };
6749
6750         var implementation$6 = function from(items) {
6751                 var C = this;
6752                 if (items === null || typeof items === 'undefined') {
6753                         throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`');
6754                 }
6755                 var mapFn, T;
6756                 if (typeof arguments[1] !== 'undefined') {
6757                         mapFn = arguments[1];
6758                         if (!IsCallable$1(mapFn)) {
6759                                 throw new TypeError('When provided, the second argument to `Array.from` must be a function');
6760                         }
6761                         if (arguments.length > 2) {
6762                                 T = arguments[2];
6763                         }
6764                 }
6765
6766                 var values;
6767                 try {
6768                         values = iterateValue(items);
6769                 } catch (e) {
6770                         values = items;
6771                 }
6772
6773                 var arrayLike = ToObject$1(values);
6774                 var len = ToLength$1(arrayLike.length);
6775                 var A = IsConstructor$1(C) ? ToObject$1(new C(len)) : new Array(len);
6776                 var k = 0;
6777                 var kValue, mappedValue;
6778
6779                 while (k < len) {
6780                         var Pk = ToString$1(k);
6781                         kValue = Get$1(arrayLike, Pk);
6782                         if (mapFn) {
6783                                 mappedValue = typeof T === 'undefined' ? mapFn(kValue, k) : Call$1(mapFn, T, [kValue, k]);
6784                         } else {
6785                                 mappedValue = kValue;
6786                         }
6787                         CreateDataPropertyOrThrow$1(A, Pk, mappedValue);
6788                         k += 1;
6789                 }
6790                 A.length = len;
6791                 return A;
6792         };
6793
6794         var tryCall = function (fn) {
6795                 try {
6796                         return fn();
6797                 } catch (e) {
6798                         return false;
6799                 }
6800         };
6801
6802         var polyfill$a = function getPolyfill() {
6803                 if (IsCallable$1(Array.from)) {
6804                         var handlesUndefMapper = tryCall(function () {
6805                                 // Microsoft Edge v0.11 throws if the mapFn argument is *provided* but undefined,
6806                                 // but the spec doesn't care if it's provided or not - undefined doesn't throw.
6807                                 return Array.from([0], undefined);
6808                         });
6809                         if (!handlesUndefMapper) {
6810                                 var origArrayFrom = Array.from;
6811                                 return function from(items) {
6812                                         /* eslint no-invalid-this: 0 */
6813                                         if (arguments.length > 1 && typeof arguments[1] !== 'undefined') {
6814                                                 return Call$1(origArrayFrom, this, arguments);
6815                                         } else {
6816                                                 return Call$1(origArrayFrom, this, [items]);
6817                                         }
6818                                 };
6819                         }
6820                         var implemented = tryCall(function () {
6821                                 // Detects a Firefox bug in v32
6822                                 // https://bugzilla.mozilla.org/show_bug.cgi?id=1063993
6823                                 return Array.from({ 'length': -1 }) === 0;
6824                         })
6825                         && tryCall(function () {
6826                                 // Detects a bug in Webkit nightly r181886
6827                                 var arr = Array.from([0].entries());
6828                                 return arr.length === 1 && IsArray$1(arr[0]) && arr[0][0] === 0 && arr[0][1] === 0;
6829                         })
6830                         && tryCall(function () {
6831                                 return Array.from({ 'length': -Infinity });
6832                         });
6833                         if (implemented) {
6834                                 return Array.from;
6835                         }
6836                 }
6837
6838                 return implementation$6;
6839         };
6840
6841         var shim$b = function shimArrayFrom() {
6842                 var polyfill = polyfill$a();
6843
6844                 defineProperties_1(Array, { 'from': polyfill }, {
6845                         'from': function () {
6846                                 return Array.from !== polyfill;
6847                         }
6848                 });
6849
6850                 return polyfill;
6851         };
6852
6853         var polyfill$b = polyfill$a();
6854
6855         // eslint-disable-next-line no-unused-vars
6856         var boundFromShim = function from(items) {
6857                 // eslint-disable-next-line no-invalid-this
6858                 return polyfill$b.apply(this || Array, arguments);
6859         };
6860
6861         defineProperties_1(boundFromShim, {
6862                 'getPolyfill': polyfill$a,
6863                 'implementation': implementation$6,
6864                 'shim': shim$b
6865         });
6866
6867         var array_from = boundFromShim;
6868
6869         var $isEnumerable$3 = callBound('Object.prototype.propertyIsEnumerable');
6870
6871         var implementation$7 = function values(O) {
6872                 var obj = RequireObjectCoercible$1(O);
6873                 var vals = [];
6874                 for (var key in obj) {
6875                         if (src(obj, key) && $isEnumerable$3(obj, key)) {
6876                                 vals.push(obj[key]);
6877                         }
6878                 }
6879                 return vals;
6880         };
6881
6882         var polyfill$c = function getPolyfill() {
6883                 return typeof Object.values === 'function' ? Object.values : implementation$7;
6884         };
6885
6886         var shim$c = function shimValues() {
6887                 var polyfill = polyfill$c();
6888                 defineProperties_1(Object, { values: polyfill }, {
6889                         values: function testValues() {
6890                                 return Object.values !== polyfill;
6891                         }
6892                 });
6893                 return polyfill;
6894         };
6895
6896         var polyfill$d = polyfill$c();
6897
6898         defineProperties_1(polyfill$d, {
6899                 getPolyfill: polyfill$c,
6900                 implementation: implementation$7,
6901                 shim: shim$c
6902         });
6903
6904         var object_values = polyfill$d;
6905
6906         /**
6907          * @this {Promise}
6908          */
6909         function finallyConstructor(callback) {
6910           var constructor = this.constructor;
6911           return this.then(
6912             function(value) {
6913               // @ts-ignore
6914               return constructor.resolve(callback()).then(function() {
6915                 return value;
6916               });
6917             },
6918             function(reason) {
6919               // @ts-ignore
6920               return constructor.resolve(callback()).then(function() {
6921                 // @ts-ignore
6922                 return constructor.reject(reason);
6923               });
6924             }
6925           );
6926         }
6927
6928         // Store setTimeout reference so promise-polyfill will be unaffected by
6929         // other code modifying setTimeout (like sinon.useFakeTimers())
6930         var setTimeoutFunc = setTimeout;
6931
6932         function isArray$4(x) {
6933           return Boolean(x && typeof x.length !== 'undefined');
6934         }
6935
6936         function noop$1() {}
6937
6938         // Polyfill for Function.prototype.bind
6939         function bind$2(fn, thisArg) {
6940           return function() {
6941             fn.apply(thisArg, arguments);
6942           };
6943         }
6944
6945         /**
6946          * @constructor
6947          * @param {Function} fn
6948          */
6949         function Promise$1(fn) {
6950           if (!(this instanceof Promise$1))
6951             { throw new TypeError('Promises must be constructed via new'); }
6952           if (typeof fn !== 'function') { throw new TypeError('not a function'); }
6953           /** @type {!number} */
6954           this._state = 0;
6955           /** @type {!boolean} */
6956           this._handled = false;
6957           /** @type {Promise|undefined} */
6958           this._value = undefined;
6959           /** @type {!Array<!Function>} */
6960           this._deferreds = [];
6961
6962           doResolve(fn, this);
6963         }
6964
6965         function handle(self, deferred) {
6966           while (self._state === 3) {
6967             self = self._value;
6968           }
6969           if (self._state === 0) {
6970             self._deferreds.push(deferred);
6971             return;
6972           }
6973           self._handled = true;
6974           Promise$1._immediateFn(function() {
6975             var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
6976             if (cb === null) {
6977               (self._state === 1 ? resolve : reject)(deferred.promise, self._value);
6978               return;
6979             }
6980             var ret;
6981             try {
6982               ret = cb(self._value);
6983             } catch (e) {
6984               reject(deferred.promise, e);
6985               return;
6986             }
6987             resolve(deferred.promise, ret);
6988           });
6989         }
6990
6991         function resolve(self, newValue) {
6992           try {
6993             // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
6994             if (newValue === self)
6995               { throw new TypeError('A promise cannot be resolved with itself.'); }
6996             if (
6997               newValue &&
6998               (typeof newValue === 'object' || typeof newValue === 'function')
6999             ) {
7000               var then = newValue.then;
7001               if (newValue instanceof Promise$1) {
7002                 self._state = 3;
7003                 self._value = newValue;
7004                 finale(self);
7005                 return;
7006               } else if (typeof then === 'function') {
7007                 doResolve(bind$2(then, newValue), self);
7008                 return;
7009               }
7010             }
7011             self._state = 1;
7012             self._value = newValue;
7013             finale(self);
7014           } catch (e) {
7015             reject(self, e);
7016           }
7017         }
7018
7019         function reject(self, newValue) {
7020           self._state = 2;
7021           self._value = newValue;
7022           finale(self);
7023         }
7024
7025         function finale(self) {
7026           if (self._state === 2 && self._deferreds.length === 0) {
7027             Promise$1._immediateFn(function() {
7028               if (!self._handled) {
7029                 Promise$1._unhandledRejectionFn(self._value);
7030               }
7031             });
7032           }
7033
7034           for (var i = 0, len = self._deferreds.length; i < len; i++) {
7035             handle(self, self._deferreds[i]);
7036           }
7037           self._deferreds = null;
7038         }
7039
7040         /**
7041          * @constructor
7042          */
7043         function Handler(onFulfilled, onRejected, promise) {
7044           this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
7045           this.onRejected = typeof onRejected === 'function' ? onRejected : null;
7046           this.promise = promise;
7047         }
7048
7049         /**
7050          * Take a potentially misbehaving resolver function and make sure
7051          * onFulfilled and onRejected are only called once.
7052          *
7053          * Makes no guarantees about asynchrony.
7054          */
7055         function doResolve(fn, self) {
7056           var done = false;
7057           try {
7058             fn(
7059               function(value) {
7060                 if (done) { return; }
7061                 done = true;
7062                 resolve(self, value);
7063               },
7064               function(reason) {
7065                 if (done) { return; }
7066                 done = true;
7067                 reject(self, reason);
7068               }
7069             );
7070           } catch (ex) {
7071             if (done) { return; }
7072             done = true;
7073             reject(self, ex);
7074           }
7075         }
7076
7077         Promise$1.prototype['catch'] = function(onRejected) {
7078           return this.then(null, onRejected);
7079         };
7080
7081         Promise$1.prototype.then = function(onFulfilled, onRejected) {
7082           // @ts-ignore
7083           var prom = new this.constructor(noop$1);
7084
7085           handle(this, new Handler(onFulfilled, onRejected, prom));
7086           return prom;
7087         };
7088
7089         Promise$1.prototype['finally'] = finallyConstructor;
7090
7091         Promise$1.all = function(arr) {
7092           return new Promise$1(function(resolve, reject) {
7093             if (!isArray$4(arr)) {
7094               return reject(new TypeError('Promise.all accepts an array'));
7095             }
7096
7097             var args = Array.prototype.slice.call(arr);
7098             if (args.length === 0) { return resolve([]); }
7099             var remaining = args.length;
7100
7101             function res(i, val) {
7102               try {
7103                 if (val && (typeof val === 'object' || typeof val === 'function')) {
7104                   var then = val.then;
7105                   if (typeof then === 'function') {
7106                     then.call(
7107                       val,
7108                       function(val) {
7109                         res(i, val);
7110                       },
7111                       reject
7112                     );
7113                     return;
7114                   }
7115                 }
7116                 args[i] = val;
7117                 if (--remaining === 0) {
7118                   resolve(args);
7119                 }
7120               } catch (ex) {
7121                 reject(ex);
7122               }
7123             }
7124
7125             for (var i = 0; i < args.length; i++) {
7126               res(i, args[i]);
7127             }
7128           });
7129         };
7130
7131         Promise$1.resolve = function(value) {
7132           if (value && typeof value === 'object' && value.constructor === Promise$1) {
7133             return value;
7134           }
7135
7136           return new Promise$1(function(resolve) {
7137             resolve(value);
7138           });
7139         };
7140
7141         Promise$1.reject = function(value) {
7142           return new Promise$1(function(resolve, reject) {
7143             reject(value);
7144           });
7145         };
7146
7147         Promise$1.race = function(arr) {
7148           return new Promise$1(function(resolve, reject) {
7149             if (!isArray$4(arr)) {
7150               return reject(new TypeError('Promise.race accepts an array'));
7151             }
7152
7153             for (var i = 0, len = arr.length; i < len; i++) {
7154               Promise$1.resolve(arr[i]).then(resolve, reject);
7155             }
7156           });
7157         };
7158
7159         // Use polyfill for setImmediate for performance gains
7160         Promise$1._immediateFn =
7161           // @ts-ignore
7162           (typeof setImmediate === 'function' &&
7163             function(fn) {
7164               // @ts-ignore
7165               setImmediate(fn);
7166             }) ||
7167           function(fn) {
7168             setTimeoutFunc(fn, 0);
7169           };
7170
7171         Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) {
7172           if (typeof console !== 'undefined' && console) {
7173             console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
7174           }
7175         };
7176
7177         /** @suppress {undefinedVars} */
7178         var globalNS = (function() {
7179           // the only reliable means to get the global object is
7180           // `Function('return this')()`
7181           // However, this causes CSP violations in Chrome apps.
7182           if (typeof self !== 'undefined') {
7183             return self;
7184           }
7185           if (typeof window !== 'undefined') {
7186             return window;
7187           }
7188           if (typeof global !== 'undefined') {
7189             return global;
7190           }
7191           throw new Error('unable to locate global object');
7192         })();
7193
7194         if (!('Promise' in globalNS)) {
7195           globalNS['Promise'] = Promise$1;
7196         } else if (!globalNS.Promise.prototype['finally']) {
7197           globalNS.Promise.prototype['finally'] = finallyConstructor;
7198         }
7199
7200         var polyfill$e = /*#__PURE__*/Object.freeze({
7201                 __proto__: null
7202         });
7203
7204         var setAsap = createCommonjsModule(function (module) {
7205         (function (thisVar, undefined$1) {
7206                 var main = (typeof window === 'object' && window) || (typeof commonjsGlobal === 'object' && commonjsGlobal) ||
7207                         typeof self === 'object' && self || thisVar;
7208
7209                 var hasSetImmediate = typeof setImmediate === 'function';
7210                 var hasNextTick = typeof process === 'object' && !!process && typeof process.nextTick === 'function';
7211                 var index = 0;
7212
7213                 function getNewIndex() {
7214                         if (index === 9007199254740991) {
7215                                 return 0;
7216                         }
7217                         return ++index;
7218                 }
7219
7220                 var setAsap = (function () {
7221                         var hiddenDiv, scriptEl, timeoutFn, callbacks;
7222
7223                         // Modern browsers, fastest async
7224                         if (main.MutationObserver) {
7225                                 return function setAsap(callback) {
7226                                         hiddenDiv = document.createElement("div");
7227                                         (new MutationObserver(function() {
7228                                                 callback();
7229                                                 hiddenDiv = null;
7230                                         })).observe(hiddenDiv, { attributes: true });
7231                                         hiddenDiv.setAttribute('i', '1');
7232                                 };
7233
7234                         // Browsers that support postMessage
7235                         } else if (!hasSetImmediate && main.postMessage && !main.importScripts && main.addEventListener) {
7236
7237                                 var MESSAGE_PREFIX = "com.setImmediate" + Math.random();
7238                                 callbacks = {};
7239
7240                                 var onGlobalMessage = function (event) {
7241                                         if (event.source === main && event.data.indexOf(MESSAGE_PREFIX) === 0) {
7242                                                 var i = +event.data.split(':')[1];
7243                                                 callbacks[i]();
7244                                                 delete callbacks[i];
7245                                         }
7246                                 };
7247
7248                                 main.addEventListener("message", onGlobalMessage, false);
7249
7250                                 return function setAsap(callback) {
7251                                         var i = getNewIndex();
7252                                         callbacks[i] = callback;
7253                                         main.postMessage(MESSAGE_PREFIX + ':' + i, "*");
7254                                 };
7255
7256                                 // IE browsers without postMessage
7257                         } else if (!hasSetImmediate && main.document && 'onreadystatechange' in document.createElement('script')) {
7258
7259                                 return function setAsap(callback) {
7260                                         scriptEl = document.createElement("script");
7261                                         scriptEl.onreadystatechange = function onreadystatechange() {
7262                                                 scriptEl.onreadystatechange = null;
7263                                                 scriptEl.parentNode.removeChild(scriptEl);
7264                                                 scriptEl = null;
7265                                                 callback();
7266                                         };
7267                                         document.body.appendChild(scriptEl);
7268                                 };
7269
7270                         // All other browsers and node
7271                         } else {
7272
7273                                 timeoutFn = (hasSetImmediate && setImmediate) || (hasNextTick && process.nextTick) || setTimeout;
7274                                 return function setAsap(callback) {
7275                                         timeoutFn(callback);
7276                                 };
7277                         }
7278
7279                 })();
7280
7281                 if ( module.exports) {
7282                         module.exports = setAsap;
7283                 } else if (typeof commonjsRequire !== 'undefined' && commonjsRequire.amd) {
7284                         undefined$1(function () {
7285                                 return setAsap;
7286                         });
7287                 } else {
7288                         main.setAsap = setAsap;
7289                 }
7290         })(commonjsGlobal);
7291         });
7292
7293         var performanceNow = createCommonjsModule(function (module) {
7294         // Generated by CoffeeScript 1.12.2
7295         (function() {
7296           var getNanoSeconds, hrtime, loadTime, moduleLoadTime, nodeLoadTime, upTime;
7297
7298           if ((typeof performance !== "undefined" && performance !== null) && performance.now) {
7299             module.exports = function() {
7300               return performance.now();
7301             };
7302           } else if ((typeof process !== "undefined" && process !== null) && process.hrtime) {
7303             module.exports = function() {
7304               return (getNanoSeconds() - nodeLoadTime) / 1e6;
7305             };
7306             hrtime = process.hrtime;
7307             getNanoSeconds = function() {
7308               var hr;
7309               hr = hrtime();
7310               return hr[0] * 1e9 + hr[1];
7311             };
7312             moduleLoadTime = getNanoSeconds();
7313             upTime = process.uptime() * 1e9;
7314             nodeLoadTime = moduleLoadTime - upTime;
7315           } else if (Date.now) {
7316             module.exports = function() {
7317               return Date.now() - loadTime;
7318             };
7319             loadTime = Date.now();
7320           } else {
7321             module.exports = function() {
7322               return new Date().getTime() - loadTime;
7323             };
7324             loadTime = new Date().getTime();
7325           }
7326
7327         }).call(commonjsGlobal);
7328
7329
7330         });
7331
7332         var root = typeof window === 'undefined' ? commonjsGlobal : window
7333           , vendors = ['moz', 'webkit']
7334           , suffix = 'AnimationFrame'
7335           , raf = root['request' + suffix]
7336           , caf = root['cancel' + suffix] || root['cancelRequest' + suffix];
7337
7338         for(var i = 0; !raf && i < vendors.length; i++) {
7339           raf = root[vendors[i] + 'Request' + suffix];
7340           caf = root[vendors[i] + 'Cancel' + suffix]
7341               || root[vendors[i] + 'CancelRequest' + suffix];
7342         }
7343
7344         // Some versions of FF have rAF but not cAF
7345         if(!raf || !caf) {
7346           var last = 0
7347             , id$2 = 0
7348             , queue = []
7349             , frameDuration = 1000 / 60;
7350
7351           raf = function(callback) {
7352             if(queue.length === 0) {
7353               var _now = performanceNow()
7354                 , next = Math.max(0, frameDuration - (_now - last));
7355               last = next + _now;
7356               setTimeout(function() {
7357                 var cp = queue.slice(0);
7358                 // Clear queue here to prevent
7359                 // callbacks from appending listeners
7360                 // to the current frame's queue
7361                 queue.length = 0;
7362                 for(var i = 0; i < cp.length; i++) {
7363                   if(!cp[i].cancelled) {
7364                     try{
7365                       cp[i].callback(last);
7366                     } catch(e) {
7367                       setTimeout(function() { throw e }, 0);
7368                     }
7369                   }
7370                 }
7371               }, Math.round(next));
7372             }
7373             queue.push({
7374               handle: ++id$2,
7375               callback: callback,
7376               cancelled: false
7377             });
7378             return id$2
7379           };
7380
7381           caf = function(handle) {
7382             for(var i = 0; i < queue.length; i++) {
7383               if(queue[i].handle === handle) {
7384                 queue[i].cancelled = true;
7385               }
7386             }
7387           };
7388         }
7389
7390         var raf_1 = function(fn) {
7391           // Wrap in a new function to prevent
7392           // `cancel` potentially being assigned
7393           // to the native rAF function
7394           return raf.call(root, fn)
7395         };
7396         var cancel = function() {
7397           caf.apply(root, arguments);
7398         };
7399         var polyfill$f = function(object) {
7400           if (!object) {
7401             object = root;
7402           }
7403           object.requestAnimationFrame = raf;
7404           object.cancelAnimationFrame = caf;
7405         };
7406         raf_1.cancel = cancel;
7407         raf_1.polyfill = polyfill$f;
7408
7409         var support = {
7410           searchParams: 'URLSearchParams' in self,
7411           iterable: 'Symbol' in self && 'iterator' in Symbol,
7412           blob:
7413             'FileReader' in self &&
7414             'Blob' in self &&
7415             (function() {
7416               try {
7417                 new Blob();
7418                 return true
7419               } catch (e) {
7420                 return false
7421               }
7422             })(),
7423           formData: 'FormData' in self,
7424           arrayBuffer: 'ArrayBuffer' in self
7425         };
7426
7427         function isDataView(obj) {
7428           return obj && DataView.prototype.isPrototypeOf(obj)
7429         }
7430
7431         if (support.arrayBuffer) {
7432           var viewClasses = [
7433             '[object Int8Array]',
7434             '[object Uint8Array]',
7435             '[object Uint8ClampedArray]',
7436             '[object Int16Array]',
7437             '[object Uint16Array]',
7438             '[object Int32Array]',
7439             '[object Uint32Array]',
7440             '[object Float32Array]',
7441             '[object Float64Array]'
7442           ];
7443
7444           var isArrayBufferView =
7445             ArrayBuffer.isView ||
7446             function(obj) {
7447               return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
7448             };
7449         }
7450
7451         function normalizeName(name) {
7452           if (typeof name !== 'string') {
7453             name = String(name);
7454           }
7455           if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) {
7456             throw new TypeError('Invalid character in header field name')
7457           }
7458           return name.toLowerCase()
7459         }
7460
7461         function normalizeValue(value) {
7462           if (typeof value !== 'string') {
7463             value = String(value);
7464           }
7465           return value
7466         }
7467
7468         // Build a destructive iterator for the value list
7469         function iteratorFor(items) {
7470           var iterator = {
7471             next: function() {
7472               var value = items.shift();
7473               return {done: value === undefined, value: value}
7474             }
7475           };
7476
7477           if (support.iterable) {
7478             iterator[Symbol.iterator] = function() {
7479               return iterator
7480             };
7481           }
7482
7483           return iterator
7484         }
7485
7486         function Headers(headers) {
7487           this.map = {};
7488
7489           if (headers instanceof Headers) {
7490             headers.forEach(function(value, name) {
7491               this.append(name, value);
7492             }, this);
7493           } else if (Array.isArray(headers)) {
7494             headers.forEach(function(header) {
7495               this.append(header[0], header[1]);
7496             }, this);
7497           } else if (headers) {
7498             Object.getOwnPropertyNames(headers).forEach(function(name) {
7499               this.append(name, headers[name]);
7500             }, this);
7501           }
7502         }
7503
7504         Headers.prototype.append = function(name, value) {
7505           name = normalizeName(name);
7506           value = normalizeValue(value);
7507           var oldValue = this.map[name];
7508           this.map[name] = oldValue ? oldValue + ', ' + value : value;
7509         };
7510
7511         Headers.prototype['delete'] = function(name) {
7512           delete this.map[normalizeName(name)];
7513         };
7514
7515         Headers.prototype.get = function(name) {
7516           name = normalizeName(name);
7517           return this.has(name) ? this.map[name] : null
7518         };
7519
7520         Headers.prototype.has = function(name) {
7521           return this.map.hasOwnProperty(normalizeName(name))
7522         };
7523
7524         Headers.prototype.set = function(name, value) {
7525           this.map[normalizeName(name)] = normalizeValue(value);
7526         };
7527
7528         Headers.prototype.forEach = function(callback, thisArg) {
7529           for (var name in this.map) {
7530             if (this.map.hasOwnProperty(name)) {
7531               callback.call(thisArg, this.map[name], name, this);
7532             }
7533           }
7534         };
7535
7536         Headers.prototype.keys = function() {
7537           var items = [];
7538           this.forEach(function(value, name) {
7539             items.push(name);
7540           });
7541           return iteratorFor(items)
7542         };
7543
7544         Headers.prototype.values = function() {
7545           var items = [];
7546           this.forEach(function(value) {
7547             items.push(value);
7548           });
7549           return iteratorFor(items)
7550         };
7551
7552         Headers.prototype.entries = function() {
7553           var items = [];
7554           this.forEach(function(value, name) {
7555             items.push([name, value]);
7556           });
7557           return iteratorFor(items)
7558         };
7559
7560         if (support.iterable) {
7561           Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
7562         }
7563
7564         function consumed(body) {
7565           if (body.bodyUsed) {
7566             return Promise.reject(new TypeError('Already read'))
7567           }
7568           body.bodyUsed = true;
7569         }
7570
7571         function fileReaderReady(reader) {
7572           return new Promise(function(resolve, reject) {
7573             reader.onload = function() {
7574               resolve(reader.result);
7575             };
7576             reader.onerror = function() {
7577               reject(reader.error);
7578             };
7579           })
7580         }
7581
7582         function readBlobAsArrayBuffer(blob) {
7583           var reader = new FileReader();
7584           var promise = fileReaderReady(reader);
7585           reader.readAsArrayBuffer(blob);
7586           return promise
7587         }
7588
7589         function readBlobAsText(blob) {
7590           var reader = new FileReader();
7591           var promise = fileReaderReady(reader);
7592           reader.readAsText(blob);
7593           return promise
7594         }
7595
7596         function readArrayBufferAsText(buf) {
7597           var view = new Uint8Array(buf);
7598           var chars = new Array(view.length);
7599
7600           for (var i = 0; i < view.length; i++) {
7601             chars[i] = String.fromCharCode(view[i]);
7602           }
7603           return chars.join('')
7604         }
7605
7606         function bufferClone(buf) {
7607           if (buf.slice) {
7608             return buf.slice(0)
7609           } else {
7610             var view = new Uint8Array(buf.byteLength);
7611             view.set(new Uint8Array(buf));
7612             return view.buffer
7613           }
7614         }
7615
7616         function Body() {
7617           this.bodyUsed = false;
7618
7619           this._initBody = function(body) {
7620             this._bodyInit = body;
7621             if (!body) {
7622               this._bodyText = '';
7623             } else if (typeof body === 'string') {
7624               this._bodyText = body;
7625             } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
7626               this._bodyBlob = body;
7627             } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
7628               this._bodyFormData = body;
7629             } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
7630               this._bodyText = body.toString();
7631             } else if (support.arrayBuffer && support.blob && isDataView(body)) {
7632               this._bodyArrayBuffer = bufferClone(body.buffer);
7633               // IE 10-11 can't handle a DataView body.
7634               this._bodyInit = new Blob([this._bodyArrayBuffer]);
7635             } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
7636               this._bodyArrayBuffer = bufferClone(body);
7637             } else {
7638               this._bodyText = body = Object.prototype.toString.call(body);
7639             }
7640
7641             if (!this.headers.get('content-type')) {
7642               if (typeof body === 'string') {
7643                 this.headers.set('content-type', 'text/plain;charset=UTF-8');
7644               } else if (this._bodyBlob && this._bodyBlob.type) {
7645                 this.headers.set('content-type', this._bodyBlob.type);
7646               } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
7647                 this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
7648               }
7649             }
7650           };
7651
7652           if (support.blob) {
7653             this.blob = function() {
7654               var rejected = consumed(this);
7655               if (rejected) {
7656                 return rejected
7657               }
7658
7659               if (this._bodyBlob) {
7660                 return Promise.resolve(this._bodyBlob)
7661               } else if (this._bodyArrayBuffer) {
7662                 return Promise.resolve(new Blob([this._bodyArrayBuffer]))
7663               } else if (this._bodyFormData) {
7664                 throw new Error('could not read FormData body as blob')
7665               } else {
7666                 return Promise.resolve(new Blob([this._bodyText]))
7667               }
7668             };
7669
7670             this.arrayBuffer = function() {
7671               if (this._bodyArrayBuffer) {
7672                 return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
7673               } else {
7674                 return this.blob().then(readBlobAsArrayBuffer)
7675               }
7676             };
7677           }
7678
7679           this.text = function() {
7680             var rejected = consumed(this);
7681             if (rejected) {
7682               return rejected
7683             }
7684
7685             if (this._bodyBlob) {
7686               return readBlobAsText(this._bodyBlob)
7687             } else if (this._bodyArrayBuffer) {
7688               return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
7689             } else if (this._bodyFormData) {
7690               throw new Error('could not read FormData body as text')
7691             } else {
7692               return Promise.resolve(this._bodyText)
7693             }
7694           };
7695
7696           if (support.formData) {
7697             this.formData = function() {
7698               return this.text().then(decode)
7699             };
7700           }
7701
7702           this.json = function() {
7703             return this.text().then(JSON.parse)
7704           };
7705
7706           return this
7707         }
7708
7709         // HTTP methods whose capitalization should be normalized
7710         var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
7711
7712         function normalizeMethod(method) {
7713           var upcased = method.toUpperCase();
7714           return methods.indexOf(upcased) > -1 ? upcased : method
7715         }
7716
7717         function Request(input, options) {
7718           options = options || {};
7719           var body = options.body;
7720
7721           if (input instanceof Request) {
7722             if (input.bodyUsed) {
7723               throw new TypeError('Already read')
7724             }
7725             this.url = input.url;
7726             this.credentials = input.credentials;
7727             if (!options.headers) {
7728               this.headers = new Headers(input.headers);
7729             }
7730             this.method = input.method;
7731             this.mode = input.mode;
7732             this.signal = input.signal;
7733             if (!body && input._bodyInit != null) {
7734               body = input._bodyInit;
7735               input.bodyUsed = true;
7736             }
7737           } else {
7738             this.url = String(input);
7739           }
7740
7741           this.credentials = options.credentials || this.credentials || 'same-origin';
7742           if (options.headers || !this.headers) {
7743             this.headers = new Headers(options.headers);
7744           }
7745           this.method = normalizeMethod(options.method || this.method || 'GET');
7746           this.mode = options.mode || this.mode || null;
7747           this.signal = options.signal || this.signal;
7748           this.referrer = null;
7749
7750           if ((this.method === 'GET' || this.method === 'HEAD') && body) {
7751             throw new TypeError('Body not allowed for GET or HEAD requests')
7752           }
7753           this._initBody(body);
7754         }
7755
7756         Request.prototype.clone = function() {
7757           return new Request(this, {body: this._bodyInit})
7758         };
7759
7760         function decode(body) {
7761           var form = new FormData();
7762           body
7763             .trim()
7764             .split('&')
7765             .forEach(function(bytes) {
7766               if (bytes) {
7767                 var split = bytes.split('=');
7768                 var name = split.shift().replace(/\+/g, ' ');
7769                 var value = split.join('=').replace(/\+/g, ' ');
7770                 form.append(decodeURIComponent(name), decodeURIComponent(value));
7771               }
7772             });
7773           return form
7774         }
7775
7776         function parseHeaders(rawHeaders) {
7777           var headers = new Headers();
7778           // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
7779           // https://tools.ietf.org/html/rfc7230#section-3.2
7780           var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
7781           preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
7782             var parts = line.split(':');
7783             var key = parts.shift().trim();
7784             if (key) {
7785               var value = parts.join(':').trim();
7786               headers.append(key, value);
7787             }
7788           });
7789           return headers
7790         }
7791
7792         Body.call(Request.prototype);
7793
7794         function Response(bodyInit, options) {
7795           if (!options) {
7796             options = {};
7797           }
7798
7799           this.type = 'default';
7800           this.status = options.status === undefined ? 200 : options.status;
7801           this.ok = this.status >= 200 && this.status < 300;
7802           this.statusText = 'statusText' in options ? options.statusText : 'OK';
7803           this.headers = new Headers(options.headers);
7804           this.url = options.url || '';
7805           this._initBody(bodyInit);
7806         }
7807
7808         Body.call(Response.prototype);
7809
7810         Response.prototype.clone = function() {
7811           return new Response(this._bodyInit, {
7812             status: this.status,
7813             statusText: this.statusText,
7814             headers: new Headers(this.headers),
7815             url: this.url
7816           })
7817         };
7818
7819         Response.error = function() {
7820           var response = new Response(null, {status: 0, statusText: ''});
7821           response.type = 'error';
7822           return response
7823         };
7824
7825         var redirectStatuses = [301, 302, 303, 307, 308];
7826
7827         Response.redirect = function(url, status) {
7828           if (redirectStatuses.indexOf(status) === -1) {
7829             throw new RangeError('Invalid status code')
7830           }
7831
7832           return new Response(null, {status: status, headers: {location: url}})
7833         };
7834
7835         var DOMException$1 = self.DOMException;
7836         try {
7837           new DOMException$1();
7838         } catch (err) {
7839           DOMException$1 = function(message, name) {
7840             this.message = message;
7841             this.name = name;
7842             var error = Error(message);
7843             this.stack = error.stack;
7844           };
7845           DOMException$1.prototype = Object.create(Error.prototype);
7846           DOMException$1.prototype.constructor = DOMException$1;
7847         }
7848
7849         function fetch$1(input, init) {
7850           return new Promise(function(resolve, reject) {
7851             var request = new Request(input, init);
7852
7853             if (request.signal && request.signal.aborted) {
7854               return reject(new DOMException$1('Aborted', 'AbortError'))
7855             }
7856
7857             var xhr = new XMLHttpRequest();
7858
7859             function abortXhr() {
7860               xhr.abort();
7861             }
7862
7863             xhr.onload = function() {
7864               var options = {
7865                 status: xhr.status,
7866                 statusText: xhr.statusText,
7867                 headers: parseHeaders(xhr.getAllResponseHeaders() || '')
7868               };
7869               options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
7870               var body = 'response' in xhr ? xhr.response : xhr.responseText;
7871               resolve(new Response(body, options));
7872             };
7873
7874             xhr.onerror = function() {
7875               reject(new TypeError('Network request failed'));
7876             };
7877
7878             xhr.ontimeout = function() {
7879               reject(new TypeError('Network request failed'));
7880             };
7881
7882             xhr.onabort = function() {
7883               reject(new DOMException$1('Aborted', 'AbortError'));
7884             };
7885
7886             xhr.open(request.method, request.url, true);
7887
7888             if (request.credentials === 'include') {
7889               xhr.withCredentials = true;
7890             } else if (request.credentials === 'omit') {
7891               xhr.withCredentials = false;
7892             }
7893
7894             if ('responseType' in xhr && support.blob) {
7895               xhr.responseType = 'blob';
7896             }
7897
7898             request.headers.forEach(function(value, name) {
7899               xhr.setRequestHeader(name, value);
7900             });
7901
7902             if (request.signal) {
7903               request.signal.addEventListener('abort', abortXhr);
7904
7905               xhr.onreadystatechange = function() {
7906                 // DONE (success or failure)
7907                 if (xhr.readyState === 4) {
7908                   request.signal.removeEventListener('abort', abortXhr);
7909                 }
7910               };
7911             }
7912
7913             xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
7914           })
7915         }
7916
7917         fetch$1.polyfill = true;
7918
7919         if (!self.fetch) {
7920           self.fetch = fetch$1;
7921           self.Headers = Headers;
7922           self.Request = Request;
7923           self.Response = Response;
7924         }
7925
7926         var lib = createCommonjsModule(function (module, exports) {
7927         Object.defineProperty(exports, "__esModule", { value: true });
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938         if (!window.Set) {
7939             window.Set = es6Set;
7940         }
7941         if (!window.Map) {
7942             window.Map = es6Map;
7943         }
7944         if (!window.Promise) {
7945             window.Promise = polyfill$e;
7946             window.Promise._immediateFn = setAsap;
7947         }
7948         if (!Array.prototype.find) {
7949             array_prototype_find.shim();
7950         }
7951         if (!Array.prototype.findIndex) {
7952             array_prototype_findindex.shim();
7953         }
7954         if (!Array.from) {
7955             array_from.shim();
7956         }
7957         if (!Object.values) {
7958             object_values.shim();
7959         }
7960         if (!Object.assign) {
7961             object_assign.shim();
7962         }
7963         if (!window.requestAnimationFrame || !window.cancelAnimationFrame) {
7964             window.requestAnimationFrame = raf_1;
7965             window.cancelAnimationFrame = raf_1.cancel;
7966         }
7967
7968         var finalFetch = window.fetch;
7969         var finalPromise = window.Promise;
7970         window.fetch = function (input, init) {
7971             try {
7972                 return finalFetch(input, init);
7973             }
7974             catch (error) {
7975                 return new finalPromise(function (_, reject) { return reject(error); });
7976             }
7977         };
7978         });
7979
7980         unwrapExports(lib);
7981
7982         /*! http://mths.be/fromcodepoint v0.2.1 by @mathias */
7983         if (!String.fromCodePoint) {
7984                 (function() {
7985                         var defineProperty = (function() {
7986                                 // IE 8 only supports `Object.defineProperty` on DOM elements
7987                                 try {
7988                                         var object = {};
7989                                         var $defineProperty = Object.defineProperty;
7990                                         var result = $defineProperty(object, object, object) && $defineProperty;
7991                                 } catch(error) {}
7992                                 return result;
7993                         }());
7994                         var stringFromCharCode = String.fromCharCode;
7995                         var floor = Math.floor;
7996                         var fromCodePoint = function(_) {
7997                                 var arguments$1 = arguments;
7998
7999                                 var MAX_SIZE = 0x4000;
8000                                 var codeUnits = [];
8001                                 var highSurrogate;
8002                                 var lowSurrogate;
8003                                 var index = -1;
8004                                 var length = arguments.length;
8005                                 if (!length) {
8006                                         return '';
8007                                 }
8008                                 var result = '';
8009                                 while (++index < length) {
8010                                         var codePoint = Number(arguments$1[index]);
8011                                         if (
8012                                                 !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
8013                                                 codePoint < 0 || // not a valid Unicode code point
8014                                                 codePoint > 0x10FFFF || // not a valid Unicode code point
8015                                                 floor(codePoint) != codePoint // not an integer
8016                                         ) {
8017                                                 throw RangeError('Invalid code point: ' + codePoint);
8018                                         }
8019                                         if (codePoint <= 0xFFFF) { // BMP code point
8020                                                 codeUnits.push(codePoint);
8021                                         } else { // Astral code point; split in surrogate halves
8022                                                 // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
8023                                                 codePoint -= 0x10000;
8024                                                 highSurrogate = (codePoint >> 10) + 0xD800;
8025                                                 lowSurrogate = (codePoint % 0x400) + 0xDC00;
8026                                                 codeUnits.push(highSurrogate, lowSurrogate);
8027                                         }
8028                                         if (index + 1 == length || codeUnits.length > MAX_SIZE) {
8029                                                 result += stringFromCharCode.apply(null, codeUnits);
8030                                                 codeUnits.length = 0;
8031                                         }
8032                                 }
8033                                 return result;
8034                         };
8035                         if (defineProperty) {
8036                                 defineProperty(String, 'fromCodePoint', {
8037                                         'value': fromCodePoint,
8038                                         'configurable': true,
8039                                         'writable': true
8040                                 });
8041                         } else {
8042                                 String.fromCodePoint = fromCodePoint;
8043                         }
8044                 }());
8045         }
8046
8047         (function (factory) {
8048           
8049           factory();
8050         }((function () {
8051           function _classCallCheck(instance, Constructor) {
8052             if (!(instance instanceof Constructor)) {
8053               throw new TypeError("Cannot call a class as a function");
8054             }
8055           }
8056
8057           function _defineProperties(target, props) {
8058             for (var i = 0; i < props.length; i++) {
8059               var descriptor = props[i];
8060               descriptor.enumerable = descriptor.enumerable || false;
8061               descriptor.configurable = true;
8062               if ("value" in descriptor) { descriptor.writable = true; }
8063               Object.defineProperty(target, descriptor.key, descriptor);
8064             }
8065           }
8066
8067           function _createClass(Constructor, protoProps, staticProps) {
8068             if (protoProps) { _defineProperties(Constructor.prototype, protoProps); }
8069             if (staticProps) { _defineProperties(Constructor, staticProps); }
8070             return Constructor;
8071           }
8072
8073           function _inherits(subClass, superClass) {
8074             if (typeof superClass !== "function" && superClass !== null) {
8075               throw new TypeError("Super expression must either be null or a function");
8076             }
8077
8078             subClass.prototype = Object.create(superClass && superClass.prototype, {
8079               constructor: {
8080                 value: subClass,
8081                 writable: true,
8082                 configurable: true
8083               }
8084             });
8085             if (superClass) { _setPrototypeOf(subClass, superClass); }
8086           }
8087
8088           function _getPrototypeOf(o) {
8089             _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
8090               return o.__proto__ || Object.getPrototypeOf(o);
8091             };
8092             return _getPrototypeOf(o);
8093           }
8094
8095           function _setPrototypeOf(o, p) {
8096             _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
8097               o.__proto__ = p;
8098               return o;
8099             };
8100
8101             return _setPrototypeOf(o, p);
8102           }
8103
8104           function _assertThisInitialized(self) {
8105             if (self === void 0) {
8106               throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
8107             }
8108
8109             return self;
8110           }
8111
8112           function _possibleConstructorReturn(self, call) {
8113             if (call && (typeof call === "object" || typeof call === "function")) {
8114               return call;
8115             }
8116
8117             return _assertThisInitialized(self);
8118           }
8119
8120           function _superPropBase(object, property) {
8121             while (!Object.prototype.hasOwnProperty.call(object, property)) {
8122               object = _getPrototypeOf(object);
8123               if (object === null) { break; }
8124             }
8125
8126             return object;
8127           }
8128
8129           function _get(target, property, receiver) {
8130             if (typeof Reflect !== "undefined" && Reflect.get) {
8131               _get = Reflect.get;
8132             } else {
8133               _get = function _get(target, property, receiver) {
8134                 var base = _superPropBase(target, property);
8135
8136                 if (!base) { return; }
8137                 var desc = Object.getOwnPropertyDescriptor(base, property);
8138
8139                 if (desc.get) {
8140                   return desc.get.call(receiver);
8141                 }
8142
8143                 return desc.value;
8144               };
8145             }
8146
8147             return _get(target, property, receiver || target);
8148           }
8149
8150           var Emitter =
8151           /*#__PURE__*/
8152           function () {
8153             function Emitter() {
8154               _classCallCheck(this, Emitter);
8155
8156               Object.defineProperty(this, 'listeners', {
8157                 value: {},
8158                 writable: true,
8159                 configurable: true
8160               });
8161             }
8162
8163             _createClass(Emitter, [{
8164               key: "addEventListener",
8165               value: function addEventListener(type, callback) {
8166                 if (!(type in this.listeners)) {
8167                   this.listeners[type] = [];
8168                 }
8169
8170                 this.listeners[type].push(callback);
8171               }
8172             }, {
8173               key: "removeEventListener",
8174               value: function removeEventListener(type, callback) {
8175                 if (!(type in this.listeners)) {
8176                   return;
8177                 }
8178
8179                 var stack = this.listeners[type];
8180
8181                 for (var i = 0, l = stack.length; i < l; i++) {
8182                   if (stack[i] === callback) {
8183                     stack.splice(i, 1);
8184                     return;
8185                   }
8186                 }
8187               }
8188             }, {
8189               key: "dispatchEvent",
8190               value: function dispatchEvent(event) {
8191                 var _this = this;
8192
8193                 if (!(event.type in this.listeners)) {
8194                   return;
8195                 }
8196
8197                 var debounce = function debounce(callback) {
8198                   setTimeout(function () {
8199                     return callback.call(_this, event);
8200                   });
8201                 };
8202
8203                 var stack = this.listeners[event.type];
8204
8205                 for (var i = 0, l = stack.length; i < l; i++) {
8206                   debounce(stack[i]);
8207                 }
8208
8209                 return !event.defaultPrevented;
8210               }
8211             }]);
8212
8213             return Emitter;
8214           }();
8215
8216           var AbortSignal =
8217           /*#__PURE__*/
8218           function (_Emitter) {
8219             _inherits(AbortSignal, _Emitter);
8220
8221             function AbortSignal() {
8222               var _this2;
8223
8224               _classCallCheck(this, AbortSignal);
8225
8226               _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AbortSignal).call(this)); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
8227               // constructor has failed to run, then "this.listeners" will still be undefined and then we call
8228               // the parent constructor directly instead as a workaround. For general details, see babel bug:
8229               // https://github.com/babel/babel/issues/3041
8230               // This hack was added as a fix for the issue described here:
8231               // https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042
8232
8233               if (!_this2.listeners) {
8234                 Emitter.call(_assertThisInitialized(_this2));
8235               } // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
8236               // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl
8237
8238
8239               Object.defineProperty(_assertThisInitialized(_this2), 'aborted', {
8240                 value: false,
8241                 writable: true,
8242                 configurable: true
8243               });
8244               Object.defineProperty(_assertThisInitialized(_this2), 'onabort', {
8245                 value: null,
8246                 writable: true,
8247                 configurable: true
8248               });
8249               return _this2;
8250             }
8251
8252             _createClass(AbortSignal, [{
8253               key: "toString",
8254               value: function toString() {
8255                 return '[object AbortSignal]';
8256               }
8257             }, {
8258               key: "dispatchEvent",
8259               value: function dispatchEvent(event) {
8260                 if (event.type === 'abort') {
8261                   this.aborted = true;
8262
8263                   if (typeof this.onabort === 'function') {
8264                     this.onabort.call(this, event);
8265                   }
8266                 }
8267
8268                 _get(_getPrototypeOf(AbortSignal.prototype), "dispatchEvent", this).call(this, event);
8269               }
8270             }]);
8271
8272             return AbortSignal;
8273           }(Emitter);
8274           var AbortController =
8275           /*#__PURE__*/
8276           function () {
8277             function AbortController() {
8278               _classCallCheck(this, AbortController);
8279
8280               // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
8281               // we want Object.keys(new AbortController()) to be [] for compat with the native impl
8282               Object.defineProperty(this, 'signal', {
8283                 value: new AbortSignal(),
8284                 writable: true,
8285                 configurable: true
8286               });
8287             }
8288
8289             _createClass(AbortController, [{
8290               key: "abort",
8291               value: function abort() {
8292                 var event;
8293
8294                 try {
8295                   event = new Event('abort');
8296                 } catch (e) {
8297                   if (typeof document !== 'undefined') {
8298                     if (!document.createEvent) {
8299                       // For Internet Explorer 8:
8300                       event = document.createEventObject();
8301                       event.type = 'abort';
8302                     } else {
8303                       // For Internet Explorer 11:
8304                       event = document.createEvent('Event');
8305                       event.initEvent('abort', false, false);
8306                     }
8307                   } else {
8308                     // Fallback where document isn't available:
8309                     event = {
8310                       type: 'abort',
8311                       bubbles: false,
8312                       cancelable: false
8313                     };
8314                   }
8315                 }
8316
8317                 this.signal.dispatchEvent(event);
8318               }
8319             }, {
8320               key: "toString",
8321               value: function toString() {
8322                 return '[object AbortController]';
8323               }
8324             }]);
8325
8326             return AbortController;
8327           }();
8328
8329           if (typeof Symbol !== 'undefined' && Symbol.toStringTag) {
8330             // These are necessary to make sure that we get correct output for:
8331             // Object.prototype.toString.call(new AbortController())
8332             AbortController.prototype[Symbol.toStringTag] = 'AbortController';
8333             AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';
8334           }
8335
8336           function polyfillNeeded(self) {
8337             if (self.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
8338               console.log('__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill');
8339               return true;
8340             } // Note that the "unfetch" minimal fetch polyfill defines fetch() without
8341             // defining window.Request, and this polyfill need to work on top of unfetch
8342             // so the below feature detection needs the !self.AbortController part.
8343             // The Request.prototype check is also needed because Safari versions 11.1.2
8344             // up to and including 12.1.x has a window.AbortController present but still
8345             // does NOT correctly implement abortable fetch:
8346             // https://bugs.webkit.org/show_bug.cgi?id=174980#c2
8347
8348
8349             return typeof self.Request === 'function' && !self.Request.prototype.hasOwnProperty('signal') || !self.AbortController;
8350           }
8351
8352           /**
8353            * Note: the "fetch.Request" default value is available for fetch imported from
8354            * the "node-fetch" package and not in browsers. This is OK since browsers
8355            * will be importing umd-polyfill.js from that path "self" is passed the
8356            * decorator so the default value will not be used (because browsers that define
8357            * fetch also has Request). One quirky setup where self.fetch exists but
8358            * self.Request does not is when the "unfetch" minimal fetch polyfill is used
8359            * on top of IE11; for this case the browser will try to use the fetch.Request
8360            * default value which in turn will be undefined but then then "if (Request)"
8361            * will ensure that you get a patched fetch but still no Request (as expected).
8362            * @param {fetch, Request = fetch.Request}
8363            * @returns {fetch: abortableFetch, Request: AbortableRequest}
8364            */
8365
8366           function abortableFetchDecorator(patchTargets) {
8367             if ('function' === typeof patchTargets) {
8368               patchTargets = {
8369                 fetch: patchTargets
8370               };
8371             }
8372
8373             var _patchTargets = patchTargets,
8374                 fetch = _patchTargets.fetch,
8375                 _patchTargets$Request = _patchTargets.Request,
8376                 NativeRequest = _patchTargets$Request === void 0 ? fetch.Request : _patchTargets$Request,
8377                 NativeAbortController = _patchTargets.AbortController,
8378                 _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,
8379                 __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;
8380
8381             if (!polyfillNeeded({
8382               fetch: fetch,
8383               Request: NativeRequest,
8384               AbortController: NativeAbortController,
8385               __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL: __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL
8386             })) {
8387               return {
8388                 fetch: fetch,
8389                 Request: Request
8390               };
8391             }
8392
8393             var Request = NativeRequest; // Note that the "unfetch" minimal fetch polyfill defines fetch() without
8394             // defining window.Request, and this polyfill need to work on top of unfetch
8395             // hence we only patch it if it's available. Also we don't patch it if signal
8396             // is already available on the Request prototype because in this case support
8397             // is present and the patching below can cause a crash since it assigns to
8398             // request.signal which is technically a read-only property. This latter error
8399             // happens when you run the main5.js node-fetch example in the repo
8400             // "abortcontroller-polyfill-examples". The exact error is:
8401             //   request.signal = init.signal;
8402             //   ^
8403             // TypeError: Cannot set property signal of #<Request> which has only a getter
8404
8405             if (Request && !Request.prototype.hasOwnProperty('signal') || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {
8406               Request = function Request(input, init) {
8407                 var signal;
8408
8409                 if (init && init.signal) {
8410                   signal = init.signal; // Never pass init.signal to the native Request implementation when the polyfill has
8411                   // been installed because if we're running on top of a browser with a
8412                   // working native AbortController (i.e. the polyfill was installed due to
8413                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
8414                   // fake AbortSignal to the native fetch will trigger:
8415                   // TypeError: Failed to construct 'Request': member signal is not of type AbortSignal.
8416
8417                   delete init.signal;
8418                 }
8419
8420                 var request = new NativeRequest(input, init);
8421
8422                 if (signal) {
8423                   Object.defineProperty(request, 'signal', {
8424                     writable: false,
8425                     enumerable: false,
8426                     configurable: true,
8427                     value: signal
8428                   });
8429                 }
8430
8431                 return request;
8432               };
8433
8434               Request.prototype = NativeRequest.prototype;
8435             }
8436
8437             var realFetch = fetch;
8438
8439             var abortableFetch = function abortableFetch(input, init) {
8440               var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;
8441
8442               if (signal) {
8443                 var abortError;
8444
8445                 try {
8446                   abortError = new DOMException('Aborted', 'AbortError');
8447                 } catch (err) {
8448                   // IE 11 does not support calling the DOMException constructor, use a
8449                   // regular error object on it instead.
8450                   abortError = new Error('Aborted');
8451                   abortError.name = 'AbortError';
8452                 } // Return early if already aborted, thus avoiding making an HTTP request
8453
8454
8455                 if (signal.aborted) {
8456                   return Promise.reject(abortError);
8457                 } // Turn an event into a promise, reject it once `abort` is dispatched
8458
8459
8460                 var cancellation = new Promise(function (_, reject) {
8461                   signal.addEventListener('abort', function () {
8462                     return reject(abortError);
8463                   }, {
8464                     once: true
8465                   });
8466                 });
8467
8468                 if (init && init.signal) {
8469                   // Never pass .signal to the native implementation when the polyfill has
8470                   // been installed because if we're running on top of a browser with a
8471                   // working native AbortController (i.e. the polyfill was installed due to
8472                   // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our
8473                   // fake AbortSignal to the native fetch will trigger:
8474                   // TypeError: Failed to execute 'fetch' on 'Window': member signal is not of type AbortSignal.
8475                   delete init.signal;
8476                 } // Return the fastest promise (don't need to wait for request to finish)
8477
8478
8479                 return Promise.race([cancellation, realFetch(input, init)]);
8480               }
8481
8482               return realFetch(input, init);
8483             };
8484
8485             return {
8486               fetch: abortableFetch,
8487               Request: Request
8488             };
8489           }
8490
8491           (function (self) {
8492
8493             if (!polyfillNeeded(self)) {
8494               return;
8495             }
8496
8497             if (!self.fetch) {
8498               console.warn('fetch() is not available, cannot install abortcontroller-polyfill');
8499               return;
8500             }
8501
8502             var _abortableFetch = abortableFetchDecorator(self),
8503                 fetch = _abortableFetch.fetch,
8504                 Request = _abortableFetch.Request;
8505
8506             self.fetch = fetch;
8507             self.Request = Request;
8508             Object.defineProperty(self, 'AbortController', {
8509               writable: true,
8510               enumerable: false,
8511               configurable: true,
8512               value: AbortController
8513             });
8514             Object.defineProperty(self, 'AbortSignal', {
8515               writable: true,
8516               enumerable: false,
8517               configurable: true,
8518               value: AbortSignal
8519             });
8520           })(typeof self !== 'undefined' ? self : commonjsGlobal);
8521
8522         })));
8523
8524         var version = "5.15.0";
8525
8526         function d3_ascending(a, b) {
8527           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
8528         }
8529
8530         function d3_bisector(compare) {
8531           if (compare.length === 1) { compare = ascendingComparator(compare); }
8532           return {
8533             left: function(a, x, lo, hi) {
8534               if (lo == null) { lo = 0; }
8535               if (hi == null) { hi = a.length; }
8536               while (lo < hi) {
8537                 var mid = lo + hi >>> 1;
8538                 if (compare(a[mid], x) < 0) { lo = mid + 1; }
8539                 else { hi = mid; }
8540               }
8541               return lo;
8542             },
8543             right: function(a, x, lo, hi) {
8544               if (lo == null) { lo = 0; }
8545               if (hi == null) { hi = a.length; }
8546               while (lo < hi) {
8547                 var mid = lo + hi >>> 1;
8548                 if (compare(a[mid], x) > 0) { hi = mid; }
8549                 else { lo = mid + 1; }
8550               }
8551               return lo;
8552             }
8553           };
8554         }
8555
8556         function ascendingComparator(f) {
8557           return function(d, x) {
8558             return d3_ascending(f(d), x);
8559           };
8560         }
8561
8562         var ascendingBisect = d3_bisector(d3_ascending);
8563         var bisectRight = ascendingBisect.right;
8564         var bisectLeft = ascendingBisect.left;
8565
8566         function pairs(array, f) {
8567           if (f == null) { f = pair; }
8568           var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
8569           while (i < n) { pairs[i] = f(p, p = array[++i]); }
8570           return pairs;
8571         }
8572
8573         function pair(a, b) {
8574           return [a, b];
8575         }
8576
8577         function cross(values0, values1, reduce) {
8578           var n0 = values0.length,
8579               n1 = values1.length,
8580               values = new Array(n0 * n1),
8581               i0,
8582               i1,
8583               i,
8584               value0;
8585
8586           if (reduce == null) { reduce = pair; }
8587
8588           for (i0 = i = 0; i0 < n0; ++i0) {
8589             for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {
8590               values[i] = reduce(value0, values1[i1]);
8591             }
8592           }
8593
8594           return values;
8595         }
8596
8597         function d3_descending(a, b) {
8598           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
8599         }
8600
8601         function number(x) {
8602           return x === null ? NaN : +x;
8603         }
8604
8605         function variance(values, valueof) {
8606           var n = values.length,
8607               m = 0,
8608               i = -1,
8609               mean = 0,
8610               value,
8611               delta,
8612               sum = 0;
8613
8614           if (valueof == null) {
8615             while (++i < n) {
8616               if (!isNaN(value = number(values[i]))) {
8617                 delta = value - mean;
8618                 mean += delta / ++m;
8619                 sum += delta * (value - mean);
8620               }
8621             }
8622           }
8623
8624           else {
8625             while (++i < n) {
8626               if (!isNaN(value = number(valueof(values[i], i, values)))) {
8627                 delta = value - mean;
8628                 mean += delta / ++m;
8629                 sum += delta * (value - mean);
8630               }
8631             }
8632           }
8633
8634           if (m > 1) { return sum / (m - 1); }
8635         }
8636
8637         function deviation(array, f) {
8638           var v = variance(array, f);
8639           return v ? Math.sqrt(v) : v;
8640         }
8641
8642         function extent(values, valueof) {
8643           var n = values.length,
8644               i = -1,
8645               value,
8646               min,
8647               max;
8648
8649           if (valueof == null) {
8650             while (++i < n) { // Find the first comparable value.
8651               if ((value = values[i]) != null && value >= value) {
8652                 min = max = value;
8653                 while (++i < n) { // Compare the remaining values.
8654                   if ((value = values[i]) != null) {
8655                     if (min > value) { min = value; }
8656                     if (max < value) { max = value; }
8657                   }
8658                 }
8659               }
8660             }
8661           }
8662
8663           else {
8664             while (++i < n) { // Find the first comparable value.
8665               if ((value = valueof(values[i], i, values)) != null && value >= value) {
8666                 min = max = value;
8667                 while (++i < n) { // Compare the remaining values.
8668                   if ((value = valueof(values[i], i, values)) != null) {
8669                     if (min > value) { min = value; }
8670                     if (max < value) { max = value; }
8671                   }
8672                 }
8673               }
8674             }
8675           }
8676
8677           return [min, max];
8678         }
8679
8680         var array$1 = Array.prototype;
8681
8682         var slice$4 = array$1.slice;
8683         var map$2 = array$1.map;
8684
8685         function constant(x) {
8686           return function() {
8687             return x;
8688           };
8689         }
8690
8691         function identity(x) {
8692           return x;
8693         }
8694
8695         function d3_range(start, stop, step) {
8696           start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
8697
8698           var i = -1,
8699               n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
8700               range = new Array(n);
8701
8702           while (++i < n) {
8703             range[i] = start + i * step;
8704           }
8705
8706           return range;
8707         }
8708
8709         var e10 = Math.sqrt(50),
8710             e5 = Math.sqrt(10),
8711             e2 = Math.sqrt(2);
8712
8713         function ticks(start, stop, count) {
8714           var reverse,
8715               i = -1,
8716               n,
8717               ticks,
8718               step;
8719
8720           stop = +stop, start = +start, count = +count;
8721           if (start === stop && count > 0) { return [start]; }
8722           if (reverse = stop < start) { n = start, start = stop, stop = n; }
8723           if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) { return []; }
8724
8725           if (step > 0) {
8726             start = Math.ceil(start / step);
8727             stop = Math.floor(stop / step);
8728             ticks = new Array(n = Math.ceil(stop - start + 1));
8729             while (++i < n) { ticks[i] = (start + i) * step; }
8730           } else {
8731             start = Math.floor(start * step);
8732             stop = Math.ceil(stop * step);
8733             ticks = new Array(n = Math.ceil(start - stop + 1));
8734             while (++i < n) { ticks[i] = (start - i) / step; }
8735           }
8736
8737           if (reverse) { ticks.reverse(); }
8738
8739           return ticks;
8740         }
8741
8742         function tickIncrement(start, stop, count) {
8743           var step = (stop - start) / Math.max(0, count),
8744               power = Math.floor(Math.log(step) / Math.LN10),
8745               error = step / Math.pow(10, power);
8746           return power >= 0
8747               ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)
8748               : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
8749         }
8750
8751         function tickStep(start, stop, count) {
8752           var step0 = Math.abs(stop - start) / Math.max(0, count),
8753               step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
8754               error = step0 / step1;
8755           if (error >= e10) { step1 *= 10; }
8756           else if (error >= e5) { step1 *= 5; }
8757           else if (error >= e2) { step1 *= 2; }
8758           return stop < start ? -step1 : step1;
8759         }
8760
8761         function thresholdSturges(values) {
8762           return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
8763         }
8764
8765         function histogram() {
8766           var value = identity,
8767               domain = extent,
8768               threshold = thresholdSturges;
8769
8770           function histogram(data) {
8771             var i,
8772                 n = data.length,
8773                 x,
8774                 values = new Array(n);
8775
8776             for (i = 0; i < n; ++i) {
8777               values[i] = value(data[i], i, data);
8778             }
8779
8780             var xz = domain(values),
8781                 x0 = xz[0],
8782                 x1 = xz[1],
8783                 tz = threshold(values, x0, x1);
8784
8785             // Convert number of thresholds into uniform thresholds.
8786             if (!Array.isArray(tz)) {
8787               tz = tickStep(x0, x1, tz);
8788               tz = d3_range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive
8789             }
8790
8791             // Remove any thresholds outside the domain.
8792             var m = tz.length;
8793             while (tz[0] <= x0) { tz.shift(), --m; }
8794             while (tz[m - 1] > x1) { tz.pop(), --m; }
8795
8796             var bins = new Array(m + 1),
8797                 bin;
8798
8799             // Initialize bins.
8800             for (i = 0; i <= m; ++i) {
8801               bin = bins[i] = [];
8802               bin.x0 = i > 0 ? tz[i - 1] : x0;
8803               bin.x1 = i < m ? tz[i] : x1;
8804             }
8805
8806             // Assign data to bins by value, ignoring any outside the domain.
8807             for (i = 0; i < n; ++i) {
8808               x = values[i];
8809               if (x0 <= x && x <= x1) {
8810                 bins[bisectRight(tz, x, 0, m)].push(data[i]);
8811               }
8812             }
8813
8814             return bins;
8815           }
8816
8817           histogram.value = function(_) {
8818             return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value;
8819           };
8820
8821           histogram.domain = function(_) {
8822             return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain;
8823           };
8824
8825           histogram.thresholds = function(_) {
8826             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice$4.call(_)) : constant(_), histogram) : threshold;
8827           };
8828
8829           return histogram;
8830         }
8831
8832         function threshold(values, p, valueof) {
8833           if (valueof == null) { valueof = number; }
8834           if (!(n = values.length)) { return; }
8835           if ((p = +p) <= 0 || n < 2) { return +valueof(values[0], 0, values); }
8836           if (p >= 1) { return +valueof(values[n - 1], n - 1, values); }
8837           var n,
8838               i = (n - 1) * p,
8839               i0 = Math.floor(i),
8840               value0 = +valueof(values[i0], i0, values),
8841               value1 = +valueof(values[i0 + 1], i0 + 1, values);
8842           return value0 + (value1 - value0) * (i - i0);
8843         }
8844
8845         function freedmanDiaconis(values, min, max) {
8846           values = map$2.call(values, number).sort(d3_ascending);
8847           return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
8848         }
8849
8850         function scott(values, min, max) {
8851           return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
8852         }
8853
8854         function max$2(values, valueof) {
8855           var n = values.length,
8856               i = -1,
8857               value,
8858               max;
8859
8860           if (valueof == null) {
8861             while (++i < n) { // Find the first comparable value.
8862               if ((value = values[i]) != null && value >= value) {
8863                 max = value;
8864                 while (++i < n) { // Compare the remaining values.
8865                   if ((value = values[i]) != null && value > max) {
8866                     max = value;
8867                   }
8868                 }
8869               }
8870             }
8871           }
8872
8873           else {
8874             while (++i < n) { // Find the first comparable value.
8875               if ((value = valueof(values[i], i, values)) != null && value >= value) {
8876                 max = value;
8877                 while (++i < n) { // Compare the remaining values.
8878                   if ((value = valueof(values[i], i, values)) != null && value > max) {
8879                     max = value;
8880                   }
8881                 }
8882               }
8883             }
8884           }
8885
8886           return max;
8887         }
8888
8889         function mean(values, valueof) {
8890           var n = values.length,
8891               m = n,
8892               i = -1,
8893               value,
8894               sum = 0;
8895
8896           if (valueof == null) {
8897             while (++i < n) {
8898               if (!isNaN(value = number(values[i]))) { sum += value; }
8899               else { --m; }
8900             }
8901           }
8902
8903           else {
8904             while (++i < n) {
8905               if (!isNaN(value = number(valueof(values[i], i, values)))) { sum += value; }
8906               else { --m; }
8907             }
8908           }
8909
8910           if (m) { return sum / m; }
8911         }
8912
8913         function d3_median(values, valueof) {
8914           var n = values.length,
8915               i = -1,
8916               value,
8917               numbers = [];
8918
8919           if (valueof == null) {
8920             while (++i < n) {
8921               if (!isNaN(value = number(values[i]))) {
8922                 numbers.push(value);
8923               }
8924             }
8925           }
8926
8927           else {
8928             while (++i < n) {
8929               if (!isNaN(value = number(valueof(values[i], i, values)))) {
8930                 numbers.push(value);
8931               }
8932             }
8933           }
8934
8935           return threshold(numbers.sort(d3_ascending), 0.5);
8936         }
8937
8938         function merge(arrays) {
8939           var n = arrays.length,
8940               m,
8941               i = -1,
8942               j = 0,
8943               merged,
8944               array;
8945
8946           while (++i < n) { j += arrays[i].length; }
8947           merged = new Array(j);
8948
8949           while (--n >= 0) {
8950             array = arrays[n];
8951             m = array.length;
8952             while (--m >= 0) {
8953               merged[--j] = array[m];
8954             }
8955           }
8956
8957           return merged;
8958         }
8959
8960         function min(values, valueof) {
8961           var n = values.length,
8962               i = -1,
8963               value,
8964               min;
8965
8966           if (valueof == null) {
8967             while (++i < n) { // Find the first comparable value.
8968               if ((value = values[i]) != null && value >= value) {
8969                 min = value;
8970                 while (++i < n) { // Compare the remaining values.
8971                   if ((value = values[i]) != null && min > value) {
8972                     min = value;
8973                   }
8974                 }
8975               }
8976             }
8977           }
8978
8979           else {
8980             while (++i < n) { // Find the first comparable value.
8981               if ((value = valueof(values[i], i, values)) != null && value >= value) {
8982                 min = value;
8983                 while (++i < n) { // Compare the remaining values.
8984                   if ((value = valueof(values[i], i, values)) != null && min > value) {
8985                     min = value;
8986                   }
8987                 }
8988               }
8989             }
8990           }
8991
8992           return min;
8993         }
8994
8995         function permute(array, indexes) {
8996           var i = indexes.length, permutes = new Array(i);
8997           while (i--) { permutes[i] = array[indexes[i]]; }
8998           return permutes;
8999         }
9000
9001         function scan(values, compare) {
9002           if (!(n = values.length)) { return; }
9003           var n,
9004               i = 0,
9005               j = 0,
9006               xi,
9007               xj = values[j];
9008
9009           if (compare == null) { compare = d3_ascending; }
9010
9011           while (++i < n) {
9012             if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {
9013               xj = xi, j = i;
9014             }
9015           }
9016
9017           if (compare(xj, xj) === 0) { return j; }
9018         }
9019
9020         function shuffle(array, i0, i1) {
9021           var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
9022               t,
9023               i;
9024
9025           while (m) {
9026             i = Math.random() * m-- | 0;
9027             t = array[m + i0];
9028             array[m + i0] = array[i + i0];
9029             array[i + i0] = t;
9030           }
9031
9032           return array;
9033         }
9034
9035         function sum(values, valueof) {
9036           var n = values.length,
9037               i = -1,
9038               value,
9039               sum = 0;
9040
9041           if (valueof == null) {
9042             while (++i < n) {
9043               if (value = +values[i]) { sum += value; } // Note: zero and null are equivalent.
9044             }
9045           }
9046
9047           else {
9048             while (++i < n) {
9049               if (value = +valueof(values[i], i, values)) { sum += value; }
9050             }
9051           }
9052
9053           return sum;
9054         }
9055
9056         function transpose(matrix) {
9057           if (!(n = matrix.length)) { return []; }
9058           for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
9059             for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
9060               row[j] = matrix[j][i];
9061             }
9062           }
9063           return transpose;
9064         }
9065
9066         function length(d) {
9067           return d.length;
9068         }
9069
9070         function zip() {
9071           return transpose(arguments);
9072         }
9073
9074         var slice$5 = Array.prototype.slice;
9075
9076         function identity$1(x) {
9077           return x;
9078         }
9079
9080         var top = 1,
9081             right = 2,
9082             bottom = 3,
9083             left = 4,
9084             epsilon = 1e-6;
9085
9086         function translateX(x) {
9087           return "translate(" + (x + 0.5) + ",0)";
9088         }
9089
9090         function translateY(y) {
9091           return "translate(0," + (y + 0.5) + ")";
9092         }
9093
9094         function number$1(scale) {
9095           return function(d) {
9096             return +scale(d);
9097           };
9098         }
9099
9100         function center(scale) {
9101           var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
9102           if (scale.round()) { offset = Math.round(offset); }
9103           return function(d) {
9104             return +scale(d) + offset;
9105           };
9106         }
9107
9108         function entering() {
9109           return !this.__axis;
9110         }
9111
9112         function axis(orient, scale) {
9113           var tickArguments = [],
9114               tickValues = null,
9115               tickFormat = null,
9116               tickSizeInner = 6,
9117               tickSizeOuter = 6,
9118               tickPadding = 3,
9119               k = orient === top || orient === left ? -1 : 1,
9120               x = orient === left || orient === right ? "x" : "y",
9121               transform = orient === top || orient === bottom ? translateX : translateY;
9122
9123           function axis(context) {
9124             var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
9125                 format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$1) : tickFormat,
9126                 spacing = Math.max(tickSizeInner, 0) + tickPadding,
9127                 range = scale.range(),
9128                 range0 = +range[0] + 0.5,
9129                 range1 = +range[range.length - 1] + 0.5,
9130                 position = (scale.bandwidth ? center : number$1)(scale.copy()),
9131                 selection = context.selection ? context.selection() : context,
9132                 path = selection.selectAll(".domain").data([null]),
9133                 tick = selection.selectAll(".tick").data(values, scale).order(),
9134                 tickExit = tick.exit(),
9135                 tickEnter = tick.enter().append("g").attr("class", "tick"),
9136                 line = tick.select("line"),
9137                 text = tick.select("text");
9138
9139             path = path.merge(path.enter().insert("path", ".tick")
9140                 .attr("class", "domain")
9141                 .attr("stroke", "currentColor"));
9142
9143             tick = tick.merge(tickEnter);
9144
9145             line = line.merge(tickEnter.append("line")
9146                 .attr("stroke", "currentColor")
9147                 .attr(x + "2", k * tickSizeInner));
9148
9149             text = text.merge(tickEnter.append("text")
9150                 .attr("fill", "currentColor")
9151                 .attr(x, k * spacing)
9152                 .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
9153
9154             if (context !== selection) {
9155               path = path.transition(context);
9156               tick = tick.transition(context);
9157               line = line.transition(context);
9158               text = text.transition(context);
9159
9160               tickExit = tickExit.transition(context)
9161                   .attr("opacity", epsilon)
9162                   .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); });
9163
9164               tickEnter
9165                   .attr("opacity", epsilon)
9166                   .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });
9167             }
9168
9169             tickExit.remove();
9170
9171             path
9172                 .attr("d", orient === left || orient == right
9173                     ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter : "M0.5," + range0 + "V" + range1)
9174                     : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + ",0.5H" + range1));
9175
9176             tick
9177                 .attr("opacity", 1)
9178                 .attr("transform", function(d) { return transform(position(d)); });
9179
9180             line
9181                 .attr(x + "2", k * tickSizeInner);
9182
9183             text
9184                 .attr(x, k * spacing)
9185                 .text(format);
9186
9187             selection.filter(entering)
9188                 .attr("fill", "none")
9189                 .attr("font-size", 10)
9190                 .attr("font-family", "sans-serif")
9191                 .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
9192
9193             selection
9194                 .each(function() { this.__axis = position; });
9195           }
9196
9197           axis.scale = function(_) {
9198             return arguments.length ? (scale = _, axis) : scale;
9199           };
9200
9201           axis.ticks = function() {
9202             return tickArguments = slice$5.call(arguments), axis;
9203           };
9204
9205           axis.tickArguments = function(_) {
9206             return arguments.length ? (tickArguments = _ == null ? [] : slice$5.call(_), axis) : tickArguments.slice();
9207           };
9208
9209           axis.tickValues = function(_) {
9210             return arguments.length ? (tickValues = _ == null ? null : slice$5.call(_), axis) : tickValues && tickValues.slice();
9211           };
9212
9213           axis.tickFormat = function(_) {
9214             return arguments.length ? (tickFormat = _, axis) : tickFormat;
9215           };
9216
9217           axis.tickSize = function(_) {
9218             return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
9219           };
9220
9221           axis.tickSizeInner = function(_) {
9222             return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
9223           };
9224
9225           axis.tickSizeOuter = function(_) {
9226             return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
9227           };
9228
9229           axis.tickPadding = function(_) {
9230             return arguments.length ? (tickPadding = +_, axis) : tickPadding;
9231           };
9232
9233           return axis;
9234         }
9235
9236         function axisTop(scale) {
9237           return axis(top, scale);
9238         }
9239
9240         function axisRight(scale) {
9241           return axis(right, scale);
9242         }
9243
9244         function axisBottom(scale) {
9245           return axis(bottom, scale);
9246         }
9247
9248         function axisLeft(scale) {
9249           return axis(left, scale);
9250         }
9251
9252         var noop$2 = {value: function() {}};
9253
9254         function dispatch() {
9255           var arguments$1 = arguments;
9256
9257           for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
9258             if (!(t = arguments$1[i] + "") || (t in _) || /[\s.]/.test(t)) { throw new Error("illegal type: " + t); }
9259             _[t] = [];
9260           }
9261           return new Dispatch(_);
9262         }
9263
9264         function Dispatch(_) {
9265           this._ = _;
9266         }
9267
9268         function parseTypenames(typenames, types) {
9269           return typenames.trim().split(/^|\s+/).map(function(t) {
9270             var name = "", i = t.indexOf(".");
9271             if (i >= 0) { name = t.slice(i + 1), t = t.slice(0, i); }
9272             if (t && !types.hasOwnProperty(t)) { throw new Error("unknown type: " + t); }
9273             return {type: t, name: name};
9274           });
9275         }
9276
9277         Dispatch.prototype = dispatch.prototype = {
9278           constructor: Dispatch,
9279           on: function(typename, callback) {
9280             var _ = this._,
9281                 T = parseTypenames(typename + "", _),
9282                 t,
9283                 i = -1,
9284                 n = T.length;
9285
9286             // If no callback was specified, return the callback of the given type and name.
9287             if (arguments.length < 2) {
9288               while (++i < n) { if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) { return t; } }
9289               return;
9290             }
9291
9292             // If a type was specified, set the callback for the given type and name.
9293             // Otherwise, if a null callback was specified, remove callbacks of the given name.
9294             if (callback != null && typeof callback !== "function") { throw new Error("invalid callback: " + callback); }
9295             while (++i < n) {
9296               if (t = (typename = T[i]).type) { _[t] = set(_[t], typename.name, callback); }
9297               else if (callback == null) { for (t in _) { _[t] = set(_[t], typename.name, null); } }
9298             }
9299
9300             return this;
9301           },
9302           copy: function() {
9303             var copy = {}, _ = this._;
9304             for (var t in _) { copy[t] = _[t].slice(); }
9305             return new Dispatch(copy);
9306           },
9307           call: function(type, that) {
9308             var arguments$1 = arguments;
9309
9310             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]; } }
9311             if (!this._.hasOwnProperty(type)) { throw new Error("unknown type: " + type); }
9312             for (t = this._[type], i = 0, n = t.length; i < n; ++i) { t[i].value.apply(that, args); }
9313           },
9314           apply: function(type, that, args) {
9315             if (!this._.hasOwnProperty(type)) { throw new Error("unknown type: " + type); }
9316             for (var t = this._[type], i = 0, n = t.length; i < n; ++i) { t[i].value.apply(that, args); }
9317           }
9318         };
9319
9320         function get$1(type, name) {
9321           for (var i = 0, n = type.length, c; i < n; ++i) {
9322             if ((c = type[i]).name === name) {
9323               return c.value;
9324             }
9325           }
9326         }
9327
9328         function set(type, name, callback) {
9329           for (var i = 0, n = type.length; i < n; ++i) {
9330             if (type[i].name === name) {
9331               type[i] = noop$2, type = type.slice(0, i).concat(type.slice(i + 1));
9332               break;
9333             }
9334           }
9335           if (callback != null) { type.push({name: name, value: callback}); }
9336           return type;
9337         }
9338
9339         var xhtml = "http://www.w3.org/1999/xhtml";
9340
9341         var namespaces = {
9342           svg: "http://www.w3.org/2000/svg",
9343           xhtml: xhtml,
9344           xlink: "http://www.w3.org/1999/xlink",
9345           xml: "http://www.w3.org/XML/1998/namespace",
9346           xmlns: "http://www.w3.org/2000/xmlns/"
9347         };
9348
9349         function namespace(name) {
9350           var prefix = name += "", i = prefix.indexOf(":");
9351           if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") { name = name.slice(i + 1); }
9352           return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
9353         }
9354
9355         function creatorInherit(name) {
9356           return function() {
9357             var document = this.ownerDocument,
9358                 uri = this.namespaceURI;
9359             return uri === xhtml && document.documentElement.namespaceURI === xhtml
9360                 ? document.createElement(name)
9361                 : document.createElementNS(uri, name);
9362           };
9363         }
9364
9365         function creatorFixed(fullname) {
9366           return function() {
9367             return this.ownerDocument.createElementNS(fullname.space, fullname.local);
9368           };
9369         }
9370
9371         function creator(name) {
9372           var fullname = namespace(name);
9373           return (fullname.local
9374               ? creatorFixed
9375               : creatorInherit)(fullname);
9376         }
9377
9378         function none() {}
9379
9380         function selector(selector) {
9381           return selector == null ? none : function() {
9382             return this.querySelector(selector);
9383           };
9384         }
9385
9386         function selection_select(select) {
9387           if (typeof select !== "function") { select = selector(select); }
9388
9389           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
9390             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
9391               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
9392                 if ("__data__" in node) { subnode.__data__ = node.__data__; }
9393                 subgroup[i] = subnode;
9394               }
9395             }
9396           }
9397
9398           return new Selection(subgroups, this._parents);
9399         }
9400
9401         function empty() {
9402           return [];
9403         }
9404
9405         function selectorAll(selector) {
9406           return selector == null ? empty : function() {
9407             return this.querySelectorAll(selector);
9408           };
9409         }
9410
9411         function selection_selectAll(select) {
9412           if (typeof select !== "function") { select = selectorAll(select); }
9413
9414           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
9415             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
9416               if (node = group[i]) {
9417                 subgroups.push(select.call(node, node.__data__, i, group));
9418                 parents.push(node);
9419               }
9420             }
9421           }
9422
9423           return new Selection(subgroups, parents);
9424         }
9425
9426         function matcher(selector) {
9427           return function() {
9428             return this.matches(selector);
9429           };
9430         }
9431
9432         function selection_filter(match) {
9433           if (typeof match !== "function") { match = matcher(match); }
9434
9435           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
9436             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
9437               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
9438                 subgroup.push(node);
9439               }
9440             }
9441           }
9442
9443           return new Selection(subgroups, this._parents);
9444         }
9445
9446         function sparse(update) {
9447           return new Array(update.length);
9448         }
9449
9450         function selection_enter() {
9451           return new Selection(this._enter || this._groups.map(sparse), this._parents);
9452         }
9453
9454         function EnterNode(parent, datum) {
9455           this.ownerDocument = parent.ownerDocument;
9456           this.namespaceURI = parent.namespaceURI;
9457           this._next = null;
9458           this._parent = parent;
9459           this.__data__ = datum;
9460         }
9461
9462         EnterNode.prototype = {
9463           constructor: EnterNode,
9464           appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
9465           insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
9466           querySelector: function(selector) { return this._parent.querySelector(selector); },
9467           querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
9468         };
9469
9470         function constant$1(x) {
9471           return function() {
9472             return x;
9473           };
9474         }
9475
9476         var keyPrefix = "$"; // Protect against keys like “__proto__”.
9477
9478         function bindIndex(parent, group, enter, update, exit, data) {
9479           var i = 0,
9480               node,
9481               groupLength = group.length,
9482               dataLength = data.length;
9483
9484           // Put any non-null nodes that fit into update.
9485           // Put any null nodes into enter.
9486           // Put any remaining data into enter.
9487           for (; i < dataLength; ++i) {
9488             if (node = group[i]) {
9489               node.__data__ = data[i];
9490               update[i] = node;
9491             } else {
9492               enter[i] = new EnterNode(parent, data[i]);
9493             }
9494           }
9495
9496           // Put any non-null nodes that don’t fit into exit.
9497           for (; i < groupLength; ++i) {
9498             if (node = group[i]) {
9499               exit[i] = node;
9500             }
9501           }
9502         }
9503
9504         function bindKey(parent, group, enter, update, exit, data, key) {
9505           var i,
9506               node,
9507               nodeByKeyValue = {},
9508               groupLength = group.length,
9509               dataLength = data.length,
9510               keyValues = new Array(groupLength),
9511               keyValue;
9512
9513           // Compute the key for each node.
9514           // If multiple nodes have the same key, the duplicates are added to exit.
9515           for (i = 0; i < groupLength; ++i) {
9516             if (node = group[i]) {
9517               keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
9518               if (keyValue in nodeByKeyValue) {
9519                 exit[i] = node;
9520               } else {
9521                 nodeByKeyValue[keyValue] = node;
9522               }
9523             }
9524           }
9525
9526           // Compute the key for each datum.
9527           // If there a node associated with this key, join and add it to update.
9528           // If there is not (or the key is a duplicate), add it to enter.
9529           for (i = 0; i < dataLength; ++i) {
9530             keyValue = keyPrefix + key.call(parent, data[i], i, data);
9531             if (node = nodeByKeyValue[keyValue]) {
9532               update[i] = node;
9533               node.__data__ = data[i];
9534               nodeByKeyValue[keyValue] = null;
9535             } else {
9536               enter[i] = new EnterNode(parent, data[i]);
9537             }
9538           }
9539
9540           // Add any remaining nodes that were not bound to data to exit.
9541           for (i = 0; i < groupLength; ++i) {
9542             if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
9543               exit[i] = node;
9544             }
9545           }
9546         }
9547
9548         function selection_data(value, key) {
9549           if (!value) {
9550             data = new Array(this.size()), j = -1;
9551             this.each(function(d) { data[++j] = d; });
9552             return data;
9553           }
9554
9555           var bind = key ? bindKey : bindIndex,
9556               parents = this._parents,
9557               groups = this._groups;
9558
9559           if (typeof value !== "function") { value = constant$1(value); }
9560
9561           for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
9562             var parent = parents[j],
9563                 group = groups[j],
9564                 groupLength = group.length,
9565                 data = value.call(parent, parent && parent.__data__, j, parents),
9566                 dataLength = data.length,
9567                 enterGroup = enter[j] = new Array(dataLength),
9568                 updateGroup = update[j] = new Array(dataLength),
9569                 exitGroup = exit[j] = new Array(groupLength);
9570
9571             bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
9572
9573             // Now connect the enter nodes to their following update node, such that
9574             // appendChild can insert the materialized enter node before this node,
9575             // rather than at the end of the parent node.
9576             for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
9577               if (previous = enterGroup[i0]) {
9578                 if (i0 >= i1) { i1 = i0 + 1; }
9579                 while (!(next = updateGroup[i1]) && ++i1 < dataLength){ }
9580                 previous._next = next || null;
9581               }
9582             }
9583           }
9584
9585           update = new Selection(update, parents);
9586           update._enter = enter;
9587           update._exit = exit;
9588           return update;
9589         }
9590
9591         function selection_exit() {
9592           return new Selection(this._exit || this._groups.map(sparse), this._parents);
9593         }
9594
9595         function selection_join(onenter, onupdate, onexit) {
9596           var enter = this.enter(), update = this, exit = this.exit();
9597           enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + "");
9598           if (onupdate != null) { update = onupdate(update); }
9599           if (onexit == null) { exit.remove(); } else { onexit(exit); }
9600           return enter && update ? enter.merge(update).order() : update;
9601         }
9602
9603         function selection_merge(selection) {
9604
9605           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) {
9606             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
9607               if (node = group0[i] || group1[i]) {
9608                 merge[i] = node;
9609               }
9610             }
9611           }
9612
9613           for (; j < m0; ++j) {
9614             merges[j] = groups0[j];
9615           }
9616
9617           return new Selection(merges, this._parents);
9618         }
9619
9620         function selection_order() {
9621
9622           for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
9623             for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
9624               if (node = group[i]) {
9625                 if (next && node.compareDocumentPosition(next) ^ 4) { next.parentNode.insertBefore(node, next); }
9626                 next = node;
9627               }
9628             }
9629           }
9630
9631           return this;
9632         }
9633
9634         function selection_sort(compare) {
9635           if (!compare) { compare = ascending; }
9636
9637           function compareNode(a, b) {
9638             return a && b ? compare(a.__data__, b.__data__) : !a - !b;
9639           }
9640
9641           for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
9642             for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
9643               if (node = group[i]) {
9644                 sortgroup[i] = node;
9645               }
9646             }
9647             sortgroup.sort(compareNode);
9648           }
9649
9650           return new Selection(sortgroups, this._parents).order();
9651         }
9652
9653         function ascending(a, b) {
9654           return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
9655         }
9656
9657         function selection_call() {
9658           var callback = arguments[0];
9659           arguments[0] = this;
9660           callback.apply(null, arguments);
9661           return this;
9662         }
9663
9664         function selection_nodes() {
9665           var nodes = new Array(this.size()), i = -1;
9666           this.each(function() { nodes[++i] = this; });
9667           return nodes;
9668         }
9669
9670         function selection_node() {
9671
9672           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
9673             for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
9674               var node = group[i];
9675               if (node) { return node; }
9676             }
9677           }
9678
9679           return null;
9680         }
9681
9682         function selection_size() {
9683           var size = 0;
9684           this.each(function() { ++size; });
9685           return size;
9686         }
9687
9688         function selection_empty() {
9689           return !this.node();
9690         }
9691
9692         function selection_each(callback) {
9693
9694           for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
9695             for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
9696               if (node = group[i]) { callback.call(node, node.__data__, i, group); }
9697             }
9698           }
9699
9700           return this;
9701         }
9702
9703         function attrRemove(name) {
9704           return function() {
9705             this.removeAttribute(name);
9706           };
9707         }
9708
9709         function attrRemoveNS(fullname) {
9710           return function() {
9711             this.removeAttributeNS(fullname.space, fullname.local);
9712           };
9713         }
9714
9715         function attrConstant(name, value) {
9716           return function() {
9717             this.setAttribute(name, value);
9718           };
9719         }
9720
9721         function attrConstantNS(fullname, value) {
9722           return function() {
9723             this.setAttributeNS(fullname.space, fullname.local, value);
9724           };
9725         }
9726
9727         function attrFunction(name, value) {
9728           return function() {
9729             var v = value.apply(this, arguments);
9730             if (v == null) { this.removeAttribute(name); }
9731             else { this.setAttribute(name, v); }
9732           };
9733         }
9734
9735         function attrFunctionNS(fullname, value) {
9736           return function() {
9737             var v = value.apply(this, arguments);
9738             if (v == null) { this.removeAttributeNS(fullname.space, fullname.local); }
9739             else { this.setAttributeNS(fullname.space, fullname.local, v); }
9740           };
9741         }
9742
9743         function selection_attr(name, value) {
9744           var fullname = namespace(name);
9745
9746           if (arguments.length < 2) {
9747             var node = this.node();
9748             return fullname.local
9749                 ? node.getAttributeNS(fullname.space, fullname.local)
9750                 : node.getAttribute(fullname);
9751           }
9752
9753           return this.each((value == null
9754               ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
9755               ? (fullname.local ? attrFunctionNS : attrFunction)
9756               : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
9757         }
9758
9759         function defaultView(node) {
9760           return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
9761               || (node.document && node) // node is a Window
9762               || node.defaultView; // node is a Document
9763         }
9764
9765         function styleRemove(name) {
9766           return function() {
9767             this.style.removeProperty(name);
9768           };
9769         }
9770
9771         function styleConstant(name, value, priority) {
9772           return function() {
9773             this.style.setProperty(name, value, priority);
9774           };
9775         }
9776
9777         function styleFunction(name, value, priority) {
9778           return function() {
9779             var v = value.apply(this, arguments);
9780             if (v == null) { this.style.removeProperty(name); }
9781             else { this.style.setProperty(name, v, priority); }
9782           };
9783         }
9784
9785         function selection_style(name, value, priority) {
9786           return arguments.length > 1
9787               ? this.each((value == null
9788                     ? styleRemove : typeof value === "function"
9789                     ? styleFunction
9790                     : styleConstant)(name, value, priority == null ? "" : priority))
9791               : styleValue(this.node(), name);
9792         }
9793
9794         function styleValue(node, name) {
9795           return node.style.getPropertyValue(name)
9796               || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
9797         }
9798
9799         function propertyRemove(name) {
9800           return function() {
9801             delete this[name];
9802           };
9803         }
9804
9805         function propertyConstant(name, value) {
9806           return function() {
9807             this[name] = value;
9808           };
9809         }
9810
9811         function propertyFunction(name, value) {
9812           return function() {
9813             var v = value.apply(this, arguments);
9814             if (v == null) { delete this[name]; }
9815             else { this[name] = v; }
9816           };
9817         }
9818
9819         function selection_property(name, value) {
9820           return arguments.length > 1
9821               ? this.each((value == null
9822                   ? propertyRemove : typeof value === "function"
9823                   ? propertyFunction
9824                   : propertyConstant)(name, value))
9825               : this.node()[name];
9826         }
9827
9828         function classArray(string) {
9829           return string.trim().split(/^|\s+/);
9830         }
9831
9832         function classList(node) {
9833           return node.classList || new ClassList(node);
9834         }
9835
9836         function ClassList(node) {
9837           this._node = node;
9838           this._names = classArray(node.getAttribute("class") || "");
9839         }
9840
9841         ClassList.prototype = {
9842           add: function(name) {
9843             var i = this._names.indexOf(name);
9844             if (i < 0) {
9845               this._names.push(name);
9846               this._node.setAttribute("class", this._names.join(" "));
9847             }
9848           },
9849           remove: function(name) {
9850             var i = this._names.indexOf(name);
9851             if (i >= 0) {
9852               this._names.splice(i, 1);
9853               this._node.setAttribute("class", this._names.join(" "));
9854             }
9855           },
9856           contains: function(name) {
9857             return this._names.indexOf(name) >= 0;
9858           }
9859         };
9860
9861         function classedAdd(node, names) {
9862           var list = classList(node), i = -1, n = names.length;
9863           while (++i < n) { list.add(names[i]); }
9864         }
9865
9866         function classedRemove(node, names) {
9867           var list = classList(node), i = -1, n = names.length;
9868           while (++i < n) { list.remove(names[i]); }
9869         }
9870
9871         function classedTrue(names) {
9872           return function() {
9873             classedAdd(this, names);
9874           };
9875         }
9876
9877         function classedFalse(names) {
9878           return function() {
9879             classedRemove(this, names);
9880           };
9881         }
9882
9883         function classedFunction(names, value) {
9884           return function() {
9885             (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
9886           };
9887         }
9888
9889         function selection_classed(name, value) {
9890           var names = classArray(name + "");
9891
9892           if (arguments.length < 2) {
9893             var list = classList(this.node()), i = -1, n = names.length;
9894             while (++i < n) { if (!list.contains(names[i])) { return false; } }
9895             return true;
9896           }
9897
9898           return this.each((typeof value === "function"
9899               ? classedFunction : value
9900               ? classedTrue
9901               : classedFalse)(names, value));
9902         }
9903
9904         function textRemove() {
9905           this.textContent = "";
9906         }
9907
9908         function textConstant(value) {
9909           return function() {
9910             this.textContent = value;
9911           };
9912         }
9913
9914         function textFunction(value) {
9915           return function() {
9916             var v = value.apply(this, arguments);
9917             this.textContent = v == null ? "" : v;
9918           };
9919         }
9920
9921         function selection_text(value) {
9922           return arguments.length
9923               ? this.each(value == null
9924                   ? textRemove : (typeof value === "function"
9925                   ? textFunction
9926                   : textConstant)(value))
9927               : this.node().textContent;
9928         }
9929
9930         function htmlRemove() {
9931           this.innerHTML = "";
9932         }
9933
9934         function htmlConstant(value) {
9935           return function() {
9936             this.innerHTML = value;
9937           };
9938         }
9939
9940         function htmlFunction(value) {
9941           return function() {
9942             var v = value.apply(this, arguments);
9943             this.innerHTML = v == null ? "" : v;
9944           };
9945         }
9946
9947         function selection_html(value) {
9948           return arguments.length
9949               ? this.each(value == null
9950                   ? htmlRemove : (typeof value === "function"
9951                   ? htmlFunction
9952                   : htmlConstant)(value))
9953               : this.node().innerHTML;
9954         }
9955
9956         function raise() {
9957           if (this.nextSibling) { this.parentNode.appendChild(this); }
9958         }
9959
9960         function selection_raise() {
9961           return this.each(raise);
9962         }
9963
9964         function lower() {
9965           if (this.previousSibling) { this.parentNode.insertBefore(this, this.parentNode.firstChild); }
9966         }
9967
9968         function selection_lower() {
9969           return this.each(lower);
9970         }
9971
9972         function selection_append(name) {
9973           var create = typeof name === "function" ? name : creator(name);
9974           return this.select(function() {
9975             return this.appendChild(create.apply(this, arguments));
9976           });
9977         }
9978
9979         function constantNull() {
9980           return null;
9981         }
9982
9983         function selection_insert(name, before) {
9984           var create = typeof name === "function" ? name : creator(name),
9985               select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
9986           return this.select(function() {
9987             return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
9988           });
9989         }
9990
9991         function remove() {
9992           var parent = this.parentNode;
9993           if (parent) { parent.removeChild(this); }
9994         }
9995
9996         function selection_remove() {
9997           return this.each(remove);
9998         }
9999
10000         function selection_cloneShallow() {
10001           var clone = this.cloneNode(false), parent = this.parentNode;
10002           return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
10003         }
10004
10005         function selection_cloneDeep() {
10006           var clone = this.cloneNode(true), parent = this.parentNode;
10007           return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
10008         }
10009
10010         function selection_clone(deep) {
10011           return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
10012         }
10013
10014         function selection_datum(value) {
10015           return arguments.length
10016               ? this.property("__data__", value)
10017               : this.node().__data__;
10018         }
10019
10020         var filterEvents = {};
10021
10022         var event = null;
10023
10024         if (typeof document !== "undefined") {
10025           var element = document.documentElement;
10026           if (!("onmouseenter" in element)) {
10027             filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
10028           }
10029         }
10030
10031         function filterContextListener(listener, index, group) {
10032           listener = contextListener(listener, index, group);
10033           return function(event) {
10034             var related = event.relatedTarget;
10035             if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
10036               listener.call(this, event);
10037             }
10038           };
10039         }
10040
10041         function contextListener(listener, index, group) {
10042           return function(event1) {
10043             var event0 = event; // Events can be reentrant (e.g., focus).
10044             event = event1;
10045             try {
10046               listener.call(this, this.__data__, index, group);
10047             } finally {
10048               event = event0;
10049             }
10050           };
10051         }
10052
10053         function parseTypenames$1(typenames) {
10054           return typenames.trim().split(/^|\s+/).map(function(t) {
10055             var name = "", i = t.indexOf(".");
10056             if (i >= 0) { name = t.slice(i + 1), t = t.slice(0, i); }
10057             return {type: t, name: name};
10058           });
10059         }
10060
10061         function onRemove(typename) {
10062           return function() {
10063             var on = this.__on;
10064             if (!on) { return; }
10065             for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
10066               if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
10067                 this.removeEventListener(o.type, o.listener, o.capture);
10068               } else {
10069                 on[++i] = o;
10070               }
10071             }
10072             if (++i) { on.length = i; }
10073             else { delete this.__on; }
10074           };
10075         }
10076
10077         function onAdd(typename, value, capture) {
10078           var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
10079           return function(d, i, group) {
10080             var on = this.__on, o, listener = wrap(value, i, group);
10081             if (on) { for (var j = 0, m = on.length; j < m; ++j) {
10082               if ((o = on[j]).type === typename.type && o.name === typename.name) {
10083                 this.removeEventListener(o.type, o.listener, o.capture);
10084                 this.addEventListener(o.type, o.listener = listener, o.capture = capture);
10085                 o.value = value;
10086                 return;
10087               }
10088             } }
10089             this.addEventListener(typename.type, listener, capture);
10090             o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
10091             if (!on) { this.__on = [o]; }
10092             else { on.push(o); }
10093           };
10094         }
10095
10096         function selection_on(typename, value, capture) {
10097           var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
10098
10099           if (arguments.length < 2) {
10100             var on = this.node().__on;
10101             if (on) { for (var j = 0, m = on.length, o; j < m; ++j) {
10102               for (i = 0, o = on[j]; i < n; ++i) {
10103                 if ((t = typenames[i]).type === o.type && t.name === o.name) {
10104                   return o.value;
10105                 }
10106               }
10107             } }
10108             return;
10109           }
10110
10111           on = value ? onAdd : onRemove;
10112           if (capture == null) { capture = false; }
10113           for (i = 0; i < n; ++i) { this.each(on(typenames[i], value, capture)); }
10114           return this;
10115         }
10116
10117         function customEvent(event1, listener, that, args) {
10118           var event0 = event;
10119           event1.sourceEvent = event;
10120           event = event1;
10121           try {
10122             return listener.apply(that, args);
10123           } finally {
10124             event = event0;
10125           }
10126         }
10127
10128         function dispatchEvent(node, type, params) {
10129           var window = defaultView(node),
10130               event = window.CustomEvent;
10131
10132           if (typeof event === "function") {
10133             event = new event(type, params);
10134           } else {
10135             event = window.document.createEvent("Event");
10136             if (params) { event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; }
10137             else { event.initEvent(type, false, false); }
10138           }
10139
10140           node.dispatchEvent(event);
10141         }
10142
10143         function dispatchConstant(type, params) {
10144           return function() {
10145             return dispatchEvent(this, type, params);
10146           };
10147         }
10148
10149         function dispatchFunction(type, params) {
10150           return function() {
10151             return dispatchEvent(this, type, params.apply(this, arguments));
10152           };
10153         }
10154
10155         function selection_dispatch(type, params) {
10156           return this.each((typeof params === "function"
10157               ? dispatchFunction
10158               : dispatchConstant)(type, params));
10159         }
10160
10161         var root$1 = [null];
10162
10163         function Selection(groups, parents) {
10164           this._groups = groups;
10165           this._parents = parents;
10166         }
10167
10168         function selection() {
10169           return new Selection([[document.documentElement]], root$1);
10170         }
10171
10172         Selection.prototype = selection.prototype = {
10173           constructor: Selection,
10174           select: selection_select,
10175           selectAll: selection_selectAll,
10176           filter: selection_filter,
10177           data: selection_data,
10178           enter: selection_enter,
10179           exit: selection_exit,
10180           join: selection_join,
10181           merge: selection_merge,
10182           order: selection_order,
10183           sort: selection_sort,
10184           call: selection_call,
10185           nodes: selection_nodes,
10186           node: selection_node,
10187           size: selection_size,
10188           empty: selection_empty,
10189           each: selection_each,
10190           attr: selection_attr,
10191           style: selection_style,
10192           property: selection_property,
10193           classed: selection_classed,
10194           text: selection_text,
10195           html: selection_html,
10196           raise: selection_raise,
10197           lower: selection_lower,
10198           append: selection_append,
10199           insert: selection_insert,
10200           remove: selection_remove,
10201           clone: selection_clone,
10202           datum: selection_datum,
10203           on: selection_on,
10204           dispatch: selection_dispatch
10205         };
10206
10207         function d3_select(selector) {
10208           return typeof selector === "string"
10209               ? new Selection([[document.querySelector(selector)]], [document.documentElement])
10210               : new Selection([[selector]], root$1);
10211         }
10212
10213         function create$7(name) {
10214           return d3_select(creator(name).call(document.documentElement));
10215         }
10216
10217         var nextId = 0;
10218
10219         function local() {
10220           return new Local;
10221         }
10222
10223         function Local() {
10224           this._ = "@" + (++nextId).toString(36);
10225         }
10226
10227         Local.prototype = local.prototype = {
10228           constructor: Local,
10229           get: function(node) {
10230             var id = this._;
10231             while (!(id in node)) { if (!(node = node.parentNode)) { return; } }
10232             return node[id];
10233           },
10234           set: function(node, value) {
10235             return node[this._] = value;
10236           },
10237           remove: function(node) {
10238             return this._ in node && delete node[this._];
10239           },
10240           toString: function() {
10241             return this._;
10242           }
10243         };
10244
10245         function sourceEvent() {
10246           var current = event, source;
10247           while (source = current.sourceEvent) { current = source; }
10248           return current;
10249         }
10250
10251         function point(node, event) {
10252           var svg = node.ownerSVGElement || node;
10253
10254           if (svg.createSVGPoint) {
10255             var point = svg.createSVGPoint();
10256             point.x = event.clientX, point.y = event.clientY;
10257             point = point.matrixTransform(node.getScreenCTM().inverse());
10258             return [point.x, point.y];
10259           }
10260
10261           var rect = node.getBoundingClientRect();
10262           return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
10263         }
10264
10265         function d3_mouse(node) {
10266           var event = sourceEvent();
10267           if (event.changedTouches) { event = event.changedTouches[0]; }
10268           return point(node, event);
10269         }
10270
10271         function d3_selectAll(selector) {
10272           return typeof selector === "string"
10273               ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
10274               : new Selection([selector == null ? [] : selector], root$1);
10275         }
10276
10277         function touch(node, touches, identifier) {
10278           if (arguments.length < 3) { identifier = touches, touches = sourceEvent().changedTouches; }
10279
10280           for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
10281             if ((touch = touches[i]).identifier === identifier) {
10282               return point(node, touch);
10283             }
10284           }
10285
10286           return null;
10287         }
10288
10289         function d3_touches(node, touches) {
10290           if (touches == null) { touches = sourceEvent().touches; }
10291
10292           for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
10293             points[i] = point(node, touches[i]);
10294           }
10295
10296           return points;
10297         }
10298
10299         function nopropagation() {
10300           event.stopImmediatePropagation();
10301         }
10302
10303         function noevent() {
10304           event.preventDefault();
10305           event.stopImmediatePropagation();
10306         }
10307
10308         function dragDisable(view) {
10309           var root = view.document.documentElement,
10310               selection = d3_select(view).on("dragstart.drag", noevent, true);
10311           if ("onselectstart" in root) {
10312             selection.on("selectstart.drag", noevent, true);
10313           } else {
10314             root.__noselect = root.style.MozUserSelect;
10315             root.style.MozUserSelect = "none";
10316           }
10317         }
10318
10319         function yesdrag(view, noclick) {
10320           var root = view.document.documentElement,
10321               selection = d3_select(view).on("dragstart.drag", null);
10322           if (noclick) {
10323             selection.on("click.drag", noevent, true);
10324             setTimeout(function() { selection.on("click.drag", null); }, 0);
10325           }
10326           if ("onselectstart" in root) {
10327             selection.on("selectstart.drag", null);
10328           } else {
10329             root.style.MozUserSelect = root.__noselect;
10330             delete root.__noselect;
10331           }
10332         }
10333
10334         function constant$2(x) {
10335           return function() {
10336             return x;
10337           };
10338         }
10339
10340         function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
10341           this.target = target;
10342           this.type = type;
10343           this.subject = subject;
10344           this.identifier = id;
10345           this.active = active;
10346           this.x = x;
10347           this.y = y;
10348           this.dx = dx;
10349           this.dy = dy;
10350           this._ = dispatch;
10351         }
10352
10353         DragEvent.prototype.on = function() {
10354           var value = this._.on.apply(this._, arguments);
10355           return value === this._ ? this : value;
10356         };
10357
10358         // Ignore right-click, since that should open the context menu.
10359         function defaultFilter() {
10360           return !event.ctrlKey && !event.button;
10361         }
10362
10363         function defaultContainer() {
10364           return this.parentNode;
10365         }
10366
10367         function defaultSubject(d) {
10368           return d == null ? {x: event.x, y: event.y} : d;
10369         }
10370
10371         function defaultTouchable() {
10372           return navigator.maxTouchPoints || ("ontouchstart" in this);
10373         }
10374
10375         function d3_drag() {
10376           var filter = defaultFilter,
10377               container = defaultContainer,
10378               subject = defaultSubject,
10379               touchable = defaultTouchable,
10380               gestures = {},
10381               listeners = dispatch("start", "drag", "end"),
10382               active = 0,
10383               mousedownx,
10384               mousedowny,
10385               mousemoving,
10386               touchending,
10387               clickDistance2 = 0;
10388
10389           function drag(selection) {
10390             selection
10391                 .on("mousedown.drag", mousedowned)
10392               .filter(touchable)
10393                 .on("touchstart.drag", touchstarted)
10394                 .on("touchmove.drag", touchmoved)
10395                 .on("touchend.drag touchcancel.drag", touchended)
10396                 .style("touch-action", "none")
10397                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
10398           }
10399
10400           function mousedowned() {
10401             if (touchending || !filter.apply(this, arguments)) { return; }
10402             var gesture = beforestart("mouse", container.apply(this, arguments), d3_mouse, this, arguments);
10403             if (!gesture) { return; }
10404             d3_select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
10405             dragDisable(event.view);
10406             nopropagation();
10407             mousemoving = false;
10408             mousedownx = event.clientX;
10409             mousedowny = event.clientY;
10410             gesture("start");
10411           }
10412
10413           function mousemoved() {
10414             noevent();
10415             if (!mousemoving) {
10416               var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
10417               mousemoving = dx * dx + dy * dy > clickDistance2;
10418             }
10419             gestures.mouse("drag");
10420           }
10421
10422           function mouseupped() {
10423             d3_select(event.view).on("mousemove.drag mouseup.drag", null);
10424             yesdrag(event.view, mousemoving);
10425             noevent();
10426             gestures.mouse("end");
10427           }
10428
10429           function touchstarted() {
10430             var arguments$1 = arguments;
10431
10432             if (!filter.apply(this, arguments)) { return; }
10433             var touches = event.changedTouches,
10434                 c = container.apply(this, arguments),
10435                 n = touches.length, i, gesture;
10436
10437             for (i = 0; i < n; ++i) {
10438               if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments$1)) {
10439                 nopropagation();
10440                 gesture("start");
10441               }
10442             }
10443           }
10444
10445           function touchmoved() {
10446             var touches = event.changedTouches,
10447                 n = touches.length, i, gesture;
10448
10449             for (i = 0; i < n; ++i) {
10450               if (gesture = gestures[touches[i].identifier]) {
10451                 noevent();
10452                 gesture("drag");
10453               }
10454             }
10455           }
10456
10457           function touchended() {
10458             var touches = event.changedTouches,
10459                 n = touches.length, i, gesture;
10460
10461             if (touchending) { clearTimeout(touchending); }
10462             touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
10463             for (i = 0; i < n; ++i) {
10464               if (gesture = gestures[touches[i].identifier]) {
10465                 nopropagation();
10466                 gesture("end");
10467               }
10468             }
10469           }
10470
10471           function beforestart(id, container, point, that, args) {
10472             var p = point(container, id), s, dx, dy,
10473                 sublisteners = listeners.copy();
10474
10475             if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
10476               if ((event.subject = s = subject.apply(that, args)) == null) { return false; }
10477               dx = s.x - p[0] || 0;
10478               dy = s.y - p[1] || 0;
10479               return true;
10480             })) { return; }
10481
10482             return function gesture(type) {
10483               var p0 = p, n;
10484               switch (type) {
10485                 case "start": gestures[id] = gesture, n = active++; break;
10486                 case "end": delete gestures[id], --active; // nobreak
10487                 case "drag": p = point(container, id), n = active; break;
10488               }
10489               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]);
10490             };
10491           }
10492
10493           drag.filter = function(_) {
10494             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$2(!!_), drag) : filter;
10495           };
10496
10497           drag.container = function(_) {
10498             return arguments.length ? (container = typeof _ === "function" ? _ : constant$2(_), drag) : container;
10499           };
10500
10501           drag.subject = function(_) {
10502             return arguments.length ? (subject = typeof _ === "function" ? _ : constant$2(_), drag) : subject;
10503           };
10504
10505           drag.touchable = function(_) {
10506             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$2(!!_), drag) : touchable;
10507           };
10508
10509           drag.on = function() {
10510             var value = listeners.on.apply(listeners, arguments);
10511             return value === listeners ? drag : value;
10512           };
10513
10514           drag.clickDistance = function(_) {
10515             return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
10516           };
10517
10518           return drag;
10519         }
10520
10521         function define$1(constructor, factory, prototype) {
10522           constructor.prototype = factory.prototype = prototype;
10523           prototype.constructor = constructor;
10524         }
10525
10526         function extend(parent, definition) {
10527           var prototype = Object.create(parent.prototype);
10528           for (var key in definition) { prototype[key] = definition[key]; }
10529           return prototype;
10530         }
10531
10532         function Color() {}
10533
10534         var darker = 0.7;
10535         var brighter = 1 / darker;
10536
10537         var reI = "\\s*([+-]?\\d+)\\s*",
10538             reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
10539             reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
10540             reHex = /^#([0-9a-f]{3,8})$/,
10541             reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
10542             reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
10543             reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
10544             reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
10545             reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
10546             reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
10547
10548         var named = {
10549           aliceblue: 0xf0f8ff,
10550           antiquewhite: 0xfaebd7,
10551           aqua: 0x00ffff,
10552           aquamarine: 0x7fffd4,
10553           azure: 0xf0ffff,
10554           beige: 0xf5f5dc,
10555           bisque: 0xffe4c4,
10556           black: 0x000000,
10557           blanchedalmond: 0xffebcd,
10558           blue: 0x0000ff,
10559           blueviolet: 0x8a2be2,
10560           brown: 0xa52a2a,
10561           burlywood: 0xdeb887,
10562           cadetblue: 0x5f9ea0,
10563           chartreuse: 0x7fff00,
10564           chocolate: 0xd2691e,
10565           coral: 0xff7f50,
10566           cornflowerblue: 0x6495ed,
10567           cornsilk: 0xfff8dc,
10568           crimson: 0xdc143c,
10569           cyan: 0x00ffff,
10570           darkblue: 0x00008b,
10571           darkcyan: 0x008b8b,
10572           darkgoldenrod: 0xb8860b,
10573           darkgray: 0xa9a9a9,
10574           darkgreen: 0x006400,
10575           darkgrey: 0xa9a9a9,
10576           darkkhaki: 0xbdb76b,
10577           darkmagenta: 0x8b008b,
10578           darkolivegreen: 0x556b2f,
10579           darkorange: 0xff8c00,
10580           darkorchid: 0x9932cc,
10581           darkred: 0x8b0000,
10582           darksalmon: 0xe9967a,
10583           darkseagreen: 0x8fbc8f,
10584           darkslateblue: 0x483d8b,
10585           darkslategray: 0x2f4f4f,
10586           darkslategrey: 0x2f4f4f,
10587           darkturquoise: 0x00ced1,
10588           darkviolet: 0x9400d3,
10589           deeppink: 0xff1493,
10590           deepskyblue: 0x00bfff,
10591           dimgray: 0x696969,
10592           dimgrey: 0x696969,
10593           dodgerblue: 0x1e90ff,
10594           firebrick: 0xb22222,
10595           floralwhite: 0xfffaf0,
10596           forestgreen: 0x228b22,
10597           fuchsia: 0xff00ff,
10598           gainsboro: 0xdcdcdc,
10599           ghostwhite: 0xf8f8ff,
10600           gold: 0xffd700,
10601           goldenrod: 0xdaa520,
10602           gray: 0x808080,
10603           green: 0x008000,
10604           greenyellow: 0xadff2f,
10605           grey: 0x808080,
10606           honeydew: 0xf0fff0,
10607           hotpink: 0xff69b4,
10608           indianred: 0xcd5c5c,
10609           indigo: 0x4b0082,
10610           ivory: 0xfffff0,
10611           khaki: 0xf0e68c,
10612           lavender: 0xe6e6fa,
10613           lavenderblush: 0xfff0f5,
10614           lawngreen: 0x7cfc00,
10615           lemonchiffon: 0xfffacd,
10616           lightblue: 0xadd8e6,
10617           lightcoral: 0xf08080,
10618           lightcyan: 0xe0ffff,
10619           lightgoldenrodyellow: 0xfafad2,
10620           lightgray: 0xd3d3d3,
10621           lightgreen: 0x90ee90,
10622           lightgrey: 0xd3d3d3,
10623           lightpink: 0xffb6c1,
10624           lightsalmon: 0xffa07a,
10625           lightseagreen: 0x20b2aa,
10626           lightskyblue: 0x87cefa,
10627           lightslategray: 0x778899,
10628           lightslategrey: 0x778899,
10629           lightsteelblue: 0xb0c4de,
10630           lightyellow: 0xffffe0,
10631           lime: 0x00ff00,
10632           limegreen: 0x32cd32,
10633           linen: 0xfaf0e6,
10634           magenta: 0xff00ff,
10635           maroon: 0x800000,
10636           mediumaquamarine: 0x66cdaa,
10637           mediumblue: 0x0000cd,
10638           mediumorchid: 0xba55d3,
10639           mediumpurple: 0x9370db,
10640           mediumseagreen: 0x3cb371,
10641           mediumslateblue: 0x7b68ee,
10642           mediumspringgreen: 0x00fa9a,
10643           mediumturquoise: 0x48d1cc,
10644           mediumvioletred: 0xc71585,
10645           midnightblue: 0x191970,
10646           mintcream: 0xf5fffa,
10647           mistyrose: 0xffe4e1,
10648           moccasin: 0xffe4b5,
10649           navajowhite: 0xffdead,
10650           navy: 0x000080,
10651           oldlace: 0xfdf5e6,
10652           olive: 0x808000,
10653           olivedrab: 0x6b8e23,
10654           orange: 0xffa500,
10655           orangered: 0xff4500,
10656           orchid: 0xda70d6,
10657           palegoldenrod: 0xeee8aa,
10658           palegreen: 0x98fb98,
10659           paleturquoise: 0xafeeee,
10660           palevioletred: 0xdb7093,
10661           papayawhip: 0xffefd5,
10662           peachpuff: 0xffdab9,
10663           peru: 0xcd853f,
10664           pink: 0xffc0cb,
10665           plum: 0xdda0dd,
10666           powderblue: 0xb0e0e6,
10667           purple: 0x800080,
10668           rebeccapurple: 0x663399,
10669           red: 0xff0000,
10670           rosybrown: 0xbc8f8f,
10671           royalblue: 0x4169e1,
10672           saddlebrown: 0x8b4513,
10673           salmon: 0xfa8072,
10674           sandybrown: 0xf4a460,
10675           seagreen: 0x2e8b57,
10676           seashell: 0xfff5ee,
10677           sienna: 0xa0522d,
10678           silver: 0xc0c0c0,
10679           skyblue: 0x87ceeb,
10680           slateblue: 0x6a5acd,
10681           slategray: 0x708090,
10682           slategrey: 0x708090,
10683           snow: 0xfffafa,
10684           springgreen: 0x00ff7f,
10685           steelblue: 0x4682b4,
10686           tan: 0xd2b48c,
10687           teal: 0x008080,
10688           thistle: 0xd8bfd8,
10689           tomato: 0xff6347,
10690           turquoise: 0x40e0d0,
10691           violet: 0xee82ee,
10692           wheat: 0xf5deb3,
10693           white: 0xffffff,
10694           whitesmoke: 0xf5f5f5,
10695           yellow: 0xffff00,
10696           yellowgreen: 0x9acd32
10697         };
10698
10699         define$1(Color, color, {
10700           copy: function(channels) {
10701             return Object.assign(new this.constructor, this, channels);
10702           },
10703           displayable: function() {
10704             return this.rgb().displayable();
10705           },
10706           hex: color_formatHex, // Deprecated! Use color.formatHex.
10707           formatHex: color_formatHex,
10708           formatHsl: color_formatHsl,
10709           formatRgb: color_formatRgb,
10710           toString: color_formatRgb
10711         });
10712
10713         function color_formatHex() {
10714           return this.rgb().formatHex();
10715         }
10716
10717         function color_formatHsl() {
10718           return hslConvert(this).formatHsl();
10719         }
10720
10721         function color_formatRgb() {
10722           return this.rgb().formatRgb();
10723         }
10724
10725         function color(format) {
10726           var m, l;
10727           format = (format + "").trim().toLowerCase();
10728           return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
10729               : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
10730               : l === 8 ? new Rgb(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
10731               : 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
10732               : null) // invalid hex
10733               : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
10734               : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
10735               : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
10736               : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
10737               : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
10738               : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
10739               : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
10740               : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
10741               : null;
10742         }
10743
10744         function rgbn(n) {
10745           return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
10746         }
10747
10748         function rgba(r, g, b, a) {
10749           if (a <= 0) { r = g = b = NaN; }
10750           return new Rgb(r, g, b, a);
10751         }
10752
10753         function rgbConvert(o) {
10754           if (!(o instanceof Color)) { o = color(o); }
10755           if (!o) { return new Rgb; }
10756           o = o.rgb();
10757           return new Rgb(o.r, o.g, o.b, o.opacity);
10758         }
10759
10760         function rgb(r, g, b, opacity) {
10761           return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
10762         }
10763
10764         function Rgb(r, g, b, opacity) {
10765           this.r = +r;
10766           this.g = +g;
10767           this.b = +b;
10768           this.opacity = +opacity;
10769         }
10770
10771         define$1(Rgb, rgb, extend(Color, {
10772           brighter: function(k) {
10773             k = k == null ? brighter : Math.pow(brighter, k);
10774             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
10775           },
10776           darker: function(k) {
10777             k = k == null ? darker : Math.pow(darker, k);
10778             return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
10779           },
10780           rgb: function() {
10781             return this;
10782           },
10783           displayable: function() {
10784             return (-0.5 <= this.r && this.r < 255.5)
10785                 && (-0.5 <= this.g && this.g < 255.5)
10786                 && (-0.5 <= this.b && this.b < 255.5)
10787                 && (0 <= this.opacity && this.opacity <= 1);
10788           },
10789           hex: rgb_formatHex, // Deprecated! Use color.formatHex.
10790           formatHex: rgb_formatHex,
10791           formatRgb: rgb_formatRgb,
10792           toString: rgb_formatRgb
10793         }));
10794
10795         function rgb_formatHex() {
10796           return "#" + hex$1(this.r) + hex$1(this.g) + hex$1(this.b);
10797         }
10798
10799         function rgb_formatRgb() {
10800           var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
10801           return (a === 1 ? "rgb(" : "rgba(")
10802               + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
10803               + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
10804               + Math.max(0, Math.min(255, Math.round(this.b) || 0))
10805               + (a === 1 ? ")" : ", " + a + ")");
10806         }
10807
10808         function hex$1(value) {
10809           value = Math.max(0, Math.min(255, Math.round(value) || 0));
10810           return (value < 16 ? "0" : "") + value.toString(16);
10811         }
10812
10813         function hsla(h, s, l, a) {
10814           if (a <= 0) { h = s = l = NaN; }
10815           else if (l <= 0 || l >= 1) { h = s = NaN; }
10816           else if (s <= 0) { h = NaN; }
10817           return new Hsl(h, s, l, a);
10818         }
10819
10820         function hslConvert(o) {
10821           if (o instanceof Hsl) { return new Hsl(o.h, o.s, o.l, o.opacity); }
10822           if (!(o instanceof Color)) { o = color(o); }
10823           if (!o) { return new Hsl; }
10824           if (o instanceof Hsl) { return o; }
10825           o = o.rgb();
10826           var r = o.r / 255,
10827               g = o.g / 255,
10828               b = o.b / 255,
10829               min = Math.min(r, g, b),
10830               max = Math.max(r, g, b),
10831               h = NaN,
10832               s = max - min,
10833               l = (max + min) / 2;
10834           if (s) {
10835             if (r === max) { h = (g - b) / s + (g < b) * 6; }
10836             else if (g === max) { h = (b - r) / s + 2; }
10837             else { h = (r - g) / s + 4; }
10838             s /= l < 0.5 ? max + min : 2 - max - min;
10839             h *= 60;
10840           } else {
10841             s = l > 0 && l < 1 ? 0 : h;
10842           }
10843           return new Hsl(h, s, l, o.opacity);
10844         }
10845
10846         function hsl(h, s, l, opacity) {
10847           return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
10848         }
10849
10850         function Hsl(h, s, l, opacity) {
10851           this.h = +h;
10852           this.s = +s;
10853           this.l = +l;
10854           this.opacity = +opacity;
10855         }
10856
10857         define$1(Hsl, hsl, extend(Color, {
10858           brighter: function(k) {
10859             k = k == null ? brighter : Math.pow(brighter, k);
10860             return new Hsl(this.h, this.s, this.l * k, this.opacity);
10861           },
10862           darker: function(k) {
10863             k = k == null ? darker : Math.pow(darker, k);
10864             return new Hsl(this.h, this.s, this.l * k, this.opacity);
10865           },
10866           rgb: function() {
10867             var h = this.h % 360 + (this.h < 0) * 360,
10868                 s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
10869                 l = this.l,
10870                 m2 = l + (l < 0.5 ? l : 1 - l) * s,
10871                 m1 = 2 * l - m2;
10872             return new Rgb(
10873               hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
10874               hsl2rgb(h, m1, m2),
10875               hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
10876               this.opacity
10877             );
10878           },
10879           displayable: function() {
10880             return (0 <= this.s && this.s <= 1 || isNaN(this.s))
10881                 && (0 <= this.l && this.l <= 1)
10882                 && (0 <= this.opacity && this.opacity <= 1);
10883           },
10884           formatHsl: function() {
10885             var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
10886             return (a === 1 ? "hsl(" : "hsla(")
10887                 + (this.h || 0) + ", "
10888                 + (this.s || 0) * 100 + "%, "
10889                 + (this.l || 0) * 100 + "%"
10890                 + (a === 1 ? ")" : ", " + a + ")");
10891           }
10892         }));
10893
10894         /* From FvD 13.37, CSS Color Module Level 3 */
10895         function hsl2rgb(h, m1, m2) {
10896           return (h < 60 ? m1 + (m2 - m1) * h / 60
10897               : h < 180 ? m2
10898               : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
10899               : m1) * 255;
10900         }
10901
10902         var deg2rad = Math.PI / 180;
10903         var rad2deg = 180 / Math.PI;
10904
10905         // https://observablehq.com/@mbostock/lab-and-rgb
10906         var K = 18,
10907             Xn = 0.96422,
10908             Yn = 1,
10909             Zn = 0.82521,
10910             t0 = 4 / 29,
10911             t1 = 6 / 29,
10912             t2 = 3 * t1 * t1,
10913             t3 = t1 * t1 * t1;
10914
10915         function labConvert(o) {
10916           if (o instanceof Lab) { return new Lab(o.l, o.a, o.b, o.opacity); }
10917           if (o instanceof Hcl) { return hcl2lab(o); }
10918           if (!(o instanceof Rgb)) { o = rgbConvert(o); }
10919           var r = rgb2lrgb(o.r),
10920               g = rgb2lrgb(o.g),
10921               b = rgb2lrgb(o.b),
10922               y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
10923           if (r === g && g === b) { x = z = y; } else {
10924             x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
10925             z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
10926           }
10927           return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
10928         }
10929
10930         function gray(l, opacity) {
10931           return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
10932         }
10933
10934         function lab(l, a, b, opacity) {
10935           return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
10936         }
10937
10938         function Lab(l, a, b, opacity) {
10939           this.l = +l;
10940           this.a = +a;
10941           this.b = +b;
10942           this.opacity = +opacity;
10943         }
10944
10945         define$1(Lab, lab, extend(Color, {
10946           brighter: function(k) {
10947             return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
10948           },
10949           darker: function(k) {
10950             return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
10951           },
10952           rgb: function() {
10953             var y = (this.l + 16) / 116,
10954                 x = isNaN(this.a) ? y : y + this.a / 500,
10955                 z = isNaN(this.b) ? y : y - this.b / 200;
10956             x = Xn * lab2xyz(x);
10957             y = Yn * lab2xyz(y);
10958             z = Zn * lab2xyz(z);
10959             return new Rgb(
10960               lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
10961               lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
10962               lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
10963               this.opacity
10964             );
10965           }
10966         }));
10967
10968         function xyz2lab(t) {
10969           return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
10970         }
10971
10972         function lab2xyz(t) {
10973           return t > t1 ? t * t * t : t2 * (t - t0);
10974         }
10975
10976         function lrgb2rgb(x) {
10977           return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
10978         }
10979
10980         function rgb2lrgb(x) {
10981           return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
10982         }
10983
10984         function hclConvert(o) {
10985           if (o instanceof Hcl) { return new Hcl(o.h, o.c, o.l, o.opacity); }
10986           if (!(o instanceof Lab)) { o = labConvert(o); }
10987           if (o.a === 0 && o.b === 0) { return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); }
10988           var h = Math.atan2(o.b, o.a) * rad2deg;
10989           return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
10990         }
10991
10992         function lch(l, c, h, opacity) {
10993           return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
10994         }
10995
10996         function hcl(h, c, l, opacity) {
10997           return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
10998         }
10999
11000         function Hcl(h, c, l, opacity) {
11001           this.h = +h;
11002           this.c = +c;
11003           this.l = +l;
11004           this.opacity = +opacity;
11005         }
11006
11007         function hcl2lab(o) {
11008           if (isNaN(o.h)) { return new Lab(o.l, 0, 0, o.opacity); }
11009           var h = o.h * deg2rad;
11010           return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
11011         }
11012
11013         define$1(Hcl, hcl, extend(Color, {
11014           brighter: function(k) {
11015             return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
11016           },
11017           darker: function(k) {
11018             return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
11019           },
11020           rgb: function() {
11021             return hcl2lab(this).rgb();
11022           }
11023         }));
11024
11025         var A = -0.14861,
11026             B = +1.78277,
11027             C = -0.29227,
11028             D = -0.90649,
11029             E = +1.97294,
11030             ED = E * D,
11031             EB = E * B,
11032             BC_DA = B * C - D * A;
11033
11034         function cubehelixConvert(o) {
11035           if (o instanceof Cubehelix) { return new Cubehelix(o.h, o.s, o.l, o.opacity); }
11036           if (!(o instanceof Rgb)) { o = rgbConvert(o); }
11037           var r = o.r / 255,
11038               g = o.g / 255,
11039               b = o.b / 255,
11040               l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
11041               bl = b - l,
11042               k = (E * (g - l) - C * bl) / D,
11043               s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
11044               h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
11045           return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
11046         }
11047
11048         function cubehelix(h, s, l, opacity) {
11049           return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
11050         }
11051
11052         function Cubehelix(h, s, l, opacity) {
11053           this.h = +h;
11054           this.s = +s;
11055           this.l = +l;
11056           this.opacity = +opacity;
11057         }
11058
11059         define$1(Cubehelix, cubehelix, extend(Color, {
11060           brighter: function(k) {
11061             k = k == null ? brighter : Math.pow(brighter, k);
11062             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
11063           },
11064           darker: function(k) {
11065             k = k == null ? darker : Math.pow(darker, k);
11066             return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
11067           },
11068           rgb: function() {
11069             var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
11070                 l = +this.l,
11071                 a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
11072                 cosh = Math.cos(h),
11073                 sinh = Math.sin(h);
11074             return new Rgb(
11075               255 * (l + a * (A * cosh + B * sinh)),
11076               255 * (l + a * (C * cosh + D * sinh)),
11077               255 * (l + a * (E * cosh)),
11078               this.opacity
11079             );
11080           }
11081         }));
11082
11083         function basis(t1, v0, v1, v2, v3) {
11084           var t2 = t1 * t1, t3 = t2 * t1;
11085           return ((1 - 3 * t1 + 3 * t2 - t3) * v0
11086               + (4 - 6 * t2 + 3 * t3) * v1
11087               + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
11088               + t3 * v3) / 6;
11089         }
11090
11091         function basis$1(values) {
11092           var n = values.length - 1;
11093           return function(t) {
11094             var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
11095                 v1 = values[i],
11096                 v2 = values[i + 1],
11097                 v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
11098                 v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
11099             return basis((t - i / n) * n, v0, v1, v2, v3);
11100           };
11101         }
11102
11103         function basisClosed(values) {
11104           var n = values.length;
11105           return function(t) {
11106             var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
11107                 v0 = values[(i + n - 1) % n],
11108                 v1 = values[i % n],
11109                 v2 = values[(i + 1) % n],
11110                 v3 = values[(i + 2) % n];
11111             return basis((t - i / n) * n, v0, v1, v2, v3);
11112           };
11113         }
11114
11115         function constant$3(x) {
11116           return function() {
11117             return x;
11118           };
11119         }
11120
11121         function linear(a, d) {
11122           return function(t) {
11123             return a + t * d;
11124           };
11125         }
11126
11127         function exponential(a, b, y) {
11128           return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
11129             return Math.pow(a + t * b, y);
11130           };
11131         }
11132
11133         function hue(a, b) {
11134           var d = b - a;
11135           return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
11136         }
11137
11138         function gamma(y) {
11139           return (y = +y) === 1 ? nogamma : function(a, b) {
11140             return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a);
11141           };
11142         }
11143
11144         function nogamma(a, b) {
11145           var d = b - a;
11146           return d ? linear(a, d) : constant$3(isNaN(a) ? b : a);
11147         }
11148
11149         var d3_interpolateRgb = (function rgbGamma(y) {
11150           var color = gamma(y);
11151
11152           function rgb$1(start, end) {
11153             var r = color((start = rgb(start)).r, (end = rgb(end)).r),
11154                 g = color(start.g, end.g),
11155                 b = color(start.b, end.b),
11156                 opacity = nogamma(start.opacity, end.opacity);
11157             return function(t) {
11158               start.r = r(t);
11159               start.g = g(t);
11160               start.b = b(t);
11161               start.opacity = opacity(t);
11162               return start + "";
11163             };
11164           }
11165
11166           rgb$1.gamma = rgbGamma;
11167
11168           return rgb$1;
11169         })(1);
11170
11171         function rgbSpline(spline) {
11172           return function(colors) {
11173             var n = colors.length,
11174                 r = new Array(n),
11175                 g = new Array(n),
11176                 b = new Array(n),
11177                 i, color;
11178             for (i = 0; i < n; ++i) {
11179               color = rgb(colors[i]);
11180               r[i] = color.r || 0;
11181               g[i] = color.g || 0;
11182               b[i] = color.b || 0;
11183             }
11184             r = spline(r);
11185             g = spline(g);
11186             b = spline(b);
11187             color.opacity = 1;
11188             return function(t) {
11189               color.r = r(t);
11190               color.g = g(t);
11191               color.b = b(t);
11192               return color + "";
11193             };
11194           };
11195         }
11196
11197         var rgbBasis = rgbSpline(basis$1);
11198         var rgbBasisClosed = rgbSpline(basisClosed);
11199
11200         function numberArray(a, b) {
11201           if (!b) { b = []; }
11202           var n = a ? Math.min(b.length, a.length) : 0,
11203               c = b.slice(),
11204               i;
11205           return function(t) {
11206             for (i = 0; i < n; ++i) { c[i] = a[i] * (1 - t) + b[i] * t; }
11207             return c;
11208           };
11209         }
11210
11211         function isNumberArray(x) {
11212           return ArrayBuffer.isView(x) && !(x instanceof DataView);
11213         }
11214
11215         function array$2(a, b) {
11216           return (isNumberArray(b) ? numberArray : genericArray)(a, b);
11217         }
11218
11219         function genericArray(a, b) {
11220           var nb = b ? b.length : 0,
11221               na = a ? Math.min(nb, a.length) : 0,
11222               x = new Array(na),
11223               c = new Array(nb),
11224               i;
11225
11226           for (i = 0; i < na; ++i) { x[i] = d3_interpolate(a[i], b[i]); }
11227           for (; i < nb; ++i) { c[i] = b[i]; }
11228
11229           return function(t) {
11230             for (i = 0; i < na; ++i) { c[i] = x[i](t); }
11231             return c;
11232           };
11233         }
11234
11235         function date(a, b) {
11236           var d = new Date;
11237           return a = +a, b = +b, function(t) {
11238             return d.setTime(a * (1 - t) + b * t), d;
11239           };
11240         }
11241
11242         function d3_interpolateNumber(a, b) {
11243           return a = +a, b = +b, function(t) {
11244             return a * (1 - t) + b * t;
11245           };
11246         }
11247
11248         function object(a, b) {
11249           var i = {},
11250               c = {},
11251               k;
11252
11253           if (a === null || typeof a !== "object") { a = {}; }
11254           if (b === null || typeof b !== "object") { b = {}; }
11255
11256           for (k in b) {
11257             if (k in a) {
11258               i[k] = d3_interpolate(a[k], b[k]);
11259             } else {
11260               c[k] = b[k];
11261             }
11262           }
11263
11264           return function(t) {
11265             for (k in i) { c[k] = i[k](t); }
11266             return c;
11267           };
11268         }
11269
11270         var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
11271             reB = new RegExp(reA.source, "g");
11272
11273         function zero(b) {
11274           return function() {
11275             return b;
11276           };
11277         }
11278
11279         function one(b) {
11280           return function(t) {
11281             return b(t) + "";
11282           };
11283         }
11284
11285         function interpolateString(a, b) {
11286           var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
11287               am, // current match in a
11288               bm, // current match in b
11289               bs, // string preceding current number in b, if any
11290               i = -1, // index in s
11291               s = [], // string constants and placeholders
11292               q = []; // number interpolators
11293
11294           // Coerce inputs to strings.
11295           a = a + "", b = b + "";
11296
11297           // Interpolate pairs of numbers in a & b.
11298           while ((am = reA.exec(a))
11299               && (bm = reB.exec(b))) {
11300             if ((bs = bm.index) > bi) { // a string precedes the next number in b
11301               bs = b.slice(bi, bs);
11302               if (s[i]) { s[i] += bs; } // coalesce with previous string
11303               else { s[++i] = bs; }
11304             }
11305             if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
11306               if (s[i]) { s[i] += bm; } // coalesce with previous string
11307               else { s[++i] = bm; }
11308             } else { // interpolate non-matching numbers
11309               s[++i] = null;
11310               q.push({i: i, x: d3_interpolateNumber(am, bm)});
11311             }
11312             bi = reB.lastIndex;
11313           }
11314
11315           // Add remains of b.
11316           if (bi < b.length) {
11317             bs = b.slice(bi);
11318             if (s[i]) { s[i] += bs; } // coalesce with previous string
11319             else { s[++i] = bs; }
11320           }
11321
11322           // Special optimization for only a single match.
11323           // Otherwise, interpolate each of the numbers and rejoin the string.
11324           return s.length < 2 ? (q[0]
11325               ? one(q[0].x)
11326               : zero(b))
11327               : (b = q.length, function(t) {
11328                   for (var i = 0, o; i < b; ++i) { s[(o = q[i]).i] = o.x(t); }
11329                   return s.join("");
11330                 });
11331         }
11332
11333         function d3_interpolate(a, b) {
11334           var t = typeof b, c;
11335           return b == null || t === "boolean" ? constant$3(b)
11336               : (t === "number" ? d3_interpolateNumber
11337               : t === "string" ? ((c = color(b)) ? (b = c, d3_interpolateRgb) : interpolateString)
11338               : b instanceof color ? d3_interpolateRgb
11339               : b instanceof Date ? date
11340               : isNumberArray(b) ? numberArray
11341               : Array.isArray(b) ? genericArray
11342               : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
11343               : d3_interpolateNumber)(a, b);
11344         }
11345
11346         function discrete(range) {
11347           var n = range.length;
11348           return function(t) {
11349             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
11350           };
11351         }
11352
11353         function hue$1(a, b) {
11354           var i = hue(+a, +b);
11355           return function(t) {
11356             var x = i(t);
11357             return x - 360 * Math.floor(x / 360);
11358           };
11359         }
11360
11361         function interpolateRound(a, b) {
11362           return a = +a, b = +b, function(t) {
11363             return Math.round(a * (1 - t) + b * t);
11364           };
11365         }
11366
11367         var degrees = 180 / Math.PI;
11368
11369         var identity$2 = {
11370           translateX: 0,
11371           translateY: 0,
11372           rotate: 0,
11373           skewX: 0,
11374           scaleX: 1,
11375           scaleY: 1
11376         };
11377
11378         function decompose(a, b, c, d, e, f) {
11379           var scaleX, scaleY, skewX;
11380           if (scaleX = Math.sqrt(a * a + b * b)) { a /= scaleX, b /= scaleX; }
11381           if (skewX = a * c + b * d) { c -= a * skewX, d -= b * skewX; }
11382           if (scaleY = Math.sqrt(c * c + d * d)) { c /= scaleY, d /= scaleY, skewX /= scaleY; }
11383           if (a * d < b * c) { a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; }
11384           return {
11385             translateX: e,
11386             translateY: f,
11387             rotate: Math.atan2(b, a) * degrees,
11388             skewX: Math.atan(skewX) * degrees,
11389             scaleX: scaleX,
11390             scaleY: scaleY
11391           };
11392         }
11393
11394         var cssNode,
11395             cssRoot,
11396             cssView,
11397             svgNode;
11398
11399         function parseCss(value) {
11400           if (value === "none") { return identity$2; }
11401           if (!cssNode) { cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; }
11402           cssNode.style.transform = value;
11403           value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
11404           cssRoot.removeChild(cssNode);
11405           value = value.slice(7, -1).split(",");
11406           return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
11407         }
11408
11409         function parseSvg(value) {
11410           if (value == null) { return identity$2; }
11411           if (!svgNode) { svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); }
11412           svgNode.setAttribute("transform", value);
11413           if (!(value = svgNode.transform.baseVal.consolidate())) { return identity$2; }
11414           value = value.matrix;
11415           return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
11416         }
11417
11418         function interpolateTransform(parse, pxComma, pxParen, degParen) {
11419
11420           function pop(s) {
11421             return s.length ? s.pop() + " " : "";
11422           }
11423
11424           function translate(xa, ya, xb, yb, s, q) {
11425             if (xa !== xb || ya !== yb) {
11426               var i = s.push("translate(", null, pxComma, null, pxParen);
11427               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
11428             } else if (xb || yb) {
11429               s.push("translate(" + xb + pxComma + yb + pxParen);
11430             }
11431           }
11432
11433           function rotate(a, b, s, q) {
11434             if (a !== b) {
11435               if (a - b > 180) { b += 360; } else if (b - a > 180) { a += 360; } // shortest path
11436               q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
11437             } else if (b) {
11438               s.push(pop(s) + "rotate(" + b + degParen);
11439             }
11440           }
11441
11442           function skewX(a, b, s, q) {
11443             if (a !== b) {
11444               q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: d3_interpolateNumber(a, b)});
11445             } else if (b) {
11446               s.push(pop(s) + "skewX(" + b + degParen);
11447             }
11448           }
11449
11450           function scale(xa, ya, xb, yb, s, q) {
11451             if (xa !== xb || ya !== yb) {
11452               var i = s.push(pop(s) + "scale(", null, ",", null, ")");
11453               q.push({i: i - 4, x: d3_interpolateNumber(xa, xb)}, {i: i - 2, x: d3_interpolateNumber(ya, yb)});
11454             } else if (xb !== 1 || yb !== 1) {
11455               s.push(pop(s) + "scale(" + xb + "," + yb + ")");
11456             }
11457           }
11458
11459           return function(a, b) {
11460             var s = [], // string constants and placeholders
11461                 q = []; // number interpolators
11462             a = parse(a), b = parse(b);
11463             translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
11464             rotate(a.rotate, b.rotate, s, q);
11465             skewX(a.skewX, b.skewX, s, q);
11466             scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
11467             a = b = null; // gc
11468             return function(t) {
11469               var i = -1, n = q.length, o;
11470               while (++i < n) { s[(o = q[i]).i] = o.x(t); }
11471               return s.join("");
11472             };
11473           };
11474         }
11475
11476         var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
11477         var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
11478
11479         var rho = Math.SQRT2,
11480             rho2 = 2,
11481             rho4 = 4,
11482             epsilon2 = 1e-12;
11483
11484         function cosh(x) {
11485           return ((x = Math.exp(x)) + 1 / x) / 2;
11486         }
11487
11488         function sinh(x) {
11489           return ((x = Math.exp(x)) - 1 / x) / 2;
11490         }
11491
11492         function tanh(x) {
11493           return ((x = Math.exp(2 * x)) - 1) / (x + 1);
11494         }
11495
11496         // p0 = [ux0, uy0, w0]
11497         // p1 = [ux1, uy1, w1]
11498         function interpolateZoom(p0, p1) {
11499           var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
11500               ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
11501               dx = ux1 - ux0,
11502               dy = uy1 - uy0,
11503               d2 = dx * dx + dy * dy,
11504               i,
11505               S;
11506
11507           // Special case for u0 ≅ u1.
11508           if (d2 < epsilon2) {
11509             S = Math.log(w1 / w0) / rho;
11510             i = function(t) {
11511               return [
11512                 ux0 + t * dx,
11513                 uy0 + t * dy,
11514                 w0 * Math.exp(rho * t * S)
11515               ];
11516             };
11517           }
11518
11519           // General case.
11520           else {
11521             var d1 = Math.sqrt(d2),
11522                 b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
11523                 b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
11524                 r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
11525                 r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
11526             S = (r1 - r0) / rho;
11527             i = function(t) {
11528               var s = t * S,
11529                   coshr0 = cosh(r0),
11530                   u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
11531               return [
11532                 ux0 + u * dx,
11533                 uy0 + u * dy,
11534                 w0 * coshr0 / cosh(rho * s + r0)
11535               ];
11536             };
11537           }
11538
11539           i.duration = S * 1000;
11540
11541           return i;
11542         }
11543
11544         function hsl$1(hue) {
11545           return function(start, end) {
11546             var h = hue((start = hsl(start)).h, (end = hsl(end)).h),
11547                 s = nogamma(start.s, end.s),
11548                 l = nogamma(start.l, end.l),
11549                 opacity = nogamma(start.opacity, end.opacity);
11550             return function(t) {
11551               start.h = h(t);
11552               start.s = s(t);
11553               start.l = l(t);
11554               start.opacity = opacity(t);
11555               return start + "";
11556             };
11557           }
11558         }
11559
11560         var hsl$2 = hsl$1(hue);
11561         var hslLong = hsl$1(nogamma);
11562
11563         function lab$1(start, end) {
11564           var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
11565               a = nogamma(start.a, end.a),
11566               b = nogamma(start.b, end.b),
11567               opacity = nogamma(start.opacity, end.opacity);
11568           return function(t) {
11569             start.l = l(t);
11570             start.a = a(t);
11571             start.b = b(t);
11572             start.opacity = opacity(t);
11573             return start + "";
11574           };
11575         }
11576
11577         function hcl$1(hue) {
11578           return function(start, end) {
11579             var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
11580                 c = nogamma(start.c, end.c),
11581                 l = nogamma(start.l, end.l),
11582                 opacity = nogamma(start.opacity, end.opacity);
11583             return function(t) {
11584               start.h = h(t);
11585               start.c = c(t);
11586               start.l = l(t);
11587               start.opacity = opacity(t);
11588               return start + "";
11589             };
11590           }
11591         }
11592
11593         var hcl$2 = hcl$1(hue);
11594         var hclLong = hcl$1(nogamma);
11595
11596         function cubehelix$1(hue) {
11597           return (function cubehelixGamma(y) {
11598             y = +y;
11599
11600             function cubehelix$1(start, end) {
11601               var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h),
11602                   s = nogamma(start.s, end.s),
11603                   l = nogamma(start.l, end.l),
11604                   opacity = nogamma(start.opacity, end.opacity);
11605               return function(t) {
11606                 start.h = h(t);
11607                 start.s = s(t);
11608                 start.l = l(Math.pow(t, y));
11609                 start.opacity = opacity(t);
11610                 return start + "";
11611               };
11612             }
11613
11614             cubehelix$1.gamma = cubehelixGamma;
11615
11616             return cubehelix$1;
11617           })(1);
11618         }
11619
11620         var cubehelix$2 = cubehelix$1(hue);
11621         var cubehelixLong = cubehelix$1(nogamma);
11622
11623         function piecewise(interpolate, values) {
11624           var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);
11625           while (i < n) { I[i] = interpolate(v, v = values[++i]); }
11626           return function(t) {
11627             var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));
11628             return I[i](t - i);
11629           };
11630         }
11631
11632         function d3_quantize(interpolator, n) {
11633           var samples = new Array(n);
11634           for (var i = 0; i < n; ++i) { samples[i] = interpolator(i / (n - 1)); }
11635           return samples;
11636         }
11637
11638         var frame = 0, // is an animation frame pending?
11639             timeout = 0, // is a timeout pending?
11640             interval = 0, // are any timers active?
11641             pokeDelay = 1000, // how frequently we check for clock skew
11642             taskHead,
11643             taskTail,
11644             clockLast = 0,
11645             clockNow = 0,
11646             clockSkew = 0,
11647             clock = typeof performance === "object" && performance.now ? performance : Date,
11648             setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
11649
11650         function now() {
11651           return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
11652         }
11653
11654         function clearNow() {
11655           clockNow = 0;
11656         }
11657
11658         function Timer() {
11659           this._call =
11660           this._time =
11661           this._next = null;
11662         }
11663
11664         Timer.prototype = timer.prototype = {
11665           constructor: Timer,
11666           restart: function(callback, delay, time) {
11667             if (typeof callback !== "function") { throw new TypeError("callback is not a function"); }
11668             time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
11669             if (!this._next && taskTail !== this) {
11670               if (taskTail) { taskTail._next = this; }
11671               else { taskHead = this; }
11672               taskTail = this;
11673             }
11674             this._call = callback;
11675             this._time = time;
11676             sleep();
11677           },
11678           stop: function() {
11679             if (this._call) {
11680               this._call = null;
11681               this._time = Infinity;
11682               sleep();
11683             }
11684           }
11685         };
11686
11687         function timer(callback, delay, time) {
11688           var t = new Timer;
11689           t.restart(callback, delay, time);
11690           return t;
11691         }
11692
11693         function timerFlush() {
11694           now(); // Get the current time, if not already set.
11695           ++frame; // Pretend we’ve set an alarm, if we haven’t already.
11696           var t = taskHead, e;
11697           while (t) {
11698             if ((e = clockNow - t._time) >= 0) { t._call.call(null, e); }
11699             t = t._next;
11700           }
11701           --frame;
11702         }
11703
11704         function wake() {
11705           clockNow = (clockLast = clock.now()) + clockSkew;
11706           frame = timeout = 0;
11707           try {
11708             timerFlush();
11709           } finally {
11710             frame = 0;
11711             nap();
11712             clockNow = 0;
11713           }
11714         }
11715
11716         function poke() {
11717           var now = clock.now(), delay = now - clockLast;
11718           if (delay > pokeDelay) { clockSkew -= delay, clockLast = now; }
11719         }
11720
11721         function nap() {
11722           var t0, t1 = taskHead, t2, time = Infinity;
11723           while (t1) {
11724             if (t1._call) {
11725               if (time > t1._time) { time = t1._time; }
11726               t0 = t1, t1 = t1._next;
11727             } else {
11728               t2 = t1._next, t1._next = null;
11729               t1 = t0 ? t0._next = t2 : taskHead = t2;
11730             }
11731           }
11732           taskTail = t0;
11733           sleep(time);
11734         }
11735
11736         function sleep(time) {
11737           if (frame) { return; } // Soonest alarm already set, or will be.
11738           if (timeout) { timeout = clearTimeout(timeout); }
11739           var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
11740           if (delay > 24) {
11741             if (time < Infinity) { timeout = setTimeout(wake, time - clock.now() - clockSkew); }
11742             if (interval) { interval = clearInterval(interval); }
11743           } else {
11744             if (!interval) { clockLast = clock.now(), interval = setInterval(poke, pokeDelay); }
11745             frame = 1, setFrame(wake);
11746           }
11747         }
11748
11749         function d3_timeout(callback, delay, time) {
11750           var t = new Timer;
11751           delay = delay == null ? 0 : +delay;
11752           t.restart(function(elapsed) {
11753             t.stop();
11754             callback(elapsed + delay);
11755           }, delay, time);
11756           return t;
11757         }
11758
11759         function interval$1(callback, delay, time) {
11760           var t = new Timer, total = delay;
11761           if (delay == null) { return t.restart(callback, delay, time), t; }
11762           delay = +delay, time = time == null ? now() : +time;
11763           t.restart(function tick(elapsed) {
11764             elapsed += total;
11765             t.restart(tick, total += delay, time);
11766             callback(elapsed);
11767           }, delay, time);
11768           return t;
11769         }
11770
11771         var emptyOn = dispatch("start", "end", "cancel", "interrupt");
11772         var emptyTween = [];
11773
11774         var CREATED = 0;
11775         var SCHEDULED = 1;
11776         var STARTING = 2;
11777         var STARTED = 3;
11778         var RUNNING = 4;
11779         var ENDING = 5;
11780         var ENDED = 6;
11781
11782         function schedule(node, name, id, index, group, timing) {
11783           var schedules = node.__transition;
11784           if (!schedules) { node.__transition = {}; }
11785           else if (id in schedules) { return; }
11786           create$8(node, id, {
11787             name: name,
11788             index: index, // For context during callback.
11789             group: group, // For context during callback.
11790             on: emptyOn,
11791             tween: emptyTween,
11792             time: timing.time,
11793             delay: timing.delay,
11794             duration: timing.duration,
11795             ease: timing.ease,
11796             timer: null,
11797             state: CREATED
11798           });
11799         }
11800
11801         function init(node, id) {
11802           var schedule = get$2(node, id);
11803           if (schedule.state > CREATED) { throw new Error("too late; already scheduled"); }
11804           return schedule;
11805         }
11806
11807         function set$1(node, id) {
11808           var schedule = get$2(node, id);
11809           if (schedule.state > STARTED) { throw new Error("too late; already running"); }
11810           return schedule;
11811         }
11812
11813         function get$2(node, id) {
11814           var schedule = node.__transition;
11815           if (!schedule || !(schedule = schedule[id])) { throw new Error("transition not found"); }
11816           return schedule;
11817         }
11818
11819         function create$8(node, id, self) {
11820           var schedules = node.__transition,
11821               tween;
11822
11823           // Initialize the self timer when the transition is created.
11824           // Note the actual delay is not known until the first callback!
11825           schedules[id] = self;
11826           self.timer = timer(schedule, 0, self.time);
11827
11828           function schedule(elapsed) {
11829             self.state = SCHEDULED;
11830             self.timer.restart(start, self.delay, self.time);
11831
11832             // If the elapsed delay is less than our first sleep, start immediately.
11833             if (self.delay <= elapsed) { start(elapsed - self.delay); }
11834           }
11835
11836           function start(elapsed) {
11837             var i, j, n, o;
11838
11839             // If the state is not SCHEDULED, then we previously errored on start.
11840             if (self.state !== SCHEDULED) { return stop(); }
11841
11842             for (i in schedules) {
11843               o = schedules[i];
11844               if (o.name !== self.name) { continue; }
11845
11846               // While this element already has a starting transition during this frame,
11847               // defer starting an interrupting transition until that transition has a
11848               // chance to tick (and possibly end); see d3/d3-transition#54!
11849               if (o.state === STARTED) { return d3_timeout(start); }
11850
11851               // Interrupt the active transition, if any.
11852               if (o.state === RUNNING) {
11853                 o.state = ENDED;
11854                 o.timer.stop();
11855                 o.on.call("interrupt", node, node.__data__, o.index, o.group);
11856                 delete schedules[i];
11857               }
11858
11859               // Cancel any pre-empted transitions.
11860               else if (+i < id) {
11861                 o.state = ENDED;
11862                 o.timer.stop();
11863                 o.on.call("cancel", node, node.__data__, o.index, o.group);
11864                 delete schedules[i];
11865               }
11866             }
11867
11868             // Defer the first tick to end of the current frame; see d3/d3#1576.
11869             // Note the transition may be canceled after start and before the first tick!
11870             // Note this must be scheduled before the start event; see d3/d3-transition#16!
11871             // Assuming this is successful, subsequent callbacks go straight to tick.
11872             d3_timeout(function() {
11873               if (self.state === STARTED) {
11874                 self.state = RUNNING;
11875                 self.timer.restart(tick, self.delay, self.time);
11876                 tick(elapsed);
11877               }
11878             });
11879
11880             // Dispatch the start event.
11881             // Note this must be done before the tween are initialized.
11882             self.state = STARTING;
11883             self.on.call("start", node, node.__data__, self.index, self.group);
11884             if (self.state !== STARTING) { return; } // interrupted
11885             self.state = STARTED;
11886
11887             // Initialize the tween, deleting null tween.
11888             tween = new Array(n = self.tween.length);
11889             for (i = 0, j = -1; i < n; ++i) {
11890               if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
11891                 tween[++j] = o;
11892               }
11893             }
11894             tween.length = j + 1;
11895           }
11896
11897           function tick(elapsed) {
11898             var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
11899                 i = -1,
11900                 n = tween.length;
11901
11902             while (++i < n) {
11903               tween[i].call(node, t);
11904             }
11905
11906             // Dispatch the end event.
11907             if (self.state === ENDING) {
11908               self.on.call("end", node, node.__data__, self.index, self.group);
11909               stop();
11910             }
11911           }
11912
11913           function stop() {
11914             self.state = ENDED;
11915             self.timer.stop();
11916             delete schedules[id];
11917             for (var i in schedules) { return; } // eslint-disable-line no-unused-vars
11918             delete node.__transition;
11919           }
11920         }
11921
11922         function interrupt(node, name) {
11923           var schedules = node.__transition,
11924               schedule,
11925               active,
11926               empty = true,
11927               i;
11928
11929           if (!schedules) { return; }
11930
11931           name = name == null ? null : name + "";
11932
11933           for (i in schedules) {
11934             if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
11935             active = schedule.state > STARTING && schedule.state < ENDING;
11936             schedule.state = ENDED;
11937             schedule.timer.stop();
11938             schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
11939             delete schedules[i];
11940           }
11941
11942           if (empty) { delete node.__transition; }
11943         }
11944
11945         function selection_interrupt(name) {
11946           return this.each(function() {
11947             interrupt(this, name);
11948           });
11949         }
11950
11951         function tweenRemove(id, name) {
11952           var tween0, tween1;
11953           return function() {
11954             var schedule = set$1(this, id),
11955                 tween = schedule.tween;
11956
11957             // If this node shared tween with the previous node,
11958             // just assign the updated shared tween and we’re done!
11959             // Otherwise, copy-on-write.
11960             if (tween !== tween0) {
11961               tween1 = tween0 = tween;
11962               for (var i = 0, n = tween1.length; i < n; ++i) {
11963                 if (tween1[i].name === name) {
11964                   tween1 = tween1.slice();
11965                   tween1.splice(i, 1);
11966                   break;
11967                 }
11968               }
11969             }
11970
11971             schedule.tween = tween1;
11972           };
11973         }
11974
11975         function tweenFunction(id, name, value) {
11976           var tween0, tween1;
11977           if (typeof value !== "function") { throw new Error; }
11978           return function() {
11979             var schedule = set$1(this, id),
11980                 tween = schedule.tween;
11981
11982             // If this node shared tween with the previous node,
11983             // just assign the updated shared tween and we’re done!
11984             // Otherwise, copy-on-write.
11985             if (tween !== tween0) {
11986               tween1 = (tween0 = tween).slice();
11987               for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
11988                 if (tween1[i].name === name) {
11989                   tween1[i] = t;
11990                   break;
11991                 }
11992               }
11993               if (i === n) { tween1.push(t); }
11994             }
11995
11996             schedule.tween = tween1;
11997           };
11998         }
11999
12000         function transition_tween(name, value) {
12001           var id = this._id;
12002
12003           name += "";
12004
12005           if (arguments.length < 2) {
12006             var tween = get$2(this.node(), id).tween;
12007             for (var i = 0, n = tween.length, t; i < n; ++i) {
12008               if ((t = tween[i]).name === name) {
12009                 return t.value;
12010               }
12011             }
12012             return null;
12013           }
12014
12015           return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
12016         }
12017
12018         function tweenValue(transition, name, value) {
12019           var id = transition._id;
12020
12021           transition.each(function() {
12022             var schedule = set$1(this, id);
12023             (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
12024           });
12025
12026           return function(node) {
12027             return get$2(node, id).value[name];
12028           };
12029         }
12030
12031         function interpolate(a, b) {
12032           var c;
12033           return (typeof b === "number" ? d3_interpolateNumber
12034               : b instanceof color ? d3_interpolateRgb
12035               : (c = color(b)) ? (b = c, d3_interpolateRgb)
12036               : interpolateString)(a, b);
12037         }
12038
12039         function attrRemove$1(name) {
12040           return function() {
12041             this.removeAttribute(name);
12042           };
12043         }
12044
12045         function attrRemoveNS$1(fullname) {
12046           return function() {
12047             this.removeAttributeNS(fullname.space, fullname.local);
12048           };
12049         }
12050
12051         function attrConstant$1(name, interpolate, value1) {
12052           var string00,
12053               string1 = value1 + "",
12054               interpolate0;
12055           return function() {
12056             var string0 = this.getAttribute(name);
12057             return string0 === string1 ? null
12058                 : string0 === string00 ? interpolate0
12059                 : interpolate0 = interpolate(string00 = string0, value1);
12060           };
12061         }
12062
12063         function attrConstantNS$1(fullname, interpolate, value1) {
12064           var string00,
12065               string1 = value1 + "",
12066               interpolate0;
12067           return function() {
12068             var string0 = this.getAttributeNS(fullname.space, fullname.local);
12069             return string0 === string1 ? null
12070                 : string0 === string00 ? interpolate0
12071                 : interpolate0 = interpolate(string00 = string0, value1);
12072           };
12073         }
12074
12075         function attrFunction$1(name, interpolate, value) {
12076           var string00,
12077               string10,
12078               interpolate0;
12079           return function() {
12080             var string0, value1 = value(this), string1;
12081             if (value1 == null) { return void this.removeAttribute(name); }
12082             string0 = this.getAttribute(name);
12083             string1 = value1 + "";
12084             return string0 === string1 ? null
12085                 : string0 === string00 && string1 === string10 ? interpolate0
12086                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
12087           };
12088         }
12089
12090         function attrFunctionNS$1(fullname, interpolate, value) {
12091           var string00,
12092               string10,
12093               interpolate0;
12094           return function() {
12095             var string0, value1 = value(this), string1;
12096             if (value1 == null) { return void this.removeAttributeNS(fullname.space, fullname.local); }
12097             string0 = this.getAttributeNS(fullname.space, fullname.local);
12098             string1 = value1 + "";
12099             return string0 === string1 ? null
12100                 : string0 === string00 && string1 === string10 ? interpolate0
12101                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
12102           };
12103         }
12104
12105         function transition_attr(name, value) {
12106           var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
12107           return this.attrTween(name, typeof value === "function"
12108               ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
12109               : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
12110               : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
12111         }
12112
12113         function attrInterpolate(name, i) {
12114           return function(t) {
12115             this.setAttribute(name, i.call(this, t));
12116           };
12117         }
12118
12119         function attrInterpolateNS(fullname, i) {
12120           return function(t) {
12121             this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
12122           };
12123         }
12124
12125         function attrTweenNS(fullname, value) {
12126           var t0, i0;
12127           function tween() {
12128             var i = value.apply(this, arguments);
12129             if (i !== i0) { t0 = (i0 = i) && attrInterpolateNS(fullname, i); }
12130             return t0;
12131           }
12132           tween._value = value;
12133           return tween;
12134         }
12135
12136         function attrTween(name, value) {
12137           var t0, i0;
12138           function tween() {
12139             var i = value.apply(this, arguments);
12140             if (i !== i0) { t0 = (i0 = i) && attrInterpolate(name, i); }
12141             return t0;
12142           }
12143           tween._value = value;
12144           return tween;
12145         }
12146
12147         function transition_attrTween(name, value) {
12148           var key = "attr." + name;
12149           if (arguments.length < 2) { return (key = this.tween(key)) && key._value; }
12150           if (value == null) { return this.tween(key, null); }
12151           if (typeof value !== "function") { throw new Error; }
12152           var fullname = namespace(name);
12153           return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
12154         }
12155
12156         function delayFunction(id, value) {
12157           return function() {
12158             init(this, id).delay = +value.apply(this, arguments);
12159           };
12160         }
12161
12162         function delayConstant(id, value) {
12163           return value = +value, function() {
12164             init(this, id).delay = value;
12165           };
12166         }
12167
12168         function transition_delay(value) {
12169           var id = this._id;
12170
12171           return arguments.length
12172               ? this.each((typeof value === "function"
12173                   ? delayFunction
12174                   : delayConstant)(id, value))
12175               : get$2(this.node(), id).delay;
12176         }
12177
12178         function durationFunction(id, value) {
12179           return function() {
12180             set$1(this, id).duration = +value.apply(this, arguments);
12181           };
12182         }
12183
12184         function durationConstant(id, value) {
12185           return value = +value, function() {
12186             set$1(this, id).duration = value;
12187           };
12188         }
12189
12190         function transition_duration(value) {
12191           var id = this._id;
12192
12193           return arguments.length
12194               ? this.each((typeof value === "function"
12195                   ? durationFunction
12196                   : durationConstant)(id, value))
12197               : get$2(this.node(), id).duration;
12198         }
12199
12200         function easeConstant(id, value) {
12201           if (typeof value !== "function") { throw new Error; }
12202           return function() {
12203             set$1(this, id).ease = value;
12204           };
12205         }
12206
12207         function transition_ease(value) {
12208           var id = this._id;
12209
12210           return arguments.length
12211               ? this.each(easeConstant(id, value))
12212               : get$2(this.node(), id).ease;
12213         }
12214
12215         function transition_filter(match) {
12216           if (typeof match !== "function") { match = matcher(match); }
12217
12218           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
12219             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
12220               if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
12221                 subgroup.push(node);
12222               }
12223             }
12224           }
12225
12226           return new Transition(subgroups, this._parents, this._name, this._id);
12227         }
12228
12229         function transition_merge(transition) {
12230           if (transition._id !== this._id) { throw new Error; }
12231
12232           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) {
12233             for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
12234               if (node = group0[i] || group1[i]) {
12235                 merge[i] = node;
12236               }
12237             }
12238           }
12239
12240           for (; j < m0; ++j) {
12241             merges[j] = groups0[j];
12242           }
12243
12244           return new Transition(merges, this._parents, this._name, this._id);
12245         }
12246
12247         function start(name) {
12248           return (name + "").trim().split(/^|\s+/).every(function(t) {
12249             var i = t.indexOf(".");
12250             if (i >= 0) { t = t.slice(0, i); }
12251             return !t || t === "start";
12252           });
12253         }
12254
12255         function onFunction(id, name, listener) {
12256           var on0, on1, sit = start(name) ? init : set$1;
12257           return function() {
12258             var schedule = sit(this, id),
12259                 on = schedule.on;
12260
12261             // If this node shared a dispatch with the previous node,
12262             // just assign the updated shared dispatch and we’re done!
12263             // Otherwise, copy-on-write.
12264             if (on !== on0) { (on1 = (on0 = on).copy()).on(name, listener); }
12265
12266             schedule.on = on1;
12267           };
12268         }
12269
12270         function transition_on(name, listener) {
12271           var id = this._id;
12272
12273           return arguments.length < 2
12274               ? get$2(this.node(), id).on.on(name)
12275               : this.each(onFunction(id, name, listener));
12276         }
12277
12278         function removeFunction(id) {
12279           return function() {
12280             var parent = this.parentNode;
12281             for (var i in this.__transition) { if (+i !== id) { return; } }
12282             if (parent) { parent.removeChild(this); }
12283           };
12284         }
12285
12286         function transition_remove() {
12287           return this.on("end.remove", removeFunction(this._id));
12288         }
12289
12290         function transition_select(select) {
12291           var name = this._name,
12292               id = this._id;
12293
12294           if (typeof select !== "function") { select = selector(select); }
12295
12296           for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
12297             for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
12298               if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
12299                 if ("__data__" in node) { subnode.__data__ = node.__data__; }
12300                 subgroup[i] = subnode;
12301                 schedule(subgroup[i], name, id, i, subgroup, get$2(node, id));
12302               }
12303             }
12304           }
12305
12306           return new Transition(subgroups, this._parents, name, id);
12307         }
12308
12309         function transition_selectAll(select) {
12310           var name = this._name,
12311               id = this._id;
12312
12313           if (typeof select !== "function") { select = selectorAll(select); }
12314
12315           for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
12316             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
12317               if (node = group[i]) {
12318                 for (var children = select.call(node, node.__data__, i, group), child, inherit = get$2(node, id), k = 0, l = children.length; k < l; ++k) {
12319                   if (child = children[k]) {
12320                     schedule(child, name, id, k, children, inherit);
12321                   }
12322                 }
12323                 subgroups.push(children);
12324                 parents.push(node);
12325               }
12326             }
12327           }
12328
12329           return new Transition(subgroups, parents, name, id);
12330         }
12331
12332         var Selection$1 = selection.prototype.constructor;
12333
12334         function transition_selection() {
12335           return new Selection$1(this._groups, this._parents);
12336         }
12337
12338         function styleNull(name, interpolate) {
12339           var string00,
12340               string10,
12341               interpolate0;
12342           return function() {
12343             var string0 = styleValue(this, name),
12344                 string1 = (this.style.removeProperty(name), styleValue(this, name));
12345             return string0 === string1 ? null
12346                 : string0 === string00 && string1 === string10 ? interpolate0
12347                 : interpolate0 = interpolate(string00 = string0, string10 = string1);
12348           };
12349         }
12350
12351         function styleRemove$1(name) {
12352           return function() {
12353             this.style.removeProperty(name);
12354           };
12355         }
12356
12357         function styleConstant$1(name, interpolate, value1) {
12358           var string00,
12359               string1 = value1 + "",
12360               interpolate0;
12361           return function() {
12362             var string0 = styleValue(this, name);
12363             return string0 === string1 ? null
12364                 : string0 === string00 ? interpolate0
12365                 : interpolate0 = interpolate(string00 = string0, value1);
12366           };
12367         }
12368
12369         function styleFunction$1(name, interpolate, value) {
12370           var string00,
12371               string10,
12372               interpolate0;
12373           return function() {
12374             var string0 = styleValue(this, name),
12375                 value1 = value(this),
12376                 string1 = value1 + "";
12377             if (value1 == null) { string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); }
12378             return string0 === string1 ? null
12379                 : string0 === string00 && string1 === string10 ? interpolate0
12380                 : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
12381           };
12382         }
12383
12384         function styleMaybeRemove(id, name) {
12385           var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
12386           return function() {
12387             var schedule = set$1(this, id),
12388                 on = schedule.on,
12389                 listener = schedule.value[key] == null ? remove || (remove = styleRemove$1(name)) : undefined;
12390
12391             // If this node shared a dispatch with the previous node,
12392             // just assign the updated shared dispatch and we’re done!
12393             // Otherwise, copy-on-write.
12394             if (on !== on0 || listener0 !== listener) { (on1 = (on0 = on).copy()).on(event, listener0 = listener); }
12395
12396             schedule.on = on1;
12397           };
12398         }
12399
12400         function transition_style(name, value, priority) {
12401           var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
12402           return value == null ? this
12403               .styleTween(name, styleNull(name, i))
12404               .on("end.style." + name, styleRemove$1(name))
12405             : typeof value === "function" ? this
12406               .styleTween(name, styleFunction$1(name, i, tweenValue(this, "style." + name, value)))
12407               .each(styleMaybeRemove(this._id, name))
12408             : this
12409               .styleTween(name, styleConstant$1(name, i, value), priority)
12410               .on("end.style." + name, null);
12411         }
12412
12413         function styleInterpolate(name, i, priority) {
12414           return function(t) {
12415             this.style.setProperty(name, i.call(this, t), priority);
12416           };
12417         }
12418
12419         function styleTween(name, value, priority) {
12420           var t, i0;
12421           function tween() {
12422             var i = value.apply(this, arguments);
12423             if (i !== i0) { t = (i0 = i) && styleInterpolate(name, i, priority); }
12424             return t;
12425           }
12426           tween._value = value;
12427           return tween;
12428         }
12429
12430         function transition_styleTween(name, value, priority) {
12431           var key = "style." + (name += "");
12432           if (arguments.length < 2) { return (key = this.tween(key)) && key._value; }
12433           if (value == null) { return this.tween(key, null); }
12434           if (typeof value !== "function") { throw new Error; }
12435           return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
12436         }
12437
12438         function textConstant$1(value) {
12439           return function() {
12440             this.textContent = value;
12441           };
12442         }
12443
12444         function textFunction$1(value) {
12445           return function() {
12446             var value1 = value(this);
12447             this.textContent = value1 == null ? "" : value1;
12448           };
12449         }
12450
12451         function transition_text(value) {
12452           return this.tween("text", typeof value === "function"
12453               ? textFunction$1(tweenValue(this, "text", value))
12454               : textConstant$1(value == null ? "" : value + ""));
12455         }
12456
12457         function textInterpolate(i) {
12458           return function(t) {
12459             this.textContent = i.call(this, t);
12460           };
12461         }
12462
12463         function textTween(value) {
12464           var t0, i0;
12465           function tween() {
12466             var i = value.apply(this, arguments);
12467             if (i !== i0) { t0 = (i0 = i) && textInterpolate(i); }
12468             return t0;
12469           }
12470           tween._value = value;
12471           return tween;
12472         }
12473
12474         function transition_textTween(value) {
12475           var key = "text";
12476           if (arguments.length < 1) { return (key = this.tween(key)) && key._value; }
12477           if (value == null) { return this.tween(key, null); }
12478           if (typeof value !== "function") { throw new Error; }
12479           return this.tween(key, textTween(value));
12480         }
12481
12482         function transition_transition() {
12483           var name = this._name,
12484               id0 = this._id,
12485               id1 = newId();
12486
12487           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
12488             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
12489               if (node = group[i]) {
12490                 var inherit = get$2(node, id0);
12491                 schedule(node, name, id1, i, group, {
12492                   time: inherit.time + inherit.delay + inherit.duration,
12493                   delay: 0,
12494                   duration: inherit.duration,
12495                   ease: inherit.ease
12496                 });
12497               }
12498             }
12499           }
12500
12501           return new Transition(groups, this._parents, name, id1);
12502         }
12503
12504         function transition_end() {
12505           var on0, on1, that = this, id = that._id, size = that.size();
12506           return new Promise(function(resolve, reject) {
12507             var cancel = {value: reject},
12508                 end = {value: function() { if (--size === 0) { resolve(); } }};
12509
12510             that.each(function() {
12511               var schedule = set$1(this, id),
12512                   on = schedule.on;
12513
12514               // If this node shared a dispatch with the previous node,
12515               // just assign the updated shared dispatch and we’re done!
12516               // Otherwise, copy-on-write.
12517               if (on !== on0) {
12518                 on1 = (on0 = on).copy();
12519                 on1._.cancel.push(cancel);
12520                 on1._.interrupt.push(cancel);
12521                 on1._.end.push(end);
12522               }
12523
12524               schedule.on = on1;
12525             });
12526           });
12527         }
12528
12529         var id$3 = 0;
12530
12531         function Transition(groups, parents, name, id) {
12532           this._groups = groups;
12533           this._parents = parents;
12534           this._name = name;
12535           this._id = id;
12536         }
12537
12538         function transition(name) {
12539           return selection().transition(name);
12540         }
12541
12542         function newId() {
12543           return ++id$3;
12544         }
12545
12546         var selection_prototype = selection.prototype;
12547
12548         Transition.prototype = transition.prototype = {
12549           constructor: Transition,
12550           select: transition_select,
12551           selectAll: transition_selectAll,
12552           filter: transition_filter,
12553           merge: transition_merge,
12554           selection: transition_selection,
12555           transition: transition_transition,
12556           call: selection_prototype.call,
12557           nodes: selection_prototype.nodes,
12558           node: selection_prototype.node,
12559           size: selection_prototype.size,
12560           empty: selection_prototype.empty,
12561           each: selection_prototype.each,
12562           on: transition_on,
12563           attr: transition_attr,
12564           attrTween: transition_attrTween,
12565           style: transition_style,
12566           styleTween: transition_styleTween,
12567           text: transition_text,
12568           textTween: transition_textTween,
12569           remove: transition_remove,
12570           tween: transition_tween,
12571           delay: transition_delay,
12572           duration: transition_duration,
12573           ease: transition_ease,
12574           end: transition_end
12575         };
12576
12577         function linear$1(t) {
12578           return +t;
12579         }
12580
12581         function quadIn(t) {
12582           return t * t;
12583         }
12584
12585         function quadOut(t) {
12586           return t * (2 - t);
12587         }
12588
12589         function quadInOut(t) {
12590           return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
12591         }
12592
12593         function cubicIn(t) {
12594           return t * t * t;
12595         }
12596
12597         function cubicOut(t) {
12598           return --t * t * t + 1;
12599         }
12600
12601         function cubicInOut(t) {
12602           return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
12603         }
12604
12605         var exponent = 3;
12606
12607         var polyIn = (function custom(e) {
12608           e = +e;
12609
12610           function polyIn(t) {
12611             return Math.pow(t, e);
12612           }
12613
12614           polyIn.exponent = custom;
12615
12616           return polyIn;
12617         })(exponent);
12618
12619         var polyOut = (function custom(e) {
12620           e = +e;
12621
12622           function polyOut(t) {
12623             return 1 - Math.pow(1 - t, e);
12624           }
12625
12626           polyOut.exponent = custom;
12627
12628           return polyOut;
12629         })(exponent);
12630
12631         var polyInOut = (function custom(e) {
12632           e = +e;
12633
12634           function polyInOut(t) {
12635             return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
12636           }
12637
12638           polyInOut.exponent = custom;
12639
12640           return polyInOut;
12641         })(exponent);
12642
12643         var pi = Math.PI,
12644             halfPi = pi / 2;
12645
12646         function sinIn(t) {
12647           return 1 - Math.cos(t * halfPi);
12648         }
12649
12650         function sinOut(t) {
12651           return Math.sin(t * halfPi);
12652         }
12653
12654         function sinInOut(t) {
12655           return (1 - Math.cos(pi * t)) / 2;
12656         }
12657
12658         function expIn(t) {
12659           return Math.pow(2, 10 * t - 10);
12660         }
12661
12662         function expOut(t) {
12663           return 1 - Math.pow(2, -10 * t);
12664         }
12665
12666         function expInOut(t) {
12667           return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
12668         }
12669
12670         function circleIn(t) {
12671           return 1 - Math.sqrt(1 - t * t);
12672         }
12673
12674         function circleOut(t) {
12675           return Math.sqrt(1 - --t * t);
12676         }
12677
12678         function circleInOut(t) {
12679           return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
12680         }
12681
12682         var b1 = 4 / 11,
12683             b2 = 6 / 11,
12684             b3 = 8 / 11,
12685             b4 = 3 / 4,
12686             b5 = 9 / 11,
12687             b6 = 10 / 11,
12688             b7 = 15 / 16,
12689             b8 = 21 / 22,
12690             b9 = 63 / 64,
12691             b0 = 1 / b1 / b1;
12692
12693         function bounceIn(t) {
12694           return 1 - bounceOut(1 - t);
12695         }
12696
12697         function bounceOut(t) {
12698           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;
12699         }
12700
12701         function bounceInOut(t) {
12702           return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
12703         }
12704
12705         var overshoot = 1.70158;
12706
12707         var backIn = (function custom(s) {
12708           s = +s;
12709
12710           function backIn(t) {
12711             return t * t * ((s + 1) * t - s);
12712           }
12713
12714           backIn.overshoot = custom;
12715
12716           return backIn;
12717         })(overshoot);
12718
12719         var backOut = (function custom(s) {
12720           s = +s;
12721
12722           function backOut(t) {
12723             return --t * t * ((s + 1) * t + s) + 1;
12724           }
12725
12726           backOut.overshoot = custom;
12727
12728           return backOut;
12729         })(overshoot);
12730
12731         var backInOut = (function custom(s) {
12732           s = +s;
12733
12734           function backInOut(t) {
12735             return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
12736           }
12737
12738           backInOut.overshoot = custom;
12739
12740           return backInOut;
12741         })(overshoot);
12742
12743         var tau = 2 * Math.PI,
12744             amplitude = 1,
12745             period = 0.3;
12746
12747         var elasticIn = (function custom(a, p) {
12748           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
12749
12750           function elasticIn(t) {
12751             return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
12752           }
12753
12754           elasticIn.amplitude = function(a) { return custom(a, p * tau); };
12755           elasticIn.period = function(p) { return custom(a, p); };
12756
12757           return elasticIn;
12758         })(amplitude, period);
12759
12760         var elasticOut = (function custom(a, p) {
12761           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
12762
12763           function elasticOut(t) {
12764             return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
12765           }
12766
12767           elasticOut.amplitude = function(a) { return custom(a, p * tau); };
12768           elasticOut.period = function(p) { return custom(a, p); };
12769
12770           return elasticOut;
12771         })(amplitude, period);
12772
12773         var elasticInOut = (function custom(a, p) {
12774           var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
12775
12776           function elasticInOut(t) {
12777             return ((t = t * 2 - 1) < 0
12778                 ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
12779                 : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
12780           }
12781
12782           elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
12783           elasticInOut.period = function(p) { return custom(a, p); };
12784
12785           return elasticInOut;
12786         })(amplitude, period);
12787
12788         var defaultTiming = {
12789           time: null, // Set on use.
12790           delay: 0,
12791           duration: 250,
12792           ease: cubicInOut
12793         };
12794
12795         function inherit(node, id) {
12796           var timing;
12797           while (!(timing = node.__transition) || !(timing = timing[id])) {
12798             if (!(node = node.parentNode)) {
12799               return defaultTiming.time = now(), defaultTiming;
12800             }
12801           }
12802           return timing;
12803         }
12804
12805         function selection_transition(name) {
12806           var id,
12807               timing;
12808
12809           if (name instanceof Transition) {
12810             id = name._id, name = name._name;
12811           } else {
12812             id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
12813           }
12814
12815           for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
12816             for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
12817               if (node = group[i]) {
12818                 schedule(node, name, id, i, group, timing || inherit(node, id));
12819               }
12820             }
12821           }
12822
12823           return new Transition(groups, this._parents, name, id);
12824         }
12825
12826         selection.prototype.interrupt = selection_interrupt;
12827         selection.prototype.transition = selection_transition;
12828
12829         var root$2 = [null];
12830
12831         function active(node, name) {
12832           var schedules = node.__transition,
12833               schedule,
12834               i;
12835
12836           if (schedules) {
12837             name = name == null ? null : name + "";
12838             for (i in schedules) {
12839               if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
12840                 return new Transition([[node]], root$2, name, +i);
12841               }
12842             }
12843           }
12844
12845           return null;
12846         }
12847
12848         function constant$4(x) {
12849           return function() {
12850             return x;
12851           };
12852         }
12853
12854         function BrushEvent(target, type, selection) {
12855           this.target = target;
12856           this.type = type;
12857           this.selection = selection;
12858         }
12859
12860         function nopropagation$1() {
12861           event.stopImmediatePropagation();
12862         }
12863
12864         function noevent$1() {
12865           event.preventDefault();
12866           event.stopImmediatePropagation();
12867         }
12868
12869         var MODE_DRAG = {name: "drag"},
12870             MODE_SPACE = {name: "space"},
12871             MODE_HANDLE = {name: "handle"},
12872             MODE_CENTER = {name: "center"};
12873
12874         function number1(e) {
12875           return [+e[0], +e[1]];
12876         }
12877
12878         function number2(e) {
12879           return [number1(e[0]), number1(e[1])];
12880         }
12881
12882         function toucher(identifier) {
12883           return function(target) {
12884             return touch(target, event.touches, identifier);
12885           };
12886         }
12887
12888         var X = {
12889           name: "x",
12890           handles: ["w", "e"].map(type),
12891           input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },
12892           output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
12893         };
12894
12895         var Y = {
12896           name: "y",
12897           handles: ["n", "s"].map(type),
12898           input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },
12899           output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
12900         };
12901
12902         var XY = {
12903           name: "xy",
12904           handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),
12905           input: function(xy) { return xy == null ? null : number2(xy); },
12906           output: function(xy) { return xy; }
12907         };
12908
12909         var cursors = {
12910           overlay: "crosshair",
12911           selection: "move",
12912           n: "ns-resize",
12913           e: "ew-resize",
12914           s: "ns-resize",
12915           w: "ew-resize",
12916           nw: "nwse-resize",
12917           ne: "nesw-resize",
12918           se: "nwse-resize",
12919           sw: "nesw-resize"
12920         };
12921
12922         var flipX = {
12923           e: "w",
12924           w: "e",
12925           nw: "ne",
12926           ne: "nw",
12927           se: "sw",
12928           sw: "se"
12929         };
12930
12931         var flipY = {
12932           n: "s",
12933           s: "n",
12934           nw: "sw",
12935           ne: "se",
12936           se: "ne",
12937           sw: "nw"
12938         };
12939
12940         var signsX = {
12941           overlay: +1,
12942           selection: +1,
12943           n: null,
12944           e: +1,
12945           s: null,
12946           w: -1,
12947           nw: -1,
12948           ne: +1,
12949           se: +1,
12950           sw: -1
12951         };
12952
12953         var signsY = {
12954           overlay: +1,
12955           selection: +1,
12956           n: -1,
12957           e: null,
12958           s: +1,
12959           w: null,
12960           nw: -1,
12961           ne: -1,
12962           se: +1,
12963           sw: +1
12964         };
12965
12966         function type(t) {
12967           return {type: t};
12968         }
12969
12970         // Ignore right-click, since that should open the context menu.
12971         function defaultFilter$1() {
12972           return !event.ctrlKey && !event.button;
12973         }
12974
12975         function defaultExtent() {
12976           var svg = this.ownerSVGElement || this;
12977           if (svg.hasAttribute("viewBox")) {
12978             svg = svg.viewBox.baseVal;
12979             return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];
12980           }
12981           return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
12982         }
12983
12984         function defaultTouchable$1() {
12985           return navigator.maxTouchPoints || ("ontouchstart" in this);
12986         }
12987
12988         // Like d3.local, but with the name “__brush” rather than auto-generated.
12989         function local$1(node) {
12990           while (!node.__brush) { if (!(node = node.parentNode)) { return; } }
12991           return node.__brush;
12992         }
12993
12994         function empty$1(extent) {
12995           return extent[0][0] === extent[1][0]
12996               || extent[0][1] === extent[1][1];
12997         }
12998
12999         function brushSelection(node) {
13000           var state = node.__brush;
13001           return state ? state.dim.output(state.selection) : null;
13002         }
13003
13004         function brushX() {
13005           return brush$1(X);
13006         }
13007
13008         function brushY() {
13009           return brush$1(Y);
13010         }
13011
13012         function brush() {
13013           return brush$1(XY);
13014         }
13015
13016         function brush$1(dim) {
13017           var extent = defaultExtent,
13018               filter = defaultFilter$1,
13019               touchable = defaultTouchable$1,
13020               keys = true,
13021               listeners = dispatch("start", "brush", "end"),
13022               handleSize = 6,
13023               touchending;
13024
13025           function brush(group) {
13026             var overlay = group
13027                 .property("__brush", initialize)
13028               .selectAll(".overlay")
13029               .data([type("overlay")]);
13030
13031             overlay.enter().append("rect")
13032                 .attr("class", "overlay")
13033                 .attr("pointer-events", "all")
13034                 .attr("cursor", cursors.overlay)
13035               .merge(overlay)
13036                 .each(function() {
13037                   var extent = local$1(this).extent;
13038                   d3_select(this)
13039                       .attr("x", extent[0][0])
13040                       .attr("y", extent[0][1])
13041                       .attr("width", extent[1][0] - extent[0][0])
13042                       .attr("height", extent[1][1] - extent[0][1]);
13043                 });
13044
13045             group.selectAll(".selection")
13046               .data([type("selection")])
13047               .enter().append("rect")
13048                 .attr("class", "selection")
13049                 .attr("cursor", cursors.selection)
13050                 .attr("fill", "#777")
13051                 .attr("fill-opacity", 0.3)
13052                 .attr("stroke", "#fff")
13053                 .attr("shape-rendering", "crispEdges");
13054
13055             var handle = group.selectAll(".handle")
13056               .data(dim.handles, function(d) { return d.type; });
13057
13058             handle.exit().remove();
13059
13060             handle.enter().append("rect")
13061                 .attr("class", function(d) { return "handle handle--" + d.type; })
13062                 .attr("cursor", function(d) { return cursors[d.type]; });
13063
13064             group
13065                 .each(redraw)
13066                 .attr("fill", "none")
13067                 .attr("pointer-events", "all")
13068                 .on("mousedown.brush", started)
13069               .filter(touchable)
13070                 .on("touchstart.brush", started)
13071                 .on("touchmove.brush", touchmoved)
13072                 .on("touchend.brush touchcancel.brush", touchended)
13073                 .style("touch-action", "none")
13074                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
13075           }
13076
13077           brush.move = function(group, selection) {
13078             if (group.selection) {
13079               group
13080                   .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
13081                   .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
13082                   .tween("brush", function() {
13083                     var that = this,
13084                         state = that.__brush,
13085                         emit = emitter(that, arguments),
13086                         selection0 = state.selection,
13087                         selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
13088                         i = d3_interpolate(selection0, selection1);
13089
13090                     function tween(t) {
13091                       state.selection = t === 1 && selection1 === null ? null : i(t);
13092                       redraw.call(that);
13093                       emit.brush();
13094                     }
13095
13096                     return selection0 !== null && selection1 !== null ? tween : tween(1);
13097                   });
13098             } else {
13099               group
13100                   .each(function() {
13101                     var that = this,
13102                         args = arguments,
13103                         state = that.__brush,
13104                         selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
13105                         emit = emitter(that, args).beforestart();
13106
13107                     interrupt(that);
13108                     state.selection = selection1 === null ? null : selection1;
13109                     redraw.call(that);
13110                     emit.start().brush().end();
13111                   });
13112             }
13113           };
13114
13115           brush.clear = function(group) {
13116             brush.move(group, null);
13117           };
13118
13119           function redraw() {
13120             var group = d3_select(this),
13121                 selection = local$1(this).selection;
13122
13123             if (selection) {
13124               group.selectAll(".selection")
13125                   .style("display", null)
13126                   .attr("x", selection[0][0])
13127                   .attr("y", selection[0][1])
13128                   .attr("width", selection[1][0] - selection[0][0])
13129                   .attr("height", selection[1][1] - selection[0][1]);
13130
13131               group.selectAll(".handle")
13132                   .style("display", null)
13133                   .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
13134                   .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
13135                   .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
13136                   .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
13137             }
13138
13139             else {
13140               group.selectAll(".selection,.handle")
13141                   .style("display", "none")
13142                   .attr("x", null)
13143                   .attr("y", null)
13144                   .attr("width", null)
13145                   .attr("height", null);
13146             }
13147           }
13148
13149           function emitter(that, args, clean) {
13150             return (!clean && that.__brush.emitter) || new Emitter(that, args);
13151           }
13152
13153           function Emitter(that, args) {
13154             this.that = that;
13155             this.args = args;
13156             this.state = that.__brush;
13157             this.active = 0;
13158           }
13159
13160           Emitter.prototype = {
13161             beforestart: function() {
13162               if (++this.active === 1) { this.state.emitter = this, this.starting = true; }
13163               return this;
13164             },
13165             start: function() {
13166               if (this.starting) { this.starting = false, this.emit("start"); }
13167               else { this.emit("brush"); }
13168               return this;
13169             },
13170             brush: function() {
13171               this.emit("brush");
13172               return this;
13173             },
13174             end: function() {
13175               if (--this.active === 0) { delete this.state.emitter, this.emit("end"); }
13176               return this;
13177             },
13178             emit: function(type) {
13179               customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
13180             }
13181           };
13182
13183           function started() {
13184             if (touchending && !event.touches) { return; }
13185             if (!filter.apply(this, arguments)) { return; }
13186
13187             var that = this,
13188                 type = event.target.__data__.type,
13189                 mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),
13190                 signX = dim === Y ? null : signsX[type],
13191                 signY = dim === X ? null : signsY[type],
13192                 state = local$1(that),
13193                 extent = state.extent,
13194                 selection = state.selection,
13195                 W = extent[0][0], w0, w1,
13196                 N = extent[0][1], n0, n1,
13197                 E = extent[1][0], e0, e1,
13198                 S = extent[1][1], s0, s1,
13199                 dx = 0,
13200                 dy = 0,
13201                 moving,
13202                 shifting = signX && signY && keys && event.shiftKey,
13203                 lockX,
13204                 lockY,
13205                 pointer = event.touches ? toucher(event.changedTouches[0].identifier) : d3_mouse,
13206                 point0 = pointer(that),
13207                 point = point0,
13208                 emit = emitter(that, arguments, true).beforestart();
13209
13210             if (type === "overlay") {
13211               if (selection) { moving = true; }
13212               state.selection = selection = [
13213                 [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
13214                 [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
13215               ];
13216             } else {
13217               w0 = selection[0][0];
13218               n0 = selection[0][1];
13219               e0 = selection[1][0];
13220               s0 = selection[1][1];
13221             }
13222
13223             w1 = w0;
13224             n1 = n0;
13225             e1 = e0;
13226             s1 = s0;
13227
13228             var group = d3_select(that)
13229                 .attr("pointer-events", "none");
13230
13231             var overlay = group.selectAll(".overlay")
13232                 .attr("cursor", cursors[type]);
13233
13234             if (event.touches) {
13235               emit.moved = moved;
13236               emit.ended = ended;
13237             } else {
13238               var view = d3_select(event.view)
13239                   .on("mousemove.brush", moved, true)
13240                   .on("mouseup.brush", ended, true);
13241               if (keys) { view
13242                   .on("keydown.brush", keydowned, true)
13243                   .on("keyup.brush", keyupped, true); }
13244
13245               dragDisable(event.view);
13246             }
13247
13248             nopropagation$1();
13249             interrupt(that);
13250             redraw.call(that);
13251             emit.start();
13252
13253             function moved() {
13254               var point1 = pointer(that);
13255               if (shifting && !lockX && !lockY) {
13256                 if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) { lockY = true; }
13257                 else { lockX = true; }
13258               }
13259               point = point1;
13260               moving = true;
13261               noevent$1();
13262               move();
13263             }
13264
13265             function move() {
13266               var t;
13267
13268               dx = point[0] - point0[0];
13269               dy = point[1] - point0[1];
13270
13271               switch (mode) {
13272                 case MODE_SPACE:
13273                 case MODE_DRAG: {
13274                   if (signX) { dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; }
13275                   if (signY) { dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; }
13276                   break;
13277                 }
13278                 case MODE_HANDLE: {
13279                   if (signX < 0) { dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; }
13280                   else if (signX > 0) { dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; }
13281                   if (signY < 0) { dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; }
13282                   else if (signY > 0) { dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; }
13283                   break;
13284                 }
13285                 case MODE_CENTER: {
13286                   if (signX) { w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); }
13287                   if (signY) { n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); }
13288                   break;
13289                 }
13290               }
13291
13292               if (e1 < w1) {
13293                 signX *= -1;
13294                 t = w0, w0 = e0, e0 = t;
13295                 t = w1, w1 = e1, e1 = t;
13296                 if (type in flipX) { overlay.attr("cursor", cursors[type = flipX[type]]); }
13297               }
13298
13299               if (s1 < n1) {
13300                 signY *= -1;
13301                 t = n0, n0 = s0, s0 = t;
13302                 t = n1, n1 = s1, s1 = t;
13303                 if (type in flipY) { overlay.attr("cursor", cursors[type = flipY[type]]); }
13304               }
13305
13306               if (state.selection) { selection = state.selection; } // May be set by brush.move!
13307               if (lockX) { w1 = selection[0][0], e1 = selection[1][0]; }
13308               if (lockY) { n1 = selection[0][1], s1 = selection[1][1]; }
13309
13310               if (selection[0][0] !== w1
13311                   || selection[0][1] !== n1
13312                   || selection[1][0] !== e1
13313                   || selection[1][1] !== s1) {
13314                 state.selection = [[w1, n1], [e1, s1]];
13315                 redraw.call(that);
13316                 emit.brush();
13317               }
13318             }
13319
13320             function ended() {
13321               nopropagation$1();
13322               if (event.touches) {
13323                 if (event.touches.length) { return; }
13324                 if (touchending) { clearTimeout(touchending); }
13325                 touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
13326               } else {
13327                 yesdrag(event.view, moving);
13328                 view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
13329               }
13330               group.attr("pointer-events", "all");
13331               overlay.attr("cursor", cursors.overlay);
13332               if (state.selection) { selection = state.selection; } // May be set by brush.move (on start)!
13333               if (empty$1(selection)) { state.selection = null, redraw.call(that); }
13334               emit.end();
13335             }
13336
13337             function keydowned() {
13338               switch (event.keyCode) {
13339                 case 16: { // SHIFT
13340                   shifting = signX && signY;
13341                   break;
13342                 }
13343                 case 18: { // ALT
13344                   if (mode === MODE_HANDLE) {
13345                     if (signX) { e0 = e1 - dx * signX, w0 = w1 + dx * signX; }
13346                     if (signY) { s0 = s1 - dy * signY, n0 = n1 + dy * signY; }
13347                     mode = MODE_CENTER;
13348                     move();
13349                   }
13350                   break;
13351                 }
13352                 case 32: { // SPACE; takes priority over ALT
13353                   if (mode === MODE_HANDLE || mode === MODE_CENTER) {
13354                     if (signX < 0) { e0 = e1 - dx; } else if (signX > 0) { w0 = w1 - dx; }
13355                     if (signY < 0) { s0 = s1 - dy; } else if (signY > 0) { n0 = n1 - dy; }
13356                     mode = MODE_SPACE;
13357                     overlay.attr("cursor", cursors.selection);
13358                     move();
13359                   }
13360                   break;
13361                 }
13362                 default: return;
13363               }
13364               noevent$1();
13365             }
13366
13367             function keyupped() {
13368               switch (event.keyCode) {
13369                 case 16: { // SHIFT
13370                   if (shifting) {
13371                     lockX = lockY = shifting = false;
13372                     move();
13373                   }
13374                   break;
13375                 }
13376                 case 18: { // ALT
13377                   if (mode === MODE_CENTER) {
13378                     if (signX < 0) { e0 = e1; } else if (signX > 0) { w0 = w1; }
13379                     if (signY < 0) { s0 = s1; } else if (signY > 0) { n0 = n1; }
13380                     mode = MODE_HANDLE;
13381                     move();
13382                   }
13383                   break;
13384                 }
13385                 case 32: { // SPACE
13386                   if (mode === MODE_SPACE) {
13387                     if (event.altKey) {
13388                       if (signX) { e0 = e1 - dx * signX, w0 = w1 + dx * signX; }
13389                       if (signY) { s0 = s1 - dy * signY, n0 = n1 + dy * signY; }
13390                       mode = MODE_CENTER;
13391                     } else {
13392                       if (signX < 0) { e0 = e1; } else if (signX > 0) { w0 = w1; }
13393                       if (signY < 0) { s0 = s1; } else if (signY > 0) { n0 = n1; }
13394                       mode = MODE_HANDLE;
13395                     }
13396                     overlay.attr("cursor", cursors[type]);
13397                     move();
13398                   }
13399                   break;
13400                 }
13401                 default: return;
13402               }
13403               noevent$1();
13404             }
13405           }
13406
13407           function touchmoved() {
13408             emitter(this, arguments).moved();
13409           }
13410
13411           function touchended() {
13412             emitter(this, arguments).ended();
13413           }
13414
13415           function initialize() {
13416             var state = this.__brush || {selection: null};
13417             state.extent = number2(extent.apply(this, arguments));
13418             state.dim = dim;
13419             return state;
13420           }
13421
13422           brush.extent = function(_) {
13423             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$4(number2(_)), brush) : extent;
13424           };
13425
13426           brush.filter = function(_) {
13427             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$4(!!_), brush) : filter;
13428           };
13429
13430           brush.touchable = function(_) {
13431             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$4(!!_), brush) : touchable;
13432           };
13433
13434           brush.handleSize = function(_) {
13435             return arguments.length ? (handleSize = +_, brush) : handleSize;
13436           };
13437
13438           brush.keyModifiers = function(_) {
13439             return arguments.length ? (keys = !!_, brush) : keys;
13440           };
13441
13442           brush.on = function() {
13443             var value = listeners.on.apply(listeners, arguments);
13444             return value === listeners ? brush : value;
13445           };
13446
13447           return brush;
13448         }
13449
13450         var cos = Math.cos;
13451         var sin = Math.sin;
13452         var pi$1 = Math.PI;
13453         var halfPi$1 = pi$1 / 2;
13454         var tau$1 = pi$1 * 2;
13455         var max$3 = Math.max;
13456
13457         function compareValue(compare) {
13458           return function(a, b) {
13459             return compare(
13460               a.source.value + a.target.value,
13461               b.source.value + b.target.value
13462             );
13463           };
13464         }
13465
13466         function chord() {
13467           var padAngle = 0,
13468               sortGroups = null,
13469               sortSubgroups = null,
13470               sortChords = null;
13471
13472           function chord(matrix) {
13473             var n = matrix.length,
13474                 groupSums = [],
13475                 groupIndex = d3_range(n),
13476                 subgroupIndex = [],
13477                 chords = [],
13478                 groups = chords.groups = new Array(n),
13479                 subgroups = new Array(n * n),
13480                 k,
13481                 x,
13482                 x0,
13483                 dx,
13484                 i,
13485                 j;
13486
13487             // Compute the sum.
13488             k = 0, i = -1; while (++i < n) {
13489               x = 0, j = -1; while (++j < n) {
13490                 x += matrix[i][j];
13491               }
13492               groupSums.push(x);
13493               subgroupIndex.push(d3_range(n));
13494               k += x;
13495             }
13496
13497             // Sort groups…
13498             if (sortGroups) { groupIndex.sort(function(a, b) {
13499               return sortGroups(groupSums[a], groupSums[b]);
13500             }); }
13501
13502             // Sort subgroups…
13503             if (sortSubgroups) { subgroupIndex.forEach(function(d, i) {
13504               d.sort(function(a, b) {
13505                 return sortSubgroups(matrix[i][a], matrix[i][b]);
13506               });
13507             }); }
13508
13509             // Convert the sum to scaling factor for [0, 2pi].
13510             // TODO Allow start and end angle to be specified?
13511             // TODO Allow padding to be specified as percentage?
13512             k = max$3(0, tau$1 - padAngle * n) / k;
13513             dx = k ? padAngle : tau$1 / n;
13514
13515             // Compute the start and end angle for each group and subgroup.
13516             // Note: Opera has a bug reordering object literal properties!
13517             x = 0, i = -1; while (++i < n) {
13518               x0 = x, j = -1; while (++j < n) {
13519                 var di = groupIndex[i],
13520                     dj = subgroupIndex[di][j],
13521                     v = matrix[di][dj],
13522                     a0 = x,
13523                     a1 = x += v * k;
13524                 subgroups[dj * n + di] = {
13525                   index: di,
13526                   subindex: dj,
13527                   startAngle: a0,
13528                   endAngle: a1,
13529                   value: v
13530                 };
13531               }
13532               groups[di] = {
13533                 index: di,
13534                 startAngle: x0,
13535                 endAngle: x,
13536                 value: groupSums[di]
13537               };
13538               x += dx;
13539             }
13540
13541             // Generate chords for each (non-empty) subgroup-subgroup link.
13542             i = -1; while (++i < n) {
13543               j = i - 1; while (++j < n) {
13544                 var source = subgroups[j * n + i],
13545                     target = subgroups[i * n + j];
13546                 if (source.value || target.value) {
13547                   chords.push(source.value < target.value
13548                       ? {source: target, target: source}
13549                       : {source: source, target: target});
13550                 }
13551               }
13552             }
13553
13554             return sortChords ? chords.sort(sortChords) : chords;
13555           }
13556
13557           chord.padAngle = function(_) {
13558             return arguments.length ? (padAngle = max$3(0, _), chord) : padAngle;
13559           };
13560
13561           chord.sortGroups = function(_) {
13562             return arguments.length ? (sortGroups = _, chord) : sortGroups;
13563           };
13564
13565           chord.sortSubgroups = function(_) {
13566             return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
13567           };
13568
13569           chord.sortChords = function(_) {
13570             return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
13571           };
13572
13573           return chord;
13574         }
13575
13576         var slice$6 = Array.prototype.slice;
13577
13578         function constant$5(x) {
13579           return function() {
13580             return x;
13581           };
13582         }
13583
13584         var pi$2 = Math.PI,
13585             tau$2 = 2 * pi$2,
13586             epsilon$1 = 1e-6,
13587             tauEpsilon = tau$2 - epsilon$1;
13588
13589         function Path() {
13590           this._x0 = this._y0 = // start of current subpath
13591           this._x1 = this._y1 = null; // end of current subpath
13592           this._ = "";
13593         }
13594
13595         function path() {
13596           return new Path;
13597         }
13598
13599         Path.prototype = path.prototype = {
13600           constructor: Path,
13601           moveTo: function(x, y) {
13602             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y);
13603           },
13604           closePath: function() {
13605             if (this._x1 !== null) {
13606               this._x1 = this._x0, this._y1 = this._y0;
13607               this._ += "Z";
13608             }
13609           },
13610           lineTo: function(x, y) {
13611             this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y);
13612           },
13613           quadraticCurveTo: function(x1, y1, x, y) {
13614             this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
13615           },
13616           bezierCurveTo: function(x1, y1, x2, y2, x, y) {
13617             this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y);
13618           },
13619           arcTo: function(x1, y1, x2, y2, r) {
13620             x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
13621             var x0 = this._x1,
13622                 y0 = this._y1,
13623                 x21 = x2 - x1,
13624                 y21 = y2 - y1,
13625                 x01 = x0 - x1,
13626                 y01 = y0 - y1,
13627                 l01_2 = x01 * x01 + y01 * y01;
13628
13629             // Is the radius negative? Error.
13630             if (r < 0) { throw new Error("negative radius: " + r); }
13631
13632             // Is this path empty? Move to (x1,y1).
13633             if (this._x1 === null) {
13634               this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1);
13635             }
13636
13637             // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
13638             else if (!(l01_2 > epsilon$1));
13639
13640             // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
13641             // Equivalently, is (x1,y1) coincident with (x2,y2)?
13642             // Or, is the radius zero? Line to (x1,y1).
13643             else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$1) || !r) {
13644               this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1);
13645             }
13646
13647             // Otherwise, draw an arc!
13648             else {
13649               var x20 = x2 - x0,
13650                   y20 = y2 - y0,
13651                   l21_2 = x21 * x21 + y21 * y21,
13652                   l20_2 = x20 * x20 + y20 * y20,
13653                   l21 = Math.sqrt(l21_2),
13654                   l01 = Math.sqrt(l01_2),
13655                   l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
13656                   t01 = l / l01,
13657                   t21 = l / l21;
13658
13659               // If the start tangent is not coincident with (x0,y0), line to.
13660               if (Math.abs(t01 - 1) > epsilon$1) {
13661                 this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01);
13662               }
13663
13664               this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21);
13665             }
13666           },
13667           arc: function(x, y, r, a0, a1, ccw) {
13668             x = +x, y = +y, r = +r, ccw = !!ccw;
13669             var dx = r * Math.cos(a0),
13670                 dy = r * Math.sin(a0),
13671                 x0 = x + dx,
13672                 y0 = y + dy,
13673                 cw = 1 ^ ccw,
13674                 da = ccw ? a0 - a1 : a1 - a0;
13675
13676             // Is the radius negative? Error.
13677             if (r < 0) { throw new Error("negative radius: " + r); }
13678
13679             // Is this path empty? Move to (x0,y0).
13680             if (this._x1 === null) {
13681               this._ += "M" + x0 + "," + y0;
13682             }
13683
13684             // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
13685             else if (Math.abs(this._x1 - x0) > epsilon$1 || Math.abs(this._y1 - y0) > epsilon$1) {
13686               this._ += "L" + x0 + "," + y0;
13687             }
13688
13689             // Is this arc empty? We’re done.
13690             if (!r) { return; }
13691
13692             // Does the angle go the wrong way? Flip the direction.
13693             if (da < 0) { da = da % tau$2 + tau$2; }
13694
13695             // Is this a complete circle? Draw two arcs to complete the circle.
13696             if (da > tauEpsilon) {
13697               this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0);
13698             }
13699
13700             // Is this arc non-empty? Draw an arc!
13701             else if (da > epsilon$1) {
13702               this._ += "A" + r + "," + r + ",0," + (+(da >= pi$2)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1));
13703             }
13704           },
13705           rect: function(x, y, w, h) {
13706             this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z";
13707           },
13708           toString: function() {
13709             return this._;
13710           }
13711         };
13712
13713         function defaultSource(d) {
13714           return d.source;
13715         }
13716
13717         function defaultTarget(d) {
13718           return d.target;
13719         }
13720
13721         function defaultRadius(d) {
13722           return d.radius;
13723         }
13724
13725         function defaultStartAngle(d) {
13726           return d.startAngle;
13727         }
13728
13729         function defaultEndAngle(d) {
13730           return d.endAngle;
13731         }
13732
13733         function ribbon() {
13734           var source = defaultSource,
13735               target = defaultTarget,
13736               radius = defaultRadius,
13737               startAngle = defaultStartAngle,
13738               endAngle = defaultEndAngle,
13739               context = null;
13740
13741           function ribbon() {
13742             var buffer,
13743                 argv = slice$6.call(arguments),
13744                 s = source.apply(this, argv),
13745                 t = target.apply(this, argv),
13746                 sr = +radius.apply(this, (argv[0] = s, argv)),
13747                 sa0 = startAngle.apply(this, argv) - halfPi$1,
13748                 sa1 = endAngle.apply(this, argv) - halfPi$1,
13749                 sx0 = sr * cos(sa0),
13750                 sy0 = sr * sin(sa0),
13751                 tr = +radius.apply(this, (argv[0] = t, argv)),
13752                 ta0 = startAngle.apply(this, argv) - halfPi$1,
13753                 ta1 = endAngle.apply(this, argv) - halfPi$1;
13754
13755             if (!context) { context = buffer = path(); }
13756
13757             context.moveTo(sx0, sy0);
13758             context.arc(0, 0, sr, sa0, sa1);
13759             if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
13760               context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
13761               context.arc(0, 0, tr, ta0, ta1);
13762             }
13763             context.quadraticCurveTo(0, 0, sx0, sy0);
13764             context.closePath();
13765
13766             if (buffer) { return context = null, buffer + "" || null; }
13767           }
13768
13769           ribbon.radius = function(_) {
13770             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$5(+_), ribbon) : radius;
13771           };
13772
13773           ribbon.startAngle = function(_) {
13774             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : startAngle;
13775           };
13776
13777           ribbon.endAngle = function(_) {
13778             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$5(+_), ribbon) : endAngle;
13779           };
13780
13781           ribbon.source = function(_) {
13782             return arguments.length ? (source = _, ribbon) : source;
13783           };
13784
13785           ribbon.target = function(_) {
13786             return arguments.length ? (target = _, ribbon) : target;
13787           };
13788
13789           ribbon.context = function(_) {
13790             return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
13791           };
13792
13793           return ribbon;
13794         }
13795
13796         var prefix = "$";
13797
13798         function Map$1() {}
13799
13800         Map$1.prototype = map$3.prototype = {
13801           constructor: Map$1,
13802           has: function(key) {
13803             return (prefix + key) in this;
13804           },
13805           get: function(key) {
13806             return this[prefix + key];
13807           },
13808           set: function(key, value) {
13809             this[prefix + key] = value;
13810             return this;
13811           },
13812           remove: function(key) {
13813             var property = prefix + key;
13814             return property in this && delete this[property];
13815           },
13816           clear: function() {
13817             for (var property in this) { if (property[0] === prefix) { delete this[property]; } }
13818           },
13819           keys: function() {
13820             var keys = [];
13821             for (var property in this) { if (property[0] === prefix) { keys.push(property.slice(1)); } }
13822             return keys;
13823           },
13824           values: function() {
13825             var values = [];
13826             for (var property in this) { if (property[0] === prefix) { values.push(this[property]); } }
13827             return values;
13828           },
13829           entries: function() {
13830             var entries = [];
13831             for (var property in this) { if (property[0] === prefix) { entries.push({key: property.slice(1), value: this[property]}); } }
13832             return entries;
13833           },
13834           size: function() {
13835             var size = 0;
13836             for (var property in this) { if (property[0] === prefix) { ++size; } }
13837             return size;
13838           },
13839           empty: function() {
13840             for (var property in this) { if (property[0] === prefix) { return false; } }
13841             return true;
13842           },
13843           each: function(f) {
13844             for (var property in this) { if (property[0] === prefix) { f(this[property], property.slice(1), this); } }
13845           }
13846         };
13847
13848         function map$3(object, f) {
13849           var map = new Map$1;
13850
13851           // Copy constructor.
13852           if (object instanceof Map$1) { object.each(function(value, key) { map.set(key, value); }); }
13853
13854           // Index array by numeric index or specified key function.
13855           else if (Array.isArray(object)) {
13856             var i = -1,
13857                 n = object.length,
13858                 o;
13859
13860             if (f == null) { while (++i < n) { map.set(i, object[i]); } }
13861             else { while (++i < n) { map.set(f(o = object[i], i, object), o); } }
13862           }
13863
13864           // Convert object to map.
13865           else if (object) { for (var key in object) { map.set(key, object[key]); } }
13866
13867           return map;
13868         }
13869
13870         function nest() {
13871           var keys = [],
13872               sortKeys = [],
13873               sortValues,
13874               rollup,
13875               nest;
13876
13877           function apply(array, depth, createResult, setResult) {
13878             if (depth >= keys.length) {
13879               if (sortValues != null) { array.sort(sortValues); }
13880               return rollup != null ? rollup(array) : array;
13881             }
13882
13883             var i = -1,
13884                 n = array.length,
13885                 key = keys[depth++],
13886                 keyValue,
13887                 value,
13888                 valuesByKey = map$3(),
13889                 values,
13890                 result = createResult();
13891
13892             while (++i < n) {
13893               if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
13894                 values.push(value);
13895               } else {
13896                 valuesByKey.set(keyValue, [value]);
13897               }
13898             }
13899
13900             valuesByKey.each(function(values, key) {
13901               setResult(result, key, apply(values, depth, createResult, setResult));
13902             });
13903
13904             return result;
13905           }
13906
13907           function entries(map, depth) {
13908             if (++depth > keys.length) { return map; }
13909             var array, sortKey = sortKeys[depth - 1];
13910             if (rollup != null && depth >= keys.length) { array = map.entries(); }
13911             else { array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); }
13912             return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
13913           }
13914
13915           return nest = {
13916             object: function(array) { return apply(array, 0, createObject, setObject); },
13917             map: function(array) { return apply(array, 0, createMap, setMap); },
13918             entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
13919             key: function(d) { keys.push(d); return nest; },
13920             sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
13921             sortValues: function(order) { sortValues = order; return nest; },
13922             rollup: function(f) { rollup = f; return nest; }
13923           };
13924         }
13925
13926         function createObject() {
13927           return {};
13928         }
13929
13930         function setObject(object, key, value) {
13931           object[key] = value;
13932         }
13933
13934         function createMap() {
13935           return map$3();
13936         }
13937
13938         function setMap(map, key, value) {
13939           map.set(key, value);
13940         }
13941
13942         function Set$1() {}
13943
13944         var proto = map$3.prototype;
13945
13946         Set$1.prototype = set$2.prototype = {
13947           constructor: Set$1,
13948           has: proto.has,
13949           add: function(value) {
13950             value += "";
13951             this[prefix + value] = value;
13952             return this;
13953           },
13954           remove: proto.remove,
13955           clear: proto.clear,
13956           values: proto.keys,
13957           size: proto.size,
13958           empty: proto.empty,
13959           each: proto.each
13960         };
13961
13962         function set$2(object, f) {
13963           var set = new Set$1;
13964
13965           // Copy constructor.
13966           if (object instanceof Set$1) { object.each(function(value) { set.add(value); }); }
13967
13968           // Otherwise, assume it’s an array.
13969           else if (object) {
13970             var i = -1, n = object.length;
13971             if (f == null) { while (++i < n) { set.add(object[i]); } }
13972             else { while (++i < n) { set.add(f(object[i], i, object)); } }
13973           }
13974
13975           return set;
13976         }
13977
13978         function keys$3(map) {
13979           var keys = [];
13980           for (var key in map) { keys.push(key); }
13981           return keys;
13982         }
13983
13984         function values(map) {
13985           var values = [];
13986           for (var key in map) { values.push(map[key]); }
13987           return values;
13988         }
13989
13990         function entries(map) {
13991           var entries = [];
13992           for (var key in map) { entries.push({key: key, value: map[key]}); }
13993           return entries;
13994         }
13995
13996         var array$3 = Array.prototype;
13997
13998         var slice$7 = array$3.slice;
13999
14000         function ascending$1(a, b) {
14001           return a - b;
14002         }
14003
14004         function area(ring) {
14005           var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];
14006           while (++i < n) { area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; }
14007           return area;
14008         }
14009
14010         function constant$6(x) {
14011           return function() {
14012             return x;
14013           };
14014         }
14015
14016         function contains$1(ring, hole) {
14017           var i = -1, n = hole.length, c;
14018           while (++i < n) { if (c = ringContains(ring, hole[i])) { return c; } }
14019           return 0;
14020         }
14021
14022         function ringContains(ring, point) {
14023           var x = point[0], y = point[1], contains = -1;
14024           for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {
14025             var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];
14026             if (segmentContains(pi, pj, point)) { return 0; }
14027             if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) { contains = -contains; }
14028           }
14029           return contains;
14030         }
14031
14032         function segmentContains(a, b, c) {
14033           var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);
14034         }
14035
14036         function collinear(a, b, c) {
14037           return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);
14038         }
14039
14040         function within(p, q, r) {
14041           return p <= q && q <= r || r <= q && q <= p;
14042         }
14043
14044         function noop$3() {}
14045
14046         var cases = [
14047           [],
14048           [[[1.0, 1.5], [0.5, 1.0]]],
14049           [[[1.5, 1.0], [1.0, 1.5]]],
14050           [[[1.5, 1.0], [0.5, 1.0]]],
14051           [[[1.0, 0.5], [1.5, 1.0]]],
14052           [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],
14053           [[[1.0, 0.5], [1.0, 1.5]]],
14054           [[[1.0, 0.5], [0.5, 1.0]]],
14055           [[[0.5, 1.0], [1.0, 0.5]]],
14056           [[[1.0, 1.5], [1.0, 0.5]]],
14057           [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],
14058           [[[1.5, 1.0], [1.0, 0.5]]],
14059           [[[0.5, 1.0], [1.5, 1.0]]],
14060           [[[1.0, 1.5], [1.5, 1.0]]],
14061           [[[0.5, 1.0], [1.0, 1.5]]],
14062           []
14063         ];
14064
14065         function contours() {
14066           var dx = 1,
14067               dy = 1,
14068               threshold = thresholdSturges,
14069               smooth = smoothLinear;
14070
14071           function contours(values) {
14072             var tz = threshold(values);
14073
14074             // Convert number of thresholds into uniform thresholds.
14075             if (!Array.isArray(tz)) {
14076               var domain = extent(values), start = domain[0], stop = domain[1];
14077               tz = tickStep(start, stop, tz);
14078               tz = d3_range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);
14079             } else {
14080               tz = tz.slice().sort(ascending$1);
14081             }
14082
14083             return tz.map(function(value) {
14084               return contour(values, value);
14085             });
14086           }
14087
14088           // Accumulate, smooth contour rings, assign holes to exterior rings.
14089           // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js
14090           function contour(values, value) {
14091             var polygons = [],
14092                 holes = [];
14093
14094             isorings(values, value, function(ring) {
14095               smooth(ring, values, value);
14096               if (area(ring) > 0) { polygons.push([ring]); }
14097               else { holes.push(ring); }
14098             });
14099
14100             holes.forEach(function(hole) {
14101               for (var i = 0, n = polygons.length, polygon; i < n; ++i) {
14102                 if (contains$1((polygon = polygons[i])[0], hole) !== -1) {
14103                   polygon.push(hole);
14104                   return;
14105                 }
14106               }
14107             });
14108
14109             return {
14110               type: "MultiPolygon",
14111               value: value,
14112               coordinates: polygons
14113             };
14114           }
14115
14116           // Marching squares with isolines stitched into rings.
14117           // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js
14118           function isorings(values, value, callback) {
14119             var fragmentByStart = new Array,
14120                 fragmentByEnd = new Array,
14121                 x, y, t0, t1, t2, t3;
14122
14123             // Special case for the first row (y = -1, t2 = t3 = 0).
14124             x = y = -1;
14125             t1 = values[0] >= value;
14126             cases[t1 << 1].forEach(stitch);
14127             while (++x < dx - 1) {
14128               t0 = t1, t1 = values[x + 1] >= value;
14129               cases[t0 | t1 << 1].forEach(stitch);
14130             }
14131             cases[t1 << 0].forEach(stitch);
14132
14133             // General case for the intermediate rows.
14134             while (++y < dy - 1) {
14135               x = -1;
14136               t1 = values[y * dx + dx] >= value;
14137               t2 = values[y * dx] >= value;
14138               cases[t1 << 1 | t2 << 2].forEach(stitch);
14139               while (++x < dx - 1) {
14140                 t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;
14141                 t3 = t2, t2 = values[y * dx + x + 1] >= value;
14142                 cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);
14143               }
14144               cases[t1 | t2 << 3].forEach(stitch);
14145             }
14146
14147             // Special case for the last row (y = dy - 1, t0 = t1 = 0).
14148             x = -1;
14149             t2 = values[y * dx] >= value;
14150             cases[t2 << 2].forEach(stitch);
14151             while (++x < dx - 1) {
14152               t3 = t2, t2 = values[y * dx + x + 1] >= value;
14153               cases[t2 << 2 | t3 << 3].forEach(stitch);
14154             }
14155             cases[t2 << 3].forEach(stitch);
14156
14157             function stitch(line) {
14158               var start = [line[0][0] + x, line[0][1] + y],
14159                   end = [line[1][0] + x, line[1][1] + y],
14160                   startIndex = index(start),
14161                   endIndex = index(end),
14162                   f, g;
14163               if (f = fragmentByEnd[startIndex]) {
14164                 if (g = fragmentByStart[endIndex]) {
14165                   delete fragmentByEnd[f.end];
14166                   delete fragmentByStart[g.start];
14167                   if (f === g) {
14168                     f.ring.push(end);
14169                     callback(f.ring);
14170                   } else {
14171                     fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};
14172                   }
14173                 } else {
14174                   delete fragmentByEnd[f.end];
14175                   f.ring.push(end);
14176                   fragmentByEnd[f.end = endIndex] = f;
14177                 }
14178               } else if (f = fragmentByStart[endIndex]) {
14179                 if (g = fragmentByEnd[startIndex]) {
14180                   delete fragmentByStart[f.start];
14181                   delete fragmentByEnd[g.end];
14182                   if (f === g) {
14183                     f.ring.push(end);
14184                     callback(f.ring);
14185                   } else {
14186                     fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};
14187                   }
14188                 } else {
14189                   delete fragmentByStart[f.start];
14190                   f.ring.unshift(start);
14191                   fragmentByStart[f.start = startIndex] = f;
14192                 }
14193               } else {
14194                 fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};
14195               }
14196             }
14197           }
14198
14199           function index(point) {
14200             return point[0] * 2 + point[1] * (dx + 1) * 4;
14201           }
14202
14203           function smoothLinear(ring, values, value) {
14204             ring.forEach(function(point) {
14205               var x = point[0],
14206                   y = point[1],
14207                   xt = x | 0,
14208                   yt = y | 0,
14209                   v0,
14210                   v1 = values[yt * dx + xt];
14211               if (x > 0 && x < dx && xt === x) {
14212                 v0 = values[yt * dx + xt - 1];
14213                 point[0] = x + (value - v0) / (v1 - v0) - 0.5;
14214               }
14215               if (y > 0 && y < dy && yt === y) {
14216                 v0 = values[(yt - 1) * dx + xt];
14217                 point[1] = y + (value - v0) / (v1 - v0) - 0.5;
14218               }
14219             });
14220           }
14221
14222           contours.contour = contour;
14223
14224           contours.size = function(_) {
14225             if (!arguments.length) { return [dx, dy]; }
14226             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
14227             if (!(_0 > 0) || !(_1 > 0)) { throw new Error("invalid size"); }
14228             return dx = _0, dy = _1, contours;
14229           };
14230
14231           contours.thresholds = function(_) {
14232             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), contours) : threshold;
14233           };
14234
14235           contours.smooth = function(_) {
14236             return arguments.length ? (smooth = _ ? smoothLinear : noop$3, contours) : smooth === smoothLinear;
14237           };
14238
14239           return contours;
14240         }
14241
14242         // TODO Optimize edge cases.
14243         // TODO Optimize index calculation.
14244         // TODO Optimize arguments.
14245         function blurX(source, target, r) {
14246           var n = source.width,
14247               m = source.height,
14248               w = (r << 1) + 1;
14249           for (var j = 0; j < m; ++j) {
14250             for (var i = 0, sr = 0; i < n + r; ++i) {
14251               if (i < n) {
14252                 sr += source.data[i + j * n];
14253               }
14254               if (i >= r) {
14255                 if (i >= w) {
14256                   sr -= source.data[i - w + j * n];
14257                 }
14258                 target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);
14259               }
14260             }
14261           }
14262         }
14263
14264         // TODO Optimize edge cases.
14265         // TODO Optimize index calculation.
14266         // TODO Optimize arguments.
14267         function blurY(source, target, r) {
14268           var n = source.width,
14269               m = source.height,
14270               w = (r << 1) + 1;
14271           for (var i = 0; i < n; ++i) {
14272             for (var j = 0, sr = 0; j < m + r; ++j) {
14273               if (j < m) {
14274                 sr += source.data[i + j * n];
14275               }
14276               if (j >= r) {
14277                 if (j >= w) {
14278                   sr -= source.data[i + (j - w) * n];
14279                 }
14280                 target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);
14281               }
14282             }
14283           }
14284         }
14285
14286         function defaultX(d) {
14287           return d[0];
14288         }
14289
14290         function defaultY(d) {
14291           return d[1];
14292         }
14293
14294         function defaultWeight() {
14295           return 1;
14296         }
14297
14298         function density() {
14299           var x = defaultX,
14300               y = defaultY,
14301               weight = defaultWeight,
14302               dx = 960,
14303               dy = 500,
14304               r = 20, // blur radius
14305               k = 2, // log2(grid cell size)
14306               o = r * 3, // grid offset, to pad for blur
14307               n = (dx + o * 2) >> k, // grid width
14308               m = (dy + o * 2) >> k, // grid height
14309               threshold = constant$6(20);
14310
14311           function density(data) {
14312             var values0 = new Float32Array(n * m),
14313                 values1 = new Float32Array(n * m);
14314
14315             data.forEach(function(d, i, data) {
14316               var xi = (+x(d, i, data) + o) >> k,
14317                   yi = (+y(d, i, data) + o) >> k,
14318                   wi = +weight(d, i, data);
14319               if (xi >= 0 && xi < n && yi >= 0 && yi < m) {
14320                 values0[xi + yi * n] += wi;
14321               }
14322             });
14323
14324             // TODO Optimize.
14325             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
14326             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
14327             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
14328             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
14329             blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);
14330             blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);
14331
14332             var tz = threshold(values0);
14333
14334             // Convert number of thresholds into uniform thresholds.
14335             if (!Array.isArray(tz)) {
14336               var stop = max$2(values0);
14337               tz = tickStep(0, stop, tz);
14338               tz = d3_range(0, Math.floor(stop / tz) * tz, tz);
14339               tz.shift();
14340             }
14341
14342             return contours()
14343                 .thresholds(tz)
14344                 .size([n, m])
14345               (values0)
14346                 .map(transform);
14347           }
14348
14349           function transform(geometry) {
14350             geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.
14351             geometry.coordinates.forEach(transformPolygon);
14352             return geometry;
14353           }
14354
14355           function transformPolygon(coordinates) {
14356             coordinates.forEach(transformRing);
14357           }
14358
14359           function transformRing(coordinates) {
14360             coordinates.forEach(transformPoint);
14361           }
14362
14363           // TODO Optimize.
14364           function transformPoint(coordinates) {
14365             coordinates[0] = coordinates[0] * Math.pow(2, k) - o;
14366             coordinates[1] = coordinates[1] * Math.pow(2, k) - o;
14367           }
14368
14369           function resize() {
14370             o = r * 3;
14371             n = (dx + o * 2) >> k;
14372             m = (dy + o * 2) >> k;
14373             return density;
14374           }
14375
14376           density.x = function(_) {
14377             return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), density) : x;
14378           };
14379
14380           density.y = function(_) {
14381             return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), density) : y;
14382           };
14383
14384           density.weight = function(_) {
14385             return arguments.length ? (weight = typeof _ === "function" ? _ : constant$6(+_), density) : weight;
14386           };
14387
14388           density.size = function(_) {
14389             if (!arguments.length) { return [dx, dy]; }
14390             var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);
14391             if (!(_0 >= 0) && !(_0 >= 0)) { throw new Error("invalid size"); }
14392             return dx = _0, dy = _1, resize();
14393           };
14394
14395           density.cellSize = function(_) {
14396             if (!arguments.length) { return 1 << k; }
14397             if (!((_ = +_) >= 1)) { throw new Error("invalid cell size"); }
14398             return k = Math.floor(Math.log(_) / Math.LN2), resize();
14399           };
14400
14401           density.thresholds = function(_) {
14402             return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$6(slice$7.call(_)) : constant$6(_), density) : threshold;
14403           };
14404
14405           density.bandwidth = function(_) {
14406             if (!arguments.length) { return Math.sqrt(r * (r + 1)); }
14407             if (!((_ = +_) >= 0)) { throw new Error("invalid bandwidth"); }
14408             return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();
14409           };
14410
14411           return density;
14412         }
14413
14414         var EOL = {},
14415             EOF = {},
14416             QUOTE = 34,
14417             NEWLINE = 10,
14418             RETURN = 13;
14419
14420         function objectConverter(columns) {
14421           return new Function("d", "return {" + columns.map(function(name, i) {
14422             return JSON.stringify(name) + ": d[" + i + "] || \"\"";
14423           }).join(",") + "}");
14424         }
14425
14426         function customConverter(columns, f) {
14427           var object = objectConverter(columns);
14428           return function(row, i) {
14429             return f(object(row), i, columns);
14430           };
14431         }
14432
14433         // Compute unique columns in order of discovery.
14434         function inferColumns(rows) {
14435           var columnSet = Object.create(null),
14436               columns = [];
14437
14438           rows.forEach(function(row) {
14439             for (var column in row) {
14440               if (!(column in columnSet)) {
14441                 columns.push(columnSet[column] = column);
14442               }
14443             }
14444           });
14445
14446           return columns;
14447         }
14448
14449         function pad(value, width) {
14450           var s = value + "", length = s.length;
14451           return length < width ? new Array(width - length + 1).join(0) + s : s;
14452         }
14453
14454         function formatYear(year) {
14455           return year < 0 ? "-" + pad(-year, 6)
14456             : year > 9999 ? "+" + pad(year, 6)
14457             : pad(year, 4);
14458         }
14459
14460         function formatDate(date) {
14461           var hours = date.getUTCHours(),
14462               minutes = date.getUTCMinutes(),
14463               seconds = date.getUTCSeconds(),
14464               milliseconds = date.getUTCMilliseconds();
14465           return isNaN(date) ? "Invalid Date"
14466               : formatYear(date.getUTCFullYear()) + "-" + pad(date.getUTCMonth() + 1, 2) + "-" + pad(date.getUTCDate(), 2)
14467               + (milliseconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "." + pad(milliseconds, 3) + "Z"
14468               : seconds ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + ":" + pad(seconds, 2) + "Z"
14469               : minutes || hours ? "T" + pad(hours, 2) + ":" + pad(minutes, 2) + "Z"
14470               : "");
14471         }
14472
14473         function dsvFormat(delimiter) {
14474           var reFormat = new RegExp("[\"" + delimiter + "\n\r]"),
14475               DELIMITER = delimiter.charCodeAt(0);
14476
14477           function parse(text, f) {
14478             var convert, columns, rows = parseRows(text, function(row, i) {
14479               if (convert) { return convert(row, i - 1); }
14480               columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
14481             });
14482             rows.columns = columns || [];
14483             return rows;
14484           }
14485
14486           function parseRows(text, f) {
14487             var rows = [], // output rows
14488                 N = text.length,
14489                 I = 0, // current character index
14490                 n = 0, // current line number
14491                 t, // current token
14492                 eof = N <= 0, // current token followed by EOF?
14493                 eol = false; // current token followed by EOL?
14494
14495             // Strip the trailing newline.
14496             if (text.charCodeAt(N - 1) === NEWLINE) { --N; }
14497             if (text.charCodeAt(N - 1) === RETURN) { --N; }
14498
14499             function token() {
14500               if (eof) { return EOF; }
14501               if (eol) { return eol = false, EOL; }
14502
14503               // Unescape quotes.
14504               var i, j = I, c;
14505               if (text.charCodeAt(j) === QUOTE) {
14506                 while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE){ }
14507                 if ((i = I) >= N) { eof = true; }
14508                 else if ((c = text.charCodeAt(I++)) === NEWLINE) { eol = true; }
14509                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) { ++I; } }
14510                 return text.slice(j + 1, i - 1).replace(/""/g, "\"");
14511               }
14512
14513               // Find next delimiter or newline.
14514               while (I < N) {
14515                 if ((c = text.charCodeAt(i = I++)) === NEWLINE) { eol = true; }
14516                 else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) { ++I; } }
14517                 else if (c !== DELIMITER) { continue; }
14518                 return text.slice(j, i);
14519               }
14520
14521               // Return last token before EOF.
14522               return eof = true, text.slice(j, N);
14523             }
14524
14525             while ((t = token()) !== EOF) {
14526               var row = [];
14527               while (t !== EOL && t !== EOF) { row.push(t), t = token(); }
14528               if (f && (row = f(row, n++)) == null) { continue; }
14529               rows.push(row);
14530             }
14531
14532             return rows;
14533           }
14534
14535           function preformatBody(rows, columns) {
14536             return rows.map(function(row) {
14537               return columns.map(function(column) {
14538                 return formatValue(row[column]);
14539               }).join(delimiter);
14540             });
14541           }
14542
14543           function format(rows, columns) {
14544             if (columns == null) { columns = inferColumns(rows); }
14545             return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n");
14546           }
14547
14548           function formatBody(rows, columns) {
14549             if (columns == null) { columns = inferColumns(rows); }
14550             return preformatBody(rows, columns).join("\n");
14551           }
14552
14553           function formatRows(rows) {
14554             return rows.map(formatRow).join("\n");
14555           }
14556
14557           function formatRow(row) {
14558             return row.map(formatValue).join(delimiter);
14559           }
14560
14561           function formatValue(value) {
14562             return value == null ? ""
14563                 : value instanceof Date ? formatDate(value)
14564                 : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\""
14565                 : value;
14566           }
14567
14568           return {
14569             parse: parse,
14570             parseRows: parseRows,
14571             format: format,
14572             formatBody: formatBody,
14573             formatRows: formatRows,
14574             formatRow: formatRow,
14575             formatValue: formatValue
14576           };
14577         }
14578
14579         var csv = dsvFormat(",");
14580
14581         var csvParse = csv.parse;
14582         var csvParseRows = csv.parseRows;
14583         var csvFormat = csv.format;
14584         var csvFormatBody = csv.formatBody;
14585         var csvFormatRows = csv.formatRows;
14586         var csvFormatRow = csv.formatRow;
14587         var csvFormatValue = csv.formatValue;
14588
14589         var tsv = dsvFormat("\t");
14590
14591         var tsvParse = tsv.parse;
14592         var tsvParseRows = tsv.parseRows;
14593         var tsvFormat = tsv.format;
14594         var tsvFormatBody = tsv.formatBody;
14595         var tsvFormatRows = tsv.formatRows;
14596         var tsvFormatRow = tsv.formatRow;
14597         var tsvFormatValue = tsv.formatValue;
14598
14599         function autoType(object) {
14600           for (var key in object) {
14601             var value = object[key].trim(), number, m;
14602             if (!value) { value = null; }
14603             else if (value === "true") { value = true; }
14604             else if (value === "false") { value = false; }
14605             else if (value === "NaN") { value = NaN; }
14606             else if (!isNaN(number = +value)) { value = number; }
14607             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})?)?$/)) {
14608               if (fixtz && !!m[4] && !m[7]) { value = value.replace(/-/g, "/").replace(/T/, " "); }
14609               value = new Date(value);
14610             }
14611             else { continue; }
14612             object[key] = value;
14613           }
14614           return object;
14615         }
14616
14617         // https://github.com/d3/d3-dsv/issues/45
14618         var fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours();
14619
14620         function responseBlob(response) {
14621           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
14622           return response.blob();
14623         }
14624
14625         function blob(input, init) {
14626           return fetch(input, init).then(responseBlob);
14627         }
14628
14629         function responseArrayBuffer(response) {
14630           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
14631           return response.arrayBuffer();
14632         }
14633
14634         function buffer(input, init) {
14635           return fetch(input, init).then(responseArrayBuffer);
14636         }
14637
14638         function responseText(response) {
14639           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
14640           return response.text();
14641         }
14642
14643         function d3_text(input, init) {
14644           return fetch(input, init).then(responseText);
14645         }
14646
14647         function dsvParse(parse) {
14648           return function(input, init, row) {
14649             if (arguments.length === 2 && typeof init === "function") { row = init, init = undefined; }
14650             return d3_text(input, init).then(function(response) {
14651               return parse(response, row);
14652             });
14653           };
14654         }
14655
14656         function dsv(delimiter, input, init, row) {
14657           if (arguments.length === 3 && typeof init === "function") { row = init, init = undefined; }
14658           var format = dsvFormat(delimiter);
14659           return d3_text(input, init).then(function(response) {
14660             return format.parse(response, row);
14661           });
14662         }
14663
14664         var csv$1 = dsvParse(csvParse);
14665         var tsv$1 = dsvParse(tsvParse);
14666
14667         function image(input, init) {
14668           return new Promise(function(resolve, reject) {
14669             var image = new Image;
14670             for (var key in init) { image[key] = init[key]; }
14671             image.onerror = reject;
14672             image.onload = function() { resolve(image); };
14673             image.src = input;
14674           });
14675         }
14676
14677         function responseJson(response) {
14678           if (!response.ok) { throw new Error(response.status + " " + response.statusText); }
14679           return response.json();
14680         }
14681
14682         function d3_json(input, init) {
14683           return fetch(input, init).then(responseJson);
14684         }
14685
14686         function parser(type) {
14687           return function(input, init)  {
14688             return d3_text(input, init).then(function(text) {
14689               return (new DOMParser).parseFromString(text, type);
14690             });
14691           };
14692         }
14693
14694         var d3_xml = parser("application/xml");
14695
14696         var html = parser("text/html");
14697
14698         var svg = parser("image/svg+xml");
14699
14700         function center$1(x, y) {
14701           var nodes;
14702
14703           if (x == null) { x = 0; }
14704           if (y == null) { y = 0; }
14705
14706           function force() {
14707             var i,
14708                 n = nodes.length,
14709                 node,
14710                 sx = 0,
14711                 sy = 0;
14712
14713             for (i = 0; i < n; ++i) {
14714               node = nodes[i], sx += node.x, sy += node.y;
14715             }
14716
14717             for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
14718               node = nodes[i], node.x -= sx, node.y -= sy;
14719             }
14720           }
14721
14722           force.initialize = function(_) {
14723             nodes = _;
14724           };
14725
14726           force.x = function(_) {
14727             return arguments.length ? (x = +_, force) : x;
14728           };
14729
14730           force.y = function(_) {
14731             return arguments.length ? (y = +_, force) : y;
14732           };
14733
14734           return force;
14735         }
14736
14737         function constant$7(x) {
14738           return function() {
14739             return x;
14740           };
14741         }
14742
14743         function jiggle() {
14744           return (Math.random() - 0.5) * 1e-6;
14745         }
14746
14747         function tree_add(d) {
14748           var x = +this._x.call(null, d),
14749               y = +this._y.call(null, d);
14750           return add(this.cover(x, y), x, y, d);
14751         }
14752
14753         function add(tree, x, y, d) {
14754           if (isNaN(x) || isNaN(y)) { return tree; } // ignore invalid points
14755
14756           var parent,
14757               node = tree._root,
14758               leaf = {data: d},
14759               x0 = tree._x0,
14760               y0 = tree._y0,
14761               x1 = tree._x1,
14762               y1 = tree._y1,
14763               xm,
14764               ym,
14765               xp,
14766               yp,
14767               right,
14768               bottom,
14769               i,
14770               j;
14771
14772           // If the tree is empty, initialize the root as a leaf.
14773           if (!node) { return tree._root = leaf, tree; }
14774
14775           // Find the existing leaf for the new point, or add it.
14776           while (node.length) {
14777             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
14778             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
14779             if (parent = node, !(node = node[i = bottom << 1 | right])) { return parent[i] = leaf, tree; }
14780           }
14781
14782           // Is the new point is exactly coincident with the existing point?
14783           xp = +tree._x.call(null, node.data);
14784           yp = +tree._y.call(null, node.data);
14785           if (x === xp && y === yp) { return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; }
14786
14787           // Otherwise, split the leaf node until the old and new point are separated.
14788           do {
14789             parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
14790             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
14791             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
14792           } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
14793           return parent[j] = node, parent[i] = leaf, tree;
14794         }
14795
14796         function addAll(data) {
14797           var d, i, n = data.length,
14798               x,
14799               y,
14800               xz = new Array(n),
14801               yz = new Array(n),
14802               x0 = Infinity,
14803               y0 = Infinity,
14804               x1 = -Infinity,
14805               y1 = -Infinity;
14806
14807           // Compute the points and their extent.
14808           for (i = 0; i < n; ++i) {
14809             if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) { continue; }
14810             xz[i] = x;
14811             yz[i] = y;
14812             if (x < x0) { x0 = x; }
14813             if (x > x1) { x1 = x; }
14814             if (y < y0) { y0 = y; }
14815             if (y > y1) { y1 = y; }
14816           }
14817
14818           // If there were no (valid) points, abort.
14819           if (x0 > x1 || y0 > y1) { return this; }
14820
14821           // Expand the tree to cover the new points.
14822           this.cover(x0, y0).cover(x1, y1);
14823
14824           // Add the new points.
14825           for (i = 0; i < n; ++i) {
14826             add(this, xz[i], yz[i], data[i]);
14827           }
14828
14829           return this;
14830         }
14831
14832         function tree_cover(x, y) {
14833           if (isNaN(x = +x) || isNaN(y = +y)) { return this; } // ignore invalid points
14834
14835           var x0 = this._x0,
14836               y0 = this._y0,
14837               x1 = this._x1,
14838               y1 = this._y1;
14839
14840           // If the quadtree has no extent, initialize them.
14841           // Integer extent are necessary so that if we later double the extent,
14842           // the existing quadrant boundaries don’t change due to floating point error!
14843           if (isNaN(x0)) {
14844             x1 = (x0 = Math.floor(x)) + 1;
14845             y1 = (y0 = Math.floor(y)) + 1;
14846           }
14847
14848           // Otherwise, double repeatedly to cover.
14849           else {
14850             var z = x1 - x0,
14851                 node = this._root,
14852                 parent,
14853                 i;
14854
14855             while (x0 > x || x >= x1 || y0 > y || y >= y1) {
14856               i = (y < y0) << 1 | (x < x0);
14857               parent = new Array(4), parent[i] = node, node = parent, z *= 2;
14858               switch (i) {
14859                 case 0: x1 = x0 + z, y1 = y0 + z; break;
14860                 case 1: x0 = x1 - z, y1 = y0 + z; break;
14861                 case 2: x1 = x0 + z, y0 = y1 - z; break;
14862                 case 3: x0 = x1 - z, y0 = y1 - z; break;
14863               }
14864             }
14865
14866             if (this._root && this._root.length) { this._root = node; }
14867           }
14868
14869           this._x0 = x0;
14870           this._y0 = y0;
14871           this._x1 = x1;
14872           this._y1 = y1;
14873           return this;
14874         }
14875
14876         function tree_data() {
14877           var data = [];
14878           this.visit(function(node) {
14879             if (!node.length) { do { data.push(node.data); } while (node = node.next) }
14880           });
14881           return data;
14882         }
14883
14884         function tree_extent(_) {
14885           return arguments.length
14886               ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
14887               : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
14888         }
14889
14890         function Quad(node, x0, y0, x1, y1) {
14891           this.node = node;
14892           this.x0 = x0;
14893           this.y0 = y0;
14894           this.x1 = x1;
14895           this.y1 = y1;
14896         }
14897
14898         function tree_find(x, y, radius) {
14899           var data,
14900               x0 = this._x0,
14901               y0 = this._y0,
14902               x1,
14903               y1,
14904               x2,
14905               y2,
14906               x3 = this._x1,
14907               y3 = this._y1,
14908               quads = [],
14909               node = this._root,
14910               q,
14911               i;
14912
14913           if (node) { quads.push(new Quad(node, x0, y0, x3, y3)); }
14914           if (radius == null) { radius = Infinity; }
14915           else {
14916             x0 = x - radius, y0 = y - radius;
14917             x3 = x + radius, y3 = y + radius;
14918             radius *= radius;
14919           }
14920
14921           while (q = quads.pop()) {
14922
14923             // Stop searching if this quadrant can’t contain a closer node.
14924             if (!(node = q.node)
14925                 || (x1 = q.x0) > x3
14926                 || (y1 = q.y0) > y3
14927                 || (x2 = q.x1) < x0
14928                 || (y2 = q.y1) < y0) { continue; }
14929
14930             // Bisect the current quadrant.
14931             if (node.length) {
14932               var xm = (x1 + x2) / 2,
14933                   ym = (y1 + y2) / 2;
14934
14935               quads.push(
14936                 new Quad(node[3], xm, ym, x2, y2),
14937                 new Quad(node[2], x1, ym, xm, y2),
14938                 new Quad(node[1], xm, y1, x2, ym),
14939                 new Quad(node[0], x1, y1, xm, ym)
14940               );
14941
14942               // Visit the closest quadrant first.
14943               if (i = (y >= ym) << 1 | (x >= xm)) {
14944                 q = quads[quads.length - 1];
14945                 quads[quads.length - 1] = quads[quads.length - 1 - i];
14946                 quads[quads.length - 1 - i] = q;
14947               }
14948             }
14949
14950             // Visit this point. (Visiting coincident points isn’t necessary!)
14951             else {
14952               var dx = x - +this._x.call(null, node.data),
14953                   dy = y - +this._y.call(null, node.data),
14954                   d2 = dx * dx + dy * dy;
14955               if (d2 < radius) {
14956                 var d = Math.sqrt(radius = d2);
14957                 x0 = x - d, y0 = y - d;
14958                 x3 = x + d, y3 = y + d;
14959                 data = node.data;
14960               }
14961             }
14962           }
14963
14964           return data;
14965         }
14966
14967         function tree_remove(d) {
14968           if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) { return this; } // ignore invalid points
14969
14970           var parent,
14971               node = this._root,
14972               retainer,
14973               previous,
14974               next,
14975               x0 = this._x0,
14976               y0 = this._y0,
14977               x1 = this._x1,
14978               y1 = this._y1,
14979               x,
14980               y,
14981               xm,
14982               ym,
14983               right,
14984               bottom,
14985               i,
14986               j;
14987
14988           // If the tree is empty, initialize the root as a leaf.
14989           if (!node) { return this; }
14990
14991           // Find the leaf node for the point.
14992           // While descending, also retain the deepest parent with a non-removed sibling.
14993           if (node.length) { while (true) {
14994             if (right = x >= (xm = (x0 + x1) / 2)) { x0 = xm; } else { x1 = xm; }
14995             if (bottom = y >= (ym = (y0 + y1) / 2)) { y0 = ym; } else { y1 = ym; }
14996             if (!(parent = node, node = node[i = bottom << 1 | right])) { return this; }
14997             if (!node.length) { break; }
14998             if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) { retainer = parent, j = i; }
14999           } }
15000
15001           // Find the point to remove.
15002           while (node.data !== d) { if (!(previous = node, node = node.next)) { return this; } }
15003           if (next = node.next) { delete node.next; }
15004
15005           // If there are multiple coincident points, remove just the point.
15006           if (previous) { return (next ? previous.next = next : delete previous.next), this; }
15007
15008           // If this is the root point, remove it.
15009           if (!parent) { return this._root = next, this; }
15010
15011           // Remove this leaf.
15012           next ? parent[i] = next : delete parent[i];
15013
15014           // If the parent now contains exactly one leaf, collapse superfluous parents.
15015           if ((node = parent[0] || parent[1] || parent[2] || parent[3])
15016               && node === (parent[3] || parent[2] || parent[1] || parent[0])
15017               && !node.length) {
15018             if (retainer) { retainer[j] = node; }
15019             else { this._root = node; }
15020           }
15021
15022           return this;
15023         }
15024
15025         function removeAll(data) {
15026           for (var i = 0, n = data.length; i < n; ++i) { this.remove(data[i]); }
15027           return this;
15028         }
15029
15030         function tree_root() {
15031           return this._root;
15032         }
15033
15034         function tree_size() {
15035           var size = 0;
15036           this.visit(function(node) {
15037             if (!node.length) { do { ++size; } while (node = node.next) }
15038           });
15039           return size;
15040         }
15041
15042         function tree_visit(callback) {
15043           var quads = [], q, node = this._root, child, x0, y0, x1, y1;
15044           if (node) { quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); }
15045           while (q = quads.pop()) {
15046             if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
15047               var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
15048               if (child = node[3]) { quads.push(new Quad(child, xm, ym, x1, y1)); }
15049               if (child = node[2]) { quads.push(new Quad(child, x0, ym, xm, y1)); }
15050               if (child = node[1]) { quads.push(new Quad(child, xm, y0, x1, ym)); }
15051               if (child = node[0]) { quads.push(new Quad(child, x0, y0, xm, ym)); }
15052             }
15053           }
15054           return this;
15055         }
15056
15057         function tree_visitAfter(callback) {
15058           var quads = [], next = [], q;
15059           if (this._root) { quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); }
15060           while (q = quads.pop()) {
15061             var node = q.node;
15062             if (node.length) {
15063               var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
15064               if (child = node[0]) { quads.push(new Quad(child, x0, y0, xm, ym)); }
15065               if (child = node[1]) { quads.push(new Quad(child, xm, y0, x1, ym)); }
15066               if (child = node[2]) { quads.push(new Quad(child, x0, ym, xm, y1)); }
15067               if (child = node[3]) { quads.push(new Quad(child, xm, ym, x1, y1)); }
15068             }
15069             next.push(q);
15070           }
15071           while (q = next.pop()) {
15072             callback(q.node, q.x0, q.y0, q.x1, q.y1);
15073           }
15074           return this;
15075         }
15076
15077         function defaultX$1(d) {
15078           return d[0];
15079         }
15080
15081         function tree_x(_) {
15082           return arguments.length ? (this._x = _, this) : this._x;
15083         }
15084
15085         function defaultY$1(d) {
15086           return d[1];
15087         }
15088
15089         function tree_y(_) {
15090           return arguments.length ? (this._y = _, this) : this._y;
15091         }
15092
15093         function quadtree(nodes, x, y) {
15094           var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN);
15095           return nodes == null ? tree : tree.addAll(nodes);
15096         }
15097
15098         function Quadtree(x, y, x0, y0, x1, y1) {
15099           this._x = x;
15100           this._y = y;
15101           this._x0 = x0;
15102           this._y0 = y0;
15103           this._x1 = x1;
15104           this._y1 = y1;
15105           this._root = undefined;
15106         }
15107
15108         function leaf_copy(leaf) {
15109           var copy = {data: leaf.data}, next = copy;
15110           while (leaf = leaf.next) { next = next.next = {data: leaf.data}; }
15111           return copy;
15112         }
15113
15114         var treeProto = quadtree.prototype = Quadtree.prototype;
15115
15116         treeProto.copy = function() {
15117           var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
15118               node = this._root,
15119               nodes,
15120               child;
15121
15122           if (!node) { return copy; }
15123
15124           if (!node.length) { return copy._root = leaf_copy(node), copy; }
15125
15126           nodes = [{source: node, target: copy._root = new Array(4)}];
15127           while (node = nodes.pop()) {
15128             for (var i = 0; i < 4; ++i) {
15129               if (child = node.source[i]) {
15130                 if (child.length) { nodes.push({source: child, target: node.target[i] = new Array(4)}); }
15131                 else { node.target[i] = leaf_copy(child); }
15132               }
15133             }
15134           }
15135
15136           return copy;
15137         };
15138
15139         treeProto.add = tree_add;
15140         treeProto.addAll = addAll;
15141         treeProto.cover = tree_cover;
15142         treeProto.data = tree_data;
15143         treeProto.extent = tree_extent;
15144         treeProto.find = tree_find;
15145         treeProto.remove = tree_remove;
15146         treeProto.removeAll = removeAll;
15147         treeProto.root = tree_root;
15148         treeProto.size = tree_size;
15149         treeProto.visit = tree_visit;
15150         treeProto.visitAfter = tree_visitAfter;
15151         treeProto.x = tree_x;
15152         treeProto.y = tree_y;
15153
15154         function x(d) {
15155           return d.x + d.vx;
15156         }
15157
15158         function y(d) {
15159           return d.y + d.vy;
15160         }
15161
15162         function collide(radius) {
15163           var nodes,
15164               radii,
15165               strength = 1,
15166               iterations = 1;
15167
15168           if (typeof radius !== "function") { radius = constant$7(radius == null ? 1 : +radius); }
15169
15170           function force() {
15171             var i, n = nodes.length,
15172                 tree,
15173                 node,
15174                 xi,
15175                 yi,
15176                 ri,
15177                 ri2;
15178
15179             for (var k = 0; k < iterations; ++k) {
15180               tree = quadtree(nodes, x, y).visitAfter(prepare);
15181               for (i = 0; i < n; ++i) {
15182                 node = nodes[i];
15183                 ri = radii[node.index], ri2 = ri * ri;
15184                 xi = node.x + node.vx;
15185                 yi = node.y + node.vy;
15186                 tree.visit(apply);
15187               }
15188             }
15189
15190             function apply(quad, x0, y0, x1, y1) {
15191               var data = quad.data, rj = quad.r, r = ri + rj;
15192               if (data) {
15193                 if (data.index > node.index) {
15194                   var x = xi - data.x - data.vx,
15195                       y = yi - data.y - data.vy,
15196                       l = x * x + y * y;
15197                   if (l < r * r) {
15198                     if (x === 0) { x = jiggle(), l += x * x; }
15199                     if (y === 0) { y = jiggle(), l += y * y; }
15200                     l = (r - (l = Math.sqrt(l))) / l * strength;
15201                     node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
15202                     node.vy += (y *= l) * r;
15203                     data.vx -= x * (r = 1 - r);
15204                     data.vy -= y * r;
15205                   }
15206                 }
15207                 return;
15208               }
15209               return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
15210             }
15211           }
15212
15213           function prepare(quad) {
15214             if (quad.data) { return quad.r = radii[quad.data.index]; }
15215             for (var i = quad.r = 0; i < 4; ++i) {
15216               if (quad[i] && quad[i].r > quad.r) {
15217                 quad.r = quad[i].r;
15218               }
15219             }
15220           }
15221
15222           function initialize() {
15223             if (!nodes) { return; }
15224             var i, n = nodes.length, node;
15225             radii = new Array(n);
15226             for (i = 0; i < n; ++i) { node = nodes[i], radii[node.index] = +radius(node, i, nodes); }
15227           }
15228
15229           force.initialize = function(_) {
15230             nodes = _;
15231             initialize();
15232           };
15233
15234           force.iterations = function(_) {
15235             return arguments.length ? (iterations = +_, force) : iterations;
15236           };
15237
15238           force.strength = function(_) {
15239             return arguments.length ? (strength = +_, force) : strength;
15240           };
15241
15242           force.radius = function(_) {
15243             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
15244           };
15245
15246           return force;
15247         }
15248
15249         function index(d) {
15250           return d.index;
15251         }
15252
15253         function find(nodeById, nodeId) {
15254           var node = nodeById.get(nodeId);
15255           if (!node) { throw new Error("missing: " + nodeId); }
15256           return node;
15257         }
15258
15259         function link(links) {
15260           var id = index,
15261               strength = defaultStrength,
15262               strengths,
15263               distance = constant$7(30),
15264               distances,
15265               nodes,
15266               count,
15267               bias,
15268               iterations = 1;
15269
15270           if (links == null) { links = []; }
15271
15272           function defaultStrength(link) {
15273             return 1 / Math.min(count[link.source.index], count[link.target.index]);
15274           }
15275
15276           function force(alpha) {
15277             for (var k = 0, n = links.length; k < iterations; ++k) {
15278               for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
15279                 link = links[i], source = link.source, target = link.target;
15280                 x = target.x + target.vx - source.x - source.vx || jiggle();
15281                 y = target.y + target.vy - source.y - source.vy || jiggle();
15282                 l = Math.sqrt(x * x + y * y);
15283                 l = (l - distances[i]) / l * alpha * strengths[i];
15284                 x *= l, y *= l;
15285                 target.vx -= x * (b = bias[i]);
15286                 target.vy -= y * b;
15287                 source.vx += x * (b = 1 - b);
15288                 source.vy += y * b;
15289               }
15290             }
15291           }
15292
15293           function initialize() {
15294             if (!nodes) { return; }
15295
15296             var i,
15297                 n = nodes.length,
15298                 m = links.length,
15299                 nodeById = map$3(nodes, id),
15300                 link;
15301
15302             for (i = 0, count = new Array(n); i < m; ++i) {
15303               link = links[i], link.index = i;
15304               if (typeof link.source !== "object") { link.source = find(nodeById, link.source); }
15305               if (typeof link.target !== "object") { link.target = find(nodeById, link.target); }
15306               count[link.source.index] = (count[link.source.index] || 0) + 1;
15307               count[link.target.index] = (count[link.target.index] || 0) + 1;
15308             }
15309
15310             for (i = 0, bias = new Array(m); i < m; ++i) {
15311               link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
15312             }
15313
15314             strengths = new Array(m), initializeStrength();
15315             distances = new Array(m), initializeDistance();
15316           }
15317
15318           function initializeStrength() {
15319             if (!nodes) { return; }
15320
15321             for (var i = 0, n = links.length; i < n; ++i) {
15322               strengths[i] = +strength(links[i], i, links);
15323             }
15324           }
15325
15326           function initializeDistance() {
15327             if (!nodes) { return; }
15328
15329             for (var i = 0, n = links.length; i < n; ++i) {
15330               distances[i] = +distance(links[i], i, links);
15331             }
15332           }
15333
15334           force.initialize = function(_) {
15335             nodes = _;
15336             initialize();
15337           };
15338
15339           force.links = function(_) {
15340             return arguments.length ? (links = _, initialize(), force) : links;
15341           };
15342
15343           force.id = function(_) {
15344             return arguments.length ? (id = _, force) : id;
15345           };
15346
15347           force.iterations = function(_) {
15348             return arguments.length ? (iterations = +_, force) : iterations;
15349           };
15350
15351           force.strength = function(_) {
15352             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
15353           };
15354
15355           force.distance = function(_) {
15356             return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
15357           };
15358
15359           return force;
15360         }
15361
15362         function x$1(d) {
15363           return d.x;
15364         }
15365
15366         function y$1(d) {
15367           return d.y;
15368         }
15369
15370         var initialRadius = 10,
15371             initialAngle = Math.PI * (3 - Math.sqrt(5));
15372
15373         function simulation(nodes) {
15374           var simulation,
15375               alpha = 1,
15376               alphaMin = 0.001,
15377               alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
15378               alphaTarget = 0,
15379               velocityDecay = 0.6,
15380               forces = map$3(),
15381               stepper = timer(step),
15382               event = dispatch("tick", "end");
15383
15384           if (nodes == null) { nodes = []; }
15385
15386           function step() {
15387             tick();
15388             event.call("tick", simulation);
15389             if (alpha < alphaMin) {
15390               stepper.stop();
15391               event.call("end", simulation);
15392             }
15393           }
15394
15395           function tick(iterations) {
15396             var i, n = nodes.length, node;
15397
15398             if (iterations === undefined) { iterations = 1; }
15399
15400             for (var k = 0; k < iterations; ++k) {
15401               alpha += (alphaTarget - alpha) * alphaDecay;
15402
15403               forces.each(function (force) {
15404                 force(alpha);
15405               });
15406
15407               for (i = 0; i < n; ++i) {
15408                 node = nodes[i];
15409                 if (node.fx == null) { node.x += node.vx *= velocityDecay; }
15410                 else { node.x = node.fx, node.vx = 0; }
15411                 if (node.fy == null) { node.y += node.vy *= velocityDecay; }
15412                 else { node.y = node.fy, node.vy = 0; }
15413               }
15414             }
15415
15416             return simulation;
15417           }
15418
15419           function initializeNodes() {
15420             for (var i = 0, n = nodes.length, node; i < n; ++i) {
15421               node = nodes[i], node.index = i;
15422               if (node.fx != null) { node.x = node.fx; }
15423               if (node.fy != null) { node.y = node.fy; }
15424               if (isNaN(node.x) || isNaN(node.y)) {
15425                 var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
15426                 node.x = radius * Math.cos(angle);
15427                 node.y = radius * Math.sin(angle);
15428               }
15429               if (isNaN(node.vx) || isNaN(node.vy)) {
15430                 node.vx = node.vy = 0;
15431               }
15432             }
15433           }
15434
15435           function initializeForce(force) {
15436             if (force.initialize) { force.initialize(nodes); }
15437             return force;
15438           }
15439
15440           initializeNodes();
15441
15442           return simulation = {
15443             tick: tick,
15444
15445             restart: function() {
15446               return stepper.restart(step), simulation;
15447             },
15448
15449             stop: function() {
15450               return stepper.stop(), simulation;
15451             },
15452
15453             nodes: function(_) {
15454               return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
15455             },
15456
15457             alpha: function(_) {
15458               return arguments.length ? (alpha = +_, simulation) : alpha;
15459             },
15460
15461             alphaMin: function(_) {
15462               return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
15463             },
15464
15465             alphaDecay: function(_) {
15466               return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
15467             },
15468
15469             alphaTarget: function(_) {
15470               return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
15471             },
15472
15473             velocityDecay: function(_) {
15474               return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
15475             },
15476
15477             force: function(name, _) {
15478               return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
15479             },
15480
15481             find: function(x, y, radius) {
15482               var i = 0,
15483                   n = nodes.length,
15484                   dx,
15485                   dy,
15486                   d2,
15487                   node,
15488                   closest;
15489
15490               if (radius == null) { radius = Infinity; }
15491               else { radius *= radius; }
15492
15493               for (i = 0; i < n; ++i) {
15494                 node = nodes[i];
15495                 dx = x - node.x;
15496                 dy = y - node.y;
15497                 d2 = dx * dx + dy * dy;
15498                 if (d2 < radius) { closest = node, radius = d2; }
15499               }
15500
15501               return closest;
15502             },
15503
15504             on: function(name, _) {
15505               return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
15506             }
15507           };
15508         }
15509
15510         function manyBody() {
15511           var nodes,
15512               node,
15513               alpha,
15514               strength = constant$7(-30),
15515               strengths,
15516               distanceMin2 = 1,
15517               distanceMax2 = Infinity,
15518               theta2 = 0.81;
15519
15520           function force(_) {
15521             var i, n = nodes.length, tree = quadtree(nodes, x$1, y$1).visitAfter(accumulate);
15522             for (alpha = _, i = 0; i < n; ++i) { node = nodes[i], tree.visit(apply); }
15523           }
15524
15525           function initialize() {
15526             if (!nodes) { return; }
15527             var i, n = nodes.length, node;
15528             strengths = new Array(n);
15529             for (i = 0; i < n; ++i) { node = nodes[i], strengths[node.index] = +strength(node, i, nodes); }
15530           }
15531
15532           function accumulate(quad) {
15533             var strength = 0, q, c, weight = 0, x, y, i;
15534
15535             // For internal nodes, accumulate forces from child quadrants.
15536             if (quad.length) {
15537               for (x = y = i = 0; i < 4; ++i) {
15538                 if ((q = quad[i]) && (c = Math.abs(q.value))) {
15539                   strength += q.value, weight += c, x += c * q.x, y += c * q.y;
15540                 }
15541               }
15542               quad.x = x / weight;
15543               quad.y = y / weight;
15544             }
15545
15546             // For leaf nodes, accumulate forces from coincident quadrants.
15547             else {
15548               q = quad;
15549               q.x = q.data.x;
15550               q.y = q.data.y;
15551               do { strength += strengths[q.data.index]; }
15552               while (q = q.next);
15553             }
15554
15555             quad.value = strength;
15556           }
15557
15558           function apply(quad, x1, _, x2) {
15559             if (!quad.value) { return true; }
15560
15561             var x = quad.x - node.x,
15562                 y = quad.y - node.y,
15563                 w = x2 - x1,
15564                 l = x * x + y * y;
15565
15566             // Apply the Barnes-Hut approximation if possible.
15567             // Limit forces for very close nodes; randomize direction if coincident.
15568             if (w * w / theta2 < l) {
15569               if (l < distanceMax2) {
15570                 if (x === 0) { x = jiggle(), l += x * x; }
15571                 if (y === 0) { y = jiggle(), l += y * y; }
15572                 if (l < distanceMin2) { l = Math.sqrt(distanceMin2 * l); }
15573                 node.vx += x * quad.value * alpha / l;
15574                 node.vy += y * quad.value * alpha / l;
15575               }
15576               return true;
15577             }
15578
15579             // Otherwise, process points directly.
15580             else if (quad.length || l >= distanceMax2) { return; }
15581
15582             // Limit forces for very close nodes; randomize direction if coincident.
15583             if (quad.data !== node || quad.next) {
15584               if (x === 0) { x = jiggle(), l += x * x; }
15585               if (y === 0) { y = jiggle(), l += y * y; }
15586               if (l < distanceMin2) { l = Math.sqrt(distanceMin2 * l); }
15587             }
15588
15589             do { if (quad.data !== node) {
15590               w = strengths[quad.data.index] * alpha / l;
15591               node.vx += x * w;
15592               node.vy += y * w;
15593             } } while (quad = quad.next);
15594           }
15595
15596           force.initialize = function(_) {
15597             nodes = _;
15598             initialize();
15599           };
15600
15601           force.strength = function(_) {
15602             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
15603           };
15604
15605           force.distanceMin = function(_) {
15606             return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
15607           };
15608
15609           force.distanceMax = function(_) {
15610             return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
15611           };
15612
15613           force.theta = function(_) {
15614             return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
15615           };
15616
15617           return force;
15618         }
15619
15620         function radial(radius, x, y) {
15621           var nodes,
15622               strength = constant$7(0.1),
15623               strengths,
15624               radiuses;
15625
15626           if (typeof radius !== "function") { radius = constant$7(+radius); }
15627           if (x == null) { x = 0; }
15628           if (y == null) { y = 0; }
15629
15630           function force(alpha) {
15631             for (var i = 0, n = nodes.length; i < n; ++i) {
15632               var node = nodes[i],
15633                   dx = node.x - x || 1e-6,
15634                   dy = node.y - y || 1e-6,
15635                   r = Math.sqrt(dx * dx + dy * dy),
15636                   k = (radiuses[i] - r) * strengths[i] * alpha / r;
15637               node.vx += dx * k;
15638               node.vy += dy * k;
15639             }
15640           }
15641
15642           function initialize() {
15643             if (!nodes) { return; }
15644             var i, n = nodes.length;
15645             strengths = new Array(n);
15646             radiuses = new Array(n);
15647             for (i = 0; i < n; ++i) {
15648               radiuses[i] = +radius(nodes[i], i, nodes);
15649               strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);
15650             }
15651           }
15652
15653           force.initialize = function(_) {
15654             nodes = _, initialize();
15655           };
15656
15657           force.strength = function(_) {
15658             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
15659           };
15660
15661           force.radius = function(_) {
15662             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
15663           };
15664
15665           force.x = function(_) {
15666             return arguments.length ? (x = +_, force) : x;
15667           };
15668
15669           force.y = function(_) {
15670             return arguments.length ? (y = +_, force) : y;
15671           };
15672
15673           return force;
15674         }
15675
15676         function x$2(x) {
15677           var strength = constant$7(0.1),
15678               nodes,
15679               strengths,
15680               xz;
15681
15682           if (typeof x !== "function") { x = constant$7(x == null ? 0 : +x); }
15683
15684           function force(alpha) {
15685             for (var i = 0, n = nodes.length, node; i < n; ++i) {
15686               node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
15687             }
15688           }
15689
15690           function initialize() {
15691             if (!nodes) { return; }
15692             var i, n = nodes.length;
15693             strengths = new Array(n);
15694             xz = new Array(n);
15695             for (i = 0; i < n; ++i) {
15696               strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
15697             }
15698           }
15699
15700           force.initialize = function(_) {
15701             nodes = _;
15702             initialize();
15703           };
15704
15705           force.strength = function(_) {
15706             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
15707           };
15708
15709           force.x = function(_) {
15710             return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
15711           };
15712
15713           return force;
15714         }
15715
15716         function y$2(y) {
15717           var strength = constant$7(0.1),
15718               nodes,
15719               strengths,
15720               yz;
15721
15722           if (typeof y !== "function") { y = constant$7(y == null ? 0 : +y); }
15723
15724           function force(alpha) {
15725             for (var i = 0, n = nodes.length, node; i < n; ++i) {
15726               node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
15727             }
15728           }
15729
15730           function initialize() {
15731             if (!nodes) { return; }
15732             var i, n = nodes.length;
15733             strengths = new Array(n);
15734             yz = new Array(n);
15735             for (i = 0; i < n; ++i) {
15736               strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
15737             }
15738           }
15739
15740           force.initialize = function(_) {
15741             nodes = _;
15742             initialize();
15743           };
15744
15745           force.strength = function(_) {
15746             return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
15747           };
15748
15749           force.y = function(_) {
15750             return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
15751           };
15752
15753           return force;
15754         }
15755
15756         // Computes the decimal coefficient and exponent of the specified number x with
15757         // significant digits p, where x is positive and p is in [1, 21] or undefined.
15758         // For example, formatDecimal(1.23) returns ["123", 0].
15759         function formatDecimal(x, p) {
15760           if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) { return null; } // NaN, ±Infinity
15761           var i, coefficient = x.slice(0, i);
15762
15763           // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
15764           // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
15765           return [
15766             coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
15767             +x.slice(i + 1)
15768           ];
15769         }
15770
15771         function exponent$1(x) {
15772           return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
15773         }
15774
15775         function formatGroup(grouping, thousands) {
15776           return function(value, width) {
15777             var i = value.length,
15778                 t = [],
15779                 j = 0,
15780                 g = grouping[0],
15781                 length = 0;
15782
15783             while (i > 0 && g > 0) {
15784               if (length + g + 1 > width) { g = Math.max(1, width - length); }
15785               t.push(value.substring(i -= g, i + g));
15786               if ((length += g + 1) > width) { break; }
15787               g = grouping[j = (j + 1) % grouping.length];
15788             }
15789
15790             return t.reverse().join(thousands);
15791           };
15792         }
15793
15794         function formatNumerals(numerals) {
15795           return function(value) {
15796             return value.replace(/[0-9]/g, function(i) {
15797               return numerals[+i];
15798             });
15799           };
15800         }
15801
15802         // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
15803         var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
15804
15805         function formatSpecifier(specifier) {
15806           if (!(match = re.exec(specifier))) { throw new Error("invalid format: " + specifier); }
15807           var match;
15808           return new FormatSpecifier({
15809             fill: match[1],
15810             align: match[2],
15811             sign: match[3],
15812             symbol: match[4],
15813             zero: match[5],
15814             width: match[6],
15815             comma: match[7],
15816             precision: match[8] && match[8].slice(1),
15817             trim: match[9],
15818             type: match[10]
15819           });
15820         }
15821
15822         formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
15823
15824         function FormatSpecifier(specifier) {
15825           this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
15826           this.align = specifier.align === undefined ? ">" : specifier.align + "";
15827           this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
15828           this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
15829           this.zero = !!specifier.zero;
15830           this.width = specifier.width === undefined ? undefined : +specifier.width;
15831           this.comma = !!specifier.comma;
15832           this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
15833           this.trim = !!specifier.trim;
15834           this.type = specifier.type === undefined ? "" : specifier.type + "";
15835         }
15836
15837         FormatSpecifier.prototype.toString = function() {
15838           return this.fill
15839               + this.align
15840               + this.sign
15841               + this.symbol
15842               + (this.zero ? "0" : "")
15843               + (this.width === undefined ? "" : Math.max(1, this.width | 0))
15844               + (this.comma ? "," : "")
15845               + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
15846               + (this.trim ? "~" : "")
15847               + this.type;
15848         };
15849
15850         // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
15851         function formatTrim(s) {
15852           out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
15853             switch (s[i]) {
15854               case ".": i0 = i1 = i; break;
15855               case "0": if (i0 === 0) { i0 = i; } i1 = i; break;
15856               default: if (!+s[i]) { break out; } if (i0 > 0) { i0 = 0; } break;
15857             }
15858           }
15859           return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
15860         }
15861
15862         var prefixExponent;
15863
15864         function formatPrefixAuto(x, p) {
15865           var d = formatDecimal(x, p);
15866           if (!d) { return x + ""; }
15867           var coefficient = d[0],
15868               exponent = d[1],
15869               i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
15870               n = coefficient.length;
15871           return i === n ? coefficient
15872               : i > n ? coefficient + new Array(i - n + 1).join("0")
15873               : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
15874               : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
15875         }
15876
15877         function formatRounded(x, p) {
15878           var d = formatDecimal(x, p);
15879           if (!d) { return x + ""; }
15880           var coefficient = d[0],
15881               exponent = d[1];
15882           return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
15883               : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
15884               : coefficient + new Array(exponent - coefficient.length + 2).join("0");
15885         }
15886
15887         var formatTypes = {
15888           "%": function(x, p) { return (x * 100).toFixed(p); },
15889           "b": function(x) { return Math.round(x).toString(2); },
15890           "c": function(x) { return x + ""; },
15891           "d": function(x) { return Math.round(x).toString(10); },
15892           "e": function(x, p) { return x.toExponential(p); },
15893           "f": function(x, p) { return x.toFixed(p); },
15894           "g": function(x, p) { return x.toPrecision(p); },
15895           "o": function(x) { return Math.round(x).toString(8); },
15896           "p": function(x, p) { return formatRounded(x * 100, p); },
15897           "r": formatRounded,
15898           "s": formatPrefixAuto,
15899           "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
15900           "x": function(x) { return Math.round(x).toString(16); }
15901         };
15902
15903         function identity$3(x) {
15904           return x;
15905         }
15906
15907         var map$4 = Array.prototype.map,
15908             prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
15909
15910         function formatLocale(locale) {
15911           var group = locale.grouping === undefined || locale.thousands === undefined ? identity$3 : formatGroup(map$4.call(locale.grouping, Number), locale.thousands + ""),
15912               currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
15913               currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
15914               decimal = locale.decimal === undefined ? "." : locale.decimal + "",
15915               numerals = locale.numerals === undefined ? identity$3 : formatNumerals(map$4.call(locale.numerals, String)),
15916               percent = locale.percent === undefined ? "%" : locale.percent + "",
15917               minus = locale.minus === undefined ? "-" : locale.minus + "",
15918               nan = locale.nan === undefined ? "NaN" : locale.nan + "";
15919
15920           function newFormat(specifier) {
15921             specifier = formatSpecifier(specifier);
15922
15923             var fill = specifier.fill,
15924                 align = specifier.align,
15925                 sign = specifier.sign,
15926                 symbol = specifier.symbol,
15927                 zero = specifier.zero,
15928                 width = specifier.width,
15929                 comma = specifier.comma,
15930                 precision = specifier.precision,
15931                 trim = specifier.trim,
15932                 type = specifier.type;
15933
15934             // The "n" type is an alias for ",g".
15935             if (type === "n") { comma = true, type = "g"; }
15936
15937             // The "" type, and any invalid type, is an alias for ".12~g".
15938             else if (!formatTypes[type]) { precision === undefined && (precision = 12), trim = true, type = "g"; }
15939
15940             // If zero fill is specified, padding goes after sign and before digits.
15941             if (zero || (fill === "0" && align === "=")) { zero = true, fill = "0", align = "="; }
15942
15943             // Compute the prefix and suffix.
15944             // For SI-prefix, the suffix is lazily computed.
15945             var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
15946                 suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
15947
15948             // What format function should we use?
15949             // Is this an integer type?
15950             // Can this type generate exponential notation?
15951             var formatType = formatTypes[type],
15952                 maybeSuffix = /[defgprs%]/.test(type);
15953
15954             // Set the default precision if not specified,
15955             // or clamp the specified precision to the supported range.
15956             // For significant precision, it must be in [1, 21].
15957             // For fixed precision, it must be in [0, 20].
15958             precision = precision === undefined ? 6
15959                 : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
15960                 : Math.max(0, Math.min(20, precision));
15961
15962             function format(value) {
15963               var valuePrefix = prefix,
15964                   valueSuffix = suffix,
15965                   i, n, c;
15966
15967               if (type === "c") {
15968                 valueSuffix = formatType(value) + valueSuffix;
15969                 value = "";
15970               } else {
15971                 value = +value;
15972
15973                 // Perform the initial formatting.
15974                 var valueNegative = value < 0;
15975                 value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
15976
15977                 // Trim insignificant zeros.
15978                 if (trim) { value = formatTrim(value); }
15979
15980                 // If a negative value rounds to zero during formatting, treat as positive.
15981                 if (valueNegative && +value === 0) { valueNegative = false; }
15982
15983                 // Compute the prefix and suffix.
15984                 valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
15985
15986                 valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
15987
15988                 // Break the formatted value into the integer “value” part that can be
15989                 // grouped, and fractional or exponential “suffix” part that is not.
15990                 if (maybeSuffix) {
15991                   i = -1, n = value.length;
15992                   while (++i < n) {
15993                     if (c = value.charCodeAt(i), 48 > c || c > 57) {
15994                       valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
15995                       value = value.slice(0, i);
15996                       break;
15997                     }
15998                   }
15999                 }
16000               }
16001
16002               // If the fill character is not "0", grouping is applied before padding.
16003               if (comma && !zero) { value = group(value, Infinity); }
16004
16005               // Compute the padding.
16006               var length = valuePrefix.length + value.length + valueSuffix.length,
16007                   padding = length < width ? new Array(width - length + 1).join(fill) : "";
16008
16009               // If the fill character is "0", grouping is applied after padding.
16010               if (comma && zero) { value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; }
16011
16012               // Reconstruct the final output based on the desired alignment.
16013               switch (align) {
16014                 case "<": value = valuePrefix + value + valueSuffix + padding; break;
16015                 case "=": value = valuePrefix + padding + value + valueSuffix; break;
16016                 case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
16017                 default: value = padding + valuePrefix + value + valueSuffix; break;
16018               }
16019
16020               return numerals(value);
16021             }
16022
16023             format.toString = function() {
16024               return specifier + "";
16025             };
16026
16027             return format;
16028           }
16029
16030           function formatPrefix(specifier, value) {
16031             var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
16032                 e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
16033                 k = Math.pow(10, -e),
16034                 prefix = prefixes[8 + e / 3];
16035             return function(value) {
16036               return f(k * value) + prefix;
16037             };
16038           }
16039
16040           return {
16041             format: newFormat,
16042             formatPrefix: formatPrefix
16043           };
16044         }
16045
16046         var locale;
16047         var format;
16048         var formatPrefix;
16049
16050         defaultLocale({
16051           decimal: ".",
16052           thousands: ",",
16053           grouping: [3],
16054           currency: ["$", ""],
16055           minus: "-"
16056         });
16057
16058         function defaultLocale(definition) {
16059           locale = formatLocale(definition);
16060           format = locale.format;
16061           formatPrefix = locale.formatPrefix;
16062           return locale;
16063         }
16064
16065         function precisionFixed(step) {
16066           return Math.max(0, -exponent$1(Math.abs(step)));
16067         }
16068
16069         function precisionPrefix(step, value) {
16070           return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
16071         }
16072
16073         function precisionRound(step, max) {
16074           step = Math.abs(step), max = Math.abs(max) - step;
16075           return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
16076         }
16077
16078         // Adds floating point numbers with twice the normal precision.
16079         // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
16080         // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
16081         // 305–363 (1997).
16082         // Code adapted from GeographicLib by Charles F. F. Karney,
16083         // http://geographiclib.sourceforge.net/
16084
16085         function adder() {
16086           return new Adder;
16087         }
16088
16089         function Adder() {
16090           this.reset();
16091         }
16092
16093         Adder.prototype = {
16094           constructor: Adder,
16095           reset: function() {
16096             this.s = // rounded value
16097             this.t = 0; // exact error
16098           },
16099           add: function(y) {
16100             add$1(temp, y, this.t);
16101             add$1(this, temp.s, this.s);
16102             if (this.s) { this.t += temp.t; }
16103             else { this.s = temp.t; }
16104           },
16105           valueOf: function() {
16106             return this.s;
16107           }
16108         };
16109
16110         var temp = new Adder;
16111
16112         function add$1(adder, a, b) {
16113           var x = adder.s = a + b,
16114               bv = x - a,
16115               av = x - bv;
16116           adder.t = (a - av) + (b - bv);
16117         }
16118
16119         var epsilon$2 = 1e-6;
16120         var epsilon2$1 = 1e-12;
16121         var pi$3 = Math.PI;
16122         var halfPi$2 = pi$3 / 2;
16123         var quarterPi = pi$3 / 4;
16124         var tau$3 = pi$3 * 2;
16125
16126         var degrees$1 = 180 / pi$3;
16127         var radians = pi$3 / 180;
16128
16129         var abs$2 = Math.abs;
16130         var atan = Math.atan;
16131         var atan2 = Math.atan2;
16132         var cos$1 = Math.cos;
16133         var ceil = Math.ceil;
16134         var exp = Math.exp;
16135         var log = Math.log;
16136         var pow = Math.pow;
16137         var sin$1 = Math.sin;
16138         var sign$2 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
16139         var sqrt = Math.sqrt;
16140         var tan = Math.tan;
16141
16142         function acos(x) {
16143           return x > 1 ? 0 : x < -1 ? pi$3 : Math.acos(x);
16144         }
16145
16146         function asin(x) {
16147           return x > 1 ? halfPi$2 : x < -1 ? -halfPi$2 : Math.asin(x);
16148         }
16149
16150         function haversin(x) {
16151           return (x = sin$1(x / 2)) * x;
16152         }
16153
16154         function noop$4() {}
16155
16156         function streamGeometry(geometry, stream) {
16157           if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
16158             streamGeometryType[geometry.type](geometry, stream);
16159           }
16160         }
16161
16162         var streamObjectType = {
16163           Feature: function(object, stream) {
16164             streamGeometry(object.geometry, stream);
16165           },
16166           FeatureCollection: function(object, stream) {
16167             var features = object.features, i = -1, n = features.length;
16168             while (++i < n) { streamGeometry(features[i].geometry, stream); }
16169           }
16170         };
16171
16172         var streamGeometryType = {
16173           Sphere: function(object, stream) {
16174             stream.sphere();
16175           },
16176           Point: function(object, stream) {
16177             object = object.coordinates;
16178             stream.point(object[0], object[1], object[2]);
16179           },
16180           MultiPoint: function(object, stream) {
16181             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16182             while (++i < n) { object = coordinates[i], stream.point(object[0], object[1], object[2]); }
16183           },
16184           LineString: function(object, stream) {
16185             streamLine(object.coordinates, stream, 0);
16186           },
16187           MultiLineString: function(object, stream) {
16188             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16189             while (++i < n) { streamLine(coordinates[i], stream, 0); }
16190           },
16191           Polygon: function(object, stream) {
16192             streamPolygon(object.coordinates, stream);
16193           },
16194           MultiPolygon: function(object, stream) {
16195             var coordinates = object.coordinates, i = -1, n = coordinates.length;
16196             while (++i < n) { streamPolygon(coordinates[i], stream); }
16197           },
16198           GeometryCollection: function(object, stream) {
16199             var geometries = object.geometries, i = -1, n = geometries.length;
16200             while (++i < n) { streamGeometry(geometries[i], stream); }
16201           }
16202         };
16203
16204         function streamLine(coordinates, stream, closed) {
16205           var i = -1, n = coordinates.length - closed, coordinate;
16206           stream.lineStart();
16207           while (++i < n) { coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); }
16208           stream.lineEnd();
16209         }
16210
16211         function streamPolygon(coordinates, stream) {
16212           var i = -1, n = coordinates.length;
16213           stream.polygonStart();
16214           while (++i < n) { streamLine(coordinates[i], stream, 1); }
16215           stream.polygonEnd();
16216         }
16217
16218         function d3_geoStream(object, stream) {
16219           if (object && streamObjectType.hasOwnProperty(object.type)) {
16220             streamObjectType[object.type](object, stream);
16221           } else {
16222             streamGeometry(object, stream);
16223           }
16224         }
16225
16226         var areaRingSum = adder();
16227
16228         var areaSum = adder(),
16229             lambda00,
16230             phi00,
16231             lambda0,
16232             cosPhi0,
16233             sinPhi0;
16234
16235         var areaStream = {
16236           point: noop$4,
16237           lineStart: noop$4,
16238           lineEnd: noop$4,
16239           polygonStart: function() {
16240             areaRingSum.reset();
16241             areaStream.lineStart = areaRingStart;
16242             areaStream.lineEnd = areaRingEnd;
16243           },
16244           polygonEnd: function() {
16245             var areaRing = +areaRingSum;
16246             areaSum.add(areaRing < 0 ? tau$3 + areaRing : areaRing);
16247             this.lineStart = this.lineEnd = this.point = noop$4;
16248           },
16249           sphere: function() {
16250             areaSum.add(tau$3);
16251           }
16252         };
16253
16254         function areaRingStart() {
16255           areaStream.point = areaPointFirst;
16256         }
16257
16258         function areaRingEnd() {
16259           areaPoint(lambda00, phi00);
16260         }
16261
16262         function areaPointFirst(lambda, phi) {
16263           areaStream.point = areaPoint;
16264           lambda00 = lambda, phi00 = phi;
16265           lambda *= radians, phi *= radians;
16266           lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
16267         }
16268
16269         function areaPoint(lambda, phi) {
16270           lambda *= radians, phi *= radians;
16271           phi = phi / 2 + quarterPi; // half the angular distance from south pole
16272
16273           // Spherical excess E for a spherical triangle with vertices: south pole,
16274           // previous point, current point.  Uses a formula derived from Cagnoli’s
16275           // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
16276           var dLambda = lambda - lambda0,
16277               sdLambda = dLambda >= 0 ? 1 : -1,
16278               adLambda = sdLambda * dLambda,
16279               cosPhi = cos$1(phi),
16280               sinPhi = sin$1(phi),
16281               k = sinPhi0 * sinPhi,
16282               u = cosPhi0 * cosPhi + k * cos$1(adLambda),
16283               v = k * sdLambda * sin$1(adLambda);
16284           areaRingSum.add(atan2(v, u));
16285
16286           // Advance the previous points.
16287           lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
16288         }
16289
16290         function d3_geoArea(object) {
16291           areaSum.reset();
16292           d3_geoStream(object, areaStream);
16293           return areaSum * 2;
16294         }
16295
16296         function spherical(cartesian) {
16297           return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];
16298         }
16299
16300         function cartesian(spherical) {
16301           var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
16302           return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
16303         }
16304
16305         function cartesianDot(a, b) {
16306           return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
16307         }
16308
16309         function cartesianCross(a, b) {
16310           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]];
16311         }
16312
16313         // TODO return a
16314         function cartesianAddInPlace(a, b) {
16315           a[0] += b[0], a[1] += b[1], a[2] += b[2];
16316         }
16317
16318         function cartesianScale(vector, k) {
16319           return [vector[0] * k, vector[1] * k, vector[2] * k];
16320         }
16321
16322         // TODO return d
16323         function cartesianNormalizeInPlace(d) {
16324           var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
16325           d[0] /= l, d[1] /= l, d[2] /= l;
16326         }
16327
16328         var lambda0$1, phi0, lambda1, phi1, // bounds
16329             lambda2, // previous lambda-coordinate
16330             lambda00$1, phi00$1, // first point
16331             p0, // previous 3D point
16332             deltaSum = adder(),
16333             ranges,
16334             range;
16335
16336         var boundsStream = {
16337           point: boundsPoint,
16338           lineStart: boundsLineStart,
16339           lineEnd: boundsLineEnd,
16340           polygonStart: function() {
16341             boundsStream.point = boundsRingPoint;
16342             boundsStream.lineStart = boundsRingStart;
16343             boundsStream.lineEnd = boundsRingEnd;
16344             deltaSum.reset();
16345             areaStream.polygonStart();
16346           },
16347           polygonEnd: function() {
16348             areaStream.polygonEnd();
16349             boundsStream.point = boundsPoint;
16350             boundsStream.lineStart = boundsLineStart;
16351             boundsStream.lineEnd = boundsLineEnd;
16352             if (areaRingSum < 0) { lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); }
16353             else if (deltaSum > epsilon$2) { phi1 = 90; }
16354             else if (deltaSum < -epsilon$2) { phi0 = -90; }
16355             range[0] = lambda0$1, range[1] = lambda1;
16356           },
16357           sphere: function() {
16358             lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
16359           }
16360         };
16361
16362         function boundsPoint(lambda, phi) {
16363           ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
16364           if (phi < phi0) { phi0 = phi; }
16365           if (phi > phi1) { phi1 = phi; }
16366         }
16367
16368         function linePoint(lambda, phi) {
16369           var p = cartesian([lambda * radians, phi * radians]);
16370           if (p0) {
16371             var normal = cartesianCross(p0, p),
16372                 equatorial = [normal[1], -normal[0], 0],
16373                 inflection = cartesianCross(equatorial, normal);
16374             cartesianNormalizeInPlace(inflection);
16375             inflection = spherical(inflection);
16376             var delta = lambda - lambda2,
16377                 sign = delta > 0 ? 1 : -1,
16378                 lambdai = inflection[0] * degrees$1 * sign,
16379                 phii,
16380                 antimeridian = abs$2(delta) > 180;
16381             if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
16382               phii = inflection[1] * degrees$1;
16383               if (phii > phi1) { phi1 = phii; }
16384             } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {
16385               phii = -inflection[1] * degrees$1;
16386               if (phii < phi0) { phi0 = phii; }
16387             } else {
16388               if (phi < phi0) { phi0 = phi; }
16389               if (phi > phi1) { phi1 = phi; }
16390             }
16391             if (antimeridian) {
16392               if (lambda < lambda2) {
16393                 if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) { lambda1 = lambda; }
16394               } else {
16395                 if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) { lambda0$1 = lambda; }
16396               }
16397             } else {
16398               if (lambda1 >= lambda0$1) {
16399                 if (lambda < lambda0$1) { lambda0$1 = lambda; }
16400                 if (lambda > lambda1) { lambda1 = lambda; }
16401               } else {
16402                 if (lambda > lambda2) {
16403                   if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) { lambda1 = lambda; }
16404                 } else {
16405                   if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) { lambda0$1 = lambda; }
16406                 }
16407               }
16408             }
16409           } else {
16410             ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);
16411           }
16412           if (phi < phi0) { phi0 = phi; }
16413           if (phi > phi1) { phi1 = phi; }
16414           p0 = p, lambda2 = lambda;
16415         }
16416
16417         function boundsLineStart() {
16418           boundsStream.point = linePoint;
16419         }
16420
16421         function boundsLineEnd() {
16422           range[0] = lambda0$1, range[1] = lambda1;
16423           boundsStream.point = boundsPoint;
16424           p0 = null;
16425         }
16426
16427         function boundsRingPoint(lambda, phi) {
16428           if (p0) {
16429             var delta = lambda - lambda2;
16430             deltaSum.add(abs$2(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
16431           } else {
16432             lambda00$1 = lambda, phi00$1 = phi;
16433           }
16434           areaStream.point(lambda, phi);
16435           linePoint(lambda, phi);
16436         }
16437
16438         function boundsRingStart() {
16439           areaStream.lineStart();
16440         }
16441
16442         function boundsRingEnd() {
16443           boundsRingPoint(lambda00$1, phi00$1);
16444           areaStream.lineEnd();
16445           if (abs$2(deltaSum) > epsilon$2) { lambda0$1 = -(lambda1 = 180); }
16446           range[0] = lambda0$1, range[1] = lambda1;
16447           p0 = null;
16448         }
16449
16450         // Finds the left-right distance between two longitudes.
16451         // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
16452         // the distance between ±180° to be 360°.
16453         function angle(lambda0, lambda1) {
16454           return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
16455         }
16456
16457         function rangeCompare(a, b) {
16458           return a[0] - b[0];
16459         }
16460
16461         function rangeContains(range, x) {
16462           return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
16463         }
16464
16465         function d3_geoBounds(feature) {
16466           var i, n, a, b, merged, deltaMax, delta;
16467
16468           phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
16469           ranges = [];
16470           d3_geoStream(feature, boundsStream);
16471
16472           // First, sort ranges by their minimum longitudes.
16473           if (n = ranges.length) {
16474             ranges.sort(rangeCompare);
16475
16476             // Then, merge any ranges that overlap.
16477             for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
16478               b = ranges[i];
16479               if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
16480                 if (angle(a[0], b[1]) > angle(a[0], a[1])) { a[1] = b[1]; }
16481                 if (angle(b[0], a[1]) > angle(a[0], a[1])) { a[0] = b[0]; }
16482               } else {
16483                 merged.push(a = b);
16484               }
16485             }
16486
16487             // Finally, find the largest gap between the merged ranges.
16488             // The final bounding box will be the inverse of this gap.
16489             for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
16490               b = merged[i];
16491               if ((delta = angle(a[1], b[0])) > deltaMax) { deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; }
16492             }
16493           }
16494
16495           ranges = range = null;
16496
16497           return lambda0$1 === Infinity || phi0 === Infinity
16498               ? [[NaN, NaN], [NaN, NaN]]
16499               : [[lambda0$1, phi0], [lambda1, phi1]];
16500         }
16501
16502         var W0, W1,
16503             X0, Y0, Z0,
16504             X1, Y1, Z1,
16505             X2, Y2, Z2,
16506             lambda00$2, phi00$2, // first point
16507             x0, y0, z0; // previous point
16508
16509         var centroidStream = {
16510           sphere: noop$4,
16511           point: centroidPoint,
16512           lineStart: centroidLineStart,
16513           lineEnd: centroidLineEnd,
16514           polygonStart: function() {
16515             centroidStream.lineStart = centroidRingStart;
16516             centroidStream.lineEnd = centroidRingEnd;
16517           },
16518           polygonEnd: function() {
16519             centroidStream.lineStart = centroidLineStart;
16520             centroidStream.lineEnd = centroidLineEnd;
16521           }
16522         };
16523
16524         // Arithmetic mean of Cartesian vectors.
16525         function centroidPoint(lambda, phi) {
16526           lambda *= radians, phi *= radians;
16527           var cosPhi = cos$1(phi);
16528           centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
16529         }
16530
16531         function centroidPointCartesian(x, y, z) {
16532           ++W0;
16533           X0 += (x - X0) / W0;
16534           Y0 += (y - Y0) / W0;
16535           Z0 += (z - Z0) / W0;
16536         }
16537
16538         function centroidLineStart() {
16539           centroidStream.point = centroidLinePointFirst;
16540         }
16541
16542         function centroidLinePointFirst(lambda, phi) {
16543           lambda *= radians, phi *= radians;
16544           var cosPhi = cos$1(phi);
16545           x0 = cosPhi * cos$1(lambda);
16546           y0 = cosPhi * sin$1(lambda);
16547           z0 = sin$1(phi);
16548           centroidStream.point = centroidLinePoint;
16549           centroidPointCartesian(x0, y0, z0);
16550         }
16551
16552         function centroidLinePoint(lambda, phi) {
16553           lambda *= radians, phi *= radians;
16554           var cosPhi = cos$1(phi),
16555               x = cosPhi * cos$1(lambda),
16556               y = cosPhi * sin$1(lambda),
16557               z = sin$1(phi),
16558               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);
16559           W1 += w;
16560           X1 += w * (x0 + (x0 = x));
16561           Y1 += w * (y0 + (y0 = y));
16562           Z1 += w * (z0 + (z0 = z));
16563           centroidPointCartesian(x0, y0, z0);
16564         }
16565
16566         function centroidLineEnd() {
16567           centroidStream.point = centroidPoint;
16568         }
16569
16570         // See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
16571         // J. Applied Mechanics 42, 239 (1975).
16572         function centroidRingStart() {
16573           centroidStream.point = centroidRingPointFirst;
16574         }
16575
16576         function centroidRingEnd() {
16577           centroidRingPoint(lambda00$2, phi00$2);
16578           centroidStream.point = centroidPoint;
16579         }
16580
16581         function centroidRingPointFirst(lambda, phi) {
16582           lambda00$2 = lambda, phi00$2 = phi;
16583           lambda *= radians, phi *= radians;
16584           centroidStream.point = centroidRingPoint;
16585           var cosPhi = cos$1(phi);
16586           x0 = cosPhi * cos$1(lambda);
16587           y0 = cosPhi * sin$1(lambda);
16588           z0 = sin$1(phi);
16589           centroidPointCartesian(x0, y0, z0);
16590         }
16591
16592         function centroidRingPoint(lambda, phi) {
16593           lambda *= radians, phi *= radians;
16594           var cosPhi = cos$1(phi),
16595               x = cosPhi * cos$1(lambda),
16596               y = cosPhi * sin$1(lambda),
16597               z = sin$1(phi),
16598               cx = y0 * z - z0 * y,
16599               cy = z0 * x - x0 * z,
16600               cz = x0 * y - y0 * x,
16601               m = sqrt(cx * cx + cy * cy + cz * cz),
16602               w = asin(m), // line weight = angle
16603               v = m && -w / m; // area weight multiplier
16604           X2 += v * cx;
16605           Y2 += v * cy;
16606           Z2 += v * cz;
16607           W1 += w;
16608           X1 += w * (x0 + (x0 = x));
16609           Y1 += w * (y0 + (y0 = y));
16610           Z1 += w * (z0 + (z0 = z));
16611           centroidPointCartesian(x0, y0, z0);
16612         }
16613
16614         function d3_geoCentroid(object) {
16615           W0 = W1 =
16616           X0 = Y0 = Z0 =
16617           X1 = Y1 = Z1 =
16618           X2 = Y2 = Z2 = 0;
16619           d3_geoStream(object, centroidStream);
16620
16621           var x = X2,
16622               y = Y2,
16623               z = Z2,
16624               m = x * x + y * y + z * z;
16625
16626           // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
16627           if (m < epsilon2$1) {
16628             x = X1, y = Y1, z = Z1;
16629             // If the feature has zero length, fall back to arithmetic mean of point vectors.
16630             if (W1 < epsilon$2) { x = X0, y = Y0, z = Z0; }
16631             m = x * x + y * y + z * z;
16632             // If the feature still has an undefined ccentroid, then return.
16633             if (m < epsilon2$1) { return [NaN, NaN]; }
16634           }
16635
16636           return [atan2(y, x) * degrees$1, asin(z / sqrt(m)) * degrees$1];
16637         }
16638
16639         function constant$8(x) {
16640           return function() {
16641             return x;
16642           };
16643         }
16644
16645         function compose(a, b) {
16646
16647           function compose(x, y) {
16648             return x = a(x, y), b(x[0], x[1]);
16649           }
16650
16651           if (a.invert && b.invert) { compose.invert = function(x, y) {
16652             return x = b.invert(x, y), x && a.invert(x[0], x[1]);
16653           }; }
16654
16655           return compose;
16656         }
16657
16658         function rotationIdentity(lambda, phi) {
16659           return [abs$2(lambda) > pi$3 ? lambda + Math.round(-lambda / tau$3) * tau$3 : lambda, phi];
16660         }
16661
16662         rotationIdentity.invert = rotationIdentity;
16663
16664         function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
16665           return (deltaLambda %= tau$3) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
16666             : rotationLambda(deltaLambda))
16667             : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
16668             : rotationIdentity);
16669         }
16670
16671         function forwardRotationLambda(deltaLambda) {
16672           return function(lambda, phi) {
16673             return lambda += deltaLambda, [lambda > pi$3 ? lambda - tau$3 : lambda < -pi$3 ? lambda + tau$3 : lambda, phi];
16674           };
16675         }
16676
16677         function rotationLambda(deltaLambda) {
16678           var rotation = forwardRotationLambda(deltaLambda);
16679           rotation.invert = forwardRotationLambda(-deltaLambda);
16680           return rotation;
16681         }
16682
16683         function rotationPhiGamma(deltaPhi, deltaGamma) {
16684           var cosDeltaPhi = cos$1(deltaPhi),
16685               sinDeltaPhi = sin$1(deltaPhi),
16686               cosDeltaGamma = cos$1(deltaGamma),
16687               sinDeltaGamma = sin$1(deltaGamma);
16688
16689           function rotation(lambda, phi) {
16690             var cosPhi = cos$1(phi),
16691                 x = cos$1(lambda) * cosPhi,
16692                 y = sin$1(lambda) * cosPhi,
16693                 z = sin$1(phi),
16694                 k = z * cosDeltaPhi + x * sinDeltaPhi;
16695             return [
16696               atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
16697               asin(k * cosDeltaGamma + y * sinDeltaGamma)
16698             ];
16699           }
16700
16701           rotation.invert = function(lambda, phi) {
16702             var cosPhi = cos$1(phi),
16703                 x = cos$1(lambda) * cosPhi,
16704                 y = sin$1(lambda) * cosPhi,
16705                 z = sin$1(phi),
16706                 k = z * cosDeltaGamma - y * sinDeltaGamma;
16707             return [
16708               atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
16709               asin(k * cosDeltaPhi - x * sinDeltaPhi)
16710             ];
16711           };
16712
16713           return rotation;
16714         }
16715
16716         function rotation(rotate) {
16717           rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
16718
16719           function forward(coordinates) {
16720             coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
16721             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
16722           }
16723
16724           forward.invert = function(coordinates) {
16725             coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
16726             return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
16727           };
16728
16729           return forward;
16730         }
16731
16732         // Generates a circle centered at [0°, 0°], with a given radius and precision.
16733         function circleStream(stream, radius, delta, direction, t0, t1) {
16734           if (!delta) { return; }
16735           var cosRadius = cos$1(radius),
16736               sinRadius = sin$1(radius),
16737               step = direction * delta;
16738           if (t0 == null) {
16739             t0 = radius + direction * tau$3;
16740             t1 = radius - step / 2;
16741           } else {
16742             t0 = circleRadius(cosRadius, t0);
16743             t1 = circleRadius(cosRadius, t1);
16744             if (direction > 0 ? t0 < t1 : t0 > t1) { t0 += direction * tau$3; }
16745           }
16746           for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
16747             point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
16748             stream.point(point[0], point[1]);
16749           }
16750         }
16751
16752         // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
16753         function circleRadius(cosRadius, point) {
16754           point = cartesian(point), point[0] -= cosRadius;
16755           cartesianNormalizeInPlace(point);
16756           var radius = acos(-point[1]);
16757           return ((-point[2] < 0 ? -radius : radius) + tau$3 - epsilon$2) % tau$3;
16758         }
16759
16760         function circle() {
16761           var center = constant$8([0, 0]),
16762               radius = constant$8(90),
16763               precision = constant$8(6),
16764               ring,
16765               rotate,
16766               stream = {point: point};
16767
16768           function point(x, y) {
16769             ring.push(x = rotate(x, y));
16770             x[0] *= degrees$1, x[1] *= degrees$1;
16771           }
16772
16773           function circle() {
16774             var c = center.apply(this, arguments),
16775                 r = radius.apply(this, arguments) * radians,
16776                 p = precision.apply(this, arguments) * radians;
16777             ring = [];
16778             rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
16779             circleStream(stream, r, p, 1);
16780             c = {type: "Polygon", coordinates: [ring]};
16781             ring = rotate = null;
16782             return c;
16783           }
16784
16785           circle.center = function(_) {
16786             return arguments.length ? (center = typeof _ === "function" ? _ : constant$8([+_[0], +_[1]]), circle) : center;
16787           };
16788
16789           circle.radius = function(_) {
16790             return arguments.length ? (radius = typeof _ === "function" ? _ : constant$8(+_), circle) : radius;
16791           };
16792
16793           circle.precision = function(_) {
16794             return arguments.length ? (precision = typeof _ === "function" ? _ : constant$8(+_), circle) : precision;
16795           };
16796
16797           return circle;
16798         }
16799
16800         function clipBuffer() {
16801           var lines = [],
16802               line;
16803           return {
16804             point: function(x, y) {
16805               line.push([x, y]);
16806             },
16807             lineStart: function() {
16808               lines.push(line = []);
16809             },
16810             lineEnd: noop$4,
16811             rejoin: function() {
16812               if (lines.length > 1) { lines.push(lines.pop().concat(lines.shift())); }
16813             },
16814             result: function() {
16815               var result = lines;
16816               lines = [];
16817               line = null;
16818               return result;
16819             }
16820           };
16821         }
16822
16823         function pointEqual(a, b) {
16824           return abs$2(a[0] - b[0]) < epsilon$2 && abs$2(a[1] - b[1]) < epsilon$2;
16825         }
16826
16827         function Intersection(point, points, other, entry) {
16828           this.x = point;
16829           this.z = points;
16830           this.o = other; // another intersection
16831           this.e = entry; // is an entry?
16832           this.v = false; // visited
16833           this.n = this.p = null; // next & previous
16834         }
16835
16836         // A generalized polygon clipping algorithm: given a polygon that has been cut
16837         // into its visible line segments, and rejoins the segments by interpolating
16838         // along the clip edge.
16839         function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {
16840           var subject = [],
16841               clip = [],
16842               i,
16843               n;
16844
16845           segments.forEach(function(segment) {
16846             if ((n = segment.length - 1) <= 0) { return; }
16847             var n, p0 = segment[0], p1 = segment[n], x;
16848
16849             // If the first and last points of a segment are coincident, then treat as a
16850             // closed ring. TODO if all rings are closed, then the winding order of the
16851             // exterior ring should be checked.
16852             if (pointEqual(p0, p1)) {
16853               stream.lineStart();
16854               for (i = 0; i < n; ++i) { stream.point((p0 = segment[i])[0], p0[1]); }
16855               stream.lineEnd();
16856               return;
16857             }
16858
16859             subject.push(x = new Intersection(p0, segment, null, true));
16860             clip.push(x.o = new Intersection(p0, null, x, false));
16861             subject.push(x = new Intersection(p1, segment, null, false));
16862             clip.push(x.o = new Intersection(p1, null, x, true));
16863           });
16864
16865           if (!subject.length) { return; }
16866
16867           clip.sort(compareIntersection);
16868           link$1(subject);
16869           link$1(clip);
16870
16871           for (i = 0, n = clip.length; i < n; ++i) {
16872             clip[i].e = startInside = !startInside;
16873           }
16874
16875           var start = subject[0],
16876               points,
16877               point;
16878
16879           while (1) {
16880             // Find first unvisited intersection.
16881             var current = start,
16882                 isSubject = true;
16883             while (current.v) { if ((current = current.n) === start) { return; } }
16884             points = current.z;
16885             stream.lineStart();
16886             do {
16887               current.v = current.o.v = true;
16888               if (current.e) {
16889                 if (isSubject) {
16890                   for (i = 0, n = points.length; i < n; ++i) { stream.point((point = points[i])[0], point[1]); }
16891                 } else {
16892                   interpolate(current.x, current.n.x, 1, stream);
16893                 }
16894                 current = current.n;
16895               } else {
16896                 if (isSubject) {
16897                   points = current.p.z;
16898                   for (i = points.length - 1; i >= 0; --i) { stream.point((point = points[i])[0], point[1]); }
16899                 } else {
16900                   interpolate(current.x, current.p.x, -1, stream);
16901                 }
16902                 current = current.p;
16903               }
16904               current = current.o;
16905               points = current.z;
16906               isSubject = !isSubject;
16907             } while (!current.v);
16908             stream.lineEnd();
16909           }
16910         }
16911
16912         function link$1(array) {
16913           if (!(n = array.length)) { return; }
16914           var n,
16915               i = 0,
16916               a = array[0],
16917               b;
16918           while (++i < n) {
16919             a.n = b = array[i];
16920             b.p = a;
16921             a = b;
16922           }
16923           a.n = b = array[0];
16924           b.p = a;
16925         }
16926
16927         var sum$1 = adder();
16928
16929         function longitude(point) {
16930           if (abs$2(point[0]) <= pi$3)
16931             { return point[0]; }
16932           else
16933             { return sign$2(point[0]) * ((abs$2(point[0]) + pi$3) % tau$3 - pi$3); }
16934         }
16935
16936         function polygonContains(polygon, point) {
16937           var lambda = longitude(point),
16938               phi = point[1],
16939               sinPhi = sin$1(phi),
16940               normal = [sin$1(lambda), -cos$1(lambda), 0],
16941               angle = 0,
16942               winding = 0;
16943
16944           sum$1.reset();
16945
16946           if (sinPhi === 1) { phi = halfPi$2 + epsilon$2; }
16947           else if (sinPhi === -1) { phi = -halfPi$2 - epsilon$2; }
16948
16949           for (var i = 0, n = polygon.length; i < n; ++i) {
16950             if (!(m = (ring = polygon[i]).length)) { continue; }
16951             var ring,
16952                 m,
16953                 point0 = ring[m - 1],
16954                 lambda0 = longitude(point0),
16955                 phi0 = point0[1] / 2 + quarterPi,
16956                 sinPhi0 = sin$1(phi0),
16957                 cosPhi0 = cos$1(phi0);
16958
16959             for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
16960               var point1 = ring[j],
16961                   lambda1 = longitude(point1),
16962                   phi1 = point1[1] / 2 + quarterPi,
16963                   sinPhi1 = sin$1(phi1),
16964                   cosPhi1 = cos$1(phi1),
16965                   delta = lambda1 - lambda0,
16966                   sign = delta >= 0 ? 1 : -1,
16967                   absDelta = sign * delta,
16968                   antimeridian = absDelta > pi$3,
16969                   k = sinPhi0 * sinPhi1;
16970
16971               sum$1.add(atan2(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
16972               angle += antimeridian ? delta + sign * tau$3 : delta;
16973
16974               // Are the longitudes either side of the point’s meridian (lambda),
16975               // and are the latitudes smaller than the parallel (phi)?
16976               if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
16977                 var arc = cartesianCross(cartesian(point0), cartesian(point1));
16978                 cartesianNormalizeInPlace(arc);
16979                 var intersection = cartesianCross(normal, arc);
16980                 cartesianNormalizeInPlace(intersection);
16981                 var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);
16982                 if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
16983                   winding += antimeridian ^ delta >= 0 ? 1 : -1;
16984                 }
16985               }
16986             }
16987           }
16988
16989           // First, determine whether the South pole is inside or outside:
16990           //
16991           // It is inside if:
16992           // * the polygon winds around it in a clockwise direction.
16993           // * the polygon does not (cumulatively) wind around it, but has a negative
16994           //   (counter-clockwise) area.
16995           //
16996           // Second, count the (signed) number of times a segment crosses a lambda
16997           // from the point to the South pole.  If it is zero, then the point is the
16998           // same side as the South pole.
16999
17000           return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1);
17001         }
17002
17003         function clip(pointVisible, clipLine, interpolate, start) {
17004           return function(sink) {
17005             var line = clipLine(sink),
17006                 ringBuffer = clipBuffer(),
17007                 ringSink = clipLine(ringBuffer),
17008                 polygonStarted = false,
17009                 polygon,
17010                 segments,
17011                 ring;
17012
17013             var clip = {
17014               point: point,
17015               lineStart: lineStart,
17016               lineEnd: lineEnd,
17017               polygonStart: function() {
17018                 clip.point = pointRing;
17019                 clip.lineStart = ringStart;
17020                 clip.lineEnd = ringEnd;
17021                 segments = [];
17022                 polygon = [];
17023               },
17024               polygonEnd: function() {
17025                 clip.point = point;
17026                 clip.lineStart = lineStart;
17027                 clip.lineEnd = lineEnd;
17028                 segments = merge(segments);
17029                 var startInside = polygonContains(polygon, start);
17030                 if (segments.length) {
17031                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
17032                   clipRejoin(segments, compareIntersection, startInside, interpolate, sink);
17033                 } else if (startInside) {
17034                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
17035                   sink.lineStart();
17036                   interpolate(null, null, 1, sink);
17037                   sink.lineEnd();
17038                 }
17039                 if (polygonStarted) { sink.polygonEnd(), polygonStarted = false; }
17040                 segments = polygon = null;
17041               },
17042               sphere: function() {
17043                 sink.polygonStart();
17044                 sink.lineStart();
17045                 interpolate(null, null, 1, sink);
17046                 sink.lineEnd();
17047                 sink.polygonEnd();
17048               }
17049             };
17050
17051             function point(lambda, phi) {
17052               if (pointVisible(lambda, phi)) { sink.point(lambda, phi); }
17053             }
17054
17055             function pointLine(lambda, phi) {
17056               line.point(lambda, phi);
17057             }
17058
17059             function lineStart() {
17060               clip.point = pointLine;
17061               line.lineStart();
17062             }
17063
17064             function lineEnd() {
17065               clip.point = point;
17066               line.lineEnd();
17067             }
17068
17069             function pointRing(lambda, phi) {
17070               ring.push([lambda, phi]);
17071               ringSink.point(lambda, phi);
17072             }
17073
17074             function ringStart() {
17075               ringSink.lineStart();
17076               ring = [];
17077             }
17078
17079             function ringEnd() {
17080               pointRing(ring[0][0], ring[0][1]);
17081               ringSink.lineEnd();
17082
17083               var clean = ringSink.clean(),
17084                   ringSegments = ringBuffer.result(),
17085                   i, n = ringSegments.length, m,
17086                   segment,
17087                   point;
17088
17089               ring.pop();
17090               polygon.push(ring);
17091               ring = null;
17092
17093               if (!n) { return; }
17094
17095               // No intersections.
17096               if (clean & 1) {
17097                 segment = ringSegments[0];
17098                 if ((m = segment.length - 1) > 0) {
17099                   if (!polygonStarted) { sink.polygonStart(), polygonStarted = true; }
17100                   sink.lineStart();
17101                   for (i = 0; i < m; ++i) { sink.point((point = segment[i])[0], point[1]); }
17102                   sink.lineEnd();
17103                 }
17104                 return;
17105               }
17106
17107               // Rejoin connected segments.
17108               // TODO reuse ringBuffer.rejoin()?
17109               if (n > 1 && clean & 2) { ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); }
17110
17111               segments.push(ringSegments.filter(validSegment));
17112             }
17113
17114             return clip;
17115           };
17116         }
17117
17118         function validSegment(segment) {
17119           return segment.length > 1;
17120         }
17121
17122         // Intersections are sorted along the clip edge. For both antimeridian cutting
17123         // and circle clipping, the same comparison is used.
17124         function compareIntersection(a, b) {
17125           return ((a = a.x)[0] < 0 ? a[1] - halfPi$2 - epsilon$2 : halfPi$2 - a[1])
17126                - ((b = b.x)[0] < 0 ? b[1] - halfPi$2 - epsilon$2 : halfPi$2 - b[1]);
17127         }
17128
17129         var clipAntimeridian = clip(
17130           function() { return true; },
17131           clipAntimeridianLine,
17132           clipAntimeridianInterpolate,
17133           [-pi$3, -halfPi$2]
17134         );
17135
17136         // Takes a line and cuts into visible segments. Return values: 0 - there were
17137         // intersections or the line was empty; 1 - no intersections; 2 - there were
17138         // intersections, and the first and last segments should be rejoined.
17139         function clipAntimeridianLine(stream) {
17140           var lambda0 = NaN,
17141               phi0 = NaN,
17142               sign0 = NaN,
17143               clean; // no intersections
17144
17145           return {
17146             lineStart: function() {
17147               stream.lineStart();
17148               clean = 1;
17149             },
17150             point: function(lambda1, phi1) {
17151               var sign1 = lambda1 > 0 ? pi$3 : -pi$3,
17152                   delta = abs$2(lambda1 - lambda0);
17153               if (abs$2(delta - pi$3) < epsilon$2) { // line crosses a pole
17154                 stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$2 : -halfPi$2);
17155                 stream.point(sign0, phi0);
17156                 stream.lineEnd();
17157                 stream.lineStart();
17158                 stream.point(sign1, phi0);
17159                 stream.point(lambda1, phi0);
17160                 clean = 0;
17161               } else if (sign0 !== sign1 && delta >= pi$3) { // line crosses antimeridian
17162                 if (abs$2(lambda0 - sign0) < epsilon$2) { lambda0 -= sign0 * epsilon$2; } // handle degeneracies
17163                 if (abs$2(lambda1 - sign1) < epsilon$2) { lambda1 -= sign1 * epsilon$2; }
17164                 phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
17165                 stream.point(sign0, phi0);
17166                 stream.lineEnd();
17167                 stream.lineStart();
17168                 stream.point(sign1, phi0);
17169                 clean = 0;
17170               }
17171               stream.point(lambda0 = lambda1, phi0 = phi1);
17172               sign0 = sign1;
17173             },
17174             lineEnd: function() {
17175               stream.lineEnd();
17176               lambda0 = phi0 = NaN;
17177             },
17178             clean: function() {
17179               return 2 - clean; // if intersections, rejoin first and last segments
17180             }
17181           };
17182         }
17183
17184         function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
17185           var cosPhi0,
17186               cosPhi1,
17187               sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
17188           return abs$2(sinLambda0Lambda1) > epsilon$2
17189               ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
17190                   - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
17191                   / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
17192               : (phi0 + phi1) / 2;
17193         }
17194
17195         function clipAntimeridianInterpolate(from, to, direction, stream) {
17196           var phi;
17197           if (from == null) {
17198             phi = direction * halfPi$2;
17199             stream.point(-pi$3, phi);
17200             stream.point(0, phi);
17201             stream.point(pi$3, phi);
17202             stream.point(pi$3, 0);
17203             stream.point(pi$3, -phi);
17204             stream.point(0, -phi);
17205             stream.point(-pi$3, -phi);
17206             stream.point(-pi$3, 0);
17207             stream.point(-pi$3, phi);
17208           } else if (abs$2(from[0] - to[0]) > epsilon$2) {
17209             var lambda = from[0] < to[0] ? pi$3 : -pi$3;
17210             phi = direction * lambda / 2;
17211             stream.point(-lambda, phi);
17212             stream.point(0, phi);
17213             stream.point(lambda, phi);
17214           } else {
17215             stream.point(to[0], to[1]);
17216           }
17217         }
17218
17219         function clipCircle(radius) {
17220           var cr = cos$1(radius),
17221               delta = 6 * radians,
17222               smallRadius = cr > 0,
17223               notHemisphere = abs$2(cr) > epsilon$2; // TODO optimise for this common case
17224
17225           function interpolate(from, to, direction, stream) {
17226             circleStream(stream, radius, delta, direction, from, to);
17227           }
17228
17229           function visible(lambda, phi) {
17230             return cos$1(lambda) * cos$1(phi) > cr;
17231           }
17232
17233           // Takes a line and cuts into visible segments. Return values used for polygon
17234           // clipping: 0 - there were intersections or the line was empty; 1 - no
17235           // intersections 2 - there were intersections, and the first and last segments
17236           // should be rejoined.
17237           function clipLine(stream) {
17238             var point0, // previous point
17239                 c0, // code for previous point
17240                 v0, // visibility of previous point
17241                 v00, // visibility of first point
17242                 clean; // no intersections
17243             return {
17244               lineStart: function() {
17245                 v00 = v0 = false;
17246                 clean = 1;
17247               },
17248               point: function(lambda, phi) {
17249                 var point1 = [lambda, phi],
17250                     point2,
17251                     v = visible(lambda, phi),
17252                     c = smallRadius
17253                       ? v ? 0 : code(lambda, phi)
17254                       : v ? code(lambda + (lambda < 0 ? pi$3 : -pi$3), phi) : 0;
17255                 if (!point0 && (v00 = v0 = v)) { stream.lineStart(); }
17256                 // Handle degeneracies.
17257                 // TODO ignore if not clipping polygons.
17258                 if (v !== v0) {
17259                   point2 = intersect(point0, point1);
17260                   if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
17261                     point1[0] += epsilon$2;
17262                     point1[1] += epsilon$2;
17263                     v = visible(point1[0], point1[1]);
17264                   }
17265                 }
17266                 if (v !== v0) {
17267                   clean = 0;
17268                   if (v) {
17269                     // outside going in
17270                     stream.lineStart();
17271                     point2 = intersect(point1, point0);
17272                     stream.point(point2[0], point2[1]);
17273                   } else {
17274                     // inside going out
17275                     point2 = intersect(point0, point1);
17276                     stream.point(point2[0], point2[1]);
17277                     stream.lineEnd();
17278                   }
17279                   point0 = point2;
17280                 } else if (notHemisphere && point0 && smallRadius ^ v) {
17281                   var t;
17282                   // If the codes for two points are different, or are both zero,
17283                   // and there this segment intersects with the small circle.
17284                   if (!(c & c0) && (t = intersect(point1, point0, true))) {
17285                     clean = 0;
17286                     if (smallRadius) {
17287                       stream.lineStart();
17288                       stream.point(t[0][0], t[0][1]);
17289                       stream.point(t[1][0], t[1][1]);
17290                       stream.lineEnd();
17291                     } else {
17292                       stream.point(t[1][0], t[1][1]);
17293                       stream.lineEnd();
17294                       stream.lineStart();
17295                       stream.point(t[0][0], t[0][1]);
17296                     }
17297                   }
17298                 }
17299                 if (v && (!point0 || !pointEqual(point0, point1))) {
17300                   stream.point(point1[0], point1[1]);
17301                 }
17302                 point0 = point1, v0 = v, c0 = c;
17303               },
17304               lineEnd: function() {
17305                 if (v0) { stream.lineEnd(); }
17306                 point0 = null;
17307               },
17308               // Rejoin first and last segments if there were intersections and the first
17309               // and last points were visible.
17310               clean: function() {
17311                 return clean | ((v00 && v0) << 1);
17312               }
17313             };
17314           }
17315
17316           // Intersects the great circle between a and b with the clip circle.
17317           function intersect(a, b, two) {
17318             var pa = cartesian(a),
17319                 pb = cartesian(b);
17320
17321             // We have two planes, n1.p = d1 and n2.p = d2.
17322             // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
17323             var n1 = [1, 0, 0], // normal
17324                 n2 = cartesianCross(pa, pb),
17325                 n2n2 = cartesianDot(n2, n2),
17326                 n1n2 = n2[0], // cartesianDot(n1, n2),
17327                 determinant = n2n2 - n1n2 * n1n2;
17328
17329             // Two polar points.
17330             if (!determinant) { return !two && a; }
17331
17332             var c1 =  cr * n2n2 / determinant,
17333                 c2 = -cr * n1n2 / determinant,
17334                 n1xn2 = cartesianCross(n1, n2),
17335                 A = cartesianScale(n1, c1),
17336                 B = cartesianScale(n2, c2);
17337             cartesianAddInPlace(A, B);
17338
17339             // Solve |p(t)|^2 = 1.
17340             var u = n1xn2,
17341                 w = cartesianDot(A, u),
17342                 uu = cartesianDot(u, u),
17343                 t2 = w * w - uu * (cartesianDot(A, A) - 1);
17344
17345             if (t2 < 0) { return; }
17346
17347             var t = sqrt(t2),
17348                 q = cartesianScale(u, (-w - t) / uu);
17349             cartesianAddInPlace(q, A);
17350             q = spherical(q);
17351
17352             if (!two) { return q; }
17353
17354             // Two intersection points.
17355             var lambda0 = a[0],
17356                 lambda1 = b[0],
17357                 phi0 = a[1],
17358                 phi1 = b[1],
17359                 z;
17360
17361             if (lambda1 < lambda0) { z = lambda0, lambda0 = lambda1, lambda1 = z; }
17362
17363             var delta = lambda1 - lambda0,
17364                 polar = abs$2(delta - pi$3) < epsilon$2,
17365                 meridian = polar || delta < epsilon$2;
17366
17367             if (!polar && phi1 < phi0) { z = phi0, phi0 = phi1, phi1 = z; }
17368
17369             // Check that the first point is between a and b.
17370             if (meridian
17371                 ? polar
17372                   ? phi0 + phi1 > 0 ^ q[1] < (abs$2(q[0] - lambda0) < epsilon$2 ? phi0 : phi1)
17373                   : phi0 <= q[1] && q[1] <= phi1
17374                 : delta > pi$3 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
17375               var q1 = cartesianScale(u, (-w + t) / uu);
17376               cartesianAddInPlace(q1, A);
17377               return [q, spherical(q1)];
17378             }
17379           }
17380
17381           // Generates a 4-bit vector representing the location of a point relative to
17382           // the small circle's bounding box.
17383           function code(lambda, phi) {
17384             var r = smallRadius ? radius : pi$3 - radius,
17385                 code = 0;
17386             if (lambda < -r) { code |= 1; } // left
17387             else if (lambda > r) { code |= 2; } // right
17388             if (phi < -r) { code |= 4; } // below
17389             else if (phi > r) { code |= 8; } // above
17390             return code;
17391           }
17392
17393           return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$3, radius - pi$3]);
17394         }
17395
17396         function clipLine(a, b, x0, y0, x1, y1) {
17397           var ax = a[0],
17398               ay = a[1],
17399               bx = b[0],
17400               by = b[1],
17401               t0 = 0,
17402               t1 = 1,
17403               dx = bx - ax,
17404               dy = by - ay,
17405               r;
17406
17407           r = x0 - ax;
17408           if (!dx && r > 0) { return; }
17409           r /= dx;
17410           if (dx < 0) {
17411             if (r < t0) { return; }
17412             if (r < t1) { t1 = r; }
17413           } else if (dx > 0) {
17414             if (r > t1) { return; }
17415             if (r > t0) { t0 = r; }
17416           }
17417
17418           r = x1 - ax;
17419           if (!dx && r < 0) { return; }
17420           r /= dx;
17421           if (dx < 0) {
17422             if (r > t1) { return; }
17423             if (r > t0) { t0 = r; }
17424           } else if (dx > 0) {
17425             if (r < t0) { return; }
17426             if (r < t1) { t1 = r; }
17427           }
17428
17429           r = y0 - ay;
17430           if (!dy && r > 0) { return; }
17431           r /= dy;
17432           if (dy < 0) {
17433             if (r < t0) { return; }
17434             if (r < t1) { t1 = r; }
17435           } else if (dy > 0) {
17436             if (r > t1) { return; }
17437             if (r > t0) { t0 = r; }
17438           }
17439
17440           r = y1 - ay;
17441           if (!dy && r < 0) { return; }
17442           r /= dy;
17443           if (dy < 0) {
17444             if (r > t1) { return; }
17445             if (r > t0) { t0 = r; }
17446           } else if (dy > 0) {
17447             if (r < t0) { return; }
17448             if (r < t1) { t1 = r; }
17449           }
17450
17451           if (t0 > 0) { a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; }
17452           if (t1 < 1) { b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; }
17453           return true;
17454         }
17455
17456         var clipMax = 1e9, clipMin = -clipMax;
17457
17458         // TODO Use d3-polygon’s polygonContains here for the ring check?
17459         // TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
17460
17461         function clipRectangle(x0, y0, x1, y1) {
17462
17463           function visible(x, y) {
17464             return x0 <= x && x <= x1 && y0 <= y && y <= y1;
17465           }
17466
17467           function interpolate(from, to, direction, stream) {
17468             var a = 0, a1 = 0;
17469             if (from == null
17470                 || (a = corner(from, direction)) !== (a1 = corner(to, direction))
17471                 || comparePoint(from, to) < 0 ^ direction > 0) {
17472               do { stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); }
17473               while ((a = (a + direction + 4) % 4) !== a1);
17474             } else {
17475               stream.point(to[0], to[1]);
17476             }
17477           }
17478
17479           function corner(p, direction) {
17480             return abs$2(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3
17481                 : abs$2(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1
17482                 : abs$2(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0
17483                 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
17484           }
17485
17486           function compareIntersection(a, b) {
17487             return comparePoint(a.x, b.x);
17488           }
17489
17490           function comparePoint(a, b) {
17491             var ca = corner(a, 1),
17492                 cb = corner(b, 1);
17493             return ca !== cb ? ca - cb
17494                 : ca === 0 ? b[1] - a[1]
17495                 : ca === 1 ? a[0] - b[0]
17496                 : ca === 2 ? a[1] - b[1]
17497                 : b[0] - a[0];
17498           }
17499
17500           return function(stream) {
17501             var activeStream = stream,
17502                 bufferStream = clipBuffer(),
17503                 segments,
17504                 polygon,
17505                 ring,
17506                 x__, y__, v__, // first point
17507                 x_, y_, v_, // previous point
17508                 first,
17509                 clean;
17510
17511             var clipStream = {
17512               point: point,
17513               lineStart: lineStart,
17514               lineEnd: lineEnd,
17515               polygonStart: polygonStart,
17516               polygonEnd: polygonEnd
17517             };
17518
17519             function point(x, y) {
17520               if (visible(x, y)) { activeStream.point(x, y); }
17521             }
17522
17523             function polygonInside() {
17524               var winding = 0;
17525
17526               for (var i = 0, n = polygon.length; i < n; ++i) {
17527                 for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
17528                   a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
17529                   if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) { ++winding; } }
17530                   else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) { --winding; } }
17531                 }
17532               }
17533
17534               return winding;
17535             }
17536
17537             // Buffer geometry within a polygon and then clip it en masse.
17538             function polygonStart() {
17539               activeStream = bufferStream, segments = [], polygon = [], clean = true;
17540             }
17541
17542             function polygonEnd() {
17543               var startInside = polygonInside(),
17544                   cleanInside = clean && startInside,
17545                   visible = (segments = merge(segments)).length;
17546               if (cleanInside || visible) {
17547                 stream.polygonStart();
17548                 if (cleanInside) {
17549                   stream.lineStart();
17550                   interpolate(null, null, 1, stream);
17551                   stream.lineEnd();
17552                 }
17553                 if (visible) {
17554                   clipRejoin(segments, compareIntersection, startInside, interpolate, stream);
17555                 }
17556                 stream.polygonEnd();
17557               }
17558               activeStream = stream, segments = polygon = ring = null;
17559             }
17560
17561             function lineStart() {
17562               clipStream.point = linePoint;
17563               if (polygon) { polygon.push(ring = []); }
17564               first = true;
17565               v_ = false;
17566               x_ = y_ = NaN;
17567             }
17568
17569             // TODO rather than special-case polygons, simply handle them separately.
17570             // Ideally, coincident intersection points should be jittered to avoid
17571             // clipping issues.
17572             function lineEnd() {
17573               if (segments) {
17574                 linePoint(x__, y__);
17575                 if (v__ && v_) { bufferStream.rejoin(); }
17576                 segments.push(bufferStream.result());
17577               }
17578               clipStream.point = point;
17579               if (v_) { activeStream.lineEnd(); }
17580             }
17581
17582             function linePoint(x, y) {
17583               var v = visible(x, y);
17584               if (polygon) { ring.push([x, y]); }
17585               if (first) {
17586                 x__ = x, y__ = y, v__ = v;
17587                 first = false;
17588                 if (v) {
17589                   activeStream.lineStart();
17590                   activeStream.point(x, y);
17591                 }
17592               } else {
17593                 if (v && v_) { activeStream.point(x, y); }
17594                 else {
17595                   var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
17596                       b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
17597                   if (clipLine(a, b, x0, y0, x1, y1)) {
17598                     if (!v_) {
17599                       activeStream.lineStart();
17600                       activeStream.point(a[0], a[1]);
17601                     }
17602                     activeStream.point(b[0], b[1]);
17603                     if (!v) { activeStream.lineEnd(); }
17604                     clean = false;
17605                   } else if (v) {
17606                     activeStream.lineStart();
17607                     activeStream.point(x, y);
17608                     clean = false;
17609                   }
17610                 }
17611               }
17612               x_ = x, y_ = y, v_ = v;
17613             }
17614
17615             return clipStream;
17616           };
17617         }
17618
17619         function extent$1() {
17620           var x0 = 0,
17621               y0 = 0,
17622               x1 = 960,
17623               y1 = 500,
17624               cache,
17625               cacheStream,
17626               clip;
17627
17628           return clip = {
17629             stream: function(stream) {
17630               return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);
17631             },
17632             extent: function(_) {
17633               return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
17634             }
17635           };
17636         }
17637
17638         var lengthSum = adder(),
17639             lambda0$2,
17640             sinPhi0$1,
17641             cosPhi0$1;
17642
17643         var lengthStream = {
17644           sphere: noop$4,
17645           point: noop$4,
17646           lineStart: lengthLineStart,
17647           lineEnd: noop$4,
17648           polygonStart: noop$4,
17649           polygonEnd: noop$4
17650         };
17651
17652         function lengthLineStart() {
17653           lengthStream.point = lengthPointFirst;
17654           lengthStream.lineEnd = lengthLineEnd;
17655         }
17656
17657         function lengthLineEnd() {
17658           lengthStream.point = lengthStream.lineEnd = noop$4;
17659         }
17660
17661         function lengthPointFirst(lambda, phi) {
17662           lambda *= radians, phi *= radians;
17663           lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
17664           lengthStream.point = lengthPoint;
17665         }
17666
17667         function lengthPoint(lambda, phi) {
17668           lambda *= radians, phi *= radians;
17669           var sinPhi = sin$1(phi),
17670               cosPhi = cos$1(phi),
17671               delta = abs$2(lambda - lambda0$2),
17672               cosDelta = cos$1(delta),
17673               sinDelta = sin$1(delta),
17674               x = cosPhi * sinDelta,
17675               y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
17676               z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
17677           lengthSum.add(atan2(sqrt(x * x + y * y), z));
17678           lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
17679         }
17680
17681         function d3_geoLength(object) {
17682           lengthSum.reset();
17683           d3_geoStream(object, lengthStream);
17684           return +lengthSum;
17685         }
17686
17687         var coordinates = [null, null],
17688             object$1 = {type: "LineString", coordinates: coordinates};
17689
17690         function distance(a, b) {
17691           coordinates[0] = a;
17692           coordinates[1] = b;
17693           return d3_geoLength(object$1);
17694         }
17695
17696         var containsObjectType = {
17697           Feature: function(object, point) {
17698             return containsGeometry(object.geometry, point);
17699           },
17700           FeatureCollection: function(object, point) {
17701             var features = object.features, i = -1, n = features.length;
17702             while (++i < n) { if (containsGeometry(features[i].geometry, point)) { return true; } }
17703             return false;
17704           }
17705         };
17706
17707         var containsGeometryType = {
17708           Sphere: function() {
17709             return true;
17710           },
17711           Point: function(object, point) {
17712             return containsPoint(object.coordinates, point);
17713           },
17714           MultiPoint: function(object, point) {
17715             var coordinates = object.coordinates, i = -1, n = coordinates.length;
17716             while (++i < n) { if (containsPoint(coordinates[i], point)) { return true; } }
17717             return false;
17718           },
17719           LineString: function(object, point) {
17720             return containsLine(object.coordinates, point);
17721           },
17722           MultiLineString: function(object, point) {
17723             var coordinates = object.coordinates, i = -1, n = coordinates.length;
17724             while (++i < n) { if (containsLine(coordinates[i], point)) { return true; } }
17725             return false;
17726           },
17727           Polygon: function(object, point) {
17728             return containsPolygon(object.coordinates, point);
17729           },
17730           MultiPolygon: function(object, point) {
17731             var coordinates = object.coordinates, i = -1, n = coordinates.length;
17732             while (++i < n) { if (containsPolygon(coordinates[i], point)) { return true; } }
17733             return false;
17734           },
17735           GeometryCollection: function(object, point) {
17736             var geometries = object.geometries, i = -1, n = geometries.length;
17737             while (++i < n) { if (containsGeometry(geometries[i], point)) { return true; } }
17738             return false;
17739           }
17740         };
17741
17742         function containsGeometry(geometry, point) {
17743           return geometry && containsGeometryType.hasOwnProperty(geometry.type)
17744               ? containsGeometryType[geometry.type](geometry, point)
17745               : false;
17746         }
17747
17748         function containsPoint(coordinates, point) {
17749           return distance(coordinates, point) === 0;
17750         }
17751
17752         function containsLine(coordinates, point) {
17753           var ao, bo, ab;
17754           for (var i = 0, n = coordinates.length; i < n; i++) {
17755             bo = distance(coordinates[i], point);
17756             if (bo === 0) { return true; }
17757             if (i > 0) {
17758               ab = distance(coordinates[i], coordinates[i - 1]);
17759               if (
17760                 ab > 0 &&
17761                 ao <= ab &&
17762                 bo <= ab &&
17763                 (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2$1 * ab
17764               )
17765                 { return true; }
17766             }
17767             ao = bo;
17768           }
17769           return false;
17770         }
17771
17772         function containsPolygon(coordinates, point) {
17773           return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));
17774         }
17775
17776         function ringRadians(ring) {
17777           return ring = ring.map(pointRadians), ring.pop(), ring;
17778         }
17779
17780         function pointRadians(point) {
17781           return [point[0] * radians, point[1] * radians];
17782         }
17783
17784         function contains$2(object, point) {
17785           return (object && containsObjectType.hasOwnProperty(object.type)
17786               ? containsObjectType[object.type]
17787               : containsGeometry)(object, point);
17788         }
17789
17790         function graticuleX(y0, y1, dy) {
17791           var y = d3_range(y0, y1 - epsilon$2, dy).concat(y1);
17792           return function(x) { return y.map(function(y) { return [x, y]; }); };
17793         }
17794
17795         function graticuleY(x0, x1, dx) {
17796           var x = d3_range(x0, x1 - epsilon$2, dx).concat(x1);
17797           return function(y) { return x.map(function(x) { return [x, y]; }); };
17798         }
17799
17800         function graticule() {
17801           var x1, x0, X1, X0,
17802               y1, y0, Y1, Y0,
17803               dx = 10, dy = dx, DX = 90, DY = 360,
17804               x, y, X, Y,
17805               precision = 2.5;
17806
17807           function graticule() {
17808             return {type: "MultiLineString", coordinates: lines()};
17809           }
17810
17811           function lines() {
17812             return d3_range(ceil(X0 / DX) * DX, X1, DX).map(X)
17813                 .concat(d3_range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
17814                 .concat(d3_range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$2(x % DX) > epsilon$2; }).map(x))
17815                 .concat(d3_range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$2(y % DY) > epsilon$2; }).map(y));
17816           }
17817
17818           graticule.lines = function() {
17819             return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
17820           };
17821
17822           graticule.outline = function() {
17823             return {
17824               type: "Polygon",
17825               coordinates: [
17826                 X(X0).concat(
17827                 Y(Y1).slice(1),
17828                 X(X1).reverse().slice(1),
17829                 Y(Y0).reverse().slice(1))
17830               ]
17831             };
17832           };
17833
17834           graticule.extent = function(_) {
17835             if (!arguments.length) { return graticule.extentMinor(); }
17836             return graticule.extentMajor(_).extentMinor(_);
17837           };
17838
17839           graticule.extentMajor = function(_) {
17840             if (!arguments.length) { return [[X0, Y0], [X1, Y1]]; }
17841             X0 = +_[0][0], X1 = +_[1][0];
17842             Y0 = +_[0][1], Y1 = +_[1][1];
17843             if (X0 > X1) { _ = X0, X0 = X1, X1 = _; }
17844             if (Y0 > Y1) { _ = Y0, Y0 = Y1, Y1 = _; }
17845             return graticule.precision(precision);
17846           };
17847
17848           graticule.extentMinor = function(_) {
17849             if (!arguments.length) { return [[x0, y0], [x1, y1]]; }
17850             x0 = +_[0][0], x1 = +_[1][0];
17851             y0 = +_[0][1], y1 = +_[1][1];
17852             if (x0 > x1) { _ = x0, x0 = x1, x1 = _; }
17853             if (y0 > y1) { _ = y0, y0 = y1, y1 = _; }
17854             return graticule.precision(precision);
17855           };
17856
17857           graticule.step = function(_) {
17858             if (!arguments.length) { return graticule.stepMinor(); }
17859             return graticule.stepMajor(_).stepMinor(_);
17860           };
17861
17862           graticule.stepMajor = function(_) {
17863             if (!arguments.length) { return [DX, DY]; }
17864             DX = +_[0], DY = +_[1];
17865             return graticule;
17866           };
17867
17868           graticule.stepMinor = function(_) {
17869             if (!arguments.length) { return [dx, dy]; }
17870             dx = +_[0], dy = +_[1];
17871             return graticule;
17872           };
17873
17874           graticule.precision = function(_) {
17875             if (!arguments.length) { return precision; }
17876             precision = +_;
17877             x = graticuleX(y0, y1, 90);
17878             y = graticuleY(x0, x1, precision);
17879             X = graticuleX(Y0, Y1, 90);
17880             Y = graticuleY(X0, X1, precision);
17881             return graticule;
17882           };
17883
17884           return graticule
17885               .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]])
17886               .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]);
17887         }
17888
17889         function graticule10() {
17890           return graticule()();
17891         }
17892
17893         function interpolate$1(a, b) {
17894           var x0 = a[0] * radians,
17895               y0 = a[1] * radians,
17896               x1 = b[0] * radians,
17897               y1 = b[1] * radians,
17898               cy0 = cos$1(y0),
17899               sy0 = sin$1(y0),
17900               cy1 = cos$1(y1),
17901               sy1 = sin$1(y1),
17902               kx0 = cy0 * cos$1(x0),
17903               ky0 = cy0 * sin$1(x0),
17904               kx1 = cy1 * cos$1(x1),
17905               ky1 = cy1 * sin$1(x1),
17906               d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
17907               k = sin$1(d);
17908
17909           var interpolate = d ? function(t) {
17910             var B = sin$1(t *= d) / k,
17911                 A = sin$1(d - t) / k,
17912                 x = A * kx0 + B * kx1,
17913                 y = A * ky0 + B * ky1,
17914                 z = A * sy0 + B * sy1;
17915             return [
17916               atan2(y, x) * degrees$1,
17917               atan2(z, sqrt(x * x + y * y)) * degrees$1
17918             ];
17919           } : function() {
17920             return [x0 * degrees$1, y0 * degrees$1];
17921           };
17922
17923           interpolate.distance = d;
17924
17925           return interpolate;
17926         }
17927
17928         function identity$4(x) {
17929           return x;
17930         }
17931
17932         var areaSum$1 = adder(),
17933             areaRingSum$1 = adder(),
17934             x00,
17935             y00,
17936             x0$1,
17937             y0$1;
17938
17939         var areaStream$1 = {
17940           point: noop$4,
17941           lineStart: noop$4,
17942           lineEnd: noop$4,
17943           polygonStart: function() {
17944             areaStream$1.lineStart = areaRingStart$1;
17945             areaStream$1.lineEnd = areaRingEnd$1;
17946           },
17947           polygonEnd: function() {
17948             areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$4;
17949             areaSum$1.add(abs$2(areaRingSum$1));
17950             areaRingSum$1.reset();
17951           },
17952           result: function() {
17953             var area = areaSum$1 / 2;
17954             areaSum$1.reset();
17955             return area;
17956           }
17957         };
17958
17959         function areaRingStart$1() {
17960           areaStream$1.point = areaPointFirst$1;
17961         }
17962
17963         function areaPointFirst$1(x, y) {
17964           areaStream$1.point = areaPoint$1;
17965           x00 = x0$1 = x, y00 = y0$1 = y;
17966         }
17967
17968         function areaPoint$1(x, y) {
17969           areaRingSum$1.add(y0$1 * x - x0$1 * y);
17970           x0$1 = x, y0$1 = y;
17971         }
17972
17973         function areaRingEnd$1() {
17974           areaPoint$1(x00, y00);
17975         }
17976
17977         var x0$2 = Infinity,
17978             y0$2 = x0$2,
17979             x1 = -x0$2,
17980             y1 = x1;
17981
17982         var boundsStream$1 = {
17983           point: boundsPoint$1,
17984           lineStart: noop$4,
17985           lineEnd: noop$4,
17986           polygonStart: noop$4,
17987           polygonEnd: noop$4,
17988           result: function() {
17989             var bounds = [[x0$2, y0$2], [x1, y1]];
17990             x1 = y1 = -(y0$2 = x0$2 = Infinity);
17991             return bounds;
17992           }
17993         };
17994
17995         function boundsPoint$1(x, y) {
17996           if (x < x0$2) { x0$2 = x; }
17997           if (x > x1) { x1 = x; }
17998           if (y < y0$2) { y0$2 = y; }
17999           if (y > y1) { y1 = y; }
18000         }
18001
18002         // TODO Enforce positive area for exterior, negative area for interior?
18003
18004         var X0$1 = 0,
18005             Y0$1 = 0,
18006             Z0$1 = 0,
18007             X1$1 = 0,
18008             Y1$1 = 0,
18009             Z1$1 = 0,
18010             X2$1 = 0,
18011             Y2$1 = 0,
18012             Z2$1 = 0,
18013             x00$1,
18014             y00$1,
18015             x0$3,
18016             y0$3;
18017
18018         var centroidStream$1 = {
18019           point: centroidPoint$1,
18020           lineStart: centroidLineStart$1,
18021           lineEnd: centroidLineEnd$1,
18022           polygonStart: function() {
18023             centroidStream$1.lineStart = centroidRingStart$1;
18024             centroidStream$1.lineEnd = centroidRingEnd$1;
18025           },
18026           polygonEnd: function() {
18027             centroidStream$1.point = centroidPoint$1;
18028             centroidStream$1.lineStart = centroidLineStart$1;
18029             centroidStream$1.lineEnd = centroidLineEnd$1;
18030           },
18031           result: function() {
18032             var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
18033                 : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
18034                 : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
18035                 : [NaN, NaN];
18036             X0$1 = Y0$1 = Z0$1 =
18037             X1$1 = Y1$1 = Z1$1 =
18038             X2$1 = Y2$1 = Z2$1 = 0;
18039             return centroid;
18040           }
18041         };
18042
18043         function centroidPoint$1(x, y) {
18044           X0$1 += x;
18045           Y0$1 += y;
18046           ++Z0$1;
18047         }
18048
18049         function centroidLineStart$1() {
18050           centroidStream$1.point = centroidPointFirstLine;
18051         }
18052
18053         function centroidPointFirstLine(x, y) {
18054           centroidStream$1.point = centroidPointLine;
18055           centroidPoint$1(x0$3 = x, y0$3 = y);
18056         }
18057
18058         function centroidPointLine(x, y) {
18059           var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy);
18060           X1$1 += z * (x0$3 + x) / 2;
18061           Y1$1 += z * (y0$3 + y) / 2;
18062           Z1$1 += z;
18063           centroidPoint$1(x0$3 = x, y0$3 = y);
18064         }
18065
18066         function centroidLineEnd$1() {
18067           centroidStream$1.point = centroidPoint$1;
18068         }
18069
18070         function centroidRingStart$1() {
18071           centroidStream$1.point = centroidPointFirstRing;
18072         }
18073
18074         function centroidRingEnd$1() {
18075           centroidPointRing(x00$1, y00$1);
18076         }
18077
18078         function centroidPointFirstRing(x, y) {
18079           centroidStream$1.point = centroidPointRing;
18080           centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
18081         }
18082
18083         function centroidPointRing(x, y) {
18084           var dx = x - x0$3,
18085               dy = y - y0$3,
18086               z = sqrt(dx * dx + dy * dy);
18087
18088           X1$1 += z * (x0$3 + x) / 2;
18089           Y1$1 += z * (y0$3 + y) / 2;
18090           Z1$1 += z;
18091
18092           z = y0$3 * x - x0$3 * y;
18093           X2$1 += z * (x0$3 + x);
18094           Y2$1 += z * (y0$3 + y);
18095           Z2$1 += z * 3;
18096           centroidPoint$1(x0$3 = x, y0$3 = y);
18097         }
18098
18099         function PathContext(context) {
18100           this._context = context;
18101         }
18102
18103         PathContext.prototype = {
18104           _radius: 4.5,
18105           pointRadius: function(_) {
18106             return this._radius = _, this;
18107           },
18108           polygonStart: function() {
18109             this._line = 0;
18110           },
18111           polygonEnd: function() {
18112             this._line = NaN;
18113           },
18114           lineStart: function() {
18115             this._point = 0;
18116           },
18117           lineEnd: function() {
18118             if (this._line === 0) { this._context.closePath(); }
18119             this._point = NaN;
18120           },
18121           point: function(x, y) {
18122             switch (this._point) {
18123               case 0: {
18124                 this._context.moveTo(x, y);
18125                 this._point = 1;
18126                 break;
18127               }
18128               case 1: {
18129                 this._context.lineTo(x, y);
18130                 break;
18131               }
18132               default: {
18133                 this._context.moveTo(x + this._radius, y);
18134                 this._context.arc(x, y, this._radius, 0, tau$3);
18135                 break;
18136               }
18137             }
18138           },
18139           result: noop$4
18140         };
18141
18142         var lengthSum$1 = adder(),
18143             lengthRing,
18144             x00$2,
18145             y00$2,
18146             x0$4,
18147             y0$4;
18148
18149         var lengthStream$1 = {
18150           point: noop$4,
18151           lineStart: function() {
18152             lengthStream$1.point = lengthPointFirst$1;
18153           },
18154           lineEnd: function() {
18155             if (lengthRing) { lengthPoint$1(x00$2, y00$2); }
18156             lengthStream$1.point = noop$4;
18157           },
18158           polygonStart: function() {
18159             lengthRing = true;
18160           },
18161           polygonEnd: function() {
18162             lengthRing = null;
18163           },
18164           result: function() {
18165             var length = +lengthSum$1;
18166             lengthSum$1.reset();
18167             return length;
18168           }
18169         };
18170
18171         function lengthPointFirst$1(x, y) {
18172           lengthStream$1.point = lengthPoint$1;
18173           x00$2 = x0$4 = x, y00$2 = y0$4 = y;
18174         }
18175
18176         function lengthPoint$1(x, y) {
18177           x0$4 -= x, y0$4 -= y;
18178           lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4));
18179           x0$4 = x, y0$4 = y;
18180         }
18181
18182         function PathString() {
18183           this._string = [];
18184         }
18185
18186         PathString.prototype = {
18187           _radius: 4.5,
18188           _circle: circle$1(4.5),
18189           pointRadius: function(_) {
18190             if ((_ = +_) !== this._radius) { this._radius = _, this._circle = null; }
18191             return this;
18192           },
18193           polygonStart: function() {
18194             this._line = 0;
18195           },
18196           polygonEnd: function() {
18197             this._line = NaN;
18198           },
18199           lineStart: function() {
18200             this._point = 0;
18201           },
18202           lineEnd: function() {
18203             if (this._line === 0) { this._string.push("Z"); }
18204             this._point = NaN;
18205           },
18206           point: function(x, y) {
18207             switch (this._point) {
18208               case 0: {
18209                 this._string.push("M", x, ",", y);
18210                 this._point = 1;
18211                 break;
18212               }
18213               case 1: {
18214                 this._string.push("L", x, ",", y);
18215                 break;
18216               }
18217               default: {
18218                 if (this._circle == null) { this._circle = circle$1(this._radius); }
18219                 this._string.push("M", x, ",", y, this._circle);
18220                 break;
18221               }
18222             }
18223           },
18224           result: function() {
18225             if (this._string.length) {
18226               var result = this._string.join("");
18227               this._string = [];
18228               return result;
18229             } else {
18230               return null;
18231             }
18232           }
18233         };
18234
18235         function circle$1(radius) {
18236           return "m0," + radius
18237               + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
18238               + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
18239               + "z";
18240         }
18241
18242         function d3_geoPath(projection, context) {
18243           var pointRadius = 4.5,
18244               projectionStream,
18245               contextStream;
18246
18247           function path(object) {
18248             if (object) {
18249               if (typeof pointRadius === "function") { contextStream.pointRadius(+pointRadius.apply(this, arguments)); }
18250               d3_geoStream(object, projectionStream(contextStream));
18251             }
18252             return contextStream.result();
18253           }
18254
18255           path.area = function(object) {
18256             d3_geoStream(object, projectionStream(areaStream$1));
18257             return areaStream$1.result();
18258           };
18259
18260           path.measure = function(object) {
18261             d3_geoStream(object, projectionStream(lengthStream$1));
18262             return lengthStream$1.result();
18263           };
18264
18265           path.bounds = function(object) {
18266             d3_geoStream(object, projectionStream(boundsStream$1));
18267             return boundsStream$1.result();
18268           };
18269
18270           path.centroid = function(object) {
18271             d3_geoStream(object, projectionStream(centroidStream$1));
18272             return centroidStream$1.result();
18273           };
18274
18275           path.projection = function(_) {
18276             return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$4) : (projection = _).stream, path) : projection;
18277           };
18278
18279           path.context = function(_) {
18280             if (!arguments.length) { return context; }
18281             contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);
18282             if (typeof pointRadius !== "function") { contextStream.pointRadius(pointRadius); }
18283             return path;
18284           };
18285
18286           path.pointRadius = function(_) {
18287             if (!arguments.length) { return pointRadius; }
18288             pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
18289             return path;
18290           };
18291
18292           return path.projection(projection).context(context);
18293         }
18294
18295         function d3_geoTransform(methods) {
18296           return {
18297             stream: transformer(methods)
18298           };
18299         }
18300
18301         function transformer(methods) {
18302           return function(stream) {
18303             var s = new TransformStream;
18304             for (var key in methods) { s[key] = methods[key]; }
18305             s.stream = stream;
18306             return s;
18307           };
18308         }
18309
18310         function TransformStream() {}
18311
18312         TransformStream.prototype = {
18313           constructor: TransformStream,
18314           point: function(x, y) { this.stream.point(x, y); },
18315           sphere: function() { this.stream.sphere(); },
18316           lineStart: function() { this.stream.lineStart(); },
18317           lineEnd: function() { this.stream.lineEnd(); },
18318           polygonStart: function() { this.stream.polygonStart(); },
18319           polygonEnd: function() { this.stream.polygonEnd(); }
18320         };
18321
18322         function fit(projection, fitBounds, object) {
18323           var clip = projection.clipExtent && projection.clipExtent();
18324           projection.scale(150).translate([0, 0]);
18325           if (clip != null) { projection.clipExtent(null); }
18326           d3_geoStream(object, projection.stream(boundsStream$1));
18327           fitBounds(boundsStream$1.result());
18328           if (clip != null) { projection.clipExtent(clip); }
18329           return projection;
18330         }
18331
18332         function fitExtent(projection, extent, object) {
18333           return fit(projection, function(b) {
18334             var w = extent[1][0] - extent[0][0],
18335                 h = extent[1][1] - extent[0][1],
18336                 k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
18337                 x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
18338                 y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
18339             projection.scale(150 * k).translate([x, y]);
18340           }, object);
18341         }
18342
18343         function fitSize(projection, size, object) {
18344           return fitExtent(projection, [[0, 0], size], object);
18345         }
18346
18347         function fitWidth(projection, width, object) {
18348           return fit(projection, function(b) {
18349             var w = +width,
18350                 k = w / (b[1][0] - b[0][0]),
18351                 x = (w - k * (b[1][0] + b[0][0])) / 2,
18352                 y = -k * b[0][1];
18353             projection.scale(150 * k).translate([x, y]);
18354           }, object);
18355         }
18356
18357         function fitHeight(projection, height, object) {
18358           return fit(projection, function(b) {
18359             var h = +height,
18360                 k = h / (b[1][1] - b[0][1]),
18361                 x = -k * b[0][0],
18362                 y = (h - k * (b[1][1] + b[0][1])) / 2;
18363             projection.scale(150 * k).translate([x, y]);
18364           }, object);
18365         }
18366
18367         var maxDepth = 16, // maximum depth of subdivision
18368             cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
18369
18370         function resample(project, delta2) {
18371           return +delta2 ? resample$1(project, delta2) : resampleNone(project);
18372         }
18373
18374         function resampleNone(project) {
18375           return transformer({
18376             point: function(x, y) {
18377               x = project(x, y);
18378               this.stream.point(x[0], x[1]);
18379             }
18380           });
18381         }
18382
18383         function resample$1(project, delta2) {
18384
18385           function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
18386             var dx = x1 - x0,
18387                 dy = y1 - y0,
18388                 d2 = dx * dx + dy * dy;
18389             if (d2 > 4 * delta2 && depth--) {
18390               var a = a0 + a1,
18391                   b = b0 + b1,
18392                   c = c0 + c1,
18393                   m = sqrt(a * a + b * b + c * c),
18394                   phi2 = asin(c /= m),
18395                   lambda2 = abs$2(abs$2(c) - 1) < epsilon$2 || abs$2(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2(b, a),
18396                   p = project(lambda2, phi2),
18397                   x2 = p[0],
18398                   y2 = p[1],
18399                   dx2 = x2 - x0,
18400                   dy2 = y2 - y0,
18401                   dz = dy * dx2 - dx * dy2;
18402               if (dz * dz / d2 > delta2 // perpendicular projected distance
18403                   || abs$2((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
18404                   || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
18405                 resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
18406                 stream.point(x2, y2);
18407                 resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
18408               }
18409             }
18410           }
18411           return function(stream) {
18412             var lambda00, x00, y00, a00, b00, c00, // first point
18413                 lambda0, x0, y0, a0, b0, c0; // previous point
18414
18415             var resampleStream = {
18416               point: point,
18417               lineStart: lineStart,
18418               lineEnd: lineEnd,
18419               polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
18420               polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
18421             };
18422
18423             function point(x, y) {
18424               x = project(x, y);
18425               stream.point(x[0], x[1]);
18426             }
18427
18428             function lineStart() {
18429               x0 = NaN;
18430               resampleStream.point = linePoint;
18431               stream.lineStart();
18432             }
18433
18434             function linePoint(lambda, phi) {
18435               var c = cartesian([lambda, phi]), p = project(lambda, phi);
18436               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);
18437               stream.point(x0, y0);
18438             }
18439
18440             function lineEnd() {
18441               resampleStream.point = point;
18442               stream.lineEnd();
18443             }
18444
18445             function ringStart() {
18446               lineStart();
18447               resampleStream.point = ringPoint;
18448               resampleStream.lineEnd = ringEnd;
18449             }
18450
18451             function ringPoint(lambda, phi) {
18452               linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
18453               resampleStream.point = linePoint;
18454             }
18455
18456             function ringEnd() {
18457               resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
18458               resampleStream.lineEnd = lineEnd;
18459               lineEnd();
18460             }
18461
18462             return resampleStream;
18463           };
18464         }
18465
18466         var transformRadians = transformer({
18467           point: function(x, y) {
18468             this.stream.point(x * radians, y * radians);
18469           }
18470         });
18471
18472         function transformRotate(rotate) {
18473           return transformer({
18474             point: function(x, y) {
18475               var r = rotate(x, y);
18476               return this.stream.point(r[0], r[1]);
18477             }
18478           });
18479         }
18480
18481         function scaleTranslate(k, dx, dy) {
18482           function transform(x, y) {
18483             return [dx + k * x, dy - k * y];
18484           }
18485           transform.invert = function(x, y) {
18486             return [(x - dx) / k, (dy - y) / k];
18487           };
18488           return transform;
18489         }
18490
18491         function scaleTranslateRotate(k, dx, dy, alpha) {
18492           var cosAlpha = cos$1(alpha),
18493               sinAlpha = sin$1(alpha),
18494               a = cosAlpha * k,
18495               b = sinAlpha * k,
18496               ai = cosAlpha / k,
18497               bi = sinAlpha / k,
18498               ci = (sinAlpha * dy - cosAlpha * dx) / k,
18499               fi = (sinAlpha * dx + cosAlpha * dy) / k;
18500           function transform(x, y) {
18501             return [a * x - b * y + dx, dy - b * x - a * y];
18502           }
18503           transform.invert = function(x, y) {
18504             return [ai * x - bi * y + ci, fi - bi * x - ai * y];
18505           };
18506           return transform;
18507         }
18508
18509         function projection(project) {
18510           return projectionMutator(function() { return project; })();
18511         }
18512
18513         function projectionMutator(projectAt) {
18514           var project,
18515               k = 150, // scale
18516               x = 480, y = 250, // translate
18517               lambda = 0, phi = 0, // center
18518               deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate
18519               alpha = 0, // post-rotate
18520               theta = null, preclip = clipAntimeridian, // pre-clip angle
18521               x0 = null, y0, x1, y1, postclip = identity$4, // post-clip extent
18522               delta2 = 0.5, // precision
18523               projectResample,
18524               projectTransform,
18525               projectRotateTransform,
18526               cache,
18527               cacheStream;
18528
18529           function projection(point) {
18530             return projectRotateTransform(point[0] * radians, point[1] * radians);
18531           }
18532
18533           function invert(point) {
18534             point = projectRotateTransform.invert(point[0], point[1]);
18535             return point && [point[0] * degrees$1, point[1] * degrees$1];
18536           }
18537
18538           projection.stream = function(stream) {
18539             return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));
18540           };
18541
18542           projection.preclip = function(_) {
18543             return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;
18544           };
18545
18546           projection.postclip = function(_) {
18547             return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
18548           };
18549
18550           projection.clipAngle = function(_) {
18551             return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
18552           };
18553
18554           projection.clipExtent = function(_) {
18555             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]];
18556           };
18557
18558           projection.scale = function(_) {
18559             return arguments.length ? (k = +_, recenter()) : k;
18560           };
18561
18562           projection.translate = function(_) {
18563             return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
18564           };
18565
18566           projection.center = function(_) {
18567             return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
18568           };
18569
18570           projection.rotate = function(_) {
18571             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];
18572           };
18573
18574           projection.angle = function(_) {
18575             return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1;
18576           };
18577
18578           projection.precision = function(_) {
18579             return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);
18580           };
18581
18582           projection.fitExtent = function(extent, object) {
18583             return fitExtent(projection, extent, object);
18584           };
18585
18586           projection.fitSize = function(size, object) {
18587             return fitSize(projection, size, object);
18588           };
18589
18590           projection.fitWidth = function(width, object) {
18591             return fitWidth(projection, width, object);
18592           };
18593
18594           projection.fitHeight = function(height, object) {
18595             return fitHeight(projection, height, object);
18596           };
18597
18598           function recenter() {
18599             var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),
18600                 transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);
18601             rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);
18602             projectTransform = compose(project, transform);
18603             projectRotateTransform = compose(rotate, projectTransform);
18604             projectResample = resample(projectTransform, delta2);
18605             return reset();
18606           }
18607
18608           function reset() {
18609             cache = cacheStream = null;
18610             return projection;
18611           }
18612
18613           return function() {
18614             project = projectAt.apply(this, arguments);
18615             projection.invert = project.invert && invert;
18616             return recenter();
18617           };
18618         }
18619
18620         function conicProjection(projectAt) {
18621           var phi0 = 0,
18622               phi1 = pi$3 / 3,
18623               m = projectionMutator(projectAt),
18624               p = m(phi0, phi1);
18625
18626           p.parallels = function(_) {
18627             return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
18628           };
18629
18630           return p;
18631         }
18632
18633         function cylindricalEqualAreaRaw(phi0) {
18634           var cosPhi0 = cos$1(phi0);
18635
18636           function forward(lambda, phi) {
18637             return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
18638           }
18639
18640           forward.invert = function(x, y) {
18641             return [x / cosPhi0, asin(y * cosPhi0)];
18642           };
18643
18644           return forward;
18645         }
18646
18647         function conicEqualAreaRaw(y0, y1) {
18648           var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
18649
18650           // Are the parallels symmetrical around the Equator?
18651           if (abs$2(n) < epsilon$2) { return cylindricalEqualAreaRaw(y0); }
18652
18653           var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;
18654
18655           function project(x, y) {
18656             var r = sqrt(c - 2 * n * sin$1(y)) / n;
18657             return [r * sin$1(x *= n), r0 - r * cos$1(x)];
18658           }
18659
18660           project.invert = function(x, y) {
18661             var r0y = r0 - y;
18662             return [atan2(x, abs$2(r0y)) / n * sign$2(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
18663           };
18664
18665           return project;
18666         }
18667
18668         function conicEqualArea() {
18669           return conicProjection(conicEqualAreaRaw)
18670               .scale(155.424)
18671               .center([0, 33.6442]);
18672         }
18673
18674         function albers() {
18675           return conicEqualArea()
18676               .parallels([29.5, 45.5])
18677               .scale(1070)
18678               .translate([480, 250])
18679               .rotate([96, 0])
18680               .center([-0.6, 38.7]);
18681         }
18682
18683         // The projections must have mutually exclusive clip regions on the sphere,
18684         // as this will avoid emitting interleaving lines and polygons.
18685         function multiplex(streams) {
18686           var n = streams.length;
18687           return {
18688             point: function(x, y) { var i = -1; while (++i < n) { streams[i].point(x, y); } },
18689             sphere: function() { var i = -1; while (++i < n) { streams[i].sphere(); } },
18690             lineStart: function() { var i = -1; while (++i < n) { streams[i].lineStart(); } },
18691             lineEnd: function() { var i = -1; while (++i < n) { streams[i].lineEnd(); } },
18692             polygonStart: function() { var i = -1; while (++i < n) { streams[i].polygonStart(); } },
18693             polygonEnd: function() { var i = -1; while (++i < n) { streams[i].polygonEnd(); } }
18694           };
18695         }
18696
18697         // A composite projection for the United States, configured by default for
18698         // 960×500. The projection also works quite well at 960×600 if you change the
18699         // scale to 1285 and adjust the translate accordingly. The set of standard
18700         // parallels for each region comes from USGS, which is published here:
18701         // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
18702         function albersUsa() {
18703           var cache,
18704               cacheStream,
18705               lower48 = albers(), lower48Point,
18706               alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
18707               hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
18708               point, pointStream = {point: function(x, y) { point = [x, y]; }};
18709
18710           function albersUsa(coordinates) {
18711             var x = coordinates[0], y = coordinates[1];
18712             return point = null,
18713                 (lower48Point.point(x, y), point)
18714                 || (alaskaPoint.point(x, y), point)
18715                 || (hawaiiPoint.point(x, y), point);
18716           }
18717
18718           albersUsa.invert = function(coordinates) {
18719             var k = lower48.scale(),
18720                 t = lower48.translate(),
18721                 x = (coordinates[0] - t[0]) / k,
18722                 y = (coordinates[1] - t[1]) / k;
18723             return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
18724                 : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
18725                 : lower48).invert(coordinates);
18726           };
18727
18728           albersUsa.stream = function(stream) {
18729             return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
18730           };
18731
18732           albersUsa.precision = function(_) {
18733             if (!arguments.length) { return lower48.precision(); }
18734             lower48.precision(_), alaska.precision(_), hawaii.precision(_);
18735             return reset();
18736           };
18737
18738           albersUsa.scale = function(_) {
18739             if (!arguments.length) { return lower48.scale(); }
18740             lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
18741             return albersUsa.translate(lower48.translate());
18742           };
18743
18744           albersUsa.translate = function(_) {
18745             if (!arguments.length) { return lower48.translate(); }
18746             var k = lower48.scale(), x = +_[0], y = +_[1];
18747
18748             lower48Point = lower48
18749                 .translate(_)
18750                 .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
18751                 .stream(pointStream);
18752
18753             alaskaPoint = alaska
18754                 .translate([x - 0.307 * k, y + 0.201 * k])
18755                 .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]])
18756                 .stream(pointStream);
18757
18758             hawaiiPoint = hawaii
18759                 .translate([x - 0.205 * k, y + 0.212 * k])
18760                 .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]])
18761                 .stream(pointStream);
18762
18763             return reset();
18764           };
18765
18766           albersUsa.fitExtent = function(extent, object) {
18767             return fitExtent(albersUsa, extent, object);
18768           };
18769
18770           albersUsa.fitSize = function(size, object) {
18771             return fitSize(albersUsa, size, object);
18772           };
18773
18774           albersUsa.fitWidth = function(width, object) {
18775             return fitWidth(albersUsa, width, object);
18776           };
18777
18778           albersUsa.fitHeight = function(height, object) {
18779             return fitHeight(albersUsa, height, object);
18780           };
18781
18782           function reset() {
18783             cache = cacheStream = null;
18784             return albersUsa;
18785           }
18786
18787           return albersUsa.scale(1070);
18788         }
18789
18790         function azimuthalRaw(scale) {
18791           return function(x, y) {
18792             var cx = cos$1(x),
18793                 cy = cos$1(y),
18794                 k = scale(cx * cy);
18795             return [
18796               k * cy * sin$1(x),
18797               k * sin$1(y)
18798             ];
18799           }
18800         }
18801
18802         function azimuthalInvert(angle) {
18803           return function(x, y) {
18804             var z = sqrt(x * x + y * y),
18805                 c = angle(z),
18806                 sc = sin$1(c),
18807                 cc = cos$1(c);
18808             return [
18809               atan2(x * sc, z * cc),
18810               asin(z && y * sc / z)
18811             ];
18812           }
18813         }
18814
18815         var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
18816           return sqrt(2 / (1 + cxcy));
18817         });
18818
18819         azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
18820           return 2 * asin(z / 2);
18821         });
18822
18823         function azimuthalEqualArea() {
18824           return projection(azimuthalEqualAreaRaw)
18825               .scale(124.75)
18826               .clipAngle(180 - 1e-3);
18827         }
18828
18829         var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
18830           return (c = acos(c)) && c / sin$1(c);
18831         });
18832
18833         azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
18834           return z;
18835         });
18836
18837         function azimuthalEquidistant() {
18838           return projection(azimuthalEquidistantRaw)
18839               .scale(79.4188)
18840               .clipAngle(180 - 1e-3);
18841         }
18842
18843         function mercatorRaw(lambda, phi) {
18844           return [lambda, log(tan((halfPi$2 + phi) / 2))];
18845         }
18846
18847         mercatorRaw.invert = function(x, y) {
18848           return [x, 2 * atan(exp(y)) - halfPi$2];
18849         };
18850
18851         function mercator() {
18852           return mercatorProjection(mercatorRaw)
18853               .scale(961 / tau$3);
18854         }
18855
18856         function mercatorProjection(project) {
18857           var m = projection(project),
18858               center = m.center,
18859               scale = m.scale,
18860               translate = m.translate,
18861               clipExtent = m.clipExtent,
18862               x0 = null, y0, x1, y1; // clip extent
18863
18864           m.scale = function(_) {
18865             return arguments.length ? (scale(_), reclip()) : scale();
18866           };
18867
18868           m.translate = function(_) {
18869             return arguments.length ? (translate(_), reclip()) : translate();
18870           };
18871
18872           m.center = function(_) {
18873             return arguments.length ? (center(_), reclip()) : center();
18874           };
18875
18876           m.clipExtent = function(_) {
18877             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]];
18878           };
18879
18880           function reclip() {
18881             var k = pi$3 * scale(),
18882                 t = m(rotation(m.rotate()).invert([0, 0]));
18883             return clipExtent(x0 == null
18884                 ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw
18885                 ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]
18886                 : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);
18887           }
18888
18889           return reclip();
18890         }
18891
18892         function tany(y) {
18893           return tan((halfPi$2 + y) / 2);
18894         }
18895
18896         function conicConformalRaw(y0, y1) {
18897           var cy0 = cos$1(y0),
18898               n = y0 === y1 ? sin$1(y0) : log(cy0 / cos$1(y1)) / log(tany(y1) / tany(y0)),
18899               f = cy0 * pow(tany(y0), n) / n;
18900
18901           if (!n) { return mercatorRaw; }
18902
18903           function project(x, y) {
18904             if (f > 0) { if (y < -halfPi$2 + epsilon$2) { y = -halfPi$2 + epsilon$2; } }
18905             else { if (y > halfPi$2 - epsilon$2) { y = halfPi$2 - epsilon$2; } }
18906             var r = f / pow(tany(y), n);
18907             return [r * sin$1(n * x), f - r * cos$1(n * x)];
18908           }
18909
18910           project.invert = function(x, y) {
18911             var fy = f - y, r = sign$2(n) * sqrt(x * x + fy * fy);
18912             return [atan2(x, abs$2(fy)) / n * sign$2(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi$2];
18913           };
18914
18915           return project;
18916         }
18917
18918         function conicConformal() {
18919           return conicProjection(conicConformalRaw)
18920               .scale(109.5)
18921               .parallels([30, 30]);
18922         }
18923
18924         function equirectangularRaw(lambda, phi) {
18925           return [lambda, phi];
18926         }
18927
18928         equirectangularRaw.invert = equirectangularRaw;
18929
18930         function equirectangular() {
18931           return projection(equirectangularRaw)
18932               .scale(152.63);
18933         }
18934
18935         function conicEquidistantRaw(y0, y1) {
18936           var cy0 = cos$1(y0),
18937               n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
18938               g = cy0 / n + y0;
18939
18940           if (abs$2(n) < epsilon$2) { return equirectangularRaw; }
18941
18942           function project(x, y) {
18943             var gy = g - y, nx = n * x;
18944             return [gy * sin$1(nx), g - gy * cos$1(nx)];
18945           }
18946
18947           project.invert = function(x, y) {
18948             var gy = g - y;
18949             return [atan2(x, abs$2(gy)) / n * sign$2(gy), g - sign$2(n) * sqrt(x * x + gy * gy)];
18950           };
18951
18952           return project;
18953         }
18954
18955         function conicEquidistant() {
18956           return conicProjection(conicEquidistantRaw)
18957               .scale(131.154)
18958               .center([0, 13.9389]);
18959         }
18960
18961         var A1 = 1.340264,
18962             A2 = -0.081106,
18963             A3 = 0.000893,
18964             A4 = 0.003796,
18965             M = sqrt(3) / 2,
18966             iterations = 12;
18967
18968         function equalEarthRaw(lambda, phi) {
18969           var l = asin(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;
18970           return [
18971             lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),
18972             l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))
18973           ];
18974         }
18975
18976         equalEarthRaw.invert = function(x, y) {
18977           var l = y, l2 = l * l, l6 = l2 * l2 * l2;
18978           for (var i = 0, delta, fy, fpy; i < iterations; ++i) {
18979             fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;
18980             fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);
18981             l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;
18982             if (abs$2(delta) < epsilon2$1) { break; }
18983           }
18984           return [
18985             M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),
18986             asin(sin$1(l) / M)
18987           ];
18988         };
18989
18990         function equalEarth() {
18991           return projection(equalEarthRaw)
18992               .scale(177.158);
18993         }
18994
18995         function gnomonicRaw(x, y) {
18996           var cy = cos$1(y), k = cos$1(x) * cy;
18997           return [cy * sin$1(x) / k, sin$1(y) / k];
18998         }
18999
19000         gnomonicRaw.invert = azimuthalInvert(atan);
19001
19002         function gnomonic() {
19003           return projection(gnomonicRaw)
19004               .scale(144.049)
19005               .clipAngle(60);
19006         }
19007
19008         function scaleTranslate$1(kx, ky, tx, ty) {
19009           return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$4 : transformer({
19010             point: function(x, y) {
19011               this.stream.point(x * kx + tx, y * ky + ty);
19012             }
19013           });
19014         }
19015
19016         function d3_geoIdentity() {
19017           var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
19018               x0 = null, y0, x1, y1, // clip extent
19019               postclip = identity$4,
19020               cache,
19021               cacheStream,
19022               projection;
19023
19024           function reset() {
19025             cache = cacheStream = null;
19026             return projection;
19027           }
19028
19029           return projection = {
19030             stream: function(stream) {
19031               return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));
19032             },
19033             postclip: function(_) {
19034               return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;
19035             },
19036             clipExtent: function(_) {
19037               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]];
19038             },
19039             scale: function(_) {
19040               return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k;
19041             },
19042             translate: function(_) {
19043               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
19044             },
19045             reflectX: function(_) {
19046               return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
19047             },
19048             reflectY: function(_) {
19049               return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
19050             },
19051             fitExtent: function(extent, object) {
19052               return fitExtent(projection, extent, object);
19053             },
19054             fitSize: function(size, object) {
19055               return fitSize(projection, size, object);
19056             },
19057             fitWidth: function(width, object) {
19058               return fitWidth(projection, width, object);
19059             },
19060             fitHeight: function(height, object) {
19061               return fitHeight(projection, height, object);
19062             }
19063           };
19064         }
19065
19066         function naturalEarth1Raw(lambda, phi) {
19067           var phi2 = phi * phi, phi4 = phi2 * phi2;
19068           return [
19069             lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),
19070             phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))
19071           ];
19072         }
19073
19074         naturalEarth1Raw.invert = function(x, y) {
19075           var phi = y, i = 25, delta;
19076           do {
19077             var phi2 = phi * phi, phi4 = phi2 * phi2;
19078             phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /
19079                 (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));
19080           } while (abs$2(delta) > epsilon$2 && --i > 0);
19081           return [
19082             x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),
19083             phi
19084           ];
19085         };
19086
19087         function naturalEarth1() {
19088           return projection(naturalEarth1Raw)
19089               .scale(175.295);
19090         }
19091
19092         function orthographicRaw(x, y) {
19093           return [cos$1(y) * sin$1(x), sin$1(y)];
19094         }
19095
19096         orthographicRaw.invert = azimuthalInvert(asin);
19097
19098         function orthographic() {
19099           return projection(orthographicRaw)
19100               .scale(249.5)
19101               .clipAngle(90 + epsilon$2);
19102         }
19103
19104         function stereographicRaw(x, y) {
19105           var cy = cos$1(y), k = 1 + cos$1(x) * cy;
19106           return [cy * sin$1(x) / k, sin$1(y) / k];
19107         }
19108
19109         stereographicRaw.invert = azimuthalInvert(function(z) {
19110           return 2 * atan(z);
19111         });
19112
19113         function stereographic() {
19114           return projection(stereographicRaw)
19115               .scale(250)
19116               .clipAngle(142);
19117         }
19118
19119         function transverseMercatorRaw(lambda, phi) {
19120           return [log(tan((halfPi$2 + phi) / 2)), -lambda];
19121         }
19122
19123         transverseMercatorRaw.invert = function(x, y) {
19124           return [-y, 2 * atan(exp(x)) - halfPi$2];
19125         };
19126
19127         function transverseMercator() {
19128           var m = mercatorProjection(transverseMercatorRaw),
19129               center = m.center,
19130               rotate = m.rotate;
19131
19132           m.center = function(_) {
19133             return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
19134           };
19135
19136           m.rotate = function(_) {
19137             return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
19138           };
19139
19140           return rotate([0, 0, 90])
19141               .scale(159.155);
19142         }
19143
19144         function defaultSeparation(a, b) {
19145           return a.parent === b.parent ? 1 : 2;
19146         }
19147
19148         function meanX(children) {
19149           return children.reduce(meanXReduce, 0) / children.length;
19150         }
19151
19152         function meanXReduce(x, c) {
19153           return x + c.x;
19154         }
19155
19156         function maxY(children) {
19157           return 1 + children.reduce(maxYReduce, 0);
19158         }
19159
19160         function maxYReduce(y, c) {
19161           return Math.max(y, c.y);
19162         }
19163
19164         function leafLeft(node) {
19165           var children;
19166           while (children = node.children) { node = children[0]; }
19167           return node;
19168         }
19169
19170         function leafRight(node) {
19171           var children;
19172           while (children = node.children) { node = children[children.length - 1]; }
19173           return node;
19174         }
19175
19176         function cluster() {
19177           var separation = defaultSeparation,
19178               dx = 1,
19179               dy = 1,
19180               nodeSize = false;
19181
19182           function cluster(root) {
19183             var previousNode,
19184                 x = 0;
19185
19186             // First walk, computing the initial x & y values.
19187             root.eachAfter(function(node) {
19188               var children = node.children;
19189               if (children) {
19190                 node.x = meanX(children);
19191                 node.y = maxY(children);
19192               } else {
19193                 node.x = previousNode ? x += separation(node, previousNode) : 0;
19194                 node.y = 0;
19195                 previousNode = node;
19196               }
19197             });
19198
19199             var left = leafLeft(root),
19200                 right = leafRight(root),
19201                 x0 = left.x - separation(left, right) / 2,
19202                 x1 = right.x + separation(right, left) / 2;
19203
19204             // Second walk, normalizing x & y to the desired size.
19205             return root.eachAfter(nodeSize ? function(node) {
19206               node.x = (node.x - root.x) * dx;
19207               node.y = (root.y - node.y) * dy;
19208             } : function(node) {
19209               node.x = (node.x - x0) / (x1 - x0) * dx;
19210               node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
19211             });
19212           }
19213
19214           cluster.separation = function(x) {
19215             return arguments.length ? (separation = x, cluster) : separation;
19216           };
19217
19218           cluster.size = function(x) {
19219             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
19220           };
19221
19222           cluster.nodeSize = function(x) {
19223             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
19224           };
19225
19226           return cluster;
19227         }
19228
19229         function count(node) {
19230           var sum = 0,
19231               children = node.children,
19232               i = children && children.length;
19233           if (!i) { sum = 1; }
19234           else { while (--i >= 0) { sum += children[i].value; } }
19235           node.value = sum;
19236         }
19237
19238         function node_count() {
19239           return this.eachAfter(count);
19240         }
19241
19242         function node_each(callback) {
19243           var node = this, current, next = [node], children, i, n;
19244           do {
19245             current = next.reverse(), next = [];
19246             while (node = current.pop()) {
19247               callback(node), children = node.children;
19248               if (children) { for (i = 0, n = children.length; i < n; ++i) {
19249                 next.push(children[i]);
19250               } }
19251             }
19252           } while (next.length);
19253           return this;
19254         }
19255
19256         function node_eachBefore(callback) {
19257           var node = this, nodes = [node], children, i;
19258           while (node = nodes.pop()) {
19259             callback(node), children = node.children;
19260             if (children) { for (i = children.length - 1; i >= 0; --i) {
19261               nodes.push(children[i]);
19262             } }
19263           }
19264           return this;
19265         }
19266
19267         function node_eachAfter(callback) {
19268           var node = this, nodes = [node], next = [], children, i, n;
19269           while (node = nodes.pop()) {
19270             next.push(node), children = node.children;
19271             if (children) { for (i = 0, n = children.length; i < n; ++i) {
19272               nodes.push(children[i]);
19273             } }
19274           }
19275           while (node = next.pop()) {
19276             callback(node);
19277           }
19278           return this;
19279         }
19280
19281         function node_sum(value) {
19282           return this.eachAfter(function(node) {
19283             var sum = +value(node.data) || 0,
19284                 children = node.children,
19285                 i = children && children.length;
19286             while (--i >= 0) { sum += children[i].value; }
19287             node.value = sum;
19288           });
19289         }
19290
19291         function node_sort(compare) {
19292           return this.eachBefore(function(node) {
19293             if (node.children) {
19294               node.children.sort(compare);
19295             }
19296           });
19297         }
19298
19299         function node_path(end) {
19300           var start = this,
19301               ancestor = leastCommonAncestor(start, end),
19302               nodes = [start];
19303           while (start !== ancestor) {
19304             start = start.parent;
19305             nodes.push(start);
19306           }
19307           var k = nodes.length;
19308           while (end !== ancestor) {
19309             nodes.splice(k, 0, end);
19310             end = end.parent;
19311           }
19312           return nodes;
19313         }
19314
19315         function leastCommonAncestor(a, b) {
19316           if (a === b) { return a; }
19317           var aNodes = a.ancestors(),
19318               bNodes = b.ancestors(),
19319               c = null;
19320           a = aNodes.pop();
19321           b = bNodes.pop();
19322           while (a === b) {
19323             c = a;
19324             a = aNodes.pop();
19325             b = bNodes.pop();
19326           }
19327           return c;
19328         }
19329
19330         function node_ancestors() {
19331           var node = this, nodes = [node];
19332           while (node = node.parent) {
19333             nodes.push(node);
19334           }
19335           return nodes;
19336         }
19337
19338         function node_descendants() {
19339           var nodes = [];
19340           this.each(function(node) {
19341             nodes.push(node);
19342           });
19343           return nodes;
19344         }
19345
19346         function node_leaves() {
19347           var leaves = [];
19348           this.eachBefore(function(node) {
19349             if (!node.children) {
19350               leaves.push(node);
19351             }
19352           });
19353           return leaves;
19354         }
19355
19356         function node_links() {
19357           var root = this, links = [];
19358           root.each(function(node) {
19359             if (node !== root) { // Don’t include the root’s parent, if any.
19360               links.push({source: node.parent, target: node});
19361             }
19362           });
19363           return links;
19364         }
19365
19366         function hierarchy(data, children) {
19367           var root = new Node(data),
19368               valued = +data.value && (root.value = data.value),
19369               node,
19370               nodes = [root],
19371               child,
19372               childs,
19373               i,
19374               n;
19375
19376           if (children == null) { children = defaultChildren; }
19377
19378           while (node = nodes.pop()) {
19379             if (valued) { node.value = +node.data.value; }
19380             if ((childs = children(node.data)) && (n = childs.length)) {
19381               node.children = new Array(n);
19382               for (i = n - 1; i >= 0; --i) {
19383                 nodes.push(child = node.children[i] = new Node(childs[i]));
19384                 child.parent = node;
19385                 child.depth = node.depth + 1;
19386               }
19387             }
19388           }
19389
19390           return root.eachBefore(computeHeight);
19391         }
19392
19393         function node_copy() {
19394           return hierarchy(this).eachBefore(copyData);
19395         }
19396
19397         function defaultChildren(d) {
19398           return d.children;
19399         }
19400
19401         function copyData(node) {
19402           node.data = node.data.data;
19403         }
19404
19405         function computeHeight(node) {
19406           var height = 0;
19407           do { node.height = height; }
19408           while ((node = node.parent) && (node.height < ++height));
19409         }
19410
19411         function Node(data) {
19412           this.data = data;
19413           this.depth =
19414           this.height = 0;
19415           this.parent = null;
19416         }
19417
19418         Node.prototype = hierarchy.prototype = {
19419           constructor: Node,
19420           count: node_count,
19421           each: node_each,
19422           eachAfter: node_eachAfter,
19423           eachBefore: node_eachBefore,
19424           sum: node_sum,
19425           sort: node_sort,
19426           path: node_path,
19427           ancestors: node_ancestors,
19428           descendants: node_descendants,
19429           leaves: node_leaves,
19430           links: node_links,
19431           copy: node_copy
19432         };
19433
19434         var slice$8 = Array.prototype.slice;
19435
19436         function shuffle$1(array) {
19437           var m = array.length,
19438               t,
19439               i;
19440
19441           while (m) {
19442             i = Math.random() * m-- | 0;
19443             t = array[m];
19444             array[m] = array[i];
19445             array[i] = t;
19446           }
19447
19448           return array;
19449         }
19450
19451         function enclose(circles) {
19452           var i = 0, n = (circles = shuffle$1(slice$8.call(circles))).length, B = [], p, e;
19453
19454           while (i < n) {
19455             p = circles[i];
19456             if (e && enclosesWeak(e, p)) { ++i; }
19457             else { e = encloseBasis(B = extendBasis(B, p)), i = 0; }
19458           }
19459
19460           return e;
19461         }
19462
19463         function extendBasis(B, p) {
19464           var i, j;
19465
19466           if (enclosesWeakAll(p, B)) { return [p]; }
19467
19468           // If we get here then B must have at least one element.
19469           for (i = 0; i < B.length; ++i) {
19470             if (enclosesNot(p, B[i])
19471                 && enclosesWeakAll(encloseBasis2(B[i], p), B)) {
19472               return [B[i], p];
19473             }
19474           }
19475
19476           // If we get here then B must have at least two elements.
19477           for (i = 0; i < B.length - 1; ++i) {
19478             for (j = i + 1; j < B.length; ++j) {
19479               if (enclosesNot(encloseBasis2(B[i], B[j]), p)
19480                   && enclosesNot(encloseBasis2(B[i], p), B[j])
19481                   && enclosesNot(encloseBasis2(B[j], p), B[i])
19482                   && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {
19483                 return [B[i], B[j], p];
19484               }
19485             }
19486           }
19487
19488           // If we get here then something is very wrong.
19489           throw new Error;
19490         }
19491
19492         function enclosesNot(a, b) {
19493           var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;
19494           return dr < 0 || dr * dr < dx * dx + dy * dy;
19495         }
19496
19497         function enclosesWeak(a, b) {
19498           var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;
19499           return dr > 0 && dr * dr > dx * dx + dy * dy;
19500         }
19501
19502         function enclosesWeakAll(a, B) {
19503           for (var i = 0; i < B.length; ++i) {
19504             if (!enclosesWeak(a, B[i])) {
19505               return false;
19506             }
19507           }
19508           return true;
19509         }
19510
19511         function encloseBasis(B) {
19512           switch (B.length) {
19513             case 1: return encloseBasis1(B[0]);
19514             case 2: return encloseBasis2(B[0], B[1]);
19515             case 3: return encloseBasis3(B[0], B[1], B[2]);
19516           }
19517         }
19518
19519         function encloseBasis1(a) {
19520           return {
19521             x: a.x,
19522             y: a.y,
19523             r: a.r
19524           };
19525         }
19526
19527         function encloseBasis2(a, b) {
19528           var x1 = a.x, y1 = a.y, r1 = a.r,
19529               x2 = b.x, y2 = b.y, r2 = b.r,
19530               x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
19531               l = Math.sqrt(x21 * x21 + y21 * y21);
19532           return {
19533             x: (x1 + x2 + x21 / l * r21) / 2,
19534             y: (y1 + y2 + y21 / l * r21) / 2,
19535             r: (l + r1 + r2) / 2
19536           };
19537         }
19538
19539         function encloseBasis3(a, b, c) {
19540           var x1 = a.x, y1 = a.y, r1 = a.r,
19541               x2 = b.x, y2 = b.y, r2 = b.r,
19542               x3 = c.x, y3 = c.y, r3 = c.r,
19543               a2 = x1 - x2,
19544               a3 = x1 - x3,
19545               b2 = y1 - y2,
19546               b3 = y1 - y3,
19547               c2 = r2 - r1,
19548               c3 = r3 - r1,
19549               d1 = x1 * x1 + y1 * y1 - r1 * r1,
19550               d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,
19551               d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,
19552               ab = a3 * b2 - a2 * b3,
19553               xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,
19554               xb = (b3 * c2 - b2 * c3) / ab,
19555               ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,
19556               yb = (a2 * c3 - a3 * c2) / ab,
19557               A = xb * xb + yb * yb - 1,
19558               B = 2 * (r1 + xa * xb + ya * yb),
19559               C = xa * xa + ya * ya - r1 * r1,
19560               r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);
19561           return {
19562             x: x1 + xa + xb * r,
19563             y: y1 + ya + yb * r,
19564             r: r
19565           };
19566         }
19567
19568         function place(b, a, c) {
19569           var dx = b.x - a.x, x, a2,
19570               dy = b.y - a.y, y, b2,
19571               d2 = dx * dx + dy * dy;
19572           if (d2) {
19573             a2 = a.r + c.r, a2 *= a2;
19574             b2 = b.r + c.r, b2 *= b2;
19575             if (a2 > b2) {
19576               x = (d2 + b2 - a2) / (2 * d2);
19577               y = Math.sqrt(Math.max(0, b2 / d2 - x * x));
19578               c.x = b.x - x * dx - y * dy;
19579               c.y = b.y - x * dy + y * dx;
19580             } else {
19581               x = (d2 + a2 - b2) / (2 * d2);
19582               y = Math.sqrt(Math.max(0, a2 / d2 - x * x));
19583               c.x = a.x + x * dx - y * dy;
19584               c.y = a.y + x * dy + y * dx;
19585             }
19586           } else {
19587             c.x = a.x + c.r;
19588             c.y = a.y;
19589           }
19590         }
19591
19592         function intersects(a, b) {
19593           var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;
19594           return dr > 0 && dr * dr > dx * dx + dy * dy;
19595         }
19596
19597         function score(node) {
19598           var a = node._,
19599               b = node.next._,
19600               ab = a.r + b.r,
19601               dx = (a.x * b.r + b.x * a.r) / ab,
19602               dy = (a.y * b.r + b.y * a.r) / ab;
19603           return dx * dx + dy * dy;
19604         }
19605
19606         function Node$1(circle) {
19607           this._ = circle;
19608           this.next = null;
19609           this.previous = null;
19610         }
19611
19612         function packEnclose(circles) {
19613           if (!(n = circles.length)) { return 0; }
19614
19615           var a, b, c, n, aa, ca, i, j, k, sj, sk;
19616
19617           // Place the first circle.
19618           a = circles[0], a.x = 0, a.y = 0;
19619           if (!(n > 1)) { return a.r; }
19620
19621           // Place the second circle.
19622           b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
19623           if (!(n > 2)) { return a.r + b.r; }
19624
19625           // Place the third circle.
19626           place(b, a, c = circles[2]);
19627
19628           // Initialize the front-chain using the first three circles a, b and c.
19629           a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
19630           a.next = c.previous = b;
19631           b.next = a.previous = c;
19632           c.next = b.previous = a;
19633
19634           // Attempt to place each remaining circle…
19635           pack: for (i = 3; i < n; ++i) {
19636             place(a._, b._, c = circles[i]), c = new Node$1(c);
19637
19638             // Find the closest intersecting circle on the front-chain, if any.
19639             // “Closeness” is determined by linear distance along the front-chain.
19640             // “Ahead” or “behind” is likewise determined by linear distance.
19641             j = b.next, k = a.previous, sj = b._.r, sk = a._.r;
19642             do {
19643               if (sj <= sk) {
19644                 if (intersects(j._, c._)) {
19645                   b = j, a.next = b, b.previous = a, --i;
19646                   continue pack;
19647                 }
19648                 sj += j._.r, j = j.next;
19649               } else {
19650                 if (intersects(k._, c._)) {
19651                   a = k, a.next = b, b.previous = a, --i;
19652                   continue pack;
19653                 }
19654                 sk += k._.r, k = k.previous;
19655               }
19656             } while (j !== k.next);
19657
19658             // Success! Insert the new circle c between a and b.
19659             c.previous = a, c.next = b, a.next = b.previous = b = c;
19660
19661             // Compute the new closest circle pair to the centroid.
19662             aa = score(a);
19663             while ((c = c.next) !== b) {
19664               if ((ca = score(c)) < aa) {
19665                 a = c, aa = ca;
19666               }
19667             }
19668             b = a.next;
19669           }
19670
19671           // Compute the enclosing circle of the front chain.
19672           a = [b._], c = b; while ((c = c.next) !== b) { a.push(c._); } c = enclose(a);
19673
19674           // Translate the circles to put the enclosing circle around the origin.
19675           for (i = 0; i < n; ++i) { a = circles[i], a.x -= c.x, a.y -= c.y; }
19676
19677           return c.r;
19678         }
19679
19680         function siblings(circles) {
19681           packEnclose(circles);
19682           return circles;
19683         }
19684
19685         function optional(f) {
19686           return f == null ? null : required(f);
19687         }
19688
19689         function required(f) {
19690           if (typeof f !== "function") { throw new Error; }
19691           return f;
19692         }
19693
19694         function constantZero() {
19695           return 0;
19696         }
19697
19698         function constant$9(x) {
19699           return function() {
19700             return x;
19701           };
19702         }
19703
19704         function defaultRadius$1(d) {
19705           return Math.sqrt(d.value);
19706         }
19707
19708         function index$1() {
19709           var radius = null,
19710               dx = 1,
19711               dy = 1,
19712               padding = constantZero;
19713
19714           function pack(root) {
19715             root.x = dx / 2, root.y = dy / 2;
19716             if (radius) {
19717               root.eachBefore(radiusLeaf(radius))
19718                   .eachAfter(packChildren(padding, 0.5))
19719                   .eachBefore(translateChild(1));
19720             } else {
19721               root.eachBefore(radiusLeaf(defaultRadius$1))
19722                   .eachAfter(packChildren(constantZero, 1))
19723                   .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
19724                   .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
19725             }
19726             return root;
19727           }
19728
19729           pack.radius = function(x) {
19730             return arguments.length ? (radius = optional(x), pack) : radius;
19731           };
19732
19733           pack.size = function(x) {
19734             return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
19735           };
19736
19737           pack.padding = function(x) {
19738             return arguments.length ? (padding = typeof x === "function" ? x : constant$9(+x), pack) : padding;
19739           };
19740
19741           return pack;
19742         }
19743
19744         function radiusLeaf(radius) {
19745           return function(node) {
19746             if (!node.children) {
19747               node.r = Math.max(0, +radius(node) || 0);
19748             }
19749           };
19750         }
19751
19752         function packChildren(padding, k) {
19753           return function(node) {
19754             if (children = node.children) {
19755               var children,
19756                   i,
19757                   n = children.length,
19758                   r = padding(node) * k || 0,
19759                   e;
19760
19761               if (r) { for (i = 0; i < n; ++i) { children[i].r += r; } }
19762               e = packEnclose(children);
19763               if (r) { for (i = 0; i < n; ++i) { children[i].r -= r; } }
19764               node.r = e + r;
19765             }
19766           };
19767         }
19768
19769         function translateChild(k) {
19770           return function(node) {
19771             var parent = node.parent;
19772             node.r *= k;
19773             if (parent) {
19774               node.x = parent.x + k * node.x;
19775               node.y = parent.y + k * node.y;
19776             }
19777           };
19778         }
19779
19780         function roundNode(node) {
19781           node.x0 = Math.round(node.x0);
19782           node.y0 = Math.round(node.y0);
19783           node.x1 = Math.round(node.x1);
19784           node.y1 = Math.round(node.y1);
19785         }
19786
19787         function treemapDice(parent, x0, y0, x1, y1) {
19788           var nodes = parent.children,
19789               node,
19790               i = -1,
19791               n = nodes.length,
19792               k = parent.value && (x1 - x0) / parent.value;
19793
19794           while (++i < n) {
19795             node = nodes[i], node.y0 = y0, node.y1 = y1;
19796             node.x0 = x0, node.x1 = x0 += node.value * k;
19797           }
19798         }
19799
19800         function partition() {
19801           var dx = 1,
19802               dy = 1,
19803               padding = 0,
19804               round = false;
19805
19806           function partition(root) {
19807             var n = root.height + 1;
19808             root.x0 =
19809             root.y0 = padding;
19810             root.x1 = dx;
19811             root.y1 = dy / n;
19812             root.eachBefore(positionNode(dy, n));
19813             if (round) { root.eachBefore(roundNode); }
19814             return root;
19815           }
19816
19817           function positionNode(dy, n) {
19818             return function(node) {
19819               if (node.children) {
19820                 treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
19821               }
19822               var x0 = node.x0,
19823                   y0 = node.y0,
19824                   x1 = node.x1 - padding,
19825                   y1 = node.y1 - padding;
19826               if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
19827               if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
19828               node.x0 = x0;
19829               node.y0 = y0;
19830               node.x1 = x1;
19831               node.y1 = y1;
19832             };
19833           }
19834
19835           partition.round = function(x) {
19836             return arguments.length ? (round = !!x, partition) : round;
19837           };
19838
19839           partition.size = function(x) {
19840             return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
19841           };
19842
19843           partition.padding = function(x) {
19844             return arguments.length ? (padding = +x, partition) : padding;
19845           };
19846
19847           return partition;
19848         }
19849
19850         var keyPrefix$1 = "$", // Protect against keys like “__proto__”.
19851             preroot = {depth: -1},
19852             ambiguous = {};
19853
19854         function defaultId(d) {
19855           return d.id;
19856         }
19857
19858         function defaultParentId(d) {
19859           return d.parentId;
19860         }
19861
19862         function stratify() {
19863           var id = defaultId,
19864               parentId = defaultParentId;
19865
19866           function stratify(data) {
19867             var d,
19868                 i,
19869                 n = data.length,
19870                 root,
19871                 parent,
19872                 node,
19873                 nodes = new Array(n),
19874                 nodeId,
19875                 nodeKey,
19876                 nodeByKey = {};
19877
19878             for (i = 0; i < n; ++i) {
19879               d = data[i], node = nodes[i] = new Node(d);
19880               if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
19881                 nodeKey = keyPrefix$1 + (node.id = nodeId);
19882                 nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
19883               }
19884             }
19885
19886             for (i = 0; i < n; ++i) {
19887               node = nodes[i], nodeId = parentId(data[i], i, data);
19888               if (nodeId == null || !(nodeId += "")) {
19889                 if (root) { throw new Error("multiple roots"); }
19890                 root = node;
19891               } else {
19892                 parent = nodeByKey[keyPrefix$1 + nodeId];
19893                 if (!parent) { throw new Error("missing: " + nodeId); }
19894                 if (parent === ambiguous) { throw new Error("ambiguous: " + nodeId); }
19895                 if (parent.children) { parent.children.push(node); }
19896                 else { parent.children = [node]; }
19897                 node.parent = parent;
19898               }
19899             }
19900
19901             if (!root) { throw new Error("no root"); }
19902             root.parent = preroot;
19903             root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
19904             root.parent = null;
19905             if (n > 0) { throw new Error("cycle"); }
19906
19907             return root;
19908           }
19909
19910           stratify.id = function(x) {
19911             return arguments.length ? (id = required(x), stratify) : id;
19912           };
19913
19914           stratify.parentId = function(x) {
19915             return arguments.length ? (parentId = required(x), stratify) : parentId;
19916           };
19917
19918           return stratify;
19919         }
19920
19921         function defaultSeparation$1(a, b) {
19922           return a.parent === b.parent ? 1 : 2;
19923         }
19924
19925         // function radialSeparation(a, b) {
19926         //   return (a.parent === b.parent ? 1 : 2) / a.depth;
19927         // }
19928
19929         // This function is used to traverse the left contour of a subtree (or
19930         // subforest). It returns the successor of v on this contour. This successor is
19931         // either given by the leftmost child of v or by the thread of v. The function
19932         // returns null if and only if v is on the highest level of its subtree.
19933         function nextLeft(v) {
19934           var children = v.children;
19935           return children ? children[0] : v.t;
19936         }
19937
19938         // This function works analogously to nextLeft.
19939         function nextRight(v) {
19940           var children = v.children;
19941           return children ? children[children.length - 1] : v.t;
19942         }
19943
19944         // Shifts the current subtree rooted at w+. This is done by increasing
19945         // prelim(w+) and mod(w+) by shift.
19946         function moveSubtree(wm, wp, shift) {
19947           var change = shift / (wp.i - wm.i);
19948           wp.c -= change;
19949           wp.s += shift;
19950           wm.c += change;
19951           wp.z += shift;
19952           wp.m += shift;
19953         }
19954
19955         // All other shifts, applied to the smaller subtrees between w- and w+, are
19956         // performed by this function. To prepare the shifts, we have to adjust
19957         // change(w+), shift(w+), and change(w-).
19958         function executeShifts(v) {
19959           var shift = 0,
19960               change = 0,
19961               children = v.children,
19962               i = children.length,
19963               w;
19964           while (--i >= 0) {
19965             w = children[i];
19966             w.z += shift;
19967             w.m += shift;
19968             shift += w.s + (change += w.c);
19969           }
19970         }
19971
19972         // If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
19973         // returns the specified (default) ancestor.
19974         function nextAncestor(vim, v, ancestor) {
19975           return vim.a.parent === v.parent ? vim.a : ancestor;
19976         }
19977
19978         function TreeNode(node, i) {
19979           this._ = node;
19980           this.parent = null;
19981           this.children = null;
19982           this.A = null; // default ancestor
19983           this.a = this; // ancestor
19984           this.z = 0; // prelim
19985           this.m = 0; // mod
19986           this.c = 0; // change
19987           this.s = 0; // shift
19988           this.t = null; // thread
19989           this.i = i; // number
19990         }
19991
19992         TreeNode.prototype = Object.create(Node.prototype);
19993
19994         function treeRoot(root) {
19995           var tree = new TreeNode(root, 0),
19996               node,
19997               nodes = [tree],
19998               child,
19999               children,
20000               i,
20001               n;
20002
20003           while (node = nodes.pop()) {
20004             if (children = node._.children) {
20005               node.children = new Array(n = children.length);
20006               for (i = n - 1; i >= 0; --i) {
20007                 nodes.push(child = node.children[i] = new TreeNode(children[i], i));
20008                 child.parent = node;
20009               }
20010             }
20011           }
20012
20013           (tree.parent = new TreeNode(null, 0)).children = [tree];
20014           return tree;
20015         }
20016
20017         // Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
20018         function tree() {
20019           var separation = defaultSeparation$1,
20020               dx = 1,
20021               dy = 1,
20022               nodeSize = null;
20023
20024           function tree(root) {
20025             var t = treeRoot(root);
20026
20027             // Compute the layout using Buchheim et al.’s algorithm.
20028             t.eachAfter(firstWalk), t.parent.m = -t.z;
20029             t.eachBefore(secondWalk);
20030
20031             // If a fixed node size is specified, scale x and y.
20032             if (nodeSize) { root.eachBefore(sizeNode); }
20033
20034             // If a fixed tree size is specified, scale x and y based on the extent.
20035             // Compute the left-most, right-most, and depth-most nodes for extents.
20036             else {
20037               var left = root,
20038                   right = root,
20039                   bottom = root;
20040               root.eachBefore(function(node) {
20041                 if (node.x < left.x) { left = node; }
20042                 if (node.x > right.x) { right = node; }
20043                 if (node.depth > bottom.depth) { bottom = node; }
20044               });
20045               var s = left === right ? 1 : separation(left, right) / 2,
20046                   tx = s - left.x,
20047                   kx = dx / (right.x + s + tx),
20048                   ky = dy / (bottom.depth || 1);
20049               root.eachBefore(function(node) {
20050                 node.x = (node.x + tx) * kx;
20051                 node.y = node.depth * ky;
20052               });
20053             }
20054
20055             return root;
20056           }
20057
20058           // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
20059           // applied recursively to the children of v, as well as the function
20060           // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
20061           // node v is placed to the midpoint of its outermost children.
20062           function firstWalk(v) {
20063             var children = v.children,
20064                 siblings = v.parent.children,
20065                 w = v.i ? siblings[v.i - 1] : null;
20066             if (children) {
20067               executeShifts(v);
20068               var midpoint = (children[0].z + children[children.length - 1].z) / 2;
20069               if (w) {
20070                 v.z = w.z + separation(v._, w._);
20071                 v.m = v.z - midpoint;
20072               } else {
20073                 v.z = midpoint;
20074               }
20075             } else if (w) {
20076               v.z = w.z + separation(v._, w._);
20077             }
20078             v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
20079           }
20080
20081           // Computes all real x-coordinates by summing up the modifiers recursively.
20082           function secondWalk(v) {
20083             v._.x = v.z + v.parent.m;
20084             v.m += v.parent.m;
20085           }
20086
20087           // The core of the algorithm. Here, a new subtree is combined with the
20088           // previous subtrees. Threads are used to traverse the inside and outside
20089           // contours of the left and right subtree up to the highest common level. The
20090           // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
20091           // superscript o means outside and i means inside, the subscript - means left
20092           // subtree and + means right subtree. For summing up the modifiers along the
20093           // contour, we use respective variables si+, si-, so-, and so+. Whenever two
20094           // nodes of the inside contours conflict, we compute the left one of the
20095           // greatest uncommon ancestors using the function ANCESTOR and call MOVE
20096           // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
20097           // Finally, we add a new thread (if necessary).
20098           function apportion(v, w, ancestor) {
20099             if (w) {
20100               var vip = v,
20101                   vop = v,
20102                   vim = w,
20103                   vom = vip.parent.children[0],
20104                   sip = vip.m,
20105                   sop = vop.m,
20106                   sim = vim.m,
20107                   som = vom.m,
20108                   shift;
20109               while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
20110                 vom = nextLeft(vom);
20111                 vop = nextRight(vop);
20112                 vop.a = v;
20113                 shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
20114                 if (shift > 0) {
20115                   moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
20116                   sip += shift;
20117                   sop += shift;
20118                 }
20119                 sim += vim.m;
20120                 sip += vip.m;
20121                 som += vom.m;
20122                 sop += vop.m;
20123               }
20124               if (vim && !nextRight(vop)) {
20125                 vop.t = vim;
20126                 vop.m += sim - sop;
20127               }
20128               if (vip && !nextLeft(vom)) {
20129                 vom.t = vip;
20130                 vom.m += sip - som;
20131                 ancestor = v;
20132               }
20133             }
20134             return ancestor;
20135           }
20136
20137           function sizeNode(node) {
20138             node.x *= dx;
20139             node.y = node.depth * dy;
20140           }
20141
20142           tree.separation = function(x) {
20143             return arguments.length ? (separation = x, tree) : separation;
20144           };
20145
20146           tree.size = function(x) {
20147             return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
20148           };
20149
20150           tree.nodeSize = function(x) {
20151             return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
20152           };
20153
20154           return tree;
20155         }
20156
20157         function treemapSlice(parent, x0, y0, x1, y1) {
20158           var nodes = parent.children,
20159               node,
20160               i = -1,
20161               n = nodes.length,
20162               k = parent.value && (y1 - y0) / parent.value;
20163
20164           while (++i < n) {
20165             node = nodes[i], node.x0 = x0, node.x1 = x1;
20166             node.y0 = y0, node.y1 = y0 += node.value * k;
20167           }
20168         }
20169
20170         var phi = (1 + Math.sqrt(5)) / 2;
20171
20172         function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
20173           var rows = [],
20174               nodes = parent.children,
20175               row,
20176               nodeValue,
20177               i0 = 0,
20178               i1 = 0,
20179               n = nodes.length,
20180               dx, dy,
20181               value = parent.value,
20182               sumValue,
20183               minValue,
20184               maxValue,
20185               newRatio,
20186               minRatio,
20187               alpha,
20188               beta;
20189
20190           while (i0 < n) {
20191             dx = x1 - x0, dy = y1 - y0;
20192
20193             // Find the next non-empty node.
20194             do { sumValue = nodes[i1++].value; } while (!sumValue && i1 < n);
20195             minValue = maxValue = sumValue;
20196             alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
20197             beta = sumValue * sumValue * alpha;
20198             minRatio = Math.max(maxValue / beta, beta / minValue);
20199
20200             // Keep adding nodes while the aspect ratio maintains or improves.
20201             for (; i1 < n; ++i1) {
20202               sumValue += nodeValue = nodes[i1].value;
20203               if (nodeValue < minValue) { minValue = nodeValue; }
20204               if (nodeValue > maxValue) { maxValue = nodeValue; }
20205               beta = sumValue * sumValue * alpha;
20206               newRatio = Math.max(maxValue / beta, beta / minValue);
20207               if (newRatio > minRatio) { sumValue -= nodeValue; break; }
20208               minRatio = newRatio;
20209             }
20210
20211             // Position and record the row orientation.
20212             rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
20213             if (row.dice) { treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); }
20214             else { treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); }
20215             value -= sumValue, i0 = i1;
20216           }
20217
20218           return rows;
20219         }
20220
20221         var squarify = (function custom(ratio) {
20222
20223           function squarify(parent, x0, y0, x1, y1) {
20224             squarifyRatio(ratio, parent, x0, y0, x1, y1);
20225           }
20226
20227           squarify.ratio = function(x) {
20228             return custom((x = +x) > 1 ? x : 1);
20229           };
20230
20231           return squarify;
20232         })(phi);
20233
20234         function index$2() {
20235           var tile = squarify,
20236               round = false,
20237               dx = 1,
20238               dy = 1,
20239               paddingStack = [0],
20240               paddingInner = constantZero,
20241               paddingTop = constantZero,
20242               paddingRight = constantZero,
20243               paddingBottom = constantZero,
20244               paddingLeft = constantZero;
20245
20246           function treemap(root) {
20247             root.x0 =
20248             root.y0 = 0;
20249             root.x1 = dx;
20250             root.y1 = dy;
20251             root.eachBefore(positionNode);
20252             paddingStack = [0];
20253             if (round) { root.eachBefore(roundNode); }
20254             return root;
20255           }
20256
20257           function positionNode(node) {
20258             var p = paddingStack[node.depth],
20259                 x0 = node.x0 + p,
20260                 y0 = node.y0 + p,
20261                 x1 = node.x1 - p,
20262                 y1 = node.y1 - p;
20263             if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
20264             if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
20265             node.x0 = x0;
20266             node.y0 = y0;
20267             node.x1 = x1;
20268             node.y1 = y1;
20269             if (node.children) {
20270               p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
20271               x0 += paddingLeft(node) - p;
20272               y0 += paddingTop(node) - p;
20273               x1 -= paddingRight(node) - p;
20274               y1 -= paddingBottom(node) - p;
20275               if (x1 < x0) { x0 = x1 = (x0 + x1) / 2; }
20276               if (y1 < y0) { y0 = y1 = (y0 + y1) / 2; }
20277               tile(node, x0, y0, x1, y1);
20278             }
20279           }
20280
20281           treemap.round = function(x) {
20282             return arguments.length ? (round = !!x, treemap) : round;
20283           };
20284
20285           treemap.size = function(x) {
20286             return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
20287           };
20288
20289           treemap.tile = function(x) {
20290             return arguments.length ? (tile = required(x), treemap) : tile;
20291           };
20292
20293           treemap.padding = function(x) {
20294             return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
20295           };
20296
20297           treemap.paddingInner = function(x) {
20298             return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$9(+x), treemap) : paddingInner;
20299           };
20300
20301           treemap.paddingOuter = function(x) {
20302             return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
20303           };
20304
20305           treemap.paddingTop = function(x) {
20306             return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$9(+x), treemap) : paddingTop;
20307           };
20308
20309           treemap.paddingRight = function(x) {
20310             return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$9(+x), treemap) : paddingRight;
20311           };
20312
20313           treemap.paddingBottom = function(x) {
20314             return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$9(+x), treemap) : paddingBottom;
20315           };
20316
20317           treemap.paddingLeft = function(x) {
20318             return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$9(+x), treemap) : paddingLeft;
20319           };
20320
20321           return treemap;
20322         }
20323
20324         function binary(parent, x0, y0, x1, y1) {
20325           var nodes = parent.children,
20326               i, n = nodes.length,
20327               sum, sums = new Array(n + 1);
20328
20329           for (sums[0] = sum = i = 0; i < n; ++i) {
20330             sums[i + 1] = sum += nodes[i].value;
20331           }
20332
20333           partition(0, n, parent.value, x0, y0, x1, y1);
20334
20335           function partition(i, j, value, x0, y0, x1, y1) {
20336             if (i >= j - 1) {
20337               var node = nodes[i];
20338               node.x0 = x0, node.y0 = y0;
20339               node.x1 = x1, node.y1 = y1;
20340               return;
20341             }
20342
20343             var valueOffset = sums[i],
20344                 valueTarget = (value / 2) + valueOffset,
20345                 k = i + 1,
20346                 hi = j - 1;
20347
20348             while (k < hi) {
20349               var mid = k + hi >>> 1;
20350               if (sums[mid] < valueTarget) { k = mid + 1; }
20351               else { hi = mid; }
20352             }
20353
20354             if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) { --k; }
20355
20356             var valueLeft = sums[k] - valueOffset,
20357                 valueRight = value - valueLeft;
20358
20359             if ((x1 - x0) > (y1 - y0)) {
20360               var xk = (x0 * valueRight + x1 * valueLeft) / value;
20361               partition(i, k, valueLeft, x0, y0, xk, y1);
20362               partition(k, j, valueRight, xk, y0, x1, y1);
20363             } else {
20364               var yk = (y0 * valueRight + y1 * valueLeft) / value;
20365               partition(i, k, valueLeft, x0, y0, x1, yk);
20366               partition(k, j, valueRight, x0, yk, x1, y1);
20367             }
20368           }
20369         }
20370
20371         function sliceDice(parent, x0, y0, x1, y1) {
20372           (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
20373         }
20374
20375         var resquarify = (function custom(ratio) {
20376
20377           function resquarify(parent, x0, y0, x1, y1) {
20378             if ((rows = parent._squarify) && (rows.ratio === ratio)) {
20379               var rows,
20380                   row,
20381                   nodes,
20382                   i,
20383                   j = -1,
20384                   n,
20385                   m = rows.length,
20386                   value = parent.value;
20387
20388               while (++j < m) {
20389                 row = rows[j], nodes = row.children;
20390                 for (i = row.value = 0, n = nodes.length; i < n; ++i) { row.value += nodes[i].value; }
20391                 if (row.dice) { treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); }
20392                 else { treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); }
20393                 value -= row.value;
20394               }
20395             } else {
20396               parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
20397               rows.ratio = ratio;
20398             }
20399           }
20400
20401           resquarify.ratio = function(x) {
20402             return custom((x = +x) > 1 ? x : 1);
20403           };
20404
20405           return resquarify;
20406         })(phi);
20407
20408         function d3_polygonArea(polygon) {
20409           var i = -1,
20410               n = polygon.length,
20411               a,
20412               b = polygon[n - 1],
20413               area = 0;
20414
20415           while (++i < n) {
20416             a = b;
20417             b = polygon[i];
20418             area += a[1] * b[0] - a[0] * b[1];
20419           }
20420
20421           return area / 2;
20422         }
20423
20424         function d3_polygonCentroid(polygon) {
20425           var i = -1,
20426               n = polygon.length,
20427               x = 0,
20428               y = 0,
20429               a,
20430               b = polygon[n - 1],
20431               c,
20432               k = 0;
20433
20434           while (++i < n) {
20435             a = b;
20436             b = polygon[i];
20437             k += c = a[0] * b[1] - b[0] * a[1];
20438             x += (a[0] + b[0]) * c;
20439             y += (a[1] + b[1]) * c;
20440           }
20441
20442           return k *= 3, [x / k, y / k];
20443         }
20444
20445         // Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
20446         // the 3D cross product in a quadrant I Cartesian coordinate system (+x is
20447         // right, +y is up). Returns a positive value if ABC is counter-clockwise,
20448         // negative if clockwise, and zero if the points are collinear.
20449         function cross$1(a, b, c) {
20450           return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
20451         }
20452
20453         function lexicographicOrder(a, b) {
20454           return a[0] - b[0] || a[1] - b[1];
20455         }
20456
20457         // Computes the upper convex hull per the monotone chain algorithm.
20458         // Assumes points.length >= 3, is sorted by x, unique in y.
20459         // Returns an array of indices into points in left-to-right order.
20460         function computeUpperHullIndexes(points) {
20461           var n = points.length,
20462               indexes = [0, 1],
20463               size = 2;
20464
20465           for (var i = 2; i < n; ++i) {
20466             while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) { --size; }
20467             indexes[size++] = i;
20468           }
20469
20470           return indexes.slice(0, size); // remove popped points
20471         }
20472
20473         function d3_polygonHull(points) {
20474           if ((n = points.length) < 3) { return null; }
20475
20476           var i,
20477               n,
20478               sortedPoints = new Array(n),
20479               flippedPoints = new Array(n);
20480
20481           for (i = 0; i < n; ++i) { sortedPoints[i] = [+points[i][0], +points[i][1], i]; }
20482           sortedPoints.sort(lexicographicOrder);
20483           for (i = 0; i < n; ++i) { flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; }
20484
20485           var upperIndexes = computeUpperHullIndexes(sortedPoints),
20486               lowerIndexes = computeUpperHullIndexes(flippedPoints);
20487
20488           // Construct the hull polygon, removing possible duplicate endpoints.
20489           var skipLeft = lowerIndexes[0] === upperIndexes[0],
20490               skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
20491               hull = [];
20492
20493           // Add upper hull in right-to-l order.
20494           // Then add lower hull in left-to-right order.
20495           for (i = upperIndexes.length - 1; i >= 0; --i) { hull.push(points[sortedPoints[upperIndexes[i]][2]]); }
20496           for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) { hull.push(points[sortedPoints[lowerIndexes[i]][2]]); }
20497
20498           return hull;
20499         }
20500
20501         function contains$3(polygon, point) {
20502           var n = polygon.length,
20503               p = polygon[n - 1],
20504               x = point[0], y = point[1],
20505               x0 = p[0], y0 = p[1],
20506               x1, y1,
20507               inside = false;
20508
20509           for (var i = 0; i < n; ++i) {
20510             p = polygon[i], x1 = p[0], y1 = p[1];
20511             if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) { inside = !inside; }
20512             x0 = x1, y0 = y1;
20513           }
20514
20515           return inside;
20516         }
20517
20518         function length$1(polygon) {
20519           var i = -1,
20520               n = polygon.length,
20521               b = polygon[n - 1],
20522               xa,
20523               ya,
20524               xb = b[0],
20525               yb = b[1],
20526               perimeter = 0;
20527
20528           while (++i < n) {
20529             xa = xb;
20530             ya = yb;
20531             b = polygon[i];
20532             xb = b[0];
20533             yb = b[1];
20534             xa -= xb;
20535             ya -= yb;
20536             perimeter += Math.sqrt(xa * xa + ya * ya);
20537           }
20538
20539           return perimeter;
20540         }
20541
20542         function defaultSource$1() {
20543           return Math.random();
20544         }
20545
20546         var uniform = (function sourceRandomUniform(source) {
20547           function randomUniform(min, max) {
20548             min = min == null ? 0 : +min;
20549             max = max == null ? 1 : +max;
20550             if (arguments.length === 1) { max = min, min = 0; }
20551             else { max -= min; }
20552             return function() {
20553               return source() * max + min;
20554             };
20555           }
20556
20557           randomUniform.source = sourceRandomUniform;
20558
20559           return randomUniform;
20560         })(defaultSource$1);
20561
20562         var normal = (function sourceRandomNormal(source) {
20563           function randomNormal(mu, sigma) {
20564             var x, r;
20565             mu = mu == null ? 0 : +mu;
20566             sigma = sigma == null ? 1 : +sigma;
20567             return function() {
20568               var y;
20569
20570               // If available, use the second previously-generated uniform random.
20571               if (x != null) { y = x, x = null; }
20572
20573               // Otherwise, generate a new x and y.
20574               else { do {
20575                 x = source() * 2 - 1;
20576                 y = source() * 2 - 1;
20577                 r = x * x + y * y;
20578               } while (!r || r > 1); }
20579
20580               return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
20581             };
20582           }
20583
20584           randomNormal.source = sourceRandomNormal;
20585
20586           return randomNormal;
20587         })(defaultSource$1);
20588
20589         var logNormal = (function sourceRandomLogNormal(source) {
20590           function randomLogNormal() {
20591             var randomNormal = normal.source(source).apply(this, arguments);
20592             return function() {
20593               return Math.exp(randomNormal());
20594             };
20595           }
20596
20597           randomLogNormal.source = sourceRandomLogNormal;
20598
20599           return randomLogNormal;
20600         })(defaultSource$1);
20601
20602         var irwinHall = (function sourceRandomIrwinHall(source) {
20603           function randomIrwinHall(n) {
20604             return function() {
20605               for (var sum = 0, i = 0; i < n; ++i) { sum += source(); }
20606               return sum;
20607             };
20608           }
20609
20610           randomIrwinHall.source = sourceRandomIrwinHall;
20611
20612           return randomIrwinHall;
20613         })(defaultSource$1);
20614
20615         var bates = (function sourceRandomBates(source) {
20616           function randomBates(n) {
20617             var randomIrwinHall = irwinHall.source(source)(n);
20618             return function() {
20619               return randomIrwinHall() / n;
20620             };
20621           }
20622
20623           randomBates.source = sourceRandomBates;
20624
20625           return randomBates;
20626         })(defaultSource$1);
20627
20628         var exponential$1 = (function sourceRandomExponential(source) {
20629           function randomExponential(lambda) {
20630             return function() {
20631               return -Math.log(1 - source()) / lambda;
20632             };
20633           }
20634
20635           randomExponential.source = sourceRandomExponential;
20636
20637           return randomExponential;
20638         })(defaultSource$1);
20639
20640         function initRange(domain, range) {
20641           switch (arguments.length) {
20642             case 0: break;
20643             case 1: this.range(domain); break;
20644             default: this.range(range).domain(domain); break;
20645           }
20646           return this;
20647         }
20648
20649         function initInterpolator(domain, interpolator) {
20650           switch (arguments.length) {
20651             case 0: break;
20652             case 1: this.interpolator(domain); break;
20653             default: this.interpolator(interpolator).domain(domain); break;
20654           }
20655           return this;
20656         }
20657
20658         var array$4 = Array.prototype;
20659
20660         var map$5 = array$4.map;
20661         var slice$9 = array$4.slice;
20662
20663         var implicit = {name: "implicit"};
20664
20665         function ordinal() {
20666           var index = map$3(),
20667               domain = [],
20668               range = [],
20669               unknown = implicit;
20670
20671           function scale(d) {
20672             var key = d + "", i = index.get(key);
20673             if (!i) {
20674               if (unknown !== implicit) { return unknown; }
20675               index.set(key, i = domain.push(d));
20676             }
20677             return range[(i - 1) % range.length];
20678           }
20679
20680           scale.domain = function(_) {
20681             if (!arguments.length) { return domain.slice(); }
20682             domain = [], index = map$3();
20683             var i = -1, n = _.length, d, key;
20684             while (++i < n) { if (!index.has(key = (d = _[i]) + "")) { index.set(key, domain.push(d)); } }
20685             return scale;
20686           };
20687
20688           scale.range = function(_) {
20689             return arguments.length ? (range = slice$9.call(_), scale) : range.slice();
20690           };
20691
20692           scale.unknown = function(_) {
20693             return arguments.length ? (unknown = _, scale) : unknown;
20694           };
20695
20696           scale.copy = function() {
20697             return ordinal(domain, range).unknown(unknown);
20698           };
20699
20700           initRange.apply(scale, arguments);
20701
20702           return scale;
20703         }
20704
20705         function band() {
20706           var scale = ordinal().unknown(undefined),
20707               domain = scale.domain,
20708               ordinalRange = scale.range,
20709               range = [0, 1],
20710               step,
20711               bandwidth,
20712               round = false,
20713               paddingInner = 0,
20714               paddingOuter = 0,
20715               align = 0.5;
20716
20717           delete scale.unknown;
20718
20719           function rescale() {
20720             var n = domain().length,
20721                 reverse = range[1] < range[0],
20722                 start = range[reverse - 0],
20723                 stop = range[1 - reverse];
20724             step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
20725             if (round) { step = Math.floor(step); }
20726             start += (stop - start - step * (n - paddingInner)) * align;
20727             bandwidth = step * (1 - paddingInner);
20728             if (round) { start = Math.round(start), bandwidth = Math.round(bandwidth); }
20729             var values = d3_range(n).map(function(i) { return start + step * i; });
20730             return ordinalRange(reverse ? values.reverse() : values);
20731           }
20732
20733           scale.domain = function(_) {
20734             return arguments.length ? (domain(_), rescale()) : domain();
20735           };
20736
20737           scale.range = function(_) {
20738             return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
20739           };
20740
20741           scale.rangeRound = function(_) {
20742             return range = [+_[0], +_[1]], round = true, rescale();
20743           };
20744
20745           scale.bandwidth = function() {
20746             return bandwidth;
20747           };
20748
20749           scale.step = function() {
20750             return step;
20751           };
20752
20753           scale.round = function(_) {
20754             return arguments.length ? (round = !!_, rescale()) : round;
20755           };
20756
20757           scale.padding = function(_) {
20758             return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;
20759           };
20760
20761           scale.paddingInner = function(_) {
20762             return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;
20763           };
20764
20765           scale.paddingOuter = function(_) {
20766             return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;
20767           };
20768
20769           scale.align = function(_) {
20770             return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
20771           };
20772
20773           scale.copy = function() {
20774             return band(domain(), range)
20775                 .round(round)
20776                 .paddingInner(paddingInner)
20777                 .paddingOuter(paddingOuter)
20778                 .align(align);
20779           };
20780
20781           return initRange.apply(rescale(), arguments);
20782         }
20783
20784         function pointish(scale) {
20785           var copy = scale.copy;
20786
20787           scale.padding = scale.paddingOuter;
20788           delete scale.paddingInner;
20789           delete scale.paddingOuter;
20790
20791           scale.copy = function() {
20792             return pointish(copy());
20793           };
20794
20795           return scale;
20796         }
20797
20798         function point$1() {
20799           return pointish(band.apply(null, arguments).paddingInner(1));
20800         }
20801
20802         function constant$a(x) {
20803           return function() {
20804             return x;
20805           };
20806         }
20807
20808         function number$2(x) {
20809           return +x;
20810         }
20811
20812         var unit = [0, 1];
20813
20814         function identity$5(x) {
20815           return x;
20816         }
20817
20818         function normalize(a, b) {
20819           return (b -= (a = +a))
20820               ? function(x) { return (x - a) / b; }
20821               : constant$a(isNaN(b) ? NaN : 0.5);
20822         }
20823
20824         function clamper(domain) {
20825           var a = domain[0], b = domain[domain.length - 1], t;
20826           if (a > b) { t = a, a = b, b = t; }
20827           return function(x) { return Math.max(a, Math.min(b, x)); };
20828         }
20829
20830         // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
20831         // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
20832         function bimap(domain, range, interpolate) {
20833           var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
20834           if (d1 < d0) { d0 = normalize(d1, d0), r0 = interpolate(r1, r0); }
20835           else { d0 = normalize(d0, d1), r0 = interpolate(r0, r1); }
20836           return function(x) { return r0(d0(x)); };
20837         }
20838
20839         function polymap(domain, range, interpolate) {
20840           var j = Math.min(domain.length, range.length) - 1,
20841               d = new Array(j),
20842               r = new Array(j),
20843               i = -1;
20844
20845           // Reverse descending domains.
20846           if (domain[j] < domain[0]) {
20847             domain = domain.slice().reverse();
20848             range = range.slice().reverse();
20849           }
20850
20851           while (++i < j) {
20852             d[i] = normalize(domain[i], domain[i + 1]);
20853             r[i] = interpolate(range[i], range[i + 1]);
20854           }
20855
20856           return function(x) {
20857             var i = bisectRight(domain, x, 1, j) - 1;
20858             return r[i](d[i](x));
20859           };
20860         }
20861
20862         function copy$1(source, target) {
20863           return target
20864               .domain(source.domain())
20865               .range(source.range())
20866               .interpolate(source.interpolate())
20867               .clamp(source.clamp())
20868               .unknown(source.unknown());
20869         }
20870
20871         function transformer$1() {
20872           var domain = unit,
20873               range = unit,
20874               interpolate = d3_interpolate,
20875               transform,
20876               untransform,
20877               unknown,
20878               clamp = identity$5,
20879               piecewise,
20880               output,
20881               input;
20882
20883           function rescale() {
20884             piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
20885             output = input = null;
20886             return scale;
20887           }
20888
20889           function scale(x) {
20890             return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
20891           }
20892
20893           scale.invert = function(y) {
20894             return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3_interpolateNumber)))(y)));
20895           };
20896
20897           scale.domain = function(_) {
20898             return arguments.length ? (domain = map$5.call(_, number$2), clamp === identity$5 || (clamp = clamper(domain)), rescale()) : domain.slice();
20899           };
20900
20901           scale.range = function(_) {
20902             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
20903           };
20904
20905           scale.rangeRound = function(_) {
20906             return range = slice$9.call(_), interpolate = interpolateRound, rescale();
20907           };
20908
20909           scale.clamp = function(_) {
20910             return arguments.length ? (clamp = _ ? clamper(domain) : identity$5, scale) : clamp !== identity$5;
20911           };
20912
20913           scale.interpolate = function(_) {
20914             return arguments.length ? (interpolate = _, rescale()) : interpolate;
20915           };
20916
20917           scale.unknown = function(_) {
20918             return arguments.length ? (unknown = _, scale) : unknown;
20919           };
20920
20921           return function(t, u) {
20922             transform = t, untransform = u;
20923             return rescale();
20924           };
20925         }
20926
20927         function continuous(transform, untransform) {
20928           return transformer$1()(transform, untransform);
20929         }
20930
20931         function tickFormat(start, stop, count, specifier) {
20932           var step = tickStep(start, stop, count),
20933               precision;
20934           specifier = formatSpecifier(specifier == null ? ",f" : specifier);
20935           switch (specifier.type) {
20936             case "s": {
20937               var value = Math.max(Math.abs(start), Math.abs(stop));
20938               if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) { specifier.precision = precision; }
20939               return formatPrefix(specifier, value);
20940             }
20941             case "":
20942             case "e":
20943             case "g":
20944             case "p":
20945             case "r": {
20946               if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) { specifier.precision = precision - (specifier.type === "e"); }
20947               break;
20948             }
20949             case "f":
20950             case "%": {
20951               if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) { specifier.precision = precision - (specifier.type === "%") * 2; }
20952               break;
20953             }
20954           }
20955           return format(specifier);
20956         }
20957
20958         function linearish(scale) {
20959           var domain = scale.domain;
20960
20961           scale.ticks = function(count) {
20962             var d = domain();
20963             return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
20964           };
20965
20966           scale.tickFormat = function(count, specifier) {
20967             var d = domain();
20968             return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
20969           };
20970
20971           scale.nice = function(count) {
20972             if (count == null) { count = 10; }
20973
20974             var d = domain(),
20975                 i0 = 0,
20976                 i1 = d.length - 1,
20977                 start = d[i0],
20978                 stop = d[i1],
20979                 step;
20980
20981             if (stop < start) {
20982               step = start, start = stop, stop = step;
20983               step = i0, i0 = i1, i1 = step;
20984             }
20985
20986             step = tickIncrement(start, stop, count);
20987
20988             if (step > 0) {
20989               start = Math.floor(start / step) * step;
20990               stop = Math.ceil(stop / step) * step;
20991               step = tickIncrement(start, stop, count);
20992             } else if (step < 0) {
20993               start = Math.ceil(start * step) / step;
20994               stop = Math.floor(stop * step) / step;
20995               step = tickIncrement(start, stop, count);
20996             }
20997
20998             if (step > 0) {
20999               d[i0] = Math.floor(start / step) * step;
21000               d[i1] = Math.ceil(stop / step) * step;
21001               domain(d);
21002             } else if (step < 0) {
21003               d[i0] = Math.ceil(start * step) / step;
21004               d[i1] = Math.floor(stop * step) / step;
21005               domain(d);
21006             }
21007
21008             return scale;
21009           };
21010
21011           return scale;
21012         }
21013
21014         function linear$2() {
21015           var scale = continuous(identity$5, identity$5);
21016
21017           scale.copy = function() {
21018             return copy$1(scale, linear$2());
21019           };
21020
21021           initRange.apply(scale, arguments);
21022
21023           return linearish(scale);
21024         }
21025
21026         function identity$6(domain) {
21027           var unknown;
21028
21029           function scale(x) {
21030             return isNaN(x = +x) ? unknown : x;
21031           }
21032
21033           scale.invert = scale;
21034
21035           scale.domain = scale.range = function(_) {
21036             return arguments.length ? (domain = map$5.call(_, number$2), scale) : domain.slice();
21037           };
21038
21039           scale.unknown = function(_) {
21040             return arguments.length ? (unknown = _, scale) : unknown;
21041           };
21042
21043           scale.copy = function() {
21044             return identity$6(domain).unknown(unknown);
21045           };
21046
21047           domain = arguments.length ? map$5.call(domain, number$2) : [0, 1];
21048
21049           return linearish(scale);
21050         }
21051
21052         function nice(domain, interval) {
21053           domain = domain.slice();
21054
21055           var i0 = 0,
21056               i1 = domain.length - 1,
21057               x0 = domain[i0],
21058               x1 = domain[i1],
21059               t;
21060
21061           if (x1 < x0) {
21062             t = i0, i0 = i1, i1 = t;
21063             t = x0, x0 = x1, x1 = t;
21064           }
21065
21066           domain[i0] = interval.floor(x0);
21067           domain[i1] = interval.ceil(x1);
21068           return domain;
21069         }
21070
21071         function transformLog(x) {
21072           return Math.log(x);
21073         }
21074
21075         function transformExp(x) {
21076           return Math.exp(x);
21077         }
21078
21079         function transformLogn(x) {
21080           return -Math.log(-x);
21081         }
21082
21083         function transformExpn(x) {
21084           return -Math.exp(-x);
21085         }
21086
21087         function pow10(x) {
21088           return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
21089         }
21090
21091         function powp(base) {
21092           return base === 10 ? pow10
21093               : base === Math.E ? Math.exp
21094               : function(x) { return Math.pow(base, x); };
21095         }
21096
21097         function logp(base) {
21098           return base === Math.E ? Math.log
21099               : base === 10 && Math.log10
21100               || base === 2 && Math.log2
21101               || (base = Math.log(base), function(x) { return Math.log(x) / base; });
21102         }
21103
21104         function reflect(f) {
21105           return function(x) {
21106             return -f(-x);
21107           };
21108         }
21109
21110         function loggish(transform) {
21111           var scale = transform(transformLog, transformExp),
21112               domain = scale.domain,
21113               base = 10,
21114               logs,
21115               pows;
21116
21117           function rescale() {
21118             logs = logp(base), pows = powp(base);
21119             if (domain()[0] < 0) {
21120               logs = reflect(logs), pows = reflect(pows);
21121               transform(transformLogn, transformExpn);
21122             } else {
21123               transform(transformLog, transformExp);
21124             }
21125             return scale;
21126           }
21127
21128           scale.base = function(_) {
21129             return arguments.length ? (base = +_, rescale()) : base;
21130           };
21131
21132           scale.domain = function(_) {
21133             return arguments.length ? (domain(_), rescale()) : domain();
21134           };
21135
21136           scale.ticks = function(count) {
21137             var d = domain(),
21138                 u = d[0],
21139                 v = d[d.length - 1],
21140                 r;
21141
21142             if (r = v < u) { i = u, u = v, v = i; }
21143
21144             var i = logs(u),
21145                 j = logs(v),
21146                 p,
21147                 k,
21148                 t,
21149                 n = count == null ? 10 : +count,
21150                 z = [];
21151
21152             if (!(base % 1) && j - i < n) {
21153               i = Math.round(i) - 1, j = Math.round(j) + 1;
21154               if (u > 0) { for (; i < j; ++i) {
21155                 for (k = 1, p = pows(i); k < base; ++k) {
21156                   t = p * k;
21157                   if (t < u) { continue; }
21158                   if (t > v) { break; }
21159                   z.push(t);
21160                 }
21161               } } else { for (; i < j; ++i) {
21162                 for (k = base - 1, p = pows(i); k >= 1; --k) {
21163                   t = p * k;
21164                   if (t < u) { continue; }
21165                   if (t > v) { break; }
21166                   z.push(t);
21167                 }
21168               } }
21169             } else {
21170               z = ticks(i, j, Math.min(j - i, n)).map(pows);
21171             }
21172
21173             return r ? z.reverse() : z;
21174           };
21175
21176           scale.tickFormat = function(count, specifier) {
21177             if (specifier == null) { specifier = base === 10 ? ".0e" : ","; }
21178             if (typeof specifier !== "function") { specifier = format(specifier); }
21179             if (count === Infinity) { return specifier; }
21180             if (count == null) { count = 10; }
21181             var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
21182             return function(d) {
21183               var i = d / pows(Math.round(logs(d)));
21184               if (i * base < base - 0.5) { i *= base; }
21185               return i <= k ? specifier(d) : "";
21186             };
21187           };
21188
21189           scale.nice = function() {
21190             return domain(nice(domain(), {
21191               floor: function(x) { return pows(Math.floor(logs(x))); },
21192               ceil: function(x) { return pows(Math.ceil(logs(x))); }
21193             }));
21194           };
21195
21196           return scale;
21197         }
21198
21199         function log$1() {
21200           var scale = loggish(transformer$1()).domain([1, 10]);
21201
21202           scale.copy = function() {
21203             return copy$1(scale, log$1()).base(scale.base());
21204           };
21205
21206           initRange.apply(scale, arguments);
21207
21208           return scale;
21209         }
21210
21211         function transformSymlog(c) {
21212           return function(x) {
21213             return Math.sign(x) * Math.log1p(Math.abs(x / c));
21214           };
21215         }
21216
21217         function transformSymexp(c) {
21218           return function(x) {
21219             return Math.sign(x) * Math.expm1(Math.abs(x)) * c;
21220           };
21221         }
21222
21223         function symlogish(transform) {
21224           var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));
21225
21226           scale.constant = function(_) {
21227             return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;
21228           };
21229
21230           return linearish(scale);
21231         }
21232
21233         function symlog() {
21234           var scale = symlogish(transformer$1());
21235
21236           scale.copy = function() {
21237             return copy$1(scale, symlog()).constant(scale.constant());
21238           };
21239
21240           return initRange.apply(scale, arguments);
21241         }
21242
21243         function transformPow(exponent) {
21244           return function(x) {
21245             return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
21246           };
21247         }
21248
21249         function transformSqrt(x) {
21250           return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);
21251         }
21252
21253         function transformSquare(x) {
21254           return x < 0 ? -x * x : x * x;
21255         }
21256
21257         function powish(transform) {
21258           var scale = transform(identity$5, identity$5),
21259               exponent = 1;
21260
21261           function rescale() {
21262             return exponent === 1 ? transform(identity$5, identity$5)
21263                 : exponent === 0.5 ? transform(transformSqrt, transformSquare)
21264                 : transform(transformPow(exponent), transformPow(1 / exponent));
21265           }
21266
21267           scale.exponent = function(_) {
21268             return arguments.length ? (exponent = +_, rescale()) : exponent;
21269           };
21270
21271           return linearish(scale);
21272         }
21273
21274         function pow$1() {
21275           var scale = powish(transformer$1());
21276
21277           scale.copy = function() {
21278             return copy$1(scale, pow$1()).exponent(scale.exponent());
21279           };
21280
21281           initRange.apply(scale, arguments);
21282
21283           return scale;
21284         }
21285
21286         function sqrt$1() {
21287           return pow$1.apply(null, arguments).exponent(0.5);
21288         }
21289
21290         function quantile() {
21291           var domain = [],
21292               range = [],
21293               thresholds = [],
21294               unknown;
21295
21296           function rescale() {
21297             var i = 0, n = Math.max(1, range.length);
21298             thresholds = new Array(n - 1);
21299             while (++i < n) { thresholds[i - 1] = threshold(domain, i / n); }
21300             return scale;
21301           }
21302
21303           function scale(x) {
21304             return isNaN(x = +x) ? unknown : range[bisectRight(thresholds, x)];
21305           }
21306
21307           scale.invertExtent = function(y) {
21308             var i = range.indexOf(y);
21309             return i < 0 ? [NaN, NaN] : [
21310               i > 0 ? thresholds[i - 1] : domain[0],
21311               i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
21312             ];
21313           };
21314
21315           scale.domain = function(_) {
21316             if (!arguments.length) { return domain.slice(); }
21317             domain = [];
21318             for (var i = 0, n = _.length, d; i < n; ++i) { if (d = _[i], d != null && !isNaN(d = +d)) { domain.push(d); } }
21319             domain.sort(d3_ascending);
21320             return rescale();
21321           };
21322
21323           scale.range = function(_) {
21324             return arguments.length ? (range = slice$9.call(_), rescale()) : range.slice();
21325           };
21326
21327           scale.unknown = function(_) {
21328             return arguments.length ? (unknown = _, scale) : unknown;
21329           };
21330
21331           scale.quantiles = function() {
21332             return thresholds.slice();
21333           };
21334
21335           scale.copy = function() {
21336             return quantile()
21337                 .domain(domain)
21338                 .range(range)
21339                 .unknown(unknown);
21340           };
21341
21342           return initRange.apply(scale, arguments);
21343         }
21344
21345         function quantize() {
21346           var x0 = 0,
21347               x1 = 1,
21348               n = 1,
21349               domain = [0.5],
21350               range = [0, 1],
21351               unknown;
21352
21353           function scale(x) {
21354             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
21355           }
21356
21357           function rescale() {
21358             var i = -1;
21359             domain = new Array(n);
21360             while (++i < n) { domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); }
21361             return scale;
21362           }
21363
21364           scale.domain = function(_) {
21365             return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
21366           };
21367
21368           scale.range = function(_) {
21369             return arguments.length ? (n = (range = slice$9.call(_)).length - 1, rescale()) : range.slice();
21370           };
21371
21372           scale.invertExtent = function(y) {
21373             var i = range.indexOf(y);
21374             return i < 0 ? [NaN, NaN]
21375                 : i < 1 ? [x0, domain[0]]
21376                 : i >= n ? [domain[n - 1], x1]
21377                 : [domain[i - 1], domain[i]];
21378           };
21379
21380           scale.unknown = function(_) {
21381             return arguments.length ? (unknown = _, scale) : scale;
21382           };
21383
21384           scale.thresholds = function() {
21385             return domain.slice();
21386           };
21387
21388           scale.copy = function() {
21389             return quantize()
21390                 .domain([x0, x1])
21391                 .range(range)
21392                 .unknown(unknown);
21393           };
21394
21395           return initRange.apply(linearish(scale), arguments);
21396         }
21397
21398         function threshold$1() {
21399           var domain = [0.5],
21400               range = [0, 1],
21401               unknown,
21402               n = 1;
21403
21404           function scale(x) {
21405             return x <= x ? range[bisectRight(domain, x, 0, n)] : unknown;
21406           }
21407
21408           scale.domain = function(_) {
21409             return arguments.length ? (domain = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
21410           };
21411
21412           scale.range = function(_) {
21413             return arguments.length ? (range = slice$9.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
21414           };
21415
21416           scale.invertExtent = function(y) {
21417             var i = range.indexOf(y);
21418             return [domain[i - 1], domain[i]];
21419           };
21420
21421           scale.unknown = function(_) {
21422             return arguments.length ? (unknown = _, scale) : unknown;
21423           };
21424
21425           scale.copy = function() {
21426             return threshold$1()
21427                 .domain(domain)
21428                 .range(range)
21429                 .unknown(unknown);
21430           };
21431
21432           return initRange.apply(scale, arguments);
21433         }
21434
21435         var t0$1 = new Date,
21436             t1$1 = new Date;
21437
21438         function newInterval(floori, offseti, count, field) {
21439
21440           function interval(date) {
21441             return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
21442           }
21443
21444           interval.floor = function(date) {
21445             return floori(date = new Date(+date)), date;
21446           };
21447
21448           interval.ceil = function(date) {
21449             return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
21450           };
21451
21452           interval.round = function(date) {
21453             var d0 = interval(date),
21454                 d1 = interval.ceil(date);
21455             return date - d0 < d1 - date ? d0 : d1;
21456           };
21457
21458           interval.offset = function(date, step) {
21459             return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
21460           };
21461
21462           interval.range = function(start, stop, step) {
21463             var range = [], previous;
21464             start = interval.ceil(start);
21465             step = step == null ? 1 : Math.floor(step);
21466             if (!(start < stop) || !(step > 0)) { return range; } // also handles Invalid Date
21467             do { range.push(previous = new Date(+start)), offseti(start, step), floori(start); }
21468             while (previous < start && start < stop);
21469             return range;
21470           };
21471
21472           interval.filter = function(test) {
21473             return newInterval(function(date) {
21474               if (date >= date) { while (floori(date), !test(date)) { date.setTime(date - 1); } }
21475             }, function(date, step) {
21476               if (date >= date) {
21477                 if (step < 0) { while (++step <= 0) {
21478                   while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
21479                 } } else { while (--step >= 0) {
21480                   while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
21481                 } }
21482               }
21483             });
21484           };
21485
21486           if (count) {
21487             interval.count = function(start, end) {
21488               t0$1.setTime(+start), t1$1.setTime(+end);
21489               floori(t0$1), floori(t1$1);
21490               return Math.floor(count(t0$1, t1$1));
21491             };
21492
21493             interval.every = function(step) {
21494               step = Math.floor(step);
21495               return !isFinite(step) || !(step > 0) ? null
21496                   : !(step > 1) ? interval
21497                   : interval.filter(field
21498                       ? function(d) { return field(d) % step === 0; }
21499                       : function(d) { return interval.count(0, d) % step === 0; });
21500             };
21501           }
21502
21503           return interval;
21504         }
21505
21506         var millisecond = newInterval(function() {
21507           // noop
21508         }, function(date, step) {
21509           date.setTime(+date + step);
21510         }, function(start, end) {
21511           return end - start;
21512         });
21513
21514         // An optimized implementation for this simple case.
21515         millisecond.every = function(k) {
21516           k = Math.floor(k);
21517           if (!isFinite(k) || !(k > 0)) { return null; }
21518           if (!(k > 1)) { return millisecond; }
21519           return newInterval(function(date) {
21520             date.setTime(Math.floor(date / k) * k);
21521           }, function(date, step) {
21522             date.setTime(+date + step * k);
21523           }, function(start, end) {
21524             return (end - start) / k;
21525           });
21526         };
21527         var milliseconds = millisecond.range;
21528
21529         var durationSecond = 1e3;
21530         var durationMinute = 6e4;
21531         var durationHour = 36e5;
21532         var durationDay = 864e5;
21533         var durationWeek = 6048e5;
21534
21535         var second = newInterval(function(date) {
21536           date.setTime(date - date.getMilliseconds());
21537         }, function(date, step) {
21538           date.setTime(+date + step * durationSecond);
21539         }, function(start, end) {
21540           return (end - start) / durationSecond;
21541         }, function(date) {
21542           return date.getUTCSeconds();
21543         });
21544         var seconds = second.range;
21545
21546         var minute = newInterval(function(date) {
21547           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
21548         }, function(date, step) {
21549           date.setTime(+date + step * durationMinute);
21550         }, function(start, end) {
21551           return (end - start) / durationMinute;
21552         }, function(date) {
21553           return date.getMinutes();
21554         });
21555         var minutes = minute.range;
21556
21557         var hour = newInterval(function(date) {
21558           date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
21559         }, function(date, step) {
21560           date.setTime(+date + step * durationHour);
21561         }, function(start, end) {
21562           return (end - start) / durationHour;
21563         }, function(date) {
21564           return date.getHours();
21565         });
21566         var hours = hour.range;
21567
21568         var day = newInterval(function(date) {
21569           date.setHours(0, 0, 0, 0);
21570         }, function(date, step) {
21571           date.setDate(date.getDate() + step);
21572         }, function(start, end) {
21573           return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
21574         }, function(date) {
21575           return date.getDate() - 1;
21576         });
21577         var days = day.range;
21578
21579         function weekday(i) {
21580           return newInterval(function(date) {
21581             date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
21582             date.setHours(0, 0, 0, 0);
21583           }, function(date, step) {
21584             date.setDate(date.getDate() + step * 7);
21585           }, function(start, end) {
21586             return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
21587           });
21588         }
21589
21590         var sunday = weekday(0);
21591         var monday = weekday(1);
21592         var tuesday = weekday(2);
21593         var wednesday = weekday(3);
21594         var thursday = weekday(4);
21595         var friday = weekday(5);
21596         var saturday = weekday(6);
21597
21598         var sundays = sunday.range;
21599         var mondays = monday.range;
21600         var tuesdays = tuesday.range;
21601         var wednesdays = wednesday.range;
21602         var thursdays = thursday.range;
21603         var fridays = friday.range;
21604         var saturdays = saturday.range;
21605
21606         var month = newInterval(function(date) {
21607           date.setDate(1);
21608           date.setHours(0, 0, 0, 0);
21609         }, function(date, step) {
21610           date.setMonth(date.getMonth() + step);
21611         }, function(start, end) {
21612           return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
21613         }, function(date) {
21614           return date.getMonth();
21615         });
21616         var months = month.range;
21617
21618         var year = newInterval(function(date) {
21619           date.setMonth(0, 1);
21620           date.setHours(0, 0, 0, 0);
21621         }, function(date, step) {
21622           date.setFullYear(date.getFullYear() + step);
21623         }, function(start, end) {
21624           return end.getFullYear() - start.getFullYear();
21625         }, function(date) {
21626           return date.getFullYear();
21627         });
21628
21629         // An optimized implementation for this simple case.
21630         year.every = function(k) {
21631           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
21632             date.setFullYear(Math.floor(date.getFullYear() / k) * k);
21633             date.setMonth(0, 1);
21634             date.setHours(0, 0, 0, 0);
21635           }, function(date, step) {
21636             date.setFullYear(date.getFullYear() + step * k);
21637           });
21638         };
21639         var years = year.range;
21640
21641         var utcMinute = newInterval(function(date) {
21642           date.setUTCSeconds(0, 0);
21643         }, function(date, step) {
21644           date.setTime(+date + step * durationMinute);
21645         }, function(start, end) {
21646           return (end - start) / durationMinute;
21647         }, function(date) {
21648           return date.getUTCMinutes();
21649         });
21650         var utcMinutes = utcMinute.range;
21651
21652         var utcHour = newInterval(function(date) {
21653           date.setUTCMinutes(0, 0, 0);
21654         }, function(date, step) {
21655           date.setTime(+date + step * durationHour);
21656         }, function(start, end) {
21657           return (end - start) / durationHour;
21658         }, function(date) {
21659           return date.getUTCHours();
21660         });
21661         var utcHours = utcHour.range;
21662
21663         var utcDay = newInterval(function(date) {
21664           date.setUTCHours(0, 0, 0, 0);
21665         }, function(date, step) {
21666           date.setUTCDate(date.getUTCDate() + step);
21667         }, function(start, end) {
21668           return (end - start) / durationDay;
21669         }, function(date) {
21670           return date.getUTCDate() - 1;
21671         });
21672         var utcDays = utcDay.range;
21673
21674         function utcWeekday(i) {
21675           return newInterval(function(date) {
21676             date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
21677             date.setUTCHours(0, 0, 0, 0);
21678           }, function(date, step) {
21679             date.setUTCDate(date.getUTCDate() + step * 7);
21680           }, function(start, end) {
21681             return (end - start) / durationWeek;
21682           });
21683         }
21684
21685         var utcSunday = utcWeekday(0);
21686         var utcMonday = utcWeekday(1);
21687         var utcTuesday = utcWeekday(2);
21688         var utcWednesday = utcWeekday(3);
21689         var utcThursday = utcWeekday(4);
21690         var utcFriday = utcWeekday(5);
21691         var utcSaturday = utcWeekday(6);
21692
21693         var utcSundays = utcSunday.range;
21694         var utcMondays = utcMonday.range;
21695         var utcTuesdays = utcTuesday.range;
21696         var utcWednesdays = utcWednesday.range;
21697         var utcThursdays = utcThursday.range;
21698         var utcFridays = utcFriday.range;
21699         var utcSaturdays = utcSaturday.range;
21700
21701         var utcMonth = newInterval(function(date) {
21702           date.setUTCDate(1);
21703           date.setUTCHours(0, 0, 0, 0);
21704         }, function(date, step) {
21705           date.setUTCMonth(date.getUTCMonth() + step);
21706         }, function(start, end) {
21707           return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
21708         }, function(date) {
21709           return date.getUTCMonth();
21710         });
21711         var utcMonths = utcMonth.range;
21712
21713         var utcYear = newInterval(function(date) {
21714           date.setUTCMonth(0, 1);
21715           date.setUTCHours(0, 0, 0, 0);
21716         }, function(date, step) {
21717           date.setUTCFullYear(date.getUTCFullYear() + step);
21718         }, function(start, end) {
21719           return end.getUTCFullYear() - start.getUTCFullYear();
21720         }, function(date) {
21721           return date.getUTCFullYear();
21722         });
21723
21724         // An optimized implementation for this simple case.
21725         utcYear.every = function(k) {
21726           return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
21727             date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
21728             date.setUTCMonth(0, 1);
21729             date.setUTCHours(0, 0, 0, 0);
21730           }, function(date, step) {
21731             date.setUTCFullYear(date.getUTCFullYear() + step * k);
21732           });
21733         };
21734         var utcYears = utcYear.range;
21735
21736         function localDate(d) {
21737           if (0 <= d.y && d.y < 100) {
21738             var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
21739             date.setFullYear(d.y);
21740             return date;
21741           }
21742           return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
21743         }
21744
21745         function utcDate(d) {
21746           if (0 <= d.y && d.y < 100) {
21747             var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
21748             date.setUTCFullYear(d.y);
21749             return date;
21750           }
21751           return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
21752         }
21753
21754         function newDate(y, m, d) {
21755           return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
21756         }
21757
21758         function formatLocale$1(locale) {
21759           var locale_dateTime = locale.dateTime,
21760               locale_date = locale.date,
21761               locale_time = locale.time,
21762               locale_periods = locale.periods,
21763               locale_weekdays = locale.days,
21764               locale_shortWeekdays = locale.shortDays,
21765               locale_months = locale.months,
21766               locale_shortMonths = locale.shortMonths;
21767
21768           var periodRe = formatRe(locale_periods),
21769               periodLookup = formatLookup(locale_periods),
21770               weekdayRe = formatRe(locale_weekdays),
21771               weekdayLookup = formatLookup(locale_weekdays),
21772               shortWeekdayRe = formatRe(locale_shortWeekdays),
21773               shortWeekdayLookup = formatLookup(locale_shortWeekdays),
21774               monthRe = formatRe(locale_months),
21775               monthLookup = formatLookup(locale_months),
21776               shortMonthRe = formatRe(locale_shortMonths),
21777               shortMonthLookup = formatLookup(locale_shortMonths);
21778
21779           var formats = {
21780             "a": formatShortWeekday,
21781             "A": formatWeekday,
21782             "b": formatShortMonth,
21783             "B": formatMonth,
21784             "c": null,
21785             "d": formatDayOfMonth,
21786             "e": formatDayOfMonth,
21787             "f": formatMicroseconds,
21788             "H": formatHour24,
21789             "I": formatHour12,
21790             "j": formatDayOfYear,
21791             "L": formatMilliseconds,
21792             "m": formatMonthNumber,
21793             "M": formatMinutes,
21794             "p": formatPeriod,
21795             "q": formatQuarter,
21796             "Q": formatUnixTimestamp,
21797             "s": formatUnixTimestampSeconds,
21798             "S": formatSeconds,
21799             "u": formatWeekdayNumberMonday,
21800             "U": formatWeekNumberSunday,
21801             "V": formatWeekNumberISO,
21802             "w": formatWeekdayNumberSunday,
21803             "W": formatWeekNumberMonday,
21804             "x": null,
21805             "X": null,
21806             "y": formatYear$1,
21807             "Y": formatFullYear,
21808             "Z": formatZone,
21809             "%": formatLiteralPercent
21810           };
21811
21812           var utcFormats = {
21813             "a": formatUTCShortWeekday,
21814             "A": formatUTCWeekday,
21815             "b": formatUTCShortMonth,
21816             "B": formatUTCMonth,
21817             "c": null,
21818             "d": formatUTCDayOfMonth,
21819             "e": formatUTCDayOfMonth,
21820             "f": formatUTCMicroseconds,
21821             "H": formatUTCHour24,
21822             "I": formatUTCHour12,
21823             "j": formatUTCDayOfYear,
21824             "L": formatUTCMilliseconds,
21825             "m": formatUTCMonthNumber,
21826             "M": formatUTCMinutes,
21827             "p": formatUTCPeriod,
21828             "q": formatUTCQuarter,
21829             "Q": formatUnixTimestamp,
21830             "s": formatUnixTimestampSeconds,
21831             "S": formatUTCSeconds,
21832             "u": formatUTCWeekdayNumberMonday,
21833             "U": formatUTCWeekNumberSunday,
21834             "V": formatUTCWeekNumberISO,
21835             "w": formatUTCWeekdayNumberSunday,
21836             "W": formatUTCWeekNumberMonday,
21837             "x": null,
21838             "X": null,
21839             "y": formatUTCYear,
21840             "Y": formatUTCFullYear,
21841             "Z": formatUTCZone,
21842             "%": formatLiteralPercent
21843           };
21844
21845           var parses = {
21846             "a": parseShortWeekday,
21847             "A": parseWeekday,
21848             "b": parseShortMonth,
21849             "B": parseMonth,
21850             "c": parseLocaleDateTime,
21851             "d": parseDayOfMonth,
21852             "e": parseDayOfMonth,
21853             "f": parseMicroseconds,
21854             "H": parseHour24,
21855             "I": parseHour24,
21856             "j": parseDayOfYear,
21857             "L": parseMilliseconds,
21858             "m": parseMonthNumber,
21859             "M": parseMinutes,
21860             "p": parsePeriod,
21861             "q": parseQuarter,
21862             "Q": parseUnixTimestamp,
21863             "s": parseUnixTimestampSeconds,
21864             "S": parseSeconds,
21865             "u": parseWeekdayNumberMonday,
21866             "U": parseWeekNumberSunday,
21867             "V": parseWeekNumberISO,
21868             "w": parseWeekdayNumberSunday,
21869             "W": parseWeekNumberMonday,
21870             "x": parseLocaleDate,
21871             "X": parseLocaleTime,
21872             "y": parseYear,
21873             "Y": parseFullYear,
21874             "Z": parseZone,
21875             "%": parseLiteralPercent
21876           };
21877
21878           // These recursive directive definitions must be deferred.
21879           formats.x = newFormat(locale_date, formats);
21880           formats.X = newFormat(locale_time, formats);
21881           formats.c = newFormat(locale_dateTime, formats);
21882           utcFormats.x = newFormat(locale_date, utcFormats);
21883           utcFormats.X = newFormat(locale_time, utcFormats);
21884           utcFormats.c = newFormat(locale_dateTime, utcFormats);
21885
21886           function newFormat(specifier, formats) {
21887             return function(date) {
21888               var string = [],
21889                   i = -1,
21890                   j = 0,
21891                   n = specifier.length,
21892                   c,
21893                   pad,
21894                   format;
21895
21896               if (!(date instanceof Date)) { date = new Date(+date); }
21897
21898               while (++i < n) {
21899                 if (specifier.charCodeAt(i) === 37) {
21900                   string.push(specifier.slice(j, i));
21901                   if ((pad = pads[c = specifier.charAt(++i)]) != null) { c = specifier.charAt(++i); }
21902                   else { pad = c === "e" ? " " : "0"; }
21903                   if (format = formats[c]) { c = format(date, pad); }
21904                   string.push(c);
21905                   j = i + 1;
21906                 }
21907               }
21908
21909               string.push(specifier.slice(j, i));
21910               return string.join("");
21911             };
21912           }
21913
21914           function newParse(specifier, Z) {
21915             return function(string) {
21916               var d = newDate(1900, undefined, 1),
21917                   i = parseSpecifier(d, specifier, string += "", 0),
21918                   week, day$1;
21919               if (i != string.length) { return null; }
21920
21921               // If a UNIX timestamp is specified, return it.
21922               if ("Q" in d) { return new Date(d.Q); }
21923               if ("s" in d) { return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); }
21924
21925               // If this is utcParse, never use the local timezone.
21926               if (Z && !("Z" in d)) { d.Z = 0; }
21927
21928               // The am-pm flag is 0 for AM, and 1 for PM.
21929               if ("p" in d) { d.H = d.H % 12 + d.p * 12; }
21930
21931               // If the month was not specified, inherit from the quarter.
21932               if (d.m === undefined) { d.m = "q" in d ? d.q : 0; }
21933
21934               // Convert day-of-week and week-of-year to day-of-year.
21935               if ("V" in d) {
21936                 if (d.V < 1 || d.V > 53) { return null; }
21937                 if (!("w" in d)) { d.w = 1; }
21938                 if ("Z" in d) {
21939                   week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay();
21940                   week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week);
21941                   week = utcDay.offset(week, (d.V - 1) * 7);
21942                   d.y = week.getUTCFullYear();
21943                   d.m = week.getUTCMonth();
21944                   d.d = week.getUTCDate() + (d.w + 6) % 7;
21945                 } else {
21946                   week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay();
21947                   week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week);
21948                   week = day.offset(week, (d.V - 1) * 7);
21949                   d.y = week.getFullYear();
21950                   d.m = week.getMonth();
21951                   d.d = week.getDate() + (d.w + 6) % 7;
21952                 }
21953               } else if ("W" in d || "U" in d) {
21954                 if (!("w" in d)) { d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; }
21955                 day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
21956                 d.m = 0;
21957                 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;
21958               }
21959
21960               // If a time zone is specified, all fields are interpreted as UTC and then
21961               // offset according to the specified time zone.
21962               if ("Z" in d) {
21963                 d.H += d.Z / 100 | 0;
21964                 d.M += d.Z % 100;
21965                 return utcDate(d);
21966               }
21967
21968               // Otherwise, all fields are in local time.
21969               return localDate(d);
21970             };
21971           }
21972
21973           function parseSpecifier(d, specifier, string, j) {
21974             var i = 0,
21975                 n = specifier.length,
21976                 m = string.length,
21977                 c,
21978                 parse;
21979
21980             while (i < n) {
21981               if (j >= m) { return -1; }
21982               c = specifier.charCodeAt(i++);
21983               if (c === 37) {
21984                 c = specifier.charAt(i++);
21985                 parse = parses[c in pads ? specifier.charAt(i++) : c];
21986                 if (!parse || ((j = parse(d, string, j)) < 0)) { return -1; }
21987               } else if (c != string.charCodeAt(j++)) {
21988                 return -1;
21989               }
21990             }
21991
21992             return j;
21993           }
21994
21995           function parsePeriod(d, string, i) {
21996             var n = periodRe.exec(string.slice(i));
21997             return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
21998           }
21999
22000           function parseShortWeekday(d, string, i) {
22001             var n = shortWeekdayRe.exec(string.slice(i));
22002             return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
22003           }
22004
22005           function parseWeekday(d, string, i) {
22006             var n = weekdayRe.exec(string.slice(i));
22007             return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
22008           }
22009
22010           function parseShortMonth(d, string, i) {
22011             var n = shortMonthRe.exec(string.slice(i));
22012             return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
22013           }
22014
22015           function parseMonth(d, string, i) {
22016             var n = monthRe.exec(string.slice(i));
22017             return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
22018           }
22019
22020           function parseLocaleDateTime(d, string, i) {
22021             return parseSpecifier(d, locale_dateTime, string, i);
22022           }
22023
22024           function parseLocaleDate(d, string, i) {
22025             return parseSpecifier(d, locale_date, string, i);
22026           }
22027
22028           function parseLocaleTime(d, string, i) {
22029             return parseSpecifier(d, locale_time, string, i);
22030           }
22031
22032           function formatShortWeekday(d) {
22033             return locale_shortWeekdays[d.getDay()];
22034           }
22035
22036           function formatWeekday(d) {
22037             return locale_weekdays[d.getDay()];
22038           }
22039
22040           function formatShortMonth(d) {
22041             return locale_shortMonths[d.getMonth()];
22042           }
22043
22044           function formatMonth(d) {
22045             return locale_months[d.getMonth()];
22046           }
22047
22048           function formatPeriod(d) {
22049             return locale_periods[+(d.getHours() >= 12)];
22050           }
22051
22052           function formatQuarter(d) {
22053             return 1 + ~~(d.getMonth() / 3);
22054           }
22055
22056           function formatUTCShortWeekday(d) {
22057             return locale_shortWeekdays[d.getUTCDay()];
22058           }
22059
22060           function formatUTCWeekday(d) {
22061             return locale_weekdays[d.getUTCDay()];
22062           }
22063
22064           function formatUTCShortMonth(d) {
22065             return locale_shortMonths[d.getUTCMonth()];
22066           }
22067
22068           function formatUTCMonth(d) {
22069             return locale_months[d.getUTCMonth()];
22070           }
22071
22072           function formatUTCPeriod(d) {
22073             return locale_periods[+(d.getUTCHours() >= 12)];
22074           }
22075
22076           function formatUTCQuarter(d) {
22077             return 1 + ~~(d.getUTCMonth() / 3);
22078           }
22079
22080           return {
22081             format: function(specifier) {
22082               var f = newFormat(specifier += "", formats);
22083               f.toString = function() { return specifier; };
22084               return f;
22085             },
22086             parse: function(specifier) {
22087               var p = newParse(specifier += "", false);
22088               p.toString = function() { return specifier; };
22089               return p;
22090             },
22091             utcFormat: function(specifier) {
22092               var f = newFormat(specifier += "", utcFormats);
22093               f.toString = function() { return specifier; };
22094               return f;
22095             },
22096             utcParse: function(specifier) {
22097               var p = newParse(specifier += "", true);
22098               p.toString = function() { return specifier; };
22099               return p;
22100             }
22101           };
22102         }
22103
22104         var pads = {"-": "", "_": " ", "0": "0"},
22105             numberRe = /^\s*\d+/, // note: ignores next directive
22106             percentRe = /^%/,
22107             requoteRe = /[\\^$*+?|[\]().{}]/g;
22108
22109         function pad$1(value, fill, width) {
22110           var sign = value < 0 ? "-" : "",
22111               string = (sign ? -value : value) + "",
22112               length = string.length;
22113           return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
22114         }
22115
22116         function requote(s) {
22117           return s.replace(requoteRe, "\\$&");
22118         }
22119
22120         function formatRe(names) {
22121           return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
22122         }
22123
22124         function formatLookup(names) {
22125           var map = {}, i = -1, n = names.length;
22126           while (++i < n) { map[names[i].toLowerCase()] = i; }
22127           return map;
22128         }
22129
22130         function parseWeekdayNumberSunday(d, string, i) {
22131           var n = numberRe.exec(string.slice(i, i + 1));
22132           return n ? (d.w = +n[0], i + n[0].length) : -1;
22133         }
22134
22135         function parseWeekdayNumberMonday(d, string, i) {
22136           var n = numberRe.exec(string.slice(i, i + 1));
22137           return n ? (d.u = +n[0], i + n[0].length) : -1;
22138         }
22139
22140         function parseWeekNumberSunday(d, string, i) {
22141           var n = numberRe.exec(string.slice(i, i + 2));
22142           return n ? (d.U = +n[0], i + n[0].length) : -1;
22143         }
22144
22145         function parseWeekNumberISO(d, string, i) {
22146           var n = numberRe.exec(string.slice(i, i + 2));
22147           return n ? (d.V = +n[0], i + n[0].length) : -1;
22148         }
22149
22150         function parseWeekNumberMonday(d, string, i) {
22151           var n = numberRe.exec(string.slice(i, i + 2));
22152           return n ? (d.W = +n[0], i + n[0].length) : -1;
22153         }
22154
22155         function parseFullYear(d, string, i) {
22156           var n = numberRe.exec(string.slice(i, i + 4));
22157           return n ? (d.y = +n[0], i + n[0].length) : -1;
22158         }
22159
22160         function parseYear(d, string, i) {
22161           var n = numberRe.exec(string.slice(i, i + 2));
22162           return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
22163         }
22164
22165         function parseZone(d, string, i) {
22166           var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
22167           return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
22168         }
22169
22170         function parseQuarter(d, string, i) {
22171           var n = numberRe.exec(string.slice(i, i + 1));
22172           return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
22173         }
22174
22175         function parseMonthNumber(d, string, i) {
22176           var n = numberRe.exec(string.slice(i, i + 2));
22177           return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
22178         }
22179
22180         function parseDayOfMonth(d, string, i) {
22181           var n = numberRe.exec(string.slice(i, i + 2));
22182           return n ? (d.d = +n[0], i + n[0].length) : -1;
22183         }
22184
22185         function parseDayOfYear(d, string, i) {
22186           var n = numberRe.exec(string.slice(i, i + 3));
22187           return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
22188         }
22189
22190         function parseHour24(d, string, i) {
22191           var n = numberRe.exec(string.slice(i, i + 2));
22192           return n ? (d.H = +n[0], i + n[0].length) : -1;
22193         }
22194
22195         function parseMinutes(d, string, i) {
22196           var n = numberRe.exec(string.slice(i, i + 2));
22197           return n ? (d.M = +n[0], i + n[0].length) : -1;
22198         }
22199
22200         function parseSeconds(d, string, i) {
22201           var n = numberRe.exec(string.slice(i, i + 2));
22202           return n ? (d.S = +n[0], i + n[0].length) : -1;
22203         }
22204
22205         function parseMilliseconds(d, string, i) {
22206           var n = numberRe.exec(string.slice(i, i + 3));
22207           return n ? (d.L = +n[0], i + n[0].length) : -1;
22208         }
22209
22210         function parseMicroseconds(d, string, i) {
22211           var n = numberRe.exec(string.slice(i, i + 6));
22212           return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
22213         }
22214
22215         function parseLiteralPercent(d, string, i) {
22216           var n = percentRe.exec(string.slice(i, i + 1));
22217           return n ? i + n[0].length : -1;
22218         }
22219
22220         function parseUnixTimestamp(d, string, i) {
22221           var n = numberRe.exec(string.slice(i));
22222           return n ? (d.Q = +n[0], i + n[0].length) : -1;
22223         }
22224
22225         function parseUnixTimestampSeconds(d, string, i) {
22226           var n = numberRe.exec(string.slice(i));
22227           return n ? (d.s = +n[0], i + n[0].length) : -1;
22228         }
22229
22230         function formatDayOfMonth(d, p) {
22231           return pad$1(d.getDate(), p, 2);
22232         }
22233
22234         function formatHour24(d, p) {
22235           return pad$1(d.getHours(), p, 2);
22236         }
22237
22238         function formatHour12(d, p) {
22239           return pad$1(d.getHours() % 12 || 12, p, 2);
22240         }
22241
22242         function formatDayOfYear(d, p) {
22243           return pad$1(1 + day.count(year(d), d), p, 3);
22244         }
22245
22246         function formatMilliseconds(d, p) {
22247           return pad$1(d.getMilliseconds(), p, 3);
22248         }
22249
22250         function formatMicroseconds(d, p) {
22251           return formatMilliseconds(d, p) + "000";
22252         }
22253
22254         function formatMonthNumber(d, p) {
22255           return pad$1(d.getMonth() + 1, p, 2);
22256         }
22257
22258         function formatMinutes(d, p) {
22259           return pad$1(d.getMinutes(), p, 2);
22260         }
22261
22262         function formatSeconds(d, p) {
22263           return pad$1(d.getSeconds(), p, 2);
22264         }
22265
22266         function formatWeekdayNumberMonday(d) {
22267           var day = d.getDay();
22268           return day === 0 ? 7 : day;
22269         }
22270
22271         function formatWeekNumberSunday(d, p) {
22272           return pad$1(sunday.count(year(d) - 1, d), p, 2);
22273         }
22274
22275         function formatWeekNumberISO(d, p) {
22276           var day = d.getDay();
22277           d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d);
22278           return pad$1(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2);
22279         }
22280
22281         function formatWeekdayNumberSunday(d) {
22282           return d.getDay();
22283         }
22284
22285         function formatWeekNumberMonday(d, p) {
22286           return pad$1(monday.count(year(d) - 1, d), p, 2);
22287         }
22288
22289         function formatYear$1(d, p) {
22290           return pad$1(d.getFullYear() % 100, p, 2);
22291         }
22292
22293         function formatFullYear(d, p) {
22294           return pad$1(d.getFullYear() % 10000, p, 4);
22295         }
22296
22297         function formatZone(d) {
22298           var z = d.getTimezoneOffset();
22299           return (z > 0 ? "-" : (z *= -1, "+"))
22300               + pad$1(z / 60 | 0, "0", 2)
22301               + pad$1(z % 60, "0", 2);
22302         }
22303
22304         function formatUTCDayOfMonth(d, p) {
22305           return pad$1(d.getUTCDate(), p, 2);
22306         }
22307
22308         function formatUTCHour24(d, p) {
22309           return pad$1(d.getUTCHours(), p, 2);
22310         }
22311
22312         function formatUTCHour12(d, p) {
22313           return pad$1(d.getUTCHours() % 12 || 12, p, 2);
22314         }
22315
22316         function formatUTCDayOfYear(d, p) {
22317           return pad$1(1 + utcDay.count(utcYear(d), d), p, 3);
22318         }
22319
22320         function formatUTCMilliseconds(d, p) {
22321           return pad$1(d.getUTCMilliseconds(), p, 3);
22322         }
22323
22324         function formatUTCMicroseconds(d, p) {
22325           return formatUTCMilliseconds(d, p) + "000";
22326         }
22327
22328         function formatUTCMonthNumber(d, p) {
22329           return pad$1(d.getUTCMonth() + 1, p, 2);
22330         }
22331
22332         function formatUTCMinutes(d, p) {
22333           return pad$1(d.getUTCMinutes(), p, 2);
22334         }
22335
22336         function formatUTCSeconds(d, p) {
22337           return pad$1(d.getUTCSeconds(), p, 2);
22338         }
22339
22340         function formatUTCWeekdayNumberMonday(d) {
22341           var dow = d.getUTCDay();
22342           return dow === 0 ? 7 : dow;
22343         }
22344
22345         function formatUTCWeekNumberSunday(d, p) {
22346           return pad$1(utcSunday.count(utcYear(d) - 1, d), p, 2);
22347         }
22348
22349         function formatUTCWeekNumberISO(d, p) {
22350           var day = d.getUTCDay();
22351           d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
22352           return pad$1(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
22353         }
22354
22355         function formatUTCWeekdayNumberSunday(d) {
22356           return d.getUTCDay();
22357         }
22358
22359         function formatUTCWeekNumberMonday(d, p) {
22360           return pad$1(utcMonday.count(utcYear(d) - 1, d), p, 2);
22361         }
22362
22363         function formatUTCYear(d, p) {
22364           return pad$1(d.getUTCFullYear() % 100, p, 2);
22365         }
22366
22367         function formatUTCFullYear(d, p) {
22368           return pad$1(d.getUTCFullYear() % 10000, p, 4);
22369         }
22370
22371         function formatUTCZone() {
22372           return "+0000";
22373         }
22374
22375         function formatLiteralPercent() {
22376           return "%";
22377         }
22378
22379         function formatUnixTimestamp(d) {
22380           return +d;
22381         }
22382
22383         function formatUnixTimestampSeconds(d) {
22384           return Math.floor(+d / 1000);
22385         }
22386
22387         var locale$1;
22388         var timeFormat;
22389         var timeParse;
22390         var utcFormat;
22391         var utcParse;
22392
22393         defaultLocale$1({
22394           dateTime: "%x, %X",
22395           date: "%-m/%-d/%Y",
22396           time: "%-I:%M:%S %p",
22397           periods: ["AM", "PM"],
22398           days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
22399           shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
22400           months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
22401           shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
22402         });
22403
22404         function defaultLocale$1(definition) {
22405           locale$1 = formatLocale$1(definition);
22406           timeFormat = locale$1.format;
22407           timeParse = locale$1.parse;
22408           utcFormat = locale$1.utcFormat;
22409           utcParse = locale$1.utcParse;
22410           return locale$1;
22411         }
22412
22413         var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
22414
22415         function formatIsoNative(date) {
22416           return date.toISOString();
22417         }
22418
22419         var formatIso = Date.prototype.toISOString
22420             ? formatIsoNative
22421             : utcFormat(isoSpecifier);
22422
22423         function parseIsoNative(string) {
22424           var date = new Date(string);
22425           return isNaN(date) ? null : date;
22426         }
22427
22428         var parseIso = +new Date("2000-01-01T00:00:00.000Z")
22429             ? parseIsoNative
22430             : utcParse(isoSpecifier);
22431
22432         var durationSecond$1 = 1000,
22433             durationMinute$1 = durationSecond$1 * 60,
22434             durationHour$1 = durationMinute$1 * 60,
22435             durationDay$1 = durationHour$1 * 24,
22436             durationWeek$1 = durationDay$1 * 7,
22437             durationMonth = durationDay$1 * 30,
22438             durationYear = durationDay$1 * 365;
22439
22440         function date$1(t) {
22441           return new Date(t);
22442         }
22443
22444         function number$3(t) {
22445           return t instanceof Date ? +t : +new Date(+t);
22446         }
22447
22448         function calendar(year, month, week, day, hour, minute, second, millisecond, format) {
22449           var scale = continuous(identity$5, identity$5),
22450               invert = scale.invert,
22451               domain = scale.domain;
22452
22453           var formatMillisecond = format(".%L"),
22454               formatSecond = format(":%S"),
22455               formatMinute = format("%I:%M"),
22456               formatHour = format("%I %p"),
22457               formatDay = format("%a %d"),
22458               formatWeek = format("%b %d"),
22459               formatMonth = format("%B"),
22460               formatYear = format("%Y");
22461
22462           var tickIntervals = [
22463             [second,  1,      durationSecond$1],
22464             [second,  5,  5 * durationSecond$1],
22465             [second, 15, 15 * durationSecond$1],
22466             [second, 30, 30 * durationSecond$1],
22467             [minute,  1,      durationMinute$1],
22468             [minute,  5,  5 * durationMinute$1],
22469             [minute, 15, 15 * durationMinute$1],
22470             [minute, 30, 30 * durationMinute$1],
22471             [  hour,  1,      durationHour$1  ],
22472             [  hour,  3,  3 * durationHour$1  ],
22473             [  hour,  6,  6 * durationHour$1  ],
22474             [  hour, 12, 12 * durationHour$1  ],
22475             [   day,  1,      durationDay$1   ],
22476             [   day,  2,  2 * durationDay$1   ],
22477             [  week,  1,      durationWeek$1  ],
22478             [ month,  1,      durationMonth ],
22479             [ month,  3,  3 * durationMonth ],
22480             [  year,  1,      durationYear  ]
22481           ];
22482
22483           function tickFormat(date) {
22484             return (second(date) < date ? formatMillisecond
22485                 : minute(date) < date ? formatSecond
22486                 : hour(date) < date ? formatMinute
22487                 : day(date) < date ? formatHour
22488                 : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
22489                 : year(date) < date ? formatMonth
22490                 : formatYear)(date);
22491           }
22492
22493           function tickInterval(interval, start, stop, step) {
22494             if (interval == null) { interval = 10; }
22495
22496             // If a desired tick count is specified, pick a reasonable tick interval
22497             // based on the extent of the domain and a rough estimate of tick size.
22498             // Otherwise, assume interval is already a time interval and use it.
22499             if (typeof interval === "number") {
22500               var target = Math.abs(stop - start) / interval,
22501                   i = d3_bisector(function(i) { return i[2]; }).right(tickIntervals, target);
22502               if (i === tickIntervals.length) {
22503                 step = tickStep(start / durationYear, stop / durationYear, interval);
22504                 interval = year;
22505               } else if (i) {
22506                 i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
22507                 step = i[1];
22508                 interval = i[0];
22509               } else {
22510                 step = Math.max(tickStep(start, stop, interval), 1);
22511                 interval = millisecond;
22512               }
22513             }
22514
22515             return step == null ? interval : interval.every(step);
22516           }
22517
22518           scale.invert = function(y) {
22519             return new Date(invert(y));
22520           };
22521
22522           scale.domain = function(_) {
22523             return arguments.length ? domain(map$5.call(_, number$3)) : domain().map(date$1);
22524           };
22525
22526           scale.ticks = function(interval, step) {
22527             var d = domain(),
22528                 t0 = d[0],
22529                 t1 = d[d.length - 1],
22530                 r = t1 < t0,
22531                 t;
22532             if (r) { t = t0, t0 = t1, t1 = t; }
22533             t = tickInterval(interval, t0, t1, step);
22534             t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
22535             return r ? t.reverse() : t;
22536           };
22537
22538           scale.tickFormat = function(count, specifier) {
22539             return specifier == null ? tickFormat : format(specifier);
22540           };
22541
22542           scale.nice = function(interval, step) {
22543             var d = domain();
22544             return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
22545                 ? domain(nice(d, interval))
22546                 : scale;
22547           };
22548
22549           scale.copy = function() {
22550             return copy$1(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));
22551           };
22552
22553           return scale;
22554         }
22555
22556         function time() {
22557           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);
22558         }
22559
22560         function utcTime() {
22561           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);
22562         }
22563
22564         function transformer$2() {
22565           var x0 = 0,
22566               x1 = 1,
22567               t0,
22568               t1,
22569               k10,
22570               transform,
22571               interpolator = identity$5,
22572               clamp = false,
22573               unknown;
22574
22575           function scale(x) {
22576             return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));
22577           }
22578
22579           scale.domain = function(_) {
22580             return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];
22581           };
22582
22583           scale.clamp = function(_) {
22584             return arguments.length ? (clamp = !!_, scale) : clamp;
22585           };
22586
22587           scale.interpolator = function(_) {
22588             return arguments.length ? (interpolator = _, scale) : interpolator;
22589           };
22590
22591           scale.unknown = function(_) {
22592             return arguments.length ? (unknown = _, scale) : unknown;
22593           };
22594
22595           return function(t) {
22596             transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);
22597             return scale;
22598           };
22599         }
22600
22601         function copy$2(source, target) {
22602           return target
22603               .domain(source.domain())
22604               .interpolator(source.interpolator())
22605               .clamp(source.clamp())
22606               .unknown(source.unknown());
22607         }
22608
22609         function sequential() {
22610           var scale = linearish(transformer$2()(identity$5));
22611
22612           scale.copy = function() {
22613             return copy$2(scale, sequential());
22614           };
22615
22616           return initInterpolator.apply(scale, arguments);
22617         }
22618
22619         function sequentialLog() {
22620           var scale = loggish(transformer$2()).domain([1, 10]);
22621
22622           scale.copy = function() {
22623             return copy$2(scale, sequentialLog()).base(scale.base());
22624           };
22625
22626           return initInterpolator.apply(scale, arguments);
22627         }
22628
22629         function sequentialSymlog() {
22630           var scale = symlogish(transformer$2());
22631
22632           scale.copy = function() {
22633             return copy$2(scale, sequentialSymlog()).constant(scale.constant());
22634           };
22635
22636           return initInterpolator.apply(scale, arguments);
22637         }
22638
22639         function sequentialPow() {
22640           var scale = powish(transformer$2());
22641
22642           scale.copy = function() {
22643             return copy$2(scale, sequentialPow()).exponent(scale.exponent());
22644           };
22645
22646           return initInterpolator.apply(scale, arguments);
22647         }
22648
22649         function sequentialSqrt() {
22650           return sequentialPow.apply(null, arguments).exponent(0.5);
22651         }
22652
22653         function sequentialQuantile() {
22654           var domain = [],
22655               interpolator = identity$5;
22656
22657           function scale(x) {
22658             if (!isNaN(x = +x)) { return interpolator((bisectRight(domain, x) - 1) / (domain.length - 1)); }
22659           }
22660
22661           scale.domain = function(_) {
22662             if (!arguments.length) { return domain.slice(); }
22663             domain = [];
22664             for (var i = 0, n = _.length, d; i < n; ++i) { if (d = _[i], d != null && !isNaN(d = +d)) { domain.push(d); } }
22665             domain.sort(d3_ascending);
22666             return scale;
22667           };
22668
22669           scale.interpolator = function(_) {
22670             return arguments.length ? (interpolator = _, scale) : interpolator;
22671           };
22672
22673           scale.copy = function() {
22674             return sequentialQuantile(interpolator).domain(domain);
22675           };
22676
22677           return initInterpolator.apply(scale, arguments);
22678         }
22679
22680         function transformer$3() {
22681           var x0 = 0,
22682               x1 = 0.5,
22683               x2 = 1,
22684               t0,
22685               t1,
22686               t2,
22687               k10,
22688               k21,
22689               interpolator = identity$5,
22690               transform,
22691               clamp = false,
22692               unknown;
22693
22694           function scale(x) {
22695             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));
22696           }
22697
22698           scale.domain = function(_) {
22699             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];
22700           };
22701
22702           scale.clamp = function(_) {
22703             return arguments.length ? (clamp = !!_, scale) : clamp;
22704           };
22705
22706           scale.interpolator = function(_) {
22707             return arguments.length ? (interpolator = _, scale) : interpolator;
22708           };
22709
22710           scale.unknown = function(_) {
22711             return arguments.length ? (unknown = _, scale) : unknown;
22712           };
22713
22714           return function(t) {
22715             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);
22716             return scale;
22717           };
22718         }
22719
22720         function diverging() {
22721           var scale = linearish(transformer$3()(identity$5));
22722
22723           scale.copy = function() {
22724             return copy$2(scale, diverging());
22725           };
22726
22727           return initInterpolator.apply(scale, arguments);
22728         }
22729
22730         function divergingLog() {
22731           var scale = loggish(transformer$3()).domain([0.1, 1, 10]);
22732
22733           scale.copy = function() {
22734             return copy$2(scale, divergingLog()).base(scale.base());
22735           };
22736
22737           return initInterpolator.apply(scale, arguments);
22738         }
22739
22740         function divergingSymlog() {
22741           var scale = symlogish(transformer$3());
22742
22743           scale.copy = function() {
22744             return copy$2(scale, divergingSymlog()).constant(scale.constant());
22745           };
22746
22747           return initInterpolator.apply(scale, arguments);
22748         }
22749
22750         function divergingPow() {
22751           var scale = powish(transformer$3());
22752
22753           scale.copy = function() {
22754             return copy$2(scale, divergingPow()).exponent(scale.exponent());
22755           };
22756
22757           return initInterpolator.apply(scale, arguments);
22758         }
22759
22760         function divergingSqrt() {
22761           return divergingPow.apply(null, arguments).exponent(0.5);
22762         }
22763
22764         function colors(specifier) {
22765           var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;
22766           while (i < n) { colors[i] = "#" + specifier.slice(i * 6, ++i * 6); }
22767           return colors;
22768         }
22769
22770         var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
22771
22772         var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666");
22773
22774         var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666");
22775
22776         var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928");
22777
22778         var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2");
22779
22780         var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc");
22781
22782         var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999");
22783
22784         var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3");
22785
22786         var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f");
22787
22788         var Tableau10 = colors("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");
22789
22790         function ramp(scheme) {
22791           return rgbBasis(scheme[scheme.length - 1]);
22792         }
22793
22794         var scheme = new Array(3).concat(
22795           "d8b365f5f5f55ab4ac",
22796           "a6611adfc27d80cdc1018571",
22797           "a6611adfc27df5f5f580cdc1018571",
22798           "8c510ad8b365f6e8c3c7eae55ab4ac01665e",
22799           "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e",
22800           "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e",
22801           "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e",
22802           "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30",
22803           "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30"
22804         ).map(colors);
22805
22806         var BrBG = ramp(scheme);
22807
22808         var scheme$1 = new Array(3).concat(
22809           "af8dc3f7f7f77fbf7b",
22810           "7b3294c2a5cfa6dba0008837",
22811           "7b3294c2a5cff7f7f7a6dba0008837",
22812           "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837",
22813           "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837",
22814           "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837",
22815           "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837",
22816           "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b",
22817           "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b"
22818         ).map(colors);
22819
22820         var PRGn = ramp(scheme$1);
22821
22822         var scheme$2 = new Array(3).concat(
22823           "e9a3c9f7f7f7a1d76a",
22824           "d01c8bf1b6dab8e1864dac26",
22825           "d01c8bf1b6daf7f7f7b8e1864dac26",
22826           "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221",
22827           "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221",
22828           "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221",
22829           "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221",
22830           "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419",
22831           "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419"
22832         ).map(colors);
22833
22834         var PiYG = ramp(scheme$2);
22835
22836         var scheme$3 = new Array(3).concat(
22837           "998ec3f7f7f7f1a340",
22838           "5e3c99b2abd2fdb863e66101",
22839           "5e3c99b2abd2f7f7f7fdb863e66101",
22840           "542788998ec3d8daebfee0b6f1a340b35806",
22841           "542788998ec3d8daebf7f7f7fee0b6f1a340b35806",
22842           "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806",
22843           "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806",
22844           "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08",
22845           "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08"
22846         ).map(colors);
22847
22848         var PuOr = ramp(scheme$3);
22849
22850         var scheme$4 = new Array(3).concat(
22851           "ef8a62f7f7f767a9cf",
22852           "ca0020f4a58292c5de0571b0",
22853           "ca0020f4a582f7f7f792c5de0571b0",
22854           "b2182bef8a62fddbc7d1e5f067a9cf2166ac",
22855           "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac",
22856           "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac",
22857           "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac",
22858           "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061",
22859           "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061"
22860         ).map(colors);
22861
22862         var RdBu = ramp(scheme$4);
22863
22864         var scheme$5 = new Array(3).concat(
22865           "ef8a62ffffff999999",
22866           "ca0020f4a582bababa404040",
22867           "ca0020f4a582ffffffbababa404040",
22868           "b2182bef8a62fddbc7e0e0e09999994d4d4d",
22869           "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d",
22870           "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d",
22871           "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d",
22872           "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a",
22873           "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a"
22874         ).map(colors);
22875
22876         var RdGy = ramp(scheme$5);
22877
22878         var scheme$6 = new Array(3).concat(
22879           "fc8d59ffffbf91bfdb",
22880           "d7191cfdae61abd9e92c7bb6",
22881           "d7191cfdae61ffffbfabd9e92c7bb6",
22882           "d73027fc8d59fee090e0f3f891bfdb4575b4",
22883           "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4",
22884           "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4",
22885           "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4",
22886           "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695",
22887           "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695"
22888         ).map(colors);
22889
22890         var RdYlBu = ramp(scheme$6);
22891
22892         var scheme$7 = new Array(3).concat(
22893           "fc8d59ffffbf91cf60",
22894           "d7191cfdae61a6d96a1a9641",
22895           "d7191cfdae61ffffbfa6d96a1a9641",
22896           "d73027fc8d59fee08bd9ef8b91cf601a9850",
22897           "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850",
22898           "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850",
22899           "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850",
22900           "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837",
22901           "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837"
22902         ).map(colors);
22903
22904         var RdYlGn = ramp(scheme$7);
22905
22906         var scheme$8 = new Array(3).concat(
22907           "fc8d59ffffbf99d594",
22908           "d7191cfdae61abdda42b83ba",
22909           "d7191cfdae61ffffbfabdda42b83ba",
22910           "d53e4ffc8d59fee08be6f59899d5943288bd",
22911           "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd",
22912           "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd",
22913           "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd",
22914           "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2",
22915           "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2"
22916         ).map(colors);
22917
22918         var Spectral = ramp(scheme$8);
22919
22920         var scheme$9 = new Array(3).concat(
22921           "e5f5f999d8c92ca25f",
22922           "edf8fbb2e2e266c2a4238b45",
22923           "edf8fbb2e2e266c2a42ca25f006d2c",
22924           "edf8fbccece699d8c966c2a42ca25f006d2c",
22925           "edf8fbccece699d8c966c2a441ae76238b45005824",
22926           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824",
22927           "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b"
22928         ).map(colors);
22929
22930         var BuGn = ramp(scheme$9);
22931
22932         var scheme$a = new Array(3).concat(
22933           "e0ecf49ebcda8856a7",
22934           "edf8fbb3cde38c96c688419d",
22935           "edf8fbb3cde38c96c68856a7810f7c",
22936           "edf8fbbfd3e69ebcda8c96c68856a7810f7c",
22937           "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b",
22938           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b",
22939           "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b"
22940         ).map(colors);
22941
22942         var BuPu = ramp(scheme$a);
22943
22944         var scheme$b = new Array(3).concat(
22945           "e0f3dba8ddb543a2ca",
22946           "f0f9e8bae4bc7bccc42b8cbe",
22947           "f0f9e8bae4bc7bccc443a2ca0868ac",
22948           "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac",
22949           "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e",
22950           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e",
22951           "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081"
22952         ).map(colors);
22953
22954         var GnBu = ramp(scheme$b);
22955
22956         var scheme$c = new Array(3).concat(
22957           "fee8c8fdbb84e34a33",
22958           "fef0d9fdcc8afc8d59d7301f",
22959           "fef0d9fdcc8afc8d59e34a33b30000",
22960           "fef0d9fdd49efdbb84fc8d59e34a33b30000",
22961           "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000",
22962           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000",
22963           "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000"
22964         ).map(colors);
22965
22966         var OrRd = ramp(scheme$c);
22967
22968         var scheme$d = new Array(3).concat(
22969           "ece2f0a6bddb1c9099",
22970           "f6eff7bdc9e167a9cf02818a",
22971           "f6eff7bdc9e167a9cf1c9099016c59",
22972           "f6eff7d0d1e6a6bddb67a9cf1c9099016c59",
22973           "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450",
22974           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450",
22975           "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636"
22976         ).map(colors);
22977
22978         var PuBuGn = ramp(scheme$d);
22979
22980         var scheme$e = new Array(3).concat(
22981           "ece7f2a6bddb2b8cbe",
22982           "f1eef6bdc9e174a9cf0570b0",
22983           "f1eef6bdc9e174a9cf2b8cbe045a8d",
22984           "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d",
22985           "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b",
22986           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b",
22987           "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858"
22988         ).map(colors);
22989
22990         var PuBu = ramp(scheme$e);
22991
22992         var scheme$f = new Array(3).concat(
22993           "e7e1efc994c7dd1c77",
22994           "f1eef6d7b5d8df65b0ce1256",
22995           "f1eef6d7b5d8df65b0dd1c77980043",
22996           "f1eef6d4b9dac994c7df65b0dd1c77980043",
22997           "f1eef6d4b9dac994c7df65b0e7298ace125691003f",
22998           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f",
22999           "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f"
23000         ).map(colors);
23001
23002         var PuRd = ramp(scheme$f);
23003
23004         var scheme$g = new Array(3).concat(
23005           "fde0ddfa9fb5c51b8a",
23006           "feebe2fbb4b9f768a1ae017e",
23007           "feebe2fbb4b9f768a1c51b8a7a0177",
23008           "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177",
23009           "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177",
23010           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177",
23011           "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a"
23012         ).map(colors);
23013
23014         var RdPu = ramp(scheme$g);
23015
23016         var scheme$h = new Array(3).concat(
23017           "edf8b17fcdbb2c7fb8",
23018           "ffffcca1dab441b6c4225ea8",
23019           "ffffcca1dab441b6c42c7fb8253494",
23020           "ffffccc7e9b47fcdbb41b6c42c7fb8253494",
23021           "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84",
23022           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84",
23023           "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58"
23024         ).map(colors);
23025
23026         var YlGnBu = ramp(scheme$h);
23027
23028         var scheme$i = new Array(3).concat(
23029           "f7fcb9addd8e31a354",
23030           "ffffccc2e69978c679238443",
23031           "ffffccc2e69978c67931a354006837",
23032           "ffffccd9f0a3addd8e78c67931a354006837",
23033           "ffffccd9f0a3addd8e78c67941ab5d238443005a32",
23034           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32",
23035           "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529"
23036         ).map(colors);
23037
23038         var YlGn = ramp(scheme$i);
23039
23040         var scheme$j = new Array(3).concat(
23041           "fff7bcfec44fd95f0e",
23042           "ffffd4fed98efe9929cc4c02",
23043           "ffffd4fed98efe9929d95f0e993404",
23044           "ffffd4fee391fec44ffe9929d95f0e993404",
23045           "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04",
23046           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04",
23047           "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506"
23048         ).map(colors);
23049
23050         var YlOrBr = ramp(scheme$j);
23051
23052         var scheme$k = new Array(3).concat(
23053           "ffeda0feb24cf03b20",
23054           "ffffb2fecc5cfd8d3ce31a1c",
23055           "ffffb2fecc5cfd8d3cf03b20bd0026",
23056           "ffffb2fed976feb24cfd8d3cf03b20bd0026",
23057           "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026",
23058           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026",
23059           "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026"
23060         ).map(colors);
23061
23062         var YlOrRd = ramp(scheme$k);
23063
23064         var scheme$l = new Array(3).concat(
23065           "deebf79ecae13182bd",
23066           "eff3ffbdd7e76baed62171b5",
23067           "eff3ffbdd7e76baed63182bd08519c",
23068           "eff3ffc6dbef9ecae16baed63182bd08519c",
23069           "eff3ffc6dbef9ecae16baed64292c62171b5084594",
23070           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594",
23071           "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b"
23072         ).map(colors);
23073
23074         var Blues = ramp(scheme$l);
23075
23076         var scheme$m = new Array(3).concat(
23077           "e5f5e0a1d99b31a354",
23078           "edf8e9bae4b374c476238b45",
23079           "edf8e9bae4b374c47631a354006d2c",
23080           "edf8e9c7e9c0a1d99b74c47631a354006d2c",
23081           "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32",
23082           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32",
23083           "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b"
23084         ).map(colors);
23085
23086         var Greens = ramp(scheme$m);
23087
23088         var scheme$n = new Array(3).concat(
23089           "f0f0f0bdbdbd636363",
23090           "f7f7f7cccccc969696525252",
23091           "f7f7f7cccccc969696636363252525",
23092           "f7f7f7d9d9d9bdbdbd969696636363252525",
23093           "f7f7f7d9d9d9bdbdbd969696737373525252252525",
23094           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525",
23095           "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000"
23096         ).map(colors);
23097
23098         var Greys = ramp(scheme$n);
23099
23100         var scheme$o = new Array(3).concat(
23101           "efedf5bcbddc756bb1",
23102           "f2f0f7cbc9e29e9ac86a51a3",
23103           "f2f0f7cbc9e29e9ac8756bb154278f",
23104           "f2f0f7dadaebbcbddc9e9ac8756bb154278f",
23105           "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486",
23106           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486",
23107           "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d"
23108         ).map(colors);
23109
23110         var Purples = ramp(scheme$o);
23111
23112         var scheme$p = new Array(3).concat(
23113           "fee0d2fc9272de2d26",
23114           "fee5d9fcae91fb6a4acb181d",
23115           "fee5d9fcae91fb6a4ade2d26a50f15",
23116           "fee5d9fcbba1fc9272fb6a4ade2d26a50f15",
23117           "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d",
23118           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d",
23119           "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d"
23120         ).map(colors);
23121
23122         var Reds = ramp(scheme$p);
23123
23124         var scheme$q = new Array(3).concat(
23125           "fee6cefdae6be6550d",
23126           "feeddefdbe85fd8d3cd94701",
23127           "feeddefdbe85fd8d3ce6550da63603",
23128           "feeddefdd0a2fdae6bfd8d3ce6550da63603",
23129           "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04",
23130           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04",
23131           "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704"
23132         ).map(colors);
23133
23134         var Oranges = ramp(scheme$q);
23135
23136         function cividis(t) {
23137           t = Math.max(0, Math.min(1, t));
23138           return "rgb("
23139               + 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))))))) + ", "
23140               + 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))))))) + ", "
23141               + 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)))))))
23142               + ")";
23143         }
23144
23145         var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
23146
23147         var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
23148
23149         var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
23150
23151         var c = cubehelix();
23152
23153         function rainbow(t) {
23154           if (t < 0 || t > 1) { t -= Math.floor(t); }
23155           var ts = Math.abs(t - 0.5);
23156           c.h = 360 * t - 100;
23157           c.s = 1.5 - 1.5 * ts;
23158           c.l = 0.8 - 0.9 * ts;
23159           return c + "";
23160         }
23161
23162         var c$1 = rgb(),
23163             pi_1_3 = Math.PI / 3,
23164             pi_2_3 = Math.PI * 2 / 3;
23165
23166         function sinebow(t) {
23167           var x;
23168           t = (0.5 - t) * Math.PI;
23169           c$1.r = 255 * (x = Math.sin(t)) * x;
23170           c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;
23171           c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;
23172           return c$1 + "";
23173         }
23174
23175         function turbo(t) {
23176           t = Math.max(0, Math.min(1, t));
23177           return "rgb("
23178               + 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))))))) + ", "
23179               + 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))))))) + ", "
23180               + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))
23181               + ")";
23182         }
23183
23184         function ramp$1(range) {
23185           var n = range.length;
23186           return function(t) {
23187             return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
23188           };
23189         }
23190
23191         var viridis = ramp$1(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
23192
23193         var magma = ramp$1(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
23194
23195         var inferno = ramp$1(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
23196
23197         var plasma = ramp$1(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
23198
23199         function constant$b(x) {
23200           return function constant() {
23201             return x;
23202           };
23203         }
23204
23205         var abs$3 = Math.abs;
23206         var atan2$1 = Math.atan2;
23207         var cos$2 = Math.cos;
23208         var max$4 = Math.max;
23209         var min$1 = Math.min;
23210         var sin$2 = Math.sin;
23211         var sqrt$2 = Math.sqrt;
23212
23213         var epsilon$3 = 1e-12;
23214         var pi$4 = Math.PI;
23215         var halfPi$3 = pi$4 / 2;
23216         var tau$4 = 2 * pi$4;
23217
23218         function acos$1(x) {
23219           return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
23220         }
23221
23222         function asin$1(x) {
23223           return x >= 1 ? halfPi$3 : x <= -1 ? -halfPi$3 : Math.asin(x);
23224         }
23225
23226         function arcInnerRadius(d) {
23227           return d.innerRadius;
23228         }
23229
23230         function arcOuterRadius(d) {
23231           return d.outerRadius;
23232         }
23233
23234         function arcStartAngle(d) {
23235           return d.startAngle;
23236         }
23237
23238         function arcEndAngle(d) {
23239           return d.endAngle;
23240         }
23241
23242         function arcPadAngle(d) {
23243           return d && d.padAngle; // Note: optional!
23244         }
23245
23246         function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
23247           var x10 = x1 - x0, y10 = y1 - y0,
23248               x32 = x3 - x2, y32 = y3 - y2,
23249               t = y32 * x10 - x32 * y10;
23250           if (t * t < epsilon$3) { return; }
23251           t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
23252           return [x0 + t * x10, y0 + t * y10];
23253         }
23254
23255         // Compute perpendicular offset line of length rc.
23256         // http://mathworld.wolfram.com/Circle-LineIntersection.html
23257         function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
23258           var x01 = x0 - x1,
23259               y01 = y0 - y1,
23260               lo = (cw ? rc : -rc) / sqrt$2(x01 * x01 + y01 * y01),
23261               ox = lo * y01,
23262               oy = -lo * x01,
23263               x11 = x0 + ox,
23264               y11 = y0 + oy,
23265               x10 = x1 + ox,
23266               y10 = y1 + oy,
23267               x00 = (x11 + x10) / 2,
23268               y00 = (y11 + y10) / 2,
23269               dx = x10 - x11,
23270               dy = y10 - y11,
23271               d2 = dx * dx + dy * dy,
23272               r = r1 - rc,
23273               D = x11 * y10 - x10 * y11,
23274               d = (dy < 0 ? -1 : 1) * sqrt$2(max$4(0, r * r * d2 - D * D)),
23275               cx0 = (D * dy - dx * d) / d2,
23276               cy0 = (-D * dx - dy * d) / d2,
23277               cx1 = (D * dy + dx * d) / d2,
23278               cy1 = (-D * dx + dy * d) / d2,
23279               dx0 = cx0 - x00,
23280               dy0 = cy0 - y00,
23281               dx1 = cx1 - x00,
23282               dy1 = cy1 - y00;
23283
23284           // Pick the closer of the two intersection points.
23285           // TODO Is there a faster way to determine which intersection to use?
23286           if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) { cx0 = cx1, cy0 = cy1; }
23287
23288           return {
23289             cx: cx0,
23290             cy: cy0,
23291             x01: -ox,
23292             y01: -oy,
23293             x11: cx0 * (r1 / r - 1),
23294             y11: cy0 * (r1 / r - 1)
23295           };
23296         }
23297
23298         function arc() {
23299           var innerRadius = arcInnerRadius,
23300               outerRadius = arcOuterRadius,
23301               cornerRadius = constant$b(0),
23302               padRadius = null,
23303               startAngle = arcStartAngle,
23304               endAngle = arcEndAngle,
23305               padAngle = arcPadAngle,
23306               context = null;
23307
23308           function arc() {
23309             var buffer,
23310                 r,
23311                 r0 = +innerRadius.apply(this, arguments),
23312                 r1 = +outerRadius.apply(this, arguments),
23313                 a0 = startAngle.apply(this, arguments) - halfPi$3,
23314                 a1 = endAngle.apply(this, arguments) - halfPi$3,
23315                 da = abs$3(a1 - a0),
23316                 cw = a1 > a0;
23317
23318             if (!context) { context = buffer = path(); }
23319
23320             // Ensure that the outer radius is always larger than the inner radius.
23321             if (r1 < r0) { r = r1, r1 = r0, r0 = r; }
23322
23323             // Is it a point?
23324             if (!(r1 > epsilon$3)) { context.moveTo(0, 0); }
23325
23326             // Or is it a circle or annulus?
23327             else if (da > tau$4 - epsilon$3) {
23328               context.moveTo(r1 * cos$2(a0), r1 * sin$2(a0));
23329               context.arc(0, 0, r1, a0, a1, !cw);
23330               if (r0 > epsilon$3) {
23331                 context.moveTo(r0 * cos$2(a1), r0 * sin$2(a1));
23332                 context.arc(0, 0, r0, a1, a0, cw);
23333               }
23334             }
23335
23336             // Or is it a circular or annular sector?
23337             else {
23338               var a01 = a0,
23339                   a11 = a1,
23340                   a00 = a0,
23341                   a10 = a1,
23342                   da0 = da,
23343                   da1 = da,
23344                   ap = padAngle.apply(this, arguments) / 2,
23345                   rp = (ap > epsilon$3) && (padRadius ? +padRadius.apply(this, arguments) : sqrt$2(r0 * r0 + r1 * r1)),
23346                   rc = min$1(abs$3(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
23347                   rc0 = rc,
23348                   rc1 = rc,
23349                   t0,
23350                   t1;
23351
23352               // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
23353               if (rp > epsilon$3) {
23354                 var p0 = asin$1(rp / r0 * sin$2(ap)),
23355                     p1 = asin$1(rp / r1 * sin$2(ap));
23356                 if ((da0 -= p0 * 2) > epsilon$3) { p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; }
23357                 else { da0 = 0, a00 = a10 = (a0 + a1) / 2; }
23358                 if ((da1 -= p1 * 2) > epsilon$3) { p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; }
23359                 else { da1 = 0, a01 = a11 = (a0 + a1) / 2; }
23360               }
23361
23362               var x01 = r1 * cos$2(a01),
23363                   y01 = r1 * sin$2(a01),
23364                   x10 = r0 * cos$2(a10),
23365                   y10 = r0 * sin$2(a10);
23366
23367               // Apply rounded corners?
23368               if (rc > epsilon$3) {
23369                 var x11 = r1 * cos$2(a11),
23370                     y11 = r1 * sin$2(a11),
23371                     x00 = r0 * cos$2(a00),
23372                     y00 = r0 * sin$2(a00),
23373                     oc;
23374
23375                 // Restrict the corner radius according to the sector angle.
23376                 if (da < pi$4 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {
23377                   var ax = x01 - oc[0],
23378                       ay = y01 - oc[1],
23379                       bx = x11 - oc[0],
23380                       by = y11 - oc[1],
23381                       kc = 1 / sin$2(acos$1((ax * bx + ay * by) / (sqrt$2(ax * ax + ay * ay) * sqrt$2(bx * bx + by * by))) / 2),
23382                       lc = sqrt$2(oc[0] * oc[0] + oc[1] * oc[1]);
23383                   rc0 = min$1(rc, (r0 - lc) / (kc - 1));
23384                   rc1 = min$1(rc, (r1 - lc) / (kc + 1));
23385                 }
23386               }
23387
23388               // Is the sector collapsed to a line?
23389               if (!(da1 > epsilon$3)) { context.moveTo(x01, y01); }
23390
23391               // Does the sector’s outer ring have rounded corners?
23392               else if (rc1 > epsilon$3) {
23393                 t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
23394                 t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
23395
23396                 context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
23397
23398                 // Have the corners merged?
23399                 if (rc1 < rc) { context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); }
23400
23401                 // Otherwise, draw the two corners and the ring.
23402                 else {
23403                   context.arc(t0.cx, t0.cy, rc1, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
23404                   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);
23405                   context.arc(t1.cx, t1.cy, rc1, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
23406                 }
23407               }
23408
23409               // Or is the outer ring just a circular arc?
23410               else { context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); }
23411
23412               // Is there no inner ring, and it’s a circular sector?
23413               // Or perhaps it’s an annular sector collapsed due to padding?
23414               if (!(r0 > epsilon$3) || !(da0 > epsilon$3)) { context.lineTo(x10, y10); }
23415
23416               // Does the sector’s inner ring (or point) have rounded corners?
23417               else if (rc0 > epsilon$3) {
23418                 t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
23419                 t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
23420
23421                 context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
23422
23423                 // Have the corners merged?
23424                 if (rc0 < rc) { context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t1.y01, t1.x01), !cw); }
23425
23426                 // Otherwise, draw the two corners and the ring.
23427                 else {
23428                   context.arc(t0.cx, t0.cy, rc0, atan2$1(t0.y01, t0.x01), atan2$1(t0.y11, t0.x11), !cw);
23429                   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);
23430                   context.arc(t1.cx, t1.cy, rc0, atan2$1(t1.y11, t1.x11), atan2$1(t1.y01, t1.x01), !cw);
23431                 }
23432               }
23433
23434               // Or is the inner ring just a circular arc?
23435               else { context.arc(0, 0, r0, a10, a00, cw); }
23436             }
23437
23438             context.closePath();
23439
23440             if (buffer) { return context = null, buffer + "" || null; }
23441           }
23442
23443           arc.centroid = function() {
23444             var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
23445                 a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$4 / 2;
23446             return [cos$2(a) * r, sin$2(a) * r];
23447           };
23448
23449           arc.innerRadius = function(_) {
23450             return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : innerRadius;
23451           };
23452
23453           arc.outerRadius = function(_) {
23454             return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : outerRadius;
23455           };
23456
23457           arc.cornerRadius = function(_) {
23458             return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$b(+_), arc) : cornerRadius;
23459           };
23460
23461           arc.padRadius = function(_) {
23462             return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), arc) : padRadius;
23463           };
23464
23465           arc.startAngle = function(_) {
23466             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : startAngle;
23467           };
23468
23469           arc.endAngle = function(_) {
23470             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : endAngle;
23471           };
23472
23473           arc.padAngle = function(_) {
23474             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), arc) : padAngle;
23475           };
23476
23477           arc.context = function(_) {
23478             return arguments.length ? ((context = _ == null ? null : _), arc) : context;
23479           };
23480
23481           return arc;
23482         }
23483
23484         function Linear(context) {
23485           this._context = context;
23486         }
23487
23488         Linear.prototype = {
23489           areaStart: function() {
23490             this._line = 0;
23491           },
23492           areaEnd: function() {
23493             this._line = NaN;
23494           },
23495           lineStart: function() {
23496             this._point = 0;
23497           },
23498           lineEnd: function() {
23499             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
23500             this._line = 1 - this._line;
23501           },
23502           point: function(x, y) {
23503             x = +x, y = +y;
23504             switch (this._point) {
23505               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
23506               case 1: this._point = 2; // proceed
23507               default: this._context.lineTo(x, y); break;
23508             }
23509           }
23510         };
23511
23512         function curveLinear(context) {
23513           return new Linear(context);
23514         }
23515
23516         function x$3(p) {
23517           return p[0];
23518         }
23519
23520         function y$3(p) {
23521           return p[1];
23522         }
23523
23524         function line() {
23525           var x = x$3,
23526               y = y$3,
23527               defined = constant$b(true),
23528               context = null,
23529               curve = curveLinear,
23530               output = null;
23531
23532           function line(data) {
23533             var i,
23534                 n = data.length,
23535                 d,
23536                 defined0 = false,
23537                 buffer;
23538
23539             if (context == null) { output = curve(buffer = path()); }
23540
23541             for (i = 0; i <= n; ++i) {
23542               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
23543                 if (defined0 = !defined0) { output.lineStart(); }
23544                 else { output.lineEnd(); }
23545               }
23546               if (defined0) { output.point(+x(d, i, data), +y(d, i, data)); }
23547             }
23548
23549             if (buffer) { return output = null, buffer + "" || null; }
23550           }
23551
23552           line.x = function(_) {
23553             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), line) : x;
23554           };
23555
23556           line.y = function(_) {
23557             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), line) : y;
23558           };
23559
23560           line.defined = function(_) {
23561             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), line) : defined;
23562           };
23563
23564           line.curve = function(_) {
23565             return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
23566           };
23567
23568           line.context = function(_) {
23569             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
23570           };
23571
23572           return line;
23573         }
23574
23575         function area$1() {
23576           var x0 = x$3,
23577               x1 = null,
23578               y0 = constant$b(0),
23579               y1 = y$3,
23580               defined = constant$b(true),
23581               context = null,
23582               curve = curveLinear,
23583               output = null;
23584
23585           function area(data) {
23586             var i,
23587                 j,
23588                 k,
23589                 n = data.length,
23590                 d,
23591                 defined0 = false,
23592                 buffer,
23593                 x0z = new Array(n),
23594                 y0z = new Array(n);
23595
23596             if (context == null) { output = curve(buffer = path()); }
23597
23598             for (i = 0; i <= n; ++i) {
23599               if (!(i < n && defined(d = data[i], i, data)) === defined0) {
23600                 if (defined0 = !defined0) {
23601                   j = i;
23602                   output.areaStart();
23603                   output.lineStart();
23604                 } else {
23605                   output.lineEnd();
23606                   output.lineStart();
23607                   for (k = i - 1; k >= j; --k) {
23608                     output.point(x0z[k], y0z[k]);
23609                   }
23610                   output.lineEnd();
23611                   output.areaEnd();
23612                 }
23613               }
23614               if (defined0) {
23615                 x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
23616                 output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
23617               }
23618             }
23619
23620             if (buffer) { return output = null, buffer + "" || null; }
23621           }
23622
23623           function arealine() {
23624             return line().defined(defined).curve(curve).context(context);
23625           }
23626
23627           area.x = function(_) {
23628             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), x1 = null, area) : x0;
23629           };
23630
23631           area.x0 = function(_) {
23632             return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$b(+_), area) : x0;
23633           };
23634
23635           area.x1 = function(_) {
23636             return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : x1;
23637           };
23638
23639           area.y = function(_) {
23640             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), y1 = null, area) : y0;
23641           };
23642
23643           area.y0 = function(_) {
23644             return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$b(+_), area) : y0;
23645           };
23646
23647           area.y1 = function(_) {
23648             return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$b(+_), area) : y1;
23649           };
23650
23651           area.lineX0 =
23652           area.lineY0 = function() {
23653             return arealine().x(x0).y(y0);
23654           };
23655
23656           area.lineY1 = function() {
23657             return arealine().x(x0).y(y1);
23658           };
23659
23660           area.lineX1 = function() {
23661             return arealine().x(x1).y(y0);
23662           };
23663
23664           area.defined = function(_) {
23665             return arguments.length ? (defined = typeof _ === "function" ? _ : constant$b(!!_), area) : defined;
23666           };
23667
23668           area.curve = function(_) {
23669             return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
23670           };
23671
23672           area.context = function(_) {
23673             return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
23674           };
23675
23676           return area;
23677         }
23678
23679         function descending(a, b) {
23680           return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
23681         }
23682
23683         function identity$7(d) {
23684           return d;
23685         }
23686
23687         function pie() {
23688           var value = identity$7,
23689               sortValues = descending,
23690               sort = null,
23691               startAngle = constant$b(0),
23692               endAngle = constant$b(tau$4),
23693               padAngle = constant$b(0);
23694
23695           function pie(data) {
23696             var i,
23697                 n = data.length,
23698                 j,
23699                 k,
23700                 sum = 0,
23701                 index = new Array(n),
23702                 arcs = new Array(n),
23703                 a0 = +startAngle.apply(this, arguments),
23704                 da = Math.min(tau$4, Math.max(-tau$4, endAngle.apply(this, arguments) - a0)),
23705                 a1,
23706                 p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
23707                 pa = p * (da < 0 ? -1 : 1),
23708                 v;
23709
23710             for (i = 0; i < n; ++i) {
23711               if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
23712                 sum += v;
23713               }
23714             }
23715
23716             // Optionally sort the arcs by previously-computed values or by data.
23717             if (sortValues != null) { index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); }
23718             else if (sort != null) { index.sort(function(i, j) { return sort(data[i], data[j]); }); }
23719
23720             // Compute the arcs! They are stored in the original data's order.
23721             for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
23722               j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
23723                 data: data[j],
23724                 index: i,
23725                 value: v,
23726                 startAngle: a0,
23727                 endAngle: a1,
23728                 padAngle: p
23729               };
23730             }
23731
23732             return arcs;
23733           }
23734
23735           pie.value = function(_) {
23736             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), pie) : value;
23737           };
23738
23739           pie.sortValues = function(_) {
23740             return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
23741           };
23742
23743           pie.sort = function(_) {
23744             return arguments.length ? (sort = _, sortValues = null, pie) : sort;
23745           };
23746
23747           pie.startAngle = function(_) {
23748             return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : startAngle;
23749           };
23750
23751           pie.endAngle = function(_) {
23752             return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : endAngle;
23753           };
23754
23755           pie.padAngle = function(_) {
23756             return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$b(+_), pie) : padAngle;
23757           };
23758
23759           return pie;
23760         }
23761
23762         var curveRadialLinear = curveRadial(curveLinear);
23763
23764         function Radial(curve) {
23765           this._curve = curve;
23766         }
23767
23768         Radial.prototype = {
23769           areaStart: function() {
23770             this._curve.areaStart();
23771           },
23772           areaEnd: function() {
23773             this._curve.areaEnd();
23774           },
23775           lineStart: function() {
23776             this._curve.lineStart();
23777           },
23778           lineEnd: function() {
23779             this._curve.lineEnd();
23780           },
23781           point: function(a, r) {
23782             this._curve.point(r * Math.sin(a), r * -Math.cos(a));
23783           }
23784         };
23785
23786         function curveRadial(curve) {
23787
23788           function radial(context) {
23789             return new Radial(curve(context));
23790           }
23791
23792           radial._curve = curve;
23793
23794           return radial;
23795         }
23796
23797         function lineRadial(l) {
23798           var c = l.curve;
23799
23800           l.angle = l.x, delete l.x;
23801           l.radius = l.y, delete l.y;
23802
23803           l.curve = function(_) {
23804             return arguments.length ? c(curveRadial(_)) : c()._curve;
23805           };
23806
23807           return l;
23808         }
23809
23810         function lineRadial$1() {
23811           return lineRadial(line().curve(curveRadialLinear));
23812         }
23813
23814         function areaRadial() {
23815           var a = area$1().curve(curveRadialLinear),
23816               c = a.curve,
23817               x0 = a.lineX0,
23818               x1 = a.lineX1,
23819               y0 = a.lineY0,
23820               y1 = a.lineY1;
23821
23822           a.angle = a.x, delete a.x;
23823           a.startAngle = a.x0, delete a.x0;
23824           a.endAngle = a.x1, delete a.x1;
23825           a.radius = a.y, delete a.y;
23826           a.innerRadius = a.y0, delete a.y0;
23827           a.outerRadius = a.y1, delete a.y1;
23828           a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;
23829           a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;
23830           a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;
23831           a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;
23832
23833           a.curve = function(_) {
23834             return arguments.length ? c(curveRadial(_)) : c()._curve;
23835           };
23836
23837           return a;
23838         }
23839
23840         function pointRadial(x, y) {
23841           return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
23842         }
23843
23844         var slice$a = Array.prototype.slice;
23845
23846         function linkSource(d) {
23847           return d.source;
23848         }
23849
23850         function linkTarget(d) {
23851           return d.target;
23852         }
23853
23854         function link$2(curve) {
23855           var source = linkSource,
23856               target = linkTarget,
23857               x = x$3,
23858               y = y$3,
23859               context = null;
23860
23861           function link() {
23862             var buffer, argv = slice$a.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
23863             if (!context) { context = buffer = path(); }
23864             curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
23865             if (buffer) { return context = null, buffer + "" || null; }
23866           }
23867
23868           link.source = function(_) {
23869             return arguments.length ? (source = _, link) : source;
23870           };
23871
23872           link.target = function(_) {
23873             return arguments.length ? (target = _, link) : target;
23874           };
23875
23876           link.x = function(_) {
23877             return arguments.length ? (x = typeof _ === "function" ? _ : constant$b(+_), link) : x;
23878           };
23879
23880           link.y = function(_) {
23881             return arguments.length ? (y = typeof _ === "function" ? _ : constant$b(+_), link) : y;
23882           };
23883
23884           link.context = function(_) {
23885             return arguments.length ? ((context = _ == null ? null : _), link) : context;
23886           };
23887
23888           return link;
23889         }
23890
23891         function curveHorizontal(context, x0, y0, x1, y1) {
23892           context.moveTo(x0, y0);
23893           context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
23894         }
23895
23896         function curveVertical(context, x0, y0, x1, y1) {
23897           context.moveTo(x0, y0);
23898           context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
23899         }
23900
23901         function curveRadial$1(context, x0, y0, x1, y1) {
23902           var p0 = pointRadial(x0, y0),
23903               p1 = pointRadial(x0, y0 = (y0 + y1) / 2),
23904               p2 = pointRadial(x1, y0),
23905               p3 = pointRadial(x1, y1);
23906           context.moveTo(p0[0], p0[1]);
23907           context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
23908         }
23909
23910         function linkHorizontal() {
23911           return link$2(curveHorizontal);
23912         }
23913
23914         function linkVertical() {
23915           return link$2(curveVertical);
23916         }
23917
23918         function linkRadial() {
23919           var l = link$2(curveRadial$1);
23920           l.angle = l.x, delete l.x;
23921           l.radius = l.y, delete l.y;
23922           return l;
23923         }
23924
23925         var circle$2 = {
23926           draw: function(context, size) {
23927             var r = Math.sqrt(size / pi$4);
23928             context.moveTo(r, 0);
23929             context.arc(0, 0, r, 0, tau$4);
23930           }
23931         };
23932
23933         var cross$2 = {
23934           draw: function(context, size) {
23935             var r = Math.sqrt(size / 5) / 2;
23936             context.moveTo(-3 * r, -r);
23937             context.lineTo(-r, -r);
23938             context.lineTo(-r, -3 * r);
23939             context.lineTo(r, -3 * r);
23940             context.lineTo(r, -r);
23941             context.lineTo(3 * r, -r);
23942             context.lineTo(3 * r, r);
23943             context.lineTo(r, r);
23944             context.lineTo(r, 3 * r);
23945             context.lineTo(-r, 3 * r);
23946             context.lineTo(-r, r);
23947             context.lineTo(-3 * r, r);
23948             context.closePath();
23949           }
23950         };
23951
23952         var tan30 = Math.sqrt(1 / 3),
23953             tan30_2 = tan30 * 2;
23954
23955         var diamond = {
23956           draw: function(context, size) {
23957             var y = Math.sqrt(size / tan30_2),
23958                 x = y * tan30;
23959             context.moveTo(0, -y);
23960             context.lineTo(x, 0);
23961             context.lineTo(0, y);
23962             context.lineTo(-x, 0);
23963             context.closePath();
23964           }
23965         };
23966
23967         var ka = 0.89081309152928522810,
23968             kr = Math.sin(pi$4 / 10) / Math.sin(7 * pi$4 / 10),
23969             kx = Math.sin(tau$4 / 10) * kr,
23970             ky = -Math.cos(tau$4 / 10) * kr;
23971
23972         var star = {
23973           draw: function(context, size) {
23974             var r = Math.sqrt(size * ka),
23975                 x = kx * r,
23976                 y = ky * r;
23977             context.moveTo(0, -r);
23978             context.lineTo(x, y);
23979             for (var i = 1; i < 5; ++i) {
23980               var a = tau$4 * i / 5,
23981                   c = Math.cos(a),
23982                   s = Math.sin(a);
23983               context.lineTo(s * r, -c * r);
23984               context.lineTo(c * x - s * y, s * x + c * y);
23985             }
23986             context.closePath();
23987           }
23988         };
23989
23990         var square = {
23991           draw: function(context, size) {
23992             var w = Math.sqrt(size),
23993                 x = -w / 2;
23994             context.rect(x, x, w, w);
23995           }
23996         };
23997
23998         var sqrt3 = Math.sqrt(3);
23999
24000         var triangle = {
24001           draw: function(context, size) {
24002             var y = -Math.sqrt(size / (sqrt3 * 3));
24003             context.moveTo(0, y * 2);
24004             context.lineTo(-sqrt3 * y, -y);
24005             context.lineTo(sqrt3 * y, -y);
24006             context.closePath();
24007           }
24008         };
24009
24010         var c$2 = -0.5,
24011             s = Math.sqrt(3) / 2,
24012             k = 1 / Math.sqrt(12),
24013             a = (k / 2 + 1) * 3;
24014
24015         var wye = {
24016           draw: function(context, size) {
24017             var r = Math.sqrt(size / a),
24018                 x0 = r / 2,
24019                 y0 = r * k,
24020                 x1 = x0,
24021                 y1 = r * k + r,
24022                 x2 = -x1,
24023                 y2 = y1;
24024             context.moveTo(x0, y0);
24025             context.lineTo(x1, y1);
24026             context.lineTo(x2, y2);
24027             context.lineTo(c$2 * x0 - s * y0, s * x0 + c$2 * y0);
24028             context.lineTo(c$2 * x1 - s * y1, s * x1 + c$2 * y1);
24029             context.lineTo(c$2 * x2 - s * y2, s * x2 + c$2 * y2);
24030             context.lineTo(c$2 * x0 + s * y0, c$2 * y0 - s * x0);
24031             context.lineTo(c$2 * x1 + s * y1, c$2 * y1 - s * x1);
24032             context.lineTo(c$2 * x2 + s * y2, c$2 * y2 - s * x2);
24033             context.closePath();
24034           }
24035         };
24036
24037         var symbols = [
24038           circle$2,
24039           cross$2,
24040           diamond,
24041           square,
24042           star,
24043           triangle,
24044           wye
24045         ];
24046
24047         function symbol() {
24048           var type = constant$b(circle$2),
24049               size = constant$b(64),
24050               context = null;
24051
24052           function symbol() {
24053             var buffer;
24054             if (!context) { context = buffer = path(); }
24055             type.apply(this, arguments).draw(context, +size.apply(this, arguments));
24056             if (buffer) { return context = null, buffer + "" || null; }
24057           }
24058
24059           symbol.type = function(_) {
24060             return arguments.length ? (type = typeof _ === "function" ? _ : constant$b(_), symbol) : type;
24061           };
24062
24063           symbol.size = function(_) {
24064             return arguments.length ? (size = typeof _ === "function" ? _ : constant$b(+_), symbol) : size;
24065           };
24066
24067           symbol.context = function(_) {
24068             return arguments.length ? (context = _ == null ? null : _, symbol) : context;
24069           };
24070
24071           return symbol;
24072         }
24073
24074         function noop$5() {}
24075
24076         function point$2(that, x, y) {
24077           that._context.bezierCurveTo(
24078             (2 * that._x0 + that._x1) / 3,
24079             (2 * that._y0 + that._y1) / 3,
24080             (that._x0 + 2 * that._x1) / 3,
24081             (that._y0 + 2 * that._y1) / 3,
24082             (that._x0 + 4 * that._x1 + x) / 6,
24083             (that._y0 + 4 * that._y1 + y) / 6
24084           );
24085         }
24086
24087         function Basis(context) {
24088           this._context = context;
24089         }
24090
24091         Basis.prototype = {
24092           areaStart: function() {
24093             this._line = 0;
24094           },
24095           areaEnd: function() {
24096             this._line = NaN;
24097           },
24098           lineStart: function() {
24099             this._x0 = this._x1 =
24100             this._y0 = this._y1 = NaN;
24101             this._point = 0;
24102           },
24103           lineEnd: function() {
24104             switch (this._point) {
24105               case 3: point$2(this, this._x1, this._y1); // proceed
24106               case 2: this._context.lineTo(this._x1, this._y1); break;
24107             }
24108             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
24109             this._line = 1 - this._line;
24110           },
24111           point: function(x, y) {
24112             x = +x, y = +y;
24113             switch (this._point) {
24114               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
24115               case 1: this._point = 2; break;
24116               case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
24117               default: point$2(this, x, y); break;
24118             }
24119             this._x0 = this._x1, this._x1 = x;
24120             this._y0 = this._y1, this._y1 = y;
24121           }
24122         };
24123
24124         function basis$2(context) {
24125           return new Basis(context);
24126         }
24127
24128         function BasisClosed(context) {
24129           this._context = context;
24130         }
24131
24132         BasisClosed.prototype = {
24133           areaStart: noop$5,
24134           areaEnd: noop$5,
24135           lineStart: function() {
24136             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
24137             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
24138             this._point = 0;
24139           },
24140           lineEnd: function() {
24141             switch (this._point) {
24142               case 1: {
24143                 this._context.moveTo(this._x2, this._y2);
24144                 this._context.closePath();
24145                 break;
24146               }
24147               case 2: {
24148                 this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
24149                 this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
24150                 this._context.closePath();
24151                 break;
24152               }
24153               case 3: {
24154                 this.point(this._x2, this._y2);
24155                 this.point(this._x3, this._y3);
24156                 this.point(this._x4, this._y4);
24157                 break;
24158               }
24159             }
24160           },
24161           point: function(x, y) {
24162             x = +x, y = +y;
24163             switch (this._point) {
24164               case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
24165               case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
24166               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;
24167               default: point$2(this, x, y); break;
24168             }
24169             this._x0 = this._x1, this._x1 = x;
24170             this._y0 = this._y1, this._y1 = y;
24171           }
24172         };
24173
24174         function basisClosed$1(context) {
24175           return new BasisClosed(context);
24176         }
24177
24178         function BasisOpen(context) {
24179           this._context = context;
24180         }
24181
24182         BasisOpen.prototype = {
24183           areaStart: function() {
24184             this._line = 0;
24185           },
24186           areaEnd: function() {
24187             this._line = NaN;
24188           },
24189           lineStart: function() {
24190             this._x0 = this._x1 =
24191             this._y0 = this._y1 = NaN;
24192             this._point = 0;
24193           },
24194           lineEnd: function() {
24195             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
24196             this._line = 1 - this._line;
24197           },
24198           point: function(x, y) {
24199             x = +x, y = +y;
24200             switch (this._point) {
24201               case 0: this._point = 1; break;
24202               case 1: this._point = 2; break;
24203               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;
24204               case 3: this._point = 4; // proceed
24205               default: point$2(this, x, y); break;
24206             }
24207             this._x0 = this._x1, this._x1 = x;
24208             this._y0 = this._y1, this._y1 = y;
24209           }
24210         };
24211
24212         function basisOpen(context) {
24213           return new BasisOpen(context);
24214         }
24215
24216         function Bundle(context, beta) {
24217           this._basis = new Basis(context);
24218           this._beta = beta;
24219         }
24220
24221         Bundle.prototype = {
24222           lineStart: function() {
24223             this._x = [];
24224             this._y = [];
24225             this._basis.lineStart();
24226           },
24227           lineEnd: function() {
24228             var x = this._x,
24229                 y = this._y,
24230                 j = x.length - 1;
24231
24232             if (j > 0) {
24233               var x0 = x[0],
24234                   y0 = y[0],
24235                   dx = x[j] - x0,
24236                   dy = y[j] - y0,
24237                   i = -1,
24238                   t;
24239
24240               while (++i <= j) {
24241                 t = i / j;
24242                 this._basis.point(
24243                   this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
24244                   this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
24245                 );
24246               }
24247             }
24248
24249             this._x = this._y = null;
24250             this._basis.lineEnd();
24251           },
24252           point: function(x, y) {
24253             this._x.push(+x);
24254             this._y.push(+y);
24255           }
24256         };
24257
24258         var bundle = (function custom(beta) {
24259
24260           function bundle(context) {
24261             return beta === 1 ? new Basis(context) : new Bundle(context, beta);
24262           }
24263
24264           bundle.beta = function(beta) {
24265             return custom(+beta);
24266           };
24267
24268           return bundle;
24269         })(0.85);
24270
24271         function point$3(that, x, y) {
24272           that._context.bezierCurveTo(
24273             that._x1 + that._k * (that._x2 - that._x0),
24274             that._y1 + that._k * (that._y2 - that._y0),
24275             that._x2 + that._k * (that._x1 - x),
24276             that._y2 + that._k * (that._y1 - y),
24277             that._x2,
24278             that._y2
24279           );
24280         }
24281
24282         function Cardinal(context, tension) {
24283           this._context = context;
24284           this._k = (1 - tension) / 6;
24285         }
24286
24287         Cardinal.prototype = {
24288           areaStart: function() {
24289             this._line = 0;
24290           },
24291           areaEnd: function() {
24292             this._line = NaN;
24293           },
24294           lineStart: function() {
24295             this._x0 = this._x1 = this._x2 =
24296             this._y0 = this._y1 = this._y2 = NaN;
24297             this._point = 0;
24298           },
24299           lineEnd: function() {
24300             switch (this._point) {
24301               case 2: this._context.lineTo(this._x2, this._y2); break;
24302               case 3: point$3(this, this._x1, this._y1); break;
24303             }
24304             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
24305             this._line = 1 - this._line;
24306           },
24307           point: function(x, y) {
24308             x = +x, y = +y;
24309             switch (this._point) {
24310               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
24311               case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
24312               case 2: this._point = 3; // proceed
24313               default: point$3(this, x, y); break;
24314             }
24315             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
24316             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
24317           }
24318         };
24319
24320         var cardinal = (function custom(tension) {
24321
24322           function cardinal(context) {
24323             return new Cardinal(context, tension);
24324           }
24325
24326           cardinal.tension = function(tension) {
24327             return custom(+tension);
24328           };
24329
24330           return cardinal;
24331         })(0);
24332
24333         function CardinalClosed(context, tension) {
24334           this._context = context;
24335           this._k = (1 - tension) / 6;
24336         }
24337
24338         CardinalClosed.prototype = {
24339           areaStart: noop$5,
24340           areaEnd: noop$5,
24341           lineStart: function() {
24342             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
24343             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
24344             this._point = 0;
24345           },
24346           lineEnd: function() {
24347             switch (this._point) {
24348               case 1: {
24349                 this._context.moveTo(this._x3, this._y3);
24350                 this._context.closePath();
24351                 break;
24352               }
24353               case 2: {
24354                 this._context.lineTo(this._x3, this._y3);
24355                 this._context.closePath();
24356                 break;
24357               }
24358               case 3: {
24359                 this.point(this._x3, this._y3);
24360                 this.point(this._x4, this._y4);
24361                 this.point(this._x5, this._y5);
24362                 break;
24363               }
24364             }
24365           },
24366           point: function(x, y) {
24367             x = +x, y = +y;
24368             switch (this._point) {
24369               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
24370               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
24371               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
24372               default: point$3(this, x, y); break;
24373             }
24374             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
24375             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
24376           }
24377         };
24378
24379         var cardinalClosed = (function custom(tension) {
24380
24381           function cardinal(context) {
24382             return new CardinalClosed(context, tension);
24383           }
24384
24385           cardinal.tension = function(tension) {
24386             return custom(+tension);
24387           };
24388
24389           return cardinal;
24390         })(0);
24391
24392         function CardinalOpen(context, tension) {
24393           this._context = context;
24394           this._k = (1 - tension) / 6;
24395         }
24396
24397         CardinalOpen.prototype = {
24398           areaStart: function() {
24399             this._line = 0;
24400           },
24401           areaEnd: function() {
24402             this._line = NaN;
24403           },
24404           lineStart: function() {
24405             this._x0 = this._x1 = this._x2 =
24406             this._y0 = this._y1 = this._y2 = NaN;
24407             this._point = 0;
24408           },
24409           lineEnd: function() {
24410             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
24411             this._line = 1 - this._line;
24412           },
24413           point: function(x, y) {
24414             x = +x, y = +y;
24415             switch (this._point) {
24416               case 0: this._point = 1; break;
24417               case 1: this._point = 2; break;
24418               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
24419               case 3: this._point = 4; // proceed
24420               default: point$3(this, x, y); break;
24421             }
24422             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
24423             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
24424           }
24425         };
24426
24427         var cardinalOpen = (function custom(tension) {
24428
24429           function cardinal(context) {
24430             return new CardinalOpen(context, tension);
24431           }
24432
24433           cardinal.tension = function(tension) {
24434             return custom(+tension);
24435           };
24436
24437           return cardinal;
24438         })(0);
24439
24440         function point$4(that, x, y) {
24441           var x1 = that._x1,
24442               y1 = that._y1,
24443               x2 = that._x2,
24444               y2 = that._y2;
24445
24446           if (that._l01_a > epsilon$3) {
24447             var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
24448                 n = 3 * that._l01_a * (that._l01_a + that._l12_a);
24449             x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
24450             y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
24451           }
24452
24453           if (that._l23_a > epsilon$3) {
24454             var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
24455                 m = 3 * that._l23_a * (that._l23_a + that._l12_a);
24456             x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
24457             y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
24458           }
24459
24460           that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
24461         }
24462
24463         function CatmullRom(context, alpha) {
24464           this._context = context;
24465           this._alpha = alpha;
24466         }
24467
24468         CatmullRom.prototype = {
24469           areaStart: function() {
24470             this._line = 0;
24471           },
24472           areaEnd: function() {
24473             this._line = NaN;
24474           },
24475           lineStart: function() {
24476             this._x0 = this._x1 = this._x2 =
24477             this._y0 = this._y1 = this._y2 = NaN;
24478             this._l01_a = this._l12_a = this._l23_a =
24479             this._l01_2a = this._l12_2a = this._l23_2a =
24480             this._point = 0;
24481           },
24482           lineEnd: function() {
24483             switch (this._point) {
24484               case 2: this._context.lineTo(this._x2, this._y2); break;
24485               case 3: this.point(this._x2, this._y2); break;
24486             }
24487             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
24488             this._line = 1 - this._line;
24489           },
24490           point: function(x, y) {
24491             x = +x, y = +y;
24492
24493             if (this._point) {
24494               var x23 = this._x2 - x,
24495                   y23 = this._y2 - y;
24496               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
24497             }
24498
24499             switch (this._point) {
24500               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
24501               case 1: this._point = 2; break;
24502               case 2: this._point = 3; // proceed
24503               default: point$4(this, x, y); break;
24504             }
24505
24506             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
24507             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
24508             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
24509             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
24510           }
24511         };
24512
24513         var catmullRom = (function custom(alpha) {
24514
24515           function catmullRom(context) {
24516             return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
24517           }
24518
24519           catmullRom.alpha = function(alpha) {
24520             return custom(+alpha);
24521           };
24522
24523           return catmullRom;
24524         })(0.5);
24525
24526         function CatmullRomClosed(context, alpha) {
24527           this._context = context;
24528           this._alpha = alpha;
24529         }
24530
24531         CatmullRomClosed.prototype = {
24532           areaStart: noop$5,
24533           areaEnd: noop$5,
24534           lineStart: function() {
24535             this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
24536             this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
24537             this._l01_a = this._l12_a = this._l23_a =
24538             this._l01_2a = this._l12_2a = this._l23_2a =
24539             this._point = 0;
24540           },
24541           lineEnd: function() {
24542             switch (this._point) {
24543               case 1: {
24544                 this._context.moveTo(this._x3, this._y3);
24545                 this._context.closePath();
24546                 break;
24547               }
24548               case 2: {
24549                 this._context.lineTo(this._x3, this._y3);
24550                 this._context.closePath();
24551                 break;
24552               }
24553               case 3: {
24554                 this.point(this._x3, this._y3);
24555                 this.point(this._x4, this._y4);
24556                 this.point(this._x5, this._y5);
24557                 break;
24558               }
24559             }
24560           },
24561           point: function(x, y) {
24562             x = +x, y = +y;
24563
24564             if (this._point) {
24565               var x23 = this._x2 - x,
24566                   y23 = this._y2 - y;
24567               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
24568             }
24569
24570             switch (this._point) {
24571               case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
24572               case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
24573               case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
24574               default: point$4(this, x, y); break;
24575             }
24576
24577             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
24578             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
24579             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
24580             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
24581           }
24582         };
24583
24584         var catmullRomClosed = (function custom(alpha) {
24585
24586           function catmullRom(context) {
24587             return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
24588           }
24589
24590           catmullRom.alpha = function(alpha) {
24591             return custom(+alpha);
24592           };
24593
24594           return catmullRom;
24595         })(0.5);
24596
24597         function CatmullRomOpen(context, alpha) {
24598           this._context = context;
24599           this._alpha = alpha;
24600         }
24601
24602         CatmullRomOpen.prototype = {
24603           areaStart: function() {
24604             this._line = 0;
24605           },
24606           areaEnd: function() {
24607             this._line = NaN;
24608           },
24609           lineStart: function() {
24610             this._x0 = this._x1 = this._x2 =
24611             this._y0 = this._y1 = this._y2 = NaN;
24612             this._l01_a = this._l12_a = this._l23_a =
24613             this._l01_2a = this._l12_2a = this._l23_2a =
24614             this._point = 0;
24615           },
24616           lineEnd: function() {
24617             if (this._line || (this._line !== 0 && this._point === 3)) { this._context.closePath(); }
24618             this._line = 1 - this._line;
24619           },
24620           point: function(x, y) {
24621             x = +x, y = +y;
24622
24623             if (this._point) {
24624               var x23 = this._x2 - x,
24625                   y23 = this._y2 - y;
24626               this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
24627             }
24628
24629             switch (this._point) {
24630               case 0: this._point = 1; break;
24631               case 1: this._point = 2; break;
24632               case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
24633               case 3: this._point = 4; // proceed
24634               default: point$4(this, x, y); break;
24635             }
24636
24637             this._l01_a = this._l12_a, this._l12_a = this._l23_a;
24638             this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
24639             this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
24640             this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
24641           }
24642         };
24643
24644         var catmullRomOpen = (function custom(alpha) {
24645
24646           function catmullRom(context) {
24647             return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
24648           }
24649
24650           catmullRom.alpha = function(alpha) {
24651             return custom(+alpha);
24652           };
24653
24654           return catmullRom;
24655         })(0.5);
24656
24657         function LinearClosed(context) {
24658           this._context = context;
24659         }
24660
24661         LinearClosed.prototype = {
24662           areaStart: noop$5,
24663           areaEnd: noop$5,
24664           lineStart: function() {
24665             this._point = 0;
24666           },
24667           lineEnd: function() {
24668             if (this._point) { this._context.closePath(); }
24669           },
24670           point: function(x, y) {
24671             x = +x, y = +y;
24672             if (this._point) { this._context.lineTo(x, y); }
24673             else { this._point = 1, this._context.moveTo(x, y); }
24674           }
24675         };
24676
24677         function linearClosed(context) {
24678           return new LinearClosed(context);
24679         }
24680
24681         function sign$3(x) {
24682           return x < 0 ? -1 : 1;
24683         }
24684
24685         // Calculate the slopes of the tangents (Hermite-type interpolation) based on
24686         // the following paper: Steffen, M. 1990. A Simple Method for Monotonic
24687         // Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
24688         // NOV(II), P. 443, 1990.
24689         function slope3(that, x2, y2) {
24690           var h0 = that._x1 - that._x0,
24691               h1 = x2 - that._x1,
24692               s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
24693               s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
24694               p = (s0 * h1 + s1 * h0) / (h0 + h1);
24695           return (sign$3(s0) + sign$3(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
24696         }
24697
24698         // Calculate a one-sided slope.
24699         function slope2(that, t) {
24700           var h = that._x1 - that._x0;
24701           return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
24702         }
24703
24704         // According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
24705         // "you can express cubic Hermite interpolation in terms of cubic Bézier curves
24706         // with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
24707         function point$5(that, t0, t1) {
24708           var x0 = that._x0,
24709               y0 = that._y0,
24710               x1 = that._x1,
24711               y1 = that._y1,
24712               dx = (x1 - x0) / 3;
24713           that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
24714         }
24715
24716         function MonotoneX(context) {
24717           this._context = context;
24718         }
24719
24720         MonotoneX.prototype = {
24721           areaStart: function() {
24722             this._line = 0;
24723           },
24724           areaEnd: function() {
24725             this._line = NaN;
24726           },
24727           lineStart: function() {
24728             this._x0 = this._x1 =
24729             this._y0 = this._y1 =
24730             this._t0 = NaN;
24731             this._point = 0;
24732           },
24733           lineEnd: function() {
24734             switch (this._point) {
24735               case 2: this._context.lineTo(this._x1, this._y1); break;
24736               case 3: point$5(this, this._t0, slope2(this, this._t0)); break;
24737             }
24738             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
24739             this._line = 1 - this._line;
24740           },
24741           point: function(x, y) {
24742             var t1 = NaN;
24743
24744             x = +x, y = +y;
24745             if (x === this._x1 && y === this._y1) { return; } // Ignore coincident points.
24746             switch (this._point) {
24747               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
24748               case 1: this._point = 2; break;
24749               case 2: this._point = 3; point$5(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
24750               default: point$5(this, this._t0, t1 = slope3(this, x, y)); break;
24751             }
24752
24753             this._x0 = this._x1, this._x1 = x;
24754             this._y0 = this._y1, this._y1 = y;
24755             this._t0 = t1;
24756           }
24757         };
24758
24759         function MonotoneY(context) {
24760           this._context = new ReflectContext(context);
24761         }
24762
24763         (MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
24764           MonotoneX.prototype.point.call(this, y, x);
24765         };
24766
24767         function ReflectContext(context) {
24768           this._context = context;
24769         }
24770
24771         ReflectContext.prototype = {
24772           moveTo: function(x, y) { this._context.moveTo(y, x); },
24773           closePath: function() { this._context.closePath(); },
24774           lineTo: function(x, y) { this._context.lineTo(y, x); },
24775           bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
24776         };
24777
24778         function monotoneX(context) {
24779           return new MonotoneX(context);
24780         }
24781
24782         function monotoneY(context) {
24783           return new MonotoneY(context);
24784         }
24785
24786         function Natural(context) {
24787           this._context = context;
24788         }
24789
24790         Natural.prototype = {
24791           areaStart: function() {
24792             this._line = 0;
24793           },
24794           areaEnd: function() {
24795             this._line = NaN;
24796           },
24797           lineStart: function() {
24798             this._x = [];
24799             this._y = [];
24800           },
24801           lineEnd: function() {
24802             var x = this._x,
24803                 y = this._y,
24804                 n = x.length;
24805
24806             if (n) {
24807               this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
24808               if (n === 2) {
24809                 this._context.lineTo(x[1], y[1]);
24810               } else {
24811                 var px = controlPoints(x),
24812                     py = controlPoints(y);
24813                 for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
24814                   this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
24815                 }
24816               }
24817             }
24818
24819             if (this._line || (this._line !== 0 && n === 1)) { this._context.closePath(); }
24820             this._line = 1 - this._line;
24821             this._x = this._y = null;
24822           },
24823           point: function(x, y) {
24824             this._x.push(+x);
24825             this._y.push(+y);
24826           }
24827         };
24828
24829         // See https://www.particleincell.com/2012/bezier-splines/ for derivation.
24830         function controlPoints(x) {
24831           var i,
24832               n = x.length - 1,
24833               m,
24834               a = new Array(n),
24835               b = new Array(n),
24836               r = new Array(n);
24837           a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
24838           for (i = 1; i < n - 1; ++i) { a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; }
24839           a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
24840           for (i = 1; i < n; ++i) { m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; }
24841           a[n - 1] = r[n - 1] / b[n - 1];
24842           for (i = n - 2; i >= 0; --i) { a[i] = (r[i] - a[i + 1]) / b[i]; }
24843           b[n - 1] = (x[n] + a[n - 1]) / 2;
24844           for (i = 0; i < n - 1; ++i) { b[i] = 2 * x[i + 1] - a[i + 1]; }
24845           return [a, b];
24846         }
24847
24848         function natural(context) {
24849           return new Natural(context);
24850         }
24851
24852         function Step(context, t) {
24853           this._context = context;
24854           this._t = t;
24855         }
24856
24857         Step.prototype = {
24858           areaStart: function() {
24859             this._line = 0;
24860           },
24861           areaEnd: function() {
24862             this._line = NaN;
24863           },
24864           lineStart: function() {
24865             this._x = this._y = NaN;
24866             this._point = 0;
24867           },
24868           lineEnd: function() {
24869             if (0 < this._t && this._t < 1 && this._point === 2) { this._context.lineTo(this._x, this._y); }
24870             if (this._line || (this._line !== 0 && this._point === 1)) { this._context.closePath(); }
24871             if (this._line >= 0) { this._t = 1 - this._t, this._line = 1 - this._line; }
24872           },
24873           point: function(x, y) {
24874             x = +x, y = +y;
24875             switch (this._point) {
24876               case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
24877               case 1: this._point = 2; // proceed
24878               default: {
24879                 if (this._t <= 0) {
24880                   this._context.lineTo(this._x, y);
24881                   this._context.lineTo(x, y);
24882                 } else {
24883                   var x1 = this._x * (1 - this._t) + x * this._t;
24884                   this._context.lineTo(x1, this._y);
24885                   this._context.lineTo(x1, y);
24886                 }
24887                 break;
24888               }
24889             }
24890             this._x = x, this._y = y;
24891           }
24892         };
24893
24894         function step(context) {
24895           return new Step(context, 0.5);
24896         }
24897
24898         function stepBefore(context) {
24899           return new Step(context, 0);
24900         }
24901
24902         function stepAfter(context) {
24903           return new Step(context, 1);
24904         }
24905
24906         function none$1(series, order) {
24907           if (!((n = series.length) > 1)) { return; }
24908           for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
24909             s0 = s1, s1 = series[order[i]];
24910             for (j = 0; j < m; ++j) {
24911               s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
24912             }
24913           }
24914         }
24915
24916         function none$2(series) {
24917           var n = series.length, o = new Array(n);
24918           while (--n >= 0) { o[n] = n; }
24919           return o;
24920         }
24921
24922         function stackValue(d, key) {
24923           return d[key];
24924         }
24925
24926         function stack() {
24927           var keys = constant$b([]),
24928               order = none$2,
24929               offset = none$1,
24930               value = stackValue;
24931
24932           function stack(data) {
24933             var kz = keys.apply(this, arguments),
24934                 i,
24935                 m = data.length,
24936                 n = kz.length,
24937                 sz = new Array(n),
24938                 oz;
24939
24940             for (i = 0; i < n; ++i) {
24941               for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
24942                 si[j] = sij = [0, +value(data[j], ki, j, data)];
24943                 sij.data = data[j];
24944               }
24945               si.key = ki;
24946             }
24947
24948             for (i = 0, oz = order(sz); i < n; ++i) {
24949               sz[oz[i]].index = i;
24950             }
24951
24952             offset(sz, oz);
24953             return sz;
24954           }
24955
24956           stack.keys = function(_) {
24957             return arguments.length ? (keys = typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : keys;
24958           };
24959
24960           stack.value = function(_) {
24961             return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(+_), stack) : value;
24962           };
24963
24964           stack.order = function(_) {
24965             return arguments.length ? (order = _ == null ? none$2 : typeof _ === "function" ? _ : constant$b(slice$a.call(_)), stack) : order;
24966           };
24967
24968           stack.offset = function(_) {
24969             return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;
24970           };
24971
24972           return stack;
24973         }
24974
24975         function expand(series, order) {
24976           if (!((n = series.length) > 0)) { return; }
24977           for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
24978             for (y = i = 0; i < n; ++i) { y += series[i][j][1] || 0; }
24979             if (y) { for (i = 0; i < n; ++i) { series[i][j][1] /= y; } }
24980           }
24981           none$1(series, order);
24982         }
24983
24984         function diverging$1(series, order) {
24985           if (!((n = series.length) > 0)) { return; }
24986           for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
24987             for (yp = yn = 0, i = 0; i < n; ++i) {
24988               if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {
24989                 d[0] = yp, d[1] = yp += dy;
24990               } else if (dy < 0) {
24991                 d[1] = yn, d[0] = yn += dy;
24992               } else {
24993                 d[0] = 0, d[1] = dy;
24994               }
24995             }
24996           }
24997         }
24998
24999         function silhouette(series, order) {
25000           if (!((n = series.length) > 0)) { return; }
25001           for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
25002             for (var i = 0, y = 0; i < n; ++i) { y += series[i][j][1] || 0; }
25003             s0[j][1] += s0[j][0] = -y / 2;
25004           }
25005           none$1(series, order);
25006         }
25007
25008         function wiggle(series, order) {
25009           if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) { return; }
25010           for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
25011             for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
25012               var si = series[order[i]],
25013                   sij0 = si[j][1] || 0,
25014                   sij1 = si[j - 1][1] || 0,
25015                   s3 = (sij0 - sij1) / 2;
25016               for (var k = 0; k < i; ++k) {
25017                 var sk = series[order[k]],
25018                     skj0 = sk[j][1] || 0,
25019                     skj1 = sk[j - 1][1] || 0;
25020                 s3 += skj0 - skj1;
25021               }
25022               s1 += sij0, s2 += s3 * sij0;
25023             }
25024             s0[j - 1][1] += s0[j - 1][0] = y;
25025             if (s1) { y -= s2 / s1; }
25026           }
25027           s0[j - 1][1] += s0[j - 1][0] = y;
25028           none$1(series, order);
25029         }
25030
25031         function appearance(series) {
25032           var peaks = series.map(peak);
25033           return none$2(series).sort(function(a, b) { return peaks[a] - peaks[b]; });
25034         }
25035
25036         function peak(series) {
25037           var i = -1, j = 0, n = series.length, vi, vj = -Infinity;
25038           while (++i < n) { if ((vi = +series[i][1]) > vj) { vj = vi, j = i; } }
25039           return j;
25040         }
25041
25042         function ascending$2(series) {
25043           var sums = series.map(sum$2);
25044           return none$2(series).sort(function(a, b) { return sums[a] - sums[b]; });
25045         }
25046
25047         function sum$2(series) {
25048           var s = 0, i = -1, n = series.length, v;
25049           while (++i < n) { if (v = +series[i][1]) { s += v; } }
25050           return s;
25051         }
25052
25053         function descending$1(series) {
25054           return ascending$2(series).reverse();
25055         }
25056
25057         function insideOut(series) {
25058           var n = series.length,
25059               i,
25060               j,
25061               sums = series.map(sum$2),
25062               order = appearance(series),
25063               top = 0,
25064               bottom = 0,
25065               tops = [],
25066               bottoms = [];
25067
25068           for (i = 0; i < n; ++i) {
25069             j = order[i];
25070             if (top < bottom) {
25071               top += sums[j];
25072               tops.push(j);
25073             } else {
25074               bottom += sums[j];
25075               bottoms.push(j);
25076             }
25077           }
25078
25079           return bottoms.reverse().concat(tops);
25080         }
25081
25082         function reverse(series) {
25083           return none$2(series).reverse();
25084         }
25085
25086         function constant$c(x) {
25087           return function() {
25088             return x;
25089           };
25090         }
25091
25092         function x$4(d) {
25093           return d[0];
25094         }
25095
25096         function y$4(d) {
25097           return d[1];
25098         }
25099
25100         function RedBlackTree() {
25101           this._ = null; // root node
25102         }
25103
25104         function RedBlackNode(node) {
25105           node.U = // parent node
25106           node.C = // color - true for red, false for black
25107           node.L = // left node
25108           node.R = // right node
25109           node.P = // previous node
25110           node.N = null; // next node
25111         }
25112
25113         RedBlackTree.prototype = {
25114           constructor: RedBlackTree,
25115
25116           insert: function(after, node) {
25117             var parent, grandpa, uncle;
25118
25119             if (after) {
25120               node.P = after;
25121               node.N = after.N;
25122               if (after.N) { after.N.P = node; }
25123               after.N = node;
25124               if (after.R) {
25125                 after = after.R;
25126                 while (after.L) { after = after.L; }
25127                 after.L = node;
25128               } else {
25129                 after.R = node;
25130               }
25131               parent = after;
25132             } else if (this._) {
25133               after = RedBlackFirst(this._);
25134               node.P = null;
25135               node.N = after;
25136               after.P = after.L = node;
25137               parent = after;
25138             } else {
25139               node.P = node.N = null;
25140               this._ = node;
25141               parent = null;
25142             }
25143             node.L = node.R = null;
25144             node.U = parent;
25145             node.C = true;
25146
25147             after = node;
25148             while (parent && parent.C) {
25149               grandpa = parent.U;
25150               if (parent === grandpa.L) {
25151                 uncle = grandpa.R;
25152                 if (uncle && uncle.C) {
25153                   parent.C = uncle.C = false;
25154                   grandpa.C = true;
25155                   after = grandpa;
25156                 } else {
25157                   if (after === parent.R) {
25158                     RedBlackRotateLeft(this, parent);
25159                     after = parent;
25160                     parent = after.U;
25161                   }
25162                   parent.C = false;
25163                   grandpa.C = true;
25164                   RedBlackRotateRight(this, grandpa);
25165                 }
25166               } else {
25167                 uncle = grandpa.L;
25168                 if (uncle && uncle.C) {
25169                   parent.C = uncle.C = false;
25170                   grandpa.C = true;
25171                   after = grandpa;
25172                 } else {
25173                   if (after === parent.L) {
25174                     RedBlackRotateRight(this, parent);
25175                     after = parent;
25176                     parent = after.U;
25177                   }
25178                   parent.C = false;
25179                   grandpa.C = true;
25180                   RedBlackRotateLeft(this, grandpa);
25181                 }
25182               }
25183               parent = after.U;
25184             }
25185             this._.C = false;
25186           },
25187
25188           remove: function(node) {
25189             if (node.N) { node.N.P = node.P; }
25190             if (node.P) { node.P.N = node.N; }
25191             node.N = node.P = null;
25192
25193             var parent = node.U,
25194                 sibling,
25195                 left = node.L,
25196                 right = node.R,
25197                 next,
25198                 red;
25199
25200             if (!left) { next = right; }
25201             else if (!right) { next = left; }
25202             else { next = RedBlackFirst(right); }
25203
25204             if (parent) {
25205               if (parent.L === node) { parent.L = next; }
25206               else { parent.R = next; }
25207             } else {
25208               this._ = next;
25209             }
25210
25211             if (left && right) {
25212               red = next.C;
25213               next.C = node.C;
25214               next.L = left;
25215               left.U = next;
25216               if (next !== right) {
25217                 parent = next.U;
25218                 next.U = node.U;
25219                 node = next.R;
25220                 parent.L = node;
25221                 next.R = right;
25222                 right.U = next;
25223               } else {
25224                 next.U = parent;
25225                 parent = next;
25226                 node = next.R;
25227               }
25228             } else {
25229               red = node.C;
25230               node = next;
25231             }
25232
25233             if (node) { node.U = parent; }
25234             if (red) { return; }
25235             if (node && node.C) { node.C = false; return; }
25236
25237             do {
25238               if (node === this._) { break; }
25239               if (node === parent.L) {
25240                 sibling = parent.R;
25241                 if (sibling.C) {
25242                   sibling.C = false;
25243                   parent.C = true;
25244                   RedBlackRotateLeft(this, parent);
25245                   sibling = parent.R;
25246                 }
25247                 if ((sibling.L && sibling.L.C)
25248                     || (sibling.R && sibling.R.C)) {
25249                   if (!sibling.R || !sibling.R.C) {
25250                     sibling.L.C = false;
25251                     sibling.C = true;
25252                     RedBlackRotateRight(this, sibling);
25253                     sibling = parent.R;
25254                   }
25255                   sibling.C = parent.C;
25256                   parent.C = sibling.R.C = false;
25257                   RedBlackRotateLeft(this, parent);
25258                   node = this._;
25259                   break;
25260                 }
25261               } else {
25262                 sibling = parent.L;
25263                 if (sibling.C) {
25264                   sibling.C = false;
25265                   parent.C = true;
25266                   RedBlackRotateRight(this, parent);
25267                   sibling = parent.L;
25268                 }
25269                 if ((sibling.L && sibling.L.C)
25270                   || (sibling.R && sibling.R.C)) {
25271                   if (!sibling.L || !sibling.L.C) {
25272                     sibling.R.C = false;
25273                     sibling.C = true;
25274                     RedBlackRotateLeft(this, sibling);
25275                     sibling = parent.L;
25276                   }
25277                   sibling.C = parent.C;
25278                   parent.C = sibling.L.C = false;
25279                   RedBlackRotateRight(this, parent);
25280                   node = this._;
25281                   break;
25282                 }
25283               }
25284               sibling.C = true;
25285               node = parent;
25286               parent = parent.U;
25287             } while (!node.C);
25288
25289             if (node) { node.C = false; }
25290           }
25291         };
25292
25293         function RedBlackRotateLeft(tree, node) {
25294           var p = node,
25295               q = node.R,
25296               parent = p.U;
25297
25298           if (parent) {
25299             if (parent.L === p) { parent.L = q; }
25300             else { parent.R = q; }
25301           } else {
25302             tree._ = q;
25303           }
25304
25305           q.U = parent;
25306           p.U = q;
25307           p.R = q.L;
25308           if (p.R) { p.R.U = p; }
25309           q.L = p;
25310         }
25311
25312         function RedBlackRotateRight(tree, node) {
25313           var p = node,
25314               q = node.L,
25315               parent = p.U;
25316
25317           if (parent) {
25318             if (parent.L === p) { parent.L = q; }
25319             else { parent.R = q; }
25320           } else {
25321             tree._ = q;
25322           }
25323
25324           q.U = parent;
25325           p.U = q;
25326           p.L = q.R;
25327           if (p.L) { p.L.U = p; }
25328           q.R = p;
25329         }
25330
25331         function RedBlackFirst(node) {
25332           while (node.L) { node = node.L; }
25333           return node;
25334         }
25335
25336         function createEdge(left, right, v0, v1) {
25337           var edge = [null, null],
25338               index = edges.push(edge) - 1;
25339           edge.left = left;
25340           edge.right = right;
25341           if (v0) { setEdgeEnd(edge, left, right, v0); }
25342           if (v1) { setEdgeEnd(edge, right, left, v1); }
25343           cells[left.index].halfedges.push(index);
25344           cells[right.index].halfedges.push(index);
25345           return edge;
25346         }
25347
25348         function createBorderEdge(left, v0, v1) {
25349           var edge = [v0, v1];
25350           edge.left = left;
25351           return edge;
25352         }
25353
25354         function setEdgeEnd(edge, left, right, vertex) {
25355           if (!edge[0] && !edge[1]) {
25356             edge[0] = vertex;
25357             edge.left = left;
25358             edge.right = right;
25359           } else if (edge.left === right) {
25360             edge[1] = vertex;
25361           } else {
25362             edge[0] = vertex;
25363           }
25364         }
25365
25366         // Liang–Barsky line clipping.
25367         function clipEdge(edge, x0, y0, x1, y1) {
25368           var a = edge[0],
25369               b = edge[1],
25370               ax = a[0],
25371               ay = a[1],
25372               bx = b[0],
25373               by = b[1],
25374               t0 = 0,
25375               t1 = 1,
25376               dx = bx - ax,
25377               dy = by - ay,
25378               r;
25379
25380           r = x0 - ax;
25381           if (!dx && r > 0) { return; }
25382           r /= dx;
25383           if (dx < 0) {
25384             if (r < t0) { return; }
25385             if (r < t1) { t1 = r; }
25386           } else if (dx > 0) {
25387             if (r > t1) { return; }
25388             if (r > t0) { t0 = r; }
25389           }
25390
25391           r = x1 - ax;
25392           if (!dx && r < 0) { return; }
25393           r /= dx;
25394           if (dx < 0) {
25395             if (r > t1) { return; }
25396             if (r > t0) { t0 = r; }
25397           } else if (dx > 0) {
25398             if (r < t0) { return; }
25399             if (r < t1) { t1 = r; }
25400           }
25401
25402           r = y0 - ay;
25403           if (!dy && r > 0) { return; }
25404           r /= dy;
25405           if (dy < 0) {
25406             if (r < t0) { return; }
25407             if (r < t1) { t1 = r; }
25408           } else if (dy > 0) {
25409             if (r > t1) { return; }
25410             if (r > t0) { t0 = r; }
25411           }
25412
25413           r = y1 - ay;
25414           if (!dy && r < 0) { return; }
25415           r /= dy;
25416           if (dy < 0) {
25417             if (r > t1) { return; }
25418             if (r > t0) { t0 = r; }
25419           } else if (dy > 0) {
25420             if (r < t0) { return; }
25421             if (r < t1) { t1 = r; }
25422           }
25423
25424           if (!(t0 > 0) && !(t1 < 1)) { return true; } // TODO Better check?
25425
25426           if (t0 > 0) { edge[0] = [ax + t0 * dx, ay + t0 * dy]; }
25427           if (t1 < 1) { edge[1] = [ax + t1 * dx, ay + t1 * dy]; }
25428           return true;
25429         }
25430
25431         function connectEdge(edge, x0, y0, x1, y1) {
25432           var v1 = edge[1];
25433           if (v1) { return true; }
25434
25435           var v0 = edge[0],
25436               left = edge.left,
25437               right = edge.right,
25438               lx = left[0],
25439               ly = left[1],
25440               rx = right[0],
25441               ry = right[1],
25442               fx = (lx + rx) / 2,
25443               fy = (ly + ry) / 2,
25444               fm,
25445               fb;
25446
25447           if (ry === ly) {
25448             if (fx < x0 || fx >= x1) { return; }
25449             if (lx > rx) {
25450               if (!v0) { v0 = [fx, y0]; }
25451               else if (v0[1] >= y1) { return; }
25452               v1 = [fx, y1];
25453             } else {
25454               if (!v0) { v0 = [fx, y1]; }
25455               else if (v0[1] < y0) { return; }
25456               v1 = [fx, y0];
25457             }
25458           } else {
25459             fm = (lx - rx) / (ry - ly);
25460             fb = fy - fm * fx;
25461             if (fm < -1 || fm > 1) {
25462               if (lx > rx) {
25463                 if (!v0) { v0 = [(y0 - fb) / fm, y0]; }
25464                 else if (v0[1] >= y1) { return; }
25465                 v1 = [(y1 - fb) / fm, y1];
25466               } else {
25467                 if (!v0) { v0 = [(y1 - fb) / fm, y1]; }
25468                 else if (v0[1] < y0) { return; }
25469                 v1 = [(y0 - fb) / fm, y0];
25470               }
25471             } else {
25472               if (ly < ry) {
25473                 if (!v0) { v0 = [x0, fm * x0 + fb]; }
25474                 else if (v0[0] >= x1) { return; }
25475                 v1 = [x1, fm * x1 + fb];
25476               } else {
25477                 if (!v0) { v0 = [x1, fm * x1 + fb]; }
25478                 else if (v0[0] < x0) { return; }
25479                 v1 = [x0, fm * x0 + fb];
25480               }
25481             }
25482           }
25483
25484           edge[0] = v0;
25485           edge[1] = v1;
25486           return true;
25487         }
25488
25489         function clipEdges(x0, y0, x1, y1) {
25490           var i = edges.length,
25491               edge;
25492
25493           while (i--) {
25494             if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
25495                 || !clipEdge(edge, x0, y0, x1, y1)
25496                 || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$4
25497                     || Math.abs(edge[0][1] - edge[1][1]) > epsilon$4)) {
25498               delete edges[i];
25499             }
25500           }
25501         }
25502
25503         function createCell(site) {
25504           return cells[site.index] = {
25505             site: site,
25506             halfedges: []
25507           };
25508         }
25509
25510         function cellHalfedgeAngle(cell, edge) {
25511           var site = cell.site,
25512               va = edge.left,
25513               vb = edge.right;
25514           if (site === vb) { vb = va, va = site; }
25515           if (vb) { return Math.atan2(vb[1] - va[1], vb[0] - va[0]); }
25516           if (site === va) { va = edge[1], vb = edge[0]; }
25517           else { va = edge[0], vb = edge[1]; }
25518           return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
25519         }
25520
25521         function cellHalfedgeStart(cell, edge) {
25522           return edge[+(edge.left !== cell.site)];
25523         }
25524
25525         function cellHalfedgeEnd(cell, edge) {
25526           return edge[+(edge.left === cell.site)];
25527         }
25528
25529         function sortCellHalfedges() {
25530           for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
25531             if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
25532               var index = new Array(m),
25533                   array = new Array(m);
25534               for (j = 0; j < m; ++j) { index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); }
25535               index.sort(function(i, j) { return array[j] - array[i]; });
25536               for (j = 0; j < m; ++j) { array[j] = halfedges[index[j]]; }
25537               for (j = 0; j < m; ++j) { halfedges[j] = array[j]; }
25538             }
25539           }
25540         }
25541
25542         function clipCells(x0, y0, x1, y1) {
25543           var nCells = cells.length,
25544               iCell,
25545               cell,
25546               site,
25547               iHalfedge,
25548               halfedges,
25549               nHalfedges,
25550               start,
25551               startX,
25552               startY,
25553               end,
25554               endX,
25555               endY,
25556               cover = true;
25557
25558           for (iCell = 0; iCell < nCells; ++iCell) {
25559             if (cell = cells[iCell]) {
25560               site = cell.site;
25561               halfedges = cell.halfedges;
25562               iHalfedge = halfedges.length;
25563
25564               // Remove any dangling clipped edges.
25565               while (iHalfedge--) {
25566                 if (!edges[halfedges[iHalfedge]]) {
25567                   halfedges.splice(iHalfedge, 1);
25568                 }
25569               }
25570
25571               // Insert any border edges as necessary.
25572               iHalfedge = 0, nHalfedges = halfedges.length;
25573               while (iHalfedge < nHalfedges) {
25574                 end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
25575                 start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
25576                 if (Math.abs(endX - startX) > epsilon$4 || Math.abs(endY - startY) > epsilon$4) {
25577                   halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
25578                       Math.abs(endX - x0) < epsilon$4 && y1 - endY > epsilon$4 ? [x0, Math.abs(startX - x0) < epsilon$4 ? startY : y1]
25579                       : Math.abs(endY - y1) < epsilon$4 && x1 - endX > epsilon$4 ? [Math.abs(startY - y1) < epsilon$4 ? startX : x1, y1]
25580                       : Math.abs(endX - x1) < epsilon$4 && endY - y0 > epsilon$4 ? [x1, Math.abs(startX - x1) < epsilon$4 ? startY : y0]
25581                       : Math.abs(endY - y0) < epsilon$4 && endX - x0 > epsilon$4 ? [Math.abs(startY - y0) < epsilon$4 ? startX : x0, y0]
25582                       : null)) - 1);
25583                   ++nHalfedges;
25584                 }
25585               }
25586
25587               if (nHalfedges) { cover = false; }
25588             }
25589           }
25590
25591           // If there weren’t any edges, have the closest site cover the extent.
25592           // It doesn’t matter which corner of the extent we measure!
25593           if (cover) {
25594             var dx, dy, d2, dc = Infinity;
25595
25596             for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
25597               if (cell = cells[iCell]) {
25598                 site = cell.site;
25599                 dx = site[0] - x0;
25600                 dy = site[1] - y0;
25601                 d2 = dx * dx + dy * dy;
25602                 if (d2 < dc) { dc = d2, cover = cell; }
25603               }
25604             }
25605
25606             if (cover) {
25607               var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
25608               cover.halfedges.push(
25609                 edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
25610                 edges.push(createBorderEdge(site, v01, v11)) - 1,
25611                 edges.push(createBorderEdge(site, v11, v10)) - 1,
25612                 edges.push(createBorderEdge(site, v10, v00)) - 1
25613               );
25614             }
25615           }
25616
25617           // Lastly delete any cells with no edges; these were entirely clipped.
25618           for (iCell = 0; iCell < nCells; ++iCell) {
25619             if (cell = cells[iCell]) {
25620               if (!cell.halfedges.length) {
25621                 delete cells[iCell];
25622               }
25623             }
25624           }
25625         }
25626
25627         var circlePool = [];
25628
25629         var firstCircle;
25630
25631         function Circle() {
25632           RedBlackNode(this);
25633           this.x =
25634           this.y =
25635           this.arc =
25636           this.site =
25637           this.cy = null;
25638         }
25639
25640         function attachCircle(arc) {
25641           var lArc = arc.P,
25642               rArc = arc.N;
25643
25644           if (!lArc || !rArc) { return; }
25645
25646           var lSite = lArc.site,
25647               cSite = arc.site,
25648               rSite = rArc.site;
25649
25650           if (lSite === rSite) { return; }
25651
25652           var bx = cSite[0],
25653               by = cSite[1],
25654               ax = lSite[0] - bx,
25655               ay = lSite[1] - by,
25656               cx = rSite[0] - bx,
25657               cy = rSite[1] - by;
25658
25659           var d = 2 * (ax * cy - ay * cx);
25660           if (d >= -epsilon2$2) { return; }
25661
25662           var ha = ax * ax + ay * ay,
25663               hc = cx * cx + cy * cy,
25664               x = (cy * ha - ay * hc) / d,
25665               y = (ax * hc - cx * ha) / d;
25666
25667           var circle = circlePool.pop() || new Circle;
25668           circle.arc = arc;
25669           circle.site = cSite;
25670           circle.x = x + bx;
25671           circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
25672
25673           arc.circle = circle;
25674
25675           var before = null,
25676               node = circles._;
25677
25678           while (node) {
25679             if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
25680               if (node.L) { node = node.L; }
25681               else { before = node.P; break; }
25682             } else {
25683               if (node.R) { node = node.R; }
25684               else { before = node; break; }
25685             }
25686           }
25687
25688           circles.insert(before, circle);
25689           if (!before) { firstCircle = circle; }
25690         }
25691
25692         function detachCircle(arc) {
25693           var circle = arc.circle;
25694           if (circle) {
25695             if (!circle.P) { firstCircle = circle.N; }
25696             circles.remove(circle);
25697             circlePool.push(circle);
25698             RedBlackNode(circle);
25699             arc.circle = null;
25700           }
25701         }
25702
25703         var beachPool = [];
25704
25705         function Beach() {
25706           RedBlackNode(this);
25707           this.edge =
25708           this.site =
25709           this.circle = null;
25710         }
25711
25712         function createBeach(site) {
25713           var beach = beachPool.pop() || new Beach;
25714           beach.site = site;
25715           return beach;
25716         }
25717
25718         function detachBeach(beach) {
25719           detachCircle(beach);
25720           beaches.remove(beach);
25721           beachPool.push(beach);
25722           RedBlackNode(beach);
25723         }
25724
25725         function removeBeach(beach) {
25726           var circle = beach.circle,
25727               x = circle.x,
25728               y = circle.cy,
25729               vertex = [x, y],
25730               previous = beach.P,
25731               next = beach.N,
25732               disappearing = [beach];
25733
25734           detachBeach(beach);
25735
25736           var lArc = previous;
25737           while (lArc.circle
25738               && Math.abs(x - lArc.circle.x) < epsilon$4
25739               && Math.abs(y - lArc.circle.cy) < epsilon$4) {
25740             previous = lArc.P;
25741             disappearing.unshift(lArc);
25742             detachBeach(lArc);
25743             lArc = previous;
25744           }
25745
25746           disappearing.unshift(lArc);
25747           detachCircle(lArc);
25748
25749           var rArc = next;
25750           while (rArc.circle
25751               && Math.abs(x - rArc.circle.x) < epsilon$4
25752               && Math.abs(y - rArc.circle.cy) < epsilon$4) {
25753             next = rArc.N;
25754             disappearing.push(rArc);
25755             detachBeach(rArc);
25756             rArc = next;
25757           }
25758
25759           disappearing.push(rArc);
25760           detachCircle(rArc);
25761
25762           var nArcs = disappearing.length,
25763               iArc;
25764           for (iArc = 1; iArc < nArcs; ++iArc) {
25765             rArc = disappearing[iArc];
25766             lArc = disappearing[iArc - 1];
25767             setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
25768           }
25769
25770           lArc = disappearing[0];
25771           rArc = disappearing[nArcs - 1];
25772           rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
25773
25774           attachCircle(lArc);
25775           attachCircle(rArc);
25776         }
25777
25778         function addBeach(site) {
25779           var x = site[0],
25780               directrix = site[1],
25781               lArc,
25782               rArc,
25783               dxl,
25784               dxr,
25785               node = beaches._;
25786
25787           while (node) {
25788             dxl = leftBreakPoint(node, directrix) - x;
25789             if (dxl > epsilon$4) { node = node.L; } else {
25790               dxr = x - rightBreakPoint(node, directrix);
25791               if (dxr > epsilon$4) {
25792                 if (!node.R) {
25793                   lArc = node;
25794                   break;
25795                 }
25796                 node = node.R;
25797               } else {
25798                 if (dxl > -epsilon$4) {
25799                   lArc = node.P;
25800                   rArc = node;
25801                 } else if (dxr > -epsilon$4) {
25802                   lArc = node;
25803                   rArc = node.N;
25804                 } else {
25805                   lArc = rArc = node;
25806                 }
25807                 break;
25808               }
25809             }
25810           }
25811
25812           createCell(site);
25813           var newArc = createBeach(site);
25814           beaches.insert(lArc, newArc);
25815
25816           if (!lArc && !rArc) { return; }
25817
25818           if (lArc === rArc) {
25819             detachCircle(lArc);
25820             rArc = createBeach(lArc.site);
25821             beaches.insert(newArc, rArc);
25822             newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
25823             attachCircle(lArc);
25824             attachCircle(rArc);
25825             return;
25826           }
25827
25828           if (!rArc) { // && lArc
25829             newArc.edge = createEdge(lArc.site, newArc.site);
25830             return;
25831           }
25832
25833           // else lArc !== rArc
25834           detachCircle(lArc);
25835           detachCircle(rArc);
25836
25837           var lSite = lArc.site,
25838               ax = lSite[0],
25839               ay = lSite[1],
25840               bx = site[0] - ax,
25841               by = site[1] - ay,
25842               rSite = rArc.site,
25843               cx = rSite[0] - ax,
25844               cy = rSite[1] - ay,
25845               d = 2 * (bx * cy - by * cx),
25846               hb = bx * bx + by * by,
25847               hc = cx * cx + cy * cy,
25848               vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
25849
25850           setEdgeEnd(rArc.edge, lSite, rSite, vertex);
25851           newArc.edge = createEdge(lSite, site, null, vertex);
25852           rArc.edge = createEdge(site, rSite, null, vertex);
25853           attachCircle(lArc);
25854           attachCircle(rArc);
25855         }
25856
25857         function leftBreakPoint(arc, directrix) {
25858           var site = arc.site,
25859               rfocx = site[0],
25860               rfocy = site[1],
25861               pby2 = rfocy - directrix;
25862
25863           if (!pby2) { return rfocx; }
25864
25865           var lArc = arc.P;
25866           if (!lArc) { return -Infinity; }
25867
25868           site = lArc.site;
25869           var lfocx = site[0],
25870               lfocy = site[1],
25871               plby2 = lfocy - directrix;
25872
25873           if (!plby2) { return lfocx; }
25874
25875           var hl = lfocx - rfocx,
25876               aby2 = 1 / pby2 - 1 / plby2,
25877               b = hl / plby2;
25878
25879           if (aby2) { return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; }
25880
25881           return (rfocx + lfocx) / 2;
25882         }
25883
25884         function rightBreakPoint(arc, directrix) {
25885           var rArc = arc.N;
25886           if (rArc) { return leftBreakPoint(rArc, directrix); }
25887           var site = arc.site;
25888           return site[1] === directrix ? site[0] : Infinity;
25889         }
25890
25891         var epsilon$4 = 1e-6;
25892         var epsilon2$2 = 1e-12;
25893         var beaches;
25894         var cells;
25895         var circles;
25896         var edges;
25897
25898         function triangleArea(a, b, c) {
25899           return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
25900         }
25901
25902         function lexicographic(a, b) {
25903           return b[1] - a[1]
25904               || b[0] - a[0];
25905         }
25906
25907         function Diagram(sites, extent) {
25908           var site = sites.sort(lexicographic).pop(),
25909               x,
25910               y,
25911               circle;
25912
25913           edges = [];
25914           cells = new Array(sites.length);
25915           beaches = new RedBlackTree;
25916           circles = new RedBlackTree;
25917
25918           while (true) {
25919             circle = firstCircle;
25920             if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
25921               if (site[0] !== x || site[1] !== y) {
25922                 addBeach(site);
25923                 x = site[0], y = site[1];
25924               }
25925               site = sites.pop();
25926             } else if (circle) {
25927               removeBeach(circle.arc);
25928             } else {
25929               break;
25930             }
25931           }
25932
25933           sortCellHalfedges();
25934
25935           if (extent) {
25936             var x0 = +extent[0][0],
25937                 y0 = +extent[0][1],
25938                 x1 = +extent[1][0],
25939                 y1 = +extent[1][1];
25940             clipEdges(x0, y0, x1, y1);
25941             clipCells(x0, y0, x1, y1);
25942           }
25943
25944           this.edges = edges;
25945           this.cells = cells;
25946
25947           beaches =
25948           circles =
25949           edges =
25950           cells = null;
25951         }
25952
25953         Diagram.prototype = {
25954           constructor: Diagram,
25955
25956           polygons: function() {
25957             var edges = this.edges;
25958
25959             return this.cells.map(function(cell) {
25960               var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
25961               polygon.data = cell.site.data;
25962               return polygon;
25963             });
25964           },
25965
25966           triangles: function() {
25967             var triangles = [],
25968                 edges = this.edges;
25969
25970             this.cells.forEach(function(cell, i) {
25971               if (!(m = (halfedges = cell.halfedges).length)) { return; }
25972               var site = cell.site,
25973                   halfedges,
25974                   j = -1,
25975                   m,
25976                   s0,
25977                   e1 = edges[halfedges[m - 1]],
25978                   s1 = e1.left === site ? e1.right : e1.left;
25979
25980               while (++j < m) {
25981                 s0 = s1;
25982                 e1 = edges[halfedges[j]];
25983                 s1 = e1.left === site ? e1.right : e1.left;
25984                 if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
25985                   triangles.push([site.data, s0.data, s1.data]);
25986                 }
25987               }
25988             });
25989
25990             return triangles;
25991           },
25992
25993           links: function() {
25994             return this.edges.filter(function(edge) {
25995               return edge.right;
25996             }).map(function(edge) {
25997               return {
25998                 source: edge.left.data,
25999                 target: edge.right.data
26000               };
26001             });
26002           },
26003
26004           find: function(x, y, radius) {
26005             var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;
26006
26007             // Use the previously-found cell, or start with an arbitrary one.
26008             while (!(cell = that.cells[i1])) { if (++i1 >= n) { return null; } }
26009             var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;
26010
26011             // Traverse the half-edges to find a closer cell, if any.
26012             do {
26013               cell = that.cells[i0 = i1], i1 = null;
26014               cell.halfedges.forEach(function(e) {
26015                 var edge = that.edges[e], v = edge.left;
26016                 if ((v === cell.site || !v) && !(v = edge.right)) { return; }
26017                 var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;
26018                 if (v2 < d2) { d2 = v2, i1 = v.index; }
26019               });
26020             } while (i1 !== null);
26021
26022             that._found = i0;
26023
26024             return radius == null || d2 <= radius * radius ? cell.site : null;
26025           }
26026         };
26027
26028         function voronoi() {
26029           var x = x$4,
26030               y = y$4,
26031               extent = null;
26032
26033           function voronoi(data) {
26034             return new Diagram(data.map(function(d, i) {
26035               var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
26036               s.index = i;
26037               s.data = d;
26038               return s;
26039             }), extent);
26040           }
26041
26042           voronoi.polygons = function(data) {
26043             return voronoi(data).polygons();
26044           };
26045
26046           voronoi.links = function(data) {
26047             return voronoi(data).links();
26048           };
26049
26050           voronoi.triangles = function(data) {
26051             return voronoi(data).triangles();
26052           };
26053
26054           voronoi.x = function(_) {
26055             return arguments.length ? (x = typeof _ === "function" ? _ : constant$c(+_), voronoi) : x;
26056           };
26057
26058           voronoi.y = function(_) {
26059             return arguments.length ? (y = typeof _ === "function" ? _ : constant$c(+_), voronoi) : y;
26060           };
26061
26062           voronoi.extent = function(_) {
26063             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]]];
26064           };
26065
26066           voronoi.size = function(_) {
26067             return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
26068           };
26069
26070           return voronoi;
26071         }
26072
26073         function constant$d(x) {
26074           return function() {
26075             return x;
26076           };
26077         }
26078
26079         function ZoomEvent(target, type, transform) {
26080           this.target = target;
26081           this.type = type;
26082           this.transform = transform;
26083         }
26084
26085         function Transform(k, x, y) {
26086           this.k = k;
26087           this.x = x;
26088           this.y = y;
26089         }
26090
26091         Transform.prototype = {
26092           constructor: Transform,
26093           scale: function(k) {
26094             return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
26095           },
26096           translate: function(x, y) {
26097             return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
26098           },
26099           apply: function(point) {
26100             return [point[0] * this.k + this.x, point[1] * this.k + this.y];
26101           },
26102           applyX: function(x) {
26103             return x * this.k + this.x;
26104           },
26105           applyY: function(y) {
26106             return y * this.k + this.y;
26107           },
26108           invert: function(location) {
26109             return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
26110           },
26111           invertX: function(x) {
26112             return (x - this.x) / this.k;
26113           },
26114           invertY: function(y) {
26115             return (y - this.y) / this.k;
26116           },
26117           rescaleX: function(x) {
26118             return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
26119           },
26120           rescaleY: function(y) {
26121             return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
26122           },
26123           toString: function() {
26124             return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
26125           }
26126         };
26127
26128         var identity$8 = new Transform(1, 0, 0);
26129
26130         transform.prototype = Transform.prototype;
26131
26132         function transform(node) {
26133           while (!node.__zoom) { if (!(node = node.parentNode)) { return identity$8; } }
26134           return node.__zoom;
26135         }
26136
26137         function nopropagation$2() {
26138           event.stopImmediatePropagation();
26139         }
26140
26141         function noevent$2() {
26142           event.preventDefault();
26143           event.stopImmediatePropagation();
26144         }
26145
26146         // Ignore right-click, since that should open the context menu.
26147         function defaultFilter$2() {
26148           return !event.ctrlKey && !event.button;
26149         }
26150
26151         function defaultExtent$1() {
26152           var e = this;
26153           if (e instanceof SVGElement) {
26154             e = e.ownerSVGElement || e;
26155             if (e.hasAttribute("viewBox")) {
26156               e = e.viewBox.baseVal;
26157               return [[e.x, e.y], [e.x + e.width, e.y + e.height]];
26158             }
26159             return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];
26160           }
26161           return [[0, 0], [e.clientWidth, e.clientHeight]];
26162         }
26163
26164         function defaultTransform() {
26165           return this.__zoom || identity$8;
26166         }
26167
26168         function defaultWheelDelta() {
26169           return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002);
26170         }
26171
26172         function defaultTouchable$2() {
26173           return navigator.maxTouchPoints || ("ontouchstart" in this);
26174         }
26175
26176         function defaultConstrain(transform, extent, translateExtent) {
26177           var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
26178               dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
26179               dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
26180               dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
26181           return transform.translate(
26182             dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
26183             dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
26184           );
26185         }
26186
26187         function d3_zoom() {
26188           var filter = defaultFilter$2,
26189               extent = defaultExtent$1,
26190               constrain = defaultConstrain,
26191               wheelDelta = defaultWheelDelta,
26192               touchable = defaultTouchable$2,
26193               scaleExtent = [0, Infinity],
26194               translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
26195               duration = 250,
26196               interpolate = interpolateZoom,
26197               listeners = dispatch("start", "zoom", "end"),
26198               touchstarting,
26199               touchending,
26200               touchDelay = 500,
26201               wheelDelay = 150,
26202               clickDistance2 = 0;
26203
26204           function zoom(selection) {
26205             selection
26206                 .property("__zoom", defaultTransform)
26207                 .on("wheel.zoom", wheeled)
26208                 .on("mousedown.zoom", mousedowned)
26209                 .on("dblclick.zoom", dblclicked)
26210               .filter(touchable)
26211                 .on("touchstart.zoom", touchstarted)
26212                 .on("touchmove.zoom", touchmoved)
26213                 .on("touchend.zoom touchcancel.zoom", touchended)
26214                 .style("touch-action", "none")
26215                 .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
26216           }
26217
26218           zoom.transform = function(collection, transform, point) {
26219             var selection = collection.selection ? collection.selection() : collection;
26220             selection.property("__zoom", defaultTransform);
26221             if (collection !== selection) {
26222               schedule(collection, transform, point);
26223             } else {
26224               selection.interrupt().each(function() {
26225                 gesture(this, arguments)
26226                     .start()
26227                     .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
26228                     .end();
26229               });
26230             }
26231           };
26232
26233           zoom.scaleBy = function(selection, k, p) {
26234             zoom.scaleTo(selection, function() {
26235               var k0 = this.__zoom.k,
26236                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
26237               return k0 * k1;
26238             }, p);
26239           };
26240
26241           zoom.scaleTo = function(selection, k, p) {
26242             zoom.transform(selection, function() {
26243               var e = extent.apply(this, arguments),
26244                   t0 = this.__zoom,
26245                   p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,
26246                   p1 = t0.invert(p0),
26247                   k1 = typeof k === "function" ? k.apply(this, arguments) : k;
26248               return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
26249             }, p);
26250           };
26251
26252           zoom.translateBy = function(selection, x, y) {
26253             zoom.transform(selection, function() {
26254               return constrain(this.__zoom.translate(
26255                 typeof x === "function" ? x.apply(this, arguments) : x,
26256                 typeof y === "function" ? y.apply(this, arguments) : y
26257               ), extent.apply(this, arguments), translateExtent);
26258             });
26259           };
26260
26261           zoom.translateTo = function(selection, x, y, p) {
26262             zoom.transform(selection, function() {
26263               var e = extent.apply(this, arguments),
26264                   t = this.__zoom,
26265                   p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;
26266               return constrain(identity$8.translate(p0[0], p0[1]).scale(t.k).translate(
26267                 typeof x === "function" ? -x.apply(this, arguments) : -x,
26268                 typeof y === "function" ? -y.apply(this, arguments) : -y
26269               ), e, translateExtent);
26270             }, p);
26271           };
26272
26273           function scale(transform, k) {
26274             k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
26275             return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
26276           }
26277
26278           function translate(transform, p0, p1) {
26279             var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
26280             return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
26281           }
26282
26283           function centroid(extent) {
26284             return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
26285           }
26286
26287           function schedule(transition, transform, point) {
26288             transition
26289                 .on("start.zoom", function() { gesture(this, arguments).start(); })
26290                 .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
26291                 .tween("zoom", function() {
26292                   var that = this,
26293                       args = arguments,
26294                       g = gesture(that, args),
26295                       e = extent.apply(that, args),
26296                       p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,
26297                       w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
26298                       a = that.__zoom,
26299                       b = typeof transform === "function" ? transform.apply(that, args) : transform,
26300                       i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
26301                   return function(t) {
26302                     if (t === 1) { t = b; } // Avoid rounding error on end.
26303                     else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
26304                     g.zoom(null, t);
26305                   };
26306                 });
26307           }
26308
26309           function gesture(that, args, clean) {
26310             return (!clean && that.__zooming) || new Gesture(that, args);
26311           }
26312
26313           function Gesture(that, args) {
26314             this.that = that;
26315             this.args = args;
26316             this.active = 0;
26317             this.extent = extent.apply(that, args);
26318             this.taps = 0;
26319           }
26320
26321           Gesture.prototype = {
26322             start: function() {
26323               if (++this.active === 1) {
26324                 this.that.__zooming = this;
26325                 this.emit("start");
26326               }
26327               return this;
26328             },
26329             zoom: function(key, transform) {
26330               if (this.mouse && key !== "mouse") { this.mouse[1] = transform.invert(this.mouse[0]); }
26331               if (this.touch0 && key !== "touch") { this.touch0[1] = transform.invert(this.touch0[0]); }
26332               if (this.touch1 && key !== "touch") { this.touch1[1] = transform.invert(this.touch1[0]); }
26333               this.that.__zoom = transform;
26334               this.emit("zoom");
26335               return this;
26336             },
26337             end: function() {
26338               if (--this.active === 0) {
26339                 delete this.that.__zooming;
26340                 this.emit("end");
26341               }
26342               return this;
26343             },
26344             emit: function(type) {
26345               customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
26346             }
26347           };
26348
26349           function wheeled() {
26350             if (!filter.apply(this, arguments)) { return; }
26351             var g = gesture(this, arguments),
26352                 t = this.__zoom,
26353                 k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
26354                 p = d3_mouse(this);
26355
26356             // If the mouse is in the same location as before, reuse it.
26357             // If there were recent wheel events, reset the wheel idle timeout.
26358             if (g.wheel) {
26359               if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
26360                 g.mouse[1] = t.invert(g.mouse[0] = p);
26361               }
26362               clearTimeout(g.wheel);
26363             }
26364
26365             // If this wheel event won’t trigger a transform change, ignore it.
26366             else if (t.k === k) { return; }
26367
26368             // Otherwise, capture the mouse point and location at the start.
26369             else {
26370               g.mouse = [p, t.invert(p)];
26371               interrupt(this);
26372               g.start();
26373             }
26374
26375             noevent$2();
26376             g.wheel = setTimeout(wheelidled, wheelDelay);
26377             g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
26378
26379             function wheelidled() {
26380               g.wheel = null;
26381               g.end();
26382             }
26383           }
26384
26385           function mousedowned() {
26386             if (touchending || !filter.apply(this, arguments)) { return; }
26387             var g = gesture(this, arguments, true),
26388                 v = d3_select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
26389                 p = d3_mouse(this),
26390                 x0 = event.clientX,
26391                 y0 = event.clientY;
26392
26393             dragDisable(event.view);
26394             nopropagation$2();
26395             g.mouse = [p, this.__zoom.invert(p)];
26396             interrupt(this);
26397             g.start();
26398
26399             function mousemoved() {
26400               noevent$2();
26401               if (!g.moved) {
26402                 var dx = event.clientX - x0, dy = event.clientY - y0;
26403                 g.moved = dx * dx + dy * dy > clickDistance2;
26404               }
26405               g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = d3_mouse(g.that), g.mouse[1]), g.extent, translateExtent));
26406             }
26407
26408             function mouseupped() {
26409               v.on("mousemove.zoom mouseup.zoom", null);
26410               yesdrag(event.view, g.moved);
26411               noevent$2();
26412               g.end();
26413             }
26414           }
26415
26416           function dblclicked() {
26417             if (!filter.apply(this, arguments)) { return; }
26418             var t0 = this.__zoom,
26419                 p0 = d3_mouse(this),
26420                 p1 = t0.invert(p0),
26421                 k1 = t0.k * (event.shiftKey ? 0.5 : 2),
26422                 t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);
26423
26424             noevent$2();
26425             if (duration > 0) { d3_select(this).transition().duration(duration).call(schedule, t1, p0); }
26426             else { d3_select(this).call(zoom.transform, t1); }
26427           }
26428
26429           function touchstarted() {
26430             if (!filter.apply(this, arguments)) { return; }
26431             var touches = event.touches,
26432                 n = touches.length,
26433                 g = gesture(this, arguments, event.changedTouches.length === n),
26434                 started, i, t, p;
26435
26436             nopropagation$2();
26437             for (i = 0; i < n; ++i) {
26438               t = touches[i], p = touch(this, touches, t.identifier);
26439               p = [p, this.__zoom.invert(p), t.identifier];
26440               if (!g.touch0) { g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; }
26441               else if (!g.touch1 && g.touch0[2] !== p[2]) { g.touch1 = p, g.taps = 0; }
26442             }
26443
26444             if (touchstarting) { touchstarting = clearTimeout(touchstarting); }
26445
26446             if (started) {
26447               if (g.taps < 2) { touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); }
26448               interrupt(this);
26449               g.start();
26450             }
26451           }
26452
26453           function touchmoved() {
26454             if (!this.__zooming) { return; }
26455             var g = gesture(this, arguments),
26456                 touches = event.changedTouches,
26457                 n = touches.length, i, t, p, l;
26458
26459             noevent$2();
26460             if (touchstarting) { touchstarting = clearTimeout(touchstarting); }
26461             g.taps = 0;
26462             for (i = 0; i < n; ++i) {
26463               t = touches[i], p = touch(this, touches, t.identifier);
26464               if (g.touch0 && g.touch0[2] === t.identifier) { g.touch0[0] = p; }
26465               else if (g.touch1 && g.touch1[2] === t.identifier) { g.touch1[0] = p; }
26466             }
26467             t = g.that.__zoom;
26468             if (g.touch1) {
26469               var p0 = g.touch0[0], l0 = g.touch0[1],
26470                   p1 = g.touch1[0], l1 = g.touch1[1],
26471                   dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
26472                   dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
26473               t = scale(t, Math.sqrt(dp / dl));
26474               p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
26475               l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
26476             }
26477             else if (g.touch0) { p = g.touch0[0], l = g.touch0[1]; }
26478             else { return; }
26479             g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
26480           }
26481
26482           function touchended() {
26483             if (!this.__zooming) { return; }
26484             var g = gesture(this, arguments),
26485                 touches = event.changedTouches,
26486                 n = touches.length, i, t;
26487
26488             nopropagation$2();
26489             if (touchending) { clearTimeout(touchending); }
26490             touchending = setTimeout(function() { touchending = null; }, touchDelay);
26491             for (i = 0; i < n; ++i) {
26492               t = touches[i];
26493               if (g.touch0 && g.touch0[2] === t.identifier) { delete g.touch0; }
26494               else if (g.touch1 && g.touch1[2] === t.identifier) { delete g.touch1; }
26495             }
26496             if (g.touch1 && !g.touch0) { g.touch0 = g.touch1, delete g.touch1; }
26497             if (g.touch0) { g.touch0[1] = this.__zoom.invert(g.touch0[0]); }
26498             else {
26499               g.end();
26500               // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.
26501               if (g.taps === 2) {
26502                 var p = d3_select(this).on("dblclick.zoom");
26503                 if (p) { p.apply(this, arguments); }
26504               }
26505             }
26506           }
26507
26508           zoom.wheelDelta = function(_) {
26509             return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant$d(+_), zoom) : wheelDelta;
26510           };
26511
26512           zoom.filter = function(_) {
26513             return arguments.length ? (filter = typeof _ === "function" ? _ : constant$d(!!_), zoom) : filter;
26514           };
26515
26516           zoom.touchable = function(_) {
26517             return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$d(!!_), zoom) : touchable;
26518           };
26519
26520           zoom.extent = function(_) {
26521             return arguments.length ? (extent = typeof _ === "function" ? _ : constant$d([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
26522           };
26523
26524           zoom.scaleExtent = function(_) {
26525             return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];
26526           };
26527
26528           zoom.translateExtent = function(_) {
26529             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]]];
26530           };
26531
26532           zoom.constrain = function(_) {
26533             return arguments.length ? (constrain = _, zoom) : constrain;
26534           };
26535
26536           zoom.duration = function(_) {
26537             return arguments.length ? (duration = +_, zoom) : duration;
26538           };
26539
26540           zoom.interpolate = function(_) {
26541             return arguments.length ? (interpolate = _, zoom) : interpolate;
26542           };
26543
26544           zoom.on = function() {
26545             var value = listeners.on.apply(listeners, arguments);
26546             return value === listeners ? zoom : value;
26547           };
26548
26549           zoom.clickDistance = function(_) {
26550             return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
26551           };
26552
26553           return zoom;
26554         }
26555
26556
26557
26558         var index$3 = /*#__PURE__*/Object.freeze({
26559                 __proto__: null,
26560                 version: version,
26561                 bisect: bisectRight,
26562                 bisectRight: bisectRight,
26563                 bisectLeft: bisectLeft,
26564                 ascending: d3_ascending,
26565                 bisector: d3_bisector,
26566                 cross: cross,
26567                 descending: d3_descending,
26568                 deviation: deviation,
26569                 extent: extent,
26570                 histogram: histogram,
26571                 thresholdFreedmanDiaconis: freedmanDiaconis,
26572                 thresholdScott: scott,
26573                 thresholdSturges: thresholdSturges,
26574                 max: max$2,
26575                 mean: mean,
26576                 median: d3_median,
26577                 merge: merge,
26578                 min: min,
26579                 pairs: pairs,
26580                 permute: permute,
26581                 quantile: threshold,
26582                 range: d3_range,
26583                 scan: scan,
26584                 shuffle: shuffle,
26585                 sum: sum,
26586                 ticks: ticks,
26587                 tickIncrement: tickIncrement,
26588                 tickStep: tickStep,
26589                 transpose: transpose,
26590                 variance: variance,
26591                 zip: zip,
26592                 axisTop: axisTop,
26593                 axisRight: axisRight,
26594                 axisBottom: axisBottom,
26595                 axisLeft: axisLeft,
26596                 brush: brush,
26597                 brushX: brushX,
26598                 brushY: brushY,
26599                 brushSelection: brushSelection,
26600                 chord: chord,
26601                 ribbon: ribbon,
26602                 nest: nest,
26603                 set: set$2,
26604                 map: map$3,
26605                 keys: keys$3,
26606                 values: values,
26607                 entries: entries,
26608                 color: color,
26609                 rgb: rgb,
26610                 hsl: hsl,
26611                 lab: lab,
26612                 hcl: hcl,
26613                 lch: lch,
26614                 gray: gray,
26615                 cubehelix: cubehelix,
26616                 contours: contours,
26617                 contourDensity: density,
26618                 dispatch: dispatch,
26619                 drag: d3_drag,
26620                 dragDisable: dragDisable,
26621                 dragEnable: yesdrag,
26622                 dsvFormat: dsvFormat,
26623                 csvParse: csvParse,
26624                 csvParseRows: csvParseRows,
26625                 csvFormat: csvFormat,
26626                 csvFormatBody: csvFormatBody,
26627                 csvFormatRows: csvFormatRows,
26628                 csvFormatRow: csvFormatRow,
26629                 csvFormatValue: csvFormatValue,
26630                 tsvParse: tsvParse,
26631                 tsvParseRows: tsvParseRows,
26632                 tsvFormat: tsvFormat,
26633                 tsvFormatBody: tsvFormatBody,
26634                 tsvFormatRows: tsvFormatRows,
26635                 tsvFormatRow: tsvFormatRow,
26636                 tsvFormatValue: tsvFormatValue,
26637                 autoType: autoType,
26638                 easeLinear: linear$1,
26639                 easeQuad: quadInOut,
26640                 easeQuadIn: quadIn,
26641                 easeQuadOut: quadOut,
26642                 easeQuadInOut: quadInOut,
26643                 easeCubic: cubicInOut,
26644                 easeCubicIn: cubicIn,
26645                 easeCubicOut: cubicOut,
26646                 easeCubicInOut: cubicInOut,
26647                 easePoly: polyInOut,
26648                 easePolyIn: polyIn,
26649                 easePolyOut: polyOut,
26650                 easePolyInOut: polyInOut,
26651                 easeSin: sinInOut,
26652                 easeSinIn: sinIn,
26653                 easeSinOut: sinOut,
26654                 easeSinInOut: sinInOut,
26655                 easeExp: expInOut,
26656                 easeExpIn: expIn,
26657                 easeExpOut: expOut,
26658                 easeExpInOut: expInOut,
26659                 easeCircle: circleInOut,
26660                 easeCircleIn: circleIn,
26661                 easeCircleOut: circleOut,
26662                 easeCircleInOut: circleInOut,
26663                 easeBounce: bounceOut,
26664                 easeBounceIn: bounceIn,
26665                 easeBounceOut: bounceOut,
26666                 easeBounceInOut: bounceInOut,
26667                 easeBack: backInOut,
26668                 easeBackIn: backIn,
26669                 easeBackOut: backOut,
26670                 easeBackInOut: backInOut,
26671                 easeElastic: elasticOut,
26672                 easeElasticIn: elasticIn,
26673                 easeElasticOut: elasticOut,
26674                 easeElasticInOut: elasticInOut,
26675                 blob: blob,
26676                 buffer: buffer,
26677                 dsv: dsv,
26678                 csv: csv$1,
26679                 tsv: tsv$1,
26680                 image: image,
26681                 json: d3_json,
26682                 text: d3_text,
26683                 xml: d3_xml,
26684                 html: html,
26685                 svg: svg,
26686                 forceCenter: center$1,
26687                 forceCollide: collide,
26688                 forceLink: link,
26689                 forceManyBody: manyBody,
26690                 forceRadial: radial,
26691                 forceSimulation: simulation,
26692                 forceX: x$2,
26693                 forceY: y$2,
26694                 formatDefaultLocale: defaultLocale,
26695                 get format () { return format; },
26696                 get formatPrefix () { return formatPrefix; },
26697                 formatLocale: formatLocale,
26698                 formatSpecifier: formatSpecifier,
26699                 FormatSpecifier: FormatSpecifier,
26700                 precisionFixed: precisionFixed,
26701                 precisionPrefix: precisionPrefix,
26702                 precisionRound: precisionRound,
26703                 geoArea: d3_geoArea,
26704                 geoBounds: d3_geoBounds,
26705                 geoCentroid: d3_geoCentroid,
26706                 geoCircle: circle,
26707                 geoClipAntimeridian: clipAntimeridian,
26708                 geoClipCircle: clipCircle,
26709                 geoClipExtent: extent$1,
26710                 geoClipRectangle: clipRectangle,
26711                 geoContains: contains$2,
26712                 geoDistance: distance,
26713                 geoGraticule: graticule,
26714                 geoGraticule10: graticule10,
26715                 geoInterpolate: interpolate$1,
26716                 geoLength: d3_geoLength,
26717                 geoPath: d3_geoPath,
26718                 geoAlbers: albers,
26719                 geoAlbersUsa: albersUsa,
26720                 geoAzimuthalEqualArea: azimuthalEqualArea,
26721                 geoAzimuthalEqualAreaRaw: azimuthalEqualAreaRaw,
26722                 geoAzimuthalEquidistant: azimuthalEquidistant,
26723                 geoAzimuthalEquidistantRaw: azimuthalEquidistantRaw,
26724                 geoConicConformal: conicConformal,
26725                 geoConicConformalRaw: conicConformalRaw,
26726                 geoConicEqualArea: conicEqualArea,
26727                 geoConicEqualAreaRaw: conicEqualAreaRaw,
26728                 geoConicEquidistant: conicEquidistant,
26729                 geoConicEquidistantRaw: conicEquidistantRaw,
26730                 geoEqualEarth: equalEarth,
26731                 geoEqualEarthRaw: equalEarthRaw,
26732                 geoEquirectangular: equirectangular,
26733                 geoEquirectangularRaw: equirectangularRaw,
26734                 geoGnomonic: gnomonic,
26735                 geoGnomonicRaw: gnomonicRaw,
26736                 geoIdentity: d3_geoIdentity,
26737                 geoProjection: projection,
26738                 geoProjectionMutator: projectionMutator,
26739                 geoMercator: mercator,
26740                 geoMercatorRaw: mercatorRaw,
26741                 geoNaturalEarth1: naturalEarth1,
26742                 geoNaturalEarth1Raw: naturalEarth1Raw,
26743                 geoOrthographic: orthographic,
26744                 geoOrthographicRaw: orthographicRaw,
26745                 geoStereographic: stereographic,
26746                 geoStereographicRaw: stereographicRaw,
26747                 geoTransverseMercator: transverseMercator,
26748                 geoTransverseMercatorRaw: transverseMercatorRaw,
26749                 geoRotation: rotation,
26750                 geoStream: d3_geoStream,
26751                 geoTransform: d3_geoTransform,
26752                 cluster: cluster,
26753                 hierarchy: hierarchy,
26754                 pack: index$1,
26755                 packSiblings: siblings,
26756                 packEnclose: enclose,
26757                 partition: partition,
26758                 stratify: stratify,
26759                 tree: tree,
26760                 treemap: index$2,
26761                 treemapBinary: binary,
26762                 treemapDice: treemapDice,
26763                 treemapSlice: treemapSlice,
26764                 treemapSliceDice: sliceDice,
26765                 treemapSquarify: squarify,
26766                 treemapResquarify: resquarify,
26767                 interpolate: d3_interpolate,
26768                 interpolateArray: array$2,
26769                 interpolateBasis: basis$1,
26770                 interpolateBasisClosed: basisClosed,
26771                 interpolateDate: date,
26772                 interpolateDiscrete: discrete,
26773                 interpolateHue: hue$1,
26774                 interpolateNumber: d3_interpolateNumber,
26775                 interpolateNumberArray: numberArray,
26776                 interpolateObject: object,
26777                 interpolateRound: interpolateRound,
26778                 interpolateString: interpolateString,
26779                 interpolateTransformCss: interpolateTransformCss,
26780                 interpolateTransformSvg: interpolateTransformSvg,
26781                 interpolateZoom: interpolateZoom,
26782                 interpolateRgb: d3_interpolateRgb,
26783                 interpolateRgbBasis: rgbBasis,
26784                 interpolateRgbBasisClosed: rgbBasisClosed,
26785                 interpolateHsl: hsl$2,
26786                 interpolateHslLong: hslLong,
26787                 interpolateLab: lab$1,
26788                 interpolateHcl: hcl$2,
26789                 interpolateHclLong: hclLong,
26790                 interpolateCubehelix: cubehelix$2,
26791                 interpolateCubehelixLong: cubehelixLong,
26792                 piecewise: piecewise,
26793                 quantize: d3_quantize,
26794                 path: path,
26795                 polygonArea: d3_polygonArea,
26796                 polygonCentroid: d3_polygonCentroid,
26797                 polygonHull: d3_polygonHull,
26798                 polygonContains: contains$3,
26799                 polygonLength: length$1,
26800                 quadtree: quadtree,
26801                 randomUniform: uniform,
26802                 randomNormal: normal,
26803                 randomLogNormal: logNormal,
26804                 randomBates: bates,
26805                 randomIrwinHall: irwinHall,
26806                 randomExponential: exponential$1,
26807                 scaleBand: band,
26808                 scalePoint: point$1,
26809                 scaleIdentity: identity$6,
26810                 scaleLinear: linear$2,
26811                 scaleLog: log$1,
26812                 scaleSymlog: symlog,
26813                 scaleOrdinal: ordinal,
26814                 scaleImplicit: implicit,
26815                 scalePow: pow$1,
26816                 scaleSqrt: sqrt$1,
26817                 scaleQuantile: quantile,
26818                 scaleQuantize: quantize,
26819                 scaleThreshold: threshold$1,
26820                 scaleTime: time,
26821                 scaleUtc: utcTime,
26822                 scaleSequential: sequential,
26823                 scaleSequentialLog: sequentialLog,
26824                 scaleSequentialPow: sequentialPow,
26825                 scaleSequentialSqrt: sequentialSqrt,
26826                 scaleSequentialSymlog: sequentialSymlog,
26827                 scaleSequentialQuantile: sequentialQuantile,
26828                 scaleDiverging: diverging,
26829                 scaleDivergingLog: divergingLog,
26830                 scaleDivergingPow: divergingPow,
26831                 scaleDivergingSqrt: divergingSqrt,
26832                 scaleDivergingSymlog: divergingSymlog,
26833                 tickFormat: tickFormat,
26834                 schemeCategory10: category10,
26835                 schemeAccent: Accent,
26836                 schemeDark2: Dark2,
26837                 schemePaired: Paired,
26838                 schemePastel1: Pastel1,
26839                 schemePastel2: Pastel2,
26840                 schemeSet1: Set1,
26841                 schemeSet2: Set2,
26842                 schemeSet3: Set3,
26843                 schemeTableau10: Tableau10,
26844                 interpolateBrBG: BrBG,
26845                 schemeBrBG: scheme,
26846                 interpolatePRGn: PRGn,
26847                 schemePRGn: scheme$1,
26848                 interpolatePiYG: PiYG,
26849                 schemePiYG: scheme$2,
26850                 interpolatePuOr: PuOr,
26851                 schemePuOr: scheme$3,
26852                 interpolateRdBu: RdBu,
26853                 schemeRdBu: scheme$4,
26854                 interpolateRdGy: RdGy,
26855                 schemeRdGy: scheme$5,
26856                 interpolateRdYlBu: RdYlBu,
26857                 schemeRdYlBu: scheme$6,
26858                 interpolateRdYlGn: RdYlGn,
26859                 schemeRdYlGn: scheme$7,
26860                 interpolateSpectral: Spectral,
26861                 schemeSpectral: scheme$8,
26862                 interpolateBuGn: BuGn,
26863                 schemeBuGn: scheme$9,
26864                 interpolateBuPu: BuPu,
26865                 schemeBuPu: scheme$a,
26866                 interpolateGnBu: GnBu,
26867                 schemeGnBu: scheme$b,
26868                 interpolateOrRd: OrRd,
26869                 schemeOrRd: scheme$c,
26870                 interpolatePuBuGn: PuBuGn,
26871                 schemePuBuGn: scheme$d,
26872                 interpolatePuBu: PuBu,
26873                 schemePuBu: scheme$e,
26874                 interpolatePuRd: PuRd,
26875                 schemePuRd: scheme$f,
26876                 interpolateRdPu: RdPu,
26877                 schemeRdPu: scheme$g,
26878                 interpolateYlGnBu: YlGnBu,
26879                 schemeYlGnBu: scheme$h,
26880                 interpolateYlGn: YlGn,
26881                 schemeYlGn: scheme$i,
26882                 interpolateYlOrBr: YlOrBr,
26883                 schemeYlOrBr: scheme$j,
26884                 interpolateYlOrRd: YlOrRd,
26885                 schemeYlOrRd: scheme$k,
26886                 interpolateBlues: Blues,
26887                 schemeBlues: scheme$l,
26888                 interpolateGreens: Greens,
26889                 schemeGreens: scheme$m,
26890                 interpolateGreys: Greys,
26891                 schemeGreys: scheme$n,
26892                 interpolatePurples: Purples,
26893                 schemePurples: scheme$o,
26894                 interpolateReds: Reds,
26895                 schemeReds: scheme$p,
26896                 interpolateOranges: Oranges,
26897                 schemeOranges: scheme$q,
26898                 interpolateCividis: cividis,
26899                 interpolateCubehelixDefault: cubehelix$3,
26900                 interpolateRainbow: rainbow,
26901                 interpolateWarm: warm,
26902                 interpolateCool: cool,
26903                 interpolateSinebow: sinebow,
26904                 interpolateTurbo: turbo,
26905                 interpolateViridis: viridis,
26906                 interpolateMagma: magma,
26907                 interpolateInferno: inferno,
26908                 interpolatePlasma: plasma,
26909                 create: create$7,
26910                 creator: creator,
26911                 local: local,
26912                 matcher: matcher,
26913                 mouse: d3_mouse,
26914                 namespace: namespace,
26915                 namespaces: namespaces,
26916                 clientPoint: point,
26917                 select: d3_select,
26918                 selectAll: d3_selectAll,
26919                 selection: selection,
26920                 selector: selector,
26921                 selectorAll: selectorAll,
26922                 style: styleValue,
26923                 touch: touch,
26924                 touches: d3_touches,
26925                 window: defaultView,
26926                 get event () { return event; },
26927                 customEvent: customEvent,
26928                 arc: arc,
26929                 area: area$1,
26930                 line: line,
26931                 pie: pie,
26932                 areaRadial: areaRadial,
26933                 radialArea: areaRadial,
26934                 lineRadial: lineRadial$1,
26935                 radialLine: lineRadial$1,
26936                 pointRadial: pointRadial,
26937                 linkHorizontal: linkHorizontal,
26938                 linkVertical: linkVertical,
26939                 linkRadial: linkRadial,
26940                 symbol: symbol,
26941                 symbols: symbols,
26942                 symbolCircle: circle$2,
26943                 symbolCross: cross$2,
26944                 symbolDiamond: diamond,
26945                 symbolSquare: square,
26946                 symbolStar: star,
26947                 symbolTriangle: triangle,
26948                 symbolWye: wye,
26949                 curveBasisClosed: basisClosed$1,
26950                 curveBasisOpen: basisOpen,
26951                 curveBasis: basis$2,
26952                 curveBundle: bundle,
26953                 curveCardinalClosed: cardinalClosed,
26954                 curveCardinalOpen: cardinalOpen,
26955                 curveCardinal: cardinal,
26956                 curveCatmullRomClosed: catmullRomClosed,
26957                 curveCatmullRomOpen: catmullRomOpen,
26958                 curveCatmullRom: catmullRom,
26959                 curveLinearClosed: linearClosed,
26960                 curveLinear: curveLinear,
26961                 curveMonotoneX: monotoneX,
26962                 curveMonotoneY: monotoneY,
26963                 curveNatural: natural,
26964                 curveStep: step,
26965                 curveStepAfter: stepAfter,
26966                 curveStepBefore: stepBefore,
26967                 stack: stack,
26968                 stackOffsetExpand: expand,
26969                 stackOffsetDiverging: diverging$1,
26970                 stackOffsetNone: none$1,
26971                 stackOffsetSilhouette: silhouette,
26972                 stackOffsetWiggle: wiggle,
26973                 stackOrderAppearance: appearance,
26974                 stackOrderAscending: ascending$2,
26975                 stackOrderDescending: descending$1,
26976                 stackOrderInsideOut: insideOut,
26977                 stackOrderNone: none$2,
26978                 stackOrderReverse: reverse,
26979                 timeInterval: newInterval,
26980                 timeMillisecond: millisecond,
26981                 timeMilliseconds: milliseconds,
26982                 utcMillisecond: millisecond,
26983                 utcMilliseconds: milliseconds,
26984                 timeSecond: second,
26985                 timeSeconds: seconds,
26986                 utcSecond: second,
26987                 utcSeconds: seconds,
26988                 timeMinute: minute,
26989                 timeMinutes: minutes,
26990                 timeHour: hour,
26991                 timeHours: hours,
26992                 timeDay: day,
26993                 timeDays: days,
26994                 timeWeek: sunday,
26995                 timeWeeks: sundays,
26996                 timeSunday: sunday,
26997                 timeSundays: sundays,
26998                 timeMonday: monday,
26999                 timeMondays: mondays,
27000                 timeTuesday: tuesday,
27001                 timeTuesdays: tuesdays,
27002                 timeWednesday: wednesday,
27003                 timeWednesdays: wednesdays,
27004                 timeThursday: thursday,
27005                 timeThursdays: thursdays,
27006                 timeFriday: friday,
27007                 timeFridays: fridays,
27008                 timeSaturday: saturday,
27009                 timeSaturdays: saturdays,
27010                 timeMonth: month,
27011                 timeMonths: months,
27012                 timeYear: year,
27013                 timeYears: years,
27014                 utcMinute: utcMinute,
27015                 utcMinutes: utcMinutes,
27016                 utcHour: utcHour,
27017                 utcHours: utcHours,
27018                 utcDay: utcDay,
27019                 utcDays: utcDays,
27020                 utcWeek: utcSunday,
27021                 utcWeeks: utcSundays,
27022                 utcSunday: utcSunday,
27023                 utcSundays: utcSundays,
27024                 utcMonday: utcMonday,
27025                 utcMondays: utcMondays,
27026                 utcTuesday: utcTuesday,
27027                 utcTuesdays: utcTuesdays,
27028                 utcWednesday: utcWednesday,
27029                 utcWednesdays: utcWednesdays,
27030                 utcThursday: utcThursday,
27031                 utcThursdays: utcThursdays,
27032                 utcFriday: utcFriday,
27033                 utcFridays: utcFridays,
27034                 utcSaturday: utcSaturday,
27035                 utcSaturdays: utcSaturdays,
27036                 utcMonth: utcMonth,
27037                 utcMonths: utcMonths,
27038                 utcYear: utcYear,
27039                 utcYears: utcYears,
27040                 timeFormatDefaultLocale: defaultLocale$1,
27041                 get timeFormat () { return timeFormat; },
27042                 get timeParse () { return timeParse; },
27043                 get utcFormat () { return utcFormat; },
27044                 get utcParse () { return utcParse; },
27045                 timeFormatLocale: formatLocale$1,
27046                 isoFormat: formatIso,
27047                 isoParse: parseIso,
27048                 now: now,
27049                 timer: timer,
27050                 timerFlush: timerFlush,
27051                 timeout: d3_timeout,
27052                 interval: interval$1,
27053                 transition: transition,
27054                 active: active,
27055                 interrupt: interrupt,
27056                 voronoi: voronoi,
27057                 zoom: d3_zoom,
27058                 zoomTransform: transform,
27059                 zoomIdentity: identity$8
27060         });
27061
27062         function actionAddEntity(way) {
27063             return function(graph) {
27064                 return graph.replace(way);
27065             };
27066         }
27067
27068         /*
27069         Order the nodes of a way in reverse order and reverse any direction dependent tags
27070         other than `oneway`. (We assume that correcting a backwards oneway is the primary
27071         reason for reversing a way.)
27072
27073         In addition, numeric-valued `incline` tags are negated.
27074
27075         The JOSM implementation was used as a guide, but transformations that were of unclear benefit
27076         or adjusted tags that don't seem to be used in practice were omitted.
27077
27078         References:
27079             http://wiki.openstreetmap.org/wiki/Forward_%26_backward,_left_%26_right
27080             http://wiki.openstreetmap.org/wiki/Key:direction#Steps
27081             http://wiki.openstreetmap.org/wiki/Key:incline
27082             http://wiki.openstreetmap.org/wiki/Route#Members
27083             http://josm.openstreetmap.de/browser/josm/trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
27084             http://wiki.openstreetmap.org/wiki/Tag:highway%3Dstop
27085             http://wiki.openstreetmap.org/wiki/Key:traffic_sign#On_a_way_or_area
27086         */
27087         function actionReverse(entityID, options) {
27088             var ignoreKey = /^.*(_|:)?(description|name|note|website|ref|source|comment|watch|attribution)(_|:)?/;
27089             var numeric = /^([+\-]?)(?=[\d.])/;
27090             var directionKey = /direction$/;
27091             var turn_lanes = /^turn:lanes:?/;
27092             var keyReplacements = [
27093                 [/:right$/, ':left'],
27094                 [/:left$/, ':right'],
27095                 [/:forward$/, ':backward'],
27096                 [/:backward$/, ':forward'],
27097                 [/:right:/, ':left:'],
27098                 [/:left:/, ':right:'],
27099                 [/:forward:/, ':backward:'],
27100                 [/:backward:/, ':forward:']
27101             ];
27102             var valueReplacements = {
27103                 left: 'right',
27104                 right: 'left',
27105                 up: 'down',
27106                 down: 'up',
27107                 forward: 'backward',
27108                 backward: 'forward',
27109                 forwards: 'backward',
27110                 backwards: 'forward',
27111             };
27112             var roleReplacements = {
27113                 forward: 'backward',
27114                 backward: 'forward',
27115                 forwards: 'backward',
27116                 backwards: 'forward'
27117             };
27118             var onewayReplacements = {
27119                 yes: '-1',
27120                 '1': '-1',
27121                 '-1': 'yes'
27122             };
27123
27124             var compassReplacements = {
27125                 N: 'S',
27126                 NNE: 'SSW',
27127                 NE: 'SW',
27128                 ENE: 'WSW',
27129                 E: 'W',
27130                 ESE: 'WNW',
27131                 SE: 'NW',
27132                 SSE: 'NNW',
27133                 S: 'N',
27134                 SSW: 'NNE',
27135                 SW: 'NE',
27136                 WSW: 'ENE',
27137                 W: 'E',
27138                 WNW: 'ESE',
27139                 NW: 'SE',
27140                 NNW: 'SSE'
27141             };
27142
27143
27144             function reverseKey(key) {
27145                 for (var i = 0; i < keyReplacements.length; ++i) {
27146                     var replacement = keyReplacements[i];
27147                     if (replacement[0].test(key)) {
27148                         return key.replace(replacement[0], replacement[1]);
27149                     }
27150                 }
27151                 return key;
27152             }
27153
27154
27155             function reverseValue(key, value, includeAbsolute) {
27156                 if (ignoreKey.test(key)) { return value; }
27157
27158                 // Turn lanes are left/right to key (not way) direction - #5674
27159                 if (turn_lanes.test(key)) {
27160                     return value;
27161
27162                 } else if (key === 'incline' && numeric.test(value)) {
27163                     return value.replace(numeric, function(_, sign) { return sign === '-' ? '' : '-'; });
27164
27165                 } else if (options && options.reverseOneway && key === 'oneway') {
27166                     return onewayReplacements[value] || value;
27167
27168                 } else if (includeAbsolute && directionKey.test(key)) {
27169                     if (compassReplacements[value]) { return compassReplacements[value]; }
27170
27171                     var degrees = parseFloat(value);
27172                     if (typeof degrees === 'number' && !isNaN(degrees)) {
27173                         if (degrees < 180) {
27174                             degrees += 180;
27175                         } else {
27176                             degrees -= 180;
27177                         }
27178                         return degrees.toString();
27179                     }
27180                 }
27181
27182                 return valueReplacements[value] || value;
27183             }
27184
27185
27186             // Reverse the direction of tags attached to the nodes - #3076
27187             function reverseNodeTags(graph, nodeIDs) {
27188                 for (var i = 0; i < nodeIDs.length; i++) {
27189                     var node = graph.hasEntity(nodeIDs[i]);
27190                     if (!node || !Object.keys(node.tags).length) { continue; }
27191
27192                     var tags = {};
27193                     for (var key in node.tags) {
27194                         tags[reverseKey(key)] = reverseValue(key, node.tags[key], node.id === entityID);
27195                     }
27196                     graph = graph.replace(node.update({tags: tags}));
27197                 }
27198                 return graph;
27199             }
27200
27201
27202             function reverseWay(graph, way) {
27203                 var nodes = way.nodes.slice().reverse();
27204                 var tags = {};
27205                 var role;
27206
27207                 for (var key in way.tags) {
27208                     tags[reverseKey(key)] = reverseValue(key, way.tags[key]);
27209                 }
27210
27211                 graph.parentRelations(way).forEach(function(relation) {
27212                     relation.members.forEach(function(member, index) {
27213                         if (member.id === way.id && (role = roleReplacements[member.role])) {
27214                             relation = relation.updateMember({role: role}, index);
27215                             graph = graph.replace(relation);
27216                         }
27217                     });
27218                 });
27219
27220                 // Reverse any associated directions on nodes on the way and then replace
27221                 // the way itself with the reversed node ids and updated way tags
27222                 return reverseNodeTags(graph, nodes)
27223                     .replace(way.update({nodes: nodes, tags: tags}));
27224             }
27225
27226
27227             var action = function(graph) {
27228                 var entity = graph.entity(entityID);
27229                 if (entity.type === 'way') {
27230                     return reverseWay(graph, entity);
27231                 }
27232                 return reverseNodeTags(graph, [entityID]);
27233             };
27234
27235             action.disabled = function(graph) {
27236                 var entity = graph.hasEntity(entityID);
27237                 if (!entity || entity.type === 'way') { return false; }
27238
27239                 for (var key in entity.tags) {
27240                     var value = entity.tags[key];
27241                     if (reverseKey(key) !== key || reverseValue(key, value, true) !== value) {
27242                         return false;
27243                     }
27244                 }
27245                 return 'nondirectional_node';
27246             };
27247
27248             action.entityID = function() {
27249                 return entityID;
27250             };
27251
27252             return action;
27253         }
27254
27255         function osmIsInterestingTag(key) {
27256             return key !== 'attribution' &&
27257                 key !== 'created_by' &&
27258                 key !== 'source' &&
27259                 key !== 'odbl' &&
27260                 key.indexOf('source:') !== 0 &&
27261                 key.indexOf('source_ref') !== 0 && // purposely exclude colon
27262                 key.indexOf('tiger:') !== 0;
27263         }
27264
27265         var osmAreaKeys = {};
27266         function osmSetAreaKeys(value) {
27267             osmAreaKeys = value;
27268         }
27269
27270         // Tags that indicate a node can be a standalone point
27271         // e.g. { amenity: { bar: true, parking: true, ... } ... }
27272         var osmPointTags = {};
27273         function osmSetPointTags(value) {
27274             osmPointTags = value;
27275         }
27276         // Tags that indicate a node can be part of a way
27277         // e.g. { amenity: { parking: true, ... }, highway: { stop: true ... } ... }
27278         var osmVertexTags = {};
27279         function osmSetVertexTags(value) {
27280             osmVertexTags = value;
27281         }
27282
27283         function osmNodeGeometriesForTags(nodeTags) {
27284             var geometries = {};
27285             for (var key in nodeTags) {
27286                 if (osmPointTags[key] &&
27287                     (osmPointTags[key]['*'] || osmPointTags[key][nodeTags[key]])) {
27288                     geometries.point = true;
27289                 }
27290                 if (osmVertexTags[key] &&
27291                     (osmVertexTags[key]['*'] || osmVertexTags[key][nodeTags[key]])) {
27292                     geometries.vertex = true;
27293                 }
27294                 // break early if both are already supported
27295                 if (geometries.point && geometries.vertex) { break; }
27296             }
27297             return geometries;
27298         }
27299
27300         var osmOneWayTags = {
27301             'aerialway': {
27302                 'chair_lift': true,
27303                 'drag_lift': true,
27304                 'j-bar': true,
27305                 'magic_carpet': true,
27306                 'mixed_lift': true,
27307                 'platter': true,
27308                 'rope_tow': true,
27309                 't-bar': true,
27310                 'zip_line': true
27311             },
27312             'highway': {
27313                 'motorway': true
27314             },
27315             'junction': {
27316                 'circular': true,
27317                 'roundabout': true
27318             },
27319             'man_made': {
27320                 'piste:halfpipe': true
27321             },
27322             'piste:type': {
27323                 'downhill': true,
27324                 'sled': true,
27325                 'yes': true
27326             },
27327             'waterway': {
27328                 'canal': true,
27329                 'ditch': true,
27330                 'drain': true,
27331                 'fish_pass': true,
27332                 'river': true,
27333                 'stream': true,
27334                 'tidal_channel': true
27335             }
27336         };
27337
27338         // solid and smooth surfaces akin to the assumed default road surface in OSM
27339         var osmPavedTags = {
27340             'surface': {
27341                 'paved': true,
27342                 'asphalt': true,
27343                 'concrete': true,
27344                 'concrete:lanes': true,
27345                 'concrete:plates': true
27346             },
27347             'tracktype': {
27348                 'grade1': true
27349             }
27350         };
27351
27352         // solid, if somewhat uncommon surfaces with a high range of smoothness
27353         var osmSemipavedTags = {
27354             'surface': {
27355                 'cobblestone': true,
27356                 'cobblestone:flattened': true,
27357                 'unhewn_cobblestone': true,
27358                 'sett': true,
27359                 'paving_stones': true,
27360                 'metal': true,
27361                 'wood': true
27362             }
27363         };
27364
27365         var osmRightSideIsInsideTags = {
27366             'natural': {
27367                 'cliff': true,
27368                 'coastline': 'coastline',
27369             },
27370             'barrier': {
27371                 'retaining_wall': true,
27372                 'kerb': true,
27373                 'guard_rail': true,
27374                 'city_wall': true,
27375             },
27376             'man_made': {
27377                 'embankment': true
27378             },
27379             'waterway': {
27380                 'weir': true
27381             }
27382         };
27383
27384         // "highway" tag values for pedestrian or vehicle right-of-ways that make up the routable network
27385         // (does not include `raceway`)
27386         var osmRoutableHighwayTagValues = {
27387             motorway: true, trunk: true, primary: true, secondary: true, tertiary: true, residential: true,
27388             motorway_link: true, trunk_link: true, primary_link: true, secondary_link: true, tertiary_link: true,
27389             unclassified: true, road: true, service: true, track: true, living_street: true, bus_guideway: true,
27390             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
27391         };
27392         // "highway" tag values that generally do not allow motor vehicles
27393         var osmPathHighwayTagValues = {
27394             path: true, footway: true, cycleway: true, bridleway: true, pedestrian: true, corridor: true, steps: true
27395         };
27396
27397         // "railway" tag values representing existing railroad tracks (purposely does not include 'abandoned')
27398         var osmRailwayTrackTagValues = {
27399             rail: true, light_rail: true, tram: true, subway: true,
27400             monorail: true, funicular: true, miniature: true, narrow_gauge: true,
27401             disused: true, preserved: true
27402         };
27403
27404         // "waterway" tag values for line features representing water flow
27405         var osmFlowingWaterwayTagValues = {
27406             canal: true, ditch: true, drain: true, fish_pass: true, river: true, stream: true, tidal_channel: true
27407         };
27408
27409         // constants
27410         var TAU = 2 * Math.PI;
27411         var EQUATORIAL_RADIUS = 6356752.314245179;
27412         var POLAR_RADIUS = 6378137.0;
27413
27414
27415         function geoLatToMeters(dLat) {
27416             return dLat * (TAU * POLAR_RADIUS / 360);
27417         }
27418
27419
27420         function geoLonToMeters(dLon, atLat) {
27421             return Math.abs(atLat) >= 90 ? 0 :
27422                 dLon * (TAU * EQUATORIAL_RADIUS / 360) * Math.abs(Math.cos(atLat * (Math.PI / 180)));
27423         }
27424
27425
27426         function geoMetersToLat(m) {
27427             return m / (TAU * POLAR_RADIUS / 360);
27428         }
27429
27430
27431         function geoMetersToLon(m, atLat) {
27432             return Math.abs(atLat) >= 90 ? 0 :
27433                 m / (TAU * EQUATORIAL_RADIUS / 360) / Math.abs(Math.cos(atLat * (Math.PI / 180)));
27434         }
27435
27436
27437         function geoMetersToOffset(meters, tileSize) {
27438             tileSize = tileSize || 256;
27439             return [
27440                 meters[0] * tileSize / (TAU * EQUATORIAL_RADIUS),
27441                 -meters[1] * tileSize / (TAU * POLAR_RADIUS)
27442             ];
27443         }
27444
27445
27446         function geoOffsetToMeters(offset, tileSize) {
27447             tileSize = tileSize || 256;
27448             return [
27449                 offset[0] * TAU * EQUATORIAL_RADIUS / tileSize,
27450                 -offset[1] * TAU * POLAR_RADIUS / tileSize
27451             ];
27452         }
27453
27454
27455         // Equirectangular approximation of spherical distances on Earth
27456         function geoSphericalDistance(a, b) {
27457             var x = geoLonToMeters(a[0] - b[0], (a[1] + b[1]) / 2);
27458             var y = geoLatToMeters(a[1] - b[1]);
27459             return Math.sqrt((x * x) + (y * y));
27460         }
27461
27462
27463         // scale to zoom
27464         function geoScaleToZoom(k, tileSize) {
27465             tileSize = tileSize || 256;
27466             var log2ts = Math.log(tileSize) * Math.LOG2E;
27467             return Math.log(k * TAU) / Math.LN2 - log2ts;
27468         }
27469
27470
27471         // zoom to scale
27472         function geoZoomToScale(z, tileSize) {
27473             tileSize = tileSize || 256;
27474             return tileSize * Math.pow(2, z) / TAU;
27475         }
27476
27477
27478         // returns info about the node from `nodes` closest to the given `point`
27479         function geoSphericalClosestNode(nodes, point) {
27480             var minDistance = Infinity, distance;
27481             var indexOfMin;
27482
27483             for (var i in nodes) {
27484                 distance = geoSphericalDistance(nodes[i].loc, point);
27485                 if (distance < minDistance) {
27486                     minDistance = distance;
27487                     indexOfMin = i;
27488                 }
27489             }
27490
27491             if (indexOfMin !== undefined) {
27492                 return { index: indexOfMin, distance: minDistance, node: nodes[indexOfMin] };
27493             } else {
27494                 return null;
27495             }
27496         }
27497
27498         function geoExtent(min, max) {
27499             if (!(this instanceof geoExtent)) {
27500                 return new geoExtent(min, max);
27501             } else if (min instanceof geoExtent) {
27502                 return min;
27503             } else if (min && min.length === 2 && min[0].length === 2 && min[1].length === 2) {
27504                 this[0] = min[0];
27505                 this[1] = min[1];
27506             } else {
27507                 this[0] = min        || [ Infinity,  Infinity];
27508                 this[1] = max || min || [-Infinity, -Infinity];
27509             }
27510         }
27511
27512         geoExtent.prototype = new Array(2);
27513
27514         Object.assign(geoExtent.prototype, {
27515
27516             equals: function (obj) {
27517                 return this[0][0] === obj[0][0] &&
27518                     this[0][1] === obj[0][1] &&
27519                     this[1][0] === obj[1][0] &&
27520                     this[1][1] === obj[1][1];
27521             },
27522
27523
27524             extend: function(obj) {
27525                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
27526                 return geoExtent(
27527                     [Math.min(obj[0][0], this[0][0]), Math.min(obj[0][1], this[0][1])],
27528                     [Math.max(obj[1][0], this[1][0]), Math.max(obj[1][1], this[1][1])]
27529                 );
27530             },
27531
27532
27533             _extend: function(extent) {
27534                 this[0][0] = Math.min(extent[0][0], this[0][0]);
27535                 this[0][1] = Math.min(extent[0][1], this[0][1]);
27536                 this[1][0] = Math.max(extent[1][0], this[1][0]);
27537                 this[1][1] = Math.max(extent[1][1], this[1][1]);
27538             },
27539
27540
27541             area: function() {
27542                 return Math.abs((this[1][0] - this[0][0]) * (this[1][1] - this[0][1]));
27543             },
27544
27545
27546             center: function() {
27547                 return [(this[0][0] + this[1][0]) / 2, (this[0][1] + this[1][1]) / 2];
27548             },
27549
27550
27551             rectangle: function() {
27552                 return [this[0][0], this[0][1], this[1][0], this[1][1]];
27553             },
27554
27555
27556             bbox: function() {
27557                 return { minX: this[0][0], minY: this[0][1], maxX: this[1][0], maxY: this[1][1] };
27558             },
27559
27560
27561             polygon: function() {
27562                 return [
27563                     [this[0][0], this[0][1]],
27564                     [this[0][0], this[1][1]],
27565                     [this[1][0], this[1][1]],
27566                     [this[1][0], this[0][1]],
27567                     [this[0][0], this[0][1]]
27568                 ];
27569             },
27570
27571
27572             contains: function(obj) {
27573                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
27574                 return obj[0][0] >= this[0][0] &&
27575                        obj[0][1] >= this[0][1] &&
27576                        obj[1][0] <= this[1][0] &&
27577                        obj[1][1] <= this[1][1];
27578             },
27579
27580
27581             intersects: function(obj) {
27582                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
27583                 return obj[0][0] <= this[1][0] &&
27584                        obj[0][1] <= this[1][1] &&
27585                        obj[1][0] >= this[0][0] &&
27586                        obj[1][1] >= this[0][1];
27587             },
27588
27589
27590             intersection: function(obj) {
27591                 if (!this.intersects(obj)) { return new geoExtent(); }
27592                 return new geoExtent(
27593                     [Math.max(obj[0][0], this[0][0]), Math.max(obj[0][1], this[0][1])],
27594                     [Math.min(obj[1][0], this[1][0]), Math.min(obj[1][1], this[1][1])]
27595                 );
27596             },
27597
27598
27599             percentContainedIn: function(obj) {
27600                 if (!(obj instanceof geoExtent)) { obj = new geoExtent(obj); }
27601                 var a1 = this.intersection(obj).area();
27602                 var a2 = this.area();
27603
27604                 if (a1 === Infinity || a2 === Infinity || a1 === 0 || a2 === 0) {
27605                     return 0;
27606                 } else {
27607                     return a1 / a2;
27608                 }
27609             },
27610
27611
27612             padByMeters: function(meters) {
27613                 var dLat = geoMetersToLat(meters);
27614                 var dLon = geoMetersToLon(meters, this.center()[1]);
27615                 return geoExtent(
27616                     [this[0][0] - dLon, this[0][1] - dLat],
27617                     [this[1][0] + dLon, this[1][1] + dLat]
27618                 );
27619             },
27620
27621
27622             toParam: function() {
27623                 return this.rectangle().join(',');
27624             }
27625
27626         });
27627
27628         // vector equals
27629         function geoVecEqual(a, b, epsilon) {
27630             if (epsilon) {
27631                 return (Math.abs(a[0] - b[0]) <= epsilon) && (Math.abs(a[1] - b[1]) <= epsilon);
27632             } else {
27633                 return (a[0] === b[0]) && (a[1] === b[1]);
27634             }
27635         }
27636
27637         // vector addition
27638         function geoVecAdd(a, b) {
27639             return [ a[0] + b[0], a[1] + b[1] ];
27640         }
27641
27642         // vector subtraction
27643         function geoVecSubtract(a, b) {
27644             return [ a[0] - b[0], a[1] - b[1] ];
27645         }
27646
27647         // vector scaling
27648         function geoVecScale(a, mag) {
27649             return [ a[0] * mag, a[1] * mag ];
27650         }
27651
27652         // vector rounding (was: geoRoundCoordinates)
27653         function geoVecFloor(a) {
27654             return [ Math.floor(a[0]), Math.floor(a[1]) ];
27655         }
27656
27657         // linear interpolation
27658         function geoVecInterp(a, b, t) {
27659             return [
27660                 a[0] + (b[0] - a[0]) * t,
27661                 a[1] + (b[1] - a[1]) * t
27662             ];
27663         }
27664
27665         // http://jsperf.com/id-dist-optimization
27666         function geoVecLength(a, b) {
27667             return Math.sqrt(geoVecLengthSquare(a,b));
27668         }
27669
27670         // length of vector raised to the power two
27671         function geoVecLengthSquare(a, b) {
27672             b = b || [0, 0];
27673             var x = a[0] - b[0];
27674             var y = a[1] - b[1];
27675             return (x * x) + (y * y);
27676         }
27677
27678         // get a unit vector
27679         function geoVecNormalize(a) {
27680             var length = Math.sqrt((a[0] * a[0]) + (a[1] * a[1]));
27681             if (length !== 0) {
27682                 return geoVecScale(a, 1 / length);
27683             }
27684             return [0, 0];
27685         }
27686
27687         // Return the counterclockwise angle in the range (-pi, pi)
27688         // between the positive X axis and the line intersecting a and b.
27689         function geoVecAngle(a, b) {
27690             return Math.atan2(b[1] - a[1], b[0] - a[0]);
27691         }
27692
27693         // dot product
27694         function geoVecDot(a, b, origin) {
27695             origin = origin || [0, 0];
27696             var p = geoVecSubtract(a, origin);
27697             var q = geoVecSubtract(b, origin);
27698             return (p[0]) * (q[0]) + (p[1]) * (q[1]);
27699         }
27700
27701         // normalized dot product
27702         function geoVecNormalizedDot(a, b, origin) {
27703             origin = origin || [0, 0];
27704             var p = geoVecNormalize(geoVecSubtract(a, origin));
27705             var q = geoVecNormalize(geoVecSubtract(b, origin));
27706             return geoVecDot(p, q);
27707         }
27708
27709         // 2D cross product of OA and OB vectors, returns magnitude of Z vector
27710         // Returns a positive value, if OAB makes a counter-clockwise turn,
27711         // negative for clockwise turn, and zero if the points are collinear.
27712         function geoVecCross(a, b, origin) {
27713             origin = origin || [0, 0];
27714             var p = geoVecSubtract(a, origin);
27715             var q = geoVecSubtract(b, origin);
27716             return (p[0]) * (q[1]) - (p[1]) * (q[0]);
27717         }
27718
27719
27720         // find closest orthogonal projection of point onto points array
27721         function geoVecProject(a, points) {
27722             var min = Infinity;
27723             var idx;
27724             var target;
27725
27726             for (var i = 0; i < points.length - 1; i++) {
27727                 var o = points[i];
27728                 var s = geoVecSubtract(points[i + 1], o);
27729                 var v = geoVecSubtract(a, o);
27730                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
27731                 var p;
27732
27733                 if (proj < 0) {
27734                     p = o;
27735                 } else if (proj > 1) {
27736                     p = points[i + 1];
27737                 } else {
27738                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
27739                 }
27740
27741                 var dist = geoVecLength(p, a);
27742                 if (dist < min) {
27743                     min = dist;
27744                     idx = i + 1;
27745                     target = p;
27746                 }
27747             }
27748
27749             if (idx !== undefined) {
27750                 return { index: idx, distance: min, target: target };
27751             } else {
27752                 return null;
27753             }
27754         }
27755
27756         // Return the counterclockwise angle in the range (-pi, pi)
27757         // between the positive X axis and the line intersecting a and b.
27758         function geoAngle(a, b, projection) {
27759             return geoVecAngle(projection(a.loc), projection(b.loc));
27760         }
27761
27762
27763         function geoEdgeEqual(a, b) {
27764             return (a[0] === b[0] && a[1] === b[1]) ||
27765                 (a[0] === b[1] && a[1] === b[0]);
27766         }
27767
27768
27769         // Rotate all points counterclockwise around a pivot point by given angle
27770         function geoRotate(points, angle, around) {
27771             return points.map(function(point) {
27772                 var radial = geoVecSubtract(point, around);
27773                 return [
27774                     radial[0] * Math.cos(angle) - radial[1] * Math.sin(angle) + around[0],
27775                     radial[0] * Math.sin(angle) + radial[1] * Math.cos(angle) + around[1]
27776                 ];
27777             });
27778         }
27779
27780
27781         // Choose the edge with the minimal distance from `point` to its orthogonal
27782         // projection onto that edge, if such a projection exists, or the distance to
27783         // the closest vertex on that edge. Returns an object with the `index` of the
27784         // chosen edge, the chosen `loc` on that edge, and the `distance` to to it.
27785         function geoChooseEdge(nodes, point, projection, activeID) {
27786             var dist = geoVecLength;
27787             var points = nodes.map(function(n) { return projection(n.loc); });
27788             var ids = nodes.map(function(n) { return n.id; });
27789             var min = Infinity;
27790             var idx;
27791             var loc;
27792
27793             for (var i = 0; i < points.length - 1; i++) {
27794                 if (ids[i] === activeID || ids[i + 1] === activeID) { continue; }
27795
27796                 var o = points[i];
27797                 var s = geoVecSubtract(points[i + 1], o);
27798                 var v = geoVecSubtract(point, o);
27799                 var proj = geoVecDot(v, s) / geoVecDot(s, s);
27800                 var p;
27801
27802                 if (proj < 0) {
27803                     p = o;
27804                 } else if (proj > 1) {
27805                     p = points[i + 1];
27806                 } else {
27807                     p = [o[0] + proj * s[0], o[1] + proj * s[1]];
27808                 }
27809
27810                 var d = dist(p, point);
27811                 if (d < min) {
27812                     min = d;
27813                     idx = i + 1;
27814                     loc = projection.invert(p);
27815                 }
27816             }
27817
27818             if (idx !== undefined) {
27819                 return { index: idx, distance: min, loc: loc };
27820             } else {
27821                 return null;
27822             }
27823         }
27824
27825
27826         // Test active (dragged or drawing) segments against inactive segments
27827         // This is used to test e.g. multipolygon rings that cross
27828         // `activeNodes` is the ring containing the activeID being dragged.
27829         // `inactiveNodes` is the other ring to test against
27830         function geoHasLineIntersections(activeNodes, inactiveNodes, activeID) {
27831             var actives = [];
27832             var inactives = [];
27833             var j, k, n1, n2, segment;
27834
27835             // gather active segments (only segments in activeNodes that contain the activeID)
27836             for (j = 0; j < activeNodes.length - 1; j++) {
27837                 n1 = activeNodes[j];
27838                 n2 = activeNodes[j+1];
27839                 segment = [n1.loc, n2.loc];
27840                 if (n1.id === activeID || n2.id === activeID) {
27841                     actives.push(segment);
27842                 }
27843             }
27844
27845             // gather inactive segments
27846             for (j = 0; j < inactiveNodes.length - 1; j++) {
27847                 n1 = inactiveNodes[j];
27848                 n2 = inactiveNodes[j+1];
27849                 segment = [n1.loc, n2.loc];
27850                 inactives.push(segment);
27851             }
27852
27853             // test
27854             for (j = 0; j < actives.length; j++) {
27855                 for (k = 0; k < inactives.length; k++) {
27856                     var p = actives[j];
27857                     var q = inactives[k];
27858                     var hit = geoLineIntersection(p, q);
27859                     if (hit) {
27860                         return true;
27861                     }
27862                 }
27863             }
27864
27865             return false;
27866         }
27867
27868
27869         // Test active (dragged or drawing) segments against inactive segments
27870         // This is used to test whether a way intersects with itself.
27871         function geoHasSelfIntersections(nodes, activeID) {
27872             var actives = [];
27873             var inactives = [];
27874             var j, k;
27875
27876             // group active and passive segments along the nodes
27877             for (j = 0; j < nodes.length - 1; j++) {
27878                 var n1 = nodes[j];
27879                 var n2 = nodes[j+1];
27880                 var segment = [n1.loc, n2.loc];
27881                 if (n1.id === activeID || n2.id === activeID) {
27882                     actives.push(segment);
27883                 } else {
27884                     inactives.push(segment);
27885                 }
27886             }
27887
27888             // test
27889             for (j = 0; j < actives.length; j++) {
27890                 for (k = 0; k < inactives.length; k++) {
27891                     var p = actives[j];
27892                     var q = inactives[k];
27893                     // skip if segments share an endpoint
27894                     if (geoVecEqual(p[1], q[0]) || geoVecEqual(p[0], q[1]) ||
27895                         geoVecEqual(p[0], q[0]) || geoVecEqual(p[1], q[1]) ) {
27896                         continue;
27897                     }
27898
27899                     var hit = geoLineIntersection(p, q);
27900                     if (hit) {
27901                         var epsilon = 1e-8;
27902                         // skip if the hit is at the segment's endpoint
27903                         if (geoVecEqual(p[1], hit, epsilon) || geoVecEqual(p[0], hit, epsilon) ||
27904                             geoVecEqual(q[1], hit, epsilon) || geoVecEqual(q[0], hit, epsilon) ) {
27905                             continue;
27906                         } else {
27907                             return true;
27908                         }
27909                     }
27910                 }
27911             }
27912
27913             return false;
27914         }
27915
27916
27917         // Return the intersection point of 2 line segments.
27918         // From https://github.com/pgkelley4/line-segments-intersect
27919         // This uses the vector cross product approach described below:
27920         //  http://stackoverflow.com/a/565282/786339
27921         function geoLineIntersection(a, b) {
27922             var p = [a[0][0], a[0][1]];
27923             var p2 = [a[1][0], a[1][1]];
27924             var q = [b[0][0], b[0][1]];
27925             var q2 = [b[1][0], b[1][1]];
27926             var r = geoVecSubtract(p2, p);
27927             var s = geoVecSubtract(q2, q);
27928             var uNumerator = geoVecCross(geoVecSubtract(q, p), r);
27929             var denominator = geoVecCross(r, s);
27930
27931             if (uNumerator && denominator) {
27932                 var u = uNumerator / denominator;
27933                 var t = geoVecCross(geoVecSubtract(q, p), s) / denominator;
27934
27935                 if ((t >= 0) && (t <= 1) && (u >= 0) && (u <= 1)) {
27936                     return geoVecInterp(p, p2, t);
27937                 }
27938             }
27939
27940             return null;
27941         }
27942
27943
27944         function geoPathIntersections(path1, path2) {
27945             var intersections = [];
27946             for (var i = 0; i < path1.length - 1; i++) {
27947                 for (var j = 0; j < path2.length - 1; j++) {
27948                     var a = [ path1[i], path1[i+1] ];
27949                     var b = [ path2[j], path2[j+1] ];
27950                     var hit = geoLineIntersection(a, b);
27951                     if (hit) {
27952                         intersections.push(hit);
27953                     }
27954                 }
27955             }
27956             return intersections;
27957         }
27958
27959         function geoPathHasIntersections(path1, path2) {
27960             for (var i = 0; i < path1.length - 1; i++) {
27961                 for (var j = 0; j < path2.length - 1; j++) {
27962                     var a = [ path1[i], path1[i+1] ];
27963                     var b = [ path2[j], path2[j+1] ];
27964                     var hit = geoLineIntersection(a, b);
27965                     if (hit) {
27966                         return true;
27967                     }
27968                 }
27969             }
27970             return false;
27971         }
27972
27973
27974         // Return whether point is contained in polygon.
27975         //
27976         // `point` should be a 2-item array of coordinates.
27977         // `polygon` should be an array of 2-item arrays of coordinates.
27978         //
27979         // From https://github.com/substack/point-in-polygon.
27980         // ray-casting algorithm based on
27981         // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
27982         //
27983         function geoPointInPolygon(point, polygon) {
27984             var x = point[0];
27985             var y = point[1];
27986             var inside = false;
27987
27988             for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
27989                 var xi = polygon[i][0];
27990                 var yi = polygon[i][1];
27991                 var xj = polygon[j][0];
27992                 var yj = polygon[j][1];
27993
27994                 var intersect = ((yi > y) !== (yj > y)) &&
27995                     (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
27996                 if (intersect) { inside = !inside; }
27997             }
27998
27999             return inside;
28000         }
28001
28002
28003         function geoPolygonContainsPolygon(outer, inner) {
28004             return inner.every(function(point) {
28005                 return geoPointInPolygon(point, outer);
28006             });
28007         }
28008
28009
28010         function geoPolygonIntersectsPolygon(outer, inner, checkSegments) {
28011             function testPoints(outer, inner) {
28012                 return inner.some(function(point) {
28013                     return geoPointInPolygon(point, outer);
28014                 });
28015             }
28016
28017            return testPoints(outer, inner) || (!!checkSegments && geoPathHasIntersections(outer, inner));
28018         }
28019
28020
28021         // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
28022         // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
28023         function geoGetSmallestSurroundingRectangle(points) {
28024             var hull = d3_polygonHull(points);
28025             var centroid = d3_polygonCentroid(hull);
28026             var minArea = Infinity;
28027             var ssrExtent = [];
28028             var ssrAngle = 0;
28029             var c1 = hull[0];
28030
28031             for (var i = 0; i <= hull.length - 1; i++) {
28032                 var c2 = (i === hull.length - 1) ? hull[0] : hull[i + 1];
28033                 var angle = Math.atan2(c2[1] - c1[1], c2[0] - c1[0]);
28034                 var poly = geoRotate(hull, -angle, centroid);
28035                 var extent = poly.reduce(function(extent, point) {
28036                     return extent.extend(geoExtent(point));
28037                 }, geoExtent());
28038
28039                 var area = extent.area();
28040                 if (area < minArea) {
28041                     minArea = area;
28042                     ssrExtent = extent;
28043                     ssrAngle = angle;
28044                 }
28045                 c1 = c2;
28046             }
28047
28048             return {
28049                 poly: geoRotate(ssrExtent.polygon(), ssrAngle, centroid),
28050                 angle: ssrAngle
28051             };
28052         }
28053
28054
28055         function geoPathLength(path) {
28056             var length = 0;
28057             for (var i = 0; i < path.length - 1; i++) {
28058                 length += geoVecLength(path[i], path[i + 1]);
28059             }
28060             return length;
28061         }
28062
28063
28064         // If the given point is at the edge of the padded viewport,
28065         // return a vector that will nudge the viewport in that direction
28066         function geoViewportEdge(point, dimensions) {
28067             var pad = [80, 20, 50, 20];   // top, right, bottom, left
28068             var x = 0;
28069             var y = 0;
28070
28071             if (point[0] > dimensions[0] - pad[1])
28072                 { x = -10; }
28073             if (point[0] < pad[3])
28074                 { x = 10; }
28075             if (point[1] > dimensions[1] - pad[2])
28076                 { y = -10; }
28077             if (point[1] < pad[0])
28078                 { y = 10; }
28079
28080             if (x || y) {
28081                 return [x, y];
28082             } else {
28083                 return null;
28084             }
28085         }
28086
28087         /*
28088             Bypasses features of D3's default projection stream pipeline that are unnecessary:
28089             * Antimeridian clipping
28090             * Spherical rotation
28091             * Resampling
28092         */
28093         function geoRawMercator() {
28094             var project = mercatorRaw;
28095             var k = 512 / Math.PI; // scale
28096             var x = 0;
28097             var y = 0; // translate
28098             var clipExtent = [[0, 0], [0, 0]];
28099
28100
28101             function projection(point) {
28102                 point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
28103                 return [point[0] * k + x, y - point[1] * k];
28104             }
28105
28106
28107             projection.invert = function(point) {
28108                 point = project.invert((point[0] - x) / k, (y - point[1]) / k);
28109                 return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
28110             };
28111
28112
28113             projection.scale = function(_) {
28114                 if (!arguments.length) { return k; }
28115                 k = +_;
28116                 return projection;
28117             };
28118
28119
28120             projection.translate = function(_) {
28121                 if (!arguments.length) { return [x, y]; }
28122                 x = +_[0];
28123                 y = +_[1];
28124                 return projection;
28125             };
28126
28127
28128             projection.clipExtent = function(_) {
28129                 if (!arguments.length) { return clipExtent; }
28130                 clipExtent = _;
28131                 return projection;
28132             };
28133
28134
28135             projection.transform = function(obj) {
28136                 if (!arguments.length) { return identity$8.translate(x, y).scale(k); }
28137                 x = +obj.x;
28138                 y = +obj.y;
28139                 k = +obj.k;
28140                 return projection;
28141             };
28142
28143
28144             projection.stream = d3_geoTransform({
28145                 point: function(x, y) {
28146                     var vec = projection([x, y]);
28147                     this.stream.point(vec[0], vec[1]);
28148                 }
28149             }).stream;
28150
28151
28152             return projection;
28153         }
28154
28155         function geoOrthoNormalizedDotProduct(a, b, origin) {
28156             if (geoVecEqual(origin, a) || geoVecEqual(origin, b)) {
28157                 return 1;  // coincident points, treat as straight and try to remove
28158             }
28159             return geoVecNormalizedDot(a, b, origin);
28160         }
28161
28162
28163         function geoOrthoFilterDotProduct(dotp, epsilon, lowerThreshold, upperThreshold, allowStraightAngles) {
28164             var val = Math.abs(dotp);
28165             if (val < epsilon) {
28166                 return 0;      // already orthogonal
28167             } else if (allowStraightAngles && Math.abs(val-1) < epsilon) {
28168                 return 0;      // straight angle, which is okay in this case
28169             } else if (val < lowerThreshold || val > upperThreshold) {
28170                 return dotp;   // can be adjusted
28171             } else {
28172                 return null;   // ignore vertex
28173             }
28174         }
28175
28176
28177         function geoOrthoCalcScore(points, isClosed, epsilon, threshold) {
28178             var score = 0;
28179             var first = isClosed ? 0 : 1;
28180             var last = isClosed ? points.length : points.length - 1;
28181             var coords = points.map(function(p) { return p.coord; });
28182
28183             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
28184             var upperThreshold = Math.cos(threshold * Math.PI / 180);
28185
28186             for (var i = first; i < last; i++) {
28187                 var a = coords[(i - 1 + coords.length) % coords.length];
28188                 var origin = coords[i];
28189                 var b = coords[(i + 1) % coords.length];
28190
28191                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold);
28192                 if (dotp === null) { continue; }    // ignore vertex
28193                 score = score + 2.0 * Math.min(Math.abs(dotp - 1.0), Math.min(Math.abs(dotp), Math.abs(dotp + 1)));
28194             }
28195
28196             return score;
28197         }
28198
28199         // returns the maximum angle less than `lessThan` between the actual corner and a 0° or 90° corner
28200         function geoOrthoMaxOffsetAngle(coords, isClosed, lessThan) {
28201             var max = -Infinity;
28202
28203             var first = isClosed ? 0 : 1;
28204             var last = isClosed ? coords.length : coords.length - 1;
28205
28206             for (var i = first; i < last; i++) {
28207                 var a = coords[(i - 1 + coords.length) % coords.length];
28208                 var origin = coords[i];
28209                 var b = coords[(i + 1) % coords.length];
28210                 var normalizedDotP = geoOrthoNormalizedDotProduct(a, b, origin);
28211
28212                 var angle = Math.acos(Math.abs(normalizedDotP)) * 180 / Math.PI;
28213
28214                 if (angle > 45) { angle = 90 - angle; }
28215
28216                 if (angle >= lessThan) { continue; }
28217
28218                 if (angle > max) { max = angle; }
28219             }
28220
28221             if (max === -Infinity) { return null; }
28222
28223             return max;
28224         }
28225
28226
28227         // similar to geoOrthoCalcScore, but returns quickly if there is something to do
28228         function geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles) {
28229             var score = null;
28230             var first = isClosed ? 0 : 1;
28231             var last = isClosed ? coords.length : coords.length - 1;
28232
28233             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
28234             var upperThreshold = Math.cos(threshold * Math.PI / 180);
28235
28236             for (var i = first; i < last; i++) {
28237                 var a = coords[(i - 1 + coords.length) % coords.length];
28238                 var origin = coords[i];
28239                 var b = coords[(i + 1) % coords.length];
28240
28241                 var dotp = geoOrthoFilterDotProduct(geoOrthoNormalizedDotProduct(a, b, origin), epsilon, lowerThreshold, upperThreshold, allowStraightAngles);
28242                 if (dotp === null) { continue; }        // ignore vertex
28243                 if (Math.abs(dotp) > 0) { return 1; }   // something to do
28244                 score = 0;                          // already square
28245             }
28246
28247             return score;
28248         }
28249
28250         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"]];
28251
28252         var wikibooks$1 = /*#__PURE__*/Object.freeze({
28253                 __proto__: null,
28254                 'default': wikibooks
28255         });
28256
28257         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"]];
28258
28259         var wikinews$1 = /*#__PURE__*/Object.freeze({
28260                 __proto__: null,
28261                 'default': wikinews
28262         });
28263
28264         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"]];
28265
28266         var wikiquote$1 = /*#__PURE__*/Object.freeze({
28267                 __proto__: null,
28268                 'default': wikiquote
28269         });
28270
28271         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"]];
28272
28273         var wikiversity$1 = /*#__PURE__*/Object.freeze({
28274                 __proto__: null,
28275                 'default': wikiversity
28276         });
28277
28278         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"]];
28279
28280         var wikivoyage$1 = /*#__PURE__*/Object.freeze({
28281                 __proto__: null,
28282                 'default': wikivoyage
28283         });
28284
28285         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"]];
28286
28287         var wiktionary$1 = /*#__PURE__*/Object.freeze({
28288                 __proto__: null,
28289                 'default': wiktionary
28290         });
28291
28292         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"]];
28293
28294         var wikipedia$1 = /*#__PURE__*/Object.freeze({
28295                 __proto__: null,
28296                 'default': wikipedia
28297         });
28298
28299         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"]];
28300
28301         var wikisource$1 = /*#__PURE__*/Object.freeze({
28302                 __proto__: null,
28303                 'default': wikisource
28304         });
28305
28306         getCjsExportFromNamespace(wikibooks$1);
28307
28308         getCjsExportFromNamespace(wikinews$1);
28309
28310         getCjsExportFromNamespace(wikiquote$1);
28311
28312         getCjsExportFromNamespace(wikiversity$1);
28313
28314         getCjsExportFromNamespace(wikivoyage$1);
28315
28316         getCjsExportFromNamespace(wiktionary$1);
28317
28318         var require$$6 = getCjsExportFromNamespace(wikipedia$1);
28319
28320         getCjsExportFromNamespace(wikisource$1);
28321
28322         var wikipedia$2 = require$$6;
28323
28324         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}}];
28325
28326         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:"charging_station",car:"*"},replace:{amenity:"charging_station",motorcar:"$1"}},{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:{"bicycle:oneway":"*"},replace:{"oneway:bicycle":"$1"}},{old:{bridge:"1"},replace:{bridge:"yes"}},{old:{bridge:"true"},replace:{bridge:"yes"}},{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:height":"*"},replace:{height:"$1"}},{old:{"building:material":"Brick"},replace:{"building:material":"brick"}},{old:{"building:min_height":"*"},replace:{min_height:"$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:{disabled_spaces:"*"},replace:{"capacity:disabled":"$1"}},{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:"telephone_exchange"},replace:{telecom:"exchange"}},{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:{tunnel:"1"},replace:{tunnel:"yes"}},{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"}}];
28327
28328         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};
28329
28330         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"}};
28331
28332         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:"繁體"}}};
28333
28334         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"};
28335
28336         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"}]}]}];
28337
28338         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"]};
28339
28340         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:{single:"Make this feature circular.",multiple:"Make these features circular."},key:"O",annotation:{single:"Made a feature circular.",multiple:"Made features circular."},multiple_blockers:{multiple:"These can't be made circular for multiple reasons."},not_closed:{single:"This can't be made circular because it's not a loop.",multiple:"These can't be made circular because they aren't loops."},too_large:{single:"This can't be made circular because not enough of it is currently visible.",multiple:"These can't be made circular because not enough of them are currently visible."},connected_to_hidden:{single:"This can't be made circular because it is connected to a hidden feature.",multiple:"These can't be made circular because some are connected to hidden features."},not_downloaded:{single:"This can't be made circular because parts of it have not yet been downloaded.",multiple:"These can't be made circular because parts of them have not yet been downloaded."},already_circular:{single:"This can't be made more circular than it already is.",multiple:"These can't be made more circular than they already are."}},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",fields:"Fields",tags_count:"Tags ({count})",members_count:"Members ({count})",relations_count:"Relations ({count})",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",edit_features:"Edit features",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/develop/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:"Services"},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_combo:{label:"Type"},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_parking:{label:"Total Spaces",placeholder:"10, 20, 30..."},capacity:{label:"Capacity",terms:"",placeholder:"50, 100, 200..."},"capacity/disabled_parking":{label:"Accessible Spaces",placeholder:"1, 2, 3..."},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",placeholder:"YYYY-MM-DD"},circumference:{label:"Circumference",terms:"",placeholder:"1 m, 20 cm, 30 in…"},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"}},depth:{label:"Depth (Meters)"},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)",terms:"",placeholder:"45, 90, 180, 270"},dispensing:{label:"Dispenses Prescriptions"},display:{label:"Display"},distance:{label:"Distance",terms:"length,mileage"},"disused/railway":{label:"Type"},"disused/shop":{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"},ele_node:{label:"Elevation",terms:"altitude,height"},ele:{label:"Elevation",terms:"altitude,height"},electrified:{label:"Electrification",terms:"contact line,powered,third rail",placeholder:"Contact Line, Electrified Rail...",options:{contact_line:"Contact Line",rail:"Electrified Rail",yes:"Yes (unspecified)",no:"No"}},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"},"garden/type":{label:"Garden Type"},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 Connection",terms:"wifi,wlan",options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},"internet_access/fee":{label:"Internet Access",terms:"wifi fee",options:{no:"Free",yes:"Paid",customers:"Customers Only"}},"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"},kneipp_water_cure_multi:{label:"Basin Types"},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"},mimics:{label:"Mimics",terms:"camoflauged,disguised,looks like,tree"},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"},"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",placeholder:"YYYY-MM-DD"},opening_hours:{label:"Hours",terms:"",placeholder:"Unknown"},"opening_hours/covid19":{label:"COVID-19 Pandemic Hours",terms:"coronavirus,lockdown,opening hours,SARS‑CoV‑2"},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_space:{label:"Type"},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"},plots:{label:"Plots",placeholder:"10, 20, 30..."},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",placeholder:"YYYY-MM-DD"},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"},"telecom/medium":{label:"Medium"},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_combo:{label:"Type"},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 Feature"},aeroway:{name:"Aeroway Feature"},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,announcements,blackboard,bulletin board,bulletinboard,cork board,corkboard,fliers,flyers,noticeboard,pin board,pinboard,sign,whiteboard"},"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 Lift",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/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/exhibition_centre":{name:"Exposition Center",terms:"exhibition center,fair,exhibition,exposition,trade fair,trade show,trade exhibition,expo,tradeshow"},"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/kneipp_water_cure":{name:"Kneipp Water Cure",terms:""},"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:"parking spot,parking stall"},"amenity/parking_space/disabled":{name:"Accessible Parking Space",terms:"disability,disabled parking stall,handicap parking spot,wheelchair"},"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:"checkpoint,customs,international boundary,passport check,port of entry,visa"},"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/spikes":{name:"Spike Strip",terms:"one-way traffic treadles,stingers,stop sticks,tire deflation device,tire shredders,traffic spikes"},"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:"agriculture,auxilary,chicken coop,farm auxiliary,pigsty,sty"},"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:"shop building,store building"},"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:"house trailer,manufactured home,mobile home,prefabricated home,residential caravan,static caravan,trailer home"},"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"},"disused/shop":{name:"Disused Shop"},"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/mountain_rescue":{name:"Mountain Rescue",terms:"EMS,EMT,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/bicycle_foot":{name:"Cycle & Foot Crossing",terms:"bicycle and foot crosswalk,bike and pedestrian crossing,cycleway,cycling,cyclist"},"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/boardwalk":{name:"Boardwalk",terms:"pier,plank walkway,wooden raised foot path"},"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/pillory":{name:"Historic Pillory",terms:"attraction"},"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:"Garden Allotments",terms:"allotment,community garden,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:"Military 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:"Military 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:"flowers,fruits,herbs,plants,vegetables"},"leisure/garden/botanical":{name:"Botanical Garden",terms:"botanic garden,plant collection,rare plants"},"leisure/garden/community":{name:"Community Garden",terms:"co-op garden,collective garden,communal garden"},"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":{name:"Cycling Track",terms:"bicycle track,bicycling track,cycle racetrack,velodrome"},"leisure/track/horse_racing":{name:"Horse Racing Track",terms:"equestrian race track,horse race betting,horseracing,horsetrack,horse racetrack"},"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/trampoline_park":{name:"Trampoline Park",terms:"bounce,jump,spring"},"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:"Groin",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:"Military 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/shrub":{name:"Shrub",terms:"bush,scrub"},"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,r&d,rnd"},"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":{name:"Power Cable"},"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 Track",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 Track",terms:"light rail,streetcar,trolley"},"railway/milestone":{name:"Railway Milestone",terms:"milestone,marker"},"railway/miniature":{name:"Miniature Train Track",terms:"rideable miniature railway,narrow gauge railway,minimum gauge railway"},"railway/monorail":{name:"Monorail Track",terms:""},"railway/monorail/hanging":{name:"Hanging Monorail Track",terms:"suspension railway"},"railway/narrow_gauge":{name:"Narrow Gauge Track",terms:"narrow gauge railway,narrow gauge railroad"},"railway/preserved":{name:"Heritage Railway Track",terms:"historic train,preserved rail,steam train,tourist train"},"railway/rail":{name:"Train Track",terms:"permanent way,rail line,railroad track,railway track,track,train track"},"railway/rail/highspeed":{name:"High-Speed Train Track",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 Track",terms:"metro,transit,underground railway"},"railway/switch":{name:"Railway Switch",terms:"switch,points"},"railway/train_wash":{name:"Train Wash",terms:"wash,clean"},"railway/tram":{name:"Tram Track",terms:"electric street railway,light rail,streetcar,tramway,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/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:"auto mechanic,automechanic,automobile,automotive,garage,inspection,oil change,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 Store",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/household_linen":{name:"Household Linen Shop",terms:"bedspreads,blankets,domestic cloths,curtains,handkerchieves,napkins,pillow cases,robes,sheets,towels"},"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"},"telecom/exchange":{name:"Telecom Exchange",terms:"telecommunications,telephone exchange,telephone switch"},"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/route/trolleybus":{name:"Trolleybus 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"},"gothenburg-ortho":{attribution:{text:"© Gothenburg municipality, CC0"},description:"Orthophoto for Gothenburg municipality",name:"Gothenburg Orthophoto"},"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"},"tf-outdoors":{attribution:{text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},name:"Thunderforest Outdoors"},"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"},"wroclaw-orto2018":{attribution:{text:"Urząd Miasta Wrocław"},name:"Wrocław: Orthophotomap 2018 (aerial image)"}},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}"},"Galicia-Xeoinquedos-Twitter":{name:"Geoinquetos on 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-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-slack":{name:"OpenStreetMap Japan Slack",description:"A Slack workspace for the OSM Japan community {signupUrl}"},"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-mv-mailinglist":{name:"Mecklenburg-Vorpommern Mailing List",description:"This is the mailing list for the OSM community of Mecklenburg-Vorpommern"},"de-mv-twitter":{name:"OpenStreetMap Mecklenburg-Vorpommern Twitter",description:"Follow us on Twitter: {url}"},"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-35-wiki":{name:"OpenStreetMap Rennes Wiki page",description:"Wiki page of Rennes OSM local group"},"fr-bzh-mailinglist":{name:"Talk-fr-bzh Mailing List",description:"Talk-fr-bzh mailing list"},"fr-bzh-twitter":{name:"OSM-BZH on Twitter",description:"OpenStreetMap BZH on Twitter: {url}"},"fr-bzh-website":{name:"OpenStreetMap BZH Website",description:"The map which speaks Breton"},"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."},"gr-forum":{name:"OpenStreetMap GR forum",description:"OpenStreetMap Greece web forum"},"gr-mailinglist":{name:"Talk-gr Mailing List",description:"Talk-gr is the official mailing list for the Greek OSM community"},"gr-matrix":{name:"OpenStreetMap Greece Matrix",description:"Join #osm-gr:matrix.org at https://riot.im/app/#/room/%23osm-gr:matrix.org"},"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-forum":{name:"OSM Croaria Forum",description:"OpenStreetMap Croatia Forum"},"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"},"hr-wiki":{name:"OpenStreetMap Wikiproject Croatia",description:"Wikiproject page for Croatia"},"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-hr":{name:"OpenStreetMap Croatia",description:"The platform for information on OpenStreetMap in Croatia"},"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-africa":{name:"Talk-africa Mailing List",description:"Talk-africa is the official mailing list for the African OSM community."},"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-tz":{name:"Talk-tz Mailing List",description:"Talk-tz is the official mailing list for the Tanzanian OSM community."},"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."}}};
28341
28342         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:"fr-35.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.02722,48.31973],[-1.07666,48.26674],[-1.00525,47.99176],[-1.13159,47.94946],[-1.25519,47.76148],[-1.4447,47.82238],[-1.65894,47.70422],[-2.01599,47.64133],[-2.12036,47.55058],[-2.22198,47.65799],[-2.18079,47.95682],[-2.31812,47.99911],[-2.33734,48.17891],[-2.16156,48.32887],[-2.1698,48.64924],[-1.89514,48.75438],[-1.5271,48.64017],[-1.41724,48.46199],[-1.26617,48.56207],[-1.05743,48.53116],[-1.02722,48.31973]]]}},{type:"Feature",id:"fr-bzh-historique.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-1.04919,48.50751],[-1.05194,48.49113],[-1.0437,48.3526],[-1.09039,48.25943],[-1.01074,48.01749],[-1.25244,47.78548],[-1.00799,47.61172],[-0.91187,47.37417],[-1.32385,47.34813],[-1.08215,47.26618],[-1.04919,47.01397],[-1.36505,47.0589],[-1.41724,46.96338],[-1.71387,46.87709],[-2.27417,47.11874],[-3.35083,47.08322],[-3.7738,47.46709],[-5.31189,47.77071],[-5.50415,48.55116],[-4.82849,48.8882],[-3.51013,49.02166],[-2.13684,48.91708],[-1.57104,48.68189],[-1.42822,48.47838],[-1.26343,48.56207],[-1.04919,48.50751]]]}},{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-mecklenburg-vorpommern.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[10.94238,54.01745],[12.09045,54.46365],[13.83179,54.95239],[14.34814,53.42263],[13.74939,53.48805],[12.89246,53.18958],[12.09045,53.35055],[11.48621,53.11711],[10.61829,53.38005],[10.94238,53.68695],[10.75562,53.77469],[10.94238,54.01745]]]}},{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:"ireland.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[-5,54.4],[-5.372,53.633],[-5.79,52.05],[-9.19,50.9],[-11.15,51.23],[-11,54.14],[-7.88,55.94],[-6.1,55.5],[-5,54.4]]]}},{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:"ukraine.geojson",properties:{},geometry:{type:"Polygon",coordinates:[[[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]]]}},{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],[-0.37,53.85]]]}},{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],[-53.8,-26.3]]]}},{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]]]}}];
28343
28344         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/osmgalicia"},"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"},"Galicia-Xeoinquedos-Twitter":{id:"Galicia-Xeoinquedos-Twitter",type:"twitter",locationSet:{include:["galicia.geojson"]},languageCodes:["es","gl"],name:"Geoinquetos on Twitter",description:"Follow us on Twitter at {url}",url:"https://twitter.com/xeoinquedos"},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-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-slack":{id:"OSM-japan-slack",type:"slack",locationSet:{include:["jp"]},languageCodes:["ja"],name:"OpenStreetMap Japan Slack",description:"A Slack workspace for the OSM Japan community {signupUrl}",url:"osm-japan.slack.com",signupUrl:"https://join.slack.com/t/osm-japan/shared_invite/zt-d0my5ek2-SRxGCIsPPIyaOWkJOZ4EMg",contacts:[{name:"OSMF Japan",email:"info@osmf.jp"}]},"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-mv-mailinglist":{id:"de-mv-mailinglist",type:"mailinglist",locationSet:{include:["de-mecklenburg-vorpommern.geojson"]},languageCodes:["de"],name:"Mecklenburg-Vorpommern Mailing List",description:"This is the mailing list for the OSM community of Mecklenburg-Vorpommern",url:"https://lists.openstreetmap.de/listinfo/meckpomm",contacts:[{name:"FOSSGIS e.V.",email:"info@fossgis.de"}],order:-3},"de-mv-twitter":{id:"de-mv-twitter",type:"twitter",locationSet:{include:["de-mecklenburg-vorpommern.geojson"]},languageCodes:["de"],name:"OpenStreetMap Mecklenburg-Vorpommern Twitter",description:"Follow us on Twitter: {url}",url:"https://twitter.com/osmmv"},"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-35-wiki":{id:"fr-35-wiki",type:"osm",locationSet:{include:["fr-35.geojson"]},languageCodes:["fr"],name:"OpenStreetMap Rennes Wiki page",description:"Wiki page of Rennes OSM local group",url:"https://wiki.openstreetmap.org/wiki/Rennes",order:8},"fr-bzh-mailinglist":{id:"fr-bzh-mailinglist",type:"mailinglist",locationSet:{include:["fr-bzh-historique.geojson"]},languageCodes:["br","fr"],name:"Talk-fr-bzh Mailing List",description:"Talk-fr-bzh mailing list",url:"https://lists.openstreetmap.org/listinfo/talk-fr-bzh",order:3},"fr-bzh-twitter":{id:"fr-bzh-twitter",type:"twitter",locationSet:{include:["fr-bzh-historique.geojson"]},languageCodes:["br","fr"],name:"OSM-BZH on Twitter",description:"OpenStreetMap BZH on Twitter: {url}",url:"https://twitter.com/osm_bzh",order:6},"fr-bzh-website":{id:"fr-bzh-website",type:"osm",locationSet:{include:["fr-bzh-historique.geojson"]},languageCodes:["br","fr"],name:"OpenStreetMap BZH Website",description:"The map which speaks Breton",url:"https://www.openstreetmap.bzh/"},"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"}]},"gr-forum":{id:"gr-forum",type:"forum",locationSet:{include:["gr"]},languageCodes:["el"],name:"OpenStreetMap GR forum",description:"OpenStreetMap Greece web forum",url:"https://forum.openstreetmap.org/viewforum.php?id=27",order:1},"gr-mailinglist":{id:"gr-mailinglist",type:"mailinglist",locationSet:{include:["gr"]},languageCodes:["el"],name:"Talk-gr Mailing List",description:"Talk-gr is the official mailing list for the Greek OSM community",url:"https://lists.openstreetmap.org/listinfo/talk-gr",order:3},"gr-matrix":{id:"gr-matrix",type:"matrix",locationSet:{include:["gr"]},languageCodes:["el"],name:"OpenStreetMap Greece Matrix",description:"Join #osm-gr:matrix.org at https://riot.im/app/#/room/%23osm-gr:matrix.org",url:"https://riot.im/app/#/room/%23osm-gr:matrix.org",order:2},"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-forum":{id:"hr-forum",type:"forum",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OSM Croaria Forum",description:"OpenStreetMap Croatia Forum",url:"https://forum.openstreetmap.org/viewforum.php?id=51",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:-2},"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},"hr-wiki":{id:"hr-wiki",type:"wiki",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OpenStreetMap Wikiproject Croatia",description:"Wikiproject page for Croatia",url:"https://wiki.openstreetmap.org/wiki/Croatia",order:1},"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:["ireland.geojson"]},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:["ireland.geojson"]},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:["ireland.geojson"]},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:["ireland.geojson"]},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:["ireland.geojson"]},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:["ireland.geojson"]},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-hr":{id:"osm-hr",type:"osm",locationSet:{include:["hr"]},languageCodes:["hr"],name:"OpenStreetMap Croatia",description:"The platform for information on OpenStreetMap in Croatia",url:"https://osm-hr.org/",contacts:[{name:"OpenStreetMap Croatia",email:"info@osm-hr.org"}],order:3},"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-africa":{id:"talk-africa",type:"mailinglist",locationSet:{include:["002"]},languageCodes:["en","fr"],name:"Talk-africa Mailing List",description:"Talk-africa is the official mailing list for the African OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-africa",order:-3},"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-tz":{id:"talk-tz",type:"mailinglist",locationSet:{include:["tz"]},languageCodes:["en"],name:"Talk-tz Mailing List",description:"Talk-tz is the official mailing list for the Tanzanian OSM community.",url:"https://lists.openstreetmap.org/listinfo/talk-tz"},"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:["ukraine.geojson"]},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:["ukraine.geojson"]},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:["ukraine.geojson"]},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:["ukraine.geojson"]},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:["ukraine.geojson"]},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:["ukraine.geojson"]},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:["ukraine.geojson"]},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:"https://masonmappers.weebly.com",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"}]}};
28345
28346         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/46b53084a82973a36c0f57a1d5446c605d00ed851f11a6f5ca7c75db/{zoom}/{x}/{y}.jpg",endDate:"2020-02-06T00:00:00.000Z",startDate:"2020-01-08T00:00:00.000Z",zoomExtent:[14,22],polygon:[[[138.94746,-35.00283],[138.92407,-34.99305],[138.92517,-34.99001],[138.92695,-34.98968],[138.93336,-34.99052],[138.93811,-34.98634],[138.93688,-34.98205],[138.9365,-34.97941],[138.92935,-34.97259],[138.91302,-34.97015],[138.89699,-34.97178],[138.89712,-34.96186],[138.90229,-34.96106],[138.9154,-34.96132],[138.93356,-34.96413],[138.93841,-34.96659],[138.94461,-34.97268],[138.94909,-34.98091],[138.94935,-34.98242],[138.94858,-34.98799],[138.94491,-34.99168],[138.94645,-34.99515],[138.94748,-34.99817],[138.94684,-34.99989],[138.94746,-35.00283]],[[136.80219,-35.83855],[136.87205,-35.82317],[136.85377,-35.77702],[136.78811,-35.79025],[136.80219,-35.83855]],[[136.95745,-35.71934],[137.00204,-35.71903],[137.00187,-35.74846],[136.9575,-35.74871],[136.95745,-35.71934]],[[138.86929,-34.9703],[138.85127,-34.96485],[138.85981,-34.95272],[138.86187,-34.94748],[138.85504,-34.94751],[138.85414,-34.94428],[138.85564,-34.94002],[138.85749,-34.89269],[138.85105,-34.8917],[138.84886,-34.88755],[138.85049,-34.87653],[138.85547,-34.87294],[138.85972,-34.8747],[138.8838,-34.85167],[138.88654,-34.84625],[138.89787,-34.83864],[138.90512,-34.83998],[138.90547,-34.8299],[138.91083,-34.82624],[138.92276,-34.82783],[138.92186,-34.85297],[138.91723,-34.85319],[138.91568,-34.87945],[138.91384,-34.886],[138.90083,-34.88688],[138.89946,-34.8922],[138.87517,-34.89322],[138.87573,-34.91212],[138.87405,-34.92465],[138.88032,-34.9213],[138.88195,-34.91817],[138.89216,-34.92194],[138.87929,-34.94783],[138.87324,-34.96383],[138.86929,-34.9703]],[[136.57493,-35.92881],[136.57699,-35.93493],[136.57836,-35.94186],[136.5801,-35.94541],[136.58881,-35.94872],[136.5925,-35.94855],[136.59795,-35.94671],[136.59999,-35.94138],[136.60649,-35.94315],[136.61422,-35.93886],[136.6137,-35.93333],[136.64409,-35.91311],[136.64975,-35.91446],[136.65409,-35.91446],[136.65507,-35.91196],[136.65512,-35.90535],[136.64975,-35.89725],[136.63774,-35.89385],[136.6213,-35.89691],[136.61645,-35.89976],[136.6137,-35.90459],[136.57493,-35.92881]],[[137.46304,-35.73005],[137.46169,-35.71908],[137.46353,-35.71788],[137.46478,-35.7114],[137.47006,-35.70903],[137.47924,-35.708],[137.49261,-35.70345],[137.49263,-35.70826],[137.49598,-35.70741],[137.49799,-35.7153],[137.46304,-35.73005]],[[136.63555,-35.9581],[136.63593,-35.96252],[136.64666,-35.96429],[136.67765,-35.96283],[136.69859,-35.96338],[136.72224,-35.96213],[136.74356,-35.96245],[136.74417,-35.96338],[136.75352,-35.96318],[136.75408,-35.96199],[136.76691,-35.96182],[136.76674,-35.95661],[136.76446,-35.95414],[136.75979,-35.95529],[136.75635,-35.95508],[136.75356,-35.95331],[136.75283,-35.94977],[136.75052,-35.94827],[136.74631,-35.94938],[136.7179,-35.94928],[136.70769,-35.94886],[136.70533,-35.94994],[136.7037,-35.9515],[136.70318,-35.95355],[136.69704,-35.95515],[136.68486,-35.95543],[136.6831,-35.95772],[136.67263,-35.95734],[136.65314,-35.95817],[136.65061,-35.95897],[136.64366,-35.95814],[136.63555,-35.9581]]],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",description:"5 cm resolution bald image"},{id:"Budapest_XI_2019",name:"Budapest district XI orthophoto 2019",type:"wms",template:"https://terinfo.ujbuda.hu/mapproxy/service?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto_2019&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",polygon:[[[19.04767,47.48789],[19.05157,47.4899],[19.06434,47.4792],[19.0665,47.47632],[19.06766,47.47343],[19.06837,47.47077],[19.06846,47.46876],[19.06722,47.46501],[19.05683,47.45259],[19.0549,47.44906],[19.05176,47.43499],[19.04863,47.429],[19.04384,47.42968],[19.04023,47.42932],[19.03509,47.43818],[19.03221,47.43779],[19.0252,47.442],[19.0207,47.44576],[19.01915,47.44658],[19.01545,47.44759],[19.01347,47.44361],[19.01266,47.44271],[19.01178,47.44247],[19.0119,47.44188],[19.0098,47.43944],[19.0057,47.43111],[19.00046,47.43097],[18.99534,47.42821],[18.97545,47.42818],[18.97343,47.42904],[18.97361,47.42998],[18.97548,47.43067],[18.97719,47.43402],[18.97823,47.43817],[18.97733,47.44657],[18.97004,47.44988],[18.96861,47.45142],[18.97568,47.45506],[18.97586,47.45556],[18.97625,47.45584],[18.97658,47.45594],[18.97763,47.45597],[18.98017,47.45605],[18.98162,47.46067],[18.97793,47.46857],[18.96867,47.47643],[18.97745,47.48194],[18.98035,47.48169],[18.98565,47.4782],[18.98907,47.47838],[18.99117,47.47898],[18.99177,47.48102],[18.99288,47.48182],[18.99836,47.48238],[18.99902,47.483],[19.004,47.48189],[19.00416,47.48399],[19.01027,47.48535],[19.01237,47.48404],[19.0138,47.48351],[19.01674,47.48465],[19.0163,47.48539],[19.01689,47.48595],[19.01808,47.48605],[19.02108,47.48492],[19.02124,47.48612],[19.02301,47.48741],[19.02637,47.48885],[19.02995,47.48904],[19.03135,47.48855],[19.03189,47.48759],[19.03286,47.48712],[19.03364,47.48702],[19.03514,47.48725],[19.03585,47.48729],[19.03616,47.48751],[19.03665,47.48767],[19.03748,47.48774],[19.03847,47.48737],[19.03918,47.48679],[19.04105,47.48649],[19.04181,47.48737],[19.04387,47.4881],[19.04542,47.48817],[19.04695,47.4881],[19.04767,47.48789]]],terms_url:"http://terinfo.ujbuda.hu",terms_text:"Budapest XI. kerület önkormányzata",best:true,description:"5 cm resolution bald image"},{id:"Cadastre",name:"Cadastre",type:"tms",template:"https://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/public_DPB_PB_OPV.fcgi?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=DPB_UCINNE,DPB_UCINNE_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-s-e",name:"dgu.hr: Croatia 2017 South+East 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-w",name:"dgu.hr: Croatia 2018 West 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:"Frankfurt-am-Main-2016",name:"Frankfurt am Main Luftbild 2016",type:"wms",template:"https://geoportal.frankfurt.de/opendata/luftbild-2016.exe?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=luftbild_10m,luftbild_1m,luftbild_20cm,luftbild_2m,luftbild_50cm,luftbild_5m&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-05-06T00:00:00.000Z",startDate:"2016-05-06T00:00:00.000Z",polygon:[[[8.46964,50.01111],[8.46964,50.228],[8.83185,50.228],[8.83185,50.01111],[8.46964,50.01111]]],terms_url:"http://offenedaten.frankfurt.de/dataset/wms-luftbild-2016",terms_text:"Stadtvermessungsam Frankfurt am Main",description:"aerial imagery of Frankfurt am Main, photographed on 2016-05-06"},{id:"Frankfurt-am-Main-2017",name:"Frankfurt am Main Luftbild 2017",type:"wms",template:"https://geoportal.frankfurt.de/opendata/luftbild-2017.exe?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=wms_opendata_luftbilder_2017&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2016-05-06T00:00:00.000Z",startDate:"2016-05-06T00:00:00.000Z",polygon:[[[8.46964,50.01111],[8.46964,50.228],[8.83185,50.228],[8.83185,50.01111],[8.46964,50.01111]]],terms_url:"https://offenedaten.frankfurt.de/dataset/wms-luftbild-2017",terms_text:"Stadtvermessungsam Frankfurt am Main",description:"aerial imagery of Frankfurt am Main, photographed on 11.06.2017 and 06.07.2017"},{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:"https://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:"https://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",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:"gothenburg-ortho",name:"Gothenburg Orthophoto",type:"wms",template:"https://opengeodata.goteborg.se/services/ortofoto.wms.v1/ows?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=orto&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",zoomExtent:[6,20],polygon:[[[11.71898,57.54716],[12.01767,57.56411],[11.95862,57.66818],[12.09595,57.68177],[12.06574,57.73166],[12.1138,57.77086],[12.24289,57.79466],[12.16187,57.86704],[11.95519,57.86631],[11.68534,57.72396],[11.71898,57.54716]]],terms_url:"https://catalog.goteborg.se/catalog/6/datasets/892",terms_text:"© Gothenburg municipality, CC0",best:true,description:"Orthophoto for Gothenburg municipality",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-sogis2018-dsm-wms",name:"Kanton Solothurn, DSM Relief 2018",type:"wms",template:"https://geo.so.ch/api/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/jpeg&TRANSPARENT=true&LAYERS=ch.bl.agi.lidar_2018.dsm_relief&STYLES=&SRS={proj}&CRS={proj}&TILED=false&DPI=96&OPACITIES=255&t=675&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:[[[7.6909,47.56247],[7.69077,47.54008],[7.67786,47.54008],[7.67788,47.54458],[7.67138,47.5446],[7.67142,47.54897],[7.66481,47.54906],[7.66477,47.55349],[7.65816,47.55364],[7.65824,47.55801],[7.65146,47.5581],[7.65146,47.56258],[7.64503,47.56264],[7.64498,47.56707],[7.61121,47.56716],[7.61112,47.5627],[7.6046,47.56264],[7.60464,47.549],[7.61099,47.54886],[7.61117,47.54468],[7.60456,47.54468],[7.60447,47.54019],[7.59833,47.54017],[7.59846,47.54917],[7.57859,47.54915],[7.57855,47.55366],[7.57181,47.55369],[7.57185,47.56719],[7.56516,47.56719],[7.5652,47.57173],[7.54487,47.57173],[7.54478,47.56728],[7.53808,47.56725],[7.53812,47.56276],[7.52487,47.56274],[7.52491,47.55827],[7.5182,47.55825],[7.51812,47.55385],[7.49821,47.55381],[7.49817,47.54933],[7.49154,47.54935],[7.49158,47.54054],[7.48489,47.54054],[7.48487,47.53123],[7.49169,47.53123],[7.49171,47.52692],[7.48497,47.52692],[7.48495,47.51771],[7.4915,47.51769],[7.4915,47.50868],[7.49808,47.50865],[7.4981,47.49083],[7.49154,47.49085],[7.49154,47.48635],[7.4848,47.48635],[7.4848,47.48189],[7.47178,47.48192],[7.47173,47.48638],[7.46523,47.48641],[7.46523,47.49089],[7.45225,47.49096],[7.45216,47.49528],[7.4456,47.49546],[7.44551,47.49995],[7.42519,47.50003],[7.42511,47.49109],[7.41845,47.49098],[7.41843,47.47707],[7.43822,47.4771],[7.43834,47.47263],[7.44491,47.47263],[7.44495,47.46849],[7.42521,47.46849],[7.42521,47.46396],[7.4186,47.46399],[7.41848,47.45496],[7.41204,47.45491],[7.41187,47.44594],[7.40517,47.446],[7.40513,47.44144],[7.39873,47.44147],[7.39856,47.43697],[7.38586,47.43688],[7.38577,47.44135],[7.35256,47.44144],[7.35256,47.44588],[7.33943,47.44594],[7.33943,47.4505],[7.32582,47.45041],[7.32569,47.44585],[7.31921,47.44585],[7.31908,47.44144],[7.31243,47.44135],[7.31243,47.43212],[7.31904,47.43209],[7.31904,47.42318],[7.3323,47.42309],[7.3323,47.41859],[7.33887,47.41856],[7.33895,47.41415],[7.34556,47.41409],[7.34569,47.40959],[7.35882,47.40962],[7.35891,47.40518],[7.37856,47.40512],[7.37856,47.39617],[7.392,47.39611],[7.392,47.39167],[7.39856,47.39161],[7.39865,47.38713],[7.40517,47.38713],[7.40517,47.38298],[7.39865,47.3831],[7.39861,47.37819],[7.40513,47.37813],[7.40517,47.37371],[7.45143,47.37371],[7.45156,47.36906],[7.5177,47.36918],[7.5177,47.36022],[7.531,47.36016],[7.531,47.34673],[7.54422,47.34662],[7.54417,47.3422],[7.55078,47.34214],[7.55078,47.33775],[7.55761,47.33776],[7.55763,47.33327],[7.56423,47.33325],[7.56422,47.32874],[7.5774,47.32872],[7.57744,47.32421],[7.59086,47.32418],[7.59088,47.32871],[7.61739,47.32858],[7.61743,47.33312],[7.68961,47.33295],[7.68961,47.3285],[7.69627,47.32835],[7.69644,47.32393],[7.7165,47.3238],[7.71661,47.32835],[7.72322,47.32838],[7.72326,47.33289],[7.72978,47.33283],[7.72991,47.33734],[7.75596,47.33725],[7.756,47.33272],[7.80289,47.33258],[7.8031,47.35061],[7.80971,47.3507],[7.80971,47.35503],[7.82945,47.35492],[7.82958,47.3596],[7.84276,47.35945],[7.8428,47.36838],[7.85602,47.36835],[7.85619,47.37285],[7.87606,47.37282],[7.87606,47.37727],[7.88932,47.37727],[7.88954,47.39517],[7.9022,47.39523],[7.9022,47.39067],[7.91584,47.39061],[7.91597,47.39511],[7.93571,47.39502],[7.93584,47.39955],[7.94254,47.39964],[7.94262,47.40397],[7.94923,47.40406],[7.94919,47.4085],[7.96241,47.4085],[7.96245,47.41294],[7.96897,47.41294],[7.96906,47.42183],[7.98906,47.42174],[7.98931,47.44909],[7.9827,47.44915],[7.98275,47.45808],[7.97627,47.45811],[7.97618,47.46264],[7.96962,47.46273],[7.96949,47.46717],[7.9564,47.46737],[7.95644,47.48967],[7.94996,47.48973],[7.94987,47.49417],[7.94292,47.4942],[7.94292,47.48979],[7.91683,47.48993],[7.91674,47.49884],[7.91022,47.49895],[7.91026,47.50791],[7.90374,47.50797],[7.9037,47.5124],[7.89048,47.51237],[7.89044,47.51701],[7.88374,47.51707],[7.88378,47.5304],[7.87055,47.53047],[7.87052,47.53491],[7.86393,47.53496],[7.86391,47.53943],[7.85734,47.53948],[7.85737,47.54405],[7.84396,47.54406],[7.84379,47.53963],[7.82381,47.5396],[7.8237,47.51716],[7.81669,47.51726],[7.81658,47.51275],[7.80358,47.51277],[7.80349,47.50826],[7.79718,47.50829],[7.79729,47.52626],[7.78399,47.52632],[7.78403,47.53082],[7.76416,47.53089],[7.76427,47.55335],[7.751,47.55339],[7.75103,47.55786],[7.70448,47.55796],[7.70448,47.56244],[7.6909,47.56247]]],terms_text:"Kanton Solothurn, DSM Relief 2018, WMS Solothurn (SOGIS)",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{id:"Solothurn-sogis2019-dsm-wms",name:"Kanton Solothurn, DSM Relief 2019",type:"wms",template:"https://geo.so.ch/api/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/jpeg&TRANSPARENT=true&LAYERS=ch.so.agi.lidar_2019.dsm_relief&STYLES=&SRS={proj}&CRS={proj}&TILED=false&DPI=96&OPACITIES=255&t=675&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[7.96884,47.4311],[7.96882,47.42646],[7.98205,47.42644],[7.98204,47.42202],[7.99533,47.42199],[7.99531,47.41748],[8.00832,47.41746],[8.0083,47.41292],[8.01506,47.41291],[8.01504,47.40836],[8.02168,47.40835],[8.02166,47.40377],[8.03466,47.40375],[8.03462,47.39481],[8.0411,47.3948],[8.041,47.36778],[8.03449,47.36779],[8.03445,47.35883],[8.02772,47.35884],[8.02771,47.35434],[8.021,47.35435],[8.02095,47.34092],[8.01415,47.34093],[8.01412,47.33199],[8.00755,47.332],[8.00754,47.32743],[7.99438,47.32746],[7.99436,47.32308],[7.98747,47.3231],[7.98745,47.31858],[7.98086,47.31859],[7.98084,47.31424],[7.95446,47.31428],[7.95444,47.30972],[7.94125,47.30975],[7.94126,47.31419],[7.9347,47.3142],[7.93475,47.32781],[7.90823,47.32786],[7.90818,47.31445],[7.90154,47.31446],[7.9015,47.30548],[7.87494,47.30553],[7.87493,47.30106],[7.86842,47.30107],[7.86839,47.29218],[7.8617,47.29219],[7.86166,47.28304],[7.85501,47.28305],[7.85496,47.26965],[7.84831,47.26966],[7.8483,47.26521],[7.84167,47.26522],[7.84165,47.26077],[7.82842,47.26079],[7.8284,47.25628],[7.79535,47.25634],[7.79533,47.2519],[7.78854,47.25191],[7.78852,47.24743],[7.78209,47.24744],[7.78211,47.25192],[7.72279,47.25202],[7.7228,47.2566],[7.71619,47.25661],[7.71623,47.26558],[7.70303,47.26561],[7.70306,47.27463],[7.69643,47.27465],[7.69645,47.27905],[7.68982,47.27906],[7.68984,47.28368],[7.67636,47.2837],[7.67634,47.27905],[7.65688,47.27908],[7.65686,47.2747],[7.60392,47.27479],[7.60387,47.26134],[7.61049,47.26133],[7.61044,47.24784],[7.61702,47.24782],[7.617,47.24319],[7.62354,47.24318],[7.62351,47.23435],[7.64994,47.23431],[7.64992,47.22978],[7.64992,47.22981],[7.65658,47.2298],[7.65652,47.2118],[7.66306,47.21178],[7.66304,47.20728],[7.66959,47.20727],[7.66958,47.20272],[7.67622,47.20271],[7.6762,47.19821],[7.68278,47.1982],[7.68275,47.1892],[7.68933,47.18919],[7.68927,47.17123],[7.70242,47.17121],[7.70241,47.16664],[7.70885,47.16663],[7.7088,47.15309],[7.70236,47.1531],[7.70234,47.14872],[7.69576,47.14873],[7.69574,47.14423],[7.68239,47.14425],[7.68241,47.14875],[7.66276,47.14879],[7.66274,47.14415],[7.59682,47.14426],[7.59681,47.13996],[7.5769,47.13999],[7.57693,47.14904],[7.57042,47.14905],[7.57045,47.15793],[7.55736,47.15795],[7.55734,47.15346],[7.53764,47.1535],[7.53759,47.13991],[7.53099,47.13993],[7.53097,47.1355],[7.52431,47.13551],[7.52426,47.12195],[7.51768,47.12197],[7.51766,47.11748],[7.50465,47.11751],[7.50463,47.11297],[7.49809,47.11298],[7.49807,47.10842],[7.48487,47.10844],[7.48486,47.10402],[7.47822,47.10403],[7.47818,47.09491],[7.4847,47.0949],[7.48465,47.08143],[7.47814,47.08144],[7.47811,47.07246],[7.46496,47.07248],[7.46494,47.06801],[7.43186,47.06807],[7.43187,47.07237],[7.42546,47.07238],[7.42553,47.09039],[7.4124,47.09041],[7.41239,47.08598],[7.37955,47.08603],[7.37956,47.09022],[7.37282,47.09023],[7.37286,47.09945],[7.36617,47.09946],[7.3662,47.10834],[7.35955,47.10835],[7.35961,47.12663],[7.36606,47.12662],[7.36608,47.13104],[7.39904,47.13098],[7.39902,47.12657],[7.41894,47.12654],[7.41896,47.1307],[7.41223,47.13072],[7.41228,47.14473],[7.41885,47.14472],[7.41887,47.14902],[7.43181,47.14899],[7.43184,47.15807],[7.43859,47.15805],[7.43861,47.16233],[7.46496,47.16228],[7.46494,47.15801],[7.47164,47.158],[7.47165,47.16227],[7.478,47.16226],[7.47801,47.16695],[7.47148,47.16696],[7.4715,47.17148],[7.46487,47.17149],[7.46489,47.17589],[7.45184,47.17591],[7.45183,47.17151],[7.43871,47.17153],[7.43869,47.16701],[7.42551,47.16703],[7.42547,47.15795],[7.41887,47.15796],[7.41885,47.15342],[7.37264,47.15349],[7.37274,47.18038],[7.3659,47.1804],[7.36592,47.18494],[7.34629,47.18498],[7.34632,47.19374],[7.33955,47.19375],[7.33958,47.20289],[7.33304,47.2029],[7.33312,47.22548],[7.35273,47.22544],[7.35275,47.22993],[7.36595,47.2299],[7.36597,47.23453],[7.37912,47.23451],[7.37913,47.23895],[7.39234,47.23892],[7.39236,47.24347],[7.4056,47.24345],[7.40565,47.25694],[7.41228,47.25693],[7.4123,47.2614],[7.42542,47.26138],[7.42543,47.26592],[7.43187,47.26591],[7.43189,47.27042],[7.4583,47.27038],[7.45832,47.27492],[7.46506,47.27491],[7.4651,47.28387],[7.47169,47.28385],[7.47171,47.28847],[7.47832,47.28846],[7.47834,47.29293],[7.49152,47.29291],[7.49154,47.29737],[7.51134,47.29734],[7.51135,47.30184],[7.53122,47.3018],[7.53125,47.31073],[7.53782,47.31072],[7.53787,47.32429],[7.55104,47.32427],[7.55106,47.32882],[7.56434,47.3288],[7.56437,47.33783],[7.57086,47.33782],[7.57087,47.3423],[7.57765,47.34229],[7.57764,47.33783],[7.59081,47.33781],[7.59083,47.34227],[7.59743,47.34226],[7.59741,47.33781],[7.60407,47.3378],[7.60409,47.34225],[7.69661,47.3421],[7.6966,47.33761],[7.70993,47.33759],[7.70995,47.34208],[7.72322,47.34206],[7.72324,47.34657],[7.73643,47.34655],[7.73645,47.35093],[7.77622,47.35087],[7.77621,47.34642],[7.78269,47.34641],[7.78272,47.35523],[7.78936,47.35522],[7.7894,47.36427],[7.79613,47.36426],[7.79615,47.36877],[7.82248,47.36873],[7.82249,47.37319],[7.82926,47.37318],[7.82929,47.38217],[7.84261,47.38215],[7.84262,47.38661],[7.86243,47.38658],[7.8625,47.40454],[7.86917,47.40453],[7.86919,47.40901],[7.87587,47.409],[7.87589,47.41351],[7.90231,47.41347],[7.90229,47.4089],[7.92225,47.40887],[7.92228,47.4177],[7.93556,47.41768],[7.93558,47.42211],[7.94882,47.42209],[7.94884,47.42664],[7.95552,47.42663],[7.95553,47.43112],[7.96884,47.4311]]],terms_text:"Kanton Solothurn, DSM Relief 2019, WMS Solothurn (SOGIS)",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{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:"Solothurn-sogis2019-dtm-wms",name:"Kanton Solothurn, DTM Relief 2019",type:"wms",template:"https://geo.so.ch/api/wms?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/jpeg&TRANSPARENT=true&LAYERS=ch.so.agi.lidar_2019.dtm_relief&STYLES=&SRS={proj}&CRS={proj}&TILED=false&DPI=96&OPACITIES=255&t=675&WIDTH={width}&HEIGHT={height}&BBOX={bbox}",projection:"EPSG:3857",endDate:"2019-01-01T00:00:00.000Z",startDate:"2019-01-01T00:00:00.000Z",zoomExtent:[8,22],polygon:[[[7.96884,47.4311],[7.96882,47.42646],[7.98205,47.42644],[7.98204,47.42202],[7.99533,47.42199],[7.99531,47.41748],[8.00832,47.41746],[8.0083,47.41292],[8.01506,47.41291],[8.01504,47.40836],[8.02168,47.40835],[8.02166,47.40377],[8.03466,47.40375],[8.03462,47.39481],[8.0411,47.3948],[8.041,47.36778],[8.03449,47.36779],[8.03445,47.35883],[8.02772,47.35884],[8.02771,47.35434],[8.021,47.35435],[8.02095,47.34092],[8.01415,47.34093],[8.01412,47.33199],[8.00755,47.332],[8.00754,47.32743],[7.99438,47.32746],[7.99436,47.32308],[7.98747,47.3231],[7.98745,47.31858],[7.98086,47.31859],[7.98084,47.31424],[7.95446,47.31428],[7.95444,47.30972],[7.94125,47.30975],[7.94126,47.31419],[7.9347,47.3142],[7.93475,47.32781],[7.90823,47.32786],[7.90818,47.31445],[7.90154,47.31446],[7.9015,47.30548],[7.87494,47.30553],[7.87493,47.30106],[7.86842,47.30107],[7.86839,47.29218],[7.8617,47.29219],[7.86166,47.28304],[7.85501,47.28305],[7.85496,47.26965],[7.84831,47.26966],[7.8483,47.26521],[7.84167,47.26522],[7.84165,47.26077],[7.82842,47.26079],[7.8284,47.25628],[7.79535,47.25634],[7.79533,47.2519],[7.78854,47.25191],[7.78852,47.24743],[7.78209,47.24744],[7.78211,47.25192],[7.72279,47.25202],[7.7228,47.2566],[7.71619,47.25661],[7.71623,47.26558],[7.70303,47.26561],[7.70306,47.27463],[7.69643,47.27465],[7.69645,47.27905],[7.68982,47.27906],[7.68984,47.28368],[7.67636,47.2837],[7.67634,47.27905],[7.65688,47.27908],[7.65686,47.2747],[7.60392,47.27479],[7.60387,47.26134],[7.61049,47.26133],[7.61044,47.24784],[7.61702,47.24782],[7.617,47.24319],[7.62354,47.24318],[7.62351,47.23435],[7.64994,47.23431],[7.64992,47.22978],[7.64992,47.22981],[7.65658,47.2298],[7.65652,47.2118],[7.66306,47.21178],[7.66304,47.20728],[7.66959,47.20727],[7.66958,47.20272],[7.67622,47.20271],[7.6762,47.19821],[7.68278,47.1982],[7.68275,47.1892],[7.68933,47.18919],[7.68927,47.17123],[7.70242,47.17121],[7.70241,47.16664],[7.70885,47.16663],[7.7088,47.15309],[7.70236,47.1531],[7.70234,47.14872],[7.69576,47.14873],[7.69574,47.14423],[7.68239,47.14425],[7.68241,47.14875],[7.66276,47.14879],[7.66274,47.14415],[7.59682,47.14426],[7.59681,47.13996],[7.5769,47.13999],[7.57693,47.14904],[7.57042,47.14905],[7.57045,47.15793],[7.55736,47.15795],[7.55734,47.15346],[7.53764,47.1535],[7.53759,47.13991],[7.53099,47.13993],[7.53097,47.1355],[7.52431,47.13551],[7.52426,47.12195],[7.51768,47.12197],[7.51766,47.11748],[7.50465,47.11751],[7.50463,47.11297],[7.49809,47.11298],[7.49807,47.10842],[7.48487,47.10844],[7.48486,47.10402],[7.47822,47.10403],[7.47818,47.09491],[7.4847,47.0949],[7.48465,47.08143],[7.47814,47.08144],[7.47811,47.07246],[7.46496,47.07248],[7.46494,47.06801],[7.43186,47.06807],[7.43187,47.07237],[7.42546,47.07238],[7.42553,47.09039],[7.4124,47.09041],[7.41239,47.08598],[7.37955,47.08603],[7.37956,47.09022],[7.37282,47.09023],[7.37286,47.09945],[7.36617,47.09946],[7.3662,47.10834],[7.35955,47.10835],[7.35961,47.12663],[7.36606,47.12662],[7.36608,47.13104],[7.39904,47.13098],[7.39902,47.12657],[7.41894,47.12654],[7.41896,47.1307],[7.41223,47.13072],[7.41228,47.14473],[7.41885,47.14472],[7.41887,47.14902],[7.43181,47.14899],[7.43184,47.15807],[7.43859,47.15805],[7.43861,47.16233],[7.46496,47.16228],[7.46494,47.15801],[7.47164,47.158],[7.47165,47.16227],[7.478,47.16226],[7.47801,47.16695],[7.47148,47.16696],[7.4715,47.17148],[7.46487,47.17149],[7.46489,47.17589],[7.45184,47.17591],[7.45183,47.17151],[7.43871,47.17153],[7.43869,47.16701],[7.42551,47.16703],[7.42547,47.15795],[7.41887,47.15796],[7.41885,47.15342],[7.37264,47.15349],[7.37274,47.18038],[7.3659,47.1804],[7.36592,47.18494],[7.34629,47.18498],[7.34632,47.19374],[7.33955,47.19375],[7.33958,47.20289],[7.33304,47.2029],[7.33312,47.22548],[7.35273,47.22544],[7.35275,47.22993],[7.36595,47.2299],[7.36597,47.23453],[7.37912,47.23451],[7.37913,47.23895],[7.39234,47.23892],[7.39236,47.24347],[7.4056,47.24345],[7.40565,47.25694],[7.41228,47.25693],[7.4123,47.2614],[7.42542,47.26138],[7.42543,47.26592],[7.43187,47.26591],[7.43189,47.27042],[7.4583,47.27038],[7.45832,47.27492],[7.46506,47.27491],[7.4651,47.28387],[7.47169,47.28385],[7.47171,47.28847],[7.47832,47.28846],[7.47834,47.29293],[7.49152,47.29291],[7.49154,47.29737],[7.51134,47.29734],[7.51135,47.30184],[7.53122,47.3018],[7.53125,47.31073],[7.53782,47.31072],[7.53787,47.32429],[7.55104,47.32427],[7.55106,47.32882],[7.56434,47.3288],[7.56437,47.33783],[7.57086,47.33782],[7.57087,47.3423],[7.57765,47.34229],[7.57764,47.33783],[7.59081,47.33781],[7.59083,47.34227],[7.59743,47.34226],[7.59741,47.33781],[7.60407,47.3378],[7.60409,47.34225],[7.69661,47.3421],[7.6966,47.33761],[7.70993,47.33759],[7.70995,47.34208],[7.72322,47.34206],[7.72324,47.34657],[7.73643,47.34655],[7.73645,47.35093],[7.77622,47.35087],[7.77621,47.34642],[7.78269,47.34641],[7.78272,47.35523],[7.78936,47.35522],[7.7894,47.36427],[7.79613,47.36426],[7.79615,47.36877],[7.82248,47.36873],[7.82249,47.37319],[7.82926,47.37318],[7.82929,47.38217],[7.84261,47.38215],[7.84262,47.38661],[7.86243,47.38658],[7.8625,47.40454],[7.86917,47.40453],[7.86919,47.40901],[7.87587,47.409],[7.87589,47.41351],[7.90231,47.41347],[7.90229,47.4089],[7.92225,47.40887],[7.92228,47.4177],[7.93556,47.41768],[7.93558,47.42211],[7.94882,47.42209],[7.94884,47.42664],[7.95552,47.42663],[7.95553,47.43112],[7.96884,47.4311]]],terms_text:"Kanton Solothurn, DTM Relief 2019, WMS Solothurn (SOGIS)",icon:"https://osmlab.github.io/editor-layer-index/sources/europe/ch/KantonSolothurn-SOGIS-wms.png"},{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:"openrailwaymap-maxspeeds",name:"OpenRailwayMap Maxspeeds",type:"tms",template:"https://{switch:a,b,c}.tiles.openrailwaymap.org/maxspeed/{zoom}/{x}/{y}.png",zoomExtent:[0,20],terms_url:"https://www.openrailwaymap.org/",terms_text:"Rendering: OpenRailwayMap, © Map data OpenStreetMap contributors",description:"Overlay imagery showing railway speed limits based on OpenStreetMap data",icon:"https://www.openrailwaymap.org/img/openrailwaymap-64.png",overlay:true},{id:"openrailwaymap-signalling",name:"OpenRailwayMap Signalling",type:"tms",template:"https://{switch:a,b,c}.tiles.openrailwaymap.org/signals/{zoom}/{x}/{y}.png",zoomExtent:[0,20],terms_url:"https://www.openrailwaymap.org/",terms_text:"Rendering: OpenRailwayMap, © Map data OpenStreetMap contributors",description:"Overlay imagery showing railway signals based on OpenStreetMap data",icon:"https://www.openrailwaymap.org/img/openrailwaymap-64.png",overlay:true},{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:"Stuttgart-latest",name:"Stuttgart Luftbild Stadtmessungsamt 2017",type:"wms",template:"https://gis5.stuttgart.de/arcgis/services/1_Base/WMS_Luftbilder_aktuell/MapServer/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",endDate:"2017-04-21T00:00:00.000Z",startDate:"2017-04-12T00:00:00.000Z",polygon:[[[9.0262,48.88138],[9.09436,48.88137],[9.0944,48.89936],[9.10812,48.89934],[9.10813,48.92635],[9.19002,48.92621],[9.19009,48.93518],[9.2583,48.93509],[9.25825,48.92608],[9.31283,48.92595],[9.31278,48.91696],[9.35372,48.91683],[9.35337,48.87188],[9.36702,48.87183],[9.36683,48.84483],[9.38045,48.84481],[9.38021,48.80884],[9.36656,48.8089],[9.36639,48.78192],[9.42079,48.78173],[9.42012,48.70079],[9.32503,48.7011],[9.32473,48.65614],[9.27043,48.65626],[9.27034,48.63831],[9.24321,48.63835],[9.24313,48.62038],[9.18887,48.62048],[9.18889,48.62947],[9.1482,48.62953],[9.14826,48.6565],[9.1347,48.65652],[9.13473,48.66552],[9.08044,48.66555],[9.08042,48.65657],[9.02612,48.65662],[9.02612,48.64761],[8.97184,48.64761],[8.9717,48.66558],[8.91751,48.66557],[8.91751,48.68355],[8.90391,48.68353],[8.90388,48.70153],[8.91747,48.70154],[8.91744,48.71054],[8.93104,48.71053],[8.93101,48.73751],[8.99899,48.73753],[8.99899,48.74652],[9.02617,48.74653],[9.02621,48.81845],[8.99897,48.81847],[8.99898,48.82745],[8.95812,48.82745],[8.95806,48.86342],[8.97171,48.86342],[8.97171,48.87242],[9.02622,48.87241],[9.0262,48.88138]]],best:true,icon:"https://www.stuttgart.de/favicon.ico"},{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:"tf-outdoors",name:"Thunderforest Outdoors",type:"tms",template:"https://{switch:a,b,c}.tile.thunderforest.com/outdoors/{zoom}/{x}/{y}.png?apikey={apikey}",zoomExtent:[0,22],terms_url:"https://www.thunderforest.com/terms",terms_text:"Maps © Thunderforest, Data © OpenStreetMap contributors"},{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",description:"5 cm resolution bald image"},{id:"Torokbalint-orthophoto-2018",name:"Törökbálint orthophoto 2018",type:"wms",template:"https://terkep.torokbalint.hu/mapproxy/service?FORMAT=image/png&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=TBORTO_2018&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}&TRANSPARENT=true",projection:"EPSG:3857",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-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:"UkraineMykolaiv2018",name:"Ukraine - Mykolaiv 2018",type:"tms",template:"http://mbk.mkrada.gov.ua/map/rtile/carto_2013928517078615452/ua/{zoom}/{x}/{y}.png",endDate:"2018-01-01T00:00:00.000Z",startDate:"2018-01-01T00:00:00.000Z",zoomExtent:[11,21],polygon:[[[31.88301,47.01397],[31.87752,46.97838],[31.91391,46.98447],[31.91666,46.97932],[31.89468,46.95823],[31.8782,46.95026],[31.88988,46.93339],[31.90018,46.92307],[31.93176,46.91697],[31.9558,46.91228],[31.98257,46.90665],[31.99699,46.90008],[31.98532,46.87568],[31.9558,46.85127],[31.93108,46.83389],[31.91391,46.81792],[31.9455,46.81275],[32.00661,46.81322],[32.04025,46.83812],[32.08214,46.87662],[32.11235,46.90478],[32.12814,46.92917],[32.13844,46.95167],[32.13776,46.97744],[32.11647,46.99384],[32.04918,47.01163],[32.02446,47.02614],[32.03476,47.02848],[32.03957,47.03831],[32.03064,47.05328],[31.96404,47.04533],[31.88301,47.01397]]],terms_text:"Map data: © Геоінформаційна система містобудівного кадастру Миколаївської міської ради",best:true,icon:"https://mkrada.gov.ua/favicon.ico"},{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:"UkraineVinnytsia2018",name:"Ukraine - Vinnytsia 2018",type:"tms",template:"https://gisapi.vmr.gov.ua/OpenData/ofp/2018-10/GoogleMapsCompatible/{zoom}/{y}/{x}.png?ver=22102018",endDate:"2018-10-01T00:00:00.000Z",startDate:"2018-10-01T00:00:00.000Z",zoomExtent:[14,20],polygon:[[[28.46755,49.28259],[28.34945,49.2278],[28.38189,49.19354],[28.51587,49.18198],[28.57965,49.22511],[28.57853,49.25867],[28.54136,49.2818]]],terms_url:"https://www.vmr.gov.ua/",terms_text:"© Вінницька міська рада",best:true,icon:"https://www.vmr.gov.ua/_catalogs/masterpage/images/favicon.ico"},{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:"https://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:"wroclaw-orto2018",name:"Wrocław: Orthophotomap 2018 (aerial image)",type:"wms",template:"https://gis1.um.wroc.pl/arcgis/services/ogc/OGC_ortofoto_2018/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:"2018-04-07T00:00:00.000Z",startDate:"2018-04-06T00: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",best:true,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"}];
28347
28348         var presets = {aerialway:{fields:["name","aerialway"],moreFields:["layer"],geometry:["point","vertex","line"],tags:{aerialway:"*"},searchable:false,name:"Aerialway Feature"},aeroway:{icon:"maki-airport",fields:["aeroway"],geometry:["point","vertex","line","area"],tags:{aeroway:"*"},searchable:false,name:"Aeroway Feature"},amenity:{fields:["amenity"],geometry:["point","vertex","line","area"],tags:{amenity:"*"},searchable:false,name:"Amenity"},attraction:{icon:"maki-star",fields:["name","attraction","operator","opening_hours","opening_hours/covid19","fee","charge_fee"],moreFields:["address","email","fax","opening_hours","opening_hours/covid19","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:{icon:"temaki-power",geometry:["point","vertex","line","area"],tags:{power:"*"},fields:["power"],moreFields:["material"],searchable:false,name:"Power Feature"},railway:{icon:"temaki-rail_profile",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:["operator","lit","support","visibility"],moreFields:["access_simple","direction","height"],geometry:["point","vertex","line"],tags:{advertising:"billboard"},name:"Billboard"},"advertising/board":{icon:"temaki-bulletin_board",fields:["operator","lit","support","visibility"],moreFields:["access_simple","direction","height"],geometry:["point"],tags:{advertising:"board"},terms:["advertising","announcements","blackboard","bulletin board","bulletinboard","cork board","corkboard","fliers","flyers","noticeboard","pin board","pinboard","sign","whiteboard"],name:"Notice Board"},"advertising/column":{icon:"temaki-storage_tank",fields:["operator","lit","visibility"],moreFields:["access_simple","height"],geometry:["point","area"],tags:{advertising:"column"},name:"Advertising Column"},"advertising/poster_box":{icon:"temaki-poster_box",fields:["operator","lit","support","visibility"],moreFields:["access_simple","direction","height"],geometry:["point"],tags:{advertising:"poster_box"},name:"Poster Box"},"advertising/totem":{fields:["operator","lit","visibility"],moreFields:["access_simple","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:"temaki-gondola_lift",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 Lift"},"aerialway/goods":{icon:"temaki-goods_lift",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:"temaki-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:"temaki-planes",geometry:["area"],terms:["ramp"],fields:["ref","surface"],tags:{aeroway:"apron"},name:"Apron"},"aeroway/gate":{icon:"fas-plane",geometry:["point"],fields:["ref_aeroway_gate"],tags:{aeroway:"gate"},name:"Airport Gate"},"aeroway/hangar":{icon:"temaki-hangar",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","opening_hours/covid19"],terms:["helicopter","helipad","heliport"],tags:{aeroway:"helipad"},name:"Helipad"},"aeroway/holding_position":{icon:"temaki-plane_taxiing",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:"temaki-plane_taxiing",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:"temaki-plane_taxiing",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:"temaki-windsock",geometry:["point","vertex"],fields:["ref","lit","height"],moreFields:["manufacturer"],tags:{aeroway:"windsock"},name:"Windsock"},"allotments/plot":{icon:"temaki-garden_bed",geometry:["area"],fields:["name","ref"],tags:{allotments:"plot"},reference:{key:"allotments",value:"plot"},name:"Community Garden Plot"},"amenity/bus_station":{icon:"temaki-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","opening_hours/covid19","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:"temaki-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","opening_hours/covid19","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/animal_boarding":{icon:"maki-veterinary",fields:["name","operator","address","building_area","opening_hours","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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_locker",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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19"],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/exhibition_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:"exhibition_centre"},terms:["exhibition center","fair","exhibition","exposition","trade fair","trade show","trade exhibition","expo","tradeshow"],name:"Exposition Center"},"amenity/fast_food":{icon:"maki-fast-food",fields:["name","cuisine","operator","address","building_area","opening_hours","opening_hours/covid19","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","opening_hours/covid19","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:"temaki-vertical_rotisserie",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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","operator/type","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","opening_hours/covid19","payment_multi","website","wheelchair"],geometry:["area","point"],terms:["kindergarden","pre-school"],tags:{amenity:"kindergarten"},name:"Preschool / Kindergarten Grounds"},"amenity/kneipp_water_cure":{icon:"maki-hospital",fields:["kneipp_water_cure_multi","opening_hours","opening_hours/covid19","fee"],geometry:["point","area"],terms:[],tags:{amenity:"kneipp_water_cure"},reference:{key:"amenity",value:"kneipp_water_cure"},name:"Kneipp Water Cure"},"amenity/language_school":{icon:"temaki-school",fields:["name","operator","operator/type","address","building_area","opening_hours","opening_hours/covid19","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","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","opening_hours/covid19","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","opening_hours/covid19"],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"],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","opening_hours/covid19","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_parking","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","opening_hours/covid19"],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","opening_hours/covid19","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":{icon:"temaki-parking_space",fields:["parking_space","capacity"],geometry:["area","point","vertex"],tags:{amenity:"parking_space"},addTags:{amenity:"parking_space",capacity:"1"},terms:["parking spot","parking stall"],matchScore:0.95,name:"Parking Space"},"amenity/parking_space/disabled":{icon:"temaki-accessible_space",geometry:["area","point","vertex"],tags:{amenity:"parking_space",parking_space:"disabled"},addTags:{amenity:"parking_space",parking_space:"disabled",capacity:"1"},terms:["disability","disabled parking stall","handicap parking spot","wheelchair"],matchScore:0.95,name:"Accessible Parking Space"},"amenity/parking":{icon:"temaki-car_parked",fields:["operator","operator/type","parking","capacity_parking","capacity/disabled_parking","access_simple","fee","payment_multi_fee","charge_fee","surface"],moreFields:["address","covered","email","fax","maxstay","name","opening_hours","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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:"temaki-quakerism",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","opening_hours/covid19"],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:"temaki-police_officer",fields:["name","operator","address","building_area","opening_hours","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours","opening_hours/covid19","collection_times"],moreFields:["colour","covered","indoor","level","manufacturer","material","ref"],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","opening_hours/covid19","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-camper_trailer_dump",fields:["operator","access_simple","fee","payment_multi_fee","charge_fee","water_point"],moreFields:["opening_hours","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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:"temaki-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:"temaki-capitol",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","opening_hours/covid19"],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","opening_hours/covid19"],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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19"],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:"temaki-train_kids",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-bollard_row",fields:["access","bollard","height","material","colour"],geometry:["line"],tags:{barrier:"bollard"},name:"Bollard Row"},"barrier/bollard":{icon:"temaki-bollard",fields:["access","bollard","height","width","material","colour"],geometry:["point","vertex"],tags:{barrier:"bollard"},name:"Bollard"},"barrier/border_control":{icon:"temaki-passport_checkpoint",fields:["access","building_area"],moreFields:["address","email","fax","phone","website"],geometry:["vertex","area"],tags:{barrier:"border_control"},terms:["checkpoint","customs","international boundary","passport check","port of entry","visa"],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:"temaki-cycle_barrier",fields:["access"],geometry:["vertex"],tags:{barrier:"cycle_barrier"},terms:["bicycle barrier","bicycling barrier","bike gates","cycling barrier"],name:"Cycle Barrier"},"barrier/ditch":{icon:"temaki-trench",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","opening_hours/covid19","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":{icon:"temaki-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","opening_hours/covid19"],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/spikes":{icon:"temaki-spike_strip",fields:["direction_vertex","access","height","colour"],geometry:["vertex"],tags:{barrier:"spikes"},terms:["one-way traffic treadles","stingers","stop sticks","tire deflation device","tire shredders","traffic spikes"],name:"Spike Strip",matchScore:0.5},"barrier/stile":{icon:"temaki-stile_squeezer",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","opening_hours/covid19","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","ele","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:"temaki-carport",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"},terms:["agriculture","auxilary","chicken coop","farm auxiliary","pigsty","sty"],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"},terms:["shop building","store building"],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:"temaki-manufactured_home",geometry:["area"],tags:{building:"static_caravan"},terms:["house trailer","manufactured home","mobile home","prefabricated home","residential caravan","static caravan","trailer home"],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","opening_hours/covid19"],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","opening_hours/covid19"],moreFields:["air_conditioning","building/levels_building","ele","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:"temaki-catering",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-brick_trowel",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-brick_trowel",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-brick_trowel",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-scaffold",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-brick_trowel",geometry:["point","area"],terms:["masonry"],tags:{craft:"stonemason"},name:"Stonemason"},"craft/tiler":{icon:"temaki-brick_trowel",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":{icon:"temaki-rail_profile",fields:["disused/railway"],geometry:["point","vertex","line","area"],tags:{"disused:railway":"*"},matchScore:0.05,searchable:false,name:"Disused Railway Feature"},"disused/shop":{fields:["disused/shop"],geometry:["point","area"],tags:{"disused:shop":"*"},matchScore:0.05,searchable:false,name:"Disused Shop"},"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","opening_hours/covid19"],geometry:["point","area"],terms:["CPR","rescue"],tags:{emergency:"lifeguard"},name:"Lifeguard"},"emergency/mountain_rescue":{icon:"fas-ambulance",fields:["name","address","operator","building_area","email","website"],moreFields:["fax","gnis/feature_id","phone","wheelchair"],geometry:["point","area"],terms:["EMS","EMT","rescue"],tags:{emergency:"mountain_rescue"},name:"Mountain Rescue"},"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","depth","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:"temaki-golf_green",fields:["name"],geometry:["area"],tags:{golf:"green"},addTags:{golf:"green",landuse:"grass"},name:"Putting Green"},"golf/hole":{icon:"temaki-golf_green",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","opening_hours/covid19","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","opening_hours/covid19"],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:"temaki-bus",fields:["{public_transport/platform_point}"],moreFields:["{public_transport/platform_point}"],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:"temaki-bus_guided",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",fields:["name","segregated","oneway","surface","width","structure","access","incline"],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"],matchScore:0.9,name:"Cycle & Foot Path"},"highway/cycleway/crossing/bicycle_foot":{notCountryCodes:["fr","lt","pl"],icon:"temaki-ped_cyclist_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{highway:"cycleway",cycleway:"crossing",foot:"designated"},addTags:{highway:"cycleway",cycleway:"crossing",foot:"designated",bicycle:"designated"},reference:{key:"cycleway",value:"crossing"},terms:["bicycle and foot crosswalk","bike and pedestrian crossing","cycleway","cycling","cyclist"],matchScore:0.9,name:"Cycle & Foot Crossing"},"highway/cycleway/crossing/marked":{icon:"temaki-cyclist_crosswalk",fields:["crossing","access","surface","tactile_paving","crossing/island"],geometry:["line"],tags:{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:{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","opening_hours/covid19"],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_zone",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/boardwalk":{icon:"temaki-pedestrian",geometry:["line"],tags:{highway:"path",bridge:"boardwalk"},addTags:{highway:"path",bridge:"boardwalk",surface:"wood"},reference:{key:"bridge",value:"boardwalk"},terms:["pier","plank walkway","wooden raised foot path"],name:"Boardwalk"},"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"},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:"temaki-speedway_oval",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:"temaki-speedway_8",geometry:["line","area"],tags:{highway:"raceway",sport:"karting"},reference:{key:"sport",value:"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"},reference:{key:"sport",value:"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","opening_hours/covid19"],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","smoothness","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","ele_node","address","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["gnis/feature_id","opening_hours","opening_hours/covid19"],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/pillory":{icon:"maki-monument",fields:["name","building_area","access_simple","start_date"],geometry:["point","area"],tags:{historic:"pillory"},terms:["attraction"],name:"Historic Pillory"},"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","material"],moreFields:["{historic}","start_date","religion","denomination"],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","operator","plots"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"allotments"},terms:["allotment","community garden","garden"],name:"Garden Allotments"},"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","opening_hours/covid19"],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","opening_hours/covid19"],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-army_tent",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-anchor_medal",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-tire_course",geometry:["point","area"],tags:{military:"obstacle_course"},addTags:{landuse:"military",military:"obstacle_course"},terms:["army","base","force","guard","marine","navy","troop","war"],name:"Military Obstacle Course"},"landuse/military/range":{icon:"fas-bullseye",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:"Military 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:"fas-seedling",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":{icon:"temaki-pick_hammer",geometry:["area"],fields:["name","operator","resource"],moreFields:["address","email","fax","phone","website"],tags:{landuse:"quarry"},terms:[],name:"Quarry"},"landuse/railway":{icon:"temaki-train",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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19"],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","garden/type","operator","operator/type","access_simple","fee","payment_multi_fee","charge_fee"],moreFields:["email","fax","gnis/feature_id","phone","website"],geometry:["point","area"],tags:{leisure:"garden"},terms:["flowers","fruits","herbs","plants","vegetables"],name:"Garden"},"leisure/garden/botanical":{icon:"maki-garden",geometry:["point","area"],tags:{leisure:"garden","garden:type":"botanical"},reference:{key:"garden:type",value:"botanical"},terms:["botanic garden","plant collection","rare plants"],name:"Botanical Garden"},"leisure/garden/community":{icon:"maki-garden",geometry:["point","area"],tags:{leisure:"garden","garden:type":"community"},reference:{key:"garden:type",value:"community"},terms:["co-op garden","collective garden","communal garden"],name:"Community Garden"},"leisure/golf_course":{icon:"maki-golf",fields:["name","operator","address","opening_hours","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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:"temaki-golf_green",fields:["name","operator","address","opening_hours","opening_hours/covid19","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","opening_hours/covid19"],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","opening_hours/covid19"],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:["address","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:"temaki-field_hockey",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","opening_hours/covid19"],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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","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","opening_hours/covid19","operator"],geometry:["area","point"],terms:["dive","water","aquatics"],tags:{leisure:"swimming_pool"},name:"Swimming Pool"},"leisure/track":{icon:"temaki-racetrack_oval",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":{icon:"fas-biking",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["point","line","area"],tags:{leisure:"track",sport:"cycling"},reference:{key:"sport",value:"cycling"},terms:["bicycle track","bicycling track","cycle racetrack","velodrome"],name:"Cycling Track"},"leisure/track/horse_racing":{icon:"maki-horse-riding",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["point","line","area"],tags:{leisure:"track",sport:"horse_racing"},reference:{key:"sport",value:"horse_racing"},terms:["equestrian race track","horse race betting","horseracing","horsetrack","horse racetrack"],name:"Horse Racing Track"},"leisure/track/running":{icon:"maki-pitch",fields:["name","surface","sport_racing_nonmotor","lit","width","lanes"],geometry:["point","line","area"],tags:{leisure:"track",sport:"running"},reference:{key:"sport",value:"running"},terms:["athletics track","decathlon","foot race","long distance running","marathon","middle distance running","racetrack","running","sprint","track","walking"],name:"Running Track"},"leisure/trampoline_park":{icon:"fas-chevron-circle-up",fields:["name","address","building_area","opening_hours","opening_hours/covid19","phone","website"],moreFields:["brand","charge_fee","email","fax","fee","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","operator","payment_multi"],geometry:["point","area"],tags:{leisure:"trampoline_park"},terms:["bounce","jump","spring"],name:"Trampoline Park"},"leisure/water_park":{icon:"fas-swimmer",fields:["{tourism/theme_park}","sport"],moreFields:["{tourism/theme_park}"],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:"temaki-adit_profile",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_combo","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-bunker_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","ele_node","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:"Groin"},"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"],moreFields:["{man_made/mast}","mimics"],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:"temaki-mineshaft_cage",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":{icon:"temaki-telescope",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:"temaki-powered_pump",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:"temaki-benchmark_disk",fields:["ref","ele_node","inscription"],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","opening_hours/covid19"],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","mimics"],moreFields:["{man_made/tower}","mimics"],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","opening_hours/covid19"],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_combo","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:"temaki-powered_pump",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:"temaki-military_checkpoint",fields:["name"],geometry:["point","vertex","area"],tags:{military:"checkpoint"},terms:["air force","army","base","force","guard","marine","navy","troop","war"],name:"Military 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-trench",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","ele_node","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","ele_node","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:"temaki-cliff_falling_rocks",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","ele_node"],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":{icon:"temaki-shrub_low",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","ele_node"],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":{icon:"temaki-mountain_range",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:"temaki-saddle",fields:["ele_node"],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":{icon:"temaki-shrub",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/shrub":{icon:"temaki-shrub",fields:["height"],moreFields:["species/wikidata"],geometry:["point","vertex"],tags:{natural:"shrub"},terms:["bush","scrub"],name:"Shrub"},"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","height","diameter"],moreFields:["circumference","species/wikidata"],geometry:["point","vertex"],tags:{natural:"tree"},terms:[],name:"Tree"},"natural/valley":{icon:"temaki-valley",fields:["name","ele_node","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","ele_node","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","opening_hours/covid19"],moreFields:["air_conditioning","baby_feeding","building/levels_building","ele","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:"temaki-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:"temaki-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:"temaki-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","r&d","rnd"],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","opening_hours/covid19","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":{icon:"temaki-cable",fields:["name","ref","operator","voltage","location","layer"],geometry:["line"],tags:{power:"cable"},searchable:false,name:"Power Cable"},"power/cable/underground":{icon:"temaki-cable",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-power_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","ref_stop_position","network","operator","departures_board","shelter"],moreFields:["bench","bin","gnis/feature_id","level","lit","tactile_paving","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-board_transit",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:"temaki-gondola_lift",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:"temaki-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:"temaki-train",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-board_gondola_lift",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:"temaki-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-board_bus",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-board_ferry",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-board_light_rail",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-board_monorail",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-board_subway",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-board_train",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-board_tram",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-board_trolleybus",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:"temaki-gondola_lift",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:"temaki-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:"temaki-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:"temaki-rail_flag",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:"temaki-train",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:"temaki-transit",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:"temaki-gondola_lift",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:"temaki-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:"temaki-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:"temaki-train",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:"temaki-transit",fields:["name","ref_stop_position","network","operator"],moreFields:[],geometry:["vertex"],tags:{public_transport:"stop_position"},terms:["public transit","public transportation","transit","transportation"],name:"Transit Stopping Location",matchScore:0.2},"railway/halt":{icon:"temaki-rail_flag",geometry:["point","vertex"],tags:{railway:"halt"},name:"Train Station (Halt / Request)",searchable:false},"railway/platform":{icon:"temaki-board_train",fields:["{public_transport/platform}"],moreFields:["{public_transport/platform}"],geometry:["line","area"],tags:{railway:"platform"},name:"Train Platform",searchable:false},"railway/station":{icon:"temaki-train",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:"temaki-railway_track_askew",fields:["name","structure","service_rail","usage_rail"],moreFields:["covered","incline"],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:"temaki-railway_track_partial",fields:["name","opening_date","check_date","note","structure","gauge","electrified"],moreFields:["covered","frequency_electrified","highspeed","incline","maxspeed","service_rail","usage_rail","voltage_electrified"],geometry:["line"],tags:{railway:"construction"},matchScore:0.95,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:"temaki-railway_track",fields:["{railway/light_rail}"],moreFields:["{railway/light_rail}","highspeed"],geometry:["line"],tags:{railway:"disused"},matchScore:0.95,name:"Disused Railway"},"railway/funicular":{icon:"temaki-railway_cable_track",fields:["name","operator","incline","structure","gauge","service_rail"],moreFields:["covered","electrified","frequency_electrified","maxspeed","voltage_electrified"],geometry:["line"],terms:["venicular","cliff railway","cable car","cable railway","funicular railway"],tags:{railway:"funicular"},name:"Funicular Track"},"railway/level_crossing":{icon:"maki-cross",geometry:["vertex"],tags:{railway:"level_crossing"},terms:["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],name:"Railway Crossing (Road)"},"railway/light_rail":{icon:"temaki-light_rail",fields:["name","operator","structure","gauge","electrified","service_rail","usage_rail"],moreFields:["covered","frequency_electrified","incline","maxspeed","voltage_electrified"],geometry:["line"],tags:{railway:"light_rail"},terms:["light rail","streetcar","trolley"],name:"Light Rail Track"},"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:"temaki-railway_track_mini",fields:["{railway/light_rail}"],moreFields:["{railway/light_rail}"],geometry:["line"],tags:{railway:"miniature"},terms:["rideable miniature railway","narrow gauge railway","minimum gauge railway"],name:"Miniature Train Track"},"railway/monorail":{icon:"temaki-monorail",fields:["{railway/light_rail}"],moreFields:["{railway/light_rail}"],geometry:["line"],tags:{railway:"monorail"},name:"Monorail Track"},"railway/monorail/hanging":{icon:"temaki-hanging_rail",geometry:["line"],tags:{railway:"monorail",monorail:"hanging"},reference:{key:"monorail",value:"hanging"},terms:["suspension railway"],name:"Hanging Monorail Track"},"railway/narrow_gauge":{icon:"temaki-railway_track_narrow",fields:["{railway/light_rail}"],moreFields:["{railway/light_rail}"],geometry:["line"],tags:{railway:"narrow_gauge"},terms:["narrow gauge railway","narrow gauge railroad"],name:"Narrow Gauge Track"},"railway/preserved":{icon:"temaki-train_steam",fields:["railway","{railway/light_rail}"],moreFields:["{railway/light_rail}"],geometry:["line"],tags:{railway:"*","railway:preserved":"yes"},addTags:{railway:"rail","railway:preserved":"yes"},reference:{key:"railway:preserved"},terms:["historic train","preserved rail","steam train","tourist train"],name:"Heritage Railway Track"},"railway/rail":{icon:"temaki-railway_track",fields:["{railway/light_rail}"],moreFields:["{railway/light_rail}","highspeed"],geometry:["line"],tags:{railway:"rail"},terms:["permanent way","rail line","railroad track","railway track","track","train track"],name:"Train Track"},"railway/rail/highspeed":{icon:"temaki-train_bullet",geometry:["line"],tags:{railway:"rail",highspeed:"yes"},reference:{key:"highspeed"},terms:["bullet train","fast rail","high speed rail","highspeed rail","HSR"],name:"High-Speed Train Track"},"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/light_rail}"],moreFields:["{railway/light_rail}"],geometry:["line"],tags:{railway:"subway"},terms:["metro","transit","underground railway"],name:"Subway Track"},"railway/switch":{icon:"temaki-junction",geometry:["vertex"],tags:{railway:"switch"},terms:["switch","points"],name:"Railway Switch"},"railway/train_wash":{icon:"temaki-train_wash",geometry:["point","vertex","area"],fields:["operator","building_area"],tags:{railway:"wash"},terms:["wash","clean"],name:"Train Wash"},"railway/tram":{icon:"temaki-tram",fields:["{railway/light_rail}"],moreFields:["{railway/light_rail}"],geometry:["line"],tags:{railway:"tram"},terms:["electric street railway","light rail","streetcar","tramway","trolley"],name:"Tram Track"},"railway/yard":{icon:"temaki-freight_car",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:"temaki-ferry",geometry:["line"],fields:["name","operator","duration","access","toll","from","to"],moreFields:["charge_toll","distance","dog","interval","maxheight","maxweight","network","opening_hours","opening_hours/covid19","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","opening_hours/covid19","payment_multi"],moreFields:["air_conditioning","brand","building/levels_building","currency_multi","ele","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/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:"temaki-polished_nail",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:["auto mechanic","automechanic","automobile","automotive","garage","inspection","oil change","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-camper_trailer",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:"temaki-curtains",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:"temaki-meat",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:"temaki-fireplace",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 Store"},"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/household_linen":{icon:"tnp-4306",geometry:["point","area"],tags:{shop:"household_linen"},terms:["bedspreads","blankets","domestic cloths","curtains","handkerchieves","napkins","pillow cases","robes","sheets","towels"],name:"Household Linen 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:"temaki-pet_grooming",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:"temaki-spice_bottle",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:"temaki-tattoo_machine",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:"temaki-tiling",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:"temaki-dagger",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"},"telecom/exchange":{icon:"temaki-cable",fields:["ref","operator","telecom/medium","address","building_area"],geometry:["point","area"],tags:{telecom:"exchange"},terms:["telecommunications","telephone exchange","telephone switch"],name:"Telecom Exchange"},"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","opening_hours/covid19"],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","opening_hours/covid19","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-camper_trailer",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","opening_hours/covid19"],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:"temaki-info_board",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","ele_node","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","ele_node"],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:"temaki-app_terminal",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","opening_hours/covid19"],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","opening_hours/covid19","website"],moreFields:["brand","email","fax","gnis/feature_id","internet_access","internet_access/fee","internet_access/ssid","payment_multi","phone","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","opening_hours/covid19","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","opening_hours/covid19","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-speed_bump",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["hump","speed","slow"],tags:{traffic_calming:"bump"},name:"Speed Bump"},"traffic_calming/chicane":{icon:"temaki-chicane_arrow",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-speed_hump",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["bump","hump","speed","slow"],tags:{traffic_calming:"cushion"},name:"Speed Cushion"},"traffic_calming/dip":{icon:"temaki-speed_dip",fields:["surface","direction_vertex"],geometry:["vertex","line"],terms:["speed","slow"],tags:{traffic_calming:"dip"},name:"Dip"},"traffic_calming/hump":{icon:"temaki-speed_hump",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-rumble_strip",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-speed_table",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","opening_hours/covid19","wheelchair"],geometry:["relation"],tags:{type:"route_master"},name:"Route Master"},"type/route":{icon:"iD-route",fields:["name","route","ref_route","operator","network","network/type"],moreFields:["distance"],geometry:["relation"],tags:{type:"route"},name:"Route"},"type/route/bicycle":{icon:"maki-bicycle",fields:["name","ref_route","network_bicycle","cycle_network","network/type","from","to"],moreFields:["colour","distance"],geometry:["relation"],tags:{type:"route",route:"bicycle"},name:"Cycle Route"},"type/route/bus":{icon:"temaki-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","from","to"],geometry:["relation"],tags:{type:"route",route:"detour"},name:"Detour Route"},"type/route/ferry":{icon:"temaki-ferry",fields:["{route/ferry}"],moreFields:["{route/ferry}"],geometry:["relation"],tags:{type:"route",route:"ferry"},name:"Ferry Route"},"type/route/foot":{icon:"temaki-pedestrian",fields:["{type/route/hiking}"],moreFields:["{type/route/hiking}"],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","from","to"],moreFields:["colour","distance"],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","from","to"],moreFields:["colour","distance"],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:["{type/route/power}"],moreFields:["{type/route/power}"],geometry:["relation"],tags:{type:"route",route:"pipeline"},name:"Pipeline Route"},"type/route/piste":{icon:"fas-skiing",fields:["name","piste/type","ref_route","operator","from","to"],moreFields:["colour","distance"],geometry:["relation"],tags:{type:"route",route:"piste"},name:"Piste/Ski Route"},"type/route/power":{icon:"iD-power-line",fields:["name","ref_route","operator","from","to"],moreFields:["distance"],geometry:["relation"],tags:{type:"route",route:"power"},name:"Power Route"},"type/route/road":{icon:"iD-highway-unclassified",fields:["name","ref_route","network_road","from","to"],moreFields:["colour","distance"],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:"temaki-train",fields:["name","ref_route","operator","network","from","to"],moreFields:["colour","distance","duration","interval","opening_hours","opening_hours/covid19","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/route/trolleybus":{icon:"temaki-trolleybus",fields:["{type/route/train}"],moreFields:["{type/route/train}"],geometry:["relation"],tags:{type:"route",route:"trolleybus"},name:"Trolleybus 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","opening_hours/covid19","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","opening_hours/covid19","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/ACBA":{name:"ACBA",icon:"maki-bank",imageURL:"https://graph.facebook.com/acbacreditagricolebank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q55602923",amenity:"bank"},addTags:{amenity:"bank",brand:"ACBA","brand:wikidata":"Q55602923","brand:wikipedia":"hy:ԱԿԲԱ-Կրեդիտ Ագրիկոլ բանկ",name:"ACBA"},countryCodes:["am"],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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAndhra%20bank.svg&width=100",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"},countryCodes:["bo"],terms:["banco de crédito","bcp"],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/BWBank.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 BISA":{name:"Banco BISA",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoBisa/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21044225",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco BISA","brand:wikidata":"Q21044225","brand:wikipedia":"es:Banco BISA",name:"Banco BISA"},countryCodes:["bo"],terms:["bisa"],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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBanco%20CTT%20Logo.png&width=100",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 Económico":{name:"Banco Económico",icon:"maki-bank",imageURL:"https://graph.facebook.com/Bancoeconomico/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4854087",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Económico","brand:wikidata":"Q4854087","brand:wikipedia":"es:Banco Económico",name:"Banco Económico"},countryCodes:["bo"],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:wikidata":"Q62118592",name:"Banco Fassil"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Fie":{name:"Banco Fie",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoFieBo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81782924",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Fie","brand:wikidata":"Q81782924",name:"Banco Fie",official_name:"Banco para el Fomento a Iniciativas Económicas"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Banco Fortaleza":{name:"Banco Fortaleza",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q81787643",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Fortaleza","brand:wikidata":"Q81787643",name:"Banco Fortaleza"},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 Ganadero":{name:"Banco Ganadero",icon:"maki-bank",imageURL:"https://graph.facebook.com/bg.com.bo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81788241",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Ganadero","brand:wikidata":"Q81788241",name:"Banco Ganadero",short_name:"BG"},countryCodes:["bo"],terms:["bg"],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 Mercantil":{name:"Banco Mercantil",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoMercantilSantaCruz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q26250269",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Mercantil Santa Cruz","brand:wikidata":"Q26250269","brand:wikipedia":"es:Banco Mercantil Santa Cruz",name:"Banco Mercantil Santa Cruz",short_name:"BMSC"},countryCodes:["bo"],terms:["bmsc"],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 Nacional de Bolivia":{name:"Banco Nacional de Bolivia",icon:"maki-bank",imageURL:"https://graph.facebook.com/BancoNacionaldeBoliviaSA/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21044226",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco Nacional de Bolivia","brand:wikidata":"Q21044226","brand:wikipedia":"es:Banco Nacional de Bolivia",name:"Banco Nacional de Bolivia",short_name:"BNB"},countryCodes:["bo"],terms:["bnb"],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"},countryCodes:["co","ec","pe"],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:wikidata":"Q62118746",name:"Banco Sol",official_name:"Banco Solidario"},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:wikidata":"Q72315494",name:"Banco Unión",official_name:"Banco de la 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","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 di Sicilia":{name:"Banco di Sicilia",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q3633842",amenity:"bank"},addTags:{amenity:"bank",brand:"Banco di Sicilia","brand:wikidata":"Q3633842","brand:wikipedia":"it:Banco di Sicilia",name:"Banco di Sicilia"},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 Simpanan Nasional":{name:"Bank Simpanan Nasional",icon:"maki-bank",imageURL:"https://graph.facebook.com/BSNMalaysia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4855972",amenity:"bank"},addTags:{amenity:"bank",brand:"Bank Simpanan Nasional","brand:wikidata":"Q4855972","brand:wikipedia":"ms:Bank Simpanan Nasional",name:"Bank Simpanan Nasional"},countryCodes:["my"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Bank of Africa":{name:"Bank of Africa",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/710434129763049472/UW4D7zBk_bigger.jpg",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://pbs.twimg.com/profile_images/1118048368020692992/OGTTKn3B_bigger.png",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/BankWest (USA)":{name:"BankWest (USA)",icon:"maki-bank",imageURL:"https://graph.facebook.com/BankWestSouthDakota/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90386673",amenity:"bank"},addTags:{amenity:"bank",brand:"BankWest","brand:wikidata":"Q90386673",name:"BankWest"},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 (Australia)":{name:"Bankwest (Australia)",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 Dupuy de Parseval":{name:"Banque Dupuy de Parseval",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q2882897",amenity:"bank"},addTags:{amenity:"bank",brand:"Banque Dupuy de Parseval","brand:wikidata":"Q2882897","brand:wikipedia":"fr:Banque Dupuy de Parseval",name:"Banque Dupuy de Parseval"},countryCodes:["fr"],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://graph.facebook.com/banquepopulaire/picture?type=large",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"},countryCodes:["fr"],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","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"},countryCodes:["fr"],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/Beobank":{name:"Beobank",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/504563613378416641/F2K4x0xz_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q14911971",amenity:"bank"},addTags:{amenity:"bank",brand:"Beobank","brand:wikidata":"Q14911971","brand:wikipedia":"nl:Beobank",name:"Beobank"},countryCodes:["be"],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"},countryCodes:["hu"],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/caixageraldedepositos/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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo-vector-caja-espana.jpg&width=100",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%2FLOGO%20GRUPO%20Caja%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",imageURL:"https://graph.facebook.com/CASDEN.BanquePopulaire/picture?type=large",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/Chemical Bank":{name:"Chemical Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/ChemicalBankCommunity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q86815846",amenity:"bank"},addTags:{amenity:"bank",brand:"Chemical Bank","brand:wikidata":"Q86815846",name:"Chemical Bank"},countryCodes:["us"],terms:[],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/City National Bank (West Virginia)":{name:"City National Bank (West Virginia)",icon:"maki-bank",imageURL:"https://graph.facebook.com/bankatcity/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90937436",amenity:"bank"},addTags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q90937436",name:"City National Bank"},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/Degussa":{name:"Degussa",icon:"maki-bank",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDegussa%20bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1182932",amenity:"bank"},addTags:{amenity:"bank",brand:"Degussa","brand:wikidata":"Q1182932","brand:wikipedia":"de:Degussa Bank",name:"Degussa"},countryCodes:["de"],terms:[],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/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/Fio banka":{name:"Fio banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/Fiobanka/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12016657",amenity:"bank"},addTags:{amenity:"bank",brand:"Fio banka","brand:wikidata":"Q12016657","brand:wikipedia":"cs:Fio banka",name:"Fio banka"},countryCodes:["cz","sk"],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 State Bank Nebraska":{name:"First State Bank Nebraska",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q87646525",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87646525",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Florida)":{name:"First State Bank (Florida)",icon:"maki-bank",imageURL:"https://graph.facebook.com/keysbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87647395",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647395",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Illinois)":{name:"First State Bank (Illinois)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstStateBankIL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87647340",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647340",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Michigan)":{name:"First State Bank (Michigan)",icon:"maki-bank",imageURL:"https://graph.facebook.com/193858687327900/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87647479",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647479",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Mississippi)":{name:"First State Bank (Mississippi)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstStateBnk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87647452",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647452",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Nebraska)":{name:"First State Bank (Nebraska)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/1029745033338007555/oh66HKqk_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5453817",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q5453817",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Ohio)":{name:"First State Bank (Ohio)",icon:"maki-bank",imageURL:"https://pbs.twimg.com/profile_images/544566147052339200/WKGio7YM_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q87647374",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647374",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First State Bank (Texas)":{name:"First State Bank (Texas)",icon:"maki-bank",imageURL:"https://graph.facebook.com/FirstStateBankTX/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87647065",amenity:"bank"},addTags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647065",name:"First State Bank"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"amenity/bank/First Tech Credit Union":{name:"First Tech Credit Union",icon:"maki-bank",imageURL:"https://graph.facebook.com/Firsttechfed/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453865",amenity:"bank"},addTags:{amenity:"bank",brand:"First Tech Credit Union","brand:wikidata":"Q5453865","brand:wikipedia":"en:First Tech Credit Union",name:"First Tech Credit Union"},countryCodes:["us"],terms:["1st tech","1st tech credit union","first tech"],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/GT Bank":{name:"GT Bank",icon:"maki-bank",imageURL:"https://graph.facebook.com/gtbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q579747",amenity:"bank"},addTags:{amenity:"bank",brand:"GT Bank","brand:wikidata":"Q579747","brand:wikipedia":"en:Guaranty Trust Bank",name:"GT Bank",official_name:"Guaranty Trust Bank"},countryCodes:["ci","gb","gh","gm","ke","lr","ng","rw","tz","ug"],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://pbs.twimg.com/profile_images/1193543054105415681/GNeUutB1_bigger.jpg",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/J&T Banka":{name:"J&T Banka",icon:"maki-bank",imageURL:"https://graph.facebook.com/JT.BANKA.SK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12022160",amenity:"bank"},addTags:{amenity:"bank",brand:"J&T Banka","brand:wikidata":"Q12022160","brand:wikipedia":"sk:J & T BANKA",name:"J&T Banka"},countryCodes:["cz","sk"],terms:[],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/1234498051462455296/5HyYwET1_bigger.jpg",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",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/novobancocultura/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/Permanent TSB":{name:"Permanent TSB",icon:"maki-bank",imageURL:"https://graph.facebook.com/557742141060618/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3154461",amenity:"bank"},addTags:{amenity:"bank",brand:"Permanent TSB","brand:wikidata":"Q3154461","brand:wikipedia":"en:Permanent TSB",name:"Permanent TSB"},countryCodes:["ie"],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/Privatbanka":{name:"Privatbanka",icon:"maki-bank",geometry:["point","area"],tags:{"brand:wikidata":"Q12774628",amenity:"bank"},addTags:{amenity:"bank",brand:"Privatbanka","brand:wikidata":"Q12774628","brand:wikipedia":"sk:Privatbanka",name:"Privatbanka"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"amenity/bank/Provincial":{name:"Provincial",icon:"maki-bank",imageURL:"https://graph.facebook.com/BBVAProvincial.Venezuela/picture?type=large",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/Prvá stavebná sporiteľňa":{name:"Prvá stavebná sporiteľňa",icon:"maki-bank",imageURL:"https://graph.facebook.com/riesenieprebyvanie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q29054618",amenity:"bank"},addTags:{amenity:"bank",brand:"Prvá stavebná sporiteľňa","brand:wikidata":"Q29054618","brand:wikipedia":"sk:Prvá stavebná sporiteľňa",name:"Prvá stavebná sporiteľňa"},countryCodes:["sk"],terms:[],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/1247866561601429507/sKacHdpm_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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FUnicreditlogobg.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7884635",amenity:"bank"},addTags:{amenity:"bank",brand:"УниКредит Булбанк","brand:wikidata":"Q7884635","brand:wikipedia":"bg:УниКредит Булбанк",name:"УниКредит Булбанк","name:en":"UniCredit Bulbank"},countryCodes:["bg"],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",geometry:["point","area"],tags:{"brand:wikidata":"Q4476745",amenity:"bank"},addTags:{amenity:"bank",brand:"Уральский банк реконструкции и развития","brand:en":"Ural Bank for Reconstruction and Development","brand:ru":"Уральский банк реконструкции и развития","brand:wikidata":"Q4476745","brand:wikipedia":"ru:Уральский банк реконструкции и развития",name:"Уральский банк реконструкции и развития","name:en":"Ural Bank for Reconstruction and Development","name:ru":"Уральский банк реконструкции и развития",short_name:"УБРиР","short_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://graph.facebook.com/homecreditru/picture?type=large",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",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://pbs.twimg.com/profile_images/941907467197231104/HaBuIkxx_bigger.jpg",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%2F7bank%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7457182",amenity:"bank"},addTags:{amenity:"bank",brand:"セブン銀行","brand:en":"Seven Bank","brand:ja":"セブン銀行","brand:wikidata":"Q7457182","brand:wikipedia":"ja:セブン銀行",name:"セブン銀行","name:en":"Seven Bank","name:ja":"セブン銀行"},countryCodes:["jp"],terms:["7銀行"],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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FThe%20Keiyo%20Bank%2C%20Ltd.%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11374734",amenity:"bank"},addTags:{"alt_name:en":"αBANK",amenity:"bank",brand:"京葉銀行","brand:en":"Keiyo Bank","brand:ja":"京葉銀行","brand:wikidata":"Q11374734","brand:wikipedia":"ja:京葉銀行",name:"京葉銀行","name:en":"Keiyo Bank","name:ja":"京葉銀行"},countryCodes:["jp"],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":"Q11406742",amenity:"bank"},addTags:{amenity:"bank",brand:"千葉興業銀行","brand:en":"Chiba Kogyo Bank","brand:ja":"千葉興業銀行","brand:wikidata":"Q11406742","brand:wikipedia":"ja:千葉興業銀行",name:"千葉興業銀行","name:en":"Chiba Kogyo Bank","name:ja":"千葉興業銀行"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bank/千葉銀行":{name:"千葉銀行",icon:"maki-bank",imageURL:"https://graph.facebook.com/chibabank.official/picture?type=large",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",geometry:["point","area"],tags:{"brand:wikidata":"Q11418759",amenity:"bank"},addTags:{amenity:"bank",brand:"商工中金","brand:en":"Shoko Chukin Bank","brand:ja":"商工中金","brand:wikidata":"Q11418759","brand:wikipedia":"ja:商工中金",name:"商工中金","name:en":"Shoko Chukin Bank","name:ja":"商工中金"},countryCodes:["jp"],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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%E3%81%9F%E3%81%BE%E3%81%97%E3%82%93%E3%83%AD%E3%82%B4%E3%83%9E%E3%83%BC%E3%82%AF.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11430719",amenity:"bank"},addTags:{alt_name:"たましん","alt_name:en":"Tamashin",amenity:"bank",brand:"多摩信用金庫","brand:en":"Tama Shinkin Bank","brand:ja":"多摩信用金庫","brand:wikidata":"Q11430719","brand:wikipedia":"ja:多摩信用金庫",name:"多摩信用金庫","name:en":"Tama Shinkin 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":"Q4856166",amenity:"bank"},addTags:{amenity:"bank",brand:"宁波银行","brand:en":"Bank of Ningbo","brand:wikidata":"Q4856166","brand:wikipedia":"zh:宁波银行","brand:zh":"宁波银行",name:"宁波银行","name:en":"Bank of Ningbo","name:zh":"宁波银行"},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",imageURL:"https://graph.facebook.com/joyobank.co.jp/picture?type=large",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",imageURL:"https://pbs.twimg.com/profile_images/2339198227/7dkwb3ea0vvcimqqf7d1_bigger.gif",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":"Q11524392",amenity:"bank"},addTags:{amenity:"bank",brand:"東京ベイ信金","brand:en":"Tokyo Bay Shinkin Bank","brand:ja":"東京ベイ信金","brand:wikidata":"Q11524392","brand:wikipedia":"ja:東京ベイ信金",name:"東京ベイ信金","name:en":"Tokyo Bay Shinkin Bank","name:ja":"東京ベイ信金"},countryCodes:["jp"],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",imageURL:"https://graph.facebook.com/OfficialBankofYokohama/picture?type=large",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/HanaBank/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/Explore Bike Share":{name:"Explore Bike Share",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/explorebikeshare/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q86706492",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"Explore Bike Share","brand:wikidata":"Q86706492",name:"Explore Bike Share"},countryCodes:["us"],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/HELLO CYCLING":{name:"HELLO CYCLING",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/hellocyclingjp/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q91231927",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"HELLO CYCLING","brand:en":"HELLO CYCLING","brand:ja":"ハローサイクリング","brand:wikidata":"Q91231927",fee:"yes",name:"HELLO CYCLING","name:en":"HELLO CYCLING","name:ja":"ハローサイクリング"},countryCodes:["jp"],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/OV-fiets":{name:"OV-fiets",icon:"temaki-bicycle_rental",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q2629982",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"OV-fiets","brand:wikidata":"Q2629982","brand:wikipedia":"en:OV-fiets",name:"OV-fiets"},countryCodes:["nl"],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/baybike":{name:"baybike",icon:"temaki-bicycle_rental",imageURL:"https://graph.facebook.com/baybikeyokohama/picture?type=large",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q91499435",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"baybike","brand:en":"baybike","brand:ja":"ベイバイク","brand:wikidata":"Q91499435",fee:"yes",name:"baybike","name:en":"baybike","name:ja":"ベイバイク",official_name:"横浜コミュニティサイクル","official_name:en":"Yokohama Bike Share","official_name:ja":"横浜コミュニティサイクル"},countryCodes:["jp"],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/bicycle_rental/ちよくる":{name:"ちよくる",icon:"temaki-bicycle_rental",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q91498542",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"ちよくる","brand:en":"Chiyocle","brand:ja":"ちよくる","brand:wikidata":"Q91498542",fee:"yes",name:"ちよくる","name:en":"Chiyocle","name:ja":"ちよくる",official_name:"千代田区コミュニティサイクル","official_name:en":"Chiyoda City Bike Share","official_name:ja":"千代田区コミュニティサイクル"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/bicycle_rental/ドコモ・バイクシェア":{name:"ドコモ・バイクシェア",icon:"temaki-bicycle_rental",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDocomo%20bike%20share%20logo.svg&width=100",geometry:["point","vertex","area"],tags:{"brand:wikidata":"Q55533296",amenity:"bicycle_rental"},addTags:{amenity:"bicycle_rental",brand:"ドコモ・バイクシェア","brand:en":"Docomo Bike Share","brand:ja":"ドコモ・バイクシェア","brand:wikidata":"Q55533296","brand:wikipedia":"ja:ドコモ・バイクシェア",fee:"yes",name:"ドコモ・バイクシェア","name:en":"Docomo Bike Share","name:ja":"ドコモ・バイクシェア"},countryCodes:["jp"],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/Eurochange":{name:"Eurochange",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/eurochange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q86525249",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"Eurochange","brand:wikidata":"Q86525249",name:"Eurochange"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/NM Money":{name:"NM Money",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/NMmoney/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q86529747",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"NM Money","brand:wikidata":"Q86529747",name:"NM Money"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/bureau_de_change/No1 Currency":{name:"No1 Currency",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/No1Currency/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87139463",amenity:"bureau_de_change"},addTags:{amenity:"bureau_de_change",brand:"No1 Currency","brand:wikidata":"Q87139463",name:"No1 Currency"},countryCodes:["gb","ie"],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/Bakers + Baristas":{name:"Bakers + Baristas",icon:"maki-cafe",imageURL:"https://graph.facebook.com/bbsbakersbaristas/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85199581",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bakers + Baristas","brand:wikidata":"Q85199581",cuisine:"coffee_shop",name:"Bakers + Baristas",takeaway:"yes"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"amenity/cafe/Bambu":{name:"Bambu",icon:"maki-cafe",geometry:["point","area"],tags:{"brand:wikidata":"Q83437245",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Bambu","brand:wikidata":"Q83437245",cuisine:"vietnamese;bubble_tea",name:"Bambu",takeaway:"yes"},countryCodes:["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/cariboucoffeeturkiye/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/Coffeeshop Company":{name:"Coffeeshop Company",icon:"maki-cafe",imageURL:"https://graph.facebook.com/CoffeeshopCompany.at/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q873767",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Coffeeshop Company","brand:wikidata":"Q873767","brand:wikipedia":"en:Coffeeshop Company",cuisine:"coffee_shop",name:"Coffeeshop Company",takeaway:"yes"},terms:[],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/Columbus Café & Co":{name:"Columbus Café & Co",icon:"maki-cafe",imageURL:"https://graph.facebook.com/columbuscafeofficielle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2984582",amenity:"cafe"},addTags:{amenity:"cafe",brand:"Columbus Café & Co","brand:wikidata":"Q2984582",cuisine:"coffee_shop",name:"Columbus Café & Co",takeaway:"yes"},countryCodes:["be","bh","fr","ma","qa","us"],terms:["colombus","colombus café","colombus café & co","columbus","columbus café"],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",imageURL:"https://graph.facebook.com/ExcelsiorCaffe.1999/picture?type=large",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",imageURL:"https://graph.facebook.com/CoffeeRoomRenoir/picture?type=large",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/hoshinocoffee.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88396880",amenity:"cafe"},addTags:{amenity:"cafe",brand:"星乃珈琲店","brand:en":"Hoshino Coffee","brand:ja":"星乃珈琲店","brand:wikidata":"Q88396880",cuisine:"coffee_shop",name:"星乃珈琲店","name:en":"Hoshino Coffee","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: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:["jp"],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/louisacoffeeofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q67933328",amenity:"cafe"},addTags:{amenity:"cafe",brand:"路易莎咖啡","brand:en":"Louisa Coffee","brand:wikidata":"Q67933328","brand:wikipedia":"zh:路易莎咖啡","brand:zh":"路易莎咖啡",cuisine:"coffee_shop",name:"路易莎咖啡","name:en":"Louisa Coffee","name:zh":"路易莎咖啡",takeaway:"yes"},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://graph.facebook.com/stadtmobil.stuttgart/picture?type=large",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/car_wash/IMO Car Wash":{name:"IMO Car Wash",icon:"temaki-car_wash",imageURL:"https://graph.facebook.com/IMOcarwash/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81802686",amenity:"car_wash"},addTags:{amenity:"car_wash",brand:"IMO Car Wash","brand:wikidata":"Q81802686",name:"IMO Car Wash"},terms:[],matchScore:2,suggestion:true},"amenity/car_wash/Waves":{name:"Waves",icon:"temaki-car_wash",imageURL:"https://graph.facebook.com/WavesCarWashLtd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81802122",amenity:"car_wash"},addTags:{amenity:"car_wash",brand:"Waves","brand:wikidata":"Q81802122",name:"Waves"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"amenity/casino/Codere":{name:"Codere",icon:"maki-casino",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCodere%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2918415",amenity:"casino"},addTags:{amenity:"casino",brand:"Codere","brand:wikidata":"Q2918415","brand:wikipedia":"es:Codere",name:"Codere"},countryCodes:["ar","co","es","it","mx","pa","uy"],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","brand:wikipedia":"es:Luckia",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/charging_station/東光高岳":{name:"東光高岳",icon:"fas-charging-station",geometry:["point"],tags:{"brand:wikidata":"Q17220263",amenity:"charging_station"},addTags:{amenity:"charging_station",brand:"東光高岳","brand:en":"Takaoka Toko","brand:ja":"東光高岳","brand:wikidata":"Q17220263","brand:wikipedia":"ja:東光高岳",name:"東光高岳","name:en":"Takaoka Toko","name:ja":"東光高岳"},countryCodes:["jp"],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",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/Cine Center":{name:"Cine Center",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q81962395",amenity:"cinema"},addTags:{amenity:"cinema",brand:"Cine Center","brand:wikidata":"Q81962395",name:"Cine Center"},countryCodes:["bo"],terms:[],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://graph.facebook.com/cinepolisID/picture?type=large",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",imageURL:"https://pbs.twimg.com/profile_images/965496212332863488/_LJ8isUg_bigger.jpg",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/MultiCine":{name:"MultiCine",icon:"maki-cinema",geometry:["point","area"],tags:{"brand:wikidata":"Q81963200",amenity:"cinema"},addTags:{amenity:"cinema",brand:"MultiCine","brand:wikidata":"Q81963200",name:"MultiCine"},countryCodes:["bo"],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/college/Akademie Deutsche POP":{name:"Akademie Deutsche POP",icon:"maki-college",imageURL:"https://graph.facebook.com/deutschepop/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q413887",amenity:"college"},addTags:{amenity:"college",brand:"Akademie Deutsche POP","brand:wikidata":"Q413887","brand:wikipedia":"de:Akademie Deutsche POP",name:"Akademie Deutsche POP"},terms:[],matchScore:2,suggestion:true},"amenity/college/SAE Institute":{name:"SAE Institute",icon:"maki-college",imageURL:"https://pbs.twimg.com/profile_images/608919447856918528/RoTiqOWW_bigger.png",geometry:["area","point"],tags:{"brand:wikidata":"Q201438",amenity:"college"},addTags:{amenity:"college",brand:"SAE Institute","brand:wikidata":"Q201438","brand:wikipedia":"en:SAE Institute",name:"SAE Institute"},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",imageURL:"https://pbs.twimg.com/profile_images/1095699775482195969/-5whY2ff_bigger.png",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/Bojangles/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/Buona":{name:"Buona",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/BuonaRestaurants/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23461372",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Buona","brand:wikidata":"Q23461372","brand:wikipedia":"en:Buona",cuisine:"italian",name:"Buona",takeaway:"yes"},countryCodes:["us"],terms:[],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/chicken/Dixy Chicken":{name:"Dixy Chicken",icon:"fas-drumstick-bite",imageURL:"https://graph.facebook.com/152003844822491/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5285003",amenity:"fast_food",cuisine:"chicken"},addTags:{amenity:"fast_food",brand:"Dixy Chicken","brand:wikidata":"Q5285003","brand:wikipedia":"en:Dixy Chicken",cuisine:"chicken","diet:halal":"yes",name:"Dixy Chicken",takeaway:"yes"},reference:{key:"cuisine",value:"chicken"},countryCodes:["bn","gb","in","no","nz","pk","sa","sy","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/pizza/East of Chicago Pizza":{name:"East of Chicago Pizza",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/EOCpizza/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5329751",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"East of Chicago Pizza","brand:wikidata":"Q5329751","brand:wikipedia":"en:East of Chicago Pizza",cuisine:"pizza",name:"East of Chicago Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["us"],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/Freshëns":{name:"Freshëns",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/Freshens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88353412",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Freshëns","brand:wikidata":"Q88353412",cuisine:"juice;salad",name:"Freshëns",takeaway:"yes"},countryCodes:["us"],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 (Canada)":{name:"Gino's Pizza (Canada)",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/GinosPizzaGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q84029134",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q84029134",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"amenity/fast_food/pizza/Gino's Pizza (West Virginia)":{name:"Gino's Pizza (West Virginia)",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",official_name:"Gino's Pizza & Spaghetti House",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/burger/Jack's":{name:"Jack's",icon:"maki-fast-food",imageURL:"https://pbs.twimg.com/profile_images/1194591890965966848/ajrBO2Z3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q6110826",amenity:"fast_food",cuisine:"burger"},addTags:{amenity:"fast_food",brand:"Jack's","brand:wikidata":"Q6110826","brand:wikipedia":"en:Jack's",cuisine:"burger",name:"Jack's",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/burger/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",cuisine:"burger;sandwich"},addTags:{amenity:"fast_food",brand:"LEON","brand:wikidata":"Q6524851","brand:wikipedia":"en:Leon Restaurants",cuisine:"burger;sandwich",name:"LEON",takeaway:"yes"},reference:{key:"cuisine",value:"burger"},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 Capers":{name:"Pizza Capers",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaCapers/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17021875",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Capers","brand:wikidata":"Q17021875","brand:wikipedia":"en:Pizza Capers",cuisine:"pizza",name:"Pizza Capers",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["au"],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 Paï":{name:"Pizza Paï",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaPai/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3389501",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Pizza Paï","brand:wikidata":"Q3389501","brand:wikipedia":"fr:PizzaPai",cuisine:"pizza",name:"Pizza Paï",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},countryCodes:["fr"],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",imageURL:"https://graph.facebook.com/SchnitzAU/picture?type=large",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/Taziki's Mediterranean Cafe":{name:"Taziki's Mediterranean Cafe",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/TazikisMedCafe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q19849840",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Taziki's Mediterranean Cafe","brand:wikidata":"Q19849840","brand:wikipedia":"en:Taziki's Mediterranean Café",cuisine:"mediterranean",name:"Taziki's Mediterranean Cafe",short_name:"Taziki's",takeaway:"yes"},countryCodes:["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/Tudor's Biscuit World":{name:"Tudor's Biscuit World",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/tudorsbiscuitworld/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7851262",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"Tudor's Biscuit World","brand:wikidata":"Q7851262","brand:wikipedia":"en:Tudor's Biscuit World",cuisine:"american",name:"Tudor's Biscuit World",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/Додо Пицца":{name:"Додо Пицца",icon:"maki-restaurant-pizza",geometry:["point","area"],tags:{"brand:wikidata":"Q61949318",amenity:"fast_food",cuisine:"pizza"},addTags:{amenity:"fast_food",brand:"Додо Пицца","brand:en":"Dodo Pizza","brand:ru":"Додо Пицца","brand:wikidata":"Q61949318","brand:wikipedia":"ru:Додо Пицца",cuisine:"pizza",name:"Додо Пицца","name:en":"Dodo Pizza","name:ru":"Додо Пицца",takeaway:"yes"},reference:{key:"cuisine",value:"pizza"},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/1233326387580194816/wH7fB1-w_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:{"alt_name:en":"Kentucky Fried Chicken",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",imageURL:"https://pbs.twimg.com/profile_images/660971858699771904/k5BvhuxH_bigger.jpg",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/ファーストキッチン":{name:"ファーストキッチン",icon:"maki-fast-food",imageURL:"https://graph.facebook.com/firstkitchen.offical/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5453133",amenity:"fast_food"},addTags:{amenity:"fast_food",brand:"ファーストキッチン","brand:en":"First Kitchen","brand:ja":"ファーストキッチン","brand:wikidata":"Q5453133","brand:wikipedia":"ja:ファーストキッチン",cuisine:"friture",name:"ファーストキッチン","name:en":"First Kitchen","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/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://pbs.twimg.com/profile_images/378800000531828525/0a2223ddd4b6ec35d85d418c2aee44f6_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q11520140",amenity:"fast_food"},addTags:{alt_name:"かまどや",amenity:"fast_food",brand:"本家かまどや","brand:en":"Honke Kamadoya","brand:ja":"本家かまどや","brand:wikidata":"Q11520140","brand:wikipedia":"ja:本家かまどや",cuisine:"japanese",name:"本家かまどや","name:en":"Honke Kamadoya","name:ja":"本家かまどや",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",imageURL:"https://pbs.twimg.com/profile_images/870545798039195648/wDwwGAUK_bigger.jpg",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/Alexela":{name:"Alexela",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q20529782",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Alexela","brand:wikidata":"Q20529782","brand:wikipedia":"et:Alexela Oil",name:"Alexela"},countryCodes:["ee"],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/Beyfin":{name:"Beyfin",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q3639256",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Beyfin","brand:wikidata":"Q3639256","brand:wikipedia":"it:Beyfin",name:"Beyfin"},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://pbs.twimg.com/profile_images/1239110499553488898/S31rVo48_bigger.jpg",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/Casino":{name:"Casino",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Casino%20Supermarch%C3%A9s.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q89029184",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Casino","brand:wikidata":"Q89029184",name:"Casino"},countryCodes:["fr"],terms:[],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/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/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://graph.facebook.com/Eni/picture?type=large",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/Fred Meyer":{name:"Fred Meyer",icon:"maki-fuel",imageURL:"https://graph.facebook.com/fredmeyer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5495932",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer"},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://pbs.twimg.com/profile_images/783666971883737088/OU8AdzWU_bigger.jpg",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/Green Oil":{name:"Green Oil",icon:"maki-fuel",imageURL:"https://graph.facebook.com/greenoilmaroc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88393926",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Green Oil","brand:wikidata":"Q88393926",name:"Green Oil"},countryCodes:["ma"],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://pbs.twimg.com/profile_images/1242150382085779463/Cmm3JM1n_bigger.jpg",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 Shop":{name:"Kwik Shop",icon:"maki-fuel",imageURL:"https://graph.facebook.com/kwikshopstores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6450417",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Kwik Shop","brand:wikidata":"Q6450417","brand:wikipedia":"en:Kwik Shop",name:"Kwik Shop"},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",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/1235227251131678722/4FZ60T1d_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/Rotten Robbie":{name:"Rotten Robbie",icon:"maki-fuel",imageURL:"https://graph.facebook.com/rottenrobbies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87378070",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Rotten Robbie","brand:wikidata":"Q87378070",name:"Rotten Robbie"},countryCodes:["us"],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/Sonangol":{name:"Sonangol",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSonangol%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q677832",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Sonangol","brand:wikidata":"Q677832","brand:wikipedia":"pt:Sonangol",name:"Sonangol"},countryCodes:["ao"],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/azkWOG/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/Winxo":{name:"Winxo",icon:"maki-fuel",imageURL:"https://graph.facebook.com/WinxoOfficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88389320",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Winxo","brand:wikidata":"Q88389320",name:"Winxo"},countryCodes:["ma"],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/Ziz":{name:"Ziz",icon:"maki-fuel",imageURL:"https://graph.facebook.com/smdczizmaroc/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88393228",amenity:"fuel"},addTags:{amenity:"fuel",brand:"Ziz","brand:wikidata":"Q88393228",name:"Ziz"},countryCodes:["ma"],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/bi1":{name:"bi1",icon:"maki-fuel",geometry:["point","area"],tags:{"brand:wikidata":"Q56325139",amenity:"fuel"},addTags:{amenity:"fuel",brand:"bi1","brand:wikidata":"Q56325139","brand:wikipedia":"pl:Bi1",name:"bi1"},countryCodes:["fr"],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://graph.facebook.com/tatneftofficial/picture?type=large",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",geometry:["point","area"],tags:{"brand:wikidata":"Q3045998",amenity:"fuel"},addTags:{amenity:"fuel",brand:"اينوك","brand:ar":"اينوك","brand:en":"ENOC","brand:wikidata":"Q3045998","brand:wikipedia":"ar:اينوك",name:"اينوك","name:ar":"اينوك","name:en":"ENOC"},terms:[],matchScore:2,suggestion:true},"amenity/fuel/توتال":{name:"توتال",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:"توتال","brand:ar":"توتال","brand:en":"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"توتال","name:ar":"توتال","name:en":"Total"},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":"ENEOS","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"ENEOS","name:ja":"エネオス"},countryCodes:["jp"],terms:["eneos"],matchScore:2,suggestion:true},"amenity/fuel/キグナス石油":{name:"キグナス石油",icon:"maki-fuel",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FKygnus%20logo.svg&width=100",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","brand:ja":"コスモ","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ","name:en":"Cosmo","name:ja":"コスモ",official_name:"コスモ石油"},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",imageURL:"https://graph.facebook.com/odekakebu/picture?type=large",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":"Q1437742",amenity:"fuel"},addTags:{amenity:"fuel",brand:"台塑石油","brand:en":"Formosa Petrochemical Corporation","brand:wikidata":"Q1437742","brand:wikipedia":"zh:台塑石油","brand:zh":"台塑石油",name:"台塑石油","name:en":"Formosa Petrochemical Corporation","name:zh":"台塑石油"},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/Fortis Healthcare":{name:"Fortis Healthcare",icon:"maki-hospital",imageURL:"https://graph.facebook.com/fortishealth/picture?type=large",geometry:["area","point"],tags:{"brand:wikidata":"Q7810035",amenity:"hospital"},addTags:{amenity:"hospital",brand:"Fortis Healthcare","brand:wikidata":"Q7810035","brand:wikipedia":"en:Fortis Healthcare",healthcare:"hospital",name:"Fortis Healthcare"},reference:{key:"amenity",value:"hospital"},countryCodes:["in"],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/1235610812623884288/3p55Ca0K_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:["31アイスクリーム","サーティーワン"],matchScore:2,suggestion:true},"amenity/internet_cafe/アプレシオ":{name:"アプレシオ",icon:"temaki-antenna",geometry:["point","area"],tags:{"brand:wikidata":"Q11284756",amenity:"internet_cafe"},addTags:{amenity:"internet_cafe",brand:"アプレシオ","brand:en":"Aprecio","brand:ja":"アプレシオ","brand:wikidata":"Q11284756","brand:wikipedia":"ja:アプレシオ","internet_access:fee":"yes",name:"アプレシオ","name:en":"Aprecio","name:ja":"アプレシオ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/internet_cafe/コミック・バスター":{name:"コミック・バスター",icon:"temaki-antenna",imageURL:"https://graph.facebook.com/buster.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90413129",amenity:"internet_cafe"},addTags:{amenity:"internet_cafe",brand:"コミック・バスター","brand:en":"Comic Buster","brand:ja":"コミック・バスター","brand:wikidata":"Q90413129","internet_access:fee":"yes",name:"コミック・バスター","name:en":"Comic Buster","name:ja":"コミック・バスター"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/internet_cafe/マンボー":{name:"マンボー",icon:"temaki-antenna",imageURL:"https://pbs.twimg.com/profile_images/924089427990687745/F_o4taQX_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11341637",amenity:"internet_cafe"},addTags:{amenity:"internet_cafe",brand:"マンボー","brand:en":"Manboo","brand:ja":"マンボー","brand:wikidata":"Q11341637","brand:wikipedia":"ja:マンボー (インターネットカフェ)","internet_access:fee":"yes",name:"マンボー","name:en":"Manboo","name:ja":"マンボー"},countryCodes:["jp"],terms:["manboo"],matchScore:2,suggestion:true},"amenity/internet_cafe/メディアカフェポパイ":{name:"メディアカフェポパイ",icon:"temaki-antenna",imageURL:"https://pbs.twimg.com/profile_images/1660803642/_________bigger.gif",geometry:["point","area"],tags:{"brand:wikidata":"Q11343796",amenity:"internet_cafe"},addTags:{amenity:"internet_cafe",brand:"メディアカフェポパイ","brand:en":"Media Cafe Popeye","brand:ja":"メディアカフェポパイ","brand:wikidata":"Q11343796","brand:wikipedia":"ja:メディアカフェポパイ","internet_access:fee":"yes",name:"メディアカフェポパイ","name:en":"Media Cafe Popeye","name:ja":"メディアカフェポパイ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/internet_cafe/快活CLUB":{name:"快活CLUB",icon:"temaki-antenna",imageURL:"https://graph.facebook.com/kaikatsu.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88299591",amenity:"internet_cafe"},addTags:{alt_name:"快活クラブ",amenity:"internet_cafe",brand:"快活CLUB","brand:en":"Kaikatsu Club","brand:ja":"快活CLUB","brand:wikidata":"Q88299591","internet_access:fee":"yes",name:"快活CLUB","name:en":"Kaikatsu Club","name:ja":"快活CLUB"},countryCodes:["jp"],terms:["快活クラブ"],matchScore:2,suggestion:true},"amenity/internet_cafe/自遊空間":{name:"自遊空間",icon:"temaki-antenna",imageURL:"https://pbs.twimg.com/profile_images/1193733042461765632/swJNltaG_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q88121843",amenity:"internet_cafe"},addTags:{"alt_name:en":"Jiyu Kukan",amenity:"internet_cafe",brand:"自遊空間","brand:en":"Space Create","brand:ja":"自遊空間","brand:wikidata":"Q88121843","internet_access:fee":"yes",name:"自遊空間","name:en":"Space Create","name:ja":"自遊空間"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/karaoke_box/カラオケ まねきねこ":{name:"カラオケ まねきねこ",icon:"maki-karaoke",imageURL:"https://graph.facebook.com/karaokemanekinekoth/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88326334",amenity:"karaoke_box"},addTags:{amenity:"karaoke_box",brand:"カラオケ まねきねこ","brand:en":"Karaoke Manekineko","brand:ja":"カラオケ まねきねこ","brand:wikidata":"Q88326334",fee:"yes",name:"カラオケ まねきねこ","name:en":"Karaoke Manekineko","name:ja":"カラオケ まねきねこ"},countryCodes:["jp"],terms:["まねきねこ"],matchScore:2,suggestion:true},"amenity/karaoke_box/カラオケバンバン":{name:"カラオケバンバン",icon:"maki-karaoke",imageURL:"https://pbs.twimg.com/profile_images/1217401623237914625/Tj_UN7HA_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q88485685",amenity:"karaoke_box"},addTags:{amenity:"karaoke_box",brand:"カラオケバンバン","brand:en":"Karaoke BanBan","brand:ja":"カラオケバンバン","brand:wikidata":"Q88485685",fee:"yes",name:"カラオケバンバン","name:en":"Karaoke BanBan","name:ja":"カラオケバンバン"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/karaoke_box/カラオケ館":{name:"カラオケ館",icon:"maki-karaoke",imageURL:"https://graph.facebook.com/karaokekan.111/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11294889",amenity:"karaoke_box"},addTags:{amenity:"karaoke_box",brand:"カラオケ館","brand:en":"Karaoke-kan","brand:ja":"カラオケ館","brand:wikidata":"Q11294889","brand:wikipedia":"ja:B&V",fee:"yes",name:"カラオケ館","name:en":"Karaoke-kan","name:ja":"カラオケ館"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/karaoke_box/シダックス":{name:"シダックス",icon:"maki-karaoke",imageURL:"https://graph.facebook.com/restaurantkaraokeshidax/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7496130",amenity:"karaoke_box"},addTags:{amenity:"karaoke_box",brand:"シダックス","brand:en":"Shidax","brand:ja":"シダックス","brand:wikidata":"Q7496130","brand:wikipedia":"ja:シダックス",fee:"yes",name:"シダックス","name:en":"Shidax","name:ja":"シダックス"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/karaoke_box/ジョイサウンド":{name:"ジョイサウンド",icon:"maki-karaoke",imageURL:"https://graph.facebook.com/JOYSOUND.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11226033",amenity:"karaoke_box"},addTags:{amenity:"karaoke_box",brand:"ジョイサウンド","brand:en":"Joysound","brand:ja":"ジョイサウンド","brand:wikidata":"Q11226033","brand:wikipedia":"ja:JOYSOUND",fee:"yes",name:"ジョイサウンド","name:en":"Joysound","name:ja":"ジョイサウンド"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/karaoke_box/ビッグエコー":{name:"ビッグエコー",icon:"maki-karaoke",imageURL:"https://graph.facebook.com/karaokebigecho/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88117761",amenity:"karaoke_box"},addTags:{amenity:"karaoke_box",brand:"ビッグエコー","brand:en":"Big Echo","brand:ja":"ビッグエコー","brand:wikidata":"Q88117761",fee:"yes",name:"ビッグエコー","name:en":"Big Echo","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/music_school/ヤマハ音楽教室":{name:"ヤマハ音楽教室",icon:"fas-music",imageURL:"https://graph.facebook.com/yamaha.ongakukyoushitsu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90327852",amenity:"music_school"},addTags:{amenity:"music_school",brand:"ヤマハ音楽教室","brand:en":"Yamaha Music School","brand:ja":"ヤマハ音楽教室","brand:ja-Latn":"Yamaha Ongaku Kyōshitsu","brand:wikidata":"Q90327852",name:"ヤマハ音楽教室","name:en":"Yamaha Music School","name:ja":"ヤマハ音楽教室","name:ja-Latn":"Yamaha Ongaku Kyōshitsu"},countryCodes:["jp"],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/Indigo":{name:"Indigo",icon:"temaki-car_parked",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FIndigo%20(entreprise)%20logo.png&width=100",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q3559970",amenity:"parking"},addTags:{amenity:"parking",brand:"Indigo","brand:wikidata":"Q3559970","brand:wikipedia":"fr:Indigo (entreprise)",fee:"yes",name:"Indigo"},terms:[],matchScore:2,suggestion:true},"amenity/parking/NPC24H":{name:"NPC24H",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11506782",amenity:"parking"},addTags:{amenity:"parking",brand:"NPC","brand:wikidata":"Q11506782","brand:wikipedia":"ja:日本パーキング",fee:"yes",name:"NPC24H",official_name:"日本パーキング"},countryCodes:["jp"],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":"Q30923801",amenity:"parking"},addTags:{amenity:"parking",brand:"アップルパーク","brand:en":"Apple Park","brand:ja":"アップルパーク","brand:wikidata":"Q30923801","brand:wikipedia":"ja:アップルパーク",fee:"yes",name:"アップルパーク","name:en":"Apple Park","name:ja":"アップルパーク"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/parking/タイムズ":{name:"タイムズ",icon:"temaki-car_parked",imageURL:"https://graph.facebook.com/Park24.co.jp/picture?type=large",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:"タイムズ","name:en":"Times","name:ja":"タイムズ"},countryCodes:["jp"],terms:["times 24th","タイムズ24"],matchScore:2,suggestion:true},"amenity/parking/トラストパーク":{name:"トラストパーク",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11321776",amenity:"parking"},addTags:{amenity:"parking",brand:"トラストパーク","brand:en":"Trust Park","brand:ja":"トラストパーク","brand:wikidata":"Q11321776","brand:wikipedia":"ja:トラストホールディングス",fee:"yes",name:"トラストパーク","name:en":"Trust Park","name:ja":"トラストパーク"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/parking/パラカ":{name:"パラカ",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11329318",amenity:"parking"},addTags:{amenity:"parking",brand:"パラカ","brand:en":"Paraca","brand:ja":"パラカ","brand:wikidata":"Q11329318","brand:wikipedia":"ja:パラカ",fee:"yes",name:"パラカ","name:en":"Paraca","name:ja":"パラカ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/parking/ル・パルク":{name:"ル・パルク",icon:"temaki-car_parked",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNTT%20EAST%20YOYOGI.JPG&width=100",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11236111",amenity:"parking"},addTags:{amenity:"parking",brand:"ル・パルク","brand:en":"LePerc","brand:ja":"ル・パルク","brand:wikidata":"Q11236111","brand:wikipedia":"ja:NTTル・パルク",fee:"yes",name:"ル・パルク","name:en":"LePerc","name:ja":"ル・パルク"},countryCodes:["jp"],terms:["nttル・パルク"],matchScore:2,suggestion:true},"amenity/parking/三井のリパーク":{name:"三井のリパーク",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11415765",amenity:"parking"},addTags:{amenity:"parking",brand:"三井のリパーク","brand:en":"Mitsui Repark","brand:ja":"三井のリパーク","brand:wikidata":"Q11415765","brand:wikipedia":"ja:名鉄協商",fee:"yes",name:"三井のリパーク","name:en":"Mitsui Repark","name:ja":"三井のリパーク"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/parking/名鉄協商パーキング":{name:"名鉄協商パーキング",icon:"temaki-car_parked",geometry:["area","point","vertex"],tags:{"brand:wikidata":"Q11415765",amenity:"parking"},addTags:{amenity:"parking",brand:"名鉄協商パーキング","brand:en":"Meitetsu Kyosho","brand:ja":"名鉄協商パーキング","brand:wikidata":"Q11415765","brand:wikipedia":"ja:名鉄協商",fee:"yes",name:"名鉄協商パーキング","name:en":"Meitetsu Kyosho","name:ja":"名鉄協商パーキング"},countryCodes:["jp"],terms:[],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",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://pbs.twimg.com/profile_images/725613555530133504/f2lYAu0M_bigger.jpg",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/FarmaElías":{name:"FarmaElías",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q81969487",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"FarmaElías","brand:wikidata":"Q81969487",healthcare:"pharmacy",name:"FarmaElías"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bo"],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 Chávez":{name:"Farmacia Chávez",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q81969919",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Chávez","brand:wikidata":"Q81969919",healthcare:"pharmacy",name:"Farmacia Chávez"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bo"],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/Farmacia Hipermaxi":{name:"Farmacia Hipermaxi",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q81970238",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacia Hipermaxi","brand:wikidata":"Q81970238",healthcare:"pharmacy",name:"Farmacia Hipermaxi"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bo"],terms:[],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 Bolivia":{name:"Farmacias Bolivia",icon:"maki-pharmacy",geometry:["point","area"],tags:{"brand:wikidata":"Q81970584",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacias Bolivia","brand:wikidata":"Q81970584",healthcare:"pharmacy",name:"Farmacias Bolivia"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bo"],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/Farmacorp":{name:"Farmacorp",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/Farmacorp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q81968937",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"Farmacorp","brand:wikidata":"Q81968937",healthcare:"pharmacy",name:"Farmacorp"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["bo"],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:["rowlands"],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/V・ドラッグ":{name:"V・ドラッグ",icon:"maki-pharmacy",imageURL:"https://graph.facebook.com/chubuyakuhin.co.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11367334",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"V・ドラッグ","brand:en":"V・Drug","brand:ja":"V・ドラッグ","brand:wikidata":"Q11367334","brand:wikipedia":"ja:中部薬品",healthcare:"pharmacy",name:"V・ドラッグ","name:en":"V・Drug","name:ja":"V・ドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],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":"Q11299021",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"さくら薬局","brand:ja":"さくら薬局","brand:wikidata":"Q11299021","brand:wikipedia":"ja:クラフト (ドラッグストア)",healthcare:"pharmacy",name:"さくら薬局","name:en":"Sakura 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":"Q11282518",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"アイン薬局","brand:ja":"アイン薬局","brand:wikidata":"Q11282518","brand:wikipedia":"ja:アインファーマシーズ",healthcare:"pharmacy",name:"アイン薬局","name:en":"Ain Pharmaciez","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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOS%20Drug%20store%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11407223",amenity:"pharmacy"},addTags:{alt_name:"OSドラッグ",amenity:"pharmacy",brand:"オーエスドラッグ","brand:en":"OS Drug","brand:ja":"オーエスドラッグ","brand:wikidata":"Q11407223","brand:wikipedia":"ja:協和商事",healthcare:"pharmacy",name:"オーエスドラッグ","name:en":"OS Drug","name:ja":"オーエスドラッグ"},reference:{key:"amenity",value:"pharmacy"},countryCodes:["jp"],terms:["osドラッグ"],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":"Q88383318",amenity:"pharmacy"},addTags:{amenity:"pharmacy",brand:"クオール","brand:en":"Qol","brand:ja":"クオール","brand:wikidata":"Q88383318",healthcare:"pharmacy",name:"クオール","name:en":"Qol","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/1223165776175095808/pmOXWN7H_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/1250697507710984192/jQCj4FcY_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/An Post":{name:"An Post",icon:"maki-post",imageURL:"https://graph.facebook.com/AnPost/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q482490",amenity:"post_office"},addTags:{amenity:"post_office",brand:"An Post","brand:wikidata":"Q482490","brand:wikipedia":"en:An Post",name:"An Post"},countryCodes:["ie"],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",imageURL:"https://graph.facebook.com/YamatoTransportCoLtd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6584353",amenity:"post_office"},addTags:{amenity:"post_office",brand:"ヤマト運輸","brand:en":"Yamato Transport","brand:ja":"ヤマト運輸","brand:wikidata":"Q6584353","brand:wikipedia":"ja:ヤマト運輸",name:"ヤマト運輸","name:en":"Yamato Transport","name:ja":"ヤマト運輸"},countryCodes:["jp"],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/post_office/佐川急便":{name:"佐川急便",icon:"maki-post",imageURL:"https://graph.facebook.com/SAGAWAexpress/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7399082",amenity:"post_office"},addTags:{amenity:"post_office",brand:"佐川急便","brand:en":"Sagawa Express","brand:ja":"佐川急便","brand:wikidata":"Q7399082","brand:wikipedia":"ja:佐川急便",name:"佐川急便","name:en":"Sagawa Express","name:ja":"佐川急便"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/post_office/日本郵便":{name:"日本郵便",icon:"maki-post",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJapan%20Post%20Service%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11509260",amenity:"post_office"},addTags:{amenity:"post_office",brand:"日本郵便","brand:en":"Japan Post","brand:ja":"日本郵便","brand:wikidata":"Q11509260","brand:wikipedia":"ja:日本郵便",name:"日本郵便","name:en":"Japan Post","name:ja":"日本郵便","short_name:en":"JP"},countryCodes:["jp"],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/Schülerhilfe":{name:"Schülerhilfe",icon:"temaki-school",imageURL:"https://graph.facebook.com/Schuelerhilfe/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2259702",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Schülerhilfe","brand:wikidata":"Q2259702","brand:wikipedia":"de:Schülerhilfe",name:"Schülerhilfe"},countryCodes:["at","de"],terms:[],matchScore:2,suggestion:true},"amenity/prep_school/Studienkreis":{name:"Studienkreis",icon:"temaki-school",imageURL:"https://graph.facebook.com/Studienkreis/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2358555",amenity:"prep_school"},addTags:{amenity:"prep_school",brand:"Studienkreis","brand:wikidata":"Q2358555","brand:wikipedia":"de:Studienkreis",name:"Studienkreis"},countryCodes:["at","ch","de","lu"],terms:[],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/pub/つぼ八":{name:"つぼ八",icon:"maki-beer",imageURL:"https://graph.facebook.com/Tsubo8sadosawata/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11272459",amenity:"pub"},addTags:{amenity:"pub",brand:"つぼ八","brand:en":"Tsubohachi","brand:ja":"つぼ八","brand:wikidata":"Q11272459","brand:wikipedia":"ja:つぼ八",name:"つぼ八","name:en":"Tsubohachi","name:ja":"つぼ八"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pub/はなの舞":{name:"はなの舞",icon:"maki-beer",imageURL:"https://graph.facebook.com/Hananomai.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88384850",amenity:"pub"},addTags:{amenity:"pub",brand:"はなの舞","brand:en":"Hananomai","brand:ja":"はなの舞","brand:wikidata":"Q88384850",name:"はなの舞","name:en":"Hananomai","name:ja":"はなの舞"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pub/白木屋":{name:"白木屋",icon:"maki-beer",imageURL:"https://graph.facebook.com/shirokiya/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q489746",amenity:"pub"},addTags:{amenity:"pub",brand:"白木屋","brand:en":"Shirokiya","brand:ja":"白木屋","brand:wikidata":"Q489746","brand:wikipedia":"ja:白木屋 (居酒屋)",name:"白木屋","name:en":"Shirokiya","name:ja":"白木屋"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pub/笑笑":{name:"笑笑",icon:"maki-beer",geometry:["point","area"],tags:{"brand:wikidata":"Q87214327",amenity:"pub"},addTags:{amenity:"pub",brand:"笑笑","brand:en":"Warawara","brand:ja":"笑笑","brand:wikidata":"Q87214327",name:"笑笑","name:en":"Warawara","name:ja":"笑笑"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pub/魚民":{name:"魚民",icon:"maki-beer",geometry:["point","area"],tags:{"brand:wikidata":"Q11673981",amenity:"pub"},addTags:{amenity:"pub",brand:"魚民","brand:en":"Uotami","brand:ja":"魚民","brand:wikidata":"Q11673981",name:"魚民","name:en":"Uotami","name:ja":"魚民"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/pub/鳥貴族":{name:"鳥貴族",icon:"maki-beer",imageURL:"https://graph.facebook.com/torikizoku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11675129",amenity:"pub"},addTags:{amenity:"pub",brand:"鳥貴族","brand:en":"Torikizoku","brand:ja":"鳥貴族","brand:wikidata":"Q11675129","brand:wikipedia":"ja:鳥貴族",name:"鳥貴族","name:en":"Torikizoku","name:ja":"鳥貴族"},countryCodes:["jp"],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/1234884528231124992/PDxR7FCh_bigger.jpg",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",cuisine:"british",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",imageURL:"https://graph.facebook.com/byronrestaurant/picture?type=large",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/1245887210362146817/17A2W1jm_bigger.jpg",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/Country Waffles":{name:"Country Waffles",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q86151490",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Country Waffles","brand:wikidata":"Q86151490",cuisine:"breakfast",name:"Country Waffles"},countryCodes:["us"],terms:[],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/Fatz":{name:"Fatz",icon:"maki-restaurant",geometry:["point","area"],tags:{"brand:wikidata":"Q5424504",amenity:"restaurant",cuisine:"american"},addTags:{amenity:"restaurant",brand:"Fatz","brand:wikidata":"Q5424504","brand:wikipedia":"en:Fatz",cuisine:"american",name:"Fatz"},reference:{key:"cuisine",value:"american"},countryCodes:["us"],terms:[],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",imageURL:"https://graph.facebook.com/guzmanygomez/picture?type=large",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/416588785059565/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q56154673",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Handmade Burger Co.","brand:wikidata":"Q56154673","brand:wikipedia":"en:Handmade Burger Co",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/kelseysroadhouse/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/Miller & Carter":{name:"Miller & Carter",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/493698931025403906/BENrWear_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q87067401",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Miller & Carter","brand:wikidata":"Q87067401",cuisine:"steak",name:"Miller & Carter"},countryCodes:["gb"],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/1225863158331592705/7I53DS40_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/Pepper Lunch":{name:"Pepper Lunch",icon:"maki-restaurant",imageURL:"https://pbs.twimg.com/profile_images/1222436486/main_px3b_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1016072",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"Pepper Lunch","brand:wikidata":"Q1016072","brand:wikipedia":"en:Pepper Lunch",cuisine:"steak",name:"Pepper Lunch"},terms:["ペッパーランチ"],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 Paï":{name:"Pizza Paï",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/PizzaPai/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3389501",amenity:"restaurant",cuisine:"pizza"},addTags:{amenity:"restaurant",brand:"Pizza Paï","brand:wikidata":"Q3389501","brand:wikipedia":"fr:PizzaPai",cuisine:"pizza",name:"Pizza Paï"},reference:{key:"cuisine",value:"pizza"},countryCodes:["fr"],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/Ristorante Del Arte":{name:"Ristorante Del Arte",icon:"maki-restaurant",imageURL:"https://graph.facebook.com/restaurants.delarte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89208262",amenity:"restaurant",cuisine:"italian"},addTags:{amenity:"restaurant",brand:"Ristorante Del Arte","brand:wikidata":"Q89208262",cuisine:"italian",name:"restaurant"},reference:{key:"cuisine",value:"italian"},countryCodes:["fr"],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/1243496932510781447/UCN842qE_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/pizza/Wildwood":{name:"Wildwood",icon:"maki-restaurant-pizza",imageURL:"https://graph.facebook.com/wildwoodfood/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85300869",amenity:"restaurant",cuisine:"grill;pasta;pizza"},addTags:{amenity:"restaurant",brand:"Wildwood","brand:wikidata":"Q85300869",cuisine:"grill;pasta;pizza",name:"Wildwood"},reference:{key:"cuisine",value:"pizza"},countryCodes:["gb"],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://pbs.twimg.com/profile_images/1040032799674097664/nydBpFO0_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q87724264",amenity:"restaurant"},addTags:{amenity:"restaurant",brand:"しゃぶ葉","brand:ja":"しゃぶ葉","brand:wikidata":"Q87724264",cuisine:"buffet",name:"しゃぶ葉","name:en":"Syabuyo","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/1231208678855831552/9xM19ZXv_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q87724117",amenity:"restaurant",cuisine:"western;japanese"},addTags:{amenity:"restaurant",brand:"ガスト","brand:en":"Gusto","brand:ja":"ガスト","brand:wikidata":"Q87724117",cuisine:"western;japanese",name:"ガスト","name:en":"Gusto","name:ja":"ガスト"},reference:{key:"cuisine",value:"japanese"},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",imageURL:"https://pbs.twimg.com/profile_images/882903341038161921/2hoP7sIY_bigger.jpg",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/eakramen/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88318612",amenity:"restaurant",cuisine:"noodle"},addTags:{amenity:"restaurant",brand:"町田商店","brand:en":"Machida Shouten","brand:jp":"町田商店","brand:wikidata":"Q88318612",cuisine:"noodle",name:"町田商店","name:en":"Machida Shouten","name:jp":"町田商店"},reference:{key:"cuisine",value:"noodle"},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/sushi/元気寿司":{name:"元気寿司",icon:"temaki-temaki",imageURL:"https://pbs.twimg.com/profile_images/995176993808269312/wgdlRl7m_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q5533323",amenity:"restaurant",cuisine:"sushi"},addTags:{amenity:"restaurant",brand:"元気寿司","brand:en":"Genki Sushi","brand:ja":"元気寿司","brand:wikidata":"Q5533323","brand:wikipedia":"ja:元気寿司",cuisine:"sushi",name:"元気寿司","name:en":"Genki Sushi","name:ja":"元気寿司"},reference:{key:"cuisine",value:"sushi"},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",imageURL:"https://pbs.twimg.com/profile_images/882903341038161921/2hoP7sIY_bigger.jpg",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",imageURL:"https://graph.facebook.com/GyuKakuJBBQ/picture?type=large",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","gb","us"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/Amazonロッカー":{name:"Amazonロッカー",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:{alt_name:"アマゾン・ロッカー",amenity:"vending_machine",brand:"Amazonロッカー","brand:en":"Amazon Locker","brand:ja":"Amazonロッカー","brand:wikidata":"Q16974764","brand:wikipedia":"ja:Amazonロッカー",name:"Amazonロッカー","name:en":"Amazon Locker","name:ja":"Amazonロッカー",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["jp"],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/cigarettes/JT":{name:"JT",icon:"temaki-vending_cigarettes",imageURL:"https://pbs.twimg.com/profile_images/601769729485864961/sO8VLHX-_bigger.png",geometry:["point","vertex"],tags:{"brand:wikidata":"Q898568",amenity:"vending_machine",vending:"cigarettes"},addTags:{amenity:"vending_machine",brand:"JT","brand:wikidata":"Q898568","brand:wikipedia":"ja:日本たばこ産業",name:"JT",official_name:"日本たばこ産業","official_name:en":"Japan Tobacco",vending:"cigarettes"},reference:{key:"vending",value:"cigarettes"},countryCodes:["jp"],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/PUDOステーション":{name:"PUDOステーション",icon:"temaki-vending_lockers",imageURL:"https://pbs.twimg.com/profile_images/788879051364573184/M1lHJhaS_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q86738066",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{alt_name:"プドー・ステーション",amenity:"vending_machine",brand:"プドー","brand:en":"PUDO","brand:ja":"プドー","brand:wikidata":"Q86738066","brand:wikipedia":"ja:Packcity Japan",name:"PUDOステーション","name:en":"PUDO Station","name:ja":"PUDOステーション",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["jp"],terms:["プドー・ステーション"],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/coffee/UCC":{name:"UCC",icon:"temaki-vending_hot_drink",imageURL:"https://graph.facebook.com/UccUeshimaCoffee/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1185060",amenity:"vending_machine",vending:"coffee"},addTags:{amenity:"vending_machine",brand:"UCC","brand:wikidata":"Q1185060","brand:wikipedia":"ja:UCC上島珈琲",name:"UCC",official_name:"上島珈琲","official_name:en":"Ueshima Coffee","official_name:ja":"上島珈琲",vending:"coffee"},reference:{key:"vending",value:"coffee"},countryCodes:["jp"],terms:["ucc上島珈琲"],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/い・ろ・は・す":{name:"い・ろ・は・す",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/1098945872665006081/r_jFL17c_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11260234",amenity:"vending_machine",vending:"drinks"},addTags:{"alt_name:en":"ILOHAS",amenity:"vending_machine",brand:"い・ろ・は・す","brand:en":"I Lohas","brand:ja":"い・ろ・は・す","brand:wikidata":"Q11260234","brand:wikipedia":"ja:い・ろ・は・す","drink:water":"yes",name:"い・ろ・は・す","name:en":"I Lohas","name:ja":"い・ろ・は・す",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:["i・lohas"],matchScore:2,suggestion:true},"amenity/vending_machine/food/だし道楽":{name:"だし道楽",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/1301628839/_______11.03.05__bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q60989429",amenity:"vending_machine",vending:"food"},addTags:{amenity:"vending_machine",brand:"だし道楽","brand:en":"Dashi Douraku","brand:ja":"だし道楽","brand:wikidata":"Q60989429","brand:wikipedia":"ja:だし道楽","drink:brewery":"yes",name:"だし道楽","name:en":"Dashi Douraku","name:ja":"だし道楽",vending:"food"},reference:{key:"vending",value:"food"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/parcel_pickup/はこぽす":{name:"はこぽす",icon:"temaki-vending_lockers",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11509261",amenity:"vending_machine",vending:"parcel_pickup"},addTags:{amenity:"vending_machine",brand:"はこぽす","brand:en":"Hakopost","brand:ja":"はこぽす","brand:wikidata":"Q11509261","brand:wikipedia":"ja:日本郵便輸送",name:"はこぽす","name:en":"Hakopost","name:ja":"はこぽす",vending:"parcel_pickup"},reference:{key:"vending",value:"parcel_pickup"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/アキュア":{name:"アキュア",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/936410984486285314/99cOuXnb_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11226260",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"アキュア","brand:en":"Acure","brand:ja":"アキュア","brand:wikidata":"Q11226260","brand:wikipedia":"ja:JR東日本ウォータービジネス",name:"アキュア","name:en":"Acure","name:ja":"アキュア"},countryCodes:["jp"],terms:["acureの自販機"],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/アサヒビール":{name:"アサヒビール",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/973936797158752257/bPRcecBW_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q720479",amenity:"vending_machine",vending:"drinks"},addTags:{"alt_name:en":"Asahi Beer",amenity:"vending_machine",brand:"アサヒビール","brand:en":"Asahi Breweries","brand:ja":"アサヒビール","brand:wikidata":"Q720479","brand:wikipedia":"ja:アサヒビール","drink:brewery":"yes",name:"アサヒビール","name:en":"Asahi Breweries","name:ja":"アサヒビール",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/coffee/アペックス":{name:"アペックス",icon:"temaki-vending_hot_drink",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAPEX%20Corporation%20logo.svg&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11284782",amenity:"vending_machine",vending:"coffee"},addTags:{amenity:"vending_machine",brand:"アペックス","brand:en":"Apex","brand:ja":"アペックス","brand:wikidata":"Q11284782","brand:wikipedia":"ja:アペックス (企業)",name:"アペックス","name:en":"Apex","name:ja":"アペックス",vending:"coffee"},reference:{key:"vending",value:"coffee"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/food/カップヌードル":{name:"カップヌードル",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/604091541892694016/KKAI5OpD_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1143401",amenity:"vending_machine",vending:"food"},addTags:{amenity:"vending_machine",brand:"カップヌードル","brand:en":"Cup Noodle","brand:ja":"カップヌードル","brand:wikidata":"Q1143401","brand:wikipedia":"ja:カップヌードル",name:"カップヌードル","name:en":"Cup Noodle","name:ja":"カップヌードル",vending:"food"},reference:{key:"vending",value:"food"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/カルピス":{name:"カルピス",icon:"temaki-vending_cold_drink",imageURL:"https://graph.facebook.com/calpis.jp/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1027454",amenity:"vending_machine",vending:"drinks"},addTags:{"alt_name:en":"Calpico",amenity:"vending_machine",brand:"カルピス","brand:en":"Calpis","brand:ja":"カルピス","brand:wikidata":"Q1027454","brand:wikipedia":"ja:カルピス",name:"カルピス","name:en":"Calpis","name:ja":"カルピス",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/キリンビバレッジ":{name:"キリンビバレッジ",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/1196231561202429952/QNGBtBIT_bigger.png",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1833953",amenity:"vending_machine",vending:"drinks"},addTags:{alt_name:"キリンBV",amenity:"vending_machine",brand:"キリンビバレッジ","brand:en":"Kirin Beverage","brand:ja":"キリンビバレッジ","brand:wikidata":"Q1833953","brand:wikipedia":"ja:キリンビバレッジ","drink:tea":"yes",name:"キリンビバレッジ","name:en":"Kirin Beverage","name:ja":"キリンビバレッジ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:["キリンbv"],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/キリンビール":{name:"キリンビール",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/1018867579438358528/FJP545uf_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q13403399",amenity:"vending_machine",vending:"drinks"},addTags:{"alt_name:en":"Kirin Beer",amenity:"vending_machine",brand:"キリンビール","brand:en":"Kirin Brewery","brand:ja":"キリンビール","brand:wikidata":"Q13403399","brand:wikipedia":"ja:麒麟麦酒","drink:brewery":"yes",name:"キリンビール","name:en":"Kirin Brewery","name:ja":"キリンビール",official_name:"麒麟麦酒",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],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":"yes",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/サントリー":{name:"サントリー",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/1231356354360512512/T8myLk6B_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q1345267",amenity:"vending_machine",vending:"drinks"},addTags:{amenity:"vending_machine",brand:"サントリー","brand:en":"Suntory","brand:ja":"サントリー","brand:wikidata":"Q1345267","brand:wikipedia":"ja:サントリー",name:"サントリー","name:en":"Suntory","name:ja":"サントリー",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/coffee/ジョージア":{name:"ジョージア",icon:"temaki-vending_hot_drink",imageURL:"https://pbs.twimg.com/profile_images/378800000398142432/4ac2b7d1085d6e1446521a0a497c14a1_bigger.png",geometry:["point","vertex"],tags:{"brand:wikidata":"Q5547323",amenity:"vending_machine",vending:"coffee"},addTags:{amenity:"vending_machine",brand:"ジョージア","brand:en":"Georgia","brand:ja":"ジョージア","brand:wikidata":"Q5547323","brand:wikipedia":"ja:ジョージア (缶コーヒー)",name:"ジョージア","name:en":"Georgia","name:ja":"ジョージア",vending:"coffee"},reference:{key:"vending",value:"coffee"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ice_cream/セブンティーンアイス":{name:"セブンティーンアイス",icon:"temaki-vending_ice_cream",imageURL:"https://pbs.twimg.com/profile_images/979573400946360321/cksIFGZn_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11314427",amenity:"vending_machine",vending:"ice_cream"},addTags:{amenity:"vending_machine",brand:"セブンティーンアイス","brand:en":"Seventeen Ice","brand:ja":"セブンティーンアイス","brand:wikidata":"Q11314427","brand:wikipedia":"ja:セブンティーンアイス",name:"セブンティーンアイス","name:en":"Seventeen Ice","name:ja":"セブンティーンアイス",vending:"ice_cream"},reference:{key:"vending",value:"ice_cream"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/ダイドードリンコ":{name:"ダイドードリンコ",icon:"temaki-vending_cold_drink",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDyDo%20DRINCO%20logo.svg&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11316814",amenity:"vending_machine",vending:"drinks"},addTags:{amenity:"vending_machine",brand:"ダイドー","brand:en":"DyDo","brand:ja":"ダイドー","brand:wikidata":"Q11316814","brand:wikipedia":"ja:ダイドードリンコ","drink:soft_drink":"yes",name:"ダイドードリンコ","name:en":"DyDo Drinco","name:ja":"ダイドードリンコ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:["dydoドリンコ","ダイドー"],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/チェリオ":{name:"チェリオ",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/1241958420204228611/k2rp6A06_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q5089350",amenity:"vending_machine",vending:"drinks"},addTags:{amenity:"vending_machine",brand:"チェリオ","brand:en":"Cheerio","brand:ja":"チェリオ","brand:wikidata":"Q5089350","brand:wikipedia":"ja:チェリオ","drink:soft_drink":"yes",name:"チェリオ","name:en":"Cheerio","name:ja":"チェリオ",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/food/ドール":{name:"ドール",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/Dole/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q492747",amenity:"vending_machine",vending:"food"},addTags:{amenity:"vending_machine",brand:"ドール","brand:en":"Dole","brand:ja":"ドール","brand:wikidata":"Q492747","brand:wikipedia":"ja:ドール・フード・カンパニー",name:"ドール","name:en":"Dole","name:ja":"ドール",vending:"food"},reference:{key:"vending",value:"food"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/food/ニチレイフーズ":{name:"ニチレイフーズ",icon:"temaki-vending_machine",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FNICHIREI%20Logo.svg&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q4921527",amenity:"vending_machine",vending:"food"},addTags:{"alt_name:en":"Nichirei 24 Hour Hot Menu Casual Frozen Foods",amenity:"vending_machine",brand:"ニチレイフーズ","brand:en":"Nichirei Foods","brand:ja":"ニチレイフーズ","brand:wikidata":"Q4921527","brand:wikipedia":"ja:ニチレイ",name:"ニチレイフーズ","name:en":"Nichirei Foods","name:ja":"ニチレイフーズ",vending:"food"},reference:{key:"vending",value:"food"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ポッカサッポロ":{name:"ポッカサッポロ",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/1231348008400248832/ocgMAmg2_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/vending_machine/メトロの缶詰":{name:"メトロの缶詰",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/679938852216152065/W2kOEeg7_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11343895",amenity:"vending_machine"},addTags:{"alt_name:en":"Metocan Shop",amenity:"vending_machine",brand:"メトロの缶詰","brand:en":"Metro Commerce","brand:ja":"メトロの缶詰","brand:wikidata":"Q11343895","brand:wikipedia":"ja:メトロコマース",name:"メトロの缶詰","name:en":"Metro Commerce","name:ja":"メトロの缶詰",vending:"gift"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ヤクルト":{name:"ヤクルト",icon:"temaki-vending_machine",imageURL:"https://pbs.twimg.com/profile_images/1096332520969318400/X0iPDq5Q_bigger.png",geometry:["point","vertex"],tags:{"brand:wikidata":"Q16172223",amenity:"vending_machine"},addTags:{amenity:"vending_machine",brand:"ヤクルト","brand:en":"Yakult","brand:ja":"ヤクルト","brand:wikidata":"Q16172223","brand:wikipedia":"ja:ヤクルト本社","drink:milk":"yes",name:"ヤクルト","name:en":"Yakult","name:ja":"ヤクルト",vending:"milk"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/ice_cream/ロッテアイス":{name:"ロッテアイス",icon:"temaki-vending_ice_cream",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLotte%20logo.svg&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q24886018",amenity:"vending_machine",vending:"ice_cream"},addTags:{amenity:"vending_machine",brand:"ロッテアイス","brand:en":"Lotte Ice Cream","brand:ja":"ロッテアイス","brand:wikidata":"Q24886018","brand:wikipedia":"ja:ロッテアイス",name:"ロッテアイス","name:en":"Lotte Ice Cream","name:ja":"ロッテアイス",vending:"ice_cream"},reference:{key:"vending",value:"ice_cream"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/drinks/伊藤園":{name:"伊藤園",icon:"temaki-vending_cold_drink",imageURL:"https://pbs.twimg.com/profile_images/690048455843024900/UkLiXQJu_bigger.jpg",geometry:["point","vertex"],tags:{"brand:wikidata":"Q3079325",amenity:"vending_machine",vending:"drinks"},addTags:{"alt_name:en":"ITOEN",amenity:"vending_machine",brand:"伊藤園","brand:en":"Ito En","brand:ja":"伊藤園","brand:wikidata":"Q3079325","brand:wikipedia":"ja:伊藤園","drink:tea":"yes",name:"伊藤園","name:en":"Ito En","name:ja":"伊藤園",vending:"drinks"},reference:{key:"vending",value:"drinks"},countryCodes:["jp"],terms:["ito en"],matchScore:2,suggestion:true},"amenity/vending_machine/food/大塚食品":{name:"大塚食品",icon:"temaki-vending_machine",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FOtsuka%20Holdings%20logo.svg&width=100",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11434124",amenity:"vending_machine",vending:"food"},addTags:{amenity:"vending_machine",brand:"大塚","brand:en":"Otsuka","brand:ja":"大塚","brand:wikidata":"Q11434124","brand:wikipedia":"ja:大塚食品",name:"大塚食品","name:en":"Otsuka Foods","name:ja":"大塚食品",vending:"food"},reference:{key:"vending",value:"food"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"amenity/vending_machine/food/明治":{name:"明治",icon:"temaki-vending_machine",imageURL:"https://graph.facebook.com/MeijiCoLtd/picture?type=large",geometry:["point","vertex"],tags:{"brand:wikidata":"Q11512281",amenity:"vending_machine",vending:"food"},addTags:{amenity:"vending_machine",brand:"明治","brand:en":"Meiji","brand:ja":"明治","brand:wikidata":"Q11512281","brand:wikipedia":"ja:明治 (企業)",name:"明治","name:en":"Meiji","name:ja":"明治",vending:"food"},reference:{key:"vending",value:"food"},countryCodes:["jp"],terms:[],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/audiologist/Imperial Hearing":{name:"Imperial Hearing",icon:"maki-hospital",imageURL:"https://graph.facebook.com/imperialhearingltdgl50/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q86997819",healthcare:"audiologist"},addTags:{brand:"Imperial Hearing","brand:wikidata":"Q86997819",healthcare:"audiologist",name:"Imperial Hearing"},countryCodes:["gb"],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/San Diego Blood Bank":{name:"San Diego Blood Bank",icon:"maki-blood-bank",imageURL:"https://graph.facebook.com/sdbloodbank/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87770169",healthcare:"blood_donation"},addTags:{brand:"San Diego Blood Bank","brand:wikidata":"Q87770169",healthcare:"blood_donation",name:"San Diego Blood Bank",short_name:"SDBB"},countryCodes:["us"],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/adult_gaming_centre/ガイア":{name:"ガイア",icon:"temaki-casino",imageURL:"https://graph.facebook.com/Gaia.amusement/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11295831",leisure:"adult_gaming_centre"},addTags:{brand:"ガイア","brand:en":"GAIA","brand:ja":"ガイア","brand:wikidata":"Q11295831","brand:wikipedia":"ja:ガイア (パチンコ)",gambling:"pachinko",leisure:"adult_gaming_centre",name:"ガイア","name:en":"GAIA","name:ja":"ガイア"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/adult_gaming_centre/ダイナム":{name:"ダイナム",icon:"temaki-casino",imageURL:"https://pbs.twimg.com/profile_images/957749330424709120/Lnm45Dp7_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q10846977",leisure:"adult_gaming_centre"},addTags:{brand:"ダイナム","brand:en":"Dynam","brand:ja":"ダイナム","brand:wikidata":"Q10846977","brand:wikipedia":"ja:ダイナム",gambling:"pachinko",leisure:"adult_gaming_centre",name:"ダイナム","name:en":"Dynam","name:ja":"ダイナム"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/adult_gaming_centre/マルハン":{name:"マルハン",icon:"temaki-casino",imageURL:"https://graph.facebook.com/maruhan.fan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1905948",leisure:"adult_gaming_centre"},addTags:{brand:"マルハン","brand:en":"Maruhan","brand:ja":"マルハン","brand:wikidata":"Q1905948","brand:wikipedia":"ja:マルハン",gambling:"pachinko",leisure:"adult_gaming_centre",name:"マルハン","name:en":"Maruhan","name:ja":"マルハン"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/amusement_arcade/アドアーズ":{name:"アドアーズ",icon:"maki-gaming",imageURL:"https://pbs.twimg.com/profile_images/875637206055960576/Hjryy4Le_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q54843532",leisure:"amusement_arcade"},addTags:{brand:"アドアーズ","brand:en":"Adores","brand:ja":"アドアーズ","brand:wikidata":"Q54843532","brand:wikipedia":"ja:アドアーズ",leisure:"amusement_arcade",name:"アドアーズ","name:en":"Adores","name:ja":"アドアーズ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/amusement_arcade/アピナ":{name:"アピナ",icon:"maki-gaming",geometry:["point","area"],tags:{"brand:wikidata":"Q55385192",leisure:"amusement_arcade"},addTags:{brand:"アピナ","brand:en":"Apina","brand:ja":"アピナ","brand:wikidata":"Q55385192","brand:wikipedia":"ja:共和コーポレーション",leisure:"amusement_arcade",name:"アピナ","name:en":"Apina","name:ja":"アピナ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/amusement_arcade/クラブセガ":{name:"クラブセガ",icon:"maki-gaming",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSega%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q7446141",leisure:"amusement_arcade"},addTags:{alt_name:"セガワールド","alt_name:en":"Sega World",brand:"クラブセガ","brand:en":"Club Sega","brand:ja":"クラブセガ","brand:wikidata":"Q7446141","brand:wikipedia":"ja:セガ エンタテインメント",leisure:"amusement_arcade",name:"クラブセガ","name:en":"Club Sega","name:ja":"クラブセガ"},countryCodes:["jp"],terms:["クラブsega","セガ","セガワールド"],matchScore:2,suggestion:true},"leisure/amusement_arcade/タイトーステーション":{name:"タイトーステーション",icon:"maki-gaming",imageURL:"https://graph.facebook.com/TAITO.Eng/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1054844",leisure:"amusement_arcade"},addTags:{brand:"タイトーステーション","brand:en":"Taito Station","brand:ja":"タイトーステーション","brand:wikidata":"Q1054844","brand:wikipedia":"ja:タイトー",leisure:"amusement_arcade",name:"タイトーステーション","name:en":"Taito Station","name:ja":"タイトーステーション"},countryCodes:["jp"],terms:["タイトー"],matchScore:2,suggestion:true},"leisure/amusement_arcade/ナムコ":{name:"ナムコ",icon:"maki-gaming",imageURL:"https://pbs.twimg.com/profile_images/1078705639306579969/4Ago6TmH_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q309996",leisure:"amusement_arcade"},addTags:{brand:"ナムコ","brand:en":"NAMCO","brand:ja":"ナムコ","brand:wikidata":"Q309996","brand:wikipedia":"ja:バンダイナムコアミューズメント",leisure:"amusement_arcade",name:"ナムコ","name:en":"NAMCO","name:ja":"ナムコ"},countryCodes:["jp"],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/bowling_alley/ラウンドワン":{name:"ラウンドワン",icon:"temaki-bowling",imageURL:"https://graph.facebook.com/Round1.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11346634",leisure:"bowling_alley"},addTags:{brand:"ラウンドワン","brand:en":"ROUND1","brand:ja":"ラウンドワン","brand:wikidata":"Q11346634","brand:wikipedia":"ja:ラウンドワン",leisure:"bowling_alley",name:"ラウンドワン","name:en":"ROUND1","name:ja":"ラウンドワン"},countryCodes:["jp"],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",imageURL:"https://graph.facebook.com/BlinkFitness/picture?type=large",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/Pure Barre":{name:"Pure Barre",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/PureBarre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q86707084",leisure:"fitness_centre"},addTags:{brand:"Pure Barre","brand:wikidata":"Q86707084",leisure:"fitness_centre",name:"Pure Barre"},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/fitness_centre/コナミスポーツクラブ":{name:"コナミスポーツクラブ",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/sportsclub.konami/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11302286",leisure:"fitness_centre"},addTags:{brand:"コナミスポーツクラブ","brand:en":"Konami Sports Club","brand:ja":"コナミスポーツクラブ","brand:wikidata":"Q11302286","brand:wikipedia":"ja:コナミスポーツ (企業)",leisure:"fitness_centre",name:"コナミスポーツクラブ","name:en":"Konami Sports Club","name:ja":"コナミスポーツクラブ"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/ジョイフィット":{name:"ジョイフィット",icon:"fas-dumbbell",imageURL:"https://graph.facebook.com/enjoy.joyfit/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11310515",leisure:"fitness_centre"},addTags:{brand:"ジョイフィット","brand:en":"JOYFIT","brand:ja":"ジョイフィット","brand:wikidata":"Q11310515","brand:wikipedia":"ja:ジョイフィット",leisure:"fitness_centre",name:"ジョイフィット","name:en":"JOYFIT","name:ja":"ジョイフィット"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"leisure/fitness_centre/ティップネス":{name:"ティップネス",icon:"fas-dumbbell",imageURL:"https://pbs.twimg.com/profile_images/875646398636503040/Uln2y1z4_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11318940",leisure:"fitness_centre"},addTags:{brand:"ティップネス","brand:en":"Tipness","brand:ja":"ティップネス","brand:wikidata":"Q11318940","brand:wikipedia":"ja:ティップネス",leisure:"fitness_centre",name:"ティップネス","name:en":"Tipness","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},"leisure/trampoline_park/Flip Out":{name:"Flip Out",icon:"fas-chevron-circle-up",imageURL:"https://graph.facebook.com/FlipOutUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87271194",leisure:"trampoline_park"},addTags:{brand:"Flip Out","brand:wikidata":"Q87271194",leisure:"trampoline_park",name:"Flip Out"},countryCodes:["gb"],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/Spaces":{name:"Spaces",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/spacesworks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87629680",office:"coworking"},addTags:{brand:"Spaces","brand:wikidata":"Q87629680",name:"Spaces",office:"coworking"},reference:{key:"amenity",value:"coworking_space"},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"},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/Cordant People":{name:"Cordant People",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/CordantPeople/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85311605",office:"employment_agency"},addTags:{brand:"Cordant People","brand:wikidata":"Q85311605",name:"Cordant People",office:"employment_agency"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/Driver Hire":{name:"Driver Hire",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/DriverHireUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89404688",office:"employment_agency"},addTags:{brand:"Driver Hire","brand:wikidata":"Q89404688",name:"Driver Hire",office:"employment_agency"},countryCodes:["gb"],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/Office Angels":{name:"Office Angels",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/OArecruitment/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89403503",office:"employment_agency"},addTags:{brand:"Office Angels","brand:wikidata":"Q89403503",name:"Office Angels",office:"employment_agency"},countryCodes:["gb"],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/employment_agency/ハローワーク":{name:"ハローワーク",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/wakaharo.tokyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5016578",office:"employment_agency"},addTags:{brand:"ハローワーク","brand:en":"Hello Work","brand:ja":"ハローワーク","brand:wikidata":"Q5016578","brand:wikipedia":"ja:公共職業安定所",name:"ハローワーク","name:en":"Hello Work","name:ja":"ハローワーク",office:"employment_agency",official_name:"公共職業安定所","official_name:en":"Public Employment Security Office"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/employment_agency/パソナ":{name:"パソナ",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/pasona/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7142290",office:"employment_agency"},addTags:{brand:"パソナ","brand:en":"Pasona","brand:ja":"パソナ","brand:wikidata":"Q7142290","brand:wikipedia":"ja:パソナ",name:"パソナ","name:en":"Pasona","name:ja":"パソナ",office:"employment_agency"},countryCodes:["jp"],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/Bradleys":{name:"Bradleys",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/BradleysGroup/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83738286",office:"estate_agent"},addTags:{brand:"Bradleys","brand:wikidata":"Q83738286",name:"Bradleys",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/Mayfair Town & Country":{name:"Mayfair Town & Country",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/MayfairTownCountry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90269289",office:"estate_agent"},addTags:{brand:"Mayfair Town & Country","brand:wikidata":"Q90269289",name:"Mayfair Town & Country",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/Stags":{name:"Stags",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/StagsProperty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q91028631",office:"estate_agent"},addTags:{brand:"Stags","brand:wikidata":"Q91028631",name:"Stags",office:"estate_agent"},countryCodes:["gb"],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/Symonds & Sampson":{name:"Symonds & Sampson",icon:"temaki-real_estate_agency",imageURL:"https://graph.facebook.com/SymondsandSampson/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90262955",office:"estate_agent"},addTags:{brand:"Symonds & Sampson","brand:wikidata":"Q90262955",name:"Symonds & Sampson",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",geometry:["point","area"],tags:{"brand:wikidata":"Q11315877",office:"estate_agent"},addTags:{brand:"タウンハウジング","brand:en":"Townhousing","brand:ja":"タウンハウジング","brand:wikidata":"Q11315877","brand:wikipedia":"ja:タウンハウジング",name:"タウンハウジング","name:en":"Townhousing","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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMitsubishi-UFJ-Financial-Group-Logo.svg&width=100",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/NM Money":{name:"NM Money",icon:"maki-suitcase",imageURL:"https://graph.facebook.com/NMmoney/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q86529747",office:"financial_advisor"},addTags:{brand:"NM Money","brand:wikidata":"Q86529747",name:"NM Money",office:"financial_advisor"},countryCodes:["gb"],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/A-Plan Insurance":{name:"A-Plan Insurance",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/aplaninsurance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87070013",office:"insurance"},addTags:{brand:"A-Plan Insurance","brand:wikidata":"Q87070013",name:"A-Plan Insurance",office:"insurance"},countryCodes:["gb"],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/CESCE":{name:"CESCE",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q5737049",office:"insurance"},addTags:{brand:"CESCE","brand:wikidata":"Q5737049","brand:wikipedia":"es:CESCE",name:"CESCE",office:"insurance",official_name:"Compañía Española de Seguros de Crédito a la Exportación"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/Caser":{name:"Caser",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q5756057",office:"insurance"},addTags:{brand:"Caser","brand:wikidata":"Q5756057","brand:wikipedia":"es:Caser",name:"Caser",office:"insurance"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/Catalana Occidente":{name:"Catalana Occidente",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCatalana%20Occidente%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q5936881",office:"insurance"},addTags:{brand:"Catalana Occidente","brand:wikidata":"Q5936881","brand:wikipedia":"es:Catalana Occidente",name:"Catalana Occidente",office:"insurance"},countryCodes:["es"],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/ENSA":{name:"ENSA",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/ENSASegurosAngola/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5323726",office:"insurance"},addTags:{brand:"ENSA","brand:wikidata":"Q5323726","brand:wikipedia":"en:ENSA – Seguros de Angola",name:"ENSA",office:"insurance"},countryCodes:["ao"],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/HUK-Coburg":{name:"HUK-Coburg",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/HUKCOBURG/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1566111",office:"insurance"},addTags:{brand:"HUK-Coburg","brand:wikidata":"Q1566111","brand:wikipedia":"de:HUK-Coburg",name:"HUK-Coburg",office:"insurance"},countryCodes:["de"],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/LaLux":{name:"LaLux",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/LaLuxembourgeoise/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13103680",office:"insurance"},addTags:{brand:"LaLux","brand:wikidata":"Q13103680","brand:wikipedia":"lb:La Luxembourgeoise",name:"LaLux",office:"insurance"},countryCodes:["lu"],terms:["la luxembourgeoise"],matchScore:2,suggestion:true},"office/insurance/Liberty Seguros":{name:"Liberty Seguros",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q3178929",office:"insurance"},addTags:{brand:"Liberty Seguros","brand:wikidata":"Q3178929","brand:wikipedia":"es:Liberty Seguros",name:"Liberty Seguros",office:"insurance"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"office/insurance/Línea Directa":{name:"Línea Directa",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q325156",office:"insurance"},addTags:{brand:"Línea Directa","brand:wikidata":"Q325156","brand:wikipedia":"es:Línea Directa",name:"Línea Directa",office:"insurance"},countryCodes:["es"],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://pbs.twimg.com/profile_images/1185934397305847809/c6lv4Szo_bigger.jpg",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/Mutua Madrileña":{name:"Mutua Madrileña",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMutua%20Madrile%C3%B1a%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4888750",office:"insurance"},addTags:{brand:"Mutua Madrileña","brand:wikidata":"Q4888750","brand:wikipedia":"es:Mutua Madrileña",name:"Mutua Madrileña",office:"insurance"},countryCodes:["es"],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/Pelayo":{name:"Pelayo",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q16617805",office:"insurance"},addTags:{brand:"Pelayo","brand:wikidata":"Q16617805","brand:wikipedia":"es:Pelayo Seguros",name:"Pelayo",office:"insurance"},countryCodes:["es"],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/Santa Lucía":{name:"Santa Lucía",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSantalucia%20Seguros%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6120481",office:"insurance"},addTags:{brand:"Santa Lucía","brand:wikidata":"Q6120481","brand:wikipedia":"es:Santa Lucía",name:"Santa Lucía",office:"insurance"},countryCodes:["es"],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/VidaCaixa":{name:"VidaCaixa",icon:"temaki-briefcase_shield",geometry:["point","area"],tags:{"brand:wikidata":"Q11705079",office:"insurance"},addTags:{brand:"VidaCaixa","brand:wikidata":"Q11705079","brand:wikipedia":"es:VidaCaixa",name:"VidaCaixa",office:"insurance"},countryCodes:["es"],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",geometry:["point","area"],tags:{"brand:wikidata":"Q64606273",office:"insurance"},addTags:{brand:"Белгосстрах","brand:be":"Белдзяржстрах","brand:en":"Belgosstrakh","brand:ru":"Белгосстрах","brand:wikidata":"Q64606273",name:"Белгосстрах","name:be":"Белдзяржстрах","name:en":"Belgosstrakh","name:ru":"Белгосстрах",office:"insurance"},countryCodes:["by"],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://graph.facebook.com/soglasie.sk/picture?type=large",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/insurance/日本生命":{name:"日本生命",icon:"temaki-briefcase_shield",imageURL:"https://graph.facebook.com/nihonseimei/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q519611",office:"insurance"},addTags:{"alt_name:en":"Nissay",brand:"日本生命","brand:en":"Nippon Life","brand:ja":"日本生命","brand:wikidata":"Q519611","brand:wikipedia":"ja:日本生命保険",name:"日本生命","name:en":"Nippon Life","name:ja":"日本生命",office:"insurance"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/insurance/明治安田生命":{name:"明治安田生命",icon:"temaki-briefcase_shield",imageURL:"https://pbs.twimg.com/profile_images/1044889350721261568/rOkH90FO_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q174081",office:"insurance"},addTags:{brand:"明治安田生命","brand:en":"Meiji Yasuda Life","brand:ja":"明治安田生命","brand:wikidata":"Q174081","brand:wikipedia":"ja:明治安田生命保険",name:"明治安田生命","name:en":"Meiji Yasuda Life","name:ja":"明治安田生命",office:"insurance"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"office/insurance/第一生命":{name:"第一生命",icon:"temaki-briefcase_shield",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Dai-ichi%20Seimei%20Hoken.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q595475",office:"insurance"},addTags:{brand:"第一生命","brand:en":"Dai-ichi Life","brand:ja":"第一生命","brand:wikidata":"Q595475","brand:wikipedia":"ja:第一生命保険",name:"第一生命","name:en":"Dai-ichi Life","name:ja":"第一生命",office:"insurance"},countryCodes:["jp"],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},"office/telecommunication/Antik Telecom":{name:"Antik Telecom",icon:"maki-telephone",imageURL:"https://graph.facebook.com/antik.telecom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30297477",office:"telecommunication"},addTags:{brand:"Antik Telecom","brand:wikidata":"Q30297477","brand:wikipedia":"sk:Antik Telecom",name:"Antik Telecom",office:"telecommunication"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"office/telecommunication/ETECSA":{name:"ETECSA",icon:"maki-telephone",imageURL:"https://graph.facebook.com/etecsa.cu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q490323",office:"telecommunication"},addTags:{brand:"ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"ETECSA",office:"telecommunication",official_name:"Empresa de Telecomunicaciones de Cuba"},countryCodes:["cu"],terms:[],matchScore:2,suggestion:true},"office/telecommunication/Билайн":{name:"Билайн",icon:"maki-telephone",imageURL:"https://graph.facebook.com/Beelinerus/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q402880",office:"telecommunication"},addTags:{brand:"Билайн","brand:en":"Beeline","brand:ru":"Билайн","brand:wikidata":"Q402880","brand:wikipedia":"ru:Билайн",name:"Билайн","name:en":"Beeline","name:ru":"Билайн",office:"telecommunication"},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/1252723826464485376/bH4sG3Rb_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/1219655411999088640/YpWTIjG5_bigger.jpg",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/1246136570626834434/vkUr__2-_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/1246136570626834434/vkUr__2-_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/1246136570626834434/vkUr__2-_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/1240285330672160771/yaFSaEzi_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://graph.facebook.com/systembolaget/picture?type=large",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":"Q17224765",shop:"alcohol"},addTags:{brand:"やまや","brand:en":"Yamaya","brand:ja":"やまや","brand:wikidata":"Q17224765","brand:wikipedia":"ja:やまや",name:"やまや","name:en":"YaMaYa","name:ja":"やまや",shop:"alcohol"},countryCodes:["jp"],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/anime/まんだらけ":{name:"まんだらけ",icon:"fas-dragon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMandarake%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q6747833",shop:"anime"},addTags:{brand:"まんだらけ","brand:en":"Mandarake","brand:ja":"まんだらけ","brand:wikidata":"Q6747833","brand:wikipedia":"ja:まんだらけ",name:"まんだらけ","name:en":"Mandarake","name:ja":"まんだらけ",shop:"anime"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/anime/らしんばん":{name:"らしんばん",icon:"fas-dragon",imageURL:"https://pbs.twimg.com/profile_images/876738581628198913/PsCMQrPq_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11281322",shop:"anime"},addTags:{brand:"らしんばん","brand:en":"Lashinbang","brand:ja":"らしんばん","brand:wikidata":"Q11281322","brand:wikipedia":"ja:らしんばん",name:"らしんばん","name:en":"Lashinbang","name:ja":"らしんばん",shop:"anime"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/anime/ケイ・ブックス":{name:"ケイ・ブックス",icon:"fas-dragon",imageURL:"https://graph.facebook.com/136524066475474/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8061680",shop:"anime"},addTags:{brand:"ケイ・ブックス","brand:en":"K-BOOKS","brand:ja":"ケイ・ブックス","brand:wikidata":"Q8061680","brand:wikipedia":"ja:K-BOOKS",name:"ケイ・ブックス","name:en":"K-BOOKS","name:ja":"ケイ・ブックス",shop:"anime"},countryCodes:["jp"],terms:["k-books"],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://graph.facebook.com/zykidstore/picture?type=large",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/baby_goods/赤ちゃん本舗":{name:"赤ちゃん本舗",icon:"fas-baby-carriage",imageURL:"https://graph.facebook.com/akachanhonpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11257015",shop:"baby_goods"},addTags:{brand:"赤ちゃん本舗","brand:en":"Akachan Honpo","brand:ja":"赤ちゃん本舗","brand:wikidata":"Q11257015","brand:wikipedia":"ja:赤ちゃん本舗",name:"赤ちゃん本舗","name:en":"Akachan Honpo","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/bentleycoltd/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/Brioche Dorée":{name:"Brioche Dorée",icon:"maki-bakery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBrioche%20Doree.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2925606",shop:"bakery"},addTags:{brand:"Brioche Dorée","brand:wikidata":"Q2925606","brand:wikipedia":"fr:Brioche Dorée",name:"Brioche Dorée",shop:"bakery"},countryCodes:["fr"],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/De Echte Bakker":{name:"De Echte Bakker",icon:"maki-bakery",geometry:["point","area"],tags:{"brand:wikidata":"Q16920716",shop:"bakery"},addTags:{brand:"De Echte Bakker","brand:wikidata":"Q16920716","brand:wikipedia":"en:De Echte Bakker",name:"De Echte Bakker",shop:"bakery"},countryCodes:["nl"],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/Franz":{name:"Franz",icon:"maki-bakery",imageURL:"https://graph.facebook.com/franzbakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7889571",shop:"bakery"},addTags:{brand:"Franz","brand:wikidata":"Q7889571","brand:wikipedia":"en:United States Bakery",name:"Franz",shop:"bakery"},countryCodes:["us"],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:["bäckerei kamps"],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/Le Pétrin Ribeïrou":{name:"Le Pétrin Ribeïrou",icon:"maki-bakery",imageURL:"https://graph.facebook.com/lespetrinsribeirou/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89209633",shop:"bakery"},addTags:{brand:"Le Pétrin Ribeïrou","brand:wikidata":"Q89209633",name:"Le Pétrin Ribeïrou",shop:"bakery"},countryCodes:["fr"],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/MarieBlachereFR/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/Warrens Bakery":{name:"Warrens Bakery",icon:"maki-bakery",imageURL:"https://graph.facebook.com/warrensbakery/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7970646",shop:"bakery"},addTags:{brand:"Warrens Bakery","brand:wikidata":"Q7970646","brand:wikipedia":"en:Warrens Bakery",name:"Warrens Bakery",shop:"bakery"},countryCodes:["gb"],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",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/Citron Vert":{name:"Citron Vert",icon:"temaki-lipstick",imageURL:"https://graph.facebook.com/citron.vert.instituts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89503945",shop:"beauty"},addTags:{brand:"Citron Vert","brand:wikidata":"Q89503945",name:"Citron Vert",shop:"beauty"},countryCodes:["fr"],terms:[],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/Tan Republic":{name:"Tan Republic",icon:"temaki-lipstick",imageURL:"https://pbs.twimg.com/profile_images/445869341456601089/WyjnXvfd_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q84112774",shop:"beauty"},addTags:{beauty:"tanning",brand:"Tan Republic","brand:wikidata":"Q84112774",name:"Tan Republic",shop:"beauty"},countryCodes:["us"],terms:[],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/YvesRocherBeauty/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q28496595",shop:"beauty"},addTags:{beauty:"cosmetics",brand:"Yves Rocher","brand:wikidata":"Q28496595",name:"Yves Rocher",shop:"beauty"},terms:["ив роше"],matchScore:2,suggestion:true},"shop/bed/Bensons for Beds":{name:"Bensons for Beds",icon:"maki-lodging",imageURL:"https://graph.facebook.com/bensonsforbeds/picture?type=large",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",imageURL:"https://graph.facebook.com/EDEKA/picture?type=large",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",imageURL:"https://graph.facebook.com/360104644403824/picture?type=large",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",imageURL:"https://graph.facebook.com/Rewe/picture?type=large",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/Sagasser":{name:"Sagasser",icon:"temaki-bottles",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSagasser%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q30838417",shop:"beverages"},addTags:{brand:"Sagasser","brand:wikidata":"Q30838417","brand:wikipedia":"de:Sagasser",name:"Sagasser",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",geometry:["point","area"],tags:{"brand:wikidata":"Q67934123",shop:"beverages"},addTags:{brand:"大苑子","brand:en":"DaYung's","brand:wikidata":"Q67934123","brand:wikipedia":"zh:大苑子","brand:zh":"大苑子",name:"大苑子","name:en":"DaYung's","name:zh":"大苑子",shop:"beverages"},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/1247196661614555137/eqGiHbFr_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/1232970502953717761/FkSDt9ii_bigger.jpg",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://pbs.twimg.com/profile_images/738704416455426048/MNUnMEde_bigger.jpg",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/1221716949710839809/vjJlFILz_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/1229357674921418752/4a00SKwM_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/Christian Science Reading Room":{name:"Christian Science Reading Room",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q5110122",shop:"books"},addTags:{books:"religion",brand:"Christian Science Reading Room","brand:wikidata":"Q5110122","brand:wikipedia":"en:Christian Science Reading Room",name:"Christian Science Reading Room",shop:"books"},countryCodes:["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/France Loisirs":{name:"France Loisirs",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/1080962425514471424/zA2jHjk9_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q3080726",shop:"books"},addTags:{brand:"France Loisirs","brand:wikidata":"Q3080726","brand:wikipedia":"fr:France Loisirs",name:"France Loisirs",shop:"books"},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/Martinus":{name:"Martinus",icon:"fas-book",imageURL:"https://graph.facebook.com/Martinus.sk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15089074",shop:"books"},addTags:{brand:"Martinus","brand:wikidata":"Q15089074","brand:wikipedia":"sk:Martinus",name:"Martinus",shop:"books"},countryCodes:["sk"],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/Orell Füssli":{name:"Orell Füssli",icon:"fas-book",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Orell%20F%C3%BCssli.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q1511140",shop:"books"},addTags:{brand:"Orell Füssli","brand:wikidata":"Q1511140","brand:wikipedia":"de:Orell Füssli",name:"Orell Füssli",shop:"books"},countryCodes:["ch"],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","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",imageURL:"https://pbs.twimg.com/profile_images/422610899858243585/QwhRDeqz_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q11265517",shop:"books"},addTags:{"alt_name:en":"Kumabook",brand:"くまざわ書店","brand:en":"Kumazawa Books","brand:ja":"くまざわ書店","brand:wikidata":"Q11265517","brand:wikipedia":"ja:くまざわ",name:"くまざわ書店","name:en":"Kumazawa Books","name:ja":"くまざわ書店",shop:"books"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/books/とらのあな":{name:"とらのあな",icon:"fas-book",geometry:["point","area"],tags:{"brand:wikidata":"Q865297",shop:"books"},addTags:{books:"comic",brand:"とらのあな","brand:en":"Toranoana","brand:ja":"とらのあな","brand:wikidata":"Q865297","brand:wikipedia":"ja:コミックとらのあな",name:"とらのあな","name:en":"Comic Toranoana","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/maruzenjunku/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3190093",shop:"books"},addTags:{brand:"ジュンク堂書店","brand:en":"Junkudo","brand:ja":"ジュンク堂書店","brand:wikidata":"Q3190093","brand:wikipedia":"ja:ジュンク堂書店",name:"ジュンク堂書店","name:en":"Junkudo","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/924840178300022784/UOQoqhei_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1906012",shop:"books"},addTags:{brand:"丸善","brand:en":"MARUZEN","brand:ja":"丸善","brand:wikidata":"Q1906012","brand:wikipedia":"ja:丸善雄松堂",name:"丸善","name:en":"MARUZEN","name:ja":"丸善",official_name:"丸善雄松堂","official_name:en":"Maruzen Yushodo","official_name:ja":"丸善雄松堂",shop:"books"},countryCodes:["jp"],terms:["丸善書店"],matchScore:2,suggestion:true},"shop/books/宮脇書店":{name:"宮脇書店",icon:"fas-book",imageURL:"https://pbs.twimg.com/profile_images/1012238322486280192/eNbZxfN2_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11455237",shop:"books"},addTags:{brand:"宮脇書店","brand:en":"Miyawaki Shoten","brand:ja":"宮脇書店","brand:wikidata":"Q11455237","brand:wikipedia":"ja:宮脇書店",name:"宮脇書店","name:en":"Miyawaki Shoten","name:ja":"宮脇書店",shop:"books"},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/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":"Books Kinokuniya","brand:ja":"紀伊國屋書店","brand:wikidata":"Q8061680","brand:wikipedia":"ja:紀伊國屋書店",name:"紀伊國屋書店","name:en":"Books Kinokuniya","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/camera/London Camera Exchange":{name:"London Camera Exchange",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/londoncameraexchange/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q84156395",shop:"camera"},addTags:{brand:"London Camera Exchange","brand:wikidata":"Q84156395",name:"London Camera Exchange",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/euromaster.nl/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/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/Formula One Autocentres":{name:"Formula One Autocentres",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:"Formula One Autocentres","brand:wikidata":"Q79239635",name:"Formula One Autocentres",shop:"car_repair"},countryCodes:["gb"],terms:["f1 autocentre","formula 1 autocentre"],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/National Windscreens":{name:"National Windscreens",icon:"maki-car-repair",imageURL:"https://graph.facebook.com/natwindscreens/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87142619",shop:"car_repair"},addTags:{brand:"National Windscreens","brand:wikidata":"Q87142619",name:"National Windscreens","service:vehicle:glass":"yes",shop:"car_repair"},countryCodes:["gb"],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/DriveTime":{name:"DriveTime",icon:"maki-car",imageURL:"https://graph.facebook.com/DriveTimeCarSales/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5307879",shop:"car"},addTags:{brand:"DriveTime","brand:wikidata":"Q5307879","brand:wikipedia":"en:DriveTime",name:"DriveTime",second_hand:"only",shop:"car"},countryCodes:["us"],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/Brainwave":{name:"Brainwave",icon:"maki-shop",imageURL:"https://graph.facebook.com/charitybrainwave/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90561455",shop:"charity"},addTags:{brand:"Brainwave","brand:wikidata":"Q90561455",name:"Brainwave",shop:"charity"},countryCodes:["gb"],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/Cats Protection":{name:"Cats Protection",icon:"maki-shop",imageURL:"https://graph.facebook.com/catsprotection/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5053998",shop:"charity"},addTags:{brand:"Cats Protection","brand:wikidata":"Q5053998","brand:wikipedia":"en:Cats Protection",name:"Cats Protection",shop:"charity"},countryCodes:["gb"],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/RNLI Shop":{name:"RNLI Shop",icon:"maki-shop",imageURL:"https://graph.facebook.com/rnli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2166873",shop:"charity"},addTags:{brand:"RNLI Shop","brand:wikidata":"Q2166873","brand:wikipedia":"en:Royal National Lifeboat Institution",name:"RNLI Shop",shop:"charity"},countryCodes:["gb","ie"],terms:["royal national lifeboat institution"],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/Shelter":{name:"Shelter",icon:"maki-shop",imageURL:"https://graph.facebook.com/ShelterUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7493943",shop:"charity"},addTags:{brand:"Shelter","brand:wikidata":"Q7493943","brand:wikipedia":"en:Shelter (charity)",name:"Shelter",shop:"charity"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/charity/St Margaret's Hospice Care":{name:"St Margaret's Hospice Care",icon:"maki-shop",imageURL:"https://graph.facebook.com/stmargaretshospice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q91027360",shop:"charity"},addTags:{brand:"St Margaret's Hospice Care","brand:wikidata":"Q91027360",name:"St Margaret's Hospice Care",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.deutschland/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",imageURL:"https://graph.facebook.com/tetadrogerie/picture?type=large",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/1240242735120101378/0MAvEVH1_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/& Other Stories":{name:"& Other Stories",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/andotherstories/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q85322338",shop:"clothes"},addTags:{brand:"& Other Stories","brand:wikidata":"Q85322338",clothes:"women",name:"& Other Stories",shop:"clothes"},countryCodes:["gb"],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/AWG-Modecenter":{name:"AWG-Modecenter",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/AWG.Mode/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q300220",shop:"clothes"},addTags:{brand:"AWG-Modecenter","brand:wikidata":"Q300220","brand:wikipedia":"de:AWG-Modecenter",name:"AWG-Modecenter",shop:"clothes",short_name:"AWG"},countryCodes:["bg","de"],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",imageURL:"https://graph.facebook.com/AnimalFreesports/picture?type=large",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/Armor Lux":{name:"Armor Lux",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q951079",shop:"clothes"},addTags:{brand:"Armor Lux","brand:wikidata":"Q951079","brand:wikipedia":"fr:Armor Lux",name:"Armor Lux",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Aubade":{name:"Aubade",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/1093548111300120578/Cto4bpSH_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q2870536",shop:"clothes"},addTags:{brand:"Aubade","brand:wikidata":"Q2870536","brand:wikipedia":"fr:Aubade (lingerie)",clothes:"underwear",name:"Aubade",shop:"clothes"},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/BadRhino":{name:"BadRhino",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BadRhinoUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q84161924",shop:"clothes"},addTags:{brand:"BadRhino","brand:wikidata":"Q84161924",clothes:"men",name:"BadRhino",shop:"clothes"},countryCodes:["gb","ie"],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/Bepon":{name:"Bepon",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/BEPONsk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q23766409",shop:"clothes"},addTags:{brand:"Bepon","brand:wikidata":"Q23766409","brand:wikipedia":"sk:Bepon",clothes:"underwear",name:"Bepon",shop:"clothes"},countryCodes:["sk"],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/Bimba y Lola":{name:"Bimba y Lola",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q54869493",shop:"clothes"},addTags:{brand:"Bimba y Lola","brand:wikidata":"Q54869493","brand:wikipedia":"es:Bimba y Lola",name:"Bimba y Lola",shop:"clothes"},terms:["bimba & lola"],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/Bonne Gueule":{name:"Bonne Gueule",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FBonnegueule%20officiel.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q22248146",shop:"clothes"},addTags:{brand:"Bonne Gueule","brand:wikidata":"Q22248146","brand:wikipedia":"fr:BonneGueule",name:"Bonne Gueule",shop:"clothes"},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/Bóboli":{name:"Bóboli",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/899272880927780864/u8RHJu0a_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q39073733",shop:"clothes"},addTags:{brand:"Boboli","brand:wikidata":"Q39073733","brand:wikipedia":"ca:Bóboli",name:"Bóboli",shop:"clothes"},countryCodes:["es"],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/ColumbiaTurkey/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/damartuk/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/Darjeeling":{name:"Darjeeling",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/448386535254508/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3016203",shop:"clothes"},addTags:{brand:"Darjeeling","brand:wikidata":"Q3016203","brand:wikipedia":"fr:Darjeeling (lingerie)",clothes:"underwear",name:"Darjeeling",shop:"clothes"},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/Du Pareil au Même":{name:"Du Pareil au Même",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3040318",shop:"clothes"},addTags:{brand:"Du Pareil au Même","brand:wikidata":"Q3040318","brand:wikipedia":"fr:Du Pareil au Même (entreprise)",name:"Du Pareil au Même",shop:"clothes"},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/Grain de Malice":{name:"Grain de Malice",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/GraindeMaliceFrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q66757157",shop:"clothes"},addTags:{brand:"Grain de Malice","brand:wikidata":"Q66757157",name:"Grain de Malice",shop:"clothes",short_name:"GDM"},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/Honeys":{name:"Honeys",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/HoneysOnline/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11326592",shop:"clothes"},addTags:{brand:"Honeys","brand:en":"Honeys","brand:ja":"ハニーズ","brand:wikidata":"Q11326592","brand:wikipedia":"ja:ハニーズ",clothes:"women",name:"Honeys","name:en":"Honeys","name:ja":"ハニーズ",shop:"clothes"},countryCodes:["jp"],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/Jacadi":{name:"Jacadi",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/JacadiUS/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3157058",shop:"clothes"},addTags:{brand:"Jacadi","brand:wikidata":"Q3157058","brand:wikipedia":"fr:Jacadi",clothes:"children",name:"Jacadi",shop:"clothes"},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/Kookaï":{name:"Kookaï",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q1783759",shop:"clothes"},addTags:{brand:"Kookaï","brand:wikidata":"Q1783759","brand:wikipedia":"fr:Kookaï",name:"Kookaï",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://graph.facebook.com/LauraAshleyUS/picture?type=large",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/Le Slip Français":{name:"Le Slip Français",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/leslipfrancais/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q14594793",shop:"clothes"},addTags:{brand:"Le Slip Français","brand:wikidata":"Q14594793","brand:wikipedia":"fr:Le Slip Français",name:"Le Slip Français",shop:"clothes"},terms:[],matchScore:2,suggestion:true},"shop/clothes/Le Temps des Cerises":{name:"Le Temps des Cerises",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/truffautfr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3162640",shop:"clothes"},addTags:{brand:"Le Temps des Cerises","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Le Temps des cerises (vêtements)",name:"Le Temps des Cerises",shop:"clothes"},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/Milavitsa":{name:"Milavitsa",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Milavitsa.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3575265",shop:"clothes"},addTags:{brand:"Milavitsa","brand:be":"Мілавіца","brand:ru":"Милавица","brand:wikidata":"Q3575265","brand:wikipedia":"be:Мілавіца (кампанія)",clothes:"underwear",name:"Milavitsa","name:be":"Мілавіца","name:ru":"Милавица",shop:"clothes"},countryCodes:["be"],terms:["милавица","мілавіца"],matchScore:2,suggestion:true},"shop/clothes/Mise au Green":{name:"Mise au Green",icon:"maki-clothing-store",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Mise%20Au%20Green.gif&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3316239",shop:"clothes"},addTags:{brand:"Mise au Green","brand:wikidata":"Q3316239","brand:wikipedia":"fr:Mise au green",name:"Mise au Green",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/Riu Paris":{name:"Riu Paris",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/riuparisofficiel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16644311",shop:"clothes"},addTags:{brand:"Riu Paris","brand:wikidata":"Q16644311","brand:wikipedia":"fr:RIU Paris",clothers:"women",name:"Riu Paris",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/Sandro":{name:"Sandro",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/sandrofrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3472022",shop:"clothes"},addTags:{brand:"Sandro","brand:wikidata":"Q3472022","brand:wikipedia":"fr:Sandro (mode)",name:"Sandro",shop:"clothes"},countryCodes:["fr"],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/Tape à l'Œil":{name:"Tape à l'Œil",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/tape.a.loeil.worldwide/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30749175",shop:"clothes"},addTags:{brand:"Tape à l'Œil","brand:wikidata":"Q30749175","brand:wikipedia":"fr:Tape à l'œil",clothes:"children",name:"Tape à l'Œil",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://graph.facebook.com/TedbakerUSA/picture?type=large",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/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/Vertbaudet":{name:"Vertbaudet",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/vertbaudet/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2518521",shop:"clothes"},addTags:{brand:"Vertbaudet","brand:wikidata":"Q2518521","brand:wikipedia":"fr:Vertbaudet",clothes:"children",name:"Vertbaudet",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/wefashionstories/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/WEGO":{name:"WEGO",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/wego.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17193890",shop:"clothes"},addTags:{brand:"WEGO","brand:en":"WEGO","brand:ja":"ウィゴー","brand:wikidata":"Q17193890","brand:wikipedia":"ja:ウィゴー",clothes:"men;women",name:"WEGO","name:en":"WEGO","name:ja":"ウィゴー",shop:"clothes"},countryCodes:["jp"],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/Wellensteyn":{name:"Wellensteyn",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q62610375",shop:"clothes"},addTags:{brand:"Wellensteyn","brand:wikidata":"Q62610375","brand:wikipedia":"de:Wellensteyn",name:"Wellensteyn",shop:"clothes"},countryCodes:["de"],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/Yours Clothing":{name:"Yours Clothing",icon:"maki-clothing-store",imageURL:"https://graph.facebook.com/yoursclothingOFFICIAL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q84163322",shop:"clothes"},addTags:{brand:"Yours Clothing","brand:wikidata":"Q84163322",clothes:"women",name:"Yours Clothing",shop:"clothes"},countryCodes:["de","gb","gg","ie"],terms:[],matchScore:2,suggestion:true},"shop/clothes/Zadig & Voltaire":{name:"Zadig & Voltaire",icon:"maki-clothing-store",geometry:["point","area"],tags:{"brand:wikidata":"Q3574548",shop:"clothes"},addTags:{brand:"Zadig & Voltaire","brand:wikidata":"Q3574548","brand:wikipedia":"fr:Zadig & Voltaire",name:"Zadig & Voltaire",shop:"clothes"},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/niko and ...":{name:"niko and ...",icon:"maki-clothing-store",imageURL:"https://pbs.twimg.com/profile_images/898363331433570304/0CV5qtos_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11236730",shop:"clothes"},addTags:{brand:"niko and ...","brand:en":"niko and ...","brand:ja":"ニコアンド","brand:wikidata":"Q11236730","brand:wikipedia":"ja:niko and...",clothes:"men;women",name:"niko and ...","name:en":"niko and ...","name:ja":"ニコアンド",shop:"clothes"},countryCodes:["jp"],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:しまむら",clothes:"women",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",official_name:"ファッションセンターしまむら","official_name:en":"Fashion Center Shimamura","official_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://graph.facebook.com/avail.gr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11284759",shop:"clothes"},addTags:{brand:"アベイル","brand:en":"Avail","brand:ja":"アベイル","brand:wikidata":"Q11284759",name:"アベイル","name:en":"Avail","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/LDLC":{name:"LDLC",icon:"fas-laptop",imageURL:"https://graph.facebook.com/GroupeLDLC/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117461",shop:"computer"},addTags:{brand:"LDLC","brand:wikidata":"Q3117461","brand:wikipedia":"fr:Groupe LDLC",name:"LDLC",shop:"computer"},terms:[],matchScore:2,suggestion:true},"shop/computer/PCデポ":{name:"PCデポ",icon:"fas-laptop",imageURL:"https://pbs.twimg.com/profile_images/675844064617500672/cRKpJEb3_bigger.jpg",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/computer/アプライド":{name:"アプライド",icon:"fas-laptop",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FApplied%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11284742",shop:"computer"},addTags:{brand:"アプライド","brand:en":"Applied","brand:ja":"アプライド","brand:wikidata":"Q11284742","brand:wikipedia":"ja:アプライド",name:"アプライド","name:en":"Applied","name:ja":"アプライド",shop:"computer"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/computer/イオシス":{name:"イオシス",icon:"fas-laptop",geometry:["point","area"],tags:{"brand:wikidata":"Q17988651",shop:"computer"},addTags:{brand:"イオシス","brand:en":"IOSYS","brand:ja":"イオシス","brand:wikidata":"Q17988651","brand:wikipedia":"ja:イオシス (株式会社)",name:"イオシス","name:en":"IOSYS","name:ja":"イオシス",shop:"computer"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/computer/ツクモ":{name:"ツクモ",icon:"fas-laptop",geometry:["point","area"],tags:{"brand:wikidata":"Q29793996",shop:"computer"},addTags:{brand:"ツクモ","brand:en":"TSUKUMO","brand:ja":"ツクモ","brand:wikidata":"Q29793996","brand:wikipedia":"ja:九十九電機",name:"ツクモ","name:en":"TSUKUMO","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/confectionery/銀座コージーコーナー":{name:"銀座コージーコーナー",icon:"maki-confectionery",imageURL:"https://graph.facebook.com/GINZA.CozyCorner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11649983",shop:"confectionery"},addTags:{brand:"銀座コージーコーナー","brand:en":"Ginza Cozy Corner","brand:ja":"銀座コージーコーナー","brand:wikidata":"Q11649983","brand:wikipedia":"ja:銀座コージーコーナー",name:"銀座コージーコーナー","name:en":"Ginza Cozy Corner","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/Bakmaz":{name:"Bakmaz",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/bakmazofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65132948",shop:"convenience"},addTags:{brand:"Bakmaz","brand:wikidata":"Q65132948","brand:wikipedia":"hr:Bakmaz",name:"Bakmaz",shop:"convenience"},countryCodes:["hr"],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/Casino Shop":{name:"Casino Shop",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q89029601",shop:"convenience"},addTags:{brand:"Casino Shop","brand:wikidata":"Q89029601",name:"Casino Shop",shop:"convenience"},countryCodes:["fr"],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 Food":{name:"Co-op Food",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/1243828928134995968/AN-8Ptzi_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"convenience"},addTags:{brand:"Co-op Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"Co-op Food",shop:"convenience"},countryCodes:["gb"],terms:["coop","cooperative food","the co-operative food","the cooperative"],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/CocciMarket":{name:"CocciMarket",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoccimarket%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q90020480",shop:"convenience"},addTags:{brand:"CocciMarket","brand:wikidata":"Q90020480",name:"CocciMarket",shop:"convenience"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/convenience/CocciMarket City":{name:"CocciMarket City",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoccimarket%20city%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q90020481",shop:"convenience"},addTags:{brand:"CocciMarket City","brand:wikidata":"Q90020481",name:"CocciMarket City",shop:"convenience"},countryCodes:["fr"],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/Conoco":{name:"Conoco",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/conoco/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1126518",shop:"convenience"},addTags:{brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco",shop:"convenience"},countryCodes:["us"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Convenient Food Mart":{name:"Convenient Food Mart",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/convenientfoodmarts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5166143",shop:"convenience"},addTags:{brand:"Convenient Food Mart","brand:wikidata":"Q5166143","brand:wikipedia":"en:Convenient Food Mart",name:"Convenient Food Mart",shop:"convenience"},countryCodes:["us"],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/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://pbs.twimg.com/profile_images/1242150382085779463/Cmm3JM1n_bigger.jpg",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/Jiffy":{name:"Jiffy",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q16770436",shop:"convenience"},addTags:{brand:"Jiffy","brand:wikidata":"Q16770436","brand:wikipedia":"th:จิฟฟี่",name:"Jiffy",shop:"convenience"},countryCodes:["th"],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/Le Petit Casino":{name:"Le Petit Casino",icon:"fas-shopping-basket",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLe%20petit%20casino%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q89029249",shop:"convenience"},addTags:{brand:"Le Petit Casino","brand:wikidata":"Q89029249",name:"Le Petit Casino",shop:"convenience"},countryCodes:["fr"],terms:["petit casino"],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/Love's":{name:"Love's",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/lovestravelstops/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1872496",shop:"convenience"},addTags:{brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's",shop:"convenience"},countryCodes:["us"],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","mk","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/Milk-Agro":{name:"Milk-Agro",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/milkagro.sk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64173785",shop:"convenience"},addTags:{brand:"Milk-Agro","brand:wikidata":"Q64173785",name:"Milk-Agro",shop:"convenience"},countryCodes:["sk"],terms:[],matchScore:2,suggestion:true},"shop/convenience/Mini Mix":{name:"Mini Mix",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/mixmarkt.eu/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q327854",shop:"convenience"},addTags:{brand:"Mini Mix","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mini Mix",shop:"convenience"},countryCodes:["at","be","cy","cz","de","es","fr","gb","gr","it","me","nl","pt"],terms:["mini mix markt"],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/Monop'":{name:"Monop'",icon:"fas-shopping-basket",geometry:["point","area"],tags:{"brand:wikidata":"Q89913683",shop:"convenience"},addTags:{brand:"Monop'","brand:wikidata":"Q89913683",name:"Monop'",shop:"convenience"},countryCodes:["fr"],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/1235227251131678722/4FZ60T1d_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/Rotten Robbie":{name:"Rotten Robbie",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/rottenrobbies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87378070",shop:"convenience"},addTags:{brand:"Rotten Robbie","brand:wikidata":"Q87378070",name:"Rotten Robbie",shop:"convenience"},countryCodes:["us"],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/Studenac":{name:"Studenac",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/studenac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q65156084",shop:"convenience"},addTags:{brand:"Studenac","brand:wikidata":"Q65156084","brand:wikipedia":"hr:Studenac",name:"Studenac",shop:"convenience"},countryCodes:["hr"],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/TA":{name:"TA",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/TravelCentersOfAmerica/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7835892",shop:"convenience"},addTags:{brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA",shop:"convenience"},countryCodes:["us"],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/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/Tommy":{name:"Tommy",icon:"fas-shopping-basket",imageURL:"https://graph.facebook.com/tommyprodavaonice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q12643718",shop:"convenience"},addTags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",shop:"convenience"},countryCodes:["hr"],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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMini%20PIAGO%20logo.svg&width=100",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","name:ru":"Евроопт Маркет",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":"Q16770436",shop:"convenience"},addTags:{brand:"จิฟฟี่","brand:en":"Jiffy","brand:th":"จิฟฟี่","brand:wikidata":"Q16770436","brand:wikipedia":"th:จิฟฟี่",name:"จิฟฟี่","name:en":"Jiffy","name:th":"จิฟฟี่",shop:"convenience"},countryCodes:["th"],terms:[],matchScore:2,suggestion:true},"shop/convenience/アンスリー":{name:"アンスリー",icon:"fas-shopping-basket",imageURL:"https://pbs.twimg.com/profile_images/499731979613401089/GBBgiBnb_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q17192555",shop:"convenience"},addTags:{"alt_name:en":"Ansuri",brand:"アンスリー","brand:en":"an3","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"An3","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%2FCommunity%20Store%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11302585",shop:"convenience"},addTags:{brand:"コミュニティ・ストア","brand:en":"Community Store","brand:ja":"コミュニティ・ストア","brand:wikidata":"Q11302585","brand:wikipedia":"ja:コミュニティ・ストア",name:"コミュニティ・ストア","name:en":"Community Store","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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSave%20On%20logo.svg&width=100",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",imageURL:"https://pbs.twimg.com/profile_images/2355699395/mzlxm9bws5rxrs44z484_bigger.jpeg",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://pbs.twimg.com/profile_images/875897219508871168/OZ1swK9c_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1038929",shop:"convenience"},addTags:{brand:"미니스톱","brand:ko":"미니스톱","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",name:"미니스톱","name:ko":"미니스톱",shop:"convenience"},countryCodes:["kr"],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/FaxCopy":{name:"FaxCopy",icon:"fas-print",imageURL:"https://graph.facebook.com/faxcopy.sk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90990574",shop:"copyshop"},addTags:{brand:"FaxCopy","brand:wikidata":"Q90990574",name:"FaxCopy",shop:"copyshop"},countryCodes:["sk"],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/copyshop/アクセア":{name:"アクセア",icon:"fas-print",imageURL:"https://graph.facebook.com/accea/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90043156",shop:"copyshop"},addTags:{brand:"アクセア","brand:en":"Accea","brand:ja":"アクセア","brand:wikidata":"Q90043156",name:"アクセア","name:en":"Accea","name:ja":"アクセア",shop:"copyshop"},countryCodes:["jp"],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",imageURL:"https://graph.facebook.com/jurlique.us/picture?type=large",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/Stock+Field":{name:"Stock+Field",icon:"fas-hat-cowboy-side",imageURL:"https://pbs.twimg.com/profile_images/1157008042975793152/gK8uX_ni_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q84572995",shop:"country_store"},addTags:{brand:"Stock+Field","brand:wikidata":"Q84572995",name:"Stock+Field",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/dairy/Veronika":{name:"Veronika",icon:"fas-cheese",imageURL:"https://graph.facebook.com/minimljekaraveronika/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87399724",shop:"dairy"},addTags:{brand:"Veronika","brand:wikidata":"Q87399724",name:"Veronika",shop:"dairy"},countryCodes:["hr"],terms:[],matchScore:2,suggestion:true},"shop/deli/ほっともっと":{name:"ほっともっと",icon:"temaki-meat",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:"temaki-meat",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://pbs.twimg.com/profile_images/864122487742894081/uHEBHKzj_bigger.jpg",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/707190474159824897/L8PTBztE_bigger.jpg",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/dd's Discounts":{name:"dd's Discounts",icon:"maki-shop",imageURL:"https://graph.facebook.com/ddsdiscounts/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83743863",shop:"department_store"},addTags:{brand:"dd's Discounts","brand:wikidata":"Q83743863",name:"dd's Discounts",shop:"department_store"},countryCodes:["us"],terms:["dd's"],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/707190474159824897/L8PTBztE_bigger.jpg",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":"無印良品","official_name:en":"Ryohin Keikaku",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/Jula":{name:"Jula",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FJula%20logga.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q10541151",shop:"doityourself"},addTags:{brand:"Jula","brand:wikidata":"Q10541151","brand:wikipedia":"sv:Jula (företag)",name:"Jula",shop:"doityourself"},countryCodes:["no","pl","se"],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/Lapeyre":{name:"Lapeyre",icon:"temaki-tools",imageURL:"https://graph.facebook.com/Lapeyre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3117467",shop:"doityourself"},addTags:{brand:"Lapeyre","brand:wikidata":"Q3117467","brand:wikipedia":"fr:Groupe Lapeyre",name:"Lapeyre",shop:"doityourself"},countryCodes:["fr"],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/SUPER VIVA Home":{name:"SUPER VIVA Home",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLIXIL%20VIVA%20LOGO.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11229278",shop:"doityourself"},addTags:{brand:"VIVA Home","brand:en":"VIVA Home","brand:ja":"ビバホーム","brand:wikidata":"Q11229278","brand:wikipedia":"ja:LIXILビバ",name:"SUPER VIVA Home","name:en":"SUPER VIVA Home","name:ja":"スーパービバホーム",shop:"doityourself","short_name:en":"SVH"},countryCodes:["jp"],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://graph.facebook.com/ToolstationUK/picture?type=large",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/VIVA Home":{name:"VIVA Home",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLIXIL%20VIVA%20LOGO.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11229278",shop:"doityourself"},addTags:{brand:"VIVA Home","brand:en":"VIVA Home","brand:ja":"ビバホーム","brand:wikidata":"Q11229278","brand:wikipedia":"ja:LIXILビバ",name:"VIVA Home","name:en":"VIVA Home","name:ja":"ビバホーム",shop:"doityourself","short_name:en":"VH"},countryCodes:["jp"],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",geometry:["point","area"],tags:{"brand:wikidata":"Q11284890",shop:"doityourself"},addTags:{brand:"アマノ","brand:en":"Amano","brand:ja":"アマノ","brand:wikidata":"Q11284890","brand:wikipedia":"ja:アマノ",name:"アマノ","name:en":"Amano","name:ja":"アマノ",shop:"doityourself"},countryCodes:["jp"],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",geometry:["point","area"],tags:{"brand:wikidata":"Q11316968",shop:"dry_cleaning"},addTags:{brand:"ダイヤクリーニング","brand:en":"Dia Cleaning","brand:ja":"ダイヤクリーニング","brand:wikidata":"Q11316968","brand:wikipedia":"ja:ダイヤクリーニング",name:"ダイヤクリーニング","name:en":"Dia Cleaning","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://pbs.twimg.com/profile_images/1416828290/pony_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q88012241",shop:"dry_cleaning"},addTags:{brand:"ポニー","brand:en":"Pony","brand:ja":"ポニー","brand:wikidata":"Q88012241",name:"ポニー","name:en":"Pony","name:ja":"ポニー",official_name:"ポニークリーニング","official_name:en":"Pony Cleaning","official_name:ja":"ポニークリーニング",shop:"dry_cleaning"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/dry_cleaning/ヤングドライ":{name:"ヤングドライ",icon:"temaki-clothes_hanger",geometry:["point","area"],tags:{"brand:wikidata":"Q11345434",shop:"dry_cleaning"},addTags:{brand:"ヤングドライ","brand:en":"Young Dry","brand:ja":"ヤングドライ","brand:wikidata":"Q11345434","brand:wikipedia":"ja:ヤングドライ",name:"ヤングドライ","name:en":"Young Dry","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/e-cigarette/E-Cigarette Direct":{name:"E-Cigarette Direct",icon:"maki-shop",imageURL:"https://graph.facebook.com/ecigarettedirect/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q84703237",shop:"e-cigarette"},addTags:{brand:"E-Cigarette Direct","brand:wikidata":"Q84703237",name:"E-Cigarette Direct",shop:"e-cigarette"},countryCodes:["gb"],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/100満ボルト":{name:"100満ボルト",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/1223183506043367424/pdVLS011_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11305504",shop:"electronics"},addTags:{brand:"100満ボルト","brand:en":"100mv","brand:ja":"100満ボルト","brand:wikidata":"Q11305504","brand:wikipedia":"ja:サンキュー (小売)",name:"100満ボルト","name:en":"100mv","name:ja":"100満ボルト",shop:"electronics"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/electronics/ABC Warehouse":{name:"ABC Warehouse",icon:"fas-plug",imageURL:"https://pbs.twimg.com/profile_images/1202680211067850753/1q3gyG95_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q4650261",shop:"electronics"},addTags:{brand:"ABC Warehouse","brand:wikidata":"Q4650261","brand:wikipedia":"en:ABC Warehouse",name:"ABC Warehouse",shop:"electronics"},countryCodes:["us"],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/Bing Lee":{name:"Bing Lee",icon:"fas-plug",imageURL:"https://graph.facebook.com/BingLeeElectrics/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4914136",shop:"electronics"},addTags:{brand:"Bing Lee","brand:wikidata":"Q4914136","brand:wikipedia":"en:Bing Lee",name:"Bing Lee",shop:"electronics"},countryCodes:["au"],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://graph.facebook.com/Coolblue/picture?type=large",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/Datart":{name:"Datart",icon:"fas-plug",imageURL:"https://graph.facebook.com/DATART.cz/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11774311",shop:"electronics"},addTags:{brand:"Datart","brand:wikidata":"Q11774311","brand:wikipedia":"cs:Datart",name:"Datart",shop:"electronics"},countryCodes:["cz","sk"],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/Nay":{name:"Nay",icon:"fas-plug",imageURL:"https://graph.facebook.com/Elektrodom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q13537421",shop:"electronics"},addTags:{brand:"Nay","brand:wikidata":"Q13537421","brand:wikipedia":"sk:Nay",name:"Nay",shop:"electronics"},countryCodes:["sk"],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/Okay":{name:"Okay",icon:"fas-plug",imageURL:"https://graph.facebook.com/okaysk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17583128",shop:"electronics"},addTags:{brand:"Okay","brand:wikidata":"Q17583128","brand:wikipedia":"sk:OKAY",name:"Okay",shop:"electronics"},countryCodes:["cz","sk"],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",imageURL:"https://graph.facebook.com/Sony/picture?type=large",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",imageURL:"https://pbs.twimg.com/profile_images/1252777005197623296/vcMgM3cK_bigger.png",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":"Best Denki","brand:ja":"ベスト電器","brand:wikidata":"Q1096390","brand:wikipedia":"ja:ベスト電器",name:"ベスト電器","name:en":"Best Denki","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/1229424763581366272/Tle21XGz_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/Mulberry":{name:"Mulberry",icon:"temaki-fashion_accessories",imageURL:"https://graph.facebook.com/Mulberry/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3866987",shop:"fashion_accessories"},addTags:{brand:"Mulberry","brand:wikidata":"Q3866987","brand:wikipedia":"en:Mulberry (company)",name:"Mulberry",shop:"fashion_accessories"},countryCodes:["ae","au","ca","ch","cn","de","dk","fi","gb","ie","jp","kr","my","nl","no","se","sg","th","us"],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/florist/青山フラワーマーケット":{name:"青山フラワーマーケット",icon:"maki-florist",imageURL:"https://graph.facebook.com/aoyamaflowermarket/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87743579",shop:"florist"},addTags:{brand:"青山フラワーマーケット","brand:en":"Aoyama Flower Market","brand:ja":"青山フラワーマーケット","brand:wikidata":"Q87743579",name:"青山フラワーマーケット","name:en":"Aoyama Flower Market","name:ja":"青山フラワーマーケット",shop:"florist"},countryCodes:["jp"],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://graph.facebook.com/coopfuneralcare/picture?type=large",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://graph.facebook.com/LauraAshleyUS/picture?type=large",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://pbs.twimg.com/profile_images/1048118257918640128/pkUCjw94_bigger.jpg",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://graph.facebook.com/rocheboboisusa/picture?type=large",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",imageURL:"https://graph.facebook.com/westelm/picture?type=large",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/mnogomebeli/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q18404893",shop:"furniture"},addTags:{brand:"Много мебели","brand:wikidata":"Q18404893","brand:wikipedia":"ru:Много мебели",name:"Много мебели",shop:"furniture"},countryCodes:["ru"],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/furniture/フランフラン":{name:"フランフラン",icon:"fas-couch",geometry:["point","area"],tags:{"brand:wikidata":"Q5479732",shop:"furniture"},addTags:{brand:"フランフラン","brand:en":"Francfranc","brand:ja":"フランフラン","brand:wikidata":"Q5479732","brand:wikipedia":"ja:Francfranc",name:"フランフラン","name:en":"Francfranc","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/Mountfield":{name:"Mountfield",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/Mountfield/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q21180783",shop:"garden_centre"},addTags:{brand:"Mountfield","brand:wikidata":"Q21180783","brand:wikipedia":"cs:Mountfield",name:"Mountfield",shop:"garden_centre"},countryCodes:["cz","sk"],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/Villaverde":{name:"Villaverde",icon:"maki-garden-centre",imageURL:"https://graph.facebook.com/villaverdefr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89346546",shop:"garden_centre"},addTags:{brand:"Villaverde","brand:wikidata":"Q89346546",name:"Villaverde",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",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/Harry & David":{name:"Harry & David",icon:"maki-gift",geometry:["point","area"],tags:{"brand:wikidata":"Q16983369",shop:"gift"},addTags:{brand:"Harry & David","brand:wikidata":"Q16983369","brand:wikipedia":"en:Harry & David",name:"Harry & David",shop:"gift"},countryCodes:["us"],terms:[],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/Scribbler":{name:"Scribbler",icon:"maki-gift",imageURL:"https://pbs.twimg.com/profile_images/1079755597673832449/zUY-SH0__bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q28457455",shop:"gift"},addTags:{brand:"Scribbler","brand:wikidata":"Q28457455","brand:wikipedia":"en:Scribbler (card shop)",name:"Scribbler",shop:"gift"},countryCodes:["gb"],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/Celly's":{name:"Celly's",icon:"temaki-beauty_salon",imageURL:"https://pbs.twimg.com/profile_images/971358647/price_list_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q86837698",shop:"hairdresser"},addTags:{brand:"Celly's","brand:wikidata":"Q86837698",name:"Celly's",shop:"hairdresser"},countryCodes:["gb"],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/Ferber":{name:"Ferber",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/Ferberlux/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88180887",shop:"hairdresser"},addTags:{brand:"Ferber","brand:wikidata":"Q88180887",name:"Ferber",shop:"hairdresser"},countryCodes:["lu"],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","lu","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/Igorance":{name:"Igorance",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/IgoranceCoiffure/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88181481",shop:"hairdresser"},addTags:{brand:"Igorance","brand:wikidata":"Q88181481",name:"Igorance",shop:"hairdresser"},countryCodes:["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/QBハウス":{name:"QBハウス",icon:"temaki-beauty_salon",imageURL:"https://pbs.twimg.com/profile_images/875647527688691712/omCFc4Q3_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11297528",shop:"hairdresser"},addTags:{brand:"QBハウス","brand:en":"QB HOUSE","brand:ja":"QBハウス","brand:wikidata":"Q11297528","brand:wikipedia":"ja:キュービーネット",name:"QBハウス","name:en":"QB HOUSE","name:ja":"QBハウス",shop:"hairdresser"},countryCodes:["jp"],terms:["qb","キュービーハウス"],matchScore:2,suggestion:true},"shop/hairdresser/Ryanhair":{name:"Ryanhair",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/ryanhairlux/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88180487",shop:"hairdresser"},addTags:{brand:"Ryanhair","brand:wikidata":"Q88180487",name:"Ryanhair",shop:"hairdresser"},countryCodes:["lu"],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"},countryCodes:["de"],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/hairdresser/カットコムズ":{name:"カットコムズ",icon:"temaki-beauty_salon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCutcomz%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q91104902",shop:"hairdresser"},addTags:{brand:"カットコムズ","brand:en":"Cutcomz","brand:ja":"カットコムズ","brand:wikidata":"Q91104902",name:"カットコムズ","name:en":"Cutcomz","name:ja":"カットコムズ",shop:"hairdresser"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/カットファクトリー":{name:"カットファクトリー",icon:"temaki-beauty_salon",imageURL:"https://graph.facebook.com/187242128024409/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q91102312",shop:"hairdresser"},addTags:{brand:"カットファクトリー","brand:en":"Cut Factory","brand:ja":"カットファクトリー","brand:wikidata":"Q91102312",name:"カットファクトリー","name:en":"Cut Factory","name:ja":"カットファクトリー",shop:"hairdresser"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/hairdresser/ファミリーカット1000":{name:"ファミリーカット1000",icon:"temaki-beauty_salon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FFamily%20Cut%201000%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q91108482",shop:"hairdresser"},addTags:{brand:"ファミリーカット1000","brand:en":"Family Cut 1000","brand:ja":"ファミリーカット1000","brand:wikidata":"Q91108482",name:"ファミリーカット1000","name:en":"Family Cut 1000","name:ja":"ファミリーカット1000",shop:"hairdresser"},countryCodes:["jp"],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/Proper Job":{name:"Proper Job",icon:"temaki-tools",imageURL:"https://graph.facebook.com/ProperJobStores/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83741810",shop:"hardware"},addTags:{brand:"Proper Job","brand:wikidata":"Q83741810",name:"Proper Job",shop:"hardware"},countryCodes:["gb"],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/Grape Tree":{name:"Grape Tree",icon:"maki-shop",imageURL:"https://graph.facebook.com/grapetree2012/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87071497",shop:"health_food"},addTags:{brand:"Grape Tree","brand:wikidata":"Q87071497",name:"Grape Tree",shop:"health_food"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/health_food/Holland & Barrett":{name:"Holland & Barrett",icon:"maki-shop",imageURL:"https://graph.facebook.com/hollandandbarrett/picture?type=large",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/hearing_aids/Vitakustik":{name:"Vitakustik",icon:"temaki-hearing_aid",imageURL:"https://graph.facebook.com/vitakustik/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87123390",shop:"hearing_aids"},addTags:{brand:"Vitakustik","brand:wikidata":"Q87123390",name:"Vitakustik",shop:"hearing_aids"},countryCodes:["de"],terms:[],matchScore:2,suggestion:true},"shop/hifi/Bang & Olufsen":{name:"Bang & Olufsen",icon:"temaki-speaker",imageURL:"https://pbs.twimg.com/profile_images/1109108038621949953/HUGbJF1__bigger.png",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/hobby/イエロー・サブマリン":{name:"イエロー・サブマリン",icon:"fas-dragon",imageURL:"https://graph.facebook.com/sohonkesurugayasurugamachihonpo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11668496",shop:"hobby"},addTags:{brand:"イエロー・サブマリン","brand:en":"Yellow Submarine","brand:ja":"イエロー・サブマリン","brand:wikidata":"Q11668496","brand:wikipedia":"ja:ホビーベースイエローサブマリン",name:"イエロー・サブマリン","name:en":"Yellow Submarine","name:ja":"イエロー・サブマリン",shop:"hobby"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/hobby/ジャンプショップ":{name:"ジャンプショップ",icon:"fas-dragon",imageURL:"https://graph.facebook.com/jumpshoptokyo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11310200",shop:"hobby"},addTags:{brand:"ジャンプショップ","brand:en":"Jump Shop","brand:ja":"ジャンプショップ","brand:wikidata":"Q11310200","brand:wikipedia":"ja:ジャンプショップ",name:"ジャンプショップ","name:en":"Jump Shop","name:ja":"ジャンプショップ",shop:"hobby"},countryCodes:["jp"],terms:["ジャンプ"],matchScore:2,suggestion:true},"shop/hobby/ポケモンセンター":{name:"ポケモンセンター",icon:"fas-dragon",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPokemon%20centre.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q89673816",shop:"hobby"},addTags:{brand:"ポケモンセンター","brand:en":"Pokémon Center","brand:ja":"ポケモンセンター","brand:wikidata":"Q89673816",name:"ポケモンセンター","name:en":"Pokémon Center","name:ja":"ポケモンセンター",shop:"hobby"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/hobby/駿河屋":{name:"駿河屋",icon:"fas-dragon",imageURL:"https://graph.facebook.com/SurugayaJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88485610",shop:"hobby"},addTags:{brand:"駿河屋","brand:en":"Surugaya","brand:ja":"駿河屋","brand:wikidata":"Q88485610",name:"駿河屋","name:en":"Surugaya","name:ja":"駿河屋",shop:"hobby"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/household_linen/Carré Blanc":{name:"Carré Blanc",icon:"tnp-4306",geometry:["point","area"],tags:{"brand:wikidata":"Q55596025",shop:"household_linen"},addTags:{brand:"Carré Blanc","brand:wikidata":"Q55596025","brand:wikipedia":"fr:Carré blanc (entreprise)",name:"Carré Blanc",shop:"household_linen"},terms:[],matchScore:2,suggestion:true},"shop/household_linen/Descamps":{name:"Descamps",icon:"tnp-4306",imageURL:"https://graph.facebook.com/Descamps/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q91002058",shop:"household_linen"},addTags:{brand:"Descamps","brand:wikidata":"Q91002058",name:"Descamps",shop:"household_linen"},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/KODi":{name:"KODi",icon:"fas-blender",imageURL:"https://graph.facebook.com/kodi.de/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1778216",shop:"houseware"},addTags:{brand:"KODi","brand:wikidata":"Q1778216","brand:wikipedia":"de:Kodi (Unternehmen)",name:"KODi",shop:"houseware"},countryCodes:["de"],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/Habitat (UK)":{name:"Habitat (UK)",icon:"maki-shop",imageURL:"https://graph.facebook.com/HabitatUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87145455",shop:"interior_decoration"},addTags:{brand:"Habitat","brand:wikidata":"Q87145455","brand:wikipedia":"en:Habitat (retailer)",name:"Habitat",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/interior_decoration/Zara Home":{name:"Zara Home",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/473486686119153664/FMfw8ewN_bigger.jpeg",geometry:["point","area"],tags:{"brand:wikidata":"Q3114054",shop:"interior_decoration"},addTags:{brand:"Zara Home","brand:wikidata":"Q3114054","brand:wikipedia":"en:Zara Home",name:"Zara Home",shop:"interior_decoration"},terms:[],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/Beaverbrooks":{name:"Beaverbrooks",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/beaverbrooks/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q4878226",shop:"jewelry"},addTags:{brand:"Beaverbrooks","brand:wikidata":"Q4878226","brand:wikipedia":"en:Beaverbrooks",name:"Beaverbrooks",shop:"jewelry"},countryCodes:["gb"],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/jewelry/ツツミ":{name:"ツツミ",icon:"maki-jewelry-store",imageURL:"https://graph.facebook.com/JewelryTsutsumi/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11318759",shop:"jewelry"},addTags:{brand:"ツツミ","brand:en":"Tsutsumi","brand:ja":"ツツミ","brand:wikidata":"Q11318759","brand:wikipedia":"ja:ツツミ",name:"ツツミ","name:en":"Tsutsumi","name:ja":"ツツミ",official_name:"ジュエリーツツミ","official_name:en":"Jewelry Tsutsumi","official_name:ja":"ジュエリーツツミ",shop:"jewelry"},countryCodes:["jp"],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/Dream Doors":{name:"Dream Doors",icon:"temaki-kitchen_sink",imageURL:"https://pbs.twimg.com/profile_images/997394345400532992/C4mOWNSx_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q84702301",shop:"kitchen"},addTags:{brand:"Dream Doors","brand:wikidata":"Q84702301",name:"Dream Doors",shop:"kitchen"},countryCodes:["gb"],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/lottery/宝くじ":{name:"宝くじ",icon:"fas-ticket-alt",imageURL:"https://graph.facebook.com/takarakuji.qoochan/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87824893",shop:"lottery"},addTags:{brand:"宝くじ","brand:en":"Takarakuji","brand:ja":"宝くじ","brand:wikidata":"Q87824893","brand:wikipedia":"ja:宝くじ",name:"宝くじ","name:en":"Takarakuji","name:ja":"宝くじ",official_name:"全国自治宝くじ","official_name:en":"National Autonomous Lottery","official_name:ja":"全国自治宝くじ",shop:"lottery"},countryCodes:["jp"],terms:["lotoロト","lottery of japan","takarakuji","‎japan loto"],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/massage/カラダファクトリー":{name:"カラダファクトリー",icon:"temaki-spa",imageURL:"https://graph.facebook.com/KARADAfactory/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87833239",shop:"massage"},addTags:{brand:"カラダファクトリー","brand:en":"Karada Factory","brand:ja":"カラダファクトリー","brand:wikidata":"Q87833239",name:"カラダファクトリー","name:en":"Karada Factory","name:ja":"カラダファクトリー",shop:"massage"},countryCodes:["jp"],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/948580455032516608/s0cPVatk_bigger.jpg",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://graph.facebook.com/optus/picture?type=large",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://pbs.twimg.com/profile_images/717629616702107648/gcwgZUU6_bigger.jpg",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FWind%20Logo.png&width=100",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/teluruJP/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q91111384",shop:"mobile_phone"},addTags:{brand:"テルル","brand:en":"Teluru","brand:ja":"テルル","brand:wikidata":"Q91111384",name:"テルル","name:en":"Teluru","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:["nttドコモ","docomo"],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":"Y!mobile","brand:ja":"ワイモバイル","brand:wikidata":"Q5322556","brand:wikipedia":"ja:ワイモバイル",name:"ワイモバイル","name:en":"Y!mobile","name:ja":"ワイモバイル",shop:"mobile_phone"},countryCodes:["jp"],terms:["yahooモバイル","ymobile"],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/money_lender/プロミス":{name:"プロミス",icon:"temaki-money_hand",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAPA00001%20bnr%20smbcBnr.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11243682",shop:"money_lender"},addTags:{brand:"プロミス","brand:en":"Promise","brand:ja":"プロミス","brand:wikidata":"Q11243682","brand:wikipedia":"ja:SMBCコンシューマーファイナンス",name:"プロミス","name:en":"Promise","name:ja":"プロミス",official_name:"SMBCコンシューマーファイナンス","official_name:en":"SMBC Consumer Finance",shop:"money_lender"},countryCodes:["jp"],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/musical_instrument/山野楽器":{name:"山野楽器",icon:"fas-guitar",imageURL:"https://pbs.twimg.com/profile_images/1014029103475843073/kW2H2uZU_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11471074",shop:"musical_instrument"},addTags:{brand:"山野楽器","brand:en":"Yamano Music","brand:ja":"山野楽器","brand:wikidata":"Q11471074","brand:wikipedia":"ja:山野楽器",name:"山野楽器","name:en":"Yamano Music","name:ja":"山野楽器",shop:"musical_instrument"},countryCodes:["jp"],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/Hudson":{name:"Hudson",icon:"fas-newspaper",imageURL:"https://graph.facebook.com/673632989434235/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q5928682",shop:"newsagent"},addTags:{brand:"Hudson","brand:wikidata":"Q5928682","brand:wikipedia":"en:Hudson Group",name:"Hudson",shop:"newsagent"},terms:["hudson news"],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/1227151290788188172/IemxtgUM_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://pbs.twimg.com/profile_images/1072050933054484480/bEd3Ce1j_bigger.png",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://graph.facebook.com/asahicom/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q720503",shop:"newsagent"},addTags:{brand:"朝日新聞","brand:en":"Asahi Shimbun","brand:wikidata":"Q720503","brand:wikipedia":"ja:朝日新聞",name:"朝日新聞","name:en":"Asahi Shimbun",shop:"newsagent"},countryCodes:["jp"],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://pbs.twimg.com/profile_images/849271473177014273/a_dbNYKI_bigger.jpg",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:["opticiens mutualistes"],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/Lynx Optique":{name:"Lynx Optique",icon:"maki-optician",geometry:["point","area"],tags:{"brand:wikidata":"Q25387428",shop:"optician"},addTags:{brand:"Lynx Optique","brand:wikidata":"Q25387428","brand:wikipedia":"fr:Lynx Optique",name:"Lynx Optique",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/Solaris":{name:"Solaris",icon:"maki-optician",imageURL:"https://graph.facebook.com/solarisfrance/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3489229",shop:"optician"},addTags:{brand:"Solaris","brand:wikidata":"Q3489229","brand:wikipedia":"fr:Solaris (magasin)",name:"Solaris",shop:"optician"},countryCodes:["fr"],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/Vision Plus":{name:"Vision Plus",icon:"maki-optician",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20Vision%20Plus.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q23752663",shop:"optician"},addTags:{brand:"Vision Plus","brand:wikidata":"Q23752663",name:"Vision Plus",shop:"optician"},countryCodes:["fr"],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/jinseyewear/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11308974",shop:"optician"},addTags:{brand:"ジンズ","brand:en":"JINS","brand:ja":"ジンズ","brand:wikidata":"Q11308974","brand:wikipedia":"ja:ジンズ",name:"ジンズ","name:en":"JINS","name:ja":"ジンズ",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/optician/ゾフ":{name:"ゾフ",icon:"maki-optician",imageURL:"https://graph.facebook.com/zoff.jp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11255932",shop:"optician"},addTags:{brand:"ゾフ","brand:en":"Zoff","brand:ja":"ゾフ","brand:wikidata":"Q11255932","brand:wikipedia":"ja:Zoff",name:"ゾフ","name:en":"Zoff","name:ja":"ゾフ",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/optician/メガネの三城":{name:"メガネの三城",icon:"maki-optician",imageURL:"https://graph.facebook.com/meganenoparismiki/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11354808",shop:"optician"},addTags:{"alt_name:en":"Megane no Miki",brand:"メガネの三城","brand:ja":"メガネの三城","brand:wikidata":"Q11354808","brand:wikipedia":"jp:三城ホールディングス",name:"メガネの三城","name:en":"Paris Miki","name:ja":"メガネの三城",shop:"optician"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/optician/メガネストアー":{name:"メガネストアー",icon:"maki-optician",imageURL:"https://graph.facebook.com/2028508200729762/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11343503",shop:"optician"},addTags:{brand:"メガネストアー","brand:ja":"メガネストアー","brand:wikidata":"Q11343503","brand:wikipedia":"jp:メガネストアー",name:"メガネストアー","name:en":"Megane Store","name:ja":"メガネストアー",shop:"optician"},countryCodes:["jp"],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/Macpac":{name:"Macpac",icon:"temaki-compass",imageURL:"https://graph.facebook.com/macpac/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6724943",shop:"outdoor"},addTags:{brand:"Macpac","brand:wikidata":"Q6724943","brand:wikipedia":"en:Macpac",name:"Macpac",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"],matchScore:2,suggestion:true},"shop/pawnbroker/M Lhuillier":{name:"M Lhuillier",icon:"temaki-money_hand",imageURL:"https://graph.facebook.com/mlhuillier.official/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83434356",shop:"pawnbroker"},addTags:{brand:"M Lhuillier","brand:wikidata":"Q83434356",name:"M Lhuillier",shop:"pawnbroker"},countryCodes:["ph"],terms:[],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/Animalis":{name:"Animalis",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/Animalisfr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2850015",shop:"pet"},addTags:{brand:"Animalis","brand:wikidata":"Q2850015",name:"Animalis",shop:"pet"},countryCodes:["fr"],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/Jollyes":{name:"Jollyes",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/jollyesuk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q45844955",shop:"pet"},addTags:{brand:"Jollyes","brand:wikidata":"Q45844955",name:"Jollyes",shop:"pet"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/pet/Jumper":{name:"Jumper",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/JumperNL/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87338743",shop:"pet"},addTags:{brand:"Jumper","brand:wikidata":"Q87338743",name:"Jumper",shop:"pet"},countryCodes:["nl"],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/Médor et Compagnie":{name:"Médor et Compagnie",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/medoretcie/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q89344773",shop:"pet"},addTags:{brand:"Médor et Compagnie","brand:wikidata":"Q89344773",name:"Médor et Compagnie",shop:"pet"},countryCodes:["fr"],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 Corner":{name:"Pets Corner",icon:"maki-dog-park",imageURL:"https://graph.facebook.com/petscorner/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17018476",shop:"pet"},addTags:{brand:"Pets Corner","brand:wikidata":"Q17018476","brand:wikipedia":"en:Pets Corner",name:"Pets Corner",shop:"pet"},countryCodes:["gb"],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/Snappy Snaps":{name:"Snappy Snaps",icon:"fas-camera-retro",imageURL:"https://graph.facebook.com/SnappySnapsUK/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q7547351",shop:"photo"},addTags:{brand:"Snappy Snaps","brand:wikidata":"Q7547351","brand:wikipedia":"en:Snappy Snaps",name:"Snappy Snaps",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/photo/コイデカメラ":{name:"コイデカメラ",icon:"fas-camera-retro",imageURL:"https://pbs.twimg.com/profile_images/1096362575409729537/ESlXcKUb_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11301829",shop:"photo"},addTags:{brand:"コイデカメラ","brand:en":"Koide Camera","brand:ja":"コイデカメラ","brand:wikidata":"Q11301829","brand:wikipedia":"ja:コイデカメラ",name:"コイデカメラ","name:en":"Koide Camera","name:ja":"コイデカメラ",shop:"photo"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/photo/パレットプラザ":{name:"パレットプラザ",icon:"fas-camera-retro",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPlaza%20Create%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11335403",shop:"photo"},addTags:{brand:"パレットプラザ","brand:en":"Palette Plaza","brand:ja":"パレットプラザ","brand:wikidata":"Q11335403","brand:wikipedia":"ja:プラザクリエイト",name:"パレットプラザ","name:en":"Palette Plaza","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/second_hand/セカンドストリート":{name:"セカンドストリート",icon:"maki-shop",imageURL:"https://graph.facebook.com/2ndSTREETjp/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11314186",shop:"second_hand"},addTags:{brand:"セカンドストリート","brand:en":"2nd STREET","brand:ja":"セカンドストリート","brand:wikidata":"Q11314186","brand:wikipedia":"ja:セカンドストリート",name:"セカンドストリート","name:en":"2nd STREET","name:ja":"セカンドストリート",shop:"second_hand"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/second_hand/トレジャー・ファクトリー":{name:"トレジャー・ファクトリー",icon:"maki-shop",imageURL:"https://graph.facebook.com/TreFac.recycle/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11322108",shop:"second_hand"},addTags:{brand:"トレジャー・ファクトリー","brand:en":"Treasure Factory","brand:ja":"トレジャー・ファクトリー","brand:wikidata":"Q11322108","brand:wikipedia":"ja:トレジャー・ファクトリー",name:"トレジャー・ファクトリー","name:en":"Treasure Factory","name:ja":"トレジャー・ファクトリー",shop:"second_hand"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/second_hand/ハードオフ":{name:"ハードオフ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1037942244370571264/dHYNAjgb_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11327274",shop:"second_hand"},addTags:{brand:"ハードオフ","brand:en":"Hard Off","brand:ja":"ハードオフ","brand:wikidata":"Q11327274","brand:wikipedia":"ja:ハードオフコーポレーション",name:"ハードオフ","name:en":"Hard Off","name:ja":"ハードオフ",shop:"second_hand"},countryCodes:["jp"],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 (Bolivia)":{name:"Bata (Bolivia)",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q81965517",shop:"shoes"},addTags:{brand:"Bata","brand:wikidata":"Q81965517",name:"Bata",shop:"shoes"},countryCodes:["bo"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Bata (Czech Republic)":{name:"Bata (Czech Republic)",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"},countryCodes:["cz"],terms:[],matchScore:2,suggestion:true},"shop/shoes/Belwest":{name:"Belwest",icon:"maki-shoe",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%D0%91%D0%B5%D0%BB%D0%B2%D0%B5%D1%81%D1%82.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4081686",shop:"shoes"},addTags:{brand:"Belwest","brand:wikidata":"Q4081686","brand:wikipedia":"ru:Белвест",name:"Belwest",shop:"shoes"},countryCodes:["by","ru"],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.Poland/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/Manaco":{name:"Manaco",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q81964197",shop:"shoes"},addTags:{brand:"Manaco","brand:wikidata":"Q81964197",name:"Manaco",shop:"shoes"},countryCodes:["bo"],terms:["calzados manaco"],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 Show":{name:"Shoe Show",icon:"maki-shoe",geometry:["point","area"],tags:{"brand:wikidata":"Q7500015",shop:"shoes"},addTags:{brand:"Shoe Show","brand:wikidata":"Q7500015","brand:wikipedia":"en:Shoe Show",name:"Shoe Show",shop:"shoes"},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/The Walking Company":{name:"The Walking Company",icon:"maki-shoe",imageURL:"https://graph.facebook.com/TheWalkingCompany/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q30716262",shop:"shoes"},addTags:{alt_name:"Walking Company",brand:"The Walking Company","brand:wikidata":"Q30716262","brand:wikipedia":"en:The Walking Company",name:"The Walking Company",shop:"shoes"},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/spices/Penzeys Spices":{name:"Penzeys Spices",icon:"temaki-spice_bottle",geometry:["point","area"],tags:{"brand:wikidata":"Q7165435",shop:"spices"},addTags:{brand:"Penzeys Spices","brand:wikidata":"Q7165435","brand:wikipedia":"en:Penzeys Spices",name:"Penzeys Spices",shop:"spices"},countryCodes:["us"],terms:["penzeys"],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",imageURL:"https://graph.facebook.com/champssports/picture?type=large",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/GO Sport":{name:"GO Sport",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q48746237",shop:"sports"},addTags:{brand:"GO Sport","brand:wikidata":"Q48746237","brand:wikipedia":"fr:GO Sport",name:"GO Sport",shop:"sports"},countryCodes:["fr"],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",imageURL:"https://graph.facebook.com/intersport/picture?type=large",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",imageURL:"https://graph.facebook.com/sportzonept/picture?type=large",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://pbs.twimg.com/profile_images/647496242080026624/NKwGIEgb_bigger.png",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/sports/ゴルフパートナー":{name:"ゴルフパートナー",icon:"fas-futbol",imageURL:"https://pbs.twimg.com/profile_images/890531445592150016/h9BKD3oT_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11303729",shop:"sports"},addTags:{brand:"ゴルフパートナー","brand:en":"Golf Partner","brand:ja":"ゴルフパートナー","brand:wikidata":"Q11303729","brand:wikipedia":"ja:ゴルフパートナー",name:"ゴルフパートナー","name:en":"Golf Partner","name:ja":"ゴルフパートナー",shop:"sports",sport:"golf"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/sports/ゴルフ・ドゥ":{name:"ゴルフ・ドゥ",icon:"fas-futbol",geometry:["point","area"],tags:{"brand:wikidata":"Q11303734",shop:"sports"},addTags:{brand:"ゴルフ・ドゥ","brand:en":"Golf・Do","brand:ja":"ゴルフ・ドゥ","brand:wikidata":"Q11303734","brand:wikipedia":"ja:ゴルフ・ドゥ",name:"ゴルフ・ドゥ","name:en":"Golf・Do","name:ja":"ゴルフ・ドゥ",shop:"sports",sport:"golf"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/sports/スポーツオーソリティ":{name:"スポーツオーソリティ",icon:"fas-futbol",imageURL:"https://pbs.twimg.com/profile_images/647496242080026624/NKwGIEgb_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q7579688",shop:"sports"},addTags:{brand:"スポーツオーソリティ","brand:en":"Sports Authority","brand:ja":"スポーツオーソリティ","brand:wikidata":"Q7579688","brand:wikipedia":"ja:スポーツオーソリティ",name:"スポーツオーソリティ","name:en":"Sports Authority","name:ja":"スポーツオーソリティ",shop:"sports"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/sports/スポーツデポ":{name:"スポーツデポ",icon:"fas-futbol",imageURL:"https://pbs.twimg.com/profile_images/701601175464882176/dvEyPLdV_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11313050",shop:"sports"},addTags:{brand:"スポーツデポ","brand:en":"Sports Depo","brand:ja":"スポーツデポ","brand:wikidata":"Q11313050","brand:wikipedia":"ja:スポーツDEPO",name:"スポーツデポ","name:en":"Sports Depo","name:ja":"スポーツデポ",shop:"sports"},countryCodes:["jp"],terms:["スポーツdepo"],matchScore:2,suggestion:true},"shop/sports/スーパースポーツゼビオ":{name:"スーパースポーツゼビオ",icon:"fas-futbol",imageURL:"https://graph.facebook.com/yourrepo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3108542",shop:"sports"},addTags:{brand:"スーパースポーツゼビオ","brand:en":"Super Sports Xebio","brand:ja":"スーパースポーツゼビオ","brand:wikidata":"Q3108542","brand:wikipedia":"ja:ゼビオホールディングス",name:"スーパースポーツゼビオ","name:en":"Super Sports Xebio","name:ja":"スーパースポーツゼビオ",shop:"sports"},countryCodes:["jp"],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/Koh-i-Noor":{name:"Koh-i-Noor",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/KohinoorHardtmuthOfficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q698032",shop:"stationery"},addTags:{brand:"Koh-i-Noor","brand:wikidata":"Q698032","brand:wikipedia":"en:Koh-i-Noor Hardtmuth",name:"Koh-i-Noor",official_name:"Koh-i-Noor Hardtmuth",shop:"stationery"},countryCodes:["cz","sk"],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/Ševt":{name:"Ševt",icon:"fas-paperclip",imageURL:"https://graph.facebook.com/sevtpapiernictvo/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q15980348",shop:"stationery"},addTags:{brand:"Ševt","brand:wikidata":"Q15980348","brand:wikipedia":"sk:ŠEVT",name:"Ševt",shop:"stationery"},countryCodes:["sk"],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/storage_rental/UK Storage Company":{name:"UK Storage Company",icon:"temaki-storage_rental",imageURL:"https://graph.facebook.com/ukstoragecompanywestonsupermare/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87411468",shop:"storage_rental"},addTags:{brand:"UK Storage Company","brand:wikidata":"Q87411468",name:"UK Storage Company",shop:"storage_rental"},countryCodes:["gb"],terms:[],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/Alvo":{name:"Alvo",icon:"maki-grocery",imageURL:"https://graph.facebook.com/alvopeer/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q16068936",shop:"supermarket"},addTags:{brand:"Alvo","brand:wikidata":"Q16068936","brand:wikipedia":"nl:Alvo (supermarkt)",name:"Alvo",shop:"supermarket"},countryCodes:["be","lu"],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/Ara":{name:"Ara",icon:"maki-grocery",imageURL:"https://graph.facebook.com/tiendasaracolombia/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q63148677",shop:"supermarket"},addTags:{brand:"Ara","brand:wikidata":"Q63148677","brand:wikipedia":"de:Tiendas Ara",name:"Ara",shop:"supermarket"},countryCodes:["co"],terms:[],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/Assaí Atacadista":{name:"Assaí Atacadista",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAssai.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q28679415",shop:"supermarket"},addTags:{brand:"Assaí Atacadista","brand:wikidata":"Q28679415","brand:wikipedia":"pt:Assaí Atacadista",name:"Assaí Atacadista",shop:"supermarket"},countryCodes:["br"],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/Auchan Drive":{name:"Auchan Drive",icon:"maki-grocery",imageURL:"https://graph.facebook.com/AuchanDrive/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q2870659",shop:"supermarket"},addTags:{brand:"Auchan Drive","brand:wikidata":"Q2870659","brand:wikipedia":"fr:Auchan Drive",name:"Auchan Drive",shop:"supermarket"},countryCodes:["fr","lu"],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 Market":{name:"Big Market",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q28135235",shop:"supermarket"},addTags:{brand:"Big Market","brand:wikidata":"Q28135235","brand:wikipedia":"sq:Big Market",name:"Big Market",shop:"supermarket"},countryCodes:["al"],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/BonArea":{name:"BonArea",icon:"maki-grocery",imageURL:"https://graph.facebook.com/bonarea.oficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11924743",shop:"supermarket"},addTags:{brand:"Bon Area","brand:wikidata":"Q11924743","brand:wikipedia":"ca:Grup Alimentari Guissona",name:"Bon Area",shop:"supermarket"},countryCodes:["es"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Bonpreu":{name:"Bonpreu",icon:"maki-grocery",imageURL:"https://graph.facebook.com/supermercatsbonpreuesclat/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11924747",shop:"supermarket"},addTags:{brand:"Bonpreu","brand:wikidata":"Q11924747","brand:wikipedia":"ca:Grup Bon Preu",name:"Bonpreu",shop:"supermarket"},countryCodes:["es"],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://pbs.twimg.com/profile_images/1239110499553488898/S31rVo48_bigger.jpg",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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCarrefour%20contact%20logo.svg&width=100",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/Casino":{name:"Casino",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogo%20of%20Casino%20Supermarch%C3%A9s.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q89029184",shop:"supermarket"},addTags:{brand:"Casino","brand:wikidata":"Q89029184",name:"Casino",shop:"supermarket"},countryCodes:["fr"],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 Food":{name:"Co-op Food",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1243828928134995968/AN-8Ptzi_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q3277439",shop:"supermarket"},addTags:{brand:"Co-op Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"Co-op Food",shop:"supermarket"},countryCodes:["gb"],terms:["coop","cooperative food","the co-operative food","the cooperative"],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/Coccinelle Express":{name:"Coccinelle Express",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoccinelle%20express%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q90020479",shop:"supermarket"},addTags:{brand:"Coccinelle Express","brand:wikidata":"Q90020479",name:"Coccinelle Express",shop:"supermarket"},countryCodes:["fr"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Coccinelle Supermarché":{name:"Coccinelle Supermarché",icon:"maki-grocery",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FCoccinelle%20supermarche%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q90020459",shop:"supermarket"},addTags:{brand:"Coccinelle Supermarché","brand:wikidata":"Q90020459",name:"Coccinelle Supermarché",shop:"supermarket"},countryCodes:["fr"],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 Eesti":{name:"Coop Eesti",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q12361460",shop:"supermarket"},addTags:{brand:"Coop Eesti","brand:wikidata":"Q12361460","brand:wikipedia":"ee:Coop Eesti",name:"Coop",shop:"supermarket"},countryCodes:["ee"],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/Côté Nature":{name:"Côté Nature",icon:"maki-grocery",imageURL:"https://graph.facebook.com/113318390042872/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q90016283",shop:"supermarket"},addTags:{brand:"Côté Nature","brand:wikidata":"Q90016283",name:"Côté Nature",organic:"only",shop:"supermarket"},countryCodes:["fr"],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:["leclerc drive"],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"},countryCodes:["sk"],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",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/Hipermaxi":{name:"Hipermaxi",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q81968262",shop:"supermarket"},addTags:{brand:"Hipermaxi","brand:wikidata":"Q81968262",name:"Hipermaxi",shop:"supermarket"},countryCodes:["bo"],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/Hruška":{name:"Hruška",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q58196374",shop:"supermarket"},addTags:{brand:"Hruška","brand:wikidata":"Q58196374",name:"Hruška",shop:"supermarket"},countryCodes:["cz"],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/IC Norte":{name:"IC Norte",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q81967653",shop:"supermarket"},addTags:{brand:"IC Norte","brand:wikidata":"Q81967653",name:"IC Norte",shop:"supermarket"},countryCodes:["bo"],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:[],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://pbs.twimg.com/profile_images/1242150382085779463/Cmm3JM1n_bigger.jpg",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://pbs.twimg.com/profile_images/1242150382085779463/Cmm3JM1n_bigger.jpg",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/Ketal":{name:"Ketal",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q81967299",shop:"supermarket"},addTags:{brand:"Ketal","brand:wikidata":"Q81967299",name:"Ketal",shop:"supermarket"},countryCodes:["bo"],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 Sirena":{name:"La Sirena",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1205054191066124289/xaCxY6XI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q21034458",shop:"supermarket"},addTags:{brand:"La Sirena","brand:wikidata":"Q21034458","brand:wikipedia":"ca:La Sirena",name:"La Sirena",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/MEGAドン・キホーテ":{name:"MEGAドン・キホーテ",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1248051445049384960/OEEckC9G_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q1185381",shop:"supermarket"},addTags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"MEGAドン・キホーテ","name:en":"MEGA Don Quijote","name:ja":"MEGAドン・キホーテ",opening_hours:"24/7",shop:"supermarket",short_name:"MEGAドンキ","short_name:en":"MegaDonki","short_name:ja":"MEGAドンキ"},countryCodes:["jp"],terms:["メガ・ドン・キホーテ"],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%2FLogo-masymas%20.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/mila.zakupyazmilo/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/Milk-Agro":{name:"Milk-Agro",icon:"maki-grocery",imageURL:"https://graph.facebook.com/milkagro.sk/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q64173785",shop:"supermarket"},addTags:{brand:"Milk-Agro","brand:wikidata":"Q64173785",name:"Milk-Agro",shop:"supermarket"},countryCodes:["sk"],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:["at","be","cy","cz","de","es","fr","gb","gr","it","me","nl","pt"],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"},countryCodes:["ad","fr","tn"],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/NTUC Fairprice":{name:"NTUC Fairprice",icon:"maki-grocery",imageURL:"https://graph.facebook.com/thatsmyfairprice/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6955519",shop:"supermarket"},addTags:{brand:"NTUC Fairprice","brand:wikidata":"Q6955519","brand:wikipedia":"en:NTUC FairPrice",name:"NTUC Fairprice",shop:"supermarket"},terms:[],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 Seasons Market":{name:"New Seasons Market",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/976972905975136256/NeeBGHeX_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q7011463",shop:"supermarket"},addTags:{brand:"New Seasons Market","brand:wikidata":"Q7011463","brand:wikipedia":"en:New Seasons Market",name:"New Seasons Market",shop:"supermarket"},countryCodes:["us"],terms:["new seasons"],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%20Baltic%20Logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3741108",shop:"supermarket"},addTags:{brand:"Rimi","brand:wikidata":"Q3741108","brand:wikipedia":"en:Rimi Baltic",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/Selver":{name:"Selver",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q3771177",shop:"supermarket"},addTags:{brand:"Selver","brand:wikidata":"Q3771177","brand:wikipedia":"en:Selver",name:"Selver",shop:"supermarket"},countryCodes:["ee"],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/Smatch":{name:"Smatch",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q5185959",shop:"supermarket"},addTags:{brand:"Smatch","brand:wikidata":"Q5185959","brand:wikipedia":"fr:Smatch",name:"Smatch",shop:"supermarket"},countryCodes:["be","lu"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/Smith's":{name:"Smith's",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1192029587607343104/HcbJ1_RT_bigger.jpg",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/tiendasoriana/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/Sorli Discau":{name:"Sorli Discau",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1205054191066124289/xaCxY6XI_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q21034458",shop:"supermarket"},addTags:{brand:"Sorli Discau","brand:wikidata":"Q21034458","brand:wikipedia":"ca:Sorli",name:"Sorli Discau",shop:"supermarket"},countryCodes:["es"],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/Super del Norte":{name:"Super del Norte",icon:"maki-grocery",imageURL:"https://graph.facebook.com/superdelnorte/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q88388513",shop:"supermarket"},addTags:{brand:"Super del Norte","brand:wikidata":"Q88388513",name:"Super del Norte",shop:"supermarket"},countryCodes:["mx"],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"},countryCodes:["gb","ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/SuperVerd":{name:"SuperVerd",icon:"maki-grocery",imageURL:"https://graph.facebook.com/superverd/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11950546",shop:"supermarket"},addTags:{brand:"Superverd","brand:wikidata":"Q11950546","brand:wikipedia":"ca:Superverd",name:"Superverd",shop:"supermarket"},countryCodes:["es"],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","ie"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/The Food Warehouse":{name:"The Food Warehouse",icon:"maki-grocery",imageURL:"https://graph.facebook.com/FoodWarehouse/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87263899",shop:"supermarket"},addTags:{brand:"The Food Warehouse","brand:wikidata":"Q87263899",name:"The Food Warehouse",shop:"supermarket"},countryCodes:["gb"],terms:[],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/bi1":{name:"bi1",icon:"maki-grocery",geometry:["point","area"],tags:{"brand:wikidata":"Q56325139",shop:"supermarket"},addTags:{brand:"bi1","brand:wikidata":"Q56325139","brand:wikipedia":"pl:Bi1",name:"bi1",shop:"supermarket"},countryCodes:["fr","pl"],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/Maxi.Srbija/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q6795490",shop:"supermarket"},addTags:{brand:"Макси","brand:en":"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"sr:Макси",name:"Макси","name:en":"Maxi",shop:"supermarket"},countryCodes:["rs"],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":"Q11280900",shop:"supermarket"},addTags:{brand:"ゆめタウン","brand:en":"YouMe Town","brand:ja":"ゆめタウン","brand:wikidata":"Q11280900","brand:wikipedia":"ja:ゆめタウン",name:"ゆめタウン","name:en":"YouMe Town","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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FAPITA%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q55384637",shop:"supermarket"},addTags:{brand:"アピタ","brand:en":"APITA","brand:ja":"アピタ","brand:wikidata":"Q55384637",name:"アピタ","name:en":"APITA","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",geometry:["point","area"],tags:{"brand:wikidata":"Q11331715",shop:"supermarket"},addTags:{brand:"イオンマーケット","brand:en":"Aeon Market","brand:ja":"イオンマーケット","brand:wikidata":"Q11331715","brand:wikipedia":"ja:イオンマーケット",name:"イオンマーケット","name:en":"Aeon Market","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/1874285059/ECOS_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11289886",shop:"supermarket"},addTags:{brand:"エコス","brand:en":"Ecos","brand:ja":"エコス","brand:wikidata":"Q11289886","brand:wikipedia":"ja:エコス",name:"エコス","name:en":"Ecos","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%2FA-coop%20text%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11291524",shop:"supermarket"},addTags:{brand:"エーコープ","brand:en":"A-COOP","brand:ja":"エーコープ","brand:wikidata":"Q11291524","brand:wikipedia":"ja:エーコープ",name:"エーコープ","name:en":"A-COOP","name:ja":"エーコープ",organic:"only",shop:"supermarket"},countryCodes:["jp"],terms:["aコープ"],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/okuwa.net/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11293166",shop:"supermarket"},addTags:{brand:"オークワ","brand:en":"Okuwa","brand:ja":"オークワ","brand:wikidata":"Q11293166","brand:wikipedia":"ja:オークワ",name:"オークワ","name:en":"Okuwa","name:ja":"オークワ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/オーケーストア":{name:"オーケーストア",icon:"maki-grocery",imageURL:"https://pbs.twimg.com/profile_images/1128535559641559040/FozyK10M_bigger.png",geometry:["point","area"],tags:{"brand:wikidata":"Q11293184",shop:"supermarket"},addTags:{brand:"オーケー","brand:en":"OK","brand:ja":"オーケー","brand:wikidata":"Q11293184","brand:wikipedia":"ja:オーケー",name:"オーケーストア","name:en":"OK Store","name:ja":"オーケーストア",shop:"supermarket"},countryCodes:["jp"],terms:["オーケー, okストア"],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://graph.facebook.com/kyoei.fanpage/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11297581",shop:"supermarket"},addTags:{brand:"キョーエイ","brand:en":"Kyoei","brand:ja":"キョーエイ","brand:wikidata":"Q11297581","brand:wikipedia":"ja:キョーエイ",name:"キョーエイ","name:en":"Kyoei","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://graph.facebook.com/official.daiei/picture?type=large",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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FPIAGO%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q91014434",shop:"supermarket"},addTags:{brand:"ピアゴ","brand:en":"PIAGO","brand:ja":"ピアゴ","brand:wikidata":"Q91014434",name:"ピアゴ","name:en":"PIAGO","name:ja":"ピアゴ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/フジ":{name:"フジ",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fujicompanies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8963035",shop:"supermarket"},addTags:{brand:"フジ","brand:en":"Fuji","brand:ja":"フジ","brand:wikidata":"Q8963035","brand:wikipedia":"ja:フジ (チェーンストア)",name:"フジ","name:en":"Fuji","name:ja":"フジ",shop:"supermarket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/supermarket/フジグラン":{name:"フジグラン",icon:"maki-grocery",imageURL:"https://graph.facebook.com/fujicompanies/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q8963035",shop:"supermarket"},addTags:{brand:"フジ","brand:en":"Fuji","brand:ja":"フジ","brand:wikidata":"Q8963035","brand:wikipedia":"ja:フジ (チェーンストア)",name:"フジグラン","name:en":"Fuji GRAND","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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMammy%20Mart%20logo.png&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11340902",shop:"supermarket"},addTags:{brand:"マミーマート","brand:en":"Mammy Mart","brand:ja":"マミーマート","brand:wikidata":"Q11340902","brand:wikipedia":"ja:マミーマート",name:"マミーマート","name:en":"Mammy Mart","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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FMarunaka%20text%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11341399",shop:"supermarket"},addTags:{brand:"マルナカ","brand:en":"Marunaka","brand:ja":"マルナカ","brand:wikidata":"Q11341399","brand:wikipedia":"ja:マルナカ (チェーンストア)",name:"マルナカ","name:en":"Marunaka","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",geometry:["point","area"],tags:{"brand:wikidata":"Q11345199",shop:"supermarket"},addTags:{brand:"ヤマナカ","brand:en":"Yamanaka","brand:ja":"ヤマナカ","brand:wikidata":"Q11345199","brand:wikipedia":"ja:ヤマナカ",name:"ヤマナカ","name:en":"Yamanaka","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://pbs.twimg.com/profile_images/1239110499553488898/S31rVo48_bigger.jpg",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/seijoishii/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11495410",shop:"supermarket"},addTags:{brand:"成城石井","brand:en":"Seijo Ishii","brand:ja":"成城石井","brand:wikidata":"Q11495410","brand:wikipedia":"ja:成城石井",name:"成城石井","name:en":"Seijo Ishii","name:ja":"成城石井",shop:"supermarket"},countryCodes:["jp"],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://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSotetsu%20Rosen%20simple%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q11582450",shop:"supermarket"},addTags:{alt_name:"そうてつローゼン",brand:"相鉄ローゼン","brand:en":"Sotetsu Rosen","brand:ja":"相鉄ローゼン","brand:wikidata":"Q11582450","brand:wikipedia":"ja:相鉄ローゼン",name:"相鉄ローゼン","name:en":"Sotetsu Rosen","name:ja":"相鉄ローゼン",shop:"supermarket"},countryCodes:["jp"],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/lesliespoolcare/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/Kusmi Tea":{name:"Kusmi Tea",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/KusmiTea.Paris/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q944186",shop:"tea"},addTags:{brand:"Kusmi Tea","brand:wikidata":"Q944186","brand:wikipedia":"en:Kusmi Tea",name:"Kusmi Tea",shop:"tea"},terms:[],matchScore:2,suggestion:true},"shop/tea/Palais des Thés":{name:"Palais des Thés",icon:"maki-teahouse",imageURL:"https://graph.facebook.com/palaisdesthes/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3225161",shop:"tea"},addTags:{brand:"Palais des Thés","brand:wikidata":"Q3225161","brand:wikipedia":"en:Le Palais des Thés",name:"Palais des Thés",shop:"tea"},countryCodes:["be","fr","ge","il","lu","no","ru"],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/ticket/みどりの窓口":{name:"みどりの窓口",icon:"fas-ticket-alt",geometry:["point","area"],tags:{"brand:wikidata":"Q11279064",shop:"ticket"},addTags:{brand:"みどりの窓口","brand:en":"Midori-no-madoguchi","brand:ja":"みどりの窓口","brand:wikidata":"Q11279064","brand:wikipedia":"ja:みどりの窓口",name:"みどりの窓口","name:en":"JR Ticket Office","name:ja":"みどりの窓口",shop:"ticket"},countryCodes:["jp"],terms:[],matchScore:2,suggestion:true},"shop/tiles/Tile Giant":{name:"Tile Giant",icon:"temaki-tiling",imageURL:"https://graph.facebook.com/tilegiantofficial/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q87007841",shop:"tiles"},addTags:{brand:"Tile Giant","brand:wikidata":"Q87007841",name:"Tile Giant",shop:"tiles"},countryCodes:["gb"],terms:[],matchScore:2,suggestion:true},"shop/tiles/Topps Tiles":{name:"Topps Tiles",icon:"temaki-tiling",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/tool_hire/Kiloutou":{name:"Kiloutou",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLogotype%20en%20utilisation%20depuis%202016.jpg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3196672",shop:"tool_hire"},addTags:{brand:"Kiloutou","brand:wikidata":"Q3196672","brand:wikipedia":"fr:Kiloutou",name:"Kiloutou",shop:"tool_hire"},terms:[],matchScore:2,suggestion:true},"shop/tool_hire/Loxam":{name:"Loxam",icon:"temaki-tools",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FLoxam%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q3264407",shop:"tool_hire"},addTags:{brand:"Loxam","brand:wikidata":"Q3264407","brand:wikipedia":"fr:Loxam",name:"Loxam",shop:"tool_hire"},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/Bradfords Building Supplies":{name:"Bradfords Building Supplies",icon:"temaki-tools",imageURL:"https://graph.facebook.com/BradfordsBuild/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q17986044",shop:"trade"},addTags:{brand:"Bradfords Building Supplies","brand:wikidata":"Q17986044","brand:wikipedia":"en:Bradfords Group",name:"Bradfords Building Supplies",shop:"trade"},countryCodes:["gb"],terms:[],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/Miles Morgan Travel":{name:"Miles Morgan Travel",icon:"fas-suitcase",imageURL:"https://graph.facebook.com/milesmorgantravelagent/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q83179278",shop:"travel_agency"},addTags:{brand:"Miles Morgan Travel","brand:wikidata":"Q83179278",name:"Miles Morgan Travel",shop:"travel_agency"},countryCodes:["gb"],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/STA Travel":{name:"STA Travel",icon:"fas-suitcase",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FSTA%20Travel%20Logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q2208025",shop:"travel_agency"},addTags:{brand:"STA Travel","brand:wikidata":"Q2208025","brand:wikipedia":"en:STA Travel",name:"STA Travel",shop:"travel_agency"},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/Alliance Tire Company":{name:"Alliance Tire Company",icon:"temaki-tire",geometry:["point","area"],tags:{"brand:wikidata":"Q420541",shop:"tyres"},addTags:{brand:"Alliance","brand:wikidata":"Q420541","brand:wikipedia":"en:Alliance Tire Company Ltd",name:"Alliance Tire Company",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Apollo Tyres":{name:"Apollo Tyres",icon:"temaki-tire",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FApollo%20Tyres%20logo.svg&width=100",geometry:["point","area"],tags:{"brand:wikidata":"Q4780362",shop:"tyres"},addTags:{brand:"Apollo Tyres","brand:wikidata":"Q4780362","brand:wikipedia":"en:Apollo Tyres",name:"Apollo Tyres",shop:"tyres"},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/Continental AG":{name:"Continental AG",icon:"temaki-tire",imageURL:"https://graph.facebook.com/Continental/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q163241",shop:"tyres"},addTags:{brand:"Continental AG","brand:wikidata":"Q163241","brand:wikipedia":"en:Continental AG",name:"Continental AG",shop:"tyres"},terms:[],matchScore:2,suggestion:true},"shop/tyres/Cooper Tire & Rubber Company":{name:"Cooper Tire & Rubber Company",icon:"temaki-tire",imageURL:"https://graph.facebook.com/coopertire/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q1129847",shop:"tyres"},addTags:{brand:"Cooper Tire & Rubber Company","brand:wikidata":"Q1129847","brand:wikipedia":"en:Cooper Tire & Rubber Company",name:"Cooper Tire & Rubber Company",shop:"tyres"},countryCodes:["us"],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/Eurotyre (BelgiumNetherlands)":{name:"Eurotyre (Belgium/Netherlands)",icon:"temaki-tire",imageURL:"https://graph.facebook.com/corteauto.eurotyre/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q91309121",shop:"tyres"},addTags:{brand:"Eurotyre","brand:wikidata":"Q91309121",name:"Eurotyre",shop:"tyres"},countryCodes:["be","nl"],terms:[],matchScore:2,suggestion:true},"shop/tyres/Eurotyre (France)":{name:"Eurotyre (France)",icon:"temaki-tire",imageURL:"https://graph.facebook.com/EurotyreFr/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q3060871",shop:"tyres"},addTags:{brand:"Eurotyre","brand:wikidata":"Q3060871","brand:wikipedia":"fr:Eurotyre",name:"Eurotyre",shop:"tyres"},countryCodes:["fr","so"],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/1242817497973350400/MkhRtzSk_bigger.jpg",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/THANK YOU MART":{name:"THANK YOU MART",icon:"maki-shop",imageURL:"https://graph.facebook.com/390yenSHOP.ThankYouMart/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11305509",shop:"variety_store"},addTags:{"alt_name:en":"390 Yen Shop",brand:"THANK YOU MART","brand:en":"THANK YOU MART","brand:ja":"サンキューマート","brand:wikidata":"Q11305509","brand:wikipedia":"ja:サンキューマート",name:"THANK YOU MART","name:en":"THANK YOU MART","name:ja":"サンキューマート",shop:"variety_store"},countryCodes:["jp"],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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2FDirex%20logo.svg&width=100",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",imageURL:"https://commons.wikimedia.org/w/index.php?title=Special%3ARedirect%2Ffile%2F%E3%83%88%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%AB%E3%82%AB%E3%83%B3%E3%83%91%E3%83%8B%E3%83%BC%20%E3%83%AD%E3%82%B4.png&width=100",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/1248051445049384960/OEEckC9G_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/variety_store/ワッツ":{name:"ワッツ",icon:"maki-shop",imageURL:"https://pbs.twimg.com/profile_images/1016136773578027008/H7YAimDl_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q11351402",shop:"variety_store"},addTags:{brand:"ワッツ","brand:en":"Watts","brand:ja":"ワッツ","brand:wikidata":"Q11351402","brand:wikipedia":"ja:ワッツ (企業)",name:"ワッツ","name:en":"Watts","name:ja":"ワッツ",shop:"variety_store"},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://pbs.twimg.com/profile_images/875292214191992832/Z7Ypx9pL_bigger.jpg",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/Seiko":{name:"Seiko",icon:"maki-watch",imageURL:"https://pbs.twimg.com/profile_images/922617385185558528/Khd7qk6K_bigger.jpg",geometry:["point","area"],tags:{"brand:wikidata":"Q322601",shop:"watches"},addTags:{brand:"Seiko","brand:wikidata":"Q322601","brand:wikipedia":"en:Seiko",name:"Seiko",shop:"watches"},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/Booker Wholesale":{name:"Booker Wholesale",icon:"maki-warehouse",geometry:["point","area"],tags:{"brand:wikidata":"Q4943180",shop:"wholesale"},addTags:{brand:"Booker Wholesale","brand:wikidata":"Q4943180","brand:wikipedia":"en:Booker Group",name:"Booker Wholesale",shop:"wholesale"},countryCodes:["gb"],terms:[],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},"shop/wine/Wine Rack":{name:"Wine Rack",icon:"maki-alcohol-shop",geometry:["point","area"],tags:{"brand:wikidata":"Q86707661",shop:"wine"},addTags:{brand:"Wine Rack","brand:wikidata":"Q86707661",name:"Wine Rack",shop:"wine"},countryCodes:["ca"],terms:[],matchScore:2,suggestion:true},"tourism/caravan_site/Big 4 Holiday Parks":{name:"Big 4 Holiday Parks",icon:"temaki-camper_trailer",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-camper_trailer",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-camper_trailer",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-camper_trailer",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-camper_trailer",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",imageURL:"https://graph.facebook.com/gaylordhotels/picture?type=large",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",imageURL:"https://graph.facebook.com/ParkPlaza/picture?type=large",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://graph.facebook.com/TravelodgeEs/picture?type=large",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",imageURL:"https://graph.facebook.com/TrubyHilton/picture?type=large",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/apahotel/picture?type=large",geometry:["point","area"],tags:{"brand:wikidata":"Q11284497",tourism:"hotel"},addTags:{brand:"アパホテル","brand:en":"APA Hotel","brand:ja":"アパホテル","brand:wikidata":"Q11284497","brand:wikipedia":"ja:アパグループ",name:"アパホテル","name:en":"APA Hotel","name:ja":"アパホテル",tourism:"hotel"},countryCodes:["jp"],terms:["apaホテル"],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:["東横inn"],matchScore:2,suggestion:true},"tourism/motel/Americas Best Value Inn":{name:"Americas Best Value Inn",icon:"maki-lodging",geometry:["point","area"],tags:{"brand:wikidata":"Q4742512",tourism:"motel"},addTags:{brand:"Americas Best Value Inn","brand:wikidata":"Q4742512",name:"Americas Best Value Inn",tourism:"motel"},terms:[],matchScore:2,suggestion:true},"tourism/motel/Budget Host Inn":{name:"Budget Host Inn",icon:"maki-lodging",imageURL:"https://graph.facebook.com/BudgetHostInnFortDodge/picture?type=large",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",imageURL:"https://graph.facebook.com/KnightsInnHotels/picture?type=large",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}};
28349
28350         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"]};
28351
28352         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:"temaki-railway_track",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"]}};
28353
28354         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:"semiCombo",label:"Services"},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:"combo",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_combo:{key:"bridge",type:"combo",label:"Type"},bridge:{key:"bridge",type:"typeCombo",label:"Type",placeholder:"Default"},"bridge/support":{key:"bridge:support",type:"typeCombo",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_parking:{key:"capacity",type:"number",minValue:0,label:"Total Spaces",placeholder:"10, 20, 30..."},capacity:{key:"capacity",type:"number",minValue:0,label:"Capacity",placeholder:"50, 100, 200..."},"capacity/disabled_parking":{key:"capacity:disabled",type:"number",minValue:0,label:"Accessible Spaces",placeholder:"1, 2, 3..."},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",placeholder:"YYYY-MM-DD"},circumference:{key:"circumference",type:"combo",label:"Circumference",snake_case:false,placeholder:"1 m, 20 cm, 30 in…"},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"}}},depth:{key:"depth",minValue:0,type:"number",label:"Depth (Meters)"},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",terms:["length","mileage"]},"disused/railway":{key:"disused:railway",type:"typeCombo",label:"Type"},"disused/shop":{key:"disused:shop",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"},ele_node:{key:"ele",type:"number",icon:"elevation",label:"Elevation",universal:true,geometry:["point","vertex"],terms:["altitude","height"]},ele:{key:"ele",type:"number",icon:"elevation",label:"Elevation",geometry:["line","area","relation"],terms:["altitude","height"]},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"}},terms:["contact line","powered","third rail"]},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"},"garden/type":{key:"garden:type",type:"combo",label:"Garden Type"},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 Connection",strings:{options:{yes:"Yes",no:"No",wlan:"Wifi",wired:"Wired",terminal:"Terminal"}},terms:["wifi","wlan"]},"internet_access/fee":{key:"internet_access:fee",type:"combo",label:"Internet Access",strings:{options:{no:"Free",yes:"Paid",customers:"Customers Only"}},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"},kneipp_water_cure_multi:{key:"kneipp_water_cure:",type:"multiCombo",label:"Basin Types"},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"]},mimics:{key:"mimics",type:"combo",label:"Mimics",terms:["camoflauged","disguised","looks like","tree"]},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",placeholder:"YYYY-MM-DD"},opening_hours:{key:"opening_hours",type:"combo",label:"Hours",placeholder:"Unknown",snake_case:false},"opening_hours/covid19":{key:"opening_hours:covid19",type:"combo",label:"COVID-19 Pandemic Hours",terms:["coronavirus","lockdown","opening hours","SARS‑CoV‑2"],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_space:{key:"parking_space",type:"combo",label:"Type"},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"},plots:{key:"plots",type:"number",minValue:0,label:"Plots",placeholder:"10, 20, 30..."},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",placeholder:"YYYY-MM-DD",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"},"telecom/medium":{key:"telecom:medium",type:"combo",label:"Medium"},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_combo:{key:"tunnel",type:"combo",label:"Type"},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"}}}};
28355
28356         var quickselect = createCommonjsModule(function (module, exports) {
28357         (function (global, factory) {
28358                  module.exports = factory() ;
28359         }(commonjsGlobal, (function () {
28360         function quickselect(arr, k, left, right, compare) {
28361             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
28362         }
28363
28364         function quickselectStep(arr, k, left, right, compare) {
28365
28366             while (right > left) {
28367                 if (right - left > 600) {
28368                     var n = right - left + 1;
28369                     var m = k - left + 1;
28370                     var z = Math.log(n);
28371                     var s = 0.5 * Math.exp(2 * z / 3);
28372                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
28373                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
28374                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
28375                     quickselectStep(arr, k, newLeft, newRight, compare);
28376                 }
28377
28378                 var t = arr[k];
28379                 var i = left;
28380                 var j = right;
28381
28382                 swap(arr, left, k);
28383                 if (compare(arr[right], t) > 0) { swap(arr, left, right); }
28384
28385                 while (i < j) {
28386                     swap(arr, i, j);
28387                     i++;
28388                     j--;
28389                     while (compare(arr[i], t) < 0) { i++; }
28390                     while (compare(arr[j], t) > 0) { j--; }
28391                 }
28392
28393                 if (compare(arr[left], t) === 0) { swap(arr, left, j); }
28394                 else {
28395                     j++;
28396                     swap(arr, j, right);
28397                 }
28398
28399                 if (j <= k) { left = j + 1; }
28400                 if (k <= j) { right = j - 1; }
28401             }
28402         }
28403
28404         function swap(arr, i, j) {
28405             var tmp = arr[i];
28406             arr[i] = arr[j];
28407             arr[j] = tmp;
28408         }
28409
28410         function defaultCompare(a, b) {
28411             return a < b ? -1 : a > b ? 1 : 0;
28412         }
28413
28414         return quickselect;
28415
28416         })));
28417         });
28418
28419         var rbush_1 = rbush;
28420         var default_1 = rbush;
28421
28422
28423
28424         function rbush(maxEntries, format) {
28425             if (!(this instanceof rbush)) { return new rbush(maxEntries, format); }
28426
28427             // max entries in a node is 9 by default; min node fill is 40% for best performance
28428             this._maxEntries = Math.max(4, maxEntries || 9);
28429             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
28430
28431             if (format) {
28432                 this._initFormat(format);
28433             }
28434
28435             this.clear();
28436         }
28437
28438         rbush.prototype = {
28439
28440             all: function () {
28441                 return this._all(this.data, []);
28442             },
28443
28444             search: function (bbox) {
28445
28446                 var node = this.data,
28447                     result = [],
28448                     toBBox = this.toBBox;
28449
28450                 if (!intersects$1(bbox, node)) { return result; }
28451
28452                 var nodesToSearch = [],
28453                     i, len, child, childBBox;
28454
28455                 while (node) {
28456                     for (i = 0, len = node.children.length; i < len; i++) {
28457
28458                         child = node.children[i];
28459                         childBBox = node.leaf ? toBBox(child) : child;
28460
28461                         if (intersects$1(bbox, childBBox)) {
28462                             if (node.leaf) { result.push(child); }
28463                             else if (contains$4(bbox, childBBox)) { this._all(child, result); }
28464                             else { nodesToSearch.push(child); }
28465                         }
28466                     }
28467                     node = nodesToSearch.pop();
28468                 }
28469
28470                 return result;
28471             },
28472
28473             collides: function (bbox) {
28474
28475                 var node = this.data,
28476                     toBBox = this.toBBox;
28477
28478                 if (!intersects$1(bbox, node)) { return false; }
28479
28480                 var nodesToSearch = [],
28481                     i, len, child, childBBox;
28482
28483                 while (node) {
28484                     for (i = 0, len = node.children.length; i < len; i++) {
28485
28486                         child = node.children[i];
28487                         childBBox = node.leaf ? toBBox(child) : child;
28488
28489                         if (intersects$1(bbox, childBBox)) {
28490                             if (node.leaf || contains$4(bbox, childBBox)) { return true; }
28491                             nodesToSearch.push(child);
28492                         }
28493                     }
28494                     node = nodesToSearch.pop();
28495                 }
28496
28497                 return false;
28498             },
28499
28500             load: function (data) {
28501                 if (!(data && data.length)) { return this; }
28502
28503                 if (data.length < this._minEntries) {
28504                     for (var i = 0, len = data.length; i < len; i++) {
28505                         this.insert(data[i]);
28506                     }
28507                     return this;
28508                 }
28509
28510                 // recursively build the tree with the given data from scratch using OMT algorithm
28511                 var node = this._build(data.slice(), 0, data.length - 1, 0);
28512
28513                 if (!this.data.children.length) {
28514                     // save as is if tree is empty
28515                     this.data = node;
28516
28517                 } else if (this.data.height === node.height) {
28518                     // split root if trees have the same height
28519                     this._splitRoot(this.data, node);
28520
28521                 } else {
28522                     if (this.data.height < node.height) {
28523                         // swap trees if inserted one is bigger
28524                         var tmpNode = this.data;
28525                         this.data = node;
28526                         node = tmpNode;
28527                     }
28528
28529                     // insert the small tree into the large tree at appropriate level
28530                     this._insert(node, this.data.height - node.height - 1, true);
28531                 }
28532
28533                 return this;
28534             },
28535
28536             insert: function (item) {
28537                 if (item) { this._insert(item, this.data.height - 1); }
28538                 return this;
28539             },
28540
28541             clear: function () {
28542                 this.data = createNode([]);
28543                 return this;
28544             },
28545
28546             remove: function (item, equalsFn) {
28547                 if (!item) { return this; }
28548
28549                 var node = this.data,
28550                     bbox = this.toBBox(item),
28551                     path = [],
28552                     indexes = [],
28553                     i, parent, index, goingUp;
28554
28555                 // depth-first iterative tree traversal
28556                 while (node || path.length) {
28557
28558                     if (!node) { // go up
28559                         node = path.pop();
28560                         parent = path[path.length - 1];
28561                         i = indexes.pop();
28562                         goingUp = true;
28563                     }
28564
28565                     if (node.leaf) { // check current node
28566                         index = findItem(item, node.children, equalsFn);
28567
28568                         if (index !== -1) {
28569                             // item found, remove the item and condense tree upwards
28570                             node.children.splice(index, 1);
28571                             path.push(node);
28572                             this._condense(path);
28573                             return this;
28574                         }
28575                     }
28576
28577                     if (!goingUp && !node.leaf && contains$4(node, bbox)) { // go down
28578                         path.push(node);
28579                         indexes.push(i);
28580                         i = 0;
28581                         parent = node;
28582                         node = node.children[0];
28583
28584                     } else if (parent) { // go right
28585                         i++;
28586                         node = parent.children[i];
28587                         goingUp = false;
28588
28589                     } else { node = null; } // nothing found
28590                 }
28591
28592                 return this;
28593             },
28594
28595             toBBox: function (item) { return item; },
28596
28597             compareMinX: compareNodeMinX,
28598             compareMinY: compareNodeMinY,
28599
28600             toJSON: function () { return this.data; },
28601
28602             fromJSON: function (data) {
28603                 this.data = data;
28604                 return this;
28605             },
28606
28607             _all: function (node, result) {
28608                 var nodesToSearch = [];
28609                 while (node) {
28610                     if (node.leaf) { result.push.apply(result, node.children); }
28611                     else { nodesToSearch.push.apply(nodesToSearch, node.children); }
28612
28613                     node = nodesToSearch.pop();
28614                 }
28615                 return result;
28616             },
28617
28618             _build: function (items, left, right, height) {
28619
28620                 var N = right - left + 1,
28621                     M = this._maxEntries,
28622                     node;
28623
28624                 if (N <= M) {
28625                     // reached leaf level; return leaf
28626                     node = createNode(items.slice(left, right + 1));
28627                     calcBBox(node, this.toBBox);
28628                     return node;
28629                 }
28630
28631                 if (!height) {
28632                     // target height of the bulk-loaded tree
28633                     height = Math.ceil(Math.log(N) / Math.log(M));
28634
28635                     // target number of root entries to maximize storage utilization
28636                     M = Math.ceil(N / Math.pow(M, height - 1));
28637                 }
28638
28639                 node = createNode([]);
28640                 node.leaf = false;
28641                 node.height = height;
28642
28643                 // split the items into M mostly square tiles
28644
28645                 var N2 = Math.ceil(N / M),
28646                     N1 = N2 * Math.ceil(Math.sqrt(M)),
28647                     i, j, right2, right3;
28648
28649                 multiSelect(items, left, right, N1, this.compareMinX);
28650
28651                 for (i = left; i <= right; i += N1) {
28652
28653                     right2 = Math.min(i + N1 - 1, right);
28654
28655                     multiSelect(items, i, right2, N2, this.compareMinY);
28656
28657                     for (j = i; j <= right2; j += N2) {
28658
28659                         right3 = Math.min(j + N2 - 1, right2);
28660
28661                         // pack each entry recursively
28662                         node.children.push(this._build(items, j, right3, height - 1));
28663                     }
28664                 }
28665
28666                 calcBBox(node, this.toBBox);
28667
28668                 return node;
28669             },
28670
28671             _chooseSubtree: function (bbox, node, level, path) {
28672
28673                 var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
28674
28675                 while (true) {
28676                     path.push(node);
28677
28678                     if (node.leaf || path.length - 1 === level) { break; }
28679
28680                     minArea = minEnlargement = Infinity;
28681
28682                     for (i = 0, len = node.children.length; i < len; i++) {
28683                         child = node.children[i];
28684                         area = bboxArea(child);
28685                         enlargement = enlargedArea(bbox, child) - area;
28686
28687                         // choose entry with the least area enlargement
28688                         if (enlargement < minEnlargement) {
28689                             minEnlargement = enlargement;
28690                             minArea = area < minArea ? area : minArea;
28691                             targetNode = child;
28692
28693                         } else if (enlargement === minEnlargement) {
28694                             // otherwise choose one with the smallest area
28695                             if (area < minArea) {
28696                                 minArea = area;
28697                                 targetNode = child;
28698                             }
28699                         }
28700                     }
28701
28702                     node = targetNode || node.children[0];
28703                 }
28704
28705                 return node;
28706             },
28707
28708             _insert: function (item, level, isNode) {
28709
28710                 var toBBox = this.toBBox,
28711                     bbox = isNode ? item : toBBox(item),
28712                     insertPath = [];
28713
28714                 // find the best node for accommodating the item, saving all nodes along the path too
28715                 var node = this._chooseSubtree(bbox, this.data, level, insertPath);
28716
28717                 // put the item into the node
28718                 node.children.push(item);
28719                 extend$1(node, bbox);
28720
28721                 // split on node overflow; propagate upwards if necessary
28722                 while (level >= 0) {
28723                     if (insertPath[level].children.length > this._maxEntries) {
28724                         this._split(insertPath, level);
28725                         level--;
28726                     } else { break; }
28727                 }
28728
28729                 // adjust bboxes along the insertion path
28730                 this._adjustParentBBoxes(bbox, insertPath, level);
28731             },
28732
28733             // split overflowed node into two
28734             _split: function (insertPath, level) {
28735
28736                 var node = insertPath[level],
28737                     M = node.children.length,
28738                     m = this._minEntries;
28739
28740                 this._chooseSplitAxis(node, m, M);
28741
28742                 var splitIndex = this._chooseSplitIndex(node, m, M);
28743
28744                 var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
28745                 newNode.height = node.height;
28746                 newNode.leaf = node.leaf;
28747
28748                 calcBBox(node, this.toBBox);
28749                 calcBBox(newNode, this.toBBox);
28750
28751                 if (level) { insertPath[level - 1].children.push(newNode); }
28752                 else { this._splitRoot(node, newNode); }
28753             },
28754
28755             _splitRoot: function (node, newNode) {
28756                 // split root node
28757                 this.data = createNode([node, newNode]);
28758                 this.data.height = node.height + 1;
28759                 this.data.leaf = false;
28760                 calcBBox(this.data, this.toBBox);
28761             },
28762
28763             _chooseSplitIndex: function (node, m, M) {
28764
28765                 var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
28766
28767                 minOverlap = minArea = Infinity;
28768
28769                 for (i = m; i <= M - m; i++) {
28770                     bbox1 = distBBox(node, 0, i, this.toBBox);
28771                     bbox2 = distBBox(node, i, M, this.toBBox);
28772
28773                     overlap = intersectionArea(bbox1, bbox2);
28774                     area = bboxArea(bbox1) + bboxArea(bbox2);
28775
28776                     // choose distribution with minimum overlap
28777                     if (overlap < minOverlap) {
28778                         minOverlap = overlap;
28779                         index = i;
28780
28781                         minArea = area < minArea ? area : minArea;
28782
28783                     } else if (overlap === minOverlap) {
28784                         // otherwise choose distribution with minimum area
28785                         if (area < minArea) {
28786                             minArea = area;
28787                             index = i;
28788                         }
28789                     }
28790                 }
28791
28792                 return index;
28793             },
28794
28795             // sorts node children by the best axis for split
28796             _chooseSplitAxis: function (node, m, M) {
28797
28798                 var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
28799                     compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
28800                     xMargin = this._allDistMargin(node, m, M, compareMinX),
28801                     yMargin = this._allDistMargin(node, m, M, compareMinY);
28802
28803                 // if total distributions margin value is minimal for x, sort by minX,
28804                 // otherwise it's already sorted by minY
28805                 if (xMargin < yMargin) { node.children.sort(compareMinX); }
28806             },
28807
28808             // total margin of all possible split distributions where each node is at least m full
28809             _allDistMargin: function (node, m, M, compare) {
28810
28811                 node.children.sort(compare);
28812
28813                 var toBBox = this.toBBox,
28814                     leftBBox = distBBox(node, 0, m, toBBox),
28815                     rightBBox = distBBox(node, M - m, M, toBBox),
28816                     margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
28817                     i, child;
28818
28819                 for (i = m; i < M - m; i++) {
28820                     child = node.children[i];
28821                     extend$1(leftBBox, node.leaf ? toBBox(child) : child);
28822                     margin += bboxMargin(leftBBox);
28823                 }
28824
28825                 for (i = M - m - 1; i >= m; i--) {
28826                     child = node.children[i];
28827                     extend$1(rightBBox, node.leaf ? toBBox(child) : child);
28828                     margin += bboxMargin(rightBBox);
28829                 }
28830
28831                 return margin;
28832             },
28833
28834             _adjustParentBBoxes: function (bbox, path, level) {
28835                 // adjust bboxes along the given tree path
28836                 for (var i = level; i >= 0; i--) {
28837                     extend$1(path[i], bbox);
28838                 }
28839             },
28840
28841             _condense: function (path) {
28842                 // go through the path, removing empty nodes and updating bboxes
28843                 for (var i = path.length - 1, siblings; i >= 0; i--) {
28844                     if (path[i].children.length === 0) {
28845                         if (i > 0) {
28846                             siblings = path[i - 1].children;
28847                             siblings.splice(siblings.indexOf(path[i]), 1);
28848
28849                         } else { this.clear(); }
28850
28851                     } else { calcBBox(path[i], this.toBBox); }
28852                 }
28853             },
28854
28855             _initFormat: function (format) {
28856                 // data format (minX, minY, maxX, maxY accessors)
28857
28858                 // uses eval-type function compilation instead of just accepting a toBBox function
28859                 // because the algorithms are very sensitive to sorting functions performance,
28860                 // so they should be dead simple and without inner calls
28861
28862                 var compareArr = ['return a', ' - b', ';'];
28863
28864                 this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
28865                 this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
28866
28867                 this.toBBox = new Function('a',
28868                     'return {minX: a' + format[0] +
28869                     ', minY: a' + format[1] +
28870                     ', maxX: a' + format[2] +
28871                     ', maxY: a' + format[3] + '};');
28872             }
28873         };
28874
28875         function findItem(item, items, equalsFn) {
28876             if (!equalsFn) { return items.indexOf(item); }
28877
28878             for (var i = 0; i < items.length; i++) {
28879                 if (equalsFn(item, items[i])) { return i; }
28880             }
28881             return -1;
28882         }
28883
28884         // calculate node's bbox from bboxes of its children
28885         function calcBBox(node, toBBox) {
28886             distBBox(node, 0, node.children.length, toBBox, node);
28887         }
28888
28889         // min bounding rectangle of node children from k to p-1
28890         function distBBox(node, k, p, toBBox, destNode) {
28891             if (!destNode) { destNode = createNode(null); }
28892             destNode.minX = Infinity;
28893             destNode.minY = Infinity;
28894             destNode.maxX = -Infinity;
28895             destNode.maxY = -Infinity;
28896
28897             for (var i = k, child; i < p; i++) {
28898                 child = node.children[i];
28899                 extend$1(destNode, node.leaf ? toBBox(child) : child);
28900             }
28901
28902             return destNode;
28903         }
28904
28905         function extend$1(a, b) {
28906             a.minX = Math.min(a.minX, b.minX);
28907             a.minY = Math.min(a.minY, b.minY);
28908             a.maxX = Math.max(a.maxX, b.maxX);
28909             a.maxY = Math.max(a.maxY, b.maxY);
28910             return a;
28911         }
28912
28913         function compareNodeMinX(a, b) { return a.minX - b.minX; }
28914         function compareNodeMinY(a, b) { return a.minY - b.minY; }
28915
28916         function bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
28917         function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
28918
28919         function enlargedArea(a, b) {
28920             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
28921                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
28922         }
28923
28924         function intersectionArea(a, b) {
28925             var minX = Math.max(a.minX, b.minX),
28926                 minY = Math.max(a.minY, b.minY),
28927                 maxX = Math.min(a.maxX, b.maxX),
28928                 maxY = Math.min(a.maxY, b.maxY);
28929
28930             return Math.max(0, maxX - minX) *
28931                    Math.max(0, maxY - minY);
28932         }
28933
28934         function contains$4(a, b) {
28935             return a.minX <= b.minX &&
28936                    a.minY <= b.minY &&
28937                    b.maxX <= a.maxX &&
28938                    b.maxY <= a.maxY;
28939         }
28940
28941         function intersects$1(a, b) {
28942             return b.minX <= a.maxX &&
28943                    b.minY <= a.maxY &&
28944                    b.maxX >= a.minX &&
28945                    b.maxY >= a.minY;
28946         }
28947
28948         function createNode(children) {
28949             return {
28950                 children: children,
28951                 height: 1,
28952                 leaf: true,
28953                 minX: Infinity,
28954                 minY: Infinity,
28955                 maxX: -Infinity,
28956                 maxY: -Infinity
28957             };
28958         }
28959
28960         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
28961         // combines selection algorithm with binary divide & conquer approach
28962
28963         function multiSelect(arr, left, right, n, compare) {
28964             var stack = [left, right],
28965                 mid;
28966
28967             while (stack.length) {
28968                 right = stack.pop();
28969                 left = stack.pop();
28970
28971                 if (right - left <= n) { continue; }
28972
28973                 mid = left + Math.ceil((right - left) / n / 2) * n;
28974                 quickselect(arr, mid, left, right, compare);
28975
28976                 stack.push(left, mid, mid, right);
28977             }
28978         }
28979         rbush_1.default = default_1;
28980
28981         var lineclip_1 = lineclip;
28982
28983         lineclip.polyline = lineclip;
28984         lineclip.polygon = polygonclip;
28985
28986
28987         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
28988         // handle polylines rather than just segments
28989
28990         function lineclip(points, bbox, result) {
28991
28992             var len = points.length,
28993                 codeA = bitCode(points[0], bbox),
28994                 part = [],
28995                 i, a, b, codeB, lastCode;
28996
28997             if (!result) { result = []; }
28998
28999             for (i = 1; i < len; i++) {
29000                 a = points[i - 1];
29001                 b = points[i];
29002                 codeB = lastCode = bitCode(b, bbox);
29003
29004                 while (true) {
29005
29006                     if (!(codeA | codeB)) { // accept
29007                         part.push(a);
29008
29009                         if (codeB !== lastCode) { // segment went outside
29010                             part.push(b);
29011
29012                             if (i < len - 1) { // start a new line
29013                                 result.push(part);
29014                                 part = [];
29015                             }
29016                         } else if (i === len - 1) {
29017                             part.push(b);
29018                         }
29019                         break;
29020
29021                     } else if (codeA & codeB) { // trivial reject
29022                         break;
29023
29024                     } else if (codeA) { // a outside, intersect with clip edge
29025                         a = intersect$1(a, b, codeA, bbox);
29026                         codeA = bitCode(a, bbox);
29027
29028                     } else { // b outside
29029                         b = intersect$1(a, b, codeB, bbox);
29030                         codeB = bitCode(b, bbox);
29031                     }
29032                 }
29033
29034                 codeA = lastCode;
29035             }
29036
29037             if (part.length) { result.push(part); }
29038
29039             return result;
29040         }
29041
29042         // Sutherland-Hodgeman polygon clipping algorithm
29043
29044         function polygonclip(points, bbox) {
29045
29046             var result, edge, prev, prevInside, i, p, inside;
29047
29048             // clip against each side of the clip rectangle
29049             for (edge = 1; edge <= 8; edge *= 2) {
29050                 result = [];
29051                 prev = points[points.length - 1];
29052                 prevInside = !(bitCode(prev, bbox) & edge);
29053
29054                 for (i = 0; i < points.length; i++) {
29055                     p = points[i];
29056                     inside = !(bitCode(p, bbox) & edge);
29057
29058                     // if segment goes through the clip window, add an intersection
29059                     if (inside !== prevInside) { result.push(intersect$1(prev, p, edge, bbox)); }
29060
29061                     if (inside) { result.push(p); } // add a point if it's inside
29062
29063                     prev = p;
29064                     prevInside = inside;
29065                 }
29066
29067                 points = result;
29068
29069                 if (!points.length) { break; }
29070             }
29071
29072             return result;
29073         }
29074
29075         // intersect a segment against one of the 4 lines that make up the bbox
29076
29077         function intersect$1(a, b, edge, bbox) {
29078             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
29079                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
29080                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
29081                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
29082                    null;
29083         }
29084
29085         // bit code reflects the point position relative to the bbox:
29086
29087         //         left  mid  right
29088         //    top  1001  1000  1010
29089         //    mid  0001  0000  0010
29090         // bottom  0101  0100  0110
29091
29092         function bitCode(p, bbox) {
29093             var code = 0;
29094
29095             if (p[0] < bbox[0]) { code |= 1; } // left
29096             else if (p[0] > bbox[2]) { code |= 2; } // right
29097
29098             if (p[1] < bbox[1]) { code |= 4; } // bottom
29099             else if (p[1] > bbox[3]) { code |= 8; } // top
29100
29101             return code;
29102         }
29103
29104         var whichPolygon_1 = whichPolygon;
29105
29106         function whichPolygon(data) {
29107             var bboxes = [];
29108             for (var i = 0; i < data.features.length; i++) {
29109                 var feature = data.features[i];
29110                 var coords = feature.geometry.coordinates;
29111
29112                 if (feature.geometry.type === 'Polygon') {
29113                     bboxes.push(treeItem(coords, feature.properties));
29114
29115                 } else if (feature.geometry.type === 'MultiPolygon') {
29116                     for (var j = 0; j < coords.length; j++) {
29117                         bboxes.push(treeItem(coords[j], feature.properties));
29118                     }
29119                 }
29120             }
29121
29122             var tree = rbush_1().load(bboxes);
29123
29124             function query(p, multi) {
29125                 var output = [],
29126                     result = tree.search({
29127                         minX: p[0],
29128                         minY: p[1],
29129                         maxX: p[0],
29130                         maxY: p[1]
29131                     });
29132                 for (var i = 0; i < result.length; i++) {
29133                     if (insidePolygon(result[i].coords, p)) {
29134                         if (multi)
29135                             { output.push(result[i].props); }
29136                         else
29137                             { return result[i].props; }
29138                     }
29139                 }
29140                 return multi && output.length ? output : null;
29141             }
29142
29143             query.tree = tree;
29144             query.bbox = function queryBBox(bbox) {
29145                 var output = [];
29146                 var result = tree.search({
29147                     minX: bbox[0],
29148                     minY: bbox[1],
29149                     maxX: bbox[2],
29150                     maxY: bbox[3]
29151                 });
29152                 for (var i = 0; i < result.length; i++) {
29153                     if (polygonIntersectsBBox(result[i].coords, bbox)) {
29154                         output.push(result[i].props);
29155                     }
29156                 }
29157                 return output;
29158             };
29159
29160             return query;
29161         }
29162
29163         function polygonIntersectsBBox(polygon, bbox) {
29164             var bboxCenter = [
29165                 (bbox[0] + bbox[2]) / 2,
29166                 (bbox[1] + bbox[3]) / 2
29167             ];
29168             if (insidePolygon(polygon, bboxCenter)) { return true; }
29169             for (var i = 0; i < polygon.length; i++) {
29170                 if (lineclip_1(polygon[i], bbox).length > 0) { return true; }
29171             }
29172             return false;
29173         }
29174
29175         // ray casting algorithm for detecting if point is in polygon
29176         function insidePolygon(rings, p) {
29177             var inside = false;
29178             for (var i = 0, len = rings.length; i < len; i++) {
29179                 var ring = rings[i];
29180                 for (var j = 0, len2 = ring.length, k = len2 - 1; j < len2; k = j++) {
29181                     if (rayIntersect(p, ring[j], ring[k])) { inside = !inside; }
29182                 }
29183             }
29184             return inside;
29185         }
29186
29187         function rayIntersect(p, p1, p2) {
29188             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]);
29189         }
29190
29191         function treeItem(coords, props) {
29192             var item = {
29193                 minX: Infinity,
29194                 minY: Infinity,
29195                 maxX: -Infinity,
29196                 maxY: -Infinity,
29197                 coords: coords,
29198                 props: props
29199             };
29200
29201             for (var i = 0; i < coords[0].length; i++) {
29202                 var p = coords[0][i];
29203                 item.minX = Math.min(item.minX, p[0]);
29204                 item.minY = Math.min(item.minY, p[1]);
29205                 item.maxX = Math.max(item.maxX, p[0]);
29206                 item.maxY = Math.max(item.maxY, p[1]);
29207             }
29208             return item;
29209         }
29210
29211         var type$1 = "FeatureCollection";
29212         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.65349,49.15373],[-2.09454,49.46288],[-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],[-13.33271,-8.07391],[-14.91926,-6.63386],[-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.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.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]]]]}},{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.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],[55.14145,25.62624],[53.97892,24.64436],[52.82259,25.51697],[52.35509,25.00368],[52.02277,24.75635],[51.83108,24.71675],[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.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],[56.82555,25.7713],[56.26534,25.62825]],[[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]]]]}},{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.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.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.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.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],[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],[74.49981,37.24518],[74.80605,37.21565],[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]]]]}},{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],[-62.27053,17.22145],[-62.62949,16.82364],[-62.52079,16.69392],[-62.14123,17.02632],[-61.83929,16.66647],[-61.44461,16.81958],[-61.45764,17.9187],[-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],[-63.35989,18.06012],[-62.86666,18.19278],[-62.75637,18.13489],[-62.46233,19.00569],[-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.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],[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],[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.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]]]]}},{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],[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.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.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],[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.20601,38.85262],[46.34059,38.92076],[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.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.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.50279,40.58424],[45.56071,40.64765],[45.51825,40.67382],[45.47927,40.65023],[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],[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],[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.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],[18.39229,-17.38927],[18.84226,-17.80375],[21.14283,-17.94318],[21.42741,-18.02787],[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],[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]]]]}},{type:"Feature",properties:{iso1A2:"AQ",iso1A3:"ATA",iso1N3:"010",wikidata:"Q51",nameEn:"Antarctica",level:"region",callingCodes:["672"]},geometry:{type:"MultiPolygon",coordinates:[[[[180,-60],[-180,-60],[-180,-90],[180,-90],[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],[-72.33873,-51.59954],[-71.99889,-51.98018],[-69.97824,-52.00845],[-68.41683,-52.33516],[-68.60702,-52.65781],[-68.60733,-54.9125],[-68.01394,-54.8753],[-67.46182,-54.92205],[-67.11046,-54.94199],[-66.07313,-55.19618],[-63.67376,-55.11859],[-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],[-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.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.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],[-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]]]]}},{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],[-171.14953,-12.4725],[-171.14262,-14.93704],[-167.73854,-14.92809],[-167.75195,-10.12005],[-174.17993,-10.13616],[-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.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.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.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.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],[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.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.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.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.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],[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]]]]}},{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],[158.60851,-15.7108],[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],[127.55165,-9.05052],[96.7091,-25.20343],[159.69067,-56.28945],[165.46901,-28.32101],[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],[-70.35625,12.58277],[-69.60231,12.17],[-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],[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],[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.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],[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.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],[52.39847,39.43556],[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.50279,40.58424],[45.47927,40.65023],[45.51825,40.67382],[45.56071,40.64765],[45.50279,40.58424]]],[[[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.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.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.80977,39.65768],[44.81043,39.62677],[44.88916,39.59653],[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.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]]]]}},{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.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],[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.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],[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.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]]]]}},{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],[-59.80731,13.87556],[-60.19227,12.37597],[-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.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.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],[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]]]]}},{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.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]]],[[[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],[2.18458,51.52087],[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.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],[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],[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]]]]}},{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.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.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.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],[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.9813,11.08876],[1.03409,11.04719],[1.42823,11.46822],[2.00988,11.42227],[2.29983,11.68254],[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]]]]}},{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],[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.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.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],[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.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],[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]]]]}},{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.71771,26.73086],[50.38162,26.53976],[50.26923,26.08243],[50.302,25.87592],[50.57069,25.57887],[50.80824,25.54641],[50.7801,25.595],[50.86149,25.6965],[50.81266,25.88946],[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.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.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.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]]]]}},{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.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.29983,11.68254],[2.00988,11.42227],[1.42823,11.46822],[1.03409,11.04719],[0.9813,11.08876],[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],[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]]]]}},{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.93924,18.02904],[-63.07669,17.79659],[-62.76692,17.64353],[-62.54836,17.8636],[-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.31453,32.68437],[-65.63955,31.43417],[-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.02521,5.35005],[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]]]]}},{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],[-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],[-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.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.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.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],[-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]]]]}},{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.58819,17.61311],[-63.22932,17.32592],[-63.07669,17.79659],[-63.29212,17.90532]]],[[[-67.89186,12.4116],[-68.90012,12.62309],[-68.33524,11.78151],[-68.01417,11.77722],[-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.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],[-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.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.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],[-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],[-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],[-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.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.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],[-28.34015,-20.99094],[-28.99601,1.86593],[-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],[-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.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]]]]}},{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],[-71.70065,25.7637],[-79.14818,27.83105],[-79.89631,24.6597],[-80.88924,23.80416],[-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.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.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]]]]}},{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],[2.28941,-54.13089],[3.35353,-55.17558],[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.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],[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.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]]]]}},{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],[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.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.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.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.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]]]]}},{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.48242,18.49164],[-88.71505,18.0707],[-88.8716,17.89535],[-89.03839,18.0067],[-89.15105,17.95104],[-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],[-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]]]]}},{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.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],[-56.27503,47.39728],[-53.12387,41.40385],[-46.37635,57.3249],[-76.75614,76.72014],[-68.21821,80.48551],[-45.47832,84.58738],[-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],[-133.36909,48.51151],[-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]]]]}},{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],[96.02343,-12.68334],[97.93979,-12.33309],[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.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.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],[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],[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.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],[30.2567,-7.14121],[29.52552,-6.2731],[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.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.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.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]]]]}},{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],[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.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.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],[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],[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],[23.67164,9.86923],[23.3128,10.45214],[23.02221,10.69235],[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.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.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.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],[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.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]]]]}},{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.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.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.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],[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.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.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.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.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.95861,45.96485],[8.96668,45.98436],[8.97741,45.98317],[8.97604,45.96151],[8.95861,45.96485]],[[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]]]]}},{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],[-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.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.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],[-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.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]]]]}},{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.73129,-23.22266],[-156.46451,-23.21255],[-156.4957,-12.32002],[-156.50903,-7.4975],[-167.75329,-7.52784],[-167.75195,-10.12005],[-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.41683,-52.33516],[-69.97824,-52.00845],[-71.99889,-51.98018],[-72.33873,-51.59954],[-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],[-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.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],[-113.52687,-26.52828],[-68.11646,-58.14883],[-66.07313,-55.19618],[-67.11046,-54.94199],[-67.46182,-54.92205],[-68.01394,-54.8753],[-68.60733,-54.9125],[-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.55058,12.78256],[14.56101,12.91036],[14.46881,13.08259],[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],[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.37116,2.29975],[13.28534,2.25716],[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.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.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]]]]}},{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],[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.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.48983,49.13794],[87.478,49.07403],[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],[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.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.80605,37.21565],[74.49981,37.24518],[74.56453,37.03023],[75.13839,37.02622],[75.40481,36.95382],[75.45562,36.71971],[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.84539,35.67356],[76.96624,35.5932],[77.44277,35.46132],[77.70232,35.46244],[77.80532,35.52058],[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],[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],[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.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],[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.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.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],[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],[108.00365,17.98159],[111.60491,13.57105],[118.41371,24.06775],[118.11703,24.39734],[118.28244,24.51231],[118.35291,24.51645],[118.42453,24.54644],[118.56434,24.49266],[120.49232,25.22863],[121.03532,26.8787],[123.5458,31.01942],[122.29378,31.76513],[122.80525,33.30571],[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],[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.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]],[[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],[-81.58685,18.0025],[-82.06974,14.49418],[-82.56142,11.91792],[-78.79327,9.93766],[-77.58292,9.22278],[-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.12561,4.00341],[-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],[-75.18513,-0.0308],[-74.42701,-0.50218],[-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],[-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],[-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.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],[-108.755,9.84085],[-109.04145,11.13245],[-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.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],[-87.41779,5.02401],[-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],[-83.54024,10.96805],[-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],[-82.02215,24.23074],[-85.77883,21.92705],[-74.81171,18.82201],[-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],[-20.39702,14.12816],[-23.37101,19.134],[-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],[-69.59009,12.46019],[-68.99639,11.79035],[-68.33524,11.78151],[-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],[104.67494,-11.2566],[106.66176,-11.14349],[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.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],[35.48515,34.70851],[35.51152,36.10954],[32.82353,35.70297],[30.15137,34.08517],[32.74412,34.43926],[32.75515,34.64985],[32.76136,34.68318],[32.79433,34.67883],[32.82717,34.70622],[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],[33.83531,34.73974],[33.70575,34.97947],[33.70639,34.99303]]],[[[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]]],[[[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]]]]}},{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.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],[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],[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],[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.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]]]]}},{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.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]]],[[[8.72617,47.69651],[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.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],[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],[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],[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],[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],[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.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.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.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.35512,47.57014],[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]]]]}},{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],[43.90659,12.3823],[43.32909,12.59711],[43.29075,12.79154],[42.86195,12.58747],[42.7996,12.42629],[42.6957,12.36201],[42.46941,12.52661],[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],[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],[10.40861,58.38489],[7.28637,57.35913],[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],[15.36991,54.73263],[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]]]]}},{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],[-60.69955,15.22234],[-60.95725,15.70997],[-61.44899,15.79571],[-61.81728,15.58058],[-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],[-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],[-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],[-68.39466,16.14167],[-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],[2.46645,37.97429],[-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.66674,27.31569],[-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],[5.8153,19.45101],[7.38361,20.79165],[7.48273,20.87258],[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.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]]]]}},{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.37338,35.88417],[-5.35844,35.87375],[-5.34379,35.8711],[-5.27056,35.88794],[-5.27635,35.91222],[-5.38491,35.92591]]],[[[-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]]]]}},{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.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],[-93.12365,2.64343],[-92.46744,-2.52874],[-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]]]]}},{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],[20.5104,59.15546],[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],[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]]]]}},{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],[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],[33.17563,22.00405],[34.0765,22.00501],[37.8565,22.00903],[34.51305,27.70027],[34.46254,27.99552],[34.88293,29.37455],[34.92298,29.45305],[34.26742,31.21998],[34.24012,31.29591],[34.23572,31.2966],[34.21853,31.32363],[34.052,31.46619],[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.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.35589,20.80492],[-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],[-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],[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.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],[42.46941,12.52661],[42.6957,12.36201],[42.7996,12.42629],[42.86195,12.58747],[43.29075,12.79154],[42.63806,13.58268],[41.29956,15.565],[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.41265,35.1877],[-2.44896,35.18777],[-2.44887,35.17075],[-2.41312,35.17111]]],[[[-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]]],[[[-7.27694,35.93599],[-5.64962,35.93752],[-5.10878,36.05227],[-2.85819,35.63219],[-2.27707,35.35051],[2.46645,37.97429],[5.18061,39.43581],[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.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.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],[-10.14298,44.17365],[-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],[-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],[-7.27694,35.93599]],[[-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]]],[[[1.99838,42.44682],[2.01564,42.45171],[1.99216,42.46208],[1.98579,42.47486],[1.99766,42.4858],[1.98916,42.49351],[1.98022,42.49569],[1.97697,42.48568],[1.97227,42.48487],[1.97003,42.48081],[1.96215,42.47854],[1.95606,42.45785],[1.96125,42.45364],[1.98378,42.44697],[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],[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.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],[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.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],[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],[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]]]]}},{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],[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.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],[24.14798,65.83466],[24.15107,65.81427],[24.14112,65.39731],[20.15877,63.06556],[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],[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],[28.81248,69.11997],[28.8629,69.22395],[29.31664,69.47994],[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],[179.99999,-22.5],[179.99999,-11.5],[174,-11.5],[174,-22.5]]],[[[-178.60161,-14.95666],[-180,-14.96041],[-180,-22.90585],[-176.74538,-22.89767],[-176.76826,-14.95183],[-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],[-54.56126,-51.26248],[-61.26735,-50.63919],[-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],[136.27107,6.73747],[156.88247,-1.39237],[165.35175,6.367],[159.04653,10.59067],[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],[-6.51083,60.95272],[-5.70102,62.77194],[-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.18458,51.52087],[1.17405,50.74239],[-2.02963,49.91866],[-2.09454,49.46288],[-1.83944,49.23037],[-2.00491,48.86706],[-2.65349,49.15373],[-6.13339,48.73907],[-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.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],[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],[7.60802,41.05927],[10.09675,41.44089],[9.56115,43.20816],[7.50102,43.51859],[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],[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.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.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.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.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]]]]}},{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.28534,2.25716],[11.37116,2.29975],[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],[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]]]]}},{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],[-4.1819,54.57861],[-3.64906,54.12723],[-5.37267,53.63269],[-5.79914,52.03902],[-7.74976,48.64773],[1.17405,50.74239],[2.18458,51.52087],[2.56575,51.85301],[-0.3751,61.32236],[-14.78497,57.60709],[-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],[-5.83481,53.87749]]],[[[33.70575,34.97947],[33.83531,34.73974],[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.70575,34.97947]],[[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]],[[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]]],[[[32.86014,34.70585],[32.82717,34.70622],[32.79433,34.67883],[32.76136,34.68318],[32.75515,34.64985],[32.74412,34.43926],[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]]]]}},{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.57265,11.65795],[-61.13395,12.51526],[-61.38256,12.52991],[-61.73897,12.61191],[-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],[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],[40.89217,41.72528],[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.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.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]]]]}},{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],[-53.7094,6.2264],[-54.01074,5.68785],[-54.01877,5.52789],[-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],[-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]]]]}},{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],[-2.36485,49.48223],[-2.09454,49.46288],[-2.02963,49.91866],[-3.28154,49.57329],[-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.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.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],[1.07031,5.15655],[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]]]]}},{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.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]]]]}},{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],[-68.21821,80.48551],[-76.75614,76.72014],[-46.37635,57.3249],[-9.68082,72.73731],[-5.7106,84.28058],[-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],[-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],[-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]]]]}},{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.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],[-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],[-14.51173,11.49708],[-14.66677,11.51188],[-14.77786,11.36323],[-14.95993,10.99244],[-15.07174,10.89557],[-15.96748,10.162],[-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],[-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],[-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.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]]]]}},{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],[-60.71337,16.48911],[-61.44461,16.81958],[-61.83929,16.66647],[-62.17275,16.35721],[-61.81728,15.58058],[-61.44899,15.79571],[-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],[8.34397,4.30689],[8.05799,3.48284],[8.0168,1.79377],[6.69416,-0.53945],[5.38965,-1.19244],[5.3459,-2.30107],[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],[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]]]]}},{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],[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.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.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.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.20409,39.7532],[22.5213,33.45682],[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]]]]}},{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],[-53.39656,-59.87088],[-22.31757,-59.85974],[-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],[-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],[-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],[-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],[-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]]]]}},{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],[143.82485,13.92273],[144.61642,12.82462],[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.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],[-15.17582,12.6847],[-15.67302,12.42974],[-16.20591,12.46157],[-16.38191,12.36449],[-16.70562,12.34803],[-17.4623,11.92379],[-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]]]]}},{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],[-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.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],[-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],[-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]]]]}},{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],[114.50148,22.15017],[114.44998,22.55977],[114.25154,22.55977],[114.22888,22.5436],[114.22185,22.55343],[114.20655,22.55706],[114.18338,22.55444],[114.17247,22.55944],[114.1597,22.56041],[114.15123,22.55163],[114.1482,22.54091],[114.13823,22.54319],[114.12665,22.54003],[114.11656,22.53415],[114.11181,22.52878],[114.1034,22.5352],[114.09692,22.53435],[114.09048,22.53716],[114.08606,22.53276],[114.07817,22.52997],[114.07267,22.51855],[114.06272,22.51617],[114.05729,22.51104],[114.05438,22.5026],[114.03113,22.5065],[113.86771,22.42972],[113.81621,22.2163],[113.83338,22.1826],[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],[75.44182,-53.99822],[72.87012,-51.48322],[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],[-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.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.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],[-83.04763,15.03256],[-82.06974,14.49418],[-81.58685,18.0025],[-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.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],[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],[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.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.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.05142,45.33128],[13.12821,44.48877],[16.15283,42.18525],[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.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]]]]}},{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.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],[-73.37289,20.43199],[-74.7289,18.71009],[-74.76465,18.06252],[-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]]]]}},{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.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.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.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],[16.52885,46.53303],[16.52604,46.5051],[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.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],[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.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.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],[21.83339,48.36242],[21.8279,48.33321],[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],[-25.3475,27.87574],[-14.43883,27.02969],[-9.94494,32.97138],[-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],[128.97621,3.08804],[126.69413,6.02692],[124.97752,4.82064],[118.41402,3.99509],[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.03085,1.26954],[103.74084,1.12902],[103.66049,1.18825],[103.56591,1.19719],[103.03657,1.30383],[96.11174,6.69841],[74.28481,-3.17525],[122.14954,-11.52517],[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],[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],[140.88922,-9.34945],[141.00782,-9.1242],[141.01763,-6.90181],[140.85295,-6.72996],[140.99813,-6.3233],[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],[-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],[-22.01468,48.19557],[-5.79914,52.03902],[-5.37267,53.63269],[-5.83481,53.87749],[-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],[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.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.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.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.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.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],[33.62659,31.82938],[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],[-4.1819,54.57861],[-5.83481,53.87749],[-5.37267,53.63269],[-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],[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.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],[72.15131,7.6285],[78.52781,7.63099],[79.50447,8.91876],[79.42124,9.80115],[80.48418,10.20786],[94.53911,5.99016],[94.6371,13.81803],[92.61042,13.76986],[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],[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.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.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.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.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],[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],[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]]]]}},{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],[70.67958,-8.2663],[73.70488,-4.92492],[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.56725,37.14878],[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],[39.08202,32.50304],[38.98762,32.47694],[39.04251,32.30203],[39.26157,32.35555],[39.29903,32.23259],[40.01521,32.05667],[42.97601,30.72204],[42.97796,30.48295],[44.72255,29.19736],[46.42415,29.05947],[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],[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.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]]]]}},{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],[44.88916,39.59653],[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.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],[49.98877,27.87827],[50.37726,27.89227],[54.39838,25.68383],[55.14145,25.62624],[55.81777,26.18798],[56.2644,26.58649],[56.68954,26.76645],[56.79239,26.41236],[56.82555,25.7713],[56.86325,25.03856],[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],[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.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],[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.34059,38.92076],[46.20601,38.85262],[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]]]]}},{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],[-8.25539,63.0423],[-15.70914,69.67442],[-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.97604,45.96151],[8.97741,45.98317],[8.96668,45.98436],[8.95861,45.96485]]],[[[7.63035,43.57419],[9.56115,43.20816],[10.09675,41.44089],[7.60802,41.05927],[7.89009,38.19924],[11.2718,37.6713],[12.13667,34.20326],[14.02721,36.53141],[17.67657,35.68918],[18.83516,40.36999],[16.15283,42.18525],[13.12821,44.48877],[13.05142,45.33128],[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.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.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],[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.63035,43.57419]],[[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]],[[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:"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],[-1.83944,49.23037],[-2.09454,49.46288],[-2.65349,49.15373],[-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],[-76.34192,18.86145],[-78.75694,18.78765],[-78.34606,16.57862],[-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],[38.98762,32.47694],[39.08202,32.50304],[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.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.57111,32.21877],[35.52012,32.04076],[35.54375,31.96587],[35.52758,31.9131],[35.55941,31.76535],[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.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],[39.26157,32.35555],[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],[145.23667,43.76813],[145.82343,44.571],[140.9182,45.92937],[133.61399,37.41],[129.2669,34.87122],[122.26612,25.98197],[123.92912,17.8782],[155.16731,23.60141],[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.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],[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],[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],[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],[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]]]]}},{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],[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],[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.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.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],[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]],[[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]],[[71.86463,39.98598],[71.84316,39.95582],[71.7504,39.93701],[71.71511,39.96348],[71.78838,40.01404],[71.86463,39.98598]],[[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]]]]}},{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.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.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.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],[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]]]]}},{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],[169,-3.5],[178,-3.5],[178,3.9],[169,3.9]]],[[[-158.62058,-1.35506],[-161.04969,-1.36251],[-175.33482,-1.40631],[-175.31804,-7.54825],[-174.18707,-7.54408],[-167.75329,-7.52784],[-156.50903,-7.4975],[-156.4957,-12.32002],[-149.61166,-12.30171],[-149.6249,-7.51261],[-149.65979,5.27712],[-161.06795,5.2462],[-161.05669,1.11722],[-158.62734,1.1296],[-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],[42.99868,-12.65261],[44.75722,-12.58368],[44.69407,-11.04481],[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.76692,17.64353],[-63.11114,17.23125],[-62.62949,16.82364],[-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.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],[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],[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.50123,42.61636],[130.44361,42.54849],[130.41826,42.6011],[130.2385,42.71127],[130.23068,42.80125],[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],[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],[122.80525,33.30571],[125.99728,32.63328],[129.2669,34.87122],[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.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],[47.46202,29.0014],[47.58376,28.83382],[47.59863,28.66798],[47.70561,28.5221],[48.42991,28.53628],[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],[-80.36068,18.11751],[-79.32727,20.06742],[-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],[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],[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],[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],[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],[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],[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.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.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]]]]}},{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.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.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],[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.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.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.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.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],[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.81324,33.36354],[35.82577,33.40479],[35.88668,33.43183],[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],[-61.26561,14.25664],[-61.43129,13.68336],[-60.70539,13.41452],[-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.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.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]]]]}},{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],[85.15017,5.21497],[80.48418,10.20786],[79.42124,9.80115],[79.50447,8.91876],[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.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.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],[-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]]]]}},{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.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:"LT",iso1A3:"LTU",iso1N3:"440",wikidata:"Q37",nameEn:"Lithuania",groups:["EU","154","150"],callingCodes:["370"]},geometry:{type:"MultiPolygon",coordinates:[[[[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],[20.60454,55.40986],[20.95181,55.27994],[21.26425,55.24456],[21.35465,55.28427],[21.38446,55.29348],[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],[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.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.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]]]]}},{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.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.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.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]]]]}},{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],[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],[19.64795,57.06466],[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],[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.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],[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]]]]}},{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],[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.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],[13.5631,23.16574],[14.22918,22.61719],[14.99751,23.00539],[15.99566,23.49639],[23.99539,19.49944],[23.99715,20.00038],[24.99794,19.99661],[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],[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.85819,35.63219],[-5.10878,36.05227],[-5.64962,35.93752],[-7.27694,35.93599],[-14.43883,27.02969],[-17.27295,21.93519],[-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],[-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.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]],[[-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]],[[-2.41312,35.17111],[-2.44887,35.17075],[-2.44896,35.18777],[-2.41265,35.1877],[-2.41312,35.17111]],[[-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]]]]}},{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.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.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.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.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],[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.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]]]]}},{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.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.44307,42.51077],[18.43588,42.48556],[18.52152,42.42302],[18.54128,42.39171],[18.45131,42.21682],[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],[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.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]]]]}},{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],[-62.75637,18.13489],[-62.86666,18.19278],[-63.35989,18.06012],[-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]]]]}},{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],[49.10033,-10.96054],[43.72277,-16.09877],[40.40841,-23.17181],[45.90777,-29.77366],[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],[173.53711,5.70687],[169.29099,15.77133],[159.04653,10.59067],[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.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.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.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],[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],[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]]]]}},{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],[-6.57191,25.0002],[-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],[-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.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],[-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.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],[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],[3.36082,18.9745],[3.12501,19.1366],[3.24648,19.81703],[1.20992,20.73533],[1.15698,21.12843],[-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.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],[92.61042,13.76986],[94.6371,13.81803],[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],[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.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.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.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],[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.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],[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]]]]}},{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.54839,22.10909],[113.57191,22.07696],[113.63011,22.10782],[113.60504,22.20464],[113.57123,22.20416],[113.56865,22.20973],[113.5508,22.21672],[113.54333,22.21688],[113.54093,22.21314],[113.53593,22.2137],[113.53301,22.21235],[113.53552,22.20607],[113.52659,22.18271],[113.54093,22.15497],[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],[146.25931,13.85876],[146.6755,21.00809],[144.18594,21.03576],[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],[-60.69955,15.22234],[-61.51867,14.96709],[-61.26561,14.25664],[-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],[-6.57191,25.0002],[-4.83423,24.99935],[-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.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],[-13.80075,16.13961],[-13.43135,16.09022],[-13.11029,15.52116],[-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]]]]}},{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.14123,17.02632],[-62.52079,16.69392],[-62.17275,16.35721],[-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],[14.07544,36.41525],[13.27636,35.20764],[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],[64.11105,-21.5783],[63.47388,-9.1938],[56.09755,-9.55401],[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],[73.37814,-3.88401],[74.6203,7.39289],[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.31581,-9.48554],[33.14925,-9.49322],[32.99397,-9.36712],[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],[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],[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]]]]}},{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],[-118.48109,32.5991],[-120.12904,18.41089],[-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],[-89.15105,17.95104],[-89.03839,18.0067],[-88.8716,17.89535],[-88.71505,18.0707],[-88.48242,18.49164],[-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],[-85.9092,21.8218],[-96.92418,25.97377],[-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]]]]}},{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],[109.55486,8.10026],[104.81582,8.03101],[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],[99.75778,3.86466],[103.03657,1.30383],[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],[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.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.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.02521,5.35005],[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]]]]}},{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],[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.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],[30.22098,-14.99447],[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.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],[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.19409,-26.84032],[32.22302,-26.84136],[32.29584,-26.852],[32.35222,-26.86027],[34.51034,-26.91792],[42.99868,-12.65261],[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],[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],[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],[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],[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],[21.42741,-18.02787],[21.14283,-17.94318],[18.84226,-17.80375],[18.39229,-17.38927],[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],[174.90025,-23.53966],[162.93363,-17.28904],[157.83842,-18.82563],[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],[13.5631,23.16574],[11.96886,23.51735],[7.48273,20.87258],[7.38361,20.79165],[5.8153,19.45101],[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.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.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],[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],[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],[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],[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],[166.29505,-28.29175],[167.94076,-30.60745],[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],[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.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],[5.87055,3.78489],[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],[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]]]]}},{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.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.7346,13.13228],[-88.11443,12.63306],[-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],[-82.56142,11.91792],[-82.06974,14.49418],[-83.04763,15.03256],[-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],[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],[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.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]],[[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]]]]}},{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],[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.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],[29.31664,69.47994],[28.8629,69.22395],[28.81248,69.11997],[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],[18.46509,71.28681],[-0.3751,61.32236],[7.28637,57.35913],[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],[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.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]]]]}},{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],[166.21778,-0.7977],[167.60042,-0.88259],[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],[-173.11048,-23.23027],[-167.73129,-23.22266],[-167.73854,-14.92809],[-171.14262,-14.93704],[-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],[-179.93224,-45.18423],[-155.99562,-45.16785],[-180,-24.21376]]],[[[161.96603,-56.07661],[179.49541,-50.04657],[179.49541,-36.79303],[169.6687,-29.09191],[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.79239,26.41236],[56.68954,26.76645],[56.2644,26.58649],[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.82555,25.7713]]],[[[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]]],[[[61.45114,22.55394],[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.66469,21.99658],[54.99756,20.00083],[52.00311,19.00083],[52.78009,17.35124],[52.74267,17.29519],[52.81185,17.28568],[53.09917,16.67084],[53.32998,16.16312],[56.66759,17.24021],[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.58292,9.22278],[-78.79327,9.93766],[-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],[-82.13751,6.97312],[-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]]]]}},{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],[-74.42701,-0.50218],[-75.18513,-0.0308],[-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],[-84.52388,-3.36941],[-85.71054,-21.15413],[-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.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.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],[-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]]]]}},{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],[-149.61166,-12.30171],[-156.4957,-12.32002],[-156.46451,-23.21255],[-156.44843,-28.52556],[-133.59543,-28.4709],[-133.61511,-21.93325],[-133.65593,-7.46952],[-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],[140.99813,-6.3233],[140.85295,-6.72996],[141.01763,-6.90181],[141.00782,-9.1242],[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],[155.22803,-12.9001],[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],[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],[121.8109,21.77688],[120.69238,21.52331],[118.82252,14.67191],[115.39742,10.92666],[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],[118.41402,3.99509],[124.97752,4.82064],[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.45562,36.71971],[75.40481,36.95382],[75.13839,37.02622],[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.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],[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.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]]]]}},{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],[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.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.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],[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.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.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.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],[21.41123,54.32395],[20.63871,54.3706],[19.8038,54.44203],[19.64312,54.45423],[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],[-55.90758,46.6223],[-56.27503,47.39728],[-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],[-122.0366,-24.55017],[-133.61511,-21.93325],[-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],[-65.02435,18.73231],[-67.99519,18.97186],[-68.20301,17.83927],[-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.21853,31.32363],[34.23572,31.2966],[34.24012,31.29591],[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]]],[[[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.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]]]]}},{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.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],[-36.43765,41.39418],[-15.92339,29.50503],[-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]]]]}},{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],[134.40878,1.79674],[136.27107,6.73747],[136.04605,12.45908],[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],[-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.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.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]]]]}},{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],[51.09638,24.46907],[51.29972,24.50747],[51.39468,24.62785],[51.58834,24.66608],[51.83108,24.71675],[51.83682,26.70231],[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.8133,24.74049],[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.73473,-21.9174],[56.62373,-20.2711],[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.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.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.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.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],[23.04988,44.07694],[23.01674,44.01946],[22.87873,43.9844],[22.83753,43.88055],[22.85314,43.84452],[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],[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.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]]]]}},{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.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.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],[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.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.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],[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.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],[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],[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.09713,46.17315],[20.03533,46.14509],[20.01816,46.17696],[19.93508,46.17553],[19.81491,46.1313],[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],[-172.76104,63.77445],[-169.03888,65.48473],[-168.95635,65.98512],[-168.25765,71.99091],[-179.9843,71.90735],[-179.99933,64.74703]]],[[[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],[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],[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],[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],[87.478,49.07403],[87.48983,49.13794],[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],[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],[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],[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.56835,42.43281],[130.60805,42.4317],[130.64181,42.41422],[130.66367,42.38024],[130.65022,42.32281],[131.95041,41.5445],[140.9182,45.92937],[145.82343,44.571],[145.23667,43.76813],[153.94307,38.42848],[180,62.52334],[180,71.53642],[155.31937,81.93282],[36.48095,82.16765],[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.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],[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],[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],[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.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],[33.59087,46.06013],[33.54017,46.0123],[31.62627,45.50633],[32.99857,44.48323],[33.66142,43.9825],[39.81147,43.06294]]],[[[21.46766,55.21115],[21.38446,55.29348],[21.35465,55.28427],[21.26425,55.24456],[20.95181,55.27994],[20.60454,55.40986],[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.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]]]]}},{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.35212,-1.06896],[30.16369,-1.34303],[29.912,-1.48269],[29.82657,-1.31187],[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.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],[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]]]]}},{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],[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.46254,27.99552],[34.51305,27.70027],[37.8565,22.00903],[39.63762,18.37348],[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],[54.99756,20.00083],[55.66469,21.99658],[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.39468,24.62785],[51.29972,24.50747],[51.09638,24.46907],[50.92992,24.54396],[50.8133,24.74049],[50.57069,25.57887],[50.302,25.87592],[50.26923,26.08243],[50.38162,26.53976],[50.71771,26.73086],[50.37726,27.89227],[49.98877,27.87827],[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.42415,29.05947],[44.72255,29.19736],[42.97796,30.48295],[42.97601,30.72204],[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.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],[160.04026,-13.08769],[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],[54.83239,-10.93575],[66.3222,5.65313],[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],[34.0765,22.00501],[33.99686,21.76784],[33.57251,21.72406],[33.17563,22.00405],[24.99885,21.99535],[24.99794,19.99661],[23.99715,20.00038],[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],[23.02221,10.69235],[23.3128,10.45214],[23.67164,9.86923],[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],[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.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],[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],[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.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],[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],[19.64795,57.06466],[19.84909,57.57876],[20.5104,59.15546],[19.08191,60.19152],[19.23413,60.61414],[20.15877,63.06556],[24.14112,65.39731],[24.15107,65.81427],[24.14798,65.83466],[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],[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.66049,1.18825],[103.74084,1.12902],[104.03085,1.26954],[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]]]]}},{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.48367,-36.6746],[-11.55782,-36.60319],[-11.48092,-37.8367],[-13.41694,-37.88844],[-13.29655,-40.02846],[-9.34669,-41.00353],[-4.97086,-15.55882],[-13.33271,-8.07391],[-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.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.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.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.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.52604,46.5051],[16.52885,46.53303],[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],[32.07813,72.01005],[36.85549,84.09565],[-7.49892,77.24208]]],[[[-9.18243,72.23144],[-10.71459,70.09565],[-5.93364,70.76368],[-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.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.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.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.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],[21.8279,48.33321],[21.83339,48.36242],[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.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]]]]}},{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.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],[-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]]]]}},{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.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:"SN",iso1A3:"SEN",iso1N3:"686",wikidata:"Q1041",nameEn:"Senegal",groups:["011","202","002"],callingCodes:["221"]},geometry:{type:"MultiPolygon",coordinates:[[[[-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],[-18.35085,14.63444],[-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],[-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.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.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],[-11.39935,12.97808],[-11.63025,13.39174],[-11.83345,13.33333],[-12.06897,13.71049],[-11.93043,13.84505],[-12.23936,14.76324],[-13.11029,15.52116],[-13.43135,16.09022],[-13.80075,16.13961],[-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],[43.42425,11.70983],[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.31368,3.14314],[40.98767,2.82959],[41.00099,-0.83068],[41.56,-1.59812],[41.56362,-1.66375],[41.75542,-1.85308],[49.16337,2.78611],[52.253,11.68582],[51.12877,12.56479],[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.01877,5.52789],[-54.01074,5.68785],[-53.7094,6.2264],[-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],[-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.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]]]]}},{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],[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.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.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.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.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],[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]]]]}},{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],[6.69416,-0.53945],[8.0168,1.79377],[7.23334,2.23756],[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.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],[-88.11443,12.63306],[-87.7346,13.13228],[-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]]]]}},{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.07669,17.79659],[-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.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.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],[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],[35.88668,33.43183],[35.82577,33.40479],[35.81324,33.36354],[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.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],[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.32313,37.17814],[42.34735,37.22548],[42.2824,37.2798],[42.26039,37.27017],[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.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.13409,-26.5317],[32.07352,-26.40185],[32.10435,-26.15656],[32.08599,-26.00978],[32.00916,-25.999],[31.974,-25.95387],[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],[-13.41694,-37.88844],[-11.48092,-37.8367],[-11.55782,-36.60319],[-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],[-72.72017,21.48055],[-71.46138,20.64433],[-70.63262,21.53631],[-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],[15.99566,23.49639],[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],[14.08251,13.0797],[14.46881,13.08259],[14.56101,12.91036],[14.55058,12.78256],[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.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],[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]]]]}},{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.96649,-16.28353],[54.61476,-15.02273],[53.53458,-16.36909]]],[[[39.10324,-21.48967],[40.40841,-23.17181],[43.72277,-16.09877],[41.06663,-17.08802],[39.10324,-21.48967]]],[[[46.52682,-10.83678],[47.29063,-12.45583],[48.86266,-10.8109],[46.52682,-10.83678]]],[[[80.15867,-36.04977],[46.31615,-46.28749],[70.67507,-51.14192],[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.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.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.66104,10.99964],[0.4958,10.93269],[0.50521,10.98035],[0.48852,10.98561],[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],[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],[97.19814,8.18901],[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],[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.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]]]]}},{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.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.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],[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],[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.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.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.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]]],[[[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]]]]}},{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],[-167.75329,-7.52784],[-174.18707,-7.54408],[-174.17993,-10.13616],[-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.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],[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]]]]}},{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],[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.45471,41.25609],[54.95182,41.92424],[54.20635,42.38477],[52.97575,42.1308],[52.47884,41.78034],[52.26048,41.69249],[51.7708,40.29239],[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.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.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]]]]}},{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],[7.89009,38.19924],[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.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],[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],[-180,-22.90585],[-180,-24.21376],[-173.10761,-24.19665],[-173.11048,-23.23027],[-173.13438,-14.94228],[-174.17905,-14.94502],[-176.76826,-14.95183],[-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],[40.89217,41.72528],[34.8305,42.4581],[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.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],[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],[32.82353,35.70297],[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],[42.26039,37.27017],[42.2824,37.2798],[42.34735,37.22548],[42.32313,37.17814],[42.35724,37.10998],[42.56725,37.14878],[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.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.80977,39.65768],[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.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]]]]}},{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],[-62.08693,10.04435],[-60.89962,9.81445],[-60.07172,11.77667],[-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],[174,-11.5],[179.99999,-11.5],[179.99999,-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],[122.26612,25.98197],[120.49232,25.22863],[118.56434,24.49266],[118.42453,24.54644],[118.35291,24.51645],[118.28244,24.51231],[118.11703,24.39734],[120.69238,21.52331],[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],[30.76635,-0.9852],[30.70631,-1.01175],[30.64166,-1.06601],[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.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.52552,-6.2731],[30.2567,-7.14121],[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],[32.99397,-9.36712],[33.14925,-9.49322],[33.31581,-9.48554],[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],[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],[40.14328,-4.64201],[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],[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.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.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.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.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],[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.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.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],[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.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],[31.62627,45.50633],[33.54017,46.0123],[33.59087,46.06013],[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],[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],[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.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.82657,-1.31187],[29.912,-1.48269],[30.16369,-1.34303],[30.35212,-1.06896],[30.47194,-1.0555],[30.64166,-1.06601],[30.70631,-1.01175],[30.76635,-0.9852],[30.80408,-0.99911],[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],[-175.33167,1.67574],[-177.43928,1.65656],[-177.43039,-1.43294],[-175.33482,-1.40631]]],[[[-161.04969,-1.36251],[-158.62058,-1.35506],[-158.62734,1.1296],[-161.05669,1.11722],[-161.04969,-1.36251]]],[[[-161.06795,5.2462],[-161.0731,7.1291],[-163.24994,7.12322],[-163.24478,5.24198],[-161.06795,5.2462]]],[[[-170.65691,16.57199],[-168.87689,16.01159],[-169.2329,17.4933],[-170.65691,16.57199]]],[[[-176.29741,29.09786],[-177.77531,29.29793],[-177.5224,27.7635],[-176.29741,29.09786]]],[[[-74.7289,18.71009],[-75.71816,18.46438],[-74.76465,18.06252],[-74.7289,18.71009]]],[[[167.34779,18.97692],[166.67967,20.14834],[165.82549,18.97692],[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],[-179.49839,27.86265],[-151.6784,9.55515],[-154.05867,45.51124],[-177.5224,27.7635],[-177.8563,29.18961]]],[[[169.34848,52.47228],[180,51.0171],[179.84401,55.10087],[169.34848,52.47228]]],[[[-168.95635,65.98512],[-169.03888,65.48473],[-172.76104,63.77445],[-179.55295,57.62081],[-179.55295,50.81807],[-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],[-168.25765,71.99091],[-168.95635,65.98512]]],[[[-97.13927,25.96583],[-96.92418,25.97377],[-82.02215,24.23074],[-79.89631,24.6597],[-79.14818,27.83105],[-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],[-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.98258,38.06389],[-118.48109,32.5991],[-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]]]]}},{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.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],[-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]]]]}},{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],[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],[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],[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.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.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.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.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],[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]],[[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]]],[[[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]]],[[[71.86463,39.98598],[71.78838,40.01404],[71.71511,39.96348],[71.7504,39.93701],[71.84316,39.95582],[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.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]]]]}},{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.38256,12.52991],[-61.13395,12.51526],[-60.70539,13.41452],[-61.43129,13.68336],[-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],[-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],[-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],[-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],[-60.89962,9.81445],[-62.08693,10.04435],[-61.62505,11.18974],[-63.73917,11.92623],[-63.19938,16.44103],[-67.89186,12.4116],[-68.01417,11.77722],[-68.33524,11.78151],[-68.99639,11.79035],[-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],[-63.75633,19.39745],[-65.02435,18.73231],[-64.86027,18.39056],[-64.64067,18.36478],[-64.646,18.10286],[-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],[-65.27974,17.56928],[-64.35558,17.48384],[-64.646,18.10286],[-64.64067,18.36478],[-64.86027,18.39056],[-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.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.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.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],[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],[104.81582,8.03101],[109.55486,8.10026],[111.60491,13.57105],[108.00365,17.98159],[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],[173.26254,-22.69968],[168.21179,-12.88558],[166.02864,-12.9396],[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],[-176.76826,-14.95183],[-174.17905,-14.94502],[-174.18596,-12.48057],[-178.60852,-12.49232],[-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],[-173.13438,-14.94228],[-171.14262,-14.93704],[-171.14953,-12.4725],[-174.18596,-12.48057],[-174.17905,-14.94502]]]]}},{type:"Feature",properties:{iso1A2:"XK",iso1A3:"XKX",wikidata:"Q1246",nameEn:"Kosovo",aliases:["KV"],groups:["039","150"],isoStatus:"usrAssn",callingCodes:["383"]},geometry:{type:"MultiPolygon",coordinates:[[[[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.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.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.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.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]]]]}},{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],[53.09917,16.67084],[52.81185,17.28568],[52.74267,17.29519],[52.78009,17.35124],[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],[41.29956,15.565],[42.63806,13.58268],[43.29075,12.79154],[43.32909,12.59711],[43.90659,12.3823],[50.51849,13.0483],[51.12877,12.56479],[52.253,11.68582],[55.69862,12.12478],[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.54824,-13.22353],[45.50237,-11.90315],[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.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.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.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],[38.88176,-48.03306],[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.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],[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]],[[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:"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],[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],[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],[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],[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.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],[30.22098,-14.99447],[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]]]]}},{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.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.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.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],[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]]]]}}];
29213         var rawBorders = {
29214         type: type$1,
29215         features: features$1
29216         };
29217
29218         var borders = rawBorders;
29219         var whichPolygonGetter = {};
29220         var featuresByCode = {};
29221         var idFilterRegex = /\bThe\b|\bthe\b|\band\b|\bof\b|[-_ .,()&[\]/]/g;
29222         var levels = [
29223           'subterritory',
29224           'territory',
29225           'country',
29226           'intermediateRegion',
29227           'subregion',
29228           'region',
29229           'union',
29230           'world'
29231         ];
29232         loadDerivedDataAndCaches(borders);
29233         function loadDerivedDataAndCaches(borders) {
29234           var identifierProps = ['iso1A2', 'iso1A3', 'm49', 'wikidata', 'emojiFlag', 'nameEn'];
29235           var geometryFeatures = [];
29236           for (var i in borders.features) {
29237             var feature = borders.features[i];
29238             feature.properties.id = feature.properties.iso1A2 || feature.properties.m49;
29239             loadM49(feature);
29240             loadIsoStatus(feature);
29241             loadLevel(feature);
29242             loadGroups(feature);
29243             loadRoadSpeedUnit(feature);
29244             loadDriveSide(feature);
29245             loadFlag(feature);
29246             cacheFeatureByIDs(feature);
29247             if (feature.geometry) { geometryFeatures.push(feature); }
29248           }
29249           for (var i$1 in borders.features) {
29250             var feature$1 = borders.features[i$1];
29251             feature$1.properties.groups.sort(function(groupID1, groupID2) {
29252               return (
29253                 levels.indexOf(featuresByCode[groupID1].properties.level) -
29254                 levels.indexOf(featuresByCode[groupID2].properties.level)
29255               );
29256             });
29257             loadMembersForGroupsOf(feature$1);
29258           }
29259           var geometryOnlyCollection = {
29260             type: 'RegionFeatureCollection',
29261             features: geometryFeatures
29262           };
29263           whichPolygonGetter = whichPolygon_1(geometryOnlyCollection);
29264           function loadGroups(feature) {
29265             var props = feature.properties;
29266             if (!props.groups) {
29267               props.groups = [];
29268             }
29269             if (props.country) {
29270               props.groups.push(props.country);
29271             }
29272             if (props.m49 !== '001') {
29273               props.groups.push('001');
29274             }
29275           }
29276           function loadM49(feature) {
29277             var props = feature.properties;
29278             if (!props.m49 && props.iso1N3) {
29279               props.m49 = props.iso1N3;
29280             }
29281           }
29282           function loadIsoStatus(feature) {
29283             var props = feature.properties;
29284             if (!props.isoStatus && props.iso1A2) {
29285               props.isoStatus = 'official';
29286             }
29287           }
29288           function loadLevel(feature) {
29289             var props = feature.properties;
29290             if (props.level) { return; }
29291             if (!props.country) {
29292               props.level = 'country';
29293             } else if (props.isoStatus === 'official') {
29294               props.level = 'territory';
29295             } else {
29296               props.level = 'subterritory';
29297             }
29298           }
29299           function loadRoadSpeedUnit(feature) {
29300             var props = feature.properties;
29301             if (props.roadSpeedUnit === undefined && props.iso1A2 && props.iso1A2 !== 'EU') {
29302               props.roadSpeedUnit = 'km/h';
29303             }
29304           }
29305           function loadDriveSide(feature) {
29306             var props = feature.properties;
29307             if (props.driveSide === undefined && props.iso1A2 && props.iso1A2 !== 'EU') {
29308               props.driveSide = 'right';
29309             }
29310           }
29311           function loadFlag(feature) {
29312             if (!feature.properties.iso1A2) { return; }
29313             var flag = feature.properties.iso1A2.replace(/./g, function(char) {
29314               return String.fromCodePoint(char.charCodeAt(0) + 127397);
29315             });
29316             feature.properties.emojiFlag = flag;
29317           }
29318           function loadMembersForGroupsOf(feature) {
29319             var featureID = feature.properties.id;
29320             var standardizedGroupIDs = [];
29321             for (var j in feature.properties.groups) {
29322               var groupID = feature.properties.groups[j];
29323               var groupFeature = featuresByCode[groupID];
29324               standardizedGroupIDs.push(groupFeature.properties.id);
29325               if (groupFeature.properties.members) {
29326                 groupFeature.properties.members.push(featureID);
29327               } else {
29328                 groupFeature.properties.members = [featureID];
29329               }
29330             }
29331             feature.properties.groups = standardizedGroupIDs;
29332           }
29333           function cacheFeatureByIDs(feature) {
29334             for (var k in identifierProps) {
29335               var prop = identifierProps[k];
29336               var id = prop && feature.properties[prop];
29337               if (id) {
29338                 id = id.replace(idFilterRegex, '').toUpperCase();
29339                 featuresByCode[id] = feature;
29340               }
29341             }
29342             if (feature.properties.aliases) {
29343               for (var j in feature.properties.aliases) {
29344                 var alias = feature.properties.aliases[j].replace(idFilterRegex, '').toUpperCase();
29345                 featuresByCode[alias] = feature;
29346               }
29347             }
29348           }
29349         }
29350         function locArray(loc) {
29351           if (Array.isArray(loc)) {
29352             return loc;
29353           } else if (loc.coordinates) {
29354             return loc.coordinates;
29355           }
29356           return loc.geometry.coordinates;
29357         }
29358         function smallestFeature(loc) {
29359           var query = locArray(loc);
29360           var featureProperties = whichPolygonGetter(query);
29361           if (!featureProperties) { return null; }
29362           return featuresByCode[featureProperties.id];
29363         }
29364         function countryFeature(loc) {
29365           var feature = smallestFeature(loc);
29366           if (!feature) { return null; }
29367           var countryCode = feature.properties.country || feature.properties.iso1A2;
29368           return featuresByCode[countryCode];
29369         }
29370         function featureForLoc(loc, opts) {
29371           if (opts && opts.level && opts.level !== 'country') {
29372             var features = featuresContaining(loc);
29373             var targetLevel = opts.level;
29374             var targetLevelIndex = levels.indexOf(targetLevel);
29375             if (targetLevelIndex === -1) { return null; }
29376             for (var i in features) {
29377               var feature = features[i];
29378               if (
29379                 feature.properties.level === targetLevel ||
29380                 levels.indexOf(feature.properties.level) > targetLevelIndex
29381               ) {
29382                 return feature;
29383               }
29384             }
29385             return null;
29386           }
29387           return countryFeature(loc);
29388         }
29389         function featureForID(id) {
29390           var stringID;
29391           if (typeof id === 'number') {
29392             stringID = id.toString();
29393             if (stringID.length === 1) {
29394               stringID = '00' + stringID;
29395             } else if (stringID.length === 2) {
29396               stringID = '0' + stringID;
29397             }
29398           } else {
29399             stringID = id.replace(idFilterRegex, '').toUpperCase();
29400           }
29401           return featuresByCode[stringID] || null;
29402         }
29403         function smallestOrMatchingFeature(query) {
29404           if (typeof query === 'object') {
29405             return smallestFeature(query);
29406           }
29407           return featureForID(query);
29408         }
29409         function feature(query, opts) {
29410           if (typeof query === 'object') {
29411             return featureForLoc(query, opts);
29412           }
29413           return featureForID(query);
29414         }
29415         function iso1A2Code(query, opts) {
29416           var match = feature(query, opts);
29417           if (!match) { return null; }
29418           return match.properties.iso1A2 || null;
29419         }
29420         function featuresContaining(query, strict) {
29421           var feature = smallestOrMatchingFeature(query);
29422           if (!feature) { return []; }
29423           var features = [];
29424           if (!strict || typeof query === 'object') {
29425             features.push(feature);
29426           }
29427           var properties = feature.properties;
29428           for (var i in properties.groups) {
29429             var groupID = properties.groups[i];
29430             features.push(featuresByCode[groupID]);
29431           }
29432           return features;
29433         }
29434         function roadSpeedUnit(query) {
29435           var feature = smallestOrMatchingFeature(query);
29436           return (feature && feature.properties.roadSpeedUnit) || null;
29437         }
29438
29439         var RADIUS = 6378137;
29440         var FLATTENING = 1/298.257223563;
29441         var POLAR_RADIUS$1 = 6356752.3142;
29442
29443         var wgs84 = {
29444                 RADIUS: RADIUS,
29445                 FLATTENING: FLATTENING,
29446                 POLAR_RADIUS: POLAR_RADIUS$1
29447         };
29448
29449         var geometry_1 = geometry;
29450         var ring = ringArea;
29451
29452         function geometry(_) {
29453             var area = 0, i;
29454             switch (_.type) {
29455                 case 'Polygon':
29456                     return polygonArea(_.coordinates);
29457                 case 'MultiPolygon':
29458                     for (i = 0; i < _.coordinates.length; i++) {
29459                         area += polygonArea(_.coordinates[i]);
29460                     }
29461                     return area;
29462                 case 'Point':
29463                 case 'MultiPoint':
29464                 case 'LineString':
29465                 case 'MultiLineString':
29466                     return 0;
29467                 case 'GeometryCollection':
29468                     for (i = 0; i < _.geometries.length; i++) {
29469                         area += geometry(_.geometries[i]);
29470                     }
29471                     return area;
29472             }
29473         }
29474
29475         function polygonArea(coords) {
29476             var area = 0;
29477             if (coords && coords.length > 0) {
29478                 area += Math.abs(ringArea(coords[0]));
29479                 for (var i = 1; i < coords.length; i++) {
29480                     area -= Math.abs(ringArea(coords[i]));
29481                 }
29482             }
29483             return area;
29484         }
29485
29486         /**
29487          * Calculate the approximate area of the polygon were it projected onto
29488          *     the earth.  Note that this area will be positive if ring is oriented
29489          *     clockwise, otherwise it will be negative.
29490          *
29491          * Reference:
29492          * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for
29493          *     Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
29494          *     Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
29495          *
29496          * Returns:
29497          * {float} The approximate signed geodesic area of the polygon in square
29498          *     meters.
29499          */
29500
29501         function ringArea(coords) {
29502             var p1, p2, p3, lowerIndex, middleIndex, upperIndex, i,
29503             area = 0,
29504             coordsLength = coords.length;
29505
29506             if (coordsLength > 2) {
29507                 for (i = 0; i < coordsLength; i++) {
29508                     if (i === coordsLength - 2) {// i = N-2
29509                         lowerIndex = coordsLength - 2;
29510                         middleIndex = coordsLength -1;
29511                         upperIndex = 0;
29512                     } else if (i === coordsLength - 1) {// i = N-1
29513                         lowerIndex = coordsLength - 1;
29514                         middleIndex = 0;
29515                         upperIndex = 1;
29516                     } else { // i = 0 to N-3
29517                         lowerIndex = i;
29518                         middleIndex = i+1;
29519                         upperIndex = i+2;
29520                     }
29521                     p1 = coords[lowerIndex];
29522                     p2 = coords[middleIndex];
29523                     p3 = coords[upperIndex];
29524                     area += ( rad(p3[0]) - rad(p1[0]) ) * Math.sin( rad(p2[1]));
29525                 }
29526
29527                 area = area * wgs84.RADIUS * wgs84.RADIUS / 2;
29528             }
29529
29530             return area;
29531         }
29532
29533         function rad(_) {
29534             return _ * Math.PI / 180;
29535         }
29536
29537         var geojsonArea = {
29538                 geometry: geometry_1,
29539                 ring: ring
29540         };
29541
29542         function toRadians(angleInDegrees) {
29543           return angleInDegrees * Math.PI / 180;
29544         }
29545
29546         function toDegrees(angleInRadians) {
29547           return angleInRadians * 180 / Math.PI;
29548         }
29549
29550         function offset(c1, distance, bearing) {
29551           var lat1 = toRadians(c1[1]);
29552           var lon1 = toRadians(c1[0]);
29553           var dByR = distance / 6378137; // distance divided by 6378137 (radius of the earth) wgs84
29554           var lat = Math.asin(
29555             Math.sin(lat1) * Math.cos(dByR) +
29556             Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
29557           var lon = lon1 + Math.atan2(
29558               Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
29559               Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
29560           return [toDegrees(lon), toDegrees(lat)];
29561         }
29562
29563         var circleToPolygon = function circleToPolygon(center, radius, numberOfSegments) {
29564           var n = numberOfSegments ? numberOfSegments : 32;
29565           var flatCoordinates = [];
29566           var coordinates = [];
29567           for (var i = 0; i < n; ++i) {
29568             flatCoordinates.push.apply(flatCoordinates, offset(center, radius, 2 * Math.PI * i / n));
29569           }
29570           flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
29571
29572           for (var i = 0, j = 0; j < flatCoordinates.length; j += 2) {
29573             coordinates[i++] = flatCoordinates.slice(j, j + 2);
29574           }
29575
29576           return {
29577             type: 'Polygon',
29578             coordinates: [coordinates.reverse()]
29579           };
29580         };
29581
29582         var geojsonPrecision = createCommonjsModule(function (module) {
29583         (function() {
29584
29585           function parse(t, precision) {
29586
29587             function point(p) {
29588               return p.map(function(e) {
29589                 return 1 * e.toFixed(precision);
29590               });
29591             }
29592
29593             function multi(l) {
29594               return l.map(point);
29595             }
29596
29597             function poly(p) {
29598               return p.map(multi);
29599             }
29600
29601             function multiPoly(m) {
29602               return m.map(poly);
29603             }
29604
29605             function geometry(obj) {
29606               if (!obj) {
29607                 return {};
29608               }
29609               
29610               switch (obj.type) {
29611                 case "Point":
29612                   obj.coordinates = point(obj.coordinates);
29613                   return obj;
29614                 case "LineString":
29615                 case "MultiPoint":
29616                   obj.coordinates = multi(obj.coordinates);
29617                   return obj;
29618                 case "Polygon":
29619                 case "MultiLineString":
29620                   obj.coordinates = poly(obj.coordinates);
29621                   return obj;
29622                 case "MultiPolygon":
29623                   obj.coordinates = multiPoly(obj.coordinates);
29624                   return obj;
29625                 case "GeometryCollection":
29626                   obj.geometries = obj.geometries.map(geometry);
29627                   return obj;
29628                 default :
29629                   return {};
29630               }
29631             }
29632
29633             function feature(obj) {
29634               obj.geometry = geometry(obj.geometry);
29635               return obj
29636             }
29637
29638             function featureCollection(f) {
29639               f.features = f.features.map(feature);
29640               return f;
29641             }
29642
29643             function geometryCollection(g) {
29644               g.geometries = g.geometries.map(geometry);
29645               return g;
29646             }
29647
29648             if (!t) {
29649               return t;
29650             }
29651
29652             switch (t.type) {
29653               case "Feature":
29654                 return feature(t);
29655               case "GeometryCollection" :
29656                 return geometryCollection(t);
29657               case "FeatureCollection" :
29658                 return featureCollection(t);
29659               case "Point":
29660               case "LineString":
29661               case "Polygon":
29662               case "MultiPoint":
29663               case "MultiPolygon":
29664               case "MultiLineString":
29665                 return geometry(t);
29666               default :
29667                 return t;
29668             }
29669               
29670           }
29671
29672           module.exports = parse;
29673           module.exports.parse = parse;
29674
29675         }());
29676         });
29677         var geojsonPrecision_1 = geojsonPrecision.parse;
29678
29679         /* Polyfill service v3.13.0
29680          * For detailed credits and licence information see http://github.com/financial-times/polyfill-service
29681          *
29682          * - Array.prototype.fill, License: CC0 */
29683
29684         if (!('fill' in Array.prototype)) {
29685           Object.defineProperty(Array.prototype, 'fill', {
29686             configurable: true,
29687             value: function fill (value) {
29688               if (this === undefined || this === null) {
29689                 throw new TypeError(this + ' is not an object')
29690               }
29691
29692               var arrayLike = Object(this);
29693
29694               var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;
29695
29696               var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;
29697
29698               relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);
29699
29700               var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;
29701
29702               relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);
29703
29704               while (relativeStart < relativeEnd) {
29705                 arrayLike[relativeStart] = value;
29706
29707                 ++relativeStart;
29708               }
29709
29710               return arrayLike
29711             },
29712             writable: true
29713           });
29714         }
29715
29716         /**
29717          * Polyfill for IE support
29718          */
29719         Number.isFinite = Number.isFinite || function (value) {
29720           return typeof value === 'number' && isFinite(value)
29721         };
29722
29723         Number.isInteger = Number.isInteger || function (val) {
29724           return typeof val === 'number' &&
29725           isFinite(val) &&
29726           Math.floor(val) === val
29727         };
29728
29729         Number.parseFloat = Number.parseFloat || parseFloat;
29730
29731         Number.isNaN = Number.isNaN || function (value) {
29732           return value !== value // eslint-disable-line
29733         };
29734
29735         /**
29736          * Polyfill for IE support
29737          */
29738         Math.trunc = Math.trunc || function (x) {
29739           return x < 0 ? Math.ceil(x) : Math.floor(x)
29740         };
29741
29742         var NumberUtil = function NumberUtil () {};
29743
29744         NumberUtil.prototype.interfaces_ = function interfaces_ () {
29745           return []
29746         };
29747         NumberUtil.prototype.getClass = function getClass () {
29748           return NumberUtil
29749         };
29750         NumberUtil.prototype.equalsWithTolerance = function equalsWithTolerance (x1, x2, tolerance) {
29751           return Math.abs(x1 - x2) <= tolerance
29752         };
29753
29754         var IllegalArgumentException = (function (Error) {
29755                 function IllegalArgumentException (message) {
29756                         Error.call(this, message);
29757                         this.name = 'IllegalArgumentException';
29758                         this.message = message;
29759                         this.stack = (new Error()).stack;
29760                 }
29761
29762                 if ( Error ) { IllegalArgumentException.__proto__ = Error; }
29763                 IllegalArgumentException.prototype = Object.create( Error && Error.prototype );
29764                 IllegalArgumentException.prototype.constructor = IllegalArgumentException;
29765
29766                 return IllegalArgumentException;
29767         }(Error));
29768
29769         var Double = function Double () {};
29770
29771         var staticAccessors$1 = { MAX_VALUE: { configurable: true } };
29772
29773         Double.isNaN = function isNaN (n) { return Number.isNaN(n) };
29774         Double.doubleToLongBits = function doubleToLongBits (n) { return n };
29775         Double.longBitsToDouble = function longBitsToDouble (n) { return n };
29776         Double.isInfinite = function isInfinite (n) { return !Number.isFinite(n) };
29777         staticAccessors$1.MAX_VALUE.get = function () { return Number.MAX_VALUE };
29778
29779         Object.defineProperties( Double, staticAccessors$1 );
29780
29781         var Comparable = function Comparable () {};
29782
29783         var Clonable = function Clonable () {};
29784
29785         var Comparator = function Comparator () {};
29786
29787         function Serializable () {}
29788
29789         // import Assert from '../util/Assert'
29790
29791         var Coordinate = function Coordinate () {
29792           this.x = null;
29793           this.y = null;
29794           this.z = null;
29795           if (arguments.length === 0) {
29796             this.x = 0.0;
29797             this.y = 0.0;
29798             this.z = Coordinate.NULL_ORDINATE;
29799           } else if (arguments.length === 1) {
29800             var c = arguments[0];
29801             this.x = c.x;
29802             this.y = c.y;
29803             this.z = c.z;
29804           } else if (arguments.length === 2) {
29805             this.x = arguments[0];
29806             this.y = arguments[1];
29807             this.z = Coordinate.NULL_ORDINATE;
29808           } else if (arguments.length === 3) {
29809             this.x = arguments[0];
29810             this.y = arguments[1];
29811             this.z = arguments[2];
29812           }
29813         };
29814
29815         var staticAccessors = { DimensionalComparator: { configurable: true },serialVersionUID: { configurable: true },NULL_ORDINATE: { configurable: true },X: { configurable: true },Y: { configurable: true },Z: { configurable: true } };
29816         Coordinate.prototype.setOrdinate = function setOrdinate (ordinateIndex, value) {
29817           switch (ordinateIndex) {
29818             case Coordinate.X:
29819               this.x = value;
29820               break
29821             case Coordinate.Y:
29822               this.y = value;
29823               break
29824             case Coordinate.Z:
29825               this.z = value;
29826               break
29827             default:
29828               throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
29829           }
29830         };
29831         Coordinate.prototype.equals2D = function equals2D () {
29832           if (arguments.length === 1) {
29833             var other = arguments[0];
29834             if (this.x !== other.x) {
29835               return false
29836             }
29837             if (this.y !== other.y) {
29838               return false
29839             }
29840             return true
29841           } else if (arguments.length === 2) {
29842             var c = arguments[0];
29843             var tolerance = arguments[1];
29844             if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {
29845               return false
29846             }
29847             if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {
29848               return false
29849             }
29850             return true
29851           }
29852         };
29853         Coordinate.prototype.getOrdinate = function getOrdinate (ordinateIndex) {
29854           switch (ordinateIndex) {
29855             case Coordinate.X:
29856               return this.x
29857             case Coordinate.Y:
29858               return this.y
29859             case Coordinate.Z:
29860               return this.z
29861           }
29862           throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)
29863         };
29864         Coordinate.prototype.equals3D = function equals3D (other) {
29865           return this.x === other.x &&
29866                  this.y === other.y &&
29867                  ((this.z === other.z || Double.isNaN(this.z)) &&
29868                  Double.isNaN(other.z))
29869         };
29870         Coordinate.prototype.equals = function equals (other) {
29871           if (!(other instanceof Coordinate)) {
29872             return false
29873           }
29874           return this.equals2D(other)
29875         };
29876         Coordinate.prototype.equalInZ = function equalInZ (c, tolerance) {
29877           return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)
29878         };
29879         Coordinate.prototype.compareTo = function compareTo (o) {
29880           var other = o;
29881           if (this.x < other.x) { return -1 }
29882           if (this.x > other.x) { return 1 }
29883           if (this.y < other.y) { return -1 }
29884           if (this.y > other.y) { return 1 }
29885           return 0
29886         };
29887         Coordinate.prototype.clone = function clone () {
29888           // try {
29889           // var coord = null
29890           // return coord
29891           // } catch (e) {
29892           // if (e instanceof CloneNotSupportedException) {
29893           //   Assert.shouldNeverReachHere("this shouldn't happen because this class is Cloneable")
29894           //   return null
29895           // } else throw e
29896           // } finally {}
29897         };
29898         Coordinate.prototype.copy = function copy () {
29899           return new Coordinate(this)
29900         };
29901         Coordinate.prototype.toString = function toString () {
29902           return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'
29903         };
29904         Coordinate.prototype.distance3D = function distance3D (c) {
29905           var dx = this.x - c.x;
29906           var dy = this.y - c.y;
29907           var dz = this.z - c.z;
29908           return Math.sqrt(dx * dx + dy * dy + dz * dz)
29909         };
29910         Coordinate.prototype.distance = function distance (c) {
29911           var dx = this.x - c.x;
29912           var dy = this.y - c.y;
29913           return Math.sqrt(dx * dx + dy * dy)
29914         };
29915         Coordinate.prototype.hashCode = function hashCode () {
29916           var result = 17;
29917           result = 37 * result + Coordinate.hashCode(this.x);
29918           result = 37 * result + Coordinate.hashCode(this.y);
29919           return result
29920         };
29921         Coordinate.prototype.setCoordinate = function setCoordinate (other) {
29922           this.x = other.x;
29923           this.y = other.y;
29924           this.z = other.z;
29925         };
29926         Coordinate.prototype.interfaces_ = function interfaces_ () {
29927           return [Comparable, Clonable, Serializable]
29928         };
29929         Coordinate.prototype.getClass = function getClass () {
29930           return Coordinate
29931         };
29932         Coordinate.hashCode = function hashCode () {
29933           if (arguments.length === 1) {
29934             var x = arguments[0];
29935             var f = Double.doubleToLongBits(x);
29936             return Math.trunc((f ^ f) >>> 32)
29937           }
29938         };
29939         staticAccessors.DimensionalComparator.get = function () { return DimensionalComparator };
29940         staticAccessors.serialVersionUID.get = function () { return 6683108902428366910 };
29941         staticAccessors.NULL_ORDINATE.get = function () { return Double.NaN };
29942         staticAccessors.X.get = function () { return 0 };
29943         staticAccessors.Y.get = function () { return 1 };
29944         staticAccessors.Z.get = function () { return 2 };
29945
29946         Object.defineProperties( Coordinate, staticAccessors );
29947
29948         var DimensionalComparator = function DimensionalComparator (dimensionsToTest) {
29949           this._dimensionsToTest = 2;
29950           if (arguments.length === 0) ; else if (arguments.length === 1) {
29951             var dimensionsToTest$1 = arguments[0];
29952             if (dimensionsToTest$1 !== 2 && dimensionsToTest$1 !== 3) { throw new IllegalArgumentException('only 2 or 3 dimensions may be specified') }
29953             this._dimensionsToTest = dimensionsToTest$1;
29954           }
29955         };
29956         DimensionalComparator.prototype.compare = function compare (o1, o2) {
29957           var c1 = o1;
29958           var c2 = o2;
29959           var compX = DimensionalComparator.compare(c1.x, c2.x);
29960           if (compX !== 0) { return compX }
29961           var compY = DimensionalComparator.compare(c1.y, c2.y);
29962           if (compY !== 0) { return compY }
29963           if (this._dimensionsToTest <= 2) { return 0 }
29964           var compZ = DimensionalComparator.compare(c1.z, c2.z);
29965           return compZ
29966         };
29967         DimensionalComparator.prototype.interfaces_ = function interfaces_ () {
29968           return [Comparator]
29969         };
29970         DimensionalComparator.prototype.getClass = function getClass () {
29971           return DimensionalComparator
29972         };
29973         DimensionalComparator.compare = function compare (a, b) {
29974           if (a < b) { return -1 }
29975           if (a > b) { return 1 }
29976           if (Double.isNaN(a)) {
29977             if (Double.isNaN(b)) { return 0 }
29978             return -1
29979           }
29980           if (Double.isNaN(b)) { return 1 }
29981           return 0
29982         };
29983
29984         // import hasInterface from '../../../../hasInterface'
29985         // import CoordinateSequence from './CoordinateSequence'
29986
29987         var CoordinateSequenceFactory = function CoordinateSequenceFactory () {};
29988
29989         CoordinateSequenceFactory.prototype.create = function create () {
29990           // if (arguments.length === 1) {
29991           // if (arguments[0] instanceof Array) {
29992           //   let coordinates = arguments[0]
29993           // } else if (hasInterface(arguments[0], CoordinateSequence)) {
29994           //   let coordSeq = arguments[0]
29995           // }
29996           // } else if (arguments.length === 2) {
29997           // let size = arguments[0]
29998           // let dimension = arguments[1]
29999           // }
30000         };
30001         CoordinateSequenceFactory.prototype.interfaces_ = function interfaces_ () {
30002           return []
30003         };
30004         CoordinateSequenceFactory.prototype.getClass = function getClass () {
30005           return CoordinateSequenceFactory
30006         };
30007
30008         var Location = function Location () {};
30009
30010         var staticAccessors$4 = { INTERIOR: { configurable: true },BOUNDARY: { configurable: true },EXTERIOR: { configurable: true },NONE: { configurable: true } };
30011
30012         Location.prototype.interfaces_ = function interfaces_ () {
30013           return []
30014         };
30015         Location.prototype.getClass = function getClass () {
30016           return Location
30017         };
30018         Location.toLocationSymbol = function toLocationSymbol (locationValue) {
30019           switch (locationValue) {
30020             case Location.EXTERIOR:
30021               return 'e'
30022             case Location.BOUNDARY:
30023               return 'b'
30024             case Location.INTERIOR:
30025               return 'i'
30026             case Location.NONE:
30027               return '-'
30028           }
30029           throw new IllegalArgumentException('Unknown location value: ' + locationValue)
30030         };
30031         staticAccessors$4.INTERIOR.get = function () { return 0 };
30032         staticAccessors$4.BOUNDARY.get = function () { return 1 };
30033         staticAccessors$4.EXTERIOR.get = function () { return 2 };
30034         staticAccessors$4.NONE.get = function () { return -1 };
30035
30036         Object.defineProperties( Location, staticAccessors$4 );
30037
30038         var hasInterface = function (o, i) {
30039           return o.interfaces_ && o.interfaces_().indexOf(i) > -1
30040         };
30041
30042         var MathUtil = function MathUtil () {};
30043
30044         var staticAccessors$5 = { LOG_10: { configurable: true } };
30045
30046         MathUtil.prototype.interfaces_ = function interfaces_ () {
30047           return []
30048         };
30049         MathUtil.prototype.getClass = function getClass () {
30050           return MathUtil
30051         };
30052         MathUtil.log10 = function log10 (x) {
30053           var ln = Math.log(x);
30054           if (Double.isInfinite(ln)) { return ln }
30055           if (Double.isNaN(ln)) { return ln }
30056           return ln / MathUtil.LOG_10
30057         };
30058         MathUtil.min = function min (v1, v2, v3, v4) {
30059           var min = v1;
30060           if (v2 < min) { min = v2; }
30061           if (v3 < min) { min = v3; }
30062           if (v4 < min) { min = v4; }
30063           return min
30064         };
30065         MathUtil.clamp = function clamp () {
30066           if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {
30067             var x = arguments[0];
30068             var min = arguments[1];
30069             var max = arguments[2];
30070             if (x < min) { return min }
30071             if (x > max) { return max }
30072             return x
30073           } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {
30074             var x$1 = arguments[0];
30075             var min$1 = arguments[1];
30076             var max$1 = arguments[2];
30077             if (x$1 < min$1) { return min$1 }
30078             if (x$1 > max$1) { return max$1 }
30079             return x$1
30080           }
30081         };
30082         MathUtil.wrap = function wrap (index, max) {
30083           if (index < 0) {
30084             return max - -index % max
30085           }
30086           return index % max
30087         };
30088         MathUtil.max = function max () {
30089           if (arguments.length === 3) {
30090             var v1 = arguments[0];
30091             var v2 = arguments[1];
30092             var v3 = arguments[2];
30093             var max = v1;
30094             if (v2 > max) { max = v2; }
30095             if (v3 > max) { max = v3; }
30096             return max
30097           } else if (arguments.length === 4) {
30098             var v1$1 = arguments[0];
30099             var v2$1 = arguments[1];
30100             var v3$1 = arguments[2];
30101             var v4 = arguments[3];
30102             var max$1 = v1$1;
30103             if (v2$1 > max$1) { max$1 = v2$1; }
30104             if (v3$1 > max$1) { max$1 = v3$1; }
30105             if (v4 > max$1) { max$1 = v4; }
30106             return max$1
30107           }
30108         };
30109         MathUtil.average = function average (x1, x2) {
30110           return (x1 + x2) / 2.0
30111         };
30112         staticAccessors$5.LOG_10.get = function () { return Math.log(10) };
30113
30114         Object.defineProperties( MathUtil, staticAccessors$5 );
30115
30116         var StringBuffer = function StringBuffer (str) {
30117           this.str = str;
30118         };
30119         StringBuffer.prototype.append = function append (e) {
30120           this.str += e;
30121         };
30122
30123         StringBuffer.prototype.setCharAt = function setCharAt (i, c) {
30124           this.str = this.str.substr(0, i) + c + this.str.substr(i + 1);
30125         };
30126
30127         StringBuffer.prototype.toString = function toString (e) {
30128           return this.str
30129         };
30130
30131         var Integer = function Integer (value) {
30132           this.value = value;
30133         };
30134         Integer.prototype.intValue = function intValue () {
30135           return this.value
30136         };
30137         Integer.prototype.compareTo = function compareTo (o) {
30138           if (this.value < o) { return -1 }
30139           if (this.value > o) { return 1 }
30140           return 0
30141         };
30142         Integer.isNaN = function isNaN (n) { return Number.isNaN(n) };
30143
30144         var Character = function Character () {};
30145
30146         Character.isWhitespace = function isWhitespace (c) { return ((c <= 32 && c >= 0) || c === 127) };
30147         Character.toUpperCase = function toUpperCase (c) { return c.toUpperCase() };
30148
30149         var DD = function DD () {
30150           this._hi = 0.0;
30151           this._lo = 0.0;
30152           if (arguments.length === 0) {
30153             this.init(0.0);
30154           } else if (arguments.length === 1) {
30155             if (typeof arguments[0] === 'number') {
30156               var x = arguments[0];
30157               this.init(x);
30158             } else if (arguments[0] instanceof DD) {
30159               var dd = arguments[0];
30160               this.init(dd);
30161             } else if (typeof arguments[0] === 'string') {
30162               var str = arguments[0];
30163               DD.call(this, DD.parse(str));
30164             }
30165           } else if (arguments.length === 2) {
30166             var hi = arguments[0];
30167             var lo = arguments[1];
30168             this.init(hi, lo);
30169           }
30170         };
30171
30172         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 } };
30173         DD.prototype.le = function le (y) {
30174           return (this._hi < y._hi || this._hi === y._hi) && this._lo <= y._lo
30175         };
30176         DD.prototype.extractSignificantDigits = function extractSignificantDigits (insertDecimalPoint, magnitude) {
30177           var y = this.abs();
30178           var mag = DD.magnitude(y._hi);
30179           var scale = DD.TEN.pow(mag);
30180           y = y.divide(scale);
30181           if (y.gt(DD.TEN)) {
30182             y = y.divide(DD.TEN);
30183             mag += 1;
30184           } else if (y.lt(DD.ONE)) {
30185             y = y.multiply(DD.TEN);
30186             mag -= 1;
30187           }
30188           var decimalPointPos = mag + 1;
30189           var buf = new StringBuffer();
30190           var numDigits = DD.MAX_PRINT_DIGITS - 1;
30191           for (var i = 0; i <= numDigits; i++) {
30192             if (insertDecimalPoint && i === decimalPointPos) {
30193               buf.append('.');
30194             }
30195             var digit = Math.trunc(y._hi);
30196             if (digit < 0) {
30197               break
30198             }
30199             var rebiasBy10 = false;
30200             var digitChar = 0;
30201             if (digit > 9) {
30202               rebiasBy10 = true;
30203               digitChar = '9';
30204             } else {
30205               digitChar = '0' + digit;
30206             }
30207             buf.append(digitChar);
30208             y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);
30209             if (rebiasBy10) { y.selfAdd(DD.TEN); }
30210             var continueExtractingDigits = true;
30211             var remMag = DD.magnitude(y._hi);
30212             if (remMag < 0 && Math.abs(remMag) >= numDigits - i) { continueExtractingDigits = false; }
30213             if (!continueExtractingDigits) { break }
30214           }
30215           magnitude[0] = mag;
30216           return buf.toString()
30217         };
30218         DD.prototype.sqr = function sqr () {
30219           return this.multiply(this)
30220         };
30221         DD.prototype.doubleValue = function doubleValue () {
30222           return this._hi + this._lo
30223         };
30224         DD.prototype.subtract = function subtract () {
30225           if (arguments[0] instanceof DD) {
30226             var y = arguments[0];
30227             return this.add(y.negate())
30228           } else if (typeof arguments[0] === 'number') {
30229             var y$1 = arguments[0];
30230             return this.add(-y$1)
30231           }
30232         };
30233         DD.prototype.equals = function equals () {
30234           if (arguments.length === 1) {
30235             var y = arguments[0];
30236             return this._hi === y._hi && this._lo === y._lo
30237           }
30238         };
30239         DD.prototype.isZero = function isZero () {
30240           return this._hi === 0.0 && this._lo === 0.0
30241         };
30242         DD.prototype.selfSubtract = function selfSubtract () {
30243           if (arguments[0] instanceof DD) {
30244             var y = arguments[0];
30245             if (this.isNaN()) { return this }
30246             return this.selfAdd(-y._hi, -y._lo)
30247           } else if (typeof arguments[0] === 'number') {
30248             var y$1 = arguments[0];
30249             if (this.isNaN()) { return this }
30250             return this.selfAdd(-y$1, 0.0)
30251           }
30252         };
30253         DD.prototype.getSpecialNumberString = function getSpecialNumberString () {
30254           if (this.isZero()) { return '0.0' }
30255           if (this.isNaN()) { return 'NaN ' }
30256           return null
30257         };
30258         DD.prototype.min = function min (x) {
30259           if (this.le(x)) {
30260             return this
30261           } else {
30262             return x
30263           }
30264         };
30265         DD.prototype.selfDivide = function selfDivide () {
30266           if (arguments.length === 1) {
30267             if (arguments[0] instanceof DD) {
30268               var y = arguments[0];
30269               return this.selfDivide(y._hi, y._lo)
30270             } else if (typeof arguments[0] === 'number') {
30271               var y$1 = arguments[0];
30272               return this.selfDivide(y$1, 0.0)
30273             }
30274           } else if (arguments.length === 2) {
30275             var yhi = arguments[0];
30276             var ylo = arguments[1];
30277             var hc = null;
30278             var tc = null;
30279             var hy = null;
30280             var ty = null;
30281             var C = null;
30282             var c = null;
30283             var U = null;
30284             var u = null;
30285             C = this._hi / yhi;
30286             c = DD.SPLIT * C;
30287             hc = c - C;
30288             u = DD.SPLIT * yhi;
30289             hc = c - hc;
30290             tc = C - hc;
30291             hy = u - yhi;
30292             U = C * yhi;
30293             hy = u - hy;
30294             ty = yhi - hy;
30295             u = hc * hy - U + hc * ty + tc * hy + tc * ty;
30296             c = (this._hi - U - u + this._lo - C * ylo) / yhi;
30297             u = C + c;
30298             this._hi = u;
30299             this._lo = C - u + c;
30300             return this
30301           }
30302         };
30303         DD.prototype.dump = function dump () {
30304           return 'DD<' + this._hi + ', ' + this._lo + '>'
30305         };
30306         DD.prototype.divide = function divide () {
30307           if (arguments[0] instanceof DD) {
30308             var y = arguments[0];
30309             var hc = null;
30310             var tc = null;
30311             var hy = null;
30312             var ty = null;
30313             var C = null;
30314             var c = null;
30315             var U = null;
30316             var u = null;
30317             C = this._hi / y._hi;
30318             c = DD.SPLIT * C;
30319             hc = c - C;
30320             u = DD.SPLIT * y._hi;
30321             hc = c - hc;
30322             tc = C - hc;
30323             hy = u - y._hi;
30324             U = C * y._hi;
30325             hy = u - hy;
30326             ty = y._hi - hy;
30327             u = hc * hy - U + hc * ty + tc * hy + tc * ty;
30328             c = (this._hi - U - u + this._lo - C * y._lo) / y._hi;
30329             u = C + c;
30330             var zhi = u;
30331             var zlo = C - u + c;
30332             return new DD(zhi, zlo)
30333           } else if (typeof arguments[0] === 'number') {
30334             var y$1 = arguments[0];
30335             if (Double.isNaN(y$1)) { return DD.createNaN() }
30336             return DD.copy(this).selfDivide(y$1, 0.0)
30337           }
30338         };
30339         DD.prototype.ge = function ge (y) {
30340           return (this._hi > y._hi || this._hi === y._hi) && this._lo >= y._lo
30341         };
30342         DD.prototype.pow = function pow (exp) {
30343           if (exp === 0.0) { return DD.valueOf(1.0) }
30344           var r = new DD(this);
30345           var s = DD.valueOf(1.0);
30346           var n = Math.abs(exp);
30347           if (n > 1) {
30348             while (n > 0) {
30349               if (n % 2 === 1) {
30350                 s.selfMultiply(r);
30351               }
30352               n /= 2;
30353               if (n > 0) { r = r.sqr(); }
30354             }
30355           } else {
30356             s = r;
30357           }
30358           if (exp < 0) { return s.reciprocal() }
30359           return s
30360         };
30361         DD.prototype.ceil = function ceil () {
30362           if (this.isNaN()) { return DD.NaN }
30363           var fhi = Math.ceil(this._hi);
30364           var flo = 0.0;
30365           if (fhi === this._hi) {
30366             flo = Math.ceil(this._lo);
30367           }
30368           return new DD(fhi, flo)
30369         };
30370         DD.prototype.compareTo = function compareTo (o) {
30371           var other = o;
30372           if (this._hi < other._hi) { return -1 }
30373           if (this._hi > other._hi) { return 1 }
30374           if (this._lo < other._lo) { return -1 }
30375           if (this._lo > other._lo) { return 1 }
30376           return 0
30377         };
30378         DD.prototype.rint = function rint () {
30379           if (this.isNaN()) { return this }
30380           var plus5 = this.add(0.5);
30381           return plus5.floor()
30382         };
30383         DD.prototype.setValue = function setValue () {
30384           if (arguments[0] instanceof DD) {
30385             var value = arguments[0];
30386             this.init(value);
30387             return this
30388           } else if (typeof arguments[0] === 'number') {
30389             var value$1 = arguments[0];
30390             this.init(value$1);
30391             return this
30392           }
30393         };
30394         DD.prototype.max = function max (x) {
30395           if (this.ge(x)) {
30396             return this
30397           } else {
30398             return x
30399           }
30400         };
30401         DD.prototype.sqrt = function sqrt () {
30402           if (this.isZero()) { return DD.valueOf(0.0) }
30403           if (this.isNegative()) {
30404             return DD.NaN
30405           }
30406           var x = 1.0 / Math.sqrt(this._hi);
30407           var ax = this._hi * x;
30408           var axdd = DD.valueOf(ax);
30409           var diffSq = this.subtract(axdd.sqr());
30410           var d2 = diffSq._hi * (x * 0.5);
30411           return axdd.add(d2)
30412         };
30413         DD.prototype.selfAdd = function selfAdd () {
30414           if (arguments.length === 1) {
30415             if (arguments[0] instanceof DD) {
30416               var y = arguments[0];
30417               return this.selfAdd(y._hi, y._lo)
30418             } else if (typeof arguments[0] === 'number') {
30419               var y$1 = arguments[0];
30420               var H = null;
30421               var h = null;
30422               var S = null;
30423               var s = null;
30424               var e = null;
30425               var f = null;
30426               S = this._hi + y$1;
30427               e = S - this._hi;
30428               s = S - e;
30429               s = y$1 - e + (this._hi - s);
30430               f = s + this._lo;
30431               H = S + f;
30432               h = f + (S - H);
30433               this._hi = H + h;
30434               this._lo = h + (H - this._hi);
30435               return this
30436             }
30437           } else if (arguments.length === 2) {
30438             var yhi = arguments[0];
30439             var ylo = arguments[1];
30440             var H$1 = null;
30441             var h$1 = null;
30442             var T = null;
30443             var t = null;
30444             var S$1 = null;
30445             var s$1 = null;
30446             var e$1 = null;
30447             var f$1 = null;
30448             S$1 = this._hi + yhi;
30449             T = this._lo + ylo;
30450             e$1 = S$1 - this._hi;
30451             f$1 = T - this._lo;
30452             s$1 = S$1 - e$1;
30453             t = T - f$1;
30454             s$1 = yhi - e$1 + (this._hi - s$1);
30455             t = ylo - f$1 + (this._lo - t);
30456             e$1 = s$1 + T;
30457             H$1 = S$1 + e$1;
30458             h$1 = e$1 + (S$1 - H$1);
30459             e$1 = t + h$1;
30460             var zhi = H$1 + e$1;
30461             var zlo = e$1 + (H$1 - zhi);
30462             this._hi = zhi;
30463             this._lo = zlo;
30464             return this
30465           }
30466         };
30467         DD.prototype.selfMultiply = function selfMultiply () {
30468           if (arguments.length === 1) {
30469             if (arguments[0] instanceof DD) {
30470               var y = arguments[0];
30471               return this.selfMultiply(y._hi, y._lo)
30472             } else if (typeof arguments[0] === 'number') {
30473               var y$1 = arguments[0];
30474               return this.selfMultiply(y$1, 0.0)
30475             }
30476           } else if (arguments.length === 2) {
30477             var yhi = arguments[0];
30478             var ylo = arguments[1];
30479             var hx = null;
30480             var tx = null;
30481             var hy = null;
30482             var ty = null;
30483             var C = null;
30484             var c = null;
30485             C = DD.SPLIT * this._hi;
30486             hx = C - this._hi;
30487             c = DD.SPLIT * yhi;
30488             hx = C - hx;
30489             tx = this._hi - hx;
30490             hy = c - yhi;
30491             C = this._hi * yhi;
30492             hy = c - hy;
30493             ty = yhi - hy;
30494             c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);
30495             var zhi = C + c;
30496             hx = C - zhi;
30497             var zlo = c + hx;
30498             this._hi = zhi;
30499             this._lo = zlo;
30500             return this
30501           }
30502         };
30503         DD.prototype.selfSqr = function selfSqr () {
30504           return this.selfMultiply(this)
30505         };
30506         DD.prototype.floor = function floor () {
30507           if (this.isNaN()) { return DD.NaN }
30508           var fhi = Math.floor(this._hi);
30509           var flo = 0.0;
30510           if (fhi === this._hi) {
30511             flo = Math.floor(this._lo);
30512           }
30513           return new DD(fhi, flo)
30514         };
30515         DD.prototype.negate = function negate () {
30516           if (this.isNaN()) { return this }
30517           return new DD(-this._hi, -this._lo)
30518         };
30519         DD.prototype.clone = function clone () {
30520           // try {
30521           // return null
30522           // } catch (ex) {
30523           // if (ex instanceof CloneNotSupportedException) {
30524           //   return null
30525           // } else throw ex
30526           // } finally {}
30527         };
30528         DD.prototype.multiply = function multiply () {
30529           if (arguments[0] instanceof DD) {
30530             var y = arguments[0];
30531             if (y.isNaN()) { return DD.createNaN() }
30532             return DD.copy(this).selfMultiply(y)
30533           } else if (typeof arguments[0] === 'number') {
30534             var y$1 = arguments[0];
30535             if (Double.isNaN(y$1)) { return DD.createNaN() }
30536             return DD.copy(this).selfMultiply(y$1, 0.0)
30537           }
30538         };
30539         DD.prototype.isNaN = function isNaN () {
30540           return Double.isNaN(this._hi)
30541         };
30542         DD.prototype.intValue = function intValue () {
30543           return Math.trunc(this._hi)
30544         };
30545         DD.prototype.toString = function toString () {
30546           var mag = DD.magnitude(this._hi);
30547           if (mag >= -3 && mag <= 20) { return this.toStandardNotation() }
30548           return this.toSciNotation()
30549         };
30550         DD.prototype.toStandardNotation = function toStandardNotation () {
30551           var specialStr = this.getSpecialNumberString();
30552           if (specialStr !== null) { return specialStr }
30553           var magnitude = new Array(1).fill(null);
30554           var sigDigits = this.extractSignificantDigits(true, magnitude);
30555           var decimalPointPos = magnitude[0] + 1;
30556           var num = sigDigits;
30557           if (sigDigits.charAt(0) === '.') {
30558             num = '0' + sigDigits;
30559           } else if (decimalPointPos < 0) {
30560             num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits;
30561           } else if (sigDigits.indexOf('.') === -1) {
30562             var numZeroes = decimalPointPos - sigDigits.length;
30563             var zeroes = DD.stringOfChar('0', numZeroes);
30564             num = sigDigits + zeroes + '.0';
30565           }
30566           if (this.isNegative()) { return '-' + num }
30567           return num
30568         };
30569         DD.prototype.reciprocal = function reciprocal () {
30570           var hc = null;
30571           var tc = null;
30572           var hy = null;
30573           var ty = null;
30574           var C = null;
30575           var c = null;
30576           var U = null;
30577           var u = null;
30578           C = 1.0 / this._hi;
30579           c = DD.SPLIT * C;
30580           hc = c - C;
30581           u = DD.SPLIT * this._hi;
30582           hc = c - hc;
30583           tc = C - hc;
30584           hy = u - this._hi;
30585           U = C * this._hi;
30586           hy = u - hy;
30587           ty = this._hi - hy;
30588           u = hc * hy - U + hc * ty + tc * hy + tc * ty;
30589           c = (1.0 - U - u - C * this._lo) / this._hi;
30590           var zhi = C + c;
30591           var zlo = C - zhi + c;
30592           return new DD(zhi, zlo)
30593         };
30594         DD.prototype.toSciNotation = function toSciNotation () {
30595           if (this.isZero()) { return DD.SCI_NOT_ZERO }
30596           var specialStr = this.getSpecialNumberString();
30597           if (specialStr !== null) { return specialStr }
30598           var magnitude = new Array(1).fill(null);
30599           var digits = this.extractSignificantDigits(false, magnitude);
30600           var expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];
30601           if (digits.charAt(0) === '0') {
30602             throw new Error('Found leading zero: ' + digits)
30603           }
30604           var trailingDigits = '';
30605           if (digits.length > 1) { trailingDigits = digits.substring(1); }
30606           var digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits;
30607           if (this.isNegative()) { return '-' + digitsWithDecimal + expStr }
30608           return digitsWithDecimal + expStr
30609         };
30610         DD.prototype.abs = function abs () {
30611           if (this.isNaN()) { return DD.NaN }
30612           if (this.isNegative()) { return this.negate() }
30613           return new DD(this)
30614         };
30615         DD.prototype.isPositive = function isPositive () {
30616           return (this._hi > 0.0 || this._hi === 0.0) && this._lo > 0.0
30617         };
30618         DD.prototype.lt = function lt (y) {
30619           return (this._hi < y._hi || this._hi === y._hi) && this._lo < y._lo
30620         };
30621         DD.prototype.add = function add () {
30622           if (arguments[0] instanceof DD) {
30623             var y = arguments[0];
30624             return DD.copy(this).selfAdd(y)
30625           } else if (typeof arguments[0] === 'number') {
30626             var y$1 = arguments[0];
30627             return DD.copy(this).selfAdd(y$1)
30628           }
30629         };
30630         DD.prototype.init = function init () {
30631           if (arguments.length === 1) {
30632             if (typeof arguments[0] === 'number') {
30633               var x = arguments[0];
30634               this._hi = x;
30635               this._lo = 0.0;
30636             } else if (arguments[0] instanceof DD) {
30637               var dd = arguments[0];
30638               this._hi = dd._hi;
30639               this._lo = dd._lo;
30640             }
30641           } else if (arguments.length === 2) {
30642             var hi = arguments[0];
30643             var lo = arguments[1];
30644             this._hi = hi;
30645             this._lo = lo;
30646           }
30647         };
30648         DD.prototype.gt = function gt (y) {
30649           return (this._hi > y._hi || this._hi === y._hi) && this._lo > y._lo
30650         };
30651         DD.prototype.isNegative = function isNegative () {
30652           return (this._hi < 0.0 || this._hi === 0.0) && this._lo < 0.0
30653         };
30654         DD.prototype.trunc = function trunc () {
30655           if (this.isNaN()) { return DD.NaN }
30656           if (this.isPositive()) { return this.floor(); } else { return this.ceil() }
30657         };
30658         DD.prototype.signum = function signum () {
30659           if (this._hi > 0) { return 1 }
30660           if (this._hi < 0) { return -1 }
30661           if (this._lo > 0) { return 1 }
30662           if (this._lo < 0) { return -1 }
30663           return 0
30664         };
30665         DD.prototype.interfaces_ = function interfaces_ () {
30666           return [Serializable, Comparable, Clonable]
30667         };
30668         DD.prototype.getClass = function getClass () {
30669           return DD
30670         };
30671         DD.sqr = function sqr (x) {
30672           return DD.valueOf(x).selfMultiply(x)
30673         };
30674         DD.valueOf = function valueOf () {
30675           if (typeof arguments[0] === 'string') {
30676             var str = arguments[0];
30677             return DD.parse(str)
30678           } else if (typeof arguments[0] === 'number') {
30679             var x = arguments[0];
30680             return new DD(x)
30681           }
30682         };
30683         DD.sqrt = function sqrt (x) {
30684           return DD.valueOf(x).sqrt()
30685         };
30686         DD.parse = function parse (str) {
30687           var i = 0;
30688           var strlen = str.length;
30689           while (Character.isWhitespace(str.charAt(i))) { i++; }
30690           var isNegative = false;
30691           if (i < strlen) {
30692             var signCh = str.charAt(i);
30693             if (signCh === '-' || signCh === '+') {
30694               i++;
30695               if (signCh === '-') { isNegative = true; }
30696             }
30697           }
30698           var val = new DD();
30699           var numDigits = 0;
30700           var numBeforeDec = 0;
30701           var exp = 0;
30702           while (true) {
30703             if (i >= strlen) { break }
30704             var ch = str.charAt(i);
30705             i++;
30706             if (Character.isDigit(ch)) {
30707               var d = ch - '0';
30708               val.selfMultiply(DD.TEN);
30709               val.selfAdd(d);
30710               numDigits++;
30711               continue
30712             }
30713             if (ch === '.') {
30714               numBeforeDec = numDigits;
30715               continue
30716             }
30717             if (ch === 'e' || ch === 'E') {
30718               var expStr = str.substring(i);
30719               try {
30720                 exp = Integer.parseInt(expStr);
30721               } catch (ex) {
30722                 if (ex instanceof Error) {
30723                   throw new Error('Invalid exponent ' + expStr + ' in string ' + str)
30724                 } else { throw ex }
30725               } finally {}
30726               break
30727             }
30728             throw new Error("Unexpected character '" + ch + "' at position " + i + ' in string ' + str)
30729           }
30730           var val2 = val;
30731           var numDecPlaces = numDigits - numBeforeDec - exp;
30732           if (numDecPlaces === 0) {
30733             val2 = val;
30734           } else if (numDecPlaces > 0) {
30735             var scale = DD.TEN.pow(numDecPlaces);
30736             val2 = val.divide(scale);
30737           } else if (numDecPlaces < 0) {
30738             var scale$1 = DD.TEN.pow(-numDecPlaces);
30739             val2 = val.multiply(scale$1);
30740           }
30741           if (isNegative) {
30742             return val2.negate()
30743           }
30744           return val2
30745         };
30746         DD.createNaN = function createNaN () {
30747           return new DD(Double.NaN, Double.NaN)
30748         };
30749         DD.copy = function copy (dd) {
30750           return new DD(dd)
30751         };
30752         DD.magnitude = function magnitude (x) {
30753           var xAbs = Math.abs(x);
30754           var xLog10 = Math.log(xAbs) / Math.log(10);
30755           var xMag = Math.trunc(Math.floor(xLog10));
30756           var xApprox = Math.pow(10, xMag);
30757           if (xApprox * 10 <= xAbs) { xMag += 1; }
30758           return xMag
30759         };
30760         DD.stringOfChar = function stringOfChar (ch, len) {
30761           var buf = new StringBuffer();
30762           for (var i = 0; i < len; i++) {
30763             buf.append(ch);
30764           }
30765           return buf.toString()
30766         };
30767         staticAccessors$7.PI.get = function () { return new DD(3.141592653589793116e+00, 1.224646799147353207e-16) };
30768         staticAccessors$7.TWO_PI.get = function () { return new DD(6.283185307179586232e+00, 2.449293598294706414e-16) };
30769         staticAccessors$7.PI_2.get = function () { return new DD(1.570796326794896558e+00, 6.123233995736766036e-17) };
30770         staticAccessors$7.E.get = function () { return new DD(2.718281828459045091e+00, 1.445646891729250158e-16) };
30771         staticAccessors$7.NaN.get = function () { return new DD(Double.NaN, Double.NaN) };
30772         staticAccessors$7.EPS.get = function () { return 1.23259516440783e-32 };
30773         staticAccessors$7.SPLIT.get = function () { return 134217729.0 };
30774         staticAccessors$7.MAX_PRINT_DIGITS.get = function () { return 32 };
30775         staticAccessors$7.TEN.get = function () { return DD.valueOf(10.0) };
30776         staticAccessors$7.ONE.get = function () { return DD.valueOf(1.0) };
30777         staticAccessors$7.SCI_NOT_EXPONENT_CHAR.get = function () { return 'E' };
30778         staticAccessors$7.SCI_NOT_ZERO.get = function () { return '0.0E0' };
30779
30780         Object.defineProperties( DD, staticAccessors$7 );
30781
30782         var CGAlgorithmsDD = function CGAlgorithmsDD () {};
30783
30784         var staticAccessors$6 = { DP_SAFE_EPSILON: { configurable: true } };
30785
30786         CGAlgorithmsDD.prototype.interfaces_ = function interfaces_ () {
30787           return []
30788         };
30789         CGAlgorithmsDD.prototype.getClass = function getClass () {
30790           return CGAlgorithmsDD
30791         };
30792         CGAlgorithmsDD.orientationIndex = function orientationIndex (p1, p2, q) {
30793           var index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);
30794           if (index <= 1) { return index }
30795           var dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);
30796           var dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);
30797           var dx2 = DD.valueOf(q.x).selfAdd(-p2.x);
30798           var dy2 = DD.valueOf(q.y).selfAdd(-p2.y);
30799           return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()
30800         };
30801         CGAlgorithmsDD.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
30802           var det = x1.multiply(y2).selfSubtract(y1.multiply(x2));
30803           return det.signum()
30804         };
30805         CGAlgorithmsDD.intersection = function intersection (p1, p2, q1, q2) {
30806           var denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));
30807           var denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));
30808           var denom = denom1.subtract(denom2);
30809           var numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
30810           var numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
30811           var numx = numx1.subtract(numx2);
30812           var fracP = numx.selfDivide(denom).doubleValue();
30813           var x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();
30814           var numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));
30815           var numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));
30816           var numy = numy1.subtract(numy2);
30817           var fracQ = numy.selfDivide(denom).doubleValue();
30818           var y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();
30819           return new Coordinate(x, y)
30820         };
30821         CGAlgorithmsDD.orientationIndexFilter = function orientationIndexFilter (pa, pb, pc) {
30822           var detsum = null;
30823           var detleft = (pa.x - pc.x) * (pb.y - pc.y);
30824           var detright = (pa.y - pc.y) * (pb.x - pc.x);
30825           var det = detleft - detright;
30826           if (detleft > 0.0) {
30827             if (detright <= 0.0) {
30828               return CGAlgorithmsDD.signum(det)
30829             } else {
30830               detsum = detleft + detright;
30831             }
30832           } else if (detleft < 0.0) {
30833             if (detright >= 0.0) {
30834               return CGAlgorithmsDD.signum(det)
30835             } else {
30836               detsum = -detleft - detright;
30837             }
30838           } else {
30839             return CGAlgorithmsDD.signum(det)
30840           }
30841           var errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;
30842           if (det >= errbound || -det >= errbound) {
30843             return CGAlgorithmsDD.signum(det)
30844           }
30845           return 2
30846         };
30847         CGAlgorithmsDD.signum = function signum (x) {
30848           if (x > 0) { return 1 }
30849           if (x < 0) { return -1 }
30850           return 0
30851         };
30852         staticAccessors$6.DP_SAFE_EPSILON.get = function () { return 1e-15 };
30853
30854         Object.defineProperties( CGAlgorithmsDD, staticAccessors$6 );
30855
30856         var CoordinateSequence = function CoordinateSequence () {};
30857
30858         var staticAccessors$8 = { X: { configurable: true },Y: { configurable: true },Z: { configurable: true },M: { configurable: true } };
30859
30860         staticAccessors$8.X.get = function () { return 0 };
30861         staticAccessors$8.Y.get = function () { return 1 };
30862         staticAccessors$8.Z.get = function () { return 2 };
30863         staticAccessors$8.M.get = function () { return 3 };
30864         CoordinateSequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {};
30865         CoordinateSequence.prototype.size = function size () {};
30866         CoordinateSequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {};
30867         CoordinateSequence.prototype.getCoordinate = function getCoordinate () {};
30868         CoordinateSequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {};
30869         CoordinateSequence.prototype.getDimension = function getDimension () {};
30870         CoordinateSequence.prototype.getX = function getX (index) {};
30871         CoordinateSequence.prototype.clone = function clone () {};
30872         CoordinateSequence.prototype.expandEnvelope = function expandEnvelope (env) {};
30873         CoordinateSequence.prototype.copy = function copy () {};
30874         CoordinateSequence.prototype.getY = function getY (index) {};
30875         CoordinateSequence.prototype.toCoordinateArray = function toCoordinateArray () {};
30876         CoordinateSequence.prototype.interfaces_ = function interfaces_ () {
30877           return [Clonable]
30878         };
30879         CoordinateSequence.prototype.getClass = function getClass () {
30880           return CoordinateSequence
30881         };
30882
30883         Object.defineProperties( CoordinateSequence, staticAccessors$8 );
30884
30885         var Exception = function Exception () {};
30886
30887         var NotRepresentableException = (function (Exception$$1) {
30888           function NotRepresentableException () {
30889             Exception$$1.call(this, 'Projective point not representable on the Cartesian plane.');
30890           }
30891
30892           if ( Exception$$1 ) { NotRepresentableException.__proto__ = Exception$$1; }
30893           NotRepresentableException.prototype = Object.create( Exception$$1 && Exception$$1.prototype );
30894           NotRepresentableException.prototype.constructor = NotRepresentableException;
30895           NotRepresentableException.prototype.interfaces_ = function interfaces_ () {
30896             return []
30897           };
30898           NotRepresentableException.prototype.getClass = function getClass () {
30899             return NotRepresentableException
30900           };
30901
30902           return NotRepresentableException;
30903         }(Exception));
30904
30905         var System = function System () {};
30906
30907         System.arraycopy = function arraycopy (src, srcPos, dest, destPos, len) {
30908           var c = 0;
30909           for (var i = srcPos; i < srcPos + len; i++) {
30910             dest[destPos + c] = src[i];
30911             c++;
30912           }
30913         };
30914
30915         System.getProperty = function getProperty (name) {
30916           return {
30917             'line.separator': '\n'
30918           }[name]
30919         };
30920
30921         var HCoordinate = function HCoordinate () {
30922           this.x = null;
30923           this.y = null;
30924           this.w = null;
30925           if (arguments.length === 0) {
30926             this.x = 0.0;
30927             this.y = 0.0;
30928             this.w = 1.0;
30929           } else if (arguments.length === 1) {
30930             var p = arguments[0];
30931             this.x = p.x;
30932             this.y = p.y;
30933             this.w = 1.0;
30934           } else if (arguments.length === 2) {
30935             if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
30936               var _x = arguments[0];
30937               var _y = arguments[1];
30938               this.x = _x;
30939               this.y = _y;
30940               this.w = 1.0;
30941             } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {
30942               var p1 = arguments[0];
30943               var p2 = arguments[1];
30944               this.x = p1.y * p2.w - p2.y * p1.w;
30945               this.y = p2.x * p1.w - p1.x * p2.w;
30946               this.w = p1.x * p2.y - p2.x * p1.y;
30947             } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
30948               var p1$1 = arguments[0];
30949               var p2$1 = arguments[1];
30950               this.x = p1$1.y - p2$1.y;
30951               this.y = p2$1.x - p1$1.x;
30952               this.w = p1$1.x * p2$1.y - p2$1.x * p1$1.y;
30953             }
30954           } else if (arguments.length === 3) {
30955             var _x$1 = arguments[0];
30956             var _y$1 = arguments[1];
30957             var _w = arguments[2];
30958             this.x = _x$1;
30959             this.y = _y$1;
30960             this.w = _w;
30961           } else if (arguments.length === 4) {
30962             var p1$2 = arguments[0];
30963             var p2$2 = arguments[1];
30964             var q1 = arguments[2];
30965             var q2 = arguments[3];
30966             var px = p1$2.y - p2$2.y;
30967             var py = p2$2.x - p1$2.x;
30968             var pw = p1$2.x * p2$2.y - p2$2.x * p1$2.y;
30969             var qx = q1.y - q2.y;
30970             var qy = q2.x - q1.x;
30971             var qw = q1.x * q2.y - q2.x * q1.y;
30972             this.x = py * qw - qy * pw;
30973             this.y = qx * pw - px * qw;
30974             this.w = px * qy - qx * py;
30975           }
30976         };
30977         HCoordinate.prototype.getY = function getY () {
30978           var a = this.y / this.w;
30979           if (Double.isNaN(a) || Double.isInfinite(a)) {
30980             throw new NotRepresentableException()
30981           }
30982           return a
30983         };
30984         HCoordinate.prototype.getX = function getX () {
30985           var a = this.x / this.w;
30986           if (Double.isNaN(a) || Double.isInfinite(a)) {
30987             throw new NotRepresentableException()
30988           }
30989           return a
30990         };
30991         HCoordinate.prototype.getCoordinate = function getCoordinate () {
30992           var p = new Coordinate();
30993           p.x = this.getX();
30994           p.y = this.getY();
30995           return p
30996         };
30997         HCoordinate.prototype.interfaces_ = function interfaces_ () {
30998           return []
30999         };
31000         HCoordinate.prototype.getClass = function getClass () {
31001           return HCoordinate
31002         };
31003         HCoordinate.intersection = function intersection (p1, p2, q1, q2) {
31004           var px = p1.y - p2.y;
31005           var py = p2.x - p1.x;
31006           var pw = p1.x * p2.y - p2.x * p1.y;
31007           var qx = q1.y - q2.y;
31008           var qy = q2.x - q1.x;
31009           var qw = q1.x * q2.y - q2.x * q1.y;
31010           var x = py * qw - qy * pw;
31011           var y = qx * pw - px * qw;
31012           var w = px * qy - qx * py;
31013           var xInt = x / w;
31014           var yInt = y / w;
31015           if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {
31016             throw new NotRepresentableException()
31017           }
31018           return new Coordinate(xInt, yInt)
31019         };
31020
31021         var Envelope = function Envelope () {
31022           this._minx = null;
31023           this._maxx = null;
31024           this._miny = null;
31025           this._maxy = null;
31026           if (arguments.length === 0) {
31027             this.init();
31028           } else if (arguments.length === 1) {
31029             if (arguments[0] instanceof Coordinate) {
31030               var p = arguments[0];
31031               this.init(p.x, p.x, p.y, p.y);
31032             } else if (arguments[0] instanceof Envelope) {
31033               var env = arguments[0];
31034               this.init(env);
31035             }
31036           } else if (arguments.length === 2) {
31037             var p1 = arguments[0];
31038             var p2 = arguments[1];
31039             this.init(p1.x, p2.x, p1.y, p2.y);
31040           } else if (arguments.length === 4) {
31041             var x1 = arguments[0];
31042             var x2 = arguments[1];
31043             var y1 = arguments[2];
31044             var y2 = arguments[3];
31045             this.init(x1, x2, y1, y2);
31046           }
31047         };
31048
31049         var staticAccessors$9 = { serialVersionUID: { configurable: true } };
31050         Envelope.prototype.getArea = function getArea () {
31051           return this.getWidth() * this.getHeight()
31052         };
31053         Envelope.prototype.equals = function equals (other) {
31054           if (!(other instanceof Envelope)) {
31055             return false
31056           }
31057           var otherEnvelope = other;
31058           if (this.isNull()) {
31059             return otherEnvelope.isNull()
31060           }
31061           return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()
31062         };
31063         Envelope.prototype.intersection = function intersection (env) {
31064           if (this.isNull() || env.isNull() || !this.intersects(env)) { return new Envelope() }
31065           var intMinX = this._minx > env._minx ? this._minx : env._minx;
31066           var intMinY = this._miny > env._miny ? this._miny : env._miny;
31067           var intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;
31068           var intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;
31069           return new Envelope(intMinX, intMaxX, intMinY, intMaxY)
31070         };
31071         Envelope.prototype.isNull = function isNull () {
31072           return this._maxx < this._minx
31073         };
31074         Envelope.prototype.getMaxX = function getMaxX () {
31075           return this._maxx
31076         };
31077         Envelope.prototype.covers = function covers () {
31078           if (arguments.length === 1) {
31079             if (arguments[0] instanceof Coordinate) {
31080               var p = arguments[0];
31081               return this.covers(p.x, p.y)
31082             } else if (arguments[0] instanceof Envelope) {
31083               var other = arguments[0];
31084               if (this.isNull() || other.isNull()) {
31085                 return false
31086               }
31087               return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy
31088             }
31089           } else if (arguments.length === 2) {
31090             var x = arguments[0];
31091             var y = arguments[1];
31092             if (this.isNull()) { return false }
31093             return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy
31094           }
31095         };
31096         Envelope.prototype.intersects = function intersects () {
31097           if (arguments.length === 1) {
31098             if (arguments[0] instanceof Envelope) {
31099               var other = arguments[0];
31100               if (this.isNull() || other.isNull()) {
31101                 return false
31102               }
31103               return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)
31104             } else if (arguments[0] instanceof Coordinate) {
31105               var p = arguments[0];
31106               return this.intersects(p.x, p.y)
31107             }
31108           } else if (arguments.length === 2) {
31109             var x = arguments[0];
31110             var y = arguments[1];
31111             if (this.isNull()) { return false }
31112             return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)
31113           }
31114         };
31115         Envelope.prototype.getMinY = function getMinY () {
31116           return this._miny
31117         };
31118         Envelope.prototype.getMinX = function getMinX () {
31119           return this._minx
31120         };
31121         Envelope.prototype.expandToInclude = function expandToInclude () {
31122           if (arguments.length === 1) {
31123             if (arguments[0] instanceof Coordinate) {
31124               var p = arguments[0];
31125               this.expandToInclude(p.x, p.y);
31126             } else if (arguments[0] instanceof Envelope) {
31127               var other = arguments[0];
31128               if (other.isNull()) {
31129                 return null
31130               }
31131               if (this.isNull()) {
31132                 this._minx = other.getMinX();
31133                 this._maxx = other.getMaxX();
31134                 this._miny = other.getMinY();
31135                 this._maxy = other.getMaxY();
31136               } else {
31137                 if (other._minx < this._minx) {
31138                   this._minx = other._minx;
31139                 }
31140                 if (other._maxx > this._maxx) {
31141                   this._maxx = other._maxx;
31142                 }
31143                 if (other._miny < this._miny) {
31144                   this._miny = other._miny;
31145                 }
31146                 if (other._maxy > this._maxy) {
31147                   this._maxy = other._maxy;
31148                 }
31149               }
31150             }
31151           } else if (arguments.length === 2) {
31152             var x = arguments[0];
31153             var y = arguments[1];
31154             if (this.isNull()) {
31155               this._minx = x;
31156               this._maxx = x;
31157               this._miny = y;
31158               this._maxy = y;
31159             } else {
31160               if (x < this._minx) {
31161                 this._minx = x;
31162               }
31163               if (x > this._maxx) {
31164                 this._maxx = x;
31165               }
31166               if (y < this._miny) {
31167                 this._miny = y;
31168               }
31169               if (y > this._maxy) {
31170                 this._maxy = y;
31171               }
31172             }
31173           }
31174         };
31175         Envelope.prototype.minExtent = function minExtent () {
31176           if (this.isNull()) { return 0.0 }
31177           var w = this.getWidth();
31178           var h = this.getHeight();
31179           if (w < h) { return w }
31180           return h
31181         };
31182         Envelope.prototype.getWidth = function getWidth () {
31183           if (this.isNull()) {
31184             return 0
31185           }
31186           return this._maxx - this._minx
31187         };
31188         Envelope.prototype.compareTo = function compareTo (o) {
31189           var env = o;
31190           if (this.isNull()) {
31191             if (env.isNull()) { return 0 }
31192             return -1
31193           } else {
31194             if (env.isNull()) { return 1 }
31195           }
31196           if (this._minx < env._minx) { return -1 }
31197           if (this._minx > env._minx) { return 1 }
31198           if (this._miny < env._miny) { return -1 }
31199           if (this._miny > env._miny) { return 1 }
31200           if (this._maxx < env._maxx) { return -1 }
31201           if (this._maxx > env._maxx) { return 1 }
31202           if (this._maxy < env._maxy) { return -1 }
31203           if (this._maxy > env._maxy) { return 1 }
31204           return 0
31205         };
31206         Envelope.prototype.translate = function translate (transX, transY) {
31207           if (this.isNull()) {
31208             return null
31209           }
31210           this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);
31211         };
31212         Envelope.prototype.toString = function toString () {
31213           return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'
31214         };
31215         Envelope.prototype.setToNull = function setToNull () {
31216           this._minx = 0;
31217           this._maxx = -1;
31218           this._miny = 0;
31219           this._maxy = -1;
31220         };
31221         Envelope.prototype.getHeight = function getHeight () {
31222           if (this.isNull()) {
31223             return 0
31224           }
31225           return this._maxy - this._miny
31226         };
31227         Envelope.prototype.maxExtent = function maxExtent () {
31228           if (this.isNull()) { return 0.0 }
31229           var w = this.getWidth();
31230           var h = this.getHeight();
31231           if (w > h) { return w }
31232           return h
31233         };
31234         Envelope.prototype.expandBy = function expandBy () {
31235           if (arguments.length === 1) {
31236             var distance = arguments[0];
31237             this.expandBy(distance, distance);
31238           } else if (arguments.length === 2) {
31239             var deltaX = arguments[0];
31240             var deltaY = arguments[1];
31241             if (this.isNull()) { return null }
31242             this._minx -= deltaX;
31243             this._maxx += deltaX;
31244             this._miny -= deltaY;
31245             this._maxy += deltaY;
31246             if (this._minx > this._maxx || this._miny > this._maxy) { this.setToNull(); }
31247           }
31248         };
31249         Envelope.prototype.contains = function contains () {
31250           if (arguments.length === 1) {
31251             if (arguments[0] instanceof Envelope) {
31252               var other = arguments[0];
31253               return this.covers(other)
31254             } else if (arguments[0] instanceof Coordinate) {
31255               var p = arguments[0];
31256               return this.covers(p)
31257             }
31258           } else if (arguments.length === 2) {
31259             var x = arguments[0];
31260             var y = arguments[1];
31261             return this.covers(x, y)
31262           }
31263         };
31264         Envelope.prototype.centre = function centre () {
31265           if (this.isNull()) { return null }
31266           return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)
31267         };
31268         Envelope.prototype.init = function init () {
31269           if (arguments.length === 0) {
31270             this.setToNull();
31271           } else if (arguments.length === 1) {
31272             if (arguments[0] instanceof Coordinate) {
31273               var p = arguments[0];
31274               this.init(p.x, p.x, p.y, p.y);
31275             } else if (arguments[0] instanceof Envelope) {
31276               var env = arguments[0];
31277               this._minx = env._minx;
31278               this._maxx = env._maxx;
31279               this._miny = env._miny;
31280               this._maxy = env._maxy;
31281             }
31282           } else if (arguments.length === 2) {
31283             var p1 = arguments[0];
31284             var p2 = arguments[1];
31285             this.init(p1.x, p2.x, p1.y, p2.y);
31286           } else if (arguments.length === 4) {
31287             var x1 = arguments[0];
31288             var x2 = arguments[1];
31289             var y1 = arguments[2];
31290             var y2 = arguments[3];
31291             if (x1 < x2) {
31292               this._minx = x1;
31293               this._maxx = x2;
31294             } else {
31295               this._minx = x2;
31296               this._maxx = x1;
31297             }
31298             if (y1 < y2) {
31299               this._miny = y1;
31300               this._maxy = y2;
31301             } else {
31302               this._miny = y2;
31303               this._maxy = y1;
31304             }
31305           }
31306         };
31307         Envelope.prototype.getMaxY = function getMaxY () {
31308           return this._maxy
31309         };
31310         Envelope.prototype.distance = function distance (env) {
31311           if (this.intersects(env)) { return 0 }
31312           var dx = 0.0;
31313           if (this._maxx < env._minx) { dx = env._minx - this._maxx; } else if (this._minx > env._maxx) { dx = this._minx - env._maxx; }
31314           var dy = 0.0;
31315           if (this._maxy < env._miny) { dy = env._miny - this._maxy; } else if (this._miny > env._maxy) { dy = this._miny - env._maxy; }
31316           if (dx === 0.0) { return dy }
31317           if (dy === 0.0) { return dx }
31318           return Math.sqrt(dx * dx + dy * dy)
31319         };
31320         Envelope.prototype.hashCode = function hashCode () {
31321           var result = 17;
31322           result = 37 * result + Coordinate.hashCode(this._minx);
31323           result = 37 * result + Coordinate.hashCode(this._maxx);
31324           result = 37 * result + Coordinate.hashCode(this._miny);
31325           result = 37 * result + Coordinate.hashCode(this._maxy);
31326           return result
31327         };
31328         Envelope.prototype.interfaces_ = function interfaces_ () {
31329           return [Comparable, Serializable]
31330         };
31331         Envelope.prototype.getClass = function getClass () {
31332           return Envelope
31333         };
31334         Envelope.intersects = function intersects () {
31335           if (arguments.length === 3) {
31336             var p1 = arguments[0];
31337             var p2 = arguments[1];
31338             var q = arguments[2];
31339             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))) {
31340               return true
31341             }
31342             return false
31343           } else if (arguments.length === 4) {
31344             var p1$1 = arguments[0];
31345             var p2$1 = arguments[1];
31346             var q1 = arguments[2];
31347             var q2 = arguments[3];
31348             var minq = Math.min(q1.x, q2.x);
31349             var maxq = Math.max(q1.x, q2.x);
31350             var minp = Math.min(p1$1.x, p2$1.x);
31351             var maxp = Math.max(p1$1.x, p2$1.x);
31352             if (minp > maxq) { return false }
31353             if (maxp < minq) { return false }
31354             minq = Math.min(q1.y, q2.y);
31355             maxq = Math.max(q1.y, q2.y);
31356             minp = Math.min(p1$1.y, p2$1.y);
31357             maxp = Math.max(p1$1.y, p2$1.y);
31358             if (minp > maxq) { return false }
31359             if (maxp < minq) { return false }
31360             return true
31361           }
31362         };
31363         staticAccessors$9.serialVersionUID.get = function () { return 5873921885273102420 };
31364
31365         Object.defineProperties( Envelope, staticAccessors$9 );
31366
31367         var regExes = {
31368           'typeStr': /^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,
31369           'emptyTypeStr': /^\s*(\w+)\s*EMPTY\s*$/,
31370           'spaces': /\s+/,
31371           'parenComma': /\)\s*,\s*\(/,
31372           'doubleParenComma': /\)\s*\)\s*,\s*\(\s*\(/, // can't use {2} here
31373           'trimParens': /^\s*\(?(.*?)\)?\s*$/
31374         };
31375
31376         /**
31377          * Class for reading and writing Well-Known Text.
31378          *
31379          * NOTE: Adapted from OpenLayers 2.11 implementation.
31380          */
31381
31382         /** Create a new parser for WKT
31383          *
31384          * @param {GeometryFactory} geometryFactory
31385          * @return An instance of WKTParser.
31386          * @constructor
31387          * @private
31388          */
31389         var WKTParser = function WKTParser (geometryFactory) {
31390           this.geometryFactory = geometryFactory || new GeometryFactory();
31391         };
31392         /**
31393          * Deserialize a WKT string and return a geometry. Supports WKT for POINT,
31394          * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,
31395          * and GEOMETRYCOLLECTION.
31396          *
31397          * @param {String} wkt A WKT string.
31398          * @return {Geometry} A geometry instance.
31399          * @private
31400          */
31401         WKTParser.prototype.read = function read (wkt) {
31402           var geometry, type, str;
31403           wkt = wkt.replace(/[\n\r]/g, ' ');
31404           var matches = regExes.typeStr.exec(wkt);
31405           if (wkt.search('EMPTY') !== -1) {
31406             matches = regExes.emptyTypeStr.exec(wkt);
31407             matches[2] = undefined;
31408           }
31409           if (matches) {
31410             type = matches[1].toLowerCase();
31411             str = matches[2];
31412             if (parse$1[type]) {
31413               geometry = parse$1[type].apply(this, [str]);
31414             }
31415           }
31416
31417           if (geometry === undefined) { throw new Error('Could not parse WKT ' + wkt) }
31418
31419           return geometry
31420         };
31421
31422         /**
31423          * Serialize a geometry into a WKT string.
31424          *
31425          * @param {Geometry} geometry A feature or array of features.
31426          * @return {String} The WKT string representation of the input geometries.
31427          * @private
31428          */
31429         WKTParser.prototype.write = function write (geometry) {
31430           return this.extractGeometry(geometry)
31431         };
31432
31433         /**
31434          * Entry point to construct the WKT for a single Geometry object.
31435          *
31436          * @param {Geometry} geometry
31437          * @return {String} A WKT string of representing the geometry.
31438          * @private
31439          */
31440         WKTParser.prototype.extractGeometry = function extractGeometry (geometry) {
31441           var type = geometry.getGeometryType().toLowerCase();
31442           if (!extract$1[type]) {
31443             return null
31444           }
31445           var wktType = type.toUpperCase();
31446           var data;
31447           if (geometry.isEmpty()) {
31448             data = wktType + ' EMPTY';
31449           } else {
31450             data = wktType + '(' + extract$1[type].apply(this, [geometry]) + ')';
31451           }
31452           return data
31453         };
31454
31455         /**
31456          * Object with properties corresponding to the geometry types. Property values
31457          * are functions that do the actual data extraction.
31458          * @private
31459          */
31460         var extract$1 = {
31461           coordinate: function coordinate (coordinate$1) {
31462             return coordinate$1.x + ' ' + coordinate$1.y
31463           },
31464
31465           /**
31466            * Return a space delimited string of point coordinates.
31467            *
31468            * @param {Point}
31469            *          point
31470            * @return {String} A string of coordinates representing the point.
31471            */
31472           point: function point (point$1) {
31473             return extract$1.coordinate.call(this, point$1._coordinates._coordinates[0])
31474           },
31475
31476           /**
31477            * Return a comma delimited string of point coordinates from a multipoint.
31478            *
31479            * @param {MultiPoint}
31480            *          multipoint
31481            * @return {String} A string of point coordinate strings representing the
31482            *         multipoint.
31483            */
31484           multipoint: function multipoint (multipoint$1) {
31485             var this$1 = this;
31486
31487             var array = [];
31488             for (var i = 0, len = multipoint$1._geometries.length; i < len; ++i) {
31489               array.push('(' + extract$1.point.apply(this$1, [multipoint$1._geometries[i]]) + ')');
31490             }
31491             return array.join(',')
31492           },
31493
31494           /**
31495            * Return a comma delimited string of point coordinates from a line.
31496            *
31497            * @param {LineString} linestring
31498            * @return {String} A string of point coordinate strings representing the linestring.
31499            */
31500           linestring: function linestring (linestring$1) {
31501             var this$1 = this;
31502
31503             var array = [];
31504             for (var i = 0, len = linestring$1._points._coordinates.length; i < len; ++i) {
31505               array.push(extract$1.coordinate.apply(this$1, [linestring$1._points._coordinates[i]]));
31506             }
31507             return array.join(',')
31508           },
31509
31510           linearring: function linearring (linearring$1) {
31511             var this$1 = this;
31512
31513             var array = [];
31514             for (var i = 0, len = linearring$1._points._coordinates.length; i < len; ++i) {
31515               array.push(extract$1.coordinate.apply(this$1, [linearring$1._points._coordinates[i]]));
31516             }
31517             return array.join(',')
31518           },
31519
31520           /**
31521            * Return a comma delimited string of linestring strings from a
31522            * multilinestring.
31523            *
31524            * @param {MultiLineString} multilinestring
31525            * @return {String} A string of of linestring strings representing the multilinestring.
31526            */
31527           multilinestring: function multilinestring (multilinestring$1) {
31528             var this$1 = this;
31529
31530             var array = [];
31531             for (var i = 0, len = multilinestring$1._geometries.length; i < len; ++i) {
31532               array.push('(' +
31533                 extract$1.linestring.apply(this$1, [multilinestring$1._geometries[i]]) +
31534                 ')');
31535             }
31536             return array.join(',')
31537           },
31538
31539           /**
31540            * Return a comma delimited string of linear ring arrays from a polygon.
31541            *
31542            * @param {Polygon} polygon
31543            * @return {String} An array of linear ring arrays representing the polygon.
31544            */
31545           polygon: function polygon (polygon$1) {
31546             var this$1 = this;
31547
31548             var array = [];
31549             array.push('(' + extract$1.linestring.apply(this, [polygon$1._shell]) + ')');
31550             for (var i = 0, len = polygon$1._holes.length; i < len; ++i) {
31551               array.push('(' + extract$1.linestring.apply(this$1, [polygon$1._holes[i]]) + ')');
31552             }
31553             return array.join(',')
31554           },
31555
31556           /**
31557            * Return an array of polygon arrays from a multipolygon.
31558            *
31559            * @param {MultiPolygon} multipolygon
31560            * @return {String} An array of polygon arrays representing the multipolygon.
31561            */
31562           multipolygon: function multipolygon (multipolygon$1) {
31563             var this$1 = this;
31564
31565             var array = [];
31566             for (var i = 0, len = multipolygon$1._geometries.length; i < len; ++i) {
31567               array.push('(' + extract$1.polygon.apply(this$1, [multipolygon$1._geometries[i]]) + ')');
31568             }
31569             return array.join(',')
31570           },
31571
31572           /**
31573            * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an
31574            * geometrycollection.
31575            *
31576            * @param {GeometryCollection} collection
31577            * @return {String} internal WKT representation of the collection.
31578            */
31579           geometrycollection: function geometrycollection (collection) {
31580             var this$1 = this;
31581
31582             var array = [];
31583             for (var i = 0, len = collection._geometries.length; i < len; ++i) {
31584               array.push(this$1.extractGeometry(collection._geometries[i]));
31585             }
31586             return array.join(',')
31587           }
31588         };
31589
31590         /**
31591          * Object with properties corresponding to the geometry types. Property values
31592          * are functions that do the actual parsing.
31593          * @private
31594          */
31595         var parse$1 = {
31596           /**
31597            * Return point geometry given a point WKT fragment.
31598            *
31599            * @param {String} str A WKT fragment representing the point.
31600            * @return {Point} A point geometry.
31601            * @private
31602            */
31603           point: function point (str) {
31604             if (str === undefined) {
31605               return this.geometryFactory.createPoint()
31606             }
31607
31608             var coords = str.trim().split(regExes.spaces);
31609             return this.geometryFactory.createPoint(new Coordinate(Number.parseFloat(coords[0]),
31610               Number.parseFloat(coords[1])))
31611           },
31612
31613           /**
31614            * Return a multipoint geometry given a multipoint WKT fragment.
31615            *
31616            * @param {String} str A WKT fragment representing the multipoint.
31617            * @return {Point} A multipoint feature.
31618            * @private
31619            */
31620           multipoint: function multipoint (str) {
31621             var this$1 = this;
31622
31623             if (str === undefined) {
31624               return this.geometryFactory.createMultiPoint()
31625             }
31626
31627             var point;
31628             var points = str.trim().split(',');
31629             var components = [];
31630             for (var i = 0, len = points.length; i < len; ++i) {
31631               point = points[i].replace(regExes.trimParens, '$1');
31632               components.push(parse$1.point.apply(this$1, [point]));
31633             }
31634             return this.geometryFactory.createMultiPoint(components)
31635           },
31636
31637           /**
31638            * Return a linestring geometry given a linestring WKT fragment.
31639            *
31640            * @param {String} str A WKT fragment representing the linestring.
31641            * @return {LineString} A linestring geometry.
31642            * @private
31643            */
31644           linestring: function linestring (str) {
31645             if (str === undefined) {
31646               return this.geometryFactory.createLineString()
31647             }
31648
31649             var points = str.trim().split(',');
31650             var components = [];
31651             var coords;
31652             for (var i = 0, len = points.length; i < len; ++i) {
31653               coords = points[i].trim().split(regExes.spaces);
31654               components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
31655             }
31656             return this.geometryFactory.createLineString(components)
31657           },
31658
31659           /**
31660            * Return a linearring geometry given a linearring WKT fragment.
31661            *
31662            * @param {String} str A WKT fragment representing the linearring.
31663            * @return {LinearRing} A linearring geometry.
31664            * @private
31665            */
31666           linearring: function linearring (str) {
31667             if (str === undefined) {
31668               return this.geometryFactory.createLinearRing()
31669             }
31670
31671             var points = str.trim().split(',');
31672             var components = [];
31673             var coords;
31674             for (var i = 0, len = points.length; i < len; ++i) {
31675               coords = points[i].trim().split(regExes.spaces);
31676               components.push(new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1])));
31677             }
31678             return this.geometryFactory.createLinearRing(components)
31679           },
31680
31681           /**
31682            * Return a multilinestring geometry given a multilinestring WKT fragment.
31683            *
31684            * @param {String} str A WKT fragment representing the multilinestring.
31685            * @return {MultiLineString} A multilinestring geometry.
31686            * @private
31687            */
31688           multilinestring: function multilinestring (str) {
31689             var this$1 = this;
31690
31691             if (str === undefined) {
31692               return this.geometryFactory.createMultiLineString()
31693             }
31694
31695             var line;
31696             var lines = str.trim().split(regExes.parenComma);
31697             var components = [];
31698             for (var i = 0, len = lines.length; i < len; ++i) {
31699               line = lines[i].replace(regExes.trimParens, '$1');
31700               components.push(parse$1.linestring.apply(this$1, [line]));
31701             }
31702             return this.geometryFactory.createMultiLineString(components)
31703           },
31704
31705           /**
31706            * Return a polygon geometry given a polygon WKT fragment.
31707            *
31708            * @param {String} str A WKT fragment representing the polygon.
31709            * @return {Polygon} A polygon geometry.
31710            * @private
31711            */
31712           polygon: function polygon (str) {
31713             var this$1 = this;
31714
31715             if (str === undefined) {
31716               return this.geometryFactory.createPolygon()
31717             }
31718
31719             var ring, linestring, linearring;
31720             var rings = str.trim().split(regExes.parenComma);
31721             var shell;
31722             var holes = [];
31723             for (var i = 0, len = rings.length; i < len; ++i) {
31724               ring = rings[i].replace(regExes.trimParens, '$1');
31725               linestring = parse$1.linestring.apply(this$1, [ring]);
31726               linearring = this$1.geometryFactory.createLinearRing(linestring._points);
31727               if (i === 0) {
31728                 shell = linearring;
31729               } else {
31730                 holes.push(linearring);
31731               }
31732             }
31733             return this.geometryFactory.createPolygon(shell, holes)
31734           },
31735
31736           /**
31737            * Return a multipolygon geometry given a multipolygon WKT fragment.
31738            *
31739            * @param {String} str A WKT fragment representing the multipolygon.
31740            * @return {MultiPolygon} A multipolygon geometry.
31741            * @private
31742            */
31743           multipolygon: function multipolygon (str) {
31744             var this$1 = this;
31745
31746             if (str === undefined) {
31747               return this.geometryFactory.createMultiPolygon()
31748             }
31749
31750             var polygon;
31751             var polygons = str.trim().split(regExes.doubleParenComma);
31752             var components = [];
31753             for (var i = 0, len = polygons.length; i < len; ++i) {
31754               polygon = polygons[i].replace(regExes.trimParens, '$1');
31755               components.push(parse$1.polygon.apply(this$1, [polygon]));
31756             }
31757             return this.geometryFactory.createMultiPolygon(components)
31758           },
31759
31760           /**
31761            * Return a geometrycollection given a geometrycollection WKT fragment.
31762            *
31763            * @param {String} str A WKT fragment representing the geometrycollection.
31764            * @return {GeometryCollection}
31765            * @private
31766            */
31767           geometrycollection: function geometrycollection (str) {
31768             var this$1 = this;
31769
31770             if (str === undefined) {
31771               return this.geometryFactory.createGeometryCollection()
31772             }
31773
31774             // separate components of the collection with |
31775             str = str.replace(/,\s*([A-Za-z])/g, '|$1');
31776             var wktArray = str.trim().split('|');
31777             var components = [];
31778             for (var i = 0, len = wktArray.length; i < len; ++i) {
31779               components.push(this$1.read(wktArray[i]));
31780             }
31781             return this.geometryFactory.createGeometryCollection(components)
31782           }
31783         };
31784
31785         /**
31786          * Writes the Well-Known Text representation of a {@link Geometry}. The
31787          * Well-Known Text format is defined in the <A
31788          * HREF="http://www.opengis.org/techno/specs.htm"> OGC Simple Features
31789          * Specification for SQL</A>.
31790          * <p>
31791          * The <code>WKTWriter</code> outputs coordinates rounded to the precision
31792          * model. Only the maximum number of decimal places necessary to represent the
31793          * ordinates to the required precision will be output.
31794          * <p>
31795          * The SFS WKT spec does not define a special tag for {@link LinearRing}s.
31796          * Under the spec, rings are output as <code>LINESTRING</code>s.
31797          */
31798
31799         /**
31800          * @param {GeometryFactory} geometryFactory
31801          * @constructor
31802          */
31803         var WKTWriter = function WKTWriter (geometryFactory) {
31804           this.parser = new WKTParser(geometryFactory);
31805         };
31806
31807         /**
31808          * Converts a <code>Geometry</code> to its Well-known Text representation.
31809          *
31810          * @param {Geometry} geometry a <code>Geometry</code> to process.
31811          * @return {string} a <Geometry Tagged Text> string (see the OpenGIS Simple
31812          *       Features Specification).
31813          * @memberof WKTWriter
31814          */
31815         WKTWriter.prototype.write = function write (geometry) {
31816           return this.parser.write(geometry)
31817         };
31818         /**
31819          * Generates the WKT for a <tt>LINESTRING</tt> specified by two
31820          * {@link Coordinate}s.
31821          *
31822          * @param p0 the first coordinate.
31823          * @param p1 the second coordinate.
31824          *
31825          * @return the WKT.
31826          * @private
31827          */
31828         WKTWriter.toLineString = function toLineString (p0, p1) {
31829           if (arguments.length !== 2) {
31830             throw new Error('Not implemented')
31831           }
31832           return 'LINESTRING ( ' + p0.x + ' ' + p0.y + ', ' + p1.x + ' ' + p1.y + ' )'
31833         };
31834
31835         var RuntimeException = (function (Error) {
31836           function RuntimeException (message) {
31837             Error.call(this, message);
31838             this.name = 'RuntimeException';
31839             this.message = message;
31840             this.stack = (new Error()).stack;
31841           }
31842
31843           if ( Error ) { RuntimeException.__proto__ = Error; }
31844           RuntimeException.prototype = Object.create( Error && Error.prototype );
31845           RuntimeException.prototype.constructor = RuntimeException;
31846
31847           return RuntimeException;
31848         }(Error));
31849
31850         var AssertionFailedException = (function (RuntimeException$$1) {
31851           function AssertionFailedException () {
31852             RuntimeException$$1.call(this);
31853             if (arguments.length === 0) {
31854               RuntimeException$$1.call(this);
31855             } else if (arguments.length === 1) {
31856               var message = arguments[0];
31857               RuntimeException$$1.call(this, message);
31858             }
31859           }
31860
31861           if ( RuntimeException$$1 ) { AssertionFailedException.__proto__ = RuntimeException$$1; }
31862           AssertionFailedException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
31863           AssertionFailedException.prototype.constructor = AssertionFailedException;
31864           AssertionFailedException.prototype.interfaces_ = function interfaces_ () {
31865             return []
31866           };
31867           AssertionFailedException.prototype.getClass = function getClass () {
31868             return AssertionFailedException
31869           };
31870
31871           return AssertionFailedException;
31872         }(RuntimeException));
31873
31874         var Assert = function Assert () {};
31875
31876         Assert.prototype.interfaces_ = function interfaces_ () {
31877           return []
31878         };
31879         Assert.prototype.getClass = function getClass () {
31880           return Assert
31881         };
31882         Assert.shouldNeverReachHere = function shouldNeverReachHere () {
31883           if (arguments.length === 0) {
31884             Assert.shouldNeverReachHere(null);
31885           } else if (arguments.length === 1) {
31886             var message = arguments[0];
31887             throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))
31888           }
31889         };
31890         Assert.isTrue = function isTrue () {
31891           var assertion;
31892           var message;
31893           if (arguments.length === 1) {
31894             assertion = arguments[0];
31895             Assert.isTrue(assertion, null);
31896           } else if (arguments.length === 2) {
31897             assertion = arguments[0];
31898             message = arguments[1];
31899             if (!assertion) {
31900               if (message === null) {
31901                 throw new AssertionFailedException()
31902               } else {
31903                 throw new AssertionFailedException(message)
31904               }
31905             }
31906           }
31907         };
31908         Assert.equals = function equals () {
31909           var expectedValue;
31910           var actualValue;
31911           var message;
31912           if (arguments.length === 2) {
31913             expectedValue = arguments[0];
31914             actualValue = arguments[1];
31915             Assert.equals(expectedValue, actualValue, null);
31916           } else if (arguments.length === 3) {
31917             expectedValue = arguments[0];
31918             actualValue = arguments[1];
31919             message = arguments[2];
31920             if (!actualValue.equals(expectedValue)) {
31921               throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))
31922             }
31923           }
31924         };
31925
31926         var LineIntersector = function LineIntersector () {
31927           this._result = null;
31928           this._inputLines = Array(2).fill().map(function () { return Array(2); });
31929           this._intPt = new Array(2).fill(null);
31930           this._intLineIndex = null;
31931           this._isProper = null;
31932           this._pa = null;
31933           this._pb = null;
31934           this._precisionModel = null;
31935           this._intPt[0] = new Coordinate();
31936           this._intPt[1] = new Coordinate();
31937           this._pa = this._intPt[0];
31938           this._pb = this._intPt[1];
31939           this._result = 0;
31940         };
31941
31942         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 } };
31943         LineIntersector.prototype.getIndexAlongSegment = function getIndexAlongSegment (segmentIndex, intIndex) {
31944           this.computeIntLineIndex();
31945           return this._intLineIndex[segmentIndex][intIndex]
31946         };
31947         LineIntersector.prototype.getTopologySummary = function getTopologySummary () {
31948           var catBuf = new StringBuffer();
31949           if (this.isEndPoint()) { catBuf.append(' endpoint'); }
31950           if (this._isProper) { catBuf.append(' proper'); }
31951           if (this.isCollinear()) { catBuf.append(' collinear'); }
31952           return catBuf.toString()
31953         };
31954         LineIntersector.prototype.computeIntersection = function computeIntersection (p1, p2, p3, p4) {
31955           this._inputLines[0][0] = p1;
31956           this._inputLines[0][1] = p2;
31957           this._inputLines[1][0] = p3;
31958           this._inputLines[1][1] = p4;
31959           this._result = this.computeIntersect(p1, p2, p3, p4);
31960         };
31961         LineIntersector.prototype.getIntersectionNum = function getIntersectionNum () {
31962           return this._result
31963         };
31964         LineIntersector.prototype.computeIntLineIndex = function computeIntLineIndex () {
31965           if (arguments.length === 0) {
31966             if (this._intLineIndex === null) {
31967               this._intLineIndex = Array(2).fill().map(function () { return Array(2); });
31968               this.computeIntLineIndex(0);
31969               this.computeIntLineIndex(1);
31970             }
31971           } else if (arguments.length === 1) {
31972             var segmentIndex = arguments[0];
31973             var dist0 = this.getEdgeDistance(segmentIndex, 0);
31974             var dist1 = this.getEdgeDistance(segmentIndex, 1);
31975             if (dist0 > dist1) {
31976               this._intLineIndex[segmentIndex][0] = 0;
31977               this._intLineIndex[segmentIndex][1] = 1;
31978             } else {
31979               this._intLineIndex[segmentIndex][0] = 1;
31980               this._intLineIndex[segmentIndex][1] = 0;
31981             }
31982           }
31983         };
31984         LineIntersector.prototype.isProper = function isProper () {
31985           return this.hasIntersection() && this._isProper
31986         };
31987         LineIntersector.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
31988           this._precisionModel = precisionModel;
31989         };
31990         LineIntersector.prototype.isInteriorIntersection = function isInteriorIntersection () {
31991             var this$1 = this;
31992
31993           if (arguments.length === 0) {
31994             if (this.isInteriorIntersection(0)) { return true }
31995             if (this.isInteriorIntersection(1)) { return true }
31996             return false
31997           } else if (arguments.length === 1) {
31998             var inputLineIndex = arguments[0];
31999             for (var i = 0; i < this._result; i++) {
32000               if (!(this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][0]) || this$1._intPt[i].equals2D(this$1._inputLines[inputLineIndex][1]))) {
32001                 return true
32002               }
32003             }
32004             return false
32005           }
32006         };
32007         LineIntersector.prototype.getIntersection = function getIntersection (intIndex) {
32008           return this._intPt[intIndex]
32009         };
32010         LineIntersector.prototype.isEndPoint = function isEndPoint () {
32011           return this.hasIntersection() && !this._isProper
32012         };
32013         LineIntersector.prototype.hasIntersection = function hasIntersection () {
32014           return this._result !== LineIntersector.NO_INTERSECTION
32015         };
32016         LineIntersector.prototype.getEdgeDistance = function getEdgeDistance (segmentIndex, intIndex) {
32017           var dist = LineIntersector.computeEdgeDistance(this._intPt[intIndex], this._inputLines[segmentIndex][0], this._inputLines[segmentIndex][1]);
32018           return dist
32019         };
32020         LineIntersector.prototype.isCollinear = function isCollinear () {
32021           return this._result === LineIntersector.COLLINEAR_INTERSECTION
32022         };
32023         LineIntersector.prototype.toString = function toString () {
32024           return WKTWriter.toLineString(this._inputLines[0][0], this._inputLines[0][1]) + ' - ' + WKTWriter.toLineString(this._inputLines[1][0], this._inputLines[1][1]) + this.getTopologySummary()
32025         };
32026         LineIntersector.prototype.getEndpoint = function getEndpoint (segmentIndex, ptIndex) {
32027           return this._inputLines[segmentIndex][ptIndex]
32028         };
32029         LineIntersector.prototype.isIntersection = function isIntersection (pt) {
32030             var this$1 = this;
32031
32032           for (var i = 0; i < this._result; i++) {
32033             if (this$1._intPt[i].equals2D(pt)) {
32034               return true
32035             }
32036           }
32037           return false
32038         };
32039         LineIntersector.prototype.getIntersectionAlongSegment = function getIntersectionAlongSegment (segmentIndex, intIndex) {
32040           this.computeIntLineIndex();
32041           return this._intPt[this._intLineIndex[segmentIndex][intIndex]]
32042         };
32043         LineIntersector.prototype.interfaces_ = function interfaces_ () {
32044           return []
32045         };
32046         LineIntersector.prototype.getClass = function getClass () {
32047           return LineIntersector
32048         };
32049         LineIntersector.computeEdgeDistance = function computeEdgeDistance (p, p0, p1) {
32050           var dx = Math.abs(p1.x - p0.x);
32051           var dy = Math.abs(p1.y - p0.y);
32052           var dist = -1.0;
32053           if (p.equals(p0)) {
32054             dist = 0.0;
32055           } else if (p.equals(p1)) {
32056             if (dx > dy) { dist = dx; } else { dist = dy; }
32057           } else {
32058             var pdx = Math.abs(p.x - p0.x);
32059             var pdy = Math.abs(p.y - p0.y);
32060             if (dx > dy) { dist = pdx; } else { dist = pdy; }
32061             if (dist === 0.0 && !p.equals(p0)) {
32062               dist = Math.max(pdx, pdy);
32063             }
32064           }
32065           Assert.isTrue(!(dist === 0.0 && !p.equals(p0)), 'Bad distance calculation');
32066           return dist
32067         };
32068         LineIntersector.nonRobustComputeEdgeDistance = function nonRobustComputeEdgeDistance (p, p1, p2) {
32069           var dx = p.x - p1.x;
32070           var dy = p.y - p1.y;
32071           var dist = Math.sqrt(dx * dx + dy * dy);
32072           Assert.isTrue(!(dist === 0.0 && !p.equals(p1)), 'Invalid distance calculation');
32073           return dist
32074         };
32075         staticAccessors$10.DONT_INTERSECT.get = function () { return 0 };
32076         staticAccessors$10.DO_INTERSECT.get = function () { return 1 };
32077         staticAccessors$10.COLLINEAR.get = function () { return 2 };
32078         staticAccessors$10.NO_INTERSECTION.get = function () { return 0 };
32079         staticAccessors$10.POINT_INTERSECTION.get = function () { return 1 };
32080         staticAccessors$10.COLLINEAR_INTERSECTION.get = function () { return 2 };
32081
32082         Object.defineProperties( LineIntersector, staticAccessors$10 );
32083
32084         var RobustLineIntersector = (function (LineIntersector$$1) {
32085           function RobustLineIntersector () {
32086             LineIntersector$$1.apply(this, arguments);
32087           }
32088
32089           if ( LineIntersector$$1 ) { RobustLineIntersector.__proto__ = LineIntersector$$1; }
32090           RobustLineIntersector.prototype = Object.create( LineIntersector$$1 && LineIntersector$$1.prototype );
32091           RobustLineIntersector.prototype.constructor = RobustLineIntersector;
32092
32093           RobustLineIntersector.prototype.isInSegmentEnvelopes = function isInSegmentEnvelopes (intPt) {
32094             var env0 = new Envelope(this._inputLines[0][0], this._inputLines[0][1]);
32095             var env1 = new Envelope(this._inputLines[1][0], this._inputLines[1][1]);
32096             return env0.contains(intPt) && env1.contains(intPt)
32097           };
32098           RobustLineIntersector.prototype.computeIntersection = function computeIntersection () {
32099             if (arguments.length === 3) {
32100               var p = arguments[0];
32101               var p1 = arguments[1];
32102               var p2 = arguments[2];
32103               this._isProper = false;
32104               if (Envelope.intersects(p1, p2, p)) {
32105                 if (CGAlgorithms.orientationIndex(p1, p2, p) === 0 && CGAlgorithms.orientationIndex(p2, p1, p) === 0) {
32106                   this._isProper = true;
32107                   if (p.equals(p1) || p.equals(p2)) {
32108                     this._isProper = false;
32109                   }
32110                   this._result = LineIntersector$$1.POINT_INTERSECTION;
32111                   return null
32112                 }
32113               }
32114               this._result = LineIntersector$$1.NO_INTERSECTION;
32115             } else { return LineIntersector$$1.prototype.computeIntersection.apply(this, arguments) }
32116           };
32117           RobustLineIntersector.prototype.normalizeToMinimum = function normalizeToMinimum (n1, n2, n3, n4, normPt) {
32118             normPt.x = this.smallestInAbsValue(n1.x, n2.x, n3.x, n4.x);
32119             normPt.y = this.smallestInAbsValue(n1.y, n2.y, n3.y, n4.y);
32120             n1.x -= normPt.x;
32121             n1.y -= normPt.y;
32122             n2.x -= normPt.x;
32123             n2.y -= normPt.y;
32124             n3.x -= normPt.x;
32125             n3.y -= normPt.y;
32126             n4.x -= normPt.x;
32127             n4.y -= normPt.y;
32128           };
32129           RobustLineIntersector.prototype.safeHCoordinateIntersection = function safeHCoordinateIntersection (p1, p2, q1, q2) {
32130             var intPt = null;
32131             try {
32132               intPt = HCoordinate.intersection(p1, p2, q1, q2);
32133             } catch (e) {
32134               if (e instanceof NotRepresentableException) {
32135                 intPt = RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2);
32136               } else { throw e }
32137             } finally {}
32138             return intPt
32139           };
32140           RobustLineIntersector.prototype.intersection = function intersection (p1, p2, q1, q2) {
32141             var intPt = this.intersectionWithNormalization(p1, p2, q1, q2);
32142             if (!this.isInSegmentEnvelopes(intPt)) {
32143               intPt = new Coordinate(RobustLineIntersector.nearestEndpoint(p1, p2, q1, q2));
32144             }
32145             if (this._precisionModel !== null) {
32146               this._precisionModel.makePrecise(intPt);
32147             }
32148             return intPt
32149           };
32150           RobustLineIntersector.prototype.smallestInAbsValue = function smallestInAbsValue (x1, x2, x3, x4) {
32151             var x = x1;
32152             var xabs = Math.abs(x);
32153             if (Math.abs(x2) < xabs) {
32154               x = x2;
32155               xabs = Math.abs(x2);
32156             }
32157             if (Math.abs(x3) < xabs) {
32158               x = x3;
32159               xabs = Math.abs(x3);
32160             }
32161             if (Math.abs(x4) < xabs) {
32162               x = x4;
32163             }
32164             return x
32165           };
32166           RobustLineIntersector.prototype.checkDD = function checkDD (p1, p2, q1, q2, intPt) {
32167             var intPtDD = CGAlgorithmsDD.intersection(p1, p2, q1, q2);
32168             var isIn = this.isInSegmentEnvelopes(intPtDD);
32169             System.out.println('DD in env = ' + isIn + '  --------------------- ' + intPtDD);
32170             if (intPt.distance(intPtDD) > 0.0001) {
32171               System.out.println('Distance = ' + intPt.distance(intPtDD));
32172             }
32173           };
32174           RobustLineIntersector.prototype.intersectionWithNormalization = function intersectionWithNormalization (p1, p2, q1, q2) {
32175             var n1 = new Coordinate(p1);
32176             var n2 = new Coordinate(p2);
32177             var n3 = new Coordinate(q1);
32178             var n4 = new Coordinate(q2);
32179             var normPt = new Coordinate();
32180             this.normalizeToEnvCentre(n1, n2, n3, n4, normPt);
32181             var intPt = this.safeHCoordinateIntersection(n1, n2, n3, n4);
32182             intPt.x += normPt.x;
32183             intPt.y += normPt.y;
32184             return intPt
32185           };
32186           RobustLineIntersector.prototype.computeCollinearIntersection = function computeCollinearIntersection (p1, p2, q1, q2) {
32187             var p1q1p2 = Envelope.intersects(p1, p2, q1);
32188             var p1q2p2 = Envelope.intersects(p1, p2, q2);
32189             var q1p1q2 = Envelope.intersects(q1, q2, p1);
32190             var q1p2q2 = Envelope.intersects(q1, q2, p2);
32191             if (p1q1p2 && p1q2p2) {
32192               this._intPt[0] = q1;
32193               this._intPt[1] = q2;
32194               return LineIntersector$$1.COLLINEAR_INTERSECTION
32195             }
32196             if (q1p1q2 && q1p2q2) {
32197               this._intPt[0] = p1;
32198               this._intPt[1] = p2;
32199               return LineIntersector$$1.COLLINEAR_INTERSECTION
32200             }
32201             if (p1q1p2 && q1p1q2) {
32202               this._intPt[0] = q1;
32203               this._intPt[1] = p1;
32204               return q1.equals(p1) && !p1q2p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
32205             }
32206             if (p1q1p2 && q1p2q2) {
32207               this._intPt[0] = q1;
32208               this._intPt[1] = p2;
32209               return q1.equals(p2) && !p1q2p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
32210             }
32211             if (p1q2p2 && q1p1q2) {
32212               this._intPt[0] = q2;
32213               this._intPt[1] = p1;
32214               return q2.equals(p1) && !p1q1p2 && !q1p2q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
32215             }
32216             if (p1q2p2 && q1p2q2) {
32217               this._intPt[0] = q2;
32218               this._intPt[1] = p2;
32219               return q2.equals(p2) && !p1q1p2 && !q1p1q2 ? LineIntersector$$1.POINT_INTERSECTION : LineIntersector$$1.COLLINEAR_INTERSECTION
32220             }
32221             return LineIntersector$$1.NO_INTERSECTION
32222           };
32223           RobustLineIntersector.prototype.normalizeToEnvCentre = function normalizeToEnvCentre (n00, n01, n10, n11, normPt) {
32224             var minX0 = n00.x < n01.x ? n00.x : n01.x;
32225             var minY0 = n00.y < n01.y ? n00.y : n01.y;
32226             var maxX0 = n00.x > n01.x ? n00.x : n01.x;
32227             var maxY0 = n00.y > n01.y ? n00.y : n01.y;
32228             var minX1 = n10.x < n11.x ? n10.x : n11.x;
32229             var minY1 = n10.y < n11.y ? n10.y : n11.y;
32230             var maxX1 = n10.x > n11.x ? n10.x : n11.x;
32231             var maxY1 = n10.y > n11.y ? n10.y : n11.y;
32232             var intMinX = minX0 > minX1 ? minX0 : minX1;
32233             var intMaxX = maxX0 < maxX1 ? maxX0 : maxX1;
32234             var intMinY = minY0 > minY1 ? minY0 : minY1;
32235             var intMaxY = maxY0 < maxY1 ? maxY0 : maxY1;
32236             var intMidX = (intMinX + intMaxX) / 2.0;
32237             var intMidY = (intMinY + intMaxY) / 2.0;
32238             normPt.x = intMidX;
32239             normPt.y = intMidY;
32240             n00.x -= normPt.x;
32241             n00.y -= normPt.y;
32242             n01.x -= normPt.x;
32243             n01.y -= normPt.y;
32244             n10.x -= normPt.x;
32245             n10.y -= normPt.y;
32246             n11.x -= normPt.x;
32247             n11.y -= normPt.y;
32248           };
32249           RobustLineIntersector.prototype.computeIntersect = function computeIntersect (p1, p2, q1, q2) {
32250             this._isProper = false;
32251             if (!Envelope.intersects(p1, p2, q1, q2)) { return LineIntersector$$1.NO_INTERSECTION }
32252             var Pq1 = CGAlgorithms.orientationIndex(p1, p2, q1);
32253             var Pq2 = CGAlgorithms.orientationIndex(p1, p2, q2);
32254             if ((Pq1 > 0 && Pq2 > 0) || (Pq1 < 0 && Pq2 < 0)) {
32255               return LineIntersector$$1.NO_INTERSECTION
32256             }
32257             var Qp1 = CGAlgorithms.orientationIndex(q1, q2, p1);
32258             var Qp2 = CGAlgorithms.orientationIndex(q1, q2, p2);
32259             if ((Qp1 > 0 && Qp2 > 0) || (Qp1 < 0 && Qp2 < 0)) {
32260               return LineIntersector$$1.NO_INTERSECTION
32261             }
32262             var collinear = Pq1 === 0 && Pq2 === 0 && Qp1 === 0 && Qp2 === 0;
32263             if (collinear) {
32264               return this.computeCollinearIntersection(p1, p2, q1, q2)
32265             }
32266             if (Pq1 === 0 || Pq2 === 0 || Qp1 === 0 || Qp2 === 0) {
32267               this._isProper = false;
32268               if (p1.equals2D(q1) || p1.equals2D(q2)) {
32269                 this._intPt[0] = p1;
32270               } else if (p2.equals2D(q1) || p2.equals2D(q2)) {
32271                 this._intPt[0] = p2;
32272               } else if (Pq1 === 0) {
32273                 this._intPt[0] = new Coordinate(q1);
32274               } else if (Pq2 === 0) {
32275                 this._intPt[0] = new Coordinate(q2);
32276               } else if (Qp1 === 0) {
32277                 this._intPt[0] = new Coordinate(p1);
32278               } else if (Qp2 === 0) {
32279                 this._intPt[0] = new Coordinate(p2);
32280               }
32281             } else {
32282               this._isProper = true;
32283               this._intPt[0] = this.intersection(p1, p2, q1, q2);
32284             }
32285             return LineIntersector$$1.POINT_INTERSECTION
32286           };
32287           RobustLineIntersector.prototype.interfaces_ = function interfaces_ () {
32288             return []
32289           };
32290           RobustLineIntersector.prototype.getClass = function getClass () {
32291             return RobustLineIntersector
32292           };
32293           RobustLineIntersector.nearestEndpoint = function nearestEndpoint (p1, p2, q1, q2) {
32294             var nearestPt = p1;
32295             var minDist = CGAlgorithms.distancePointLine(p1, q1, q2);
32296             var dist = CGAlgorithms.distancePointLine(p2, q1, q2);
32297             if (dist < minDist) {
32298               minDist = dist;
32299               nearestPt = p2;
32300             }
32301             dist = CGAlgorithms.distancePointLine(q1, p1, p2);
32302             if (dist < minDist) {
32303               minDist = dist;
32304               nearestPt = q1;
32305             }
32306             dist = CGAlgorithms.distancePointLine(q2, p1, p2);
32307             if (dist < minDist) {
32308               minDist = dist;
32309               nearestPt = q2;
32310             }
32311             return nearestPt
32312           };
32313
32314           return RobustLineIntersector;
32315         }(LineIntersector));
32316
32317         var RobustDeterminant = function RobustDeterminant () {};
32318
32319         RobustDeterminant.prototype.interfaces_ = function interfaces_ () {
32320           return []
32321         };
32322         RobustDeterminant.prototype.getClass = function getClass () {
32323           return RobustDeterminant
32324         };
32325         RobustDeterminant.orientationIndex = function orientationIndex (p1, p2, q) {
32326           var dx1 = p2.x - p1.x;
32327           var dy1 = p2.y - p1.y;
32328           var dx2 = q.x - p2.x;
32329           var dy2 = q.y - p2.y;
32330           return RobustDeterminant.signOfDet2x2(dx1, dy1, dx2, dy2)
32331         };
32332         RobustDeterminant.signOfDet2x2 = function signOfDet2x2 (x1, y1, x2, y2) {
32333           var sign = null;
32334           var swap = null;
32335           var k = null;
32336           sign = 1;
32337           if (x1 === 0.0 || y2 === 0.0) {
32338             if (y1 === 0.0 || x2 === 0.0) {
32339               return 0
32340             } else if (y1 > 0) {
32341               if (x2 > 0) {
32342                 return -sign
32343               } else {
32344                 return sign
32345               }
32346             } else {
32347               if (x2 > 0) {
32348                 return sign
32349               } else {
32350                 return -sign
32351               }
32352             }
32353           }
32354           if (y1 === 0.0 || x2 === 0.0) {
32355             if (y2 > 0) {
32356               if (x1 > 0) {
32357                 return sign
32358               } else {
32359                 return -sign
32360               }
32361             } else {
32362               if (x1 > 0) {
32363                 return -sign
32364               } else {
32365                 return sign
32366               }
32367             }
32368           }
32369           if (y1 > 0.0) {
32370             if (y2 > 0.0) {
32371               if (y1 <= y2) ; else {
32372                 sign = -sign;
32373                 swap = x1;
32374                 x1 = x2;
32375                 x2 = swap;
32376                 swap = y1;
32377                 y1 = y2;
32378                 y2 = swap;
32379               }
32380             } else {
32381               if (y1 <= -y2) {
32382                 sign = -sign;
32383                 x2 = -x2;
32384                 y2 = -y2;
32385               } else {
32386                 swap = x1;
32387                 x1 = -x2;
32388                 x2 = swap;
32389                 swap = y1;
32390                 y1 = -y2;
32391                 y2 = swap;
32392               }
32393             }
32394           } else {
32395             if (y2 > 0.0) {
32396               if (-y1 <= y2) {
32397                 sign = -sign;
32398                 x1 = -x1;
32399                 y1 = -y1;
32400               } else {
32401                 swap = -x1;
32402                 x1 = x2;
32403                 x2 = swap;
32404                 swap = -y1;
32405                 y1 = y2;
32406                 y2 = swap;
32407               }
32408             } else {
32409               if (y1 >= y2) {
32410                 x1 = -x1;
32411                 y1 = -y1;
32412                 x2 = -x2;
32413                 y2 = -y2;
32414               } else {
32415                 sign = -sign;
32416                 swap = -x1;
32417                 x1 = -x2;
32418                 x2 = swap;
32419                 swap = -y1;
32420                 y1 = -y2;
32421                 y2 = swap;
32422               }
32423             }
32424           }
32425           if (x1 > 0.0) {
32426             if (x2 > 0.0) {
32427               if (x1 <= x2) ; else {
32428                 return sign
32429               }
32430             } else {
32431               return sign
32432             }
32433           } else {
32434             if (x2 > 0.0) {
32435               return -sign
32436             } else {
32437               if (x1 >= x2) {
32438                 sign = -sign;
32439                 x1 = -x1;
32440                 x2 = -x2;
32441               } else {
32442                 return -sign
32443               }
32444             }
32445           }
32446           while (true) {
32447             k = Math.floor(x2 / x1);
32448             x2 = x2 - k * x1;
32449             y2 = y2 - k * y1;
32450             if (y2 < 0.0) {
32451               return -sign
32452             }
32453             if (y2 > y1) {
32454               return sign
32455             }
32456             if (x1 > x2 + x2) {
32457               if (y1 < y2 + y2) {
32458                 return sign
32459               }
32460             } else {
32461               if (y1 > y2 + y2) {
32462                 return -sign
32463               } else {
32464                 x2 = x1 - x2;
32465                 y2 = y1 - y2;
32466                 sign = -sign;
32467               }
32468             }
32469             if (y2 === 0.0) {
32470               if (x2 === 0.0) {
32471                 return 0
32472               } else {
32473                 return -sign
32474               }
32475             }
32476             if (x2 === 0.0) {
32477               return sign
32478             }
32479             k = Math.floor(x1 / x2);
32480             x1 = x1 - k * x2;
32481             y1 = y1 - k * y2;
32482             if (y1 < 0.0) {
32483               return sign
32484             }
32485             if (y1 > y2) {
32486               return -sign
32487             }
32488             if (x2 > x1 + x1) {
32489               if (y2 < y1 + y1) {
32490                 return -sign
32491               }
32492             } else {
32493               if (y2 > y1 + y1) {
32494                 return sign
32495               } else {
32496                 x1 = x2 - x1;
32497                 y1 = y2 - y1;
32498                 sign = -sign;
32499               }
32500             }
32501             if (y1 === 0.0) {
32502               if (x1 === 0.0) {
32503                 return 0
32504               } else {
32505                 return sign
32506               }
32507             }
32508             if (x1 === 0.0) {
32509               return -sign
32510             }
32511           }
32512         };
32513
32514         var RayCrossingCounter = function RayCrossingCounter () {
32515           this._p = null;
32516           this._crossingCount = 0;
32517           this._isPointOnSegment = false;
32518           var p = arguments[0];
32519           this._p = p;
32520         };
32521         RayCrossingCounter.prototype.countSegment = function countSegment (p1, p2) {
32522           if (p1.x < this._p.x && p2.x < this._p.x) { return null }
32523           if (this._p.x === p2.x && this._p.y === p2.y) {
32524             this._isPointOnSegment = true;
32525             return null
32526           }
32527           if (p1.y === this._p.y && p2.y === this._p.y) {
32528             var minx = p1.x;
32529             var maxx = p2.x;
32530             if (minx > maxx) {
32531               minx = p2.x;
32532               maxx = p1.x;
32533             }
32534             if (this._p.x >= minx && this._p.x <= maxx) {
32535               this._isPointOnSegment = true;
32536             }
32537             return null
32538           }
32539           if ((p1.y > this._p.y && p2.y <= this._p.y) || (p2.y > this._p.y && p1.y <= this._p.y)) {
32540             var x1 = p1.x - this._p.x;
32541             var y1 = p1.y - this._p.y;
32542             var x2 = p2.x - this._p.x;
32543             var y2 = p2.y - this._p.y;
32544             var xIntSign = RobustDeterminant.signOfDet2x2(x1, y1, x2, y2);
32545             if (xIntSign === 0.0) {
32546               this._isPointOnSegment = true;
32547               return null
32548             }
32549             if (y2 < y1) { xIntSign = -xIntSign; }
32550             if (xIntSign > 0.0) {
32551               this._crossingCount++;
32552             }
32553           }
32554         };
32555         RayCrossingCounter.prototype.isPointInPolygon = function isPointInPolygon () {
32556           return this.getLocation() !== Location.EXTERIOR
32557         };
32558         RayCrossingCounter.prototype.getLocation = function getLocation () {
32559           if (this._isPointOnSegment) { return Location.BOUNDARY }
32560           if (this._crossingCount % 2 === 1) {
32561             return Location.INTERIOR
32562           }
32563           return Location.EXTERIOR
32564         };
32565         RayCrossingCounter.prototype.isOnSegment = function isOnSegment () {
32566           return this._isPointOnSegment
32567         };
32568         RayCrossingCounter.prototype.interfaces_ = function interfaces_ () {
32569           return []
32570         };
32571         RayCrossingCounter.prototype.getClass = function getClass () {
32572           return RayCrossingCounter
32573         };
32574         RayCrossingCounter.locatePointInRing = function locatePointInRing () {
32575           if (arguments[0] instanceof Coordinate && hasInterface(arguments[1], CoordinateSequence)) {
32576             var p = arguments[0];
32577             var ring = arguments[1];
32578             var counter = new RayCrossingCounter(p);
32579             var p1 = new Coordinate();
32580             var p2 = new Coordinate();
32581             for (var i = 1; i < ring.size(); i++) {
32582               ring.getCoordinate(i, p1);
32583               ring.getCoordinate(i - 1, p2);
32584               counter.countSegment(p1, p2);
32585               if (counter.isOnSegment()) { return counter.getLocation() }
32586             }
32587             return counter.getLocation()
32588           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Array) {
32589             var p$1 = arguments[0];
32590             var ring$1 = arguments[1];
32591             var counter$1 = new RayCrossingCounter(p$1);
32592             for (var i$1 = 1; i$1 < ring$1.length; i$1++) {
32593               var p1$1 = ring$1[i$1];
32594               var p2$1 = ring$1[i$1 - 1];
32595               counter$1.countSegment(p1$1, p2$1);
32596               if (counter$1.isOnSegment()) { return counter$1.getLocation() }
32597             }
32598             return counter$1.getLocation()
32599           }
32600         };
32601
32602         var CGAlgorithms = function CGAlgorithms () {};
32603
32604         var staticAccessors$3 = { CLOCKWISE: { configurable: true },RIGHT: { configurable: true },COUNTERCLOCKWISE: { configurable: true },LEFT: { configurable: true },COLLINEAR: { configurable: true },STRAIGHT: { configurable: true } };
32605
32606         CGAlgorithms.prototype.interfaces_ = function interfaces_ () {
32607           return []
32608         };
32609         CGAlgorithms.prototype.getClass = function getClass () {
32610           return CGAlgorithms
32611         };
32612         CGAlgorithms.orientationIndex = function orientationIndex (p1, p2, q) {
32613           return CGAlgorithmsDD.orientationIndex(p1, p2, q)
32614         };
32615         CGAlgorithms.signedArea = function signedArea () {
32616           if (arguments[0] instanceof Array) {
32617             var ring = arguments[0];
32618             if (ring.length < 3) { return 0.0 }
32619             var sum = 0.0;
32620             var x0 = ring[0].x;
32621             for (var i = 1; i < ring.length - 1; i++) {
32622               var x = ring[i].x - x0;
32623               var y1 = ring[i + 1].y;
32624               var y2 = ring[i - 1].y;
32625               sum += x * (y2 - y1);
32626             }
32627             return sum / 2.0
32628           } else if (hasInterface(arguments[0], CoordinateSequence)) {
32629             var ring$1 = arguments[0];
32630             var n = ring$1.size();
32631             if (n < 3) { return 0.0 }
32632             var p0 = new Coordinate();
32633             var p1 = new Coordinate();
32634             var p2 = new Coordinate();
32635             ring$1.getCoordinate(0, p1);
32636             ring$1.getCoordinate(1, p2);
32637             var x0$1 = p1.x;
32638             p2.x -= x0$1;
32639             var sum$1 = 0.0;
32640             for (var i$1 = 1; i$1 < n - 1; i$1++) {
32641               p0.y = p1.y;
32642               p1.x = p2.x;
32643               p1.y = p2.y;
32644               ring$1.getCoordinate(i$1 + 1, p2);
32645               p2.x -= x0$1;
32646               sum$1 += p1.x * (p0.y - p2.y);
32647             }
32648             return sum$1 / 2.0
32649           }
32650         };
32651         CGAlgorithms.distanceLineLine = function distanceLineLine (A, B, C, D) {
32652           if (A.equals(B)) { return CGAlgorithms.distancePointLine(A, C, D) }
32653           if (C.equals(D)) { return CGAlgorithms.distancePointLine(D, A, B) }
32654           var noIntersection = false;
32655           if (!Envelope.intersects(A, B, C, D)) {
32656             noIntersection = true;
32657           } else {
32658             var denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);
32659             if (denom === 0) {
32660               noIntersection = true;
32661             } else {
32662               var rNumb = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);
32663               var sNum = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);
32664               var s = sNum / denom;
32665               var r = rNumb / denom;
32666               if (r < 0 || r > 1 || s < 0 || s > 1) {
32667                 noIntersection = true;
32668               }
32669             }
32670           }
32671           if (noIntersection) {
32672             return MathUtil.min(CGAlgorithms.distancePointLine(A, C, D), CGAlgorithms.distancePointLine(B, C, D), CGAlgorithms.distancePointLine(C, A, B), CGAlgorithms.distancePointLine(D, A, B))
32673           }
32674           return 0.0
32675         };
32676         CGAlgorithms.isPointInRing = function isPointInRing (p, ring) {
32677           return CGAlgorithms.locatePointInRing(p, ring) !== Location.EXTERIOR
32678         };
32679         CGAlgorithms.computeLength = function computeLength (pts) {
32680           var n = pts.size();
32681           if (n <= 1) { return 0.0 }
32682           var len = 0.0;
32683           var p = new Coordinate();
32684           pts.getCoordinate(0, p);
32685           var x0 = p.x;
32686           var y0 = p.y;
32687           for (var i = 1; i < n; i++) {
32688             pts.getCoordinate(i, p);
32689             var x1 = p.x;
32690             var y1 = p.y;
32691             var dx = x1 - x0;
32692             var dy = y1 - y0;
32693             len += Math.sqrt(dx * dx + dy * dy);
32694             x0 = x1;
32695             y0 = y1;
32696           }
32697           return len
32698         };
32699         CGAlgorithms.isCCW = function isCCW (ring) {
32700           var nPts = ring.length - 1;
32701           if (nPts < 3) { throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined') }
32702           var hiPt = ring[0];
32703           var hiIndex = 0;
32704           for (var i = 1; i <= nPts; i++) {
32705             var p = ring[i];
32706             if (p.y > hiPt.y) {
32707               hiPt = p;
32708               hiIndex = i;
32709             }
32710           }
32711           var iPrev = hiIndex;
32712           do {
32713             iPrev = iPrev - 1;
32714             if (iPrev < 0) { iPrev = nPts; }
32715           } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)
32716           var iNext = hiIndex;
32717           do {
32718             iNext = (iNext + 1) % nPts;
32719           } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)
32720           var prev = ring[iPrev];
32721           var next = ring[iNext];
32722           if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) { return false }
32723           var disc = CGAlgorithms.computeOrientation(prev, hiPt, next);
32724           var isCCW = false;
32725           if (disc === 0) {
32726             isCCW = prev.x > next.x;
32727           } else {
32728             isCCW = disc > 0;
32729           }
32730           return isCCW
32731         };
32732         CGAlgorithms.locatePointInRing = function locatePointInRing (p, ring) {
32733           return RayCrossingCounter.locatePointInRing(p, ring)
32734         };
32735         CGAlgorithms.distancePointLinePerpendicular = function distancePointLinePerpendicular (p, A, B) {
32736           var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
32737           var s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;
32738           return Math.abs(s) * Math.sqrt(len2)
32739         };
32740         CGAlgorithms.computeOrientation = function computeOrientation (p1, p2, q) {
32741           return CGAlgorithms.orientationIndex(p1, p2, q)
32742         };
32743         CGAlgorithms.distancePointLine = function distancePointLine () {
32744           if (arguments.length === 2) {
32745             var p = arguments[0];
32746             var line = arguments[1];
32747             if (line.length === 0) { throw new IllegalArgumentException('Line array must contain at least one vertex') }
32748             var minDistance = p.distance(line[0]);
32749             for (var i = 0; i < line.length - 1; i++) {
32750               var dist = CGAlgorithms.distancePointLine(p, line[i], line[i + 1]);
32751               if (dist < minDistance) {
32752                 minDistance = dist;
32753               }
32754             }
32755             return minDistance
32756           } else if (arguments.length === 3) {
32757             var p$1 = arguments[0];
32758             var A = arguments[1];
32759             var B = arguments[2];
32760             if (A.x === B.x && A.y === B.y) { return p$1.distance(A) }
32761             var len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);
32762             var r = ((p$1.x - A.x) * (B.x - A.x) + (p$1.y - A.y) * (B.y - A.y)) / len2;
32763             if (r <= 0.0) { return p$1.distance(A) }
32764             if (r >= 1.0) { return p$1.distance(B) }
32765             var s = ((A.y - p$1.y) * (B.x - A.x) - (A.x - p$1.x) * (B.y - A.y)) / len2;
32766             return Math.abs(s) * Math.sqrt(len2)
32767           }
32768         };
32769         CGAlgorithms.isOnLine = function isOnLine (p, pt) {
32770           var lineIntersector = new RobustLineIntersector();
32771           for (var i = 1; i < pt.length; i++) {
32772             var p0 = pt[i - 1];
32773             var p1 = pt[i];
32774             lineIntersector.computeIntersection(p, p0, p1);
32775             if (lineIntersector.hasIntersection()) {
32776               return true
32777             }
32778           }
32779           return false
32780         };
32781         staticAccessors$3.CLOCKWISE.get = function () { return -1 };
32782         staticAccessors$3.RIGHT.get = function () { return CGAlgorithms.CLOCKWISE };
32783         staticAccessors$3.COUNTERCLOCKWISE.get = function () { return 1 };
32784         staticAccessors$3.LEFT.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
32785         staticAccessors$3.COLLINEAR.get = function () { return 0 };
32786         staticAccessors$3.STRAIGHT.get = function () { return CGAlgorithms.COLLINEAR };
32787
32788         Object.defineProperties( CGAlgorithms, staticAccessors$3 );
32789
32790         var GeometryComponentFilter = function GeometryComponentFilter () {};
32791
32792         GeometryComponentFilter.prototype.filter = function filter (geom) {};
32793         GeometryComponentFilter.prototype.interfaces_ = function interfaces_ () {
32794           return []
32795         };
32796         GeometryComponentFilter.prototype.getClass = function getClass () {
32797           return GeometryComponentFilter
32798         };
32799
32800         var Geometry = function Geometry () {
32801           var factory = arguments[0];
32802
32803           this._envelope = null;
32804           this._factory = null;
32805           this._SRID = null;
32806           this._userData = null;
32807           this._factory = factory;
32808           this._SRID = factory.getSRID();
32809         };
32810
32811         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 } };
32812         Geometry.prototype.isGeometryCollection = function isGeometryCollection () {
32813           return this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION
32814         };
32815         Geometry.prototype.getFactory = function getFactory () {
32816           return this._factory
32817         };
32818         Geometry.prototype.getGeometryN = function getGeometryN (n) {
32819           return this
32820         };
32821         Geometry.prototype.getArea = function getArea () {
32822           return 0.0
32823         };
32824         Geometry.prototype.isRectangle = function isRectangle () {
32825           return false
32826         };
32827         Geometry.prototype.equals = function equals () {
32828           if (arguments[0] instanceof Geometry) {
32829             var g$1 = arguments[0];
32830             if (g$1 === null) { return false }
32831             return this.equalsTopo(g$1)
32832           } else if (arguments[0] instanceof Object) {
32833             var o = arguments[0];
32834             if (!(o instanceof Geometry)) { return false }
32835             var g = o;
32836             return this.equalsExact(g)
32837           }
32838         };
32839         Geometry.prototype.equalsExact = function equalsExact (other) {
32840           return this === other || this.equalsExact(other, 0)
32841         };
32842         Geometry.prototype.geometryChanged = function geometryChanged () {
32843           this.apply(Geometry.geometryChangedFilter);
32844         };
32845         Geometry.prototype.geometryChangedAction = function geometryChangedAction () {
32846           this._envelope = null;
32847         };
32848         Geometry.prototype.equalsNorm = function equalsNorm (g) {
32849           if (g === null) { return false }
32850           return this.norm().equalsExact(g.norm())
32851         };
32852         Geometry.prototype.getLength = function getLength () {
32853           return 0.0
32854         };
32855         Geometry.prototype.getNumGeometries = function getNumGeometries () {
32856           return 1
32857         };
32858         Geometry.prototype.compareTo = function compareTo () {
32859           if (arguments.length === 1) {
32860             var o = arguments[0];
32861             var other = o;
32862             if (this.getSortIndex() !== other.getSortIndex()) {
32863               return this.getSortIndex() - other.getSortIndex()
32864             }
32865             if (this.isEmpty() && other.isEmpty()) {
32866               return 0
32867             }
32868             if (this.isEmpty()) {
32869               return -1
32870             }
32871             if (other.isEmpty()) {
32872               return 1
32873             }
32874             return this.compareToSameClass(o)
32875           } else if (arguments.length === 2) {
32876             var other$1 = arguments[0];
32877             var comp = arguments[1];
32878             if (this.getSortIndex() !== other$1.getSortIndex()) {
32879               return this.getSortIndex() - other$1.getSortIndex()
32880             }
32881             if (this.isEmpty() && other$1.isEmpty()) {
32882               return 0
32883             }
32884             if (this.isEmpty()) {
32885               return -1
32886             }
32887             if (other$1.isEmpty()) {
32888               return 1
32889             }
32890             return this.compareToSameClass(other$1, comp)
32891           }
32892         };
32893         Geometry.prototype.getUserData = function getUserData () {
32894           return this._userData
32895         };
32896         Geometry.prototype.getSRID = function getSRID () {
32897           return this._SRID
32898         };
32899         Geometry.prototype.getEnvelope = function getEnvelope () {
32900           return this.getFactory().toGeometry(this.getEnvelopeInternal())
32901         };
32902         Geometry.prototype.checkNotGeometryCollection = function checkNotGeometryCollection (g) {
32903           if (g.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION) {
32904             throw new IllegalArgumentException('This method does not support GeometryCollection arguments')
32905           }
32906         };
32907         Geometry.prototype.equal = function equal (a, b, tolerance) {
32908           if (tolerance === 0) {
32909             return a.equals(b)
32910           }
32911           return a.distance(b) <= tolerance
32912         };
32913         Geometry.prototype.norm = function norm () {
32914           var copy = this.copy();
32915           copy.normalize();
32916           return copy
32917         };
32918         Geometry.prototype.getPrecisionModel = function getPrecisionModel () {
32919           return this._factory.getPrecisionModel()
32920         };
32921         Geometry.prototype.getEnvelopeInternal = function getEnvelopeInternal () {
32922           if (this._envelope === null) {
32923             this._envelope = this.computeEnvelopeInternal();
32924           }
32925           return new Envelope(this._envelope)
32926         };
32927         Geometry.prototype.setSRID = function setSRID (SRID) {
32928           this._SRID = SRID;
32929         };
32930         Geometry.prototype.setUserData = function setUserData (userData) {
32931           this._userData = userData;
32932         };
32933         Geometry.prototype.compare = function compare (a, b) {
32934           var i = a.iterator();
32935           var j = b.iterator();
32936           while (i.hasNext() && j.hasNext()) {
32937             var aElement = i.next();
32938             var bElement = j.next();
32939             var comparison = aElement.compareTo(bElement);
32940             if (comparison !== 0) {
32941               return comparison
32942             }
32943           }
32944           if (i.hasNext()) {
32945             return 1
32946           }
32947           if (j.hasNext()) {
32948             return -1
32949           }
32950           return 0
32951         };
32952         Geometry.prototype.hashCode = function hashCode () {
32953           return this.getEnvelopeInternal().hashCode()
32954         };
32955         Geometry.prototype.isGeometryCollectionOrDerived = function isGeometryCollectionOrDerived () {
32956           if (this.getSortIndex() === Geometry.SORTINDEX_GEOMETRYCOLLECTION || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOINT || this.getSortIndex() === Geometry.SORTINDEX_MULTILINESTRING || this.getSortIndex() === Geometry.SORTINDEX_MULTIPOLYGON) {
32957             return true
32958           }
32959           return false
32960         };
32961         Geometry.prototype.interfaces_ = function interfaces_ () {
32962           return [Clonable, Comparable, Serializable]
32963         };
32964         Geometry.prototype.getClass = function getClass () {
32965           return Geometry
32966         };
32967         Geometry.hasNonEmptyElements = function hasNonEmptyElements (geometries) {
32968           for (var i = 0; i < geometries.length; i++) {
32969             if (!geometries[i].isEmpty()) {
32970               return true
32971             }
32972           }
32973           return false
32974         };
32975         Geometry.hasNullElements = function hasNullElements (array) {
32976           for (var i = 0; i < array.length; i++) {
32977             if (array[i] === null) {
32978               return true
32979             }
32980           }
32981           return false
32982         };
32983         staticAccessors$11.serialVersionUID.get = function () { return 8763622679187376702 };
32984         staticAccessors$11.SORTINDEX_POINT.get = function () { return 0 };
32985         staticAccessors$11.SORTINDEX_MULTIPOINT.get = function () { return 1 };
32986         staticAccessors$11.SORTINDEX_LINESTRING.get = function () { return 2 };
32987         staticAccessors$11.SORTINDEX_LINEARRING.get = function () { return 3 };
32988         staticAccessors$11.SORTINDEX_MULTILINESTRING.get = function () { return 4 };
32989         staticAccessors$11.SORTINDEX_POLYGON.get = function () { return 5 };
32990         staticAccessors$11.SORTINDEX_MULTIPOLYGON.get = function () { return 6 };
32991         staticAccessors$11.SORTINDEX_GEOMETRYCOLLECTION.get = function () { return 7 };
32992         staticAccessors$11.geometryChangedFilter.get = function () { return geometryChangedFilter };
32993
32994         Object.defineProperties( Geometry, staticAccessors$11 );
32995
32996         var geometryChangedFilter = function geometryChangedFilter () {};
32997
32998         geometryChangedFilter.interfaces_ = function interfaces_ () {
32999           return [GeometryComponentFilter]
33000         };
33001         geometryChangedFilter.filter = function filter (geom) {
33002           geom.geometryChangedAction();
33003         };
33004
33005         var CoordinateFilter = function CoordinateFilter () {};
33006
33007         CoordinateFilter.prototype.filter = function filter (coord) {};
33008         CoordinateFilter.prototype.interfaces_ = function interfaces_ () {
33009           return []
33010         };
33011         CoordinateFilter.prototype.getClass = function getClass () {
33012           return CoordinateFilter
33013         };
33014
33015         var BoundaryNodeRule = function BoundaryNodeRule () {};
33016
33017         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 } };
33018
33019         BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {};
33020         BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
33021           return []
33022         };
33023         BoundaryNodeRule.prototype.getClass = function getClass () {
33024           return BoundaryNodeRule
33025         };
33026         staticAccessors$12.Mod2BoundaryNodeRule.get = function () { return Mod2BoundaryNodeRule };
33027         staticAccessors$12.EndPointBoundaryNodeRule.get = function () { return EndPointBoundaryNodeRule };
33028         staticAccessors$12.MultiValentEndPointBoundaryNodeRule.get = function () { return MultiValentEndPointBoundaryNodeRule };
33029         staticAccessors$12.MonoValentEndPointBoundaryNodeRule.get = function () { return MonoValentEndPointBoundaryNodeRule };
33030         staticAccessors$12.MOD2_BOUNDARY_RULE.get = function () { return new Mod2BoundaryNodeRule() };
33031         staticAccessors$12.ENDPOINT_BOUNDARY_RULE.get = function () { return new EndPointBoundaryNodeRule() };
33032         staticAccessors$12.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MultiValentEndPointBoundaryNodeRule() };
33033         staticAccessors$12.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get = function () { return new MonoValentEndPointBoundaryNodeRule() };
33034         staticAccessors$12.OGC_SFS_BOUNDARY_RULE.get = function () { return BoundaryNodeRule.MOD2_BOUNDARY_RULE };
33035
33036         Object.defineProperties( BoundaryNodeRule, staticAccessors$12 );
33037
33038         var Mod2BoundaryNodeRule = function Mod2BoundaryNodeRule () {};
33039
33040         Mod2BoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
33041           return boundaryCount % 2 === 1
33042         };
33043         Mod2BoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
33044           return [BoundaryNodeRule]
33045         };
33046         Mod2BoundaryNodeRule.prototype.getClass = function getClass () {
33047           return Mod2BoundaryNodeRule
33048         };
33049
33050         var EndPointBoundaryNodeRule = function EndPointBoundaryNodeRule () {};
33051
33052         EndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
33053           return boundaryCount > 0
33054         };
33055         EndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
33056           return [BoundaryNodeRule]
33057         };
33058         EndPointBoundaryNodeRule.prototype.getClass = function getClass () {
33059           return EndPointBoundaryNodeRule
33060         };
33061
33062         var MultiValentEndPointBoundaryNodeRule = function MultiValentEndPointBoundaryNodeRule () {};
33063
33064         MultiValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
33065           return boundaryCount > 1
33066         };
33067         MultiValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
33068           return [BoundaryNodeRule]
33069         };
33070         MultiValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
33071           return MultiValentEndPointBoundaryNodeRule
33072         };
33073
33074         var MonoValentEndPointBoundaryNodeRule = function MonoValentEndPointBoundaryNodeRule () {};
33075
33076         MonoValentEndPointBoundaryNodeRule.prototype.isInBoundary = function isInBoundary (boundaryCount) {
33077           return boundaryCount === 1
33078         };
33079         MonoValentEndPointBoundaryNodeRule.prototype.interfaces_ = function interfaces_ () {
33080           return [BoundaryNodeRule]
33081         };
33082         MonoValentEndPointBoundaryNodeRule.prototype.getClass = function getClass () {
33083           return MonoValentEndPointBoundaryNodeRule
33084         };
33085
33086         // import Iterator from './Iterator'
33087
33088         /**
33089          * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html
33090          *
33091          * @constructor
33092          * @private
33093          */
33094         var Collection = function Collection () {};
33095
33096         Collection.prototype.add = function add () {};
33097
33098         /**
33099          * Appends all of the elements in the specified collection to the end of this
33100          * list, in the order that they are returned by the specified collection's
33101          * iterator (optional operation).
33102          * @param {javascript.util.Collection} c
33103          * @return {boolean}
33104          */
33105         Collection.prototype.addAll = function addAll () {};
33106
33107         /**
33108          * Returns true if this collection contains no elements.
33109          * @return {boolean}
33110          */
33111         Collection.prototype.isEmpty = function isEmpty () {};
33112
33113         /**
33114          * Returns an iterator over the elements in this collection.
33115          * @return {javascript.util.Iterator}
33116          */
33117         Collection.prototype.iterator = function iterator () {};
33118
33119         /**
33120          * Returns an iterator over the elements in this collection.
33121          * @return {number}
33122          */
33123         Collection.prototype.size = function size () {};
33124
33125         /**
33126          * Returns an array containing all of the elements in this collection.
33127          * @return {Array}
33128          */
33129         Collection.prototype.toArray = function toArray () {};
33130
33131         /**
33132          * Removes a single instance of the specified element from this collection if it
33133          * is present. (optional)
33134          * @param {Object} e
33135          * @return {boolean}
33136          */
33137         Collection.prototype.remove = function remove () {};
33138
33139         /**
33140          * @param {string=} message Optional message
33141          * @extends {Error}
33142          * @constructor
33143          * @private
33144          */
33145         function IndexOutOfBoundsException (message) {
33146           this.message = message || '';
33147         }
33148         IndexOutOfBoundsException.prototype = new Error();
33149
33150         /**
33151          * @type {string}
33152          */
33153         IndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';
33154
33155         /**
33156          * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html
33157          * @constructor
33158          * @private
33159          */
33160         var Iterator$1 = function Iterator () {};
33161
33162         Iterator$1.prototype.hasNext = function hasNext () {};
33163
33164         /**
33165          * Returns the next element in the iteration.
33166          * @return {Object}
33167          */
33168         Iterator$1.prototype.next = function next () {};
33169
33170         /**
33171          * Removes from the underlying collection the last element returned by the
33172          * iterator (optional operation).
33173          */
33174         Iterator$1.prototype.remove = function remove () {};
33175
33176         /**
33177          * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html
33178          *
33179          * @extends {javascript.util.Collection}
33180          * @constructor
33181          * @private
33182          */
33183         var List = (function (Collection$$1) {
33184           function List () {
33185             Collection$$1.apply(this, arguments);
33186           }
33187
33188           if ( Collection$$1 ) { List.__proto__ = Collection$$1; }
33189           List.prototype = Object.create( Collection$$1 && Collection$$1.prototype );
33190           List.prototype.constructor = List;
33191
33192           List.prototype.get = function get () { };
33193
33194           /**
33195            * Replaces the element at the specified position in this list with the
33196            * specified element (optional operation).
33197            * @param {number} index
33198            * @param {Object} e
33199            * @return {Object}
33200            */
33201           List.prototype.set = function set () { };
33202
33203           /**
33204            * Returns true if this collection contains no elements.
33205            * @return {boolean}
33206            */
33207           List.prototype.isEmpty = function isEmpty () { };
33208
33209           return List;
33210         }(Collection));
33211
33212         /**
33213          * @param {string=} message Optional message
33214          * @extends {Error}
33215          * @constructor
33216          * @private
33217          */
33218         function NoSuchElementException (message) {
33219           this.message = message || '';
33220         }
33221         NoSuchElementException.prototype = new Error();
33222
33223         /**
33224          * @type {string}
33225          */
33226         NoSuchElementException.prototype.name = 'NoSuchElementException';
33227
33228         // import OperationNotSupported from './OperationNotSupported'
33229
33230         /**
33231          * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html
33232          *
33233          * @extends List
33234          * @private
33235          */
33236         var ArrayList = (function (List$$1) {
33237           function ArrayList () {
33238             List$$1.call(this);
33239             this.array_ = [];
33240
33241             if (arguments[0] instanceof Collection) {
33242               this.addAll(arguments[0]);
33243             }
33244           }
33245
33246           if ( List$$1 ) { ArrayList.__proto__ = List$$1; }
33247           ArrayList.prototype = Object.create( List$$1 && List$$1.prototype );
33248           ArrayList.prototype.constructor = ArrayList;
33249
33250           ArrayList.prototype.ensureCapacity = function ensureCapacity () {};
33251           ArrayList.prototype.interfaces_ = function interfaces_ () { return [List$$1, Collection] };
33252
33253           /**
33254            * @override
33255            */
33256           ArrayList.prototype.add = function add (e) {
33257             if (arguments.length === 1) {
33258               this.array_.push(e);
33259             } else {
33260               this.array_.splice(arguments[0], arguments[1]);
33261             }
33262             return true
33263           };
33264
33265           ArrayList.prototype.clear = function clear () {
33266             this.array_ = [];
33267           };
33268
33269           /**
33270            * @override
33271            */
33272           ArrayList.prototype.addAll = function addAll (c) {
33273             var this$1 = this;
33274
33275             for (var i = c.iterator(); i.hasNext();) {
33276               this$1.add(i.next());
33277             }
33278             return true
33279           };
33280
33281           /**
33282            * @override
33283            */
33284           ArrayList.prototype.set = function set (index, element) {
33285             var oldElement = this.array_[index];
33286             this.array_[index] = element;
33287             return oldElement
33288           };
33289
33290           /**
33291            * @override
33292            */
33293           ArrayList.prototype.iterator = function iterator () {
33294             return new Iterator_(this)
33295           };
33296
33297           /**
33298            * @override
33299            */
33300           ArrayList.prototype.get = function get (index) {
33301             if (index < 0 || index >= this.size()) {
33302               throw new IndexOutOfBoundsException()
33303             }
33304
33305             return this.array_[index]
33306           };
33307
33308           /**
33309            * @override
33310            */
33311           ArrayList.prototype.isEmpty = function isEmpty () {
33312             return this.array_.length === 0
33313           };
33314
33315           /**
33316            * @override
33317            */
33318           ArrayList.prototype.size = function size () {
33319             return this.array_.length
33320           };
33321
33322           /**
33323            * @override
33324            */
33325           ArrayList.prototype.toArray = function toArray () {
33326             var this$1 = this;
33327
33328             var array = [];
33329
33330             for (var i = 0, len = this.array_.length; i < len; i++) {
33331               array.push(this$1.array_[i]);
33332             }
33333
33334             return array
33335           };
33336
33337           /**
33338            * @override
33339            */
33340           ArrayList.prototype.remove = function remove (o) {
33341             var this$1 = this;
33342
33343             var found = false;
33344
33345             for (var i = 0, len = this.array_.length; i < len; i++) {
33346               if (this$1.array_[i] === o) {
33347                 this$1.array_.splice(i, 1);
33348                 found = true;
33349                 break
33350               }
33351             }
33352
33353             return found
33354           };
33355
33356           return ArrayList;
33357         }(List));
33358
33359         /**
33360          * @extends {Iterator}
33361          * @param {ArrayList} arrayList
33362          * @constructor
33363          * @private
33364          */
33365         var Iterator_ = (function (Iterator$$1) {
33366           function Iterator_ (arrayList) {
33367             Iterator$$1.call(this);
33368             /**
33369              * @type {ArrayList}
33370              * @private
33371             */
33372             this.arrayList_ = arrayList;
33373             /**
33374              * @type {number}
33375              * @private
33376             */
33377             this.position_ = 0;
33378           }
33379
33380           if ( Iterator$$1 ) { Iterator_.__proto__ = Iterator$$1; }
33381           Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
33382           Iterator_.prototype.constructor = Iterator_;
33383
33384           /**
33385            * @override
33386            */
33387           Iterator_.prototype.next = function next () {
33388             if (this.position_ === this.arrayList_.size()) {
33389               throw new NoSuchElementException()
33390             }
33391             return this.arrayList_.get(this.position_++)
33392           };
33393
33394           /**
33395            * @override
33396            */
33397           Iterator_.prototype.hasNext = function hasNext () {
33398             if (this.position_ < this.arrayList_.size()) {
33399               return true
33400             } else {
33401               return false
33402             }
33403           };
33404
33405           /**
33406            * TODO: should be in ListIterator
33407            * @override
33408            */
33409           Iterator_.prototype.set = function set (element) {
33410             return this.arrayList_.set(this.position_ - 1, element)
33411           };
33412
33413           /**
33414            * @override
33415            */
33416           Iterator_.prototype.remove = function remove () {
33417             this.arrayList_.remove(this.arrayList_.get(this.position_));
33418           };
33419
33420           return Iterator_;
33421         }(Iterator$1));
33422
33423         var CoordinateList = (function (ArrayList$$1) {
33424           function CoordinateList () {
33425             ArrayList$$1.call(this);
33426             if (arguments.length === 0) ; else if (arguments.length === 1) {
33427               var coord = arguments[0];
33428               this.ensureCapacity(coord.length);
33429               this.add(coord, true);
33430             } else if (arguments.length === 2) {
33431               var coord$1 = arguments[0];
33432               var allowRepeated = arguments[1];
33433               this.ensureCapacity(coord$1.length);
33434               this.add(coord$1, allowRepeated);
33435             }
33436           }
33437
33438           if ( ArrayList$$1 ) { CoordinateList.__proto__ = ArrayList$$1; }
33439           CoordinateList.prototype = Object.create( ArrayList$$1 && ArrayList$$1.prototype );
33440           CoordinateList.prototype.constructor = CoordinateList;
33441
33442           var staticAccessors = { coordArrayType: { configurable: true } };
33443           staticAccessors.coordArrayType.get = function () { return new Array(0).fill(null) };
33444           CoordinateList.prototype.getCoordinate = function getCoordinate (i) {
33445             return this.get(i)
33446           };
33447           CoordinateList.prototype.addAll = function addAll () {
33448             var this$1 = this;
33449
33450             if (arguments.length === 2) {
33451               var coll = arguments[0];
33452               var allowRepeated = arguments[1];
33453               var isChanged = false;
33454               for (var i = coll.iterator(); i.hasNext();) {
33455                 this$1.add(i.next(), allowRepeated);
33456                 isChanged = true;
33457               }
33458               return isChanged
33459             } else { return ArrayList$$1.prototype.addAll.apply(this, arguments) }
33460           };
33461           CoordinateList.prototype.clone = function clone () {
33462             var this$1 = this;
33463
33464             var clone = ArrayList$$1.prototype.clone.call(this);
33465             for (var i = 0; i < this.size(); i++) {
33466               clone.add(i, this$1.get(i).copy());
33467             }
33468             return clone
33469           };
33470           CoordinateList.prototype.toCoordinateArray = function toCoordinateArray () {
33471             return this.toArray(CoordinateList.coordArrayType)
33472           };
33473           CoordinateList.prototype.add = function add () {
33474             var this$1 = this;
33475
33476             if (arguments.length === 1) {
33477               var coord = arguments[0];
33478               ArrayList$$1.prototype.add.call(this, coord);
33479             } else if (arguments.length === 2) {
33480               if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {
33481                 var coord$1 = arguments[0];
33482                 var allowRepeated = arguments[1];
33483                 this.add(coord$1, allowRepeated, true);
33484                 return true
33485               } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {
33486                 var coord$2 = arguments[0];
33487                 var allowRepeated$1 = arguments[1];
33488                 if (!allowRepeated$1) {
33489                   if (this.size() >= 1) {
33490                     var last = this.get(this.size() - 1);
33491                     if (last.equals2D(coord$2)) { return null }
33492                   }
33493                 }
33494                 ArrayList$$1.prototype.add.call(this, coord$2);
33495               } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {
33496                 var obj = arguments[0];
33497                 var allowRepeated$2 = arguments[1];
33498                 this.add(obj, allowRepeated$2);
33499                 return true
33500               }
33501             } else if (arguments.length === 3) {
33502               if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {
33503                 var coord$3 = arguments[0];
33504                 var allowRepeated$3 = arguments[1];
33505                 var direction = arguments[2];
33506                 if (direction) {
33507                   for (var i$1 = 0; i$1 < coord$3.length; i$1++) {
33508                     this$1.add(coord$3[i$1], allowRepeated$3);
33509                   }
33510                 } else {
33511                   for (var i$2 = coord$3.length - 1; i$2 >= 0; i$2--) {
33512                     this$1.add(coord$3[i$2], allowRepeated$3);
33513                   }
33514                 }
33515                 return true
33516               } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {
33517                 var i$3 = arguments[0];
33518                 var coord$4 = arguments[1];
33519                 var allowRepeated$4 = arguments[2];
33520                 if (!allowRepeated$4) {
33521                   var size = this.size();
33522                   if (size > 0) {
33523                     if (i$3 > 0) {
33524                       var prev = this.get(i$3 - 1);
33525                       if (prev.equals2D(coord$4)) { return null }
33526                     }
33527                     if (i$3 < size) {
33528                       var next = this.get(i$3);
33529                       if (next.equals2D(coord$4)) { return null }
33530                     }
33531                   }
33532                 }
33533                 ArrayList$$1.prototype.add.call(this, i$3, coord$4);
33534               }
33535             } else if (arguments.length === 4) {
33536               var coord$5 = arguments[0];
33537               var allowRepeated$5 = arguments[1];
33538               var start = arguments[2];
33539               var end = arguments[3];
33540               var inc = 1;
33541               if (start > end) { inc = -1; }
33542               for (var i = start; i !== end; i += inc) {
33543                 this$1.add(coord$5[i], allowRepeated$5);
33544               }
33545               return true
33546             }
33547           };
33548           CoordinateList.prototype.closeRing = function closeRing () {
33549             if (this.size() > 0) { this.add(new Coordinate(this.get(0)), false); }
33550           };
33551           CoordinateList.prototype.interfaces_ = function interfaces_ () {
33552             return []
33553           };
33554           CoordinateList.prototype.getClass = function getClass () {
33555             return CoordinateList
33556           };
33557
33558           Object.defineProperties( CoordinateList, staticAccessors );
33559
33560           return CoordinateList;
33561         }(ArrayList));
33562
33563         var CoordinateArrays = function CoordinateArrays () {};
33564
33565         var staticAccessors$13 = { ForwardComparator: { configurable: true },BidirectionalComparator: { configurable: true },coordArrayType: { configurable: true } };
33566
33567         staticAccessors$13.ForwardComparator.get = function () { return ForwardComparator };
33568         staticAccessors$13.BidirectionalComparator.get = function () { return BidirectionalComparator };
33569         staticAccessors$13.coordArrayType.get = function () { return new Array(0).fill(null) };
33570
33571         CoordinateArrays.prototype.interfaces_ = function interfaces_ () {
33572           return []
33573         };
33574         CoordinateArrays.prototype.getClass = function getClass () {
33575           return CoordinateArrays
33576         };
33577         CoordinateArrays.isRing = function isRing (pts) {
33578           if (pts.length < 4) { return false }
33579           if (!pts[0].equals2D(pts[pts.length - 1])) { return false }
33580           return true
33581         };
33582         CoordinateArrays.ptNotInList = function ptNotInList (testPts, pts) {
33583           for (var i = 0; i < testPts.length; i++) {
33584             var testPt = testPts[i];
33585             if (CoordinateArrays.indexOf(testPt, pts) < 0) { return testPt }
33586           }
33587           return null
33588         };
33589         CoordinateArrays.scroll = function scroll (coordinates, firstCoordinate) {
33590           var i = CoordinateArrays.indexOf(firstCoordinate, coordinates);
33591           if (i < 0) { return null }
33592           var newCoordinates = new Array(coordinates.length).fill(null);
33593           System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);
33594           System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);
33595           System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);
33596         };
33597         CoordinateArrays.equals = function equals () {
33598           if (arguments.length === 2) {
33599             var coord1 = arguments[0];
33600             var coord2 = arguments[1];
33601             if (coord1 === coord2) { return true }
33602             if (coord1 === null || coord2 === null) { return false }
33603             if (coord1.length !== coord2.length) { return false }
33604             for (var i = 0; i < coord1.length; i++) {
33605               if (!coord1[i].equals(coord2[i])) { return false }
33606             }
33607             return true
33608           } else if (arguments.length === 3) {
33609             var coord1$1 = arguments[0];
33610             var coord2$1 = arguments[1];
33611             var coordinateComparator = arguments[2];
33612             if (coord1$1 === coord2$1) { return true }
33613             if (coord1$1 === null || coord2$1 === null) { return false }
33614             if (coord1$1.length !== coord2$1.length) { return false }
33615             for (var i$1 = 0; i$1 < coord1$1.length; i$1++) {
33616               if (coordinateComparator.compare(coord1$1[i$1], coord2$1[i$1]) !== 0) { return false }
33617             }
33618             return true
33619           }
33620         };
33621         CoordinateArrays.intersection = function intersection (coordinates, env) {
33622           var coordList = new CoordinateList();
33623           for (var i = 0; i < coordinates.length; i++) {
33624             if (env.intersects(coordinates[i])) { coordList.add(coordinates[i], true); }
33625           }
33626           return coordList.toCoordinateArray()
33627         };
33628         CoordinateArrays.hasRepeatedPoints = function hasRepeatedPoints (coord) {
33629           for (var i = 1; i < coord.length; i++) {
33630             if (coord[i - 1].equals(coord[i])) {
33631               return true
33632             }
33633           }
33634           return false
33635         };
33636         CoordinateArrays.removeRepeatedPoints = function removeRepeatedPoints (coord) {
33637           if (!CoordinateArrays.hasRepeatedPoints(coord)) { return coord }
33638           var coordList = new CoordinateList(coord, false);
33639           return coordList.toCoordinateArray()
33640         };
33641         CoordinateArrays.reverse = function reverse (coord) {
33642           var last = coord.length - 1;
33643           var mid = Math.trunc(last / 2);
33644           for (var i = 0; i <= mid; i++) {
33645             var tmp = coord[i];
33646             coord[i] = coord[last - i];
33647             coord[last - i] = tmp;
33648           }
33649         };
33650         CoordinateArrays.removeNull = function removeNull (coord) {
33651           var nonNull = 0;
33652           for (var i = 0; i < coord.length; i++) {
33653             if (coord[i] !== null) { nonNull++; }
33654           }
33655           var newCoord = new Array(nonNull).fill(null);
33656           if (nonNull === 0) { return newCoord }
33657           var j = 0;
33658           for (var i$1 = 0; i$1 < coord.length; i$1++) {
33659             if (coord[i$1] !== null) { newCoord[j++] = coord[i$1]; }
33660           }
33661           return newCoord
33662         };
33663         CoordinateArrays.copyDeep = function copyDeep () {
33664           if (arguments.length === 1) {
33665             var coordinates = arguments[0];
33666             var copy = new Array(coordinates.length).fill(null);
33667             for (var i = 0; i < coordinates.length; i++) {
33668               copy[i] = new Coordinate(coordinates[i]);
33669             }
33670             return copy
33671           } else if (arguments.length === 5) {
33672             var src = arguments[0];
33673             var srcStart = arguments[1];
33674             var dest = arguments[2];
33675             var destStart = arguments[3];
33676             var length = arguments[4];
33677             for (var i$1 = 0; i$1 < length; i$1++) {
33678               dest[destStart + i$1] = new Coordinate(src[srcStart + i$1]);
33679             }
33680           }
33681         };
33682         CoordinateArrays.isEqualReversed = function isEqualReversed (pts1, pts2) {
33683           for (var i = 0; i < pts1.length; i++) {
33684             var p1 = pts1[i];
33685             var p2 = pts2[pts1.length - i - 1];
33686             if (p1.compareTo(p2) !== 0) { return false }
33687           }
33688           return true
33689         };
33690         CoordinateArrays.envelope = function envelope (coordinates) {
33691           var env = new Envelope();
33692           for (var i = 0; i < coordinates.length; i++) {
33693             env.expandToInclude(coordinates[i]);
33694           }
33695           return env
33696         };
33697         CoordinateArrays.toCoordinateArray = function toCoordinateArray (coordList) {
33698           return coordList.toArray(CoordinateArrays.coordArrayType)
33699         };
33700         CoordinateArrays.atLeastNCoordinatesOrNothing = function atLeastNCoordinatesOrNothing (n, c) {
33701           return c.length >= n ? c : []
33702         };
33703         CoordinateArrays.indexOf = function indexOf (coordinate, coordinates) {
33704           for (var i = 0; i < coordinates.length; i++) {
33705             if (coordinate.equals(coordinates[i])) {
33706               return i
33707             }
33708           }
33709           return -1
33710         };
33711         CoordinateArrays.increasingDirection = function increasingDirection (pts) {
33712           for (var i = 0; i < Math.trunc(pts.length / 2); i++) {
33713             var j = pts.length - 1 - i;
33714             var comp = pts[i].compareTo(pts[j]);
33715             if (comp !== 0) { return comp }
33716           }
33717           return 1
33718         };
33719         CoordinateArrays.compare = function compare (pts1, pts2) {
33720           var i = 0;
33721           while (i < pts1.length && i < pts2.length) {
33722             var compare = pts1[i].compareTo(pts2[i]);
33723             if (compare !== 0) { return compare }
33724             i++;
33725           }
33726           if (i < pts2.length) { return -1 }
33727           if (i < pts1.length) { return 1 }
33728           return 0
33729         };
33730         CoordinateArrays.minCoordinate = function minCoordinate (coordinates) {
33731           var minCoord = null;
33732           for (var i = 0; i < coordinates.length; i++) {
33733             if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {
33734               minCoord = coordinates[i];
33735             }
33736           }
33737           return minCoord
33738         };
33739         CoordinateArrays.extract = function extract (pts, start, end) {
33740           start = MathUtil.clamp(start, 0, pts.length);
33741           end = MathUtil.clamp(end, -1, pts.length);
33742           var npts = end - start + 1;
33743           if (end < 0) { npts = 0; }
33744           if (start >= pts.length) { npts = 0; }
33745           if (end < start) { npts = 0; }
33746           var extractPts = new Array(npts).fill(null);
33747           if (npts === 0) { return extractPts }
33748           var iPts = 0;
33749           for (var i = start; i <= end; i++) {
33750             extractPts[iPts++] = pts[i];
33751           }
33752           return extractPts
33753         };
33754
33755         Object.defineProperties( CoordinateArrays, staticAccessors$13 );
33756
33757         var ForwardComparator = function ForwardComparator () {};
33758
33759         ForwardComparator.prototype.compare = function compare (o1, o2) {
33760           var pts1 = o1;
33761           var pts2 = o2;
33762           return CoordinateArrays.compare(pts1, pts2)
33763         };
33764         ForwardComparator.prototype.interfaces_ = function interfaces_ () {
33765           return [Comparator]
33766         };
33767         ForwardComparator.prototype.getClass = function getClass () {
33768           return ForwardComparator
33769         };
33770
33771         var BidirectionalComparator = function BidirectionalComparator () {};
33772
33773         BidirectionalComparator.prototype.compare = function compare (o1, o2) {
33774           var pts1 = o1;
33775           var pts2 = o2;
33776           if (pts1.length < pts2.length) { return -1 }
33777           if (pts1.length > pts2.length) { return 1 }
33778           if (pts1.length === 0) { return 0 }
33779           var forwardComp = CoordinateArrays.compare(pts1, pts2);
33780           var isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);
33781           if (isEqualRev) { return 0 }
33782           return forwardComp
33783         };
33784         BidirectionalComparator.prototype.OLDcompare = function OLDcompare (o1, o2) {
33785           var pts1 = o1;
33786           var pts2 = o2;
33787           if (pts1.length < pts2.length) { return -1 }
33788           if (pts1.length > pts2.length) { return 1 }
33789           if (pts1.length === 0) { return 0 }
33790           var dir1 = CoordinateArrays.increasingDirection(pts1);
33791           var dir2 = CoordinateArrays.increasingDirection(pts2);
33792           var i1 = dir1 > 0 ? 0 : pts1.length - 1;
33793           var i2 = dir2 > 0 ? 0 : pts1.length - 1;
33794           for (var i = 0; i < pts1.length; i++) {
33795             var comparePt = pts1[i1].compareTo(pts2[i2]);
33796             if (comparePt !== 0) { return comparePt }
33797             i1 += dir1;
33798             i2 += dir2;
33799           }
33800           return 0
33801         };
33802         BidirectionalComparator.prototype.interfaces_ = function interfaces_ () {
33803           return [Comparator]
33804         };
33805         BidirectionalComparator.prototype.getClass = function getClass () {
33806           return BidirectionalComparator
33807         };
33808
33809         /**
33810          * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html
33811          *
33812          * @constructor
33813          * @private
33814          */
33815         var Map$1$1 = function Map () {};
33816
33817         Map$1$1.prototype.get = function get () {};
33818         /**
33819          * Associates the specified value with the specified key in this map (optional
33820          * operation).
33821          * @param {Object} key
33822          * @param {Object} value
33823          * @return {Object}
33824          */
33825         Map$1$1.prototype.put = function put () {};
33826
33827         /**
33828          * Returns the number of key-value mappings in this map.
33829          * @return {number}
33830          */
33831         Map$1$1.prototype.size = function size () {};
33832
33833         /**
33834          * Returns a Collection view of the values contained in this map.
33835          * @return {javascript.util.Collection}
33836          */
33837         Map$1$1.prototype.values = function values () {};
33838
33839         /**
33840          * Returns a {@link Set} view of the mappings contained in this map.
33841          * The set is backed by the map, so changes to the map are
33842          * reflected in the set, and vice-versa.If the map is modified
33843          * while an iteration over the set is in progress (except through
33844          * the iterator's own <tt>remove</tt> operation, or through the
33845          * <tt>setValue</tt> operation on a map entry returned by the
33846          * iterator) the results of the iteration are undefined.The set
33847          * supports element removal, which removes the corresponding
33848          * mapping from the map, via the <tt>Iterator.remove</tt>,
33849          * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
33850          * <tt>clear</tt> operations.It does not support the
33851          * <tt>add</tt> or <tt>addAll</tt> operations.
33852          *
33853          * @return {Set} a set view of the mappings contained in this map
33854          */
33855         Map$1$1.prototype.entrySet = function entrySet () {};
33856
33857         /**
33858          * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html
33859          *
33860          * @extends {Map}
33861          * @constructor
33862          * @private
33863          */
33864         var SortedMap = (function (Map) {
33865                 function SortedMap () {
33866                         Map.apply(this, arguments);
33867                 }if ( Map ) { SortedMap.__proto__ = Map; }
33868                 SortedMap.prototype = Object.create( Map && Map.prototype );
33869                 SortedMap.prototype.constructor = SortedMap;
33870
33871                 
33872
33873                 return SortedMap;
33874         }(Map$1$1));
33875
33876         /**
33877          * @param {string=} message Optional message
33878          * @extends {Error}
33879          * @constructor
33880          * @private
33881          */
33882         function OperationNotSupported (message) {
33883           this.message = message || '';
33884         }
33885         OperationNotSupported.prototype = new Error();
33886
33887         /**
33888          * @type {string}
33889          */
33890         OperationNotSupported.prototype.name = 'OperationNotSupported';
33891
33892         /**
33893          * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html
33894          *
33895          * @extends {Collection}
33896          * @constructor
33897          * @private
33898          */
33899         function Set$2() {}
33900         Set$2.prototype = new Collection();
33901
33902
33903         /**
33904          * Returns true if this set contains the specified element. More formally,
33905          * returns true if and only if this set contains an element e such that (o==null ?
33906          * e==null : o.equals(e)).
33907          * @param {Object} e
33908          * @return {boolean}
33909          */
33910         Set$2.prototype.contains = function() {};
33911
33912         /**
33913          * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html
33914          *
33915          * @extends {javascript.util.Set}
33916          * @constructor
33917          * @private
33918          */
33919         var HashSet = (function (Set$$1) {
33920           function HashSet () {
33921             Set$$1.call(this);
33922             this.array_ = [];
33923
33924             if (arguments[0] instanceof Collection) {
33925               this.addAll(arguments[0]);
33926             }
33927           }
33928
33929           if ( Set$$1 ) { HashSet.__proto__ = Set$$1; }
33930           HashSet.prototype = Object.create( Set$$1 && Set$$1.prototype );
33931           HashSet.prototype.constructor = HashSet;
33932
33933           /**
33934            * @override
33935            */
33936           HashSet.prototype.contains = function contains (o) {
33937             var this$1 = this;
33938
33939             for (var i = 0, len = this.array_.length; i < len; i++) {
33940               var e = this$1.array_[i];
33941               if (e === o) {
33942                 return true
33943               }
33944             }
33945             return false
33946           };
33947
33948           /**
33949            * @override
33950            */
33951           HashSet.prototype.add = function add (o) {
33952             if (this.contains(o)) {
33953               return false
33954             }
33955
33956             this.array_.push(o);
33957
33958             return true
33959           };
33960
33961           /**
33962            * @override
33963            */
33964           HashSet.prototype.addAll = function addAll (c) {
33965             var this$1 = this;
33966
33967             for (var i = c.iterator(); i.hasNext();) {
33968               this$1.add(i.next());
33969             }
33970             return true
33971           };
33972
33973           /**
33974            * @override
33975            */
33976           HashSet.prototype.remove = function remove (o) {
33977             // throw new javascript.util.OperationNotSupported()
33978             throw new Error()
33979           };
33980
33981           /**
33982            * @override
33983            */
33984           HashSet.prototype.size = function size () {
33985             return this.array_.length
33986           };
33987
33988           /**
33989            * @override
33990            */
33991           HashSet.prototype.isEmpty = function isEmpty () {
33992             return this.array_.length === 0
33993           };
33994
33995           /**
33996            * @override
33997            */
33998           HashSet.prototype.toArray = function toArray () {
33999             var this$1 = this;
34000
34001             var array = [];
34002
34003             for (var i = 0, len = this.array_.length; i < len; i++) {
34004               array.push(this$1.array_[i]);
34005             }
34006
34007             return array
34008           };
34009
34010           /**
34011            * @override
34012            */
34013           HashSet.prototype.iterator = function iterator () {
34014             return new Iterator_$1(this)
34015           };
34016
34017           return HashSet;
34018         }(Set$2));
34019
34020         /**
34021            * @extends {Iterator}
34022            * @param {HashSet} hashSet
34023            * @constructor
34024            * @private
34025            */
34026         var Iterator_$1 = (function (Iterator$$1) {
34027           function Iterator_ (hashSet) {
34028             Iterator$$1.call(this);
34029             /**
34030              * @type {HashSet}
34031              * @private
34032              */
34033             this.hashSet_ = hashSet;
34034             /**
34035              * @type {number}
34036              * @private
34037              */
34038             this.position_ = 0;
34039           }
34040
34041           if ( Iterator$$1 ) { Iterator_.__proto__ = Iterator$$1; }
34042           Iterator_.prototype = Object.create( Iterator$$1 && Iterator$$1.prototype );
34043           Iterator_.prototype.constructor = Iterator_;
34044
34045           /**
34046            * @override
34047            */
34048           Iterator_.prototype.next = function next () {
34049             if (this.position_ === this.hashSet_.size()) {
34050               throw new NoSuchElementException()
34051             }
34052             return this.hashSet_.array_[this.position_++]
34053           };
34054
34055           /**
34056            * @override
34057            */
34058           Iterator_.prototype.hasNext = function hasNext () {
34059             if (this.position_ < this.hashSet_.size()) {
34060               return true
34061             } else {
34062               return false
34063             }
34064           };
34065
34066           /**
34067            * @override
34068            */
34069           Iterator_.prototype.remove = function remove () {
34070             throw new OperationNotSupported()
34071           };
34072
34073           return Iterator_;
34074         }(Iterator$1));
34075
34076         var BLACK = 0;
34077         var RED = 1;
34078         function colorOf (p) { return (p === null ? BLACK : p.color) }
34079         function parentOf (p) { return (p === null ? null : p.parent) }
34080         function setColor (p, c) { if (p !== null) { p.color = c; } }
34081         function leftOf (p) { return (p === null ? null : p.left) }
34082         function rightOf (p) { return (p === null ? null : p.right) }
34083
34084         /**
34085          * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html
34086          *
34087          * @extends {SortedMap}
34088          * @constructor
34089          * @private
34090          */
34091         function TreeMap () {
34092           /**
34093            * @type {Object}
34094            * @private
34095            */
34096           this.root_ = null;
34097           /**
34098            * @type {number}
34099            * @private
34100           */
34101           this.size_ = 0;
34102         }
34103         TreeMap.prototype = new SortedMap();
34104
34105         /**
34106          * @override
34107          */
34108         TreeMap.prototype.get = function (key) {
34109           var p = this.root_;
34110           while (p !== null) {
34111             var cmp = key['compareTo'](p.key);
34112             if (cmp < 0) { p = p.left; }
34113             else if (cmp > 0) { p = p.right; }
34114             else { return p.value }
34115           }
34116           return null
34117         };
34118
34119         /**
34120          * @override
34121          */
34122         TreeMap.prototype.put = function (key, value) {
34123           if (this.root_ === null) {
34124             this.root_ = {
34125               key: key,
34126               value: value,
34127               left: null,
34128               right: null,
34129               parent: null,
34130               color: BLACK,
34131               getValue: function getValue () { return this.value },
34132               getKey: function getKey () { return this.key }
34133             };
34134             this.size_ = 1;
34135             return null
34136           }
34137           var t = this.root_;
34138           var parent;
34139           var cmp;
34140           do {
34141             parent = t;
34142             cmp = key['compareTo'](t.key);
34143             if (cmp < 0) {
34144               t = t.left;
34145             } else if (cmp > 0) {
34146               t = t.right;
34147             } else {
34148               var oldValue = t.value;
34149               t.value = value;
34150               return oldValue
34151             }
34152           } while (t !== null)
34153           var e = {
34154             key: key,
34155             left: null,
34156             right: null,
34157             value: value,
34158             parent: parent,
34159             color: BLACK,
34160             getValue: function getValue () { return this.value },
34161             getKey: function getKey () { return this.key }
34162           };
34163           if (cmp < 0) {
34164             parent.left = e;
34165           } else {
34166             parent.right = e;
34167           }
34168           this.fixAfterInsertion(e);
34169           this.size_++;
34170           return null
34171         };
34172
34173         /**
34174          * @param {Object} x
34175          */
34176         TreeMap.prototype.fixAfterInsertion = function (x) {
34177           var this$1 = this;
34178
34179           x.color = RED;
34180           while (x != null && x !== this.root_ && x.parent.color === RED) {
34181             if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {
34182               var y = rightOf(parentOf(parentOf(x)));
34183               if (colorOf(y) === RED) {
34184                 setColor(parentOf(x), BLACK);
34185                 setColor(y, BLACK);
34186                 setColor(parentOf(parentOf(x)), RED);
34187                 x = parentOf(parentOf(x));
34188               } else {
34189                 if (x === rightOf(parentOf(x))) {
34190                   x = parentOf(x);
34191                   this$1.rotateLeft(x);
34192                 }
34193                 setColor(parentOf(x), BLACK);
34194                 setColor(parentOf(parentOf(x)), RED);
34195                 this$1.rotateRight(parentOf(parentOf(x)));
34196               }
34197             } else {
34198               var y$1 = leftOf(parentOf(parentOf(x)));
34199               if (colorOf(y$1) === RED) {
34200                 setColor(parentOf(x), BLACK);
34201                 setColor(y$1, BLACK);
34202                 setColor(parentOf(parentOf(x)), RED);
34203                 x = parentOf(parentOf(x));
34204               } else {
34205                 if (x === leftOf(parentOf(x))) {
34206                   x = parentOf(x);
34207                   this$1.rotateRight(x);
34208                 }
34209                 setColor(parentOf(x), BLACK);
34210                 setColor(parentOf(parentOf(x)), RED);
34211                 this$1.rotateLeft(parentOf(parentOf(x)));
34212               }
34213             }
34214           }
34215           this.root_.color = BLACK;
34216         };
34217
34218         /**
34219          * @override
34220          */
34221         TreeMap.prototype.values = function () {
34222           var arrayList = new ArrayList();
34223           var p = this.getFirstEntry();
34224           if (p !== null) {
34225             arrayList.add(p.value);
34226             while ((p = TreeMap.successor(p)) !== null) {
34227               arrayList.add(p.value);
34228             }
34229           }
34230           return arrayList
34231         };
34232
34233         /**
34234          * @override
34235          */
34236         TreeMap.prototype.entrySet = function () {
34237           var hashSet = new HashSet();
34238           var p = this.getFirstEntry();
34239           if (p !== null) {
34240             hashSet.add(p);
34241             while ((p = TreeMap.successor(p)) !== null) {
34242               hashSet.add(p);
34243             }
34244           }
34245           return hashSet
34246         };
34247
34248         /**
34249          * @param {Object} p
34250          */
34251         TreeMap.prototype.rotateLeft = function (p) {
34252           if (p != null) {
34253             var r = p.right;
34254             p.right = r.left;
34255             if (r.left != null) { r.left.parent = p; }
34256             r.parent = p.parent;
34257             if (p.parent === null) { this.root_ = r; } else if (p.parent.left === p) { p.parent.left = r; } else { p.parent.right = r; }
34258             r.left = p;
34259             p.parent = r;
34260           }
34261         };
34262
34263         /**
34264          * @param {Object} p
34265          */
34266         TreeMap.prototype.rotateRight = function (p) {
34267           if (p != null) {
34268             var l = p.left;
34269             p.left = l.right;
34270             if (l.right != null) { l.right.parent = p; }
34271             l.parent = p.parent;
34272             if (p.parent === null) { this.root_ = l; } else if (p.parent.right === p) { p.parent.right = l; } else { p.parent.left = l; }
34273             l.right = p;
34274             p.parent = l;
34275           }
34276         };
34277
34278         /**
34279          * @return {Object}
34280          */
34281         TreeMap.prototype.getFirstEntry = function () {
34282           var p = this.root_;
34283           if (p != null) {
34284             while (p.left != null) {
34285               p = p.left;
34286             }
34287           }
34288           return p
34289         };
34290
34291         /**
34292          * @param {Object} t
34293          * @return {Object}
34294          * @private
34295          */
34296         TreeMap.successor = function (t) {
34297           if (t === null) { return null } else if (t.right !== null) {
34298             var p = t.right;
34299             while (p.left !== null) {
34300               p = p.left;
34301             }
34302             return p
34303           } else {
34304             var p$1 = t.parent;
34305             var ch = t;
34306             while (p$1 !== null && ch === p$1.right) {
34307               ch = p$1;
34308               p$1 = p$1.parent;
34309             }
34310             return p$1
34311           }
34312         };
34313
34314         /**
34315          * @override
34316          */
34317         TreeMap.prototype.size = function () {
34318           return this.size_
34319         };
34320
34321         var Lineal = function Lineal () {};
34322
34323         Lineal.prototype.interfaces_ = function interfaces_ () {
34324           return []
34325         };
34326         Lineal.prototype.getClass = function getClass () {
34327           return Lineal
34328         };
34329
34330         /**
34331          * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html
34332          *
34333          * @extends {Set}
34334          * @constructor
34335          * @private
34336          */
34337         function SortedSet () {}
34338         SortedSet.prototype = new Set$2();
34339
34340         // import Iterator from './Iterator'
34341         /**
34342          * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html
34343          *
34344          * @extends {SortedSet}
34345          * @constructor
34346          * @private
34347          */
34348         function TreeSet () {
34349           /**
34350            * @type {Array}
34351            * @private
34352           */
34353           this.array_ = [];
34354
34355           if (arguments[0] instanceof Collection) {
34356             this.addAll(arguments[0]);
34357           }
34358         }
34359         TreeSet.prototype = new SortedSet();
34360
34361         /**
34362          * @override
34363          */
34364         TreeSet.prototype.contains = function (o) {
34365           var this$1 = this;
34366
34367           for (var i = 0, len = this.array_.length; i < len; i++) {
34368             var e = this$1.array_[i];
34369             if (e['compareTo'](o) === 0) {
34370               return true
34371             }
34372           }
34373           return false
34374         };
34375
34376         /**
34377          * @override
34378          */
34379         TreeSet.prototype.add = function (o) {
34380           var this$1 = this;
34381
34382           if (this.contains(o)) {
34383             return false
34384           }
34385
34386           for (var i = 0, len = this.array_.length; i < len; i++) {
34387             var e = this$1.array_[i];
34388             if (e['compareTo'](o) === 1) {
34389               this$1.array_.splice(i, 0, o);
34390               return true
34391             }
34392           }
34393
34394           this.array_.push(o);
34395
34396           return true
34397         };
34398
34399         /**
34400          * @override
34401          */
34402         TreeSet.prototype.addAll = function (c) {
34403           var this$1 = this;
34404
34405           for (var i = c.iterator(); i.hasNext();) {
34406             this$1.add(i.next());
34407           }
34408           return true
34409         };
34410
34411         /**
34412          * @override
34413          */
34414         TreeSet.prototype.remove = function (e) {
34415           throw new OperationNotSupported()
34416         };
34417
34418         /**
34419          * @override
34420          */
34421         TreeSet.prototype.size = function () {
34422           return this.array_.length
34423         };
34424
34425         /**
34426          * @override
34427          */
34428         TreeSet.prototype.isEmpty = function () {
34429           return this.array_.length === 0
34430         };
34431
34432         /**
34433          * @override
34434          */
34435         TreeSet.prototype.toArray = function () {
34436           var this$1 = this;
34437
34438           var array = [];
34439
34440           for (var i = 0, len = this.array_.length; i < len; i++) {
34441             array.push(this$1.array_[i]);
34442           }
34443
34444           return array
34445         };
34446
34447         /**
34448          * @override
34449          */
34450         TreeSet.prototype.iterator = function () {
34451           return new Iterator_$2(this)
34452         };
34453
34454         /**
34455          * @extends {javascript.util.Iterator}
34456          * @param {javascript.util.TreeSet} treeSet
34457          * @constructor
34458          * @private
34459          */
34460         var Iterator_$2 = function (treeSet) {
34461           /**
34462            * @type {javascript.util.TreeSet}
34463            * @private
34464            */
34465           this.treeSet_ = treeSet;
34466           /**
34467            * @type {number}
34468            * @private
34469            */
34470           this.position_ = 0;
34471         };
34472
34473         /**
34474          * @override
34475          */
34476         Iterator_$2.prototype.next = function () {
34477           if (this.position_ === this.treeSet_.size()) {
34478             throw new NoSuchElementException()
34479           }
34480           return this.treeSet_.array_[this.position_++]
34481         };
34482
34483         /**
34484          * @override
34485          */
34486         Iterator_$2.prototype.hasNext = function () {
34487           if (this.position_ < this.treeSet_.size()) {
34488             return true
34489           } else {
34490             return false
34491           }
34492         };
34493
34494         /**
34495          * @override
34496          */
34497         Iterator_$2.prototype.remove = function () {
34498           throw new OperationNotSupported()
34499         };
34500
34501         /**
34502          * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html
34503          *
34504          * @constructor
34505          * @private
34506          */
34507         var Arrays = function Arrays () {};
34508
34509         Arrays.sort = function sort () {
34510           var a = arguments[0];
34511           var i;
34512           var t;
34513           var comparator;
34514           var compare;
34515           if (arguments.length === 1) {
34516             compare = function (a, b) {
34517               return a.compareTo(b)
34518             };
34519             a.sort(compare);
34520           } else if (arguments.length === 2) {
34521             comparator = arguments[1];
34522             compare = function (a, b) {
34523               return comparator['compare'](a, b)
34524             };
34525             a.sort(compare);
34526           } else if (arguments.length === 3) {
34527             t = a.slice(arguments[1], arguments[2]);
34528             t.sort();
34529             var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
34530             a.splice(0, a.length);
34531             for (i = 0; i < r.length; i++) {
34532               a.push(r[i]);
34533             }
34534           } else if (arguments.length === 4) {
34535             t = a.slice(arguments[1], arguments[2]);
34536             comparator = arguments[3];
34537             compare = function (a, b) {
34538               return comparator['compare'](a, b)
34539             };
34540             t.sort(compare);
34541             r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));
34542             a.splice(0, a.length);
34543             for (i = 0; i < r.length; i++) {
34544               a.push(r[i]);
34545             }
34546           }
34547         };
34548         /**
34549          * @param {Array} array
34550          * @return {ArrayList}
34551          */
34552         Arrays.asList = function asList (array) {
34553           var arrayList = new ArrayList();
34554           for (var i = 0, len = array.length; i < len; i++) {
34555             arrayList.add(array[i]);
34556           }
34557           return arrayList
34558         };
34559
34560         var Dimension = function Dimension () {};
34561
34562         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 } };
34563
34564         staticAccessors$14.P.get = function () { return 0 };
34565         staticAccessors$14.L.get = function () { return 1 };
34566         staticAccessors$14.A.get = function () { return 2 };
34567         staticAccessors$14.FALSE.get = function () { return -1 };
34568         staticAccessors$14.TRUE.get = function () { return -2 };
34569         staticAccessors$14.DONTCARE.get = function () { return -3 };
34570         staticAccessors$14.SYM_FALSE.get = function () { return 'F' };
34571         staticAccessors$14.SYM_TRUE.get = function () { return 'T' };
34572         staticAccessors$14.SYM_DONTCARE.get = function () { return '*' };
34573         staticAccessors$14.SYM_P.get = function () { return '0' };
34574         staticAccessors$14.SYM_L.get = function () { return '1' };
34575         staticAccessors$14.SYM_A.get = function () { return '2' };
34576
34577         Dimension.prototype.interfaces_ = function interfaces_ () {
34578           return []
34579         };
34580         Dimension.prototype.getClass = function getClass () {
34581           return Dimension
34582         };
34583         Dimension.toDimensionSymbol = function toDimensionSymbol (dimensionValue) {
34584           switch (dimensionValue) {
34585             case Dimension.FALSE:
34586               return Dimension.SYM_FALSE
34587             case Dimension.TRUE:
34588               return Dimension.SYM_TRUE
34589             case Dimension.DONTCARE:
34590               return Dimension.SYM_DONTCARE
34591             case Dimension.P:
34592               return Dimension.SYM_P
34593             case Dimension.L:
34594               return Dimension.SYM_L
34595             case Dimension.A:
34596               return Dimension.SYM_A
34597           }
34598           throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)
34599         };
34600         Dimension.toDimensionValue = function toDimensionValue (dimensionSymbol) {
34601           switch (Character.toUpperCase(dimensionSymbol)) {
34602             case Dimension.SYM_FALSE:
34603               return Dimension.FALSE
34604             case Dimension.SYM_TRUE:
34605               return Dimension.TRUE
34606             case Dimension.SYM_DONTCARE:
34607               return Dimension.DONTCARE
34608             case Dimension.SYM_P:
34609               return Dimension.P
34610             case Dimension.SYM_L:
34611               return Dimension.L
34612             case Dimension.SYM_A:
34613               return Dimension.A
34614           }
34615           throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)
34616         };
34617
34618         Object.defineProperties( Dimension, staticAccessors$14 );
34619
34620         var GeometryFilter = function GeometryFilter () {};
34621
34622         GeometryFilter.prototype.filter = function filter (geom) {};
34623         GeometryFilter.prototype.interfaces_ = function interfaces_ () {
34624           return []
34625         };
34626         GeometryFilter.prototype.getClass = function getClass () {
34627           return GeometryFilter
34628         };
34629
34630         var CoordinateSequenceFilter = function CoordinateSequenceFilter () {};
34631
34632         CoordinateSequenceFilter.prototype.filter = function filter (seq, i) {};
34633         CoordinateSequenceFilter.prototype.isDone = function isDone () {};
34634         CoordinateSequenceFilter.prototype.isGeometryChanged = function isGeometryChanged () {};
34635         CoordinateSequenceFilter.prototype.interfaces_ = function interfaces_ () {
34636           return []
34637         };
34638         CoordinateSequenceFilter.prototype.getClass = function getClass () {
34639           return CoordinateSequenceFilter
34640         };
34641
34642         var GeometryCollection = (function (Geometry$$1) {
34643           function GeometryCollection (geometries, factory) {
34644             Geometry$$1.call(this, factory);
34645             this._geometries = geometries || [];
34646
34647             if (Geometry$$1.hasNullElements(this._geometries)) {
34648               throw new IllegalArgumentException('geometries must not contain null elements')
34649             }
34650           }
34651
34652           if ( Geometry$$1 ) { GeometryCollection.__proto__ = Geometry$$1; }
34653           GeometryCollection.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
34654           GeometryCollection.prototype.constructor = GeometryCollection;
34655
34656           var staticAccessors = { serialVersionUID: { configurable: true } };
34657           GeometryCollection.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
34658             var this$1 = this;
34659
34660             var envelope = new Envelope();
34661             for (var i = 0; i < this._geometries.length; i++) {
34662               envelope.expandToInclude(this$1._geometries[i].getEnvelopeInternal());
34663             }
34664             return envelope
34665           };
34666           GeometryCollection.prototype.getGeometryN = function getGeometryN (n) {
34667             return this._geometries[n]
34668           };
34669           GeometryCollection.prototype.getSortIndex = function getSortIndex () {
34670             return Geometry$$1.SORTINDEX_GEOMETRYCOLLECTION
34671           };
34672           GeometryCollection.prototype.getCoordinates = function getCoordinates () {
34673             var this$1 = this;
34674
34675             var coordinates = new Array(this.getNumPoints()).fill(null);
34676             var k = -1;
34677             for (var i = 0; i < this._geometries.length; i++) {
34678               var childCoordinates = this$1._geometries[i].getCoordinates();
34679               for (var j = 0; j < childCoordinates.length; j++) {
34680                 k++;
34681                 coordinates[k] = childCoordinates[j];
34682               }
34683             }
34684             return coordinates
34685           };
34686           GeometryCollection.prototype.getArea = function getArea () {
34687             var this$1 = this;
34688
34689             var area = 0.0;
34690             for (var i = 0; i < this._geometries.length; i++) {
34691               area += this$1._geometries[i].getArea();
34692             }
34693             return area
34694           };
34695           GeometryCollection.prototype.equalsExact = function equalsExact () {
34696             var this$1 = this;
34697
34698             if (arguments.length === 2) {
34699               var other = arguments[0];
34700               var tolerance = arguments[1];
34701               if (!this.isEquivalentClass(other)) {
34702                 return false
34703               }
34704               var otherCollection = other;
34705               if (this._geometries.length !== otherCollection._geometries.length) {
34706                 return false
34707               }
34708               for (var i = 0; i < this._geometries.length; i++) {
34709                 if (!this$1._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {
34710                   return false
34711                 }
34712               }
34713               return true
34714             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
34715           };
34716           GeometryCollection.prototype.normalize = function normalize () {
34717             var this$1 = this;
34718
34719             for (var i = 0; i < this._geometries.length; i++) {
34720               this$1._geometries[i].normalize();
34721             }
34722             Arrays.sort(this._geometries);
34723           };
34724           GeometryCollection.prototype.getCoordinate = function getCoordinate () {
34725             if (this.isEmpty()) { return null }
34726             return this._geometries[0].getCoordinate()
34727           };
34728           GeometryCollection.prototype.getBoundaryDimension = function getBoundaryDimension () {
34729             var this$1 = this;
34730
34731             var dimension = Dimension.FALSE;
34732             for (var i = 0; i < this._geometries.length; i++) {
34733               dimension = Math.max(dimension, this$1._geometries[i].getBoundaryDimension());
34734             }
34735             return dimension
34736           };
34737           GeometryCollection.prototype.getDimension = function getDimension () {
34738             var this$1 = this;
34739
34740             var dimension = Dimension.FALSE;
34741             for (var i = 0; i < this._geometries.length; i++) {
34742               dimension = Math.max(dimension, this$1._geometries[i].getDimension());
34743             }
34744             return dimension
34745           };
34746           GeometryCollection.prototype.getLength = function getLength () {
34747             var this$1 = this;
34748
34749             var sum = 0.0;
34750             for (var i = 0; i < this._geometries.length; i++) {
34751               sum += this$1._geometries[i].getLength();
34752             }
34753             return sum
34754           };
34755           GeometryCollection.prototype.getNumPoints = function getNumPoints () {
34756             var this$1 = this;
34757
34758             var numPoints = 0;
34759             for (var i = 0; i < this._geometries.length; i++) {
34760               numPoints += this$1._geometries[i].getNumPoints();
34761             }
34762             return numPoints
34763           };
34764           GeometryCollection.prototype.getNumGeometries = function getNumGeometries () {
34765             return this._geometries.length
34766           };
34767           GeometryCollection.prototype.reverse = function reverse () {
34768             var this$1 = this;
34769
34770             var n = this._geometries.length;
34771             var revGeoms = new Array(n).fill(null);
34772             for (var i = 0; i < this._geometries.length; i++) {
34773               revGeoms[i] = this$1._geometries[i].reverse();
34774             }
34775             return this.getFactory().createGeometryCollection(revGeoms)
34776           };
34777           GeometryCollection.prototype.compareToSameClass = function compareToSameClass () {
34778             var this$1 = this;
34779
34780             if (arguments.length === 1) {
34781               var o = arguments[0];
34782               var theseElements = new TreeSet(Arrays.asList(this._geometries));
34783               var otherElements = new TreeSet(Arrays.asList(o._geometries));
34784               return this.compare(theseElements, otherElements)
34785             } else if (arguments.length === 2) {
34786               var o$1 = arguments[0];
34787               var comp = arguments[1];
34788               var gc = o$1;
34789               var n1 = this.getNumGeometries();
34790               var n2 = gc.getNumGeometries();
34791               var i = 0;
34792               while (i < n1 && i < n2) {
34793                 var thisGeom = this$1.getGeometryN(i);
34794                 var otherGeom = gc.getGeometryN(i);
34795                 var holeComp = thisGeom.compareToSameClass(otherGeom, comp);
34796                 if (holeComp !== 0) { return holeComp }
34797                 i++;
34798               }
34799               if (i < n1) { return 1 }
34800               if (i < n2) { return -1 }
34801               return 0
34802             }
34803           };
34804           GeometryCollection.prototype.apply = function apply () {
34805             var this$1 = this;
34806
34807             if (hasInterface(arguments[0], CoordinateFilter)) {
34808               var filter = arguments[0];
34809               for (var i = 0; i < this._geometries.length; i++) {
34810                 this$1._geometries[i].apply(filter);
34811               }
34812             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
34813               var filter$1 = arguments[0];
34814               if (this._geometries.length === 0) { return null }
34815               for (var i$1 = 0; i$1 < this._geometries.length; i$1++) {
34816                 this$1._geometries[i$1].apply(filter$1);
34817                 if (filter$1.isDone()) {
34818                   break
34819                 }
34820               }
34821               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
34822             } else if (hasInterface(arguments[0], GeometryFilter)) {
34823               var filter$2 = arguments[0];
34824               filter$2.filter(this);
34825               for (var i$2 = 0; i$2 < this._geometries.length; i$2++) {
34826                 this$1._geometries[i$2].apply(filter$2);
34827               }
34828             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
34829               var filter$3 = arguments[0];
34830               filter$3.filter(this);
34831               for (var i$3 = 0; i$3 < this._geometries.length; i$3++) {
34832                 this$1._geometries[i$3].apply(filter$3);
34833               }
34834             }
34835           };
34836           GeometryCollection.prototype.getBoundary = function getBoundary () {
34837             this.checkNotGeometryCollection(this);
34838             Assert.shouldNeverReachHere();
34839             return null
34840           };
34841           GeometryCollection.prototype.clone = function clone () {
34842             var this$1 = this;
34843
34844             var gc = Geometry$$1.prototype.clone.call(this);
34845             gc._geometries = new Array(this._geometries.length).fill(null);
34846             for (var i = 0; i < this._geometries.length; i++) {
34847               gc._geometries[i] = this$1._geometries[i].clone();
34848             }
34849             return gc
34850           };
34851           GeometryCollection.prototype.getGeometryType = function getGeometryType () {
34852             return 'GeometryCollection'
34853           };
34854           GeometryCollection.prototype.copy = function copy () {
34855             var this$1 = this;
34856
34857             var geometries = new Array(this._geometries.length).fill(null);
34858             for (var i = 0; i < geometries.length; i++) {
34859               geometries[i] = this$1._geometries[i].copy();
34860             }
34861             return new GeometryCollection(geometries, this._factory)
34862           };
34863           GeometryCollection.prototype.isEmpty = function isEmpty () {
34864             var this$1 = this;
34865
34866             for (var i = 0; i < this._geometries.length; i++) {
34867               if (!this$1._geometries[i].isEmpty()) {
34868                 return false
34869               }
34870             }
34871             return true
34872           };
34873           GeometryCollection.prototype.interfaces_ = function interfaces_ () {
34874             return []
34875           };
34876           GeometryCollection.prototype.getClass = function getClass () {
34877             return GeometryCollection
34878           };
34879           staticAccessors.serialVersionUID.get = function () { return -5694727726395021467 };
34880
34881           Object.defineProperties( GeometryCollection, staticAccessors );
34882
34883           return GeometryCollection;
34884         }(Geometry));
34885
34886         var MultiLineString = (function (GeometryCollection$$1) {
34887           function MultiLineString () {
34888             GeometryCollection$$1.apply(this, arguments);
34889           }
34890
34891           if ( GeometryCollection$$1 ) { MultiLineString.__proto__ = GeometryCollection$$1; }
34892           MultiLineString.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
34893           MultiLineString.prototype.constructor = MultiLineString;
34894
34895           var staticAccessors = { serialVersionUID: { configurable: true } };
34896
34897           MultiLineString.prototype.getSortIndex = function getSortIndex () {
34898             return Geometry.SORTINDEX_MULTILINESTRING
34899           };
34900           MultiLineString.prototype.equalsExact = function equalsExact () {
34901             if (arguments.length === 2) {
34902               var other = arguments[0];
34903               var tolerance = arguments[1];
34904               if (!this.isEquivalentClass(other)) {
34905                 return false
34906               }
34907               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
34908             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
34909           };
34910           MultiLineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
34911             if (this.isClosed()) {
34912               return Dimension.FALSE
34913             }
34914             return 0
34915           };
34916           MultiLineString.prototype.isClosed = function isClosed () {
34917             var this$1 = this;
34918
34919             if (this.isEmpty()) {
34920               return false
34921             }
34922             for (var i = 0; i < this._geometries.length; i++) {
34923               if (!this$1._geometries[i].isClosed()) {
34924                 return false
34925               }
34926             }
34927             return true
34928           };
34929           MultiLineString.prototype.getDimension = function getDimension () {
34930             return 1
34931           };
34932           MultiLineString.prototype.reverse = function reverse () {
34933             var this$1 = this;
34934
34935             var nLines = this._geometries.length;
34936             var revLines = new Array(nLines).fill(null);
34937             for (var i = 0; i < this._geometries.length; i++) {
34938               revLines[nLines - 1 - i] = this$1._geometries[i].reverse();
34939             }
34940             return this.getFactory().createMultiLineString(revLines)
34941           };
34942           MultiLineString.prototype.getBoundary = function getBoundary () {
34943             return new BoundaryOp(this).getBoundary()
34944           };
34945           MultiLineString.prototype.getGeometryType = function getGeometryType () {
34946             return 'MultiLineString'
34947           };
34948           MultiLineString.prototype.copy = function copy () {
34949             var this$1 = this;
34950
34951             var lineStrings = new Array(this._geometries.length).fill(null);
34952             for (var i = 0; i < lineStrings.length; i++) {
34953               lineStrings[i] = this$1._geometries[i].copy();
34954             }
34955             return new MultiLineString(lineStrings, this._factory)
34956           };
34957           MultiLineString.prototype.interfaces_ = function interfaces_ () {
34958             return [Lineal]
34959           };
34960           MultiLineString.prototype.getClass = function getClass () {
34961             return MultiLineString
34962           };
34963           staticAccessors.serialVersionUID.get = function () { return 8166665132445433741 };
34964
34965           Object.defineProperties( MultiLineString, staticAccessors );
34966
34967           return MultiLineString;
34968         }(GeometryCollection));
34969
34970         var BoundaryOp = function BoundaryOp () {
34971           this._geom = null;
34972           this._geomFact = null;
34973           this._bnRule = null;
34974           this._endpointMap = null;
34975           if (arguments.length === 1) {
34976             var geom = arguments[0];
34977             var bnRule = BoundaryNodeRule.MOD2_BOUNDARY_RULE;
34978             this._geom = geom;
34979             this._geomFact = geom.getFactory();
34980             this._bnRule = bnRule;
34981           } else if (arguments.length === 2) {
34982             var geom$1 = arguments[0];
34983             var bnRule$1 = arguments[1];
34984             this._geom = geom$1;
34985             this._geomFact = geom$1.getFactory();
34986             this._bnRule = bnRule$1;
34987           }
34988         };
34989         BoundaryOp.prototype.boundaryMultiLineString = function boundaryMultiLineString (mLine) {
34990           if (this._geom.isEmpty()) {
34991             return this.getEmptyMultiPoint()
34992           }
34993           var bdyPts = this.computeBoundaryCoordinates(mLine);
34994           if (bdyPts.length === 1) {
34995             return this._geomFact.createPoint(bdyPts[0])
34996           }
34997           return this._geomFact.createMultiPointFromCoords(bdyPts)
34998         };
34999         BoundaryOp.prototype.getBoundary = function getBoundary () {
35000           if (this._geom instanceof LineString) { return this.boundaryLineString(this._geom) }
35001           if (this._geom instanceof MultiLineString) { return this.boundaryMultiLineString(this._geom) }
35002           return this._geom.getBoundary()
35003         };
35004         BoundaryOp.prototype.boundaryLineString = function boundaryLineString (line) {
35005           if (this._geom.isEmpty()) {
35006             return this.getEmptyMultiPoint()
35007           }
35008           if (line.isClosed()) {
35009             var closedEndpointOnBoundary = this._bnRule.isInBoundary(2);
35010             if (closedEndpointOnBoundary) {
35011               return line.getStartPoint()
35012             } else {
35013               return this._geomFact.createMultiPoint()
35014             }
35015           }
35016           return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])
35017         };
35018         BoundaryOp.prototype.getEmptyMultiPoint = function getEmptyMultiPoint () {
35019           return this._geomFact.createMultiPoint()
35020         };
35021         BoundaryOp.prototype.computeBoundaryCoordinates = function computeBoundaryCoordinates (mLine) {
35022             var this$1 = this;
35023
35024           var bdyPts = new ArrayList();
35025           this._endpointMap = new TreeMap();
35026           for (var i = 0; i < mLine.getNumGeometries(); i++) {
35027             var line = mLine.getGeometryN(i);
35028             if (line.getNumPoints() === 0) { continue }
35029             this$1.addEndpoint(line.getCoordinateN(0));
35030             this$1.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));
35031           }
35032           for (var it = this._endpointMap.entrySet().iterator(); it.hasNext();) {
35033             var entry = it.next();
35034             var counter = entry.getValue();
35035             var valence = counter.count;
35036             if (this$1._bnRule.isInBoundary(valence)) {
35037               bdyPts.add(entry.getKey());
35038             }
35039           }
35040           return CoordinateArrays.toCoordinateArray(bdyPts)
35041         };
35042         BoundaryOp.prototype.addEndpoint = function addEndpoint (pt) {
35043           var counter = this._endpointMap.get(pt);
35044           if (counter === null) {
35045             counter = new Counter();
35046             this._endpointMap.put(pt, counter);
35047           }
35048           counter.count++;
35049         };
35050         BoundaryOp.prototype.interfaces_ = function interfaces_ () {
35051           return []
35052         };
35053         BoundaryOp.prototype.getClass = function getClass () {
35054           return BoundaryOp
35055         };
35056         BoundaryOp.getBoundary = function getBoundary () {
35057           if (arguments.length === 1) {
35058             var g = arguments[0];
35059             var bop = new BoundaryOp(g);
35060             return bop.getBoundary()
35061           } else if (arguments.length === 2) {
35062             var g$1 = arguments[0];
35063             var bnRule = arguments[1];
35064             var bop$1 = new BoundaryOp(g$1, bnRule);
35065             return bop$1.getBoundary()
35066           }
35067         };
35068
35069         var Counter = function Counter () {
35070           this.count = null;
35071         };
35072         Counter.prototype.interfaces_ = function interfaces_ () {
35073           return []
35074         };
35075         Counter.prototype.getClass = function getClass () {
35076           return Counter
35077         };
35078
35079         // boundary
35080
35081         function PrintStream () {}
35082
35083         function StringReader () {}
35084
35085         var DecimalFormat = function DecimalFormat () {};
35086
35087         function ByteArrayOutputStream () {}
35088
35089         function IOException () {}
35090
35091         function LineNumberReader () {}
35092
35093         var StringUtil = function StringUtil () {};
35094
35095         var staticAccessors$15 = { NEWLINE: { configurable: true },SIMPLE_ORDINATE_FORMAT: { configurable: true } };
35096
35097         StringUtil.prototype.interfaces_ = function interfaces_ () {
35098           return []
35099         };
35100         StringUtil.prototype.getClass = function getClass () {
35101           return StringUtil
35102         };
35103         StringUtil.chars = function chars (c, n) {
35104           var ch = new Array(n).fill(null);
35105           for (var i = 0; i < n; i++) {
35106             ch[i] = c;
35107           }
35108           return String(ch)
35109         };
35110         StringUtil.getStackTrace = function getStackTrace () {
35111           if (arguments.length === 1) {
35112             var t = arguments[0];
35113             var os = new ByteArrayOutputStream();
35114             var ps = new PrintStream(os);
35115             t.printStackTrace(ps);
35116             return os.toString()
35117           } else if (arguments.length === 2) {
35118             var t$1 = arguments[0];
35119             var depth = arguments[1];
35120             var stackTrace = '';
35121             var stringReader = new StringReader(StringUtil.getStackTrace(t$1));
35122             var lineNumberReader = new LineNumberReader(stringReader);
35123             for (var i = 0; i < depth; i++) {
35124               try {
35125                 stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;
35126               } catch (e) {
35127                 if (e instanceof IOException) {
35128                   Assert.shouldNeverReachHere();
35129                 } else { throw e }
35130               } finally {}
35131             }
35132             return stackTrace
35133           }
35134         };
35135         StringUtil.split = function split (s, separator) {
35136           var separatorlen = separator.length;
35137           var tokenList = new ArrayList();
35138           var tmpString = '' + s;
35139           var pos = tmpString.indexOf(separator);
35140           while (pos >= 0) {
35141             var token = tmpString.substring(0, pos);
35142             tokenList.add(token);
35143             tmpString = tmpString.substring(pos + separatorlen);
35144             pos = tmpString.indexOf(separator);
35145           }
35146           if (tmpString.length > 0) { tokenList.add(tmpString); }
35147           var res = new Array(tokenList.size()).fill(null);
35148           for (var i = 0; i < res.length; i++) {
35149             res[i] = tokenList.get(i);
35150           }
35151           return res
35152         };
35153         StringUtil.toString = function toString () {
35154           if (arguments.length === 1) {
35155             var d = arguments[0];
35156             return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)
35157           }
35158         };
35159         StringUtil.spaces = function spaces (n) {
35160           return StringUtil.chars(' ', n)
35161         };
35162         staticAccessors$15.NEWLINE.get = function () { return System.getProperty('line.separator') };
35163         staticAccessors$15.SIMPLE_ORDINATE_FORMAT.get = function () { return new DecimalFormat('0.#') };
35164
35165         Object.defineProperties( StringUtil, staticAccessors$15 );
35166
35167         var CoordinateSequences = function CoordinateSequences () {};
35168
35169         CoordinateSequences.prototype.interfaces_ = function interfaces_ () {
35170           return []
35171         };
35172         CoordinateSequences.prototype.getClass = function getClass () {
35173           return CoordinateSequences
35174         };
35175         CoordinateSequences.copyCoord = function copyCoord (src, srcPos, dest, destPos) {
35176           var minDim = Math.min(src.getDimension(), dest.getDimension());
35177           for (var dim = 0; dim < minDim; dim++) {
35178             dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));
35179           }
35180         };
35181         CoordinateSequences.isRing = function isRing (seq) {
35182           var n = seq.size();
35183           if (n === 0) { return true }
35184           if (n <= 3) { return false }
35185           return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)
35186         };
35187         CoordinateSequences.isEqual = function isEqual (cs1, cs2) {
35188           var cs1Size = cs1.size();
35189           var cs2Size = cs2.size();
35190           if (cs1Size !== cs2Size) { return false }
35191           var dim = Math.min(cs1.getDimension(), cs2.getDimension());
35192           for (var i = 0; i < cs1Size; i++) {
35193             for (var d = 0; d < dim; d++) {
35194               var v1 = cs1.getOrdinate(i, d);
35195               var v2 = cs2.getOrdinate(i, d);
35196               if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) { continue }
35197               if (Double.isNaN(v1) && Double.isNaN(v2)) { continue }
35198               return false
35199             }
35200           }
35201           return true
35202         };
35203         CoordinateSequences.extend = function extend (fact, seq, size) {
35204           var newseq = fact.create(size, seq.getDimension());
35205           var n = seq.size();
35206           CoordinateSequences.copy(seq, 0, newseq, 0, n);
35207           if (n > 0) {
35208             for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, n - 1, newseq, i, 1); }
35209           }
35210           return newseq
35211         };
35212         CoordinateSequences.reverse = function reverse (seq) {
35213           var last = seq.size() - 1;
35214           var mid = Math.trunc(last / 2);
35215           for (var i = 0; i <= mid; i++) {
35216             CoordinateSequences.swap(seq, i, last - i);
35217           }
35218         };
35219         CoordinateSequences.swap = function swap (seq, i, j) {
35220           if (i === j) { return null }
35221           for (var dim = 0; dim < seq.getDimension(); dim++) {
35222             var tmp = seq.getOrdinate(i, dim);
35223             seq.setOrdinate(i, dim, seq.getOrdinate(j, dim));
35224             seq.setOrdinate(j, dim, tmp);
35225           }
35226         };
35227         CoordinateSequences.copy = function copy (src, srcPos, dest, destPos, length) {
35228           for (var i = 0; i < length; i++) {
35229             CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);
35230           }
35231         };
35232         CoordinateSequences.toString = function toString () {
35233           if (arguments.length === 1) {
35234             var cs = arguments[0];
35235             var size = cs.size();
35236             if (size === 0) { return '()' }
35237             var dim = cs.getDimension();
35238             var buf = new StringBuffer();
35239             buf.append('(');
35240             for (var i = 0; i < size; i++) {
35241               if (i > 0) { buf.append(' '); }
35242               for (var d = 0; d < dim; d++) {
35243                 if (d > 0) { buf.append(','); }
35244                 buf.append(StringUtil.toString(cs.getOrdinate(i, d)));
35245               }
35246             }
35247             buf.append(')');
35248             return buf.toString()
35249           }
35250         };
35251         CoordinateSequences.ensureValidRing = function ensureValidRing (fact, seq) {
35252           var n = seq.size();
35253           if (n === 0) { return seq }
35254           if (n <= 3) { return CoordinateSequences.createClosedRing(fact, seq, 4) }
35255           var isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);
35256           if (isClosed) { return seq }
35257           return CoordinateSequences.createClosedRing(fact, seq, n + 1)
35258         };
35259         CoordinateSequences.createClosedRing = function createClosedRing (fact, seq, size) {
35260           var newseq = fact.create(size, seq.getDimension());
35261           var n = seq.size();
35262           CoordinateSequences.copy(seq, 0, newseq, 0, n);
35263           for (var i = n; i < size; i++) { CoordinateSequences.copy(seq, 0, newseq, i, 1); }
35264           return newseq
35265         };
35266
35267         var LineString = (function (Geometry$$1) {
35268           function LineString (points, factory) {
35269             Geometry$$1.call(this, factory);
35270             this._points = null;
35271             this.init(points);
35272           }
35273
35274           if ( Geometry$$1 ) { LineString.__proto__ = Geometry$$1; }
35275           LineString.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
35276           LineString.prototype.constructor = LineString;
35277
35278           var staticAccessors = { serialVersionUID: { configurable: true } };
35279           LineString.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
35280             if (this.isEmpty()) {
35281               return new Envelope()
35282             }
35283             return this._points.expandEnvelope(new Envelope())
35284           };
35285           LineString.prototype.isRing = function isRing () {
35286             return this.isClosed() && this.isSimple()
35287           };
35288           LineString.prototype.getSortIndex = function getSortIndex () {
35289             return Geometry$$1.SORTINDEX_LINESTRING
35290           };
35291           LineString.prototype.getCoordinates = function getCoordinates () {
35292             return this._points.toCoordinateArray()
35293           };
35294           LineString.prototype.equalsExact = function equalsExact () {
35295             var this$1 = this;
35296
35297             if (arguments.length === 2) {
35298               var other = arguments[0];
35299               var tolerance = arguments[1];
35300               if (!this.isEquivalentClass(other)) {
35301                 return false
35302               }
35303               var otherLineString = other;
35304               if (this._points.size() !== otherLineString._points.size()) {
35305                 return false
35306               }
35307               for (var i = 0; i < this._points.size(); i++) {
35308                 if (!this$1.equal(this$1._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {
35309                   return false
35310                 }
35311               }
35312               return true
35313             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
35314           };
35315           LineString.prototype.normalize = function normalize () {
35316             var this$1 = this;
35317
35318             for (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {
35319               var j = this$1._points.size() - 1 - i;
35320               if (!this$1._points.getCoordinate(i).equals(this$1._points.getCoordinate(j))) {
35321                 if (this$1._points.getCoordinate(i).compareTo(this$1._points.getCoordinate(j)) > 0) {
35322                   CoordinateSequences.reverse(this$1._points);
35323                 }
35324                 return null
35325               }
35326             }
35327           };
35328           LineString.prototype.getCoordinate = function getCoordinate () {
35329             if (this.isEmpty()) { return null }
35330             return this._points.getCoordinate(0)
35331           };
35332           LineString.prototype.getBoundaryDimension = function getBoundaryDimension () {
35333             if (this.isClosed()) {
35334               return Dimension.FALSE
35335             }
35336             return 0
35337           };
35338           LineString.prototype.isClosed = function isClosed () {
35339             if (this.isEmpty()) {
35340               return false
35341             }
35342             return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))
35343           };
35344           LineString.prototype.getEndPoint = function getEndPoint () {
35345             if (this.isEmpty()) {
35346               return null
35347             }
35348             return this.getPointN(this.getNumPoints() - 1)
35349           };
35350           LineString.prototype.getDimension = function getDimension () {
35351             return 1
35352           };
35353           LineString.prototype.getLength = function getLength () {
35354             return CGAlgorithms.computeLength(this._points)
35355           };
35356           LineString.prototype.getNumPoints = function getNumPoints () {
35357             return this._points.size()
35358           };
35359           LineString.prototype.reverse = function reverse () {
35360             var seq = this._points.copy();
35361             CoordinateSequences.reverse(seq);
35362             var revLine = this.getFactory().createLineString(seq);
35363             return revLine
35364           };
35365           LineString.prototype.compareToSameClass = function compareToSameClass () {
35366             var this$1 = this;
35367
35368             if (arguments.length === 1) {
35369               var o = arguments[0];
35370               var line = o;
35371               var i = 0;
35372               var j = 0;
35373               while (i < this._points.size() && j < line._points.size()) {
35374                 var comparison = this$1._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));
35375                 if (comparison !== 0) {
35376                   return comparison
35377                 }
35378                 i++;
35379                 j++;
35380               }
35381               if (i < this._points.size()) {
35382                 return 1
35383               }
35384               if (j < line._points.size()) {
35385                 return -1
35386               }
35387               return 0
35388             } else if (arguments.length === 2) {
35389               var o$1 = arguments[0];
35390               var comp = arguments[1];
35391               var line$1 = o$1;
35392               return comp.compare(this._points, line$1._points)
35393             }
35394           };
35395           LineString.prototype.apply = function apply () {
35396             var this$1 = this;
35397
35398             if (hasInterface(arguments[0], CoordinateFilter)) {
35399               var filter = arguments[0];
35400               for (var i = 0; i < this._points.size(); i++) {
35401                 filter.filter(this$1._points.getCoordinate(i));
35402               }
35403             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
35404               var filter$1 = arguments[0];
35405               if (this._points.size() === 0) { return null }
35406               for (var i$1 = 0; i$1 < this._points.size(); i$1++) {
35407                 filter$1.filter(this$1._points, i$1);
35408                 if (filter$1.isDone()) { break }
35409               }
35410               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
35411             } else if (hasInterface(arguments[0], GeometryFilter)) {
35412               var filter$2 = arguments[0];
35413               filter$2.filter(this);
35414             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
35415               var filter$3 = arguments[0];
35416               filter$3.filter(this);
35417             }
35418           };
35419           LineString.prototype.getBoundary = function getBoundary () {
35420             return new BoundaryOp(this).getBoundary()
35421           };
35422           LineString.prototype.isEquivalentClass = function isEquivalentClass (other) {
35423             return other instanceof LineString
35424           };
35425           LineString.prototype.clone = function clone () {
35426             var ls = Geometry$$1.prototype.clone.call(this);
35427             ls._points = this._points.clone();
35428             return ls
35429           };
35430           LineString.prototype.getCoordinateN = function getCoordinateN (n) {
35431             return this._points.getCoordinate(n)
35432           };
35433           LineString.prototype.getGeometryType = function getGeometryType () {
35434             return 'LineString'
35435           };
35436           LineString.prototype.copy = function copy () {
35437             return new LineString(this._points.copy(), this._factory)
35438           };
35439           LineString.prototype.getCoordinateSequence = function getCoordinateSequence () {
35440             return this._points
35441           };
35442           LineString.prototype.isEmpty = function isEmpty () {
35443             return this._points.size() === 0
35444           };
35445           LineString.prototype.init = function init (points) {
35446             if (points === null) {
35447               points = this.getFactory().getCoordinateSequenceFactory().create([]);
35448             }
35449             if (points.size() === 1) {
35450               throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')
35451             }
35452             this._points = points;
35453           };
35454           LineString.prototype.isCoordinate = function isCoordinate (pt) {
35455             var this$1 = this;
35456
35457             for (var i = 0; i < this._points.size(); i++) {
35458               if (this$1._points.getCoordinate(i).equals(pt)) {
35459                 return true
35460               }
35461             }
35462             return false
35463           };
35464           LineString.prototype.getStartPoint = function getStartPoint () {
35465             if (this.isEmpty()) {
35466               return null
35467             }
35468             return this.getPointN(0)
35469           };
35470           LineString.prototype.getPointN = function getPointN (n) {
35471             return this.getFactory().createPoint(this._points.getCoordinate(n))
35472           };
35473           LineString.prototype.interfaces_ = function interfaces_ () {
35474             return [Lineal]
35475           };
35476           LineString.prototype.getClass = function getClass () {
35477             return LineString
35478           };
35479           staticAccessors.serialVersionUID.get = function () { return 3110669828065365560 };
35480
35481           Object.defineProperties( LineString, staticAccessors );
35482
35483           return LineString;
35484         }(Geometry));
35485
35486         var Puntal = function Puntal () {};
35487
35488         Puntal.prototype.interfaces_ = function interfaces_ () {
35489           return []
35490         };
35491         Puntal.prototype.getClass = function getClass () {
35492           return Puntal
35493         };
35494
35495         var Point = (function (Geometry$$1) {
35496           function Point (coordinates, factory) {
35497             Geometry$$1.call(this, factory);
35498             this._coordinates = coordinates || null;
35499             this.init(this._coordinates);
35500           }
35501
35502           if ( Geometry$$1 ) { Point.__proto__ = Geometry$$1; }
35503           Point.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
35504           Point.prototype.constructor = Point;
35505
35506           var staticAccessors = { serialVersionUID: { configurable: true } };
35507           Point.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
35508             if (this.isEmpty()) {
35509               return new Envelope()
35510             }
35511             var env = new Envelope();
35512             env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));
35513             return env
35514           };
35515           Point.prototype.getSortIndex = function getSortIndex () {
35516             return Geometry$$1.SORTINDEX_POINT
35517           };
35518           Point.prototype.getCoordinates = function getCoordinates () {
35519             return this.isEmpty() ? [] : [this.getCoordinate()]
35520           };
35521           Point.prototype.equalsExact = function equalsExact () {
35522             if (arguments.length === 2) {
35523               var other = arguments[0];
35524               var tolerance = arguments[1];
35525               if (!this.isEquivalentClass(other)) {
35526                 return false
35527               }
35528               if (this.isEmpty() && other.isEmpty()) {
35529                 return true
35530               }
35531               if (this.isEmpty() !== other.isEmpty()) {
35532                 return false
35533               }
35534               return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)
35535             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
35536           };
35537           Point.prototype.normalize = function normalize () {};
35538           Point.prototype.getCoordinate = function getCoordinate () {
35539             return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null
35540           };
35541           Point.prototype.getBoundaryDimension = function getBoundaryDimension () {
35542             return Dimension.FALSE
35543           };
35544           Point.prototype.getDimension = function getDimension () {
35545             return 0
35546           };
35547           Point.prototype.getNumPoints = function getNumPoints () {
35548             return this.isEmpty() ? 0 : 1
35549           };
35550           Point.prototype.reverse = function reverse () {
35551             return this.copy()
35552           };
35553           Point.prototype.getX = function getX () {
35554             if (this.getCoordinate() === null) {
35555               throw new Error('getX called on empty Point')
35556             }
35557             return this.getCoordinate().x
35558           };
35559           Point.prototype.compareToSameClass = function compareToSameClass () {
35560             if (arguments.length === 1) {
35561               var other = arguments[0];
35562               var point$1 = other;
35563               return this.getCoordinate().compareTo(point$1.getCoordinate())
35564             } else if (arguments.length === 2) {
35565               var other$1 = arguments[0];
35566               var comp = arguments[1];
35567               var point = other$1;
35568               return comp.compare(this._coordinates, point._coordinates)
35569             }
35570           };
35571           Point.prototype.apply = function apply () {
35572             if (hasInterface(arguments[0], CoordinateFilter)) {
35573               var filter = arguments[0];
35574               if (this.isEmpty()) {
35575                 return null
35576               }
35577               filter.filter(this.getCoordinate());
35578             } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {
35579               var filter$1 = arguments[0];
35580               if (this.isEmpty()) { return null }
35581               filter$1.filter(this._coordinates, 0);
35582               if (filter$1.isGeometryChanged()) { this.geometryChanged(); }
35583             } else if (hasInterface(arguments[0], GeometryFilter)) {
35584               var filter$2 = arguments[0];
35585               filter$2.filter(this);
35586             } else if (hasInterface(arguments[0], GeometryComponentFilter)) {
35587               var filter$3 = arguments[0];
35588               filter$3.filter(this);
35589             }
35590           };
35591           Point.prototype.getBoundary = function getBoundary () {
35592             return this.getFactory().createGeometryCollection(null)
35593           };
35594           Point.prototype.clone = function clone () {
35595             var p = Geometry$$1.prototype.clone.call(this);
35596             p._coordinates = this._coordinates.clone();
35597             return p
35598           };
35599           Point.prototype.getGeometryType = function getGeometryType () {
35600             return 'Point'
35601           };
35602           Point.prototype.copy = function copy () {
35603             return new Point(this._coordinates.copy(), this._factory)
35604           };
35605           Point.prototype.getCoordinateSequence = function getCoordinateSequence () {
35606             return this._coordinates
35607           };
35608           Point.prototype.getY = function getY () {
35609             if (this.getCoordinate() === null) {
35610               throw new Error('getY called on empty Point')
35611             }
35612             return this.getCoordinate().y
35613           };
35614           Point.prototype.isEmpty = function isEmpty () {
35615             return this._coordinates.size() === 0
35616           };
35617           Point.prototype.init = function init (coordinates) {
35618             if (coordinates === null) {
35619               coordinates = this.getFactory().getCoordinateSequenceFactory().create([]);
35620             }
35621             Assert.isTrue(coordinates.size() <= 1);
35622             this._coordinates = coordinates;
35623           };
35624           Point.prototype.isSimple = function isSimple () {
35625             return true
35626           };
35627           Point.prototype.interfaces_ = function interfaces_ () {
35628             return [Puntal]
35629           };
35630           Point.prototype.getClass = function getClass () {
35631             return Point
35632           };
35633           staticAccessors.serialVersionUID.get = function () { return 4902022702746614570 };
35634
35635           Object.defineProperties( Point, staticAccessors );
35636
35637           return Point;
35638         }(Geometry));
35639
35640         var Polygonal = function Polygonal () {};
35641
35642         Polygonal.prototype.interfaces_ = function interfaces_ () {
35643           return []
35644         };
35645         Polygonal.prototype.getClass = function getClass () {
35646           return Polygonal
35647         };
35648
35649         var Polygon = (function (Geometry$$1) {
35650           function Polygon (shell, holes, factory) {
35651             Geometry$$1.call(this, factory);
35652             this._shell = null;
35653             this._holes = null;
35654             if (shell === null) {
35655               shell = this.getFactory().createLinearRing();
35656             }
35657             if (holes === null) {
35658               holes = [];
35659             }
35660             if (Geometry$$1.hasNullElements(holes)) {
35661               throw new IllegalArgumentException('holes must not contain null elements')
35662             }
35663             if (shell.isEmpty() && Geometry$$1.hasNonEmptyElements(holes)) {
35664               throw new IllegalArgumentException('shell is empty but holes are not')
35665             }
35666             this._shell = shell;
35667             this._holes = holes;
35668           }
35669
35670           if ( Geometry$$1 ) { Polygon.__proto__ = Geometry$$1; }
35671           Polygon.prototype = Object.create( Geometry$$1 && Geometry$$1.prototype );
35672           Polygon.prototype.constructor = Polygon;
35673
35674           var staticAccessors = { serialVersionUID: { configurable: true } };
35675           Polygon.prototype.computeEnvelopeInternal = function computeEnvelopeInternal () {
35676             return this._shell.getEnvelopeInternal()
35677           };
35678           Polygon.prototype.getSortIndex = function getSortIndex () {
35679             return Geometry$$1.SORTINDEX_POLYGON
35680           };
35681           Polygon.prototype.getCoordinates = function getCoordinates () {
35682             var this$1 = this;
35683
35684             if (this.isEmpty()) {
35685               return []
35686             }
35687             var coordinates = new Array(this.getNumPoints()).fill(null);
35688             var k = -1;
35689             var shellCoordinates = this._shell.getCoordinates();
35690             for (var x = 0; x < shellCoordinates.length; x++) {
35691               k++;
35692               coordinates[k] = shellCoordinates[x];
35693             }
35694             for (var i = 0; i < this._holes.length; i++) {
35695               var childCoordinates = this$1._holes[i].getCoordinates();
35696               for (var j = 0; j < childCoordinates.length; j++) {
35697                 k++;
35698                 coordinates[k] = childCoordinates[j];
35699               }
35700             }
35701             return coordinates
35702           };
35703           Polygon.prototype.getArea = function getArea () {
35704             var this$1 = this;
35705
35706             var area = 0.0;
35707             area += Math.abs(CGAlgorithms.signedArea(this._shell.getCoordinateSequence()));
35708             for (var i = 0; i < this._holes.length; i++) {
35709               area -= Math.abs(CGAlgorithms.signedArea(this$1._holes[i].getCoordinateSequence()));
35710             }
35711             return area
35712           };
35713           Polygon.prototype.isRectangle = function isRectangle () {
35714             if (this.getNumInteriorRing() !== 0) { return false }
35715             if (this._shell === null) { return false }
35716             if (this._shell.getNumPoints() !== 5) { return false }
35717             var seq = this._shell.getCoordinateSequence();
35718             var env = this.getEnvelopeInternal();
35719             for (var i = 0; i < 5; i++) {
35720               var x = seq.getX(i);
35721               if (!(x === env.getMinX() || x === env.getMaxX())) { return false }
35722               var y = seq.getY(i);
35723               if (!(y === env.getMinY() || y === env.getMaxY())) { return false }
35724             }
35725             var prevX = seq.getX(0);
35726             var prevY = seq.getY(0);
35727             for (var i$1 = 1; i$1 <= 4; i$1++) {
35728               var x$1 = seq.getX(i$1);
35729               var y$1 = seq.getY(i$1);
35730               var xChanged = x$1 !== prevX;
35731               var yChanged = y$1 !== prevY;
35732               if (xChanged === yChanged) { return false }
35733               prevX = x$1;
35734               prevY = y$1;
35735             }
35736             return true
35737           };
35738           Polygon.prototype.equalsExact = function equalsExact () {
35739             var this$1 = this;
35740
35741             if (arguments.length === 2) {
35742               var other = arguments[0];
35743               var tolerance = arguments[1];
35744               if (!this.isEquivalentClass(other)) {
35745                 return false
35746               }
35747               var otherPolygon = other;
35748               var thisShell = this._shell;
35749               var otherPolygonShell = otherPolygon._shell;
35750               if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {
35751                 return false
35752               }
35753               if (this._holes.length !== otherPolygon._holes.length) {
35754                 return false
35755               }
35756               for (var i = 0; i < this._holes.length; i++) {
35757                 if (!this$1._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {
35758                   return false
35759                 }
35760               }
35761               return true
35762             } else { return Geometry$$1.prototype.equalsExact.apply(this, arguments) }
35763           };
35764           Polygon.prototype.normalize = function normalize () {
35765             var this$1 = this;
35766
35767             if (arguments.length === 0) {
35768               this.normalize(this._shell, true);
35769               for (var i = 0; i < this._holes.length; i++) {
35770                 this$1.normalize(this$1._holes[i], false);
35771               }
35772               Arrays.sort(this._holes);
35773             } else if (arguments.length === 2) {
35774               var ring = arguments[0];
35775               var clockwise = arguments[1];
35776               if (ring.isEmpty()) {
35777                 return null
35778               }
35779               var uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);
35780               System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);
35781               var minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());
35782               CoordinateArrays.scroll(uniqueCoordinates, minCoordinate);
35783               System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);
35784               ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];
35785               if (CGAlgorithms.isCCW(ring.getCoordinates()) === clockwise) {
35786                 CoordinateArrays.reverse(ring.getCoordinates());
35787               }
35788             }
35789           };
35790           Polygon.prototype.getCoordinate = function getCoordinate () {
35791             return this._shell.getCoordinate()
35792           };
35793           Polygon.prototype.getNumInteriorRing = function getNumInteriorRing () {
35794             return this._holes.length
35795           };
35796           Polygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
35797             return 1
35798           };
35799           Polygon.prototype.getDimension = function getDimension () {
35800             return 2
35801           };
35802           Polygon.prototype.getLength = function getLength () {
35803             var this$1 = this;
35804
35805             var len = 0.0;
35806             len += this._shell.getLength();
35807             for (var i = 0; i < this._holes.length; i++) {
35808               len += this$1._holes[i].getLength();
35809             }
35810             return len
35811           };
35812           Polygon.prototype.getNumPoints = function getNumPoints () {
35813             var this$1 = this;
35814
35815             var numPoints = this._shell.getNumPoints();
35816             for (var i = 0; i < this._holes.length; i++) {
35817               numPoints += this$1._holes[i].getNumPoints();
35818             }
35819             return numPoints
35820           };
35821           Polygon.prototype.reverse = function reverse () {
35822             var this$1 = this;
35823
35824             var poly = this.copy();
35825             poly._shell = this._shell.copy().reverse();
35826             poly._holes = new Array(this._holes.length).fill(null);
35827             for (var i = 0; i < this._holes.length; i++) {
35828               poly._holes[i] = this$1._holes[i].copy().reverse();
35829             }
35830             return poly
35831           };
35832           Polygon.prototype.convexHull = function convexHull () {
35833             return this.getExteriorRing().convexHull()
35834           };
35835           Polygon.prototype.compareToSameClass = function compareToSameClass () {
35836             var this$1 = this;
35837
35838             if (arguments.length === 1) {
35839               var o = arguments[0];
35840               var thisShell = this._shell;
35841               var otherShell = o._shell;
35842               return thisShell.compareToSameClass(otherShell)
35843             } else if (arguments.length === 2) {
35844               var o$1 = arguments[0];
35845               var comp = arguments[1];
35846               var poly = o$1;
35847               var thisShell$1 = this._shell;
35848               var otherShell$1 = poly._shell;
35849               var shellComp = thisShell$1.compareToSameClass(otherShell$1, comp);
35850               if (shellComp !== 0) { return shellComp }
35851               var nHole1 = this.getNumInteriorRing();
35852               var nHole2 = poly.getNumInteriorRing();
35853               var i = 0;
35854               while (i < nHole1 && i < nHole2) {
35855                 var thisHole = this$1.getInteriorRingN(i);
35856                 var otherHole = poly.getInteriorRingN(i);
35857                 var holeComp = thisHole.compareToSameClass(otherHole, comp);
35858                 if (holeComp !== 0) { return holeComp }
35859                 i++;
35860               }
35861               if (i < nHole1) { return 1 }
35862               if (i < nHole2) { return -1 }
35863               return 0
35864             }
35865           };
35866           Polygon.prototype.apply = function apply (filter) {
35867             var this$1 = this;
35868
35869             if (hasInterface(filter, CoordinateFilter)) {
35870               this._shell.apply(filter);
35871               for (var i$1 = 0; i$1 < this._holes.length; i$1++) {
35872                 this$1._holes[i$1].apply(filter);
35873               }
35874             } else if (hasInterface(filter, CoordinateSequenceFilter)) {
35875               this._shell.apply(filter);
35876               if (!filter.isDone()) {
35877                 for (var i$2 = 0; i$2 < this._holes.length; i$2++) {
35878                   this$1._holes[i$2].apply(filter);
35879                   if (filter.isDone()) { break }
35880                 }
35881               }
35882               if (filter.isGeometryChanged()) { this.geometryChanged(); }
35883             } else if (hasInterface(filter, GeometryFilter)) {
35884               filter.filter(this);
35885             } else if (hasInterface(filter, GeometryComponentFilter)) {
35886               filter.filter(this);
35887               this._shell.apply(filter);
35888               for (var i = 0; i < this._holes.length; i++) {
35889                 this$1._holes[i].apply(filter);
35890               }
35891             }
35892           };
35893           Polygon.prototype.getBoundary = function getBoundary () {
35894             var this$1 = this;
35895
35896             if (this.isEmpty()) {
35897               return this.getFactory().createMultiLineString()
35898             }
35899             var rings = new Array(this._holes.length + 1).fill(null);
35900             rings[0] = this._shell;
35901             for (var i = 0; i < this._holes.length; i++) {
35902               rings[i + 1] = this$1._holes[i];
35903             }
35904             if (rings.length <= 1) { return this.getFactory().createLinearRing(rings[0].getCoordinateSequence()) }
35905             return this.getFactory().createMultiLineString(rings)
35906           };
35907           Polygon.prototype.clone = function clone () {
35908             var this$1 = this;
35909
35910             var poly = Geometry$$1.prototype.clone.call(this);
35911             poly._shell = this._shell.clone();
35912             poly._holes = new Array(this._holes.length).fill(null);
35913             for (var i = 0; i < this._holes.length; i++) {
35914               poly._holes[i] = this$1._holes[i].clone();
35915             }
35916             return poly
35917           };
35918           Polygon.prototype.getGeometryType = function getGeometryType () {
35919             return 'Polygon'
35920           };
35921           Polygon.prototype.copy = function copy () {
35922             var this$1 = this;
35923
35924             var shell = this._shell.copy();
35925             var holes = new Array(this._holes.length).fill(null);
35926             for (var i = 0; i < holes.length; i++) {
35927               holes[i] = this$1._holes[i].copy();
35928             }
35929             return new Polygon(shell, holes, this._factory)
35930           };
35931           Polygon.prototype.getExteriorRing = function getExteriorRing () {
35932             return this._shell
35933           };
35934           Polygon.prototype.isEmpty = function isEmpty () {
35935             return this._shell.isEmpty()
35936           };
35937           Polygon.prototype.getInteriorRingN = function getInteriorRingN (n) {
35938             return this._holes[n]
35939           };
35940           Polygon.prototype.interfaces_ = function interfaces_ () {
35941             return [Polygonal]
35942           };
35943           Polygon.prototype.getClass = function getClass () {
35944             return Polygon
35945           };
35946           staticAccessors.serialVersionUID.get = function () { return -3494792200821764533 };
35947
35948           Object.defineProperties( Polygon, staticAccessors );
35949
35950           return Polygon;
35951         }(Geometry));
35952
35953         var MultiPoint = (function (GeometryCollection$$1) {
35954           function MultiPoint () {
35955             GeometryCollection$$1.apply(this, arguments);
35956           }
35957
35958           if ( GeometryCollection$$1 ) { MultiPoint.__proto__ = GeometryCollection$$1; }
35959           MultiPoint.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
35960           MultiPoint.prototype.constructor = MultiPoint;
35961
35962           var staticAccessors = { serialVersionUID: { configurable: true } };
35963
35964           MultiPoint.prototype.getSortIndex = function getSortIndex () {
35965             return Geometry.SORTINDEX_MULTIPOINT
35966           };
35967           MultiPoint.prototype.isValid = function isValid () {
35968             return true
35969           };
35970           MultiPoint.prototype.equalsExact = function equalsExact () {
35971             if (arguments.length === 2) {
35972               var other = arguments[0];
35973               var tolerance = arguments[1];
35974               if (!this.isEquivalentClass(other)) {
35975                 return false
35976               }
35977               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
35978             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
35979           };
35980           MultiPoint.prototype.getCoordinate = function getCoordinate () {
35981             if (arguments.length === 1) {
35982               var n = arguments[0];
35983               return this._geometries[n].getCoordinate()
35984             } else { return GeometryCollection$$1.prototype.getCoordinate.apply(this, arguments) }
35985           };
35986           MultiPoint.prototype.getBoundaryDimension = function getBoundaryDimension () {
35987             return Dimension.FALSE
35988           };
35989           MultiPoint.prototype.getDimension = function getDimension () {
35990             return 0
35991           };
35992           MultiPoint.prototype.getBoundary = function getBoundary () {
35993             return this.getFactory().createGeometryCollection(null)
35994           };
35995           MultiPoint.prototype.getGeometryType = function getGeometryType () {
35996             return 'MultiPoint'
35997           };
35998           MultiPoint.prototype.copy = function copy () {
35999             var this$1 = this;
36000
36001             var points = new Array(this._geometries.length).fill(null);
36002             for (var i = 0; i < points.length; i++) {
36003               points[i] = this$1._geometries[i].copy();
36004             }
36005             return new MultiPoint(points, this._factory)
36006           };
36007           MultiPoint.prototype.interfaces_ = function interfaces_ () {
36008             return [Puntal]
36009           };
36010           MultiPoint.prototype.getClass = function getClass () {
36011             return MultiPoint
36012           };
36013           staticAccessors.serialVersionUID.get = function () { return -8048474874175355449 };
36014
36015           Object.defineProperties( MultiPoint, staticAccessors );
36016
36017           return MultiPoint;
36018         }(GeometryCollection));
36019
36020         var LinearRing = (function (LineString$$1) {
36021           function LinearRing (points, factory) {
36022             if (points instanceof Coordinate && factory instanceof GeometryFactory) {
36023               points = factory.getCoordinateSequenceFactory().create(points);
36024             }
36025             LineString$$1.call(this, points, factory);
36026             this.validateConstruction();
36027           }
36028
36029           if ( LineString$$1 ) { LinearRing.__proto__ = LineString$$1; }
36030           LinearRing.prototype = Object.create( LineString$$1 && LineString$$1.prototype );
36031           LinearRing.prototype.constructor = LinearRing;
36032
36033           var staticAccessors = { MINIMUM_VALID_SIZE: { configurable: true },serialVersionUID: { configurable: true } };
36034           LinearRing.prototype.getSortIndex = function getSortIndex () {
36035             return Geometry.SORTINDEX_LINEARRING
36036           };
36037           LinearRing.prototype.getBoundaryDimension = function getBoundaryDimension () {
36038             return Dimension.FALSE
36039           };
36040           LinearRing.prototype.isClosed = function isClosed () {
36041             if (this.isEmpty()) {
36042               return true
36043             }
36044             return LineString$$1.prototype.isClosed.call(this)
36045           };
36046           LinearRing.prototype.reverse = function reverse () {
36047             var seq = this._points.copy();
36048             CoordinateSequences.reverse(seq);
36049             var rev = this.getFactory().createLinearRing(seq);
36050             return rev
36051           };
36052           LinearRing.prototype.validateConstruction = function validateConstruction () {
36053             if (!this.isEmpty() && !LineString$$1.prototype.isClosed.call(this)) {
36054               throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')
36055             }
36056             if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {
36057               throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')
36058             }
36059           };
36060           LinearRing.prototype.getGeometryType = function getGeometryType () {
36061             return 'LinearRing'
36062           };
36063           LinearRing.prototype.copy = function copy () {
36064             return new LinearRing(this._points.copy(), this._factory)
36065           };
36066           LinearRing.prototype.interfaces_ = function interfaces_ () {
36067             return []
36068           };
36069           LinearRing.prototype.getClass = function getClass () {
36070             return LinearRing
36071           };
36072           staticAccessors.MINIMUM_VALID_SIZE.get = function () { return 4 };
36073           staticAccessors.serialVersionUID.get = function () { return -4261142084085851829 };
36074
36075           Object.defineProperties( LinearRing, staticAccessors );
36076
36077           return LinearRing;
36078         }(LineString));
36079
36080         var MultiPolygon = (function (GeometryCollection$$1) {
36081           function MultiPolygon () {
36082             GeometryCollection$$1.apply(this, arguments);
36083           }
36084
36085           if ( GeometryCollection$$1 ) { MultiPolygon.__proto__ = GeometryCollection$$1; }
36086           MultiPolygon.prototype = Object.create( GeometryCollection$$1 && GeometryCollection$$1.prototype );
36087           MultiPolygon.prototype.constructor = MultiPolygon;
36088
36089           var staticAccessors = { serialVersionUID: { configurable: true } };
36090
36091           MultiPolygon.prototype.getSortIndex = function getSortIndex () {
36092             return Geometry.SORTINDEX_MULTIPOLYGON
36093           };
36094           MultiPolygon.prototype.equalsExact = function equalsExact () {
36095             if (arguments.length === 2) {
36096               var other = arguments[0];
36097               var tolerance = arguments[1];
36098               if (!this.isEquivalentClass(other)) {
36099                 return false
36100               }
36101               return GeometryCollection$$1.prototype.equalsExact.call(this, other, tolerance)
36102             } else { return GeometryCollection$$1.prototype.equalsExact.apply(this, arguments) }
36103           };
36104           MultiPolygon.prototype.getBoundaryDimension = function getBoundaryDimension () {
36105             return 1
36106           };
36107           MultiPolygon.prototype.getDimension = function getDimension () {
36108             return 2
36109           };
36110           MultiPolygon.prototype.reverse = function reverse () {
36111             var this$1 = this;
36112
36113             var n = this._geometries.length;
36114             var revGeoms = new Array(n).fill(null);
36115             for (var i = 0; i < this._geometries.length; i++) {
36116               revGeoms[i] = this$1._geometries[i].reverse();
36117             }
36118             return this.getFactory().createMultiPolygon(revGeoms)
36119           };
36120           MultiPolygon.prototype.getBoundary = function getBoundary () {
36121             var this$1 = this;
36122
36123             if (this.isEmpty()) {
36124               return this.getFactory().createMultiLineString()
36125             }
36126             var allRings = new ArrayList();
36127             for (var i = 0; i < this._geometries.length; i++) {
36128               var polygon = this$1._geometries[i];
36129               var rings = polygon.getBoundary();
36130               for (var j = 0; j < rings.getNumGeometries(); j++) {
36131                 allRings.add(rings.getGeometryN(j));
36132               }
36133             }
36134             var allRingsArray = new Array(allRings.size()).fill(null);
36135             return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))
36136           };
36137           MultiPolygon.prototype.getGeometryType = function getGeometryType () {
36138             return 'MultiPolygon'
36139           };
36140           MultiPolygon.prototype.copy = function copy () {
36141             var this$1 = this;
36142
36143             var polygons = new Array(this._geometries.length).fill(null);
36144             for (var i = 0; i < polygons.length; i++) {
36145               polygons[i] = this$1._geometries[i].copy();
36146             }
36147             return new MultiPolygon(polygons, this._factory)
36148           };
36149           MultiPolygon.prototype.interfaces_ = function interfaces_ () {
36150             return [Polygonal]
36151           };
36152           MultiPolygon.prototype.getClass = function getClass () {
36153             return MultiPolygon
36154           };
36155           staticAccessors.serialVersionUID.get = function () { return -551033529766975875 };
36156
36157           Object.defineProperties( MultiPolygon, staticAccessors );
36158
36159           return MultiPolygon;
36160         }(GeometryCollection));
36161
36162         var GeometryEditor = function GeometryEditor (factory) {
36163           this._factory = factory || null;
36164           this._isUserDataCopied = false;
36165         };
36166
36167         var staticAccessors$16 = { NoOpGeometryOperation: { configurable: true },CoordinateOperation: { configurable: true },CoordinateSequenceOperation: { configurable: true } };
36168         GeometryEditor.prototype.setCopyUserData = function setCopyUserData (isUserDataCopied) {
36169           this._isUserDataCopied = isUserDataCopied;
36170         };
36171         GeometryEditor.prototype.edit = function edit (geometry, operation) {
36172           if (geometry === null) { return null }
36173           var result = this.editInternal(geometry, operation);
36174           if (this._isUserDataCopied) {
36175             result.setUserData(geometry.getUserData());
36176           }
36177           return result
36178         };
36179         GeometryEditor.prototype.editInternal = function editInternal (geometry, operation) {
36180           if (this._factory === null) { this._factory = geometry.getFactory(); }
36181           if (geometry instanceof GeometryCollection) {
36182             return this.editGeometryCollection(geometry, operation)
36183           }
36184           if (geometry instanceof Polygon) {
36185             return this.editPolygon(geometry, operation)
36186           }
36187           if (geometry instanceof Point) {
36188             return operation.edit(geometry, this._factory)
36189           }
36190           if (geometry instanceof LineString) {
36191             return operation.edit(geometry, this._factory)
36192           }
36193           Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName());
36194           return null
36195         };
36196         GeometryEditor.prototype.editGeometryCollection = function editGeometryCollection (collection, operation) {
36197             var this$1 = this;
36198
36199           var collectionForType = operation.edit(collection, this._factory);
36200           var geometries = new ArrayList();
36201           for (var i = 0; i < collectionForType.getNumGeometries(); i++) {
36202             var geometry = this$1.edit(collectionForType.getGeometryN(i), operation);
36203             if (geometry === null || geometry.isEmpty()) {
36204               continue
36205             }
36206             geometries.add(geometry);
36207           }
36208           if (collectionForType.getClass() === MultiPoint) {
36209             return this._factory.createMultiPoint(geometries.toArray([]))
36210           }
36211           if (collectionForType.getClass() === MultiLineString) {
36212             return this._factory.createMultiLineString(geometries.toArray([]))
36213           }
36214           if (collectionForType.getClass() === MultiPolygon) {
36215             return this._factory.createMultiPolygon(geometries.toArray([]))
36216           }
36217           return this._factory.createGeometryCollection(geometries.toArray([]))
36218         };
36219         GeometryEditor.prototype.editPolygon = function editPolygon (polygon, operation) {
36220             var this$1 = this;
36221
36222           var newPolygon = operation.edit(polygon, this._factory);
36223           if (newPolygon === null) { newPolygon = this._factory.createPolygon(null); }
36224           if (newPolygon.isEmpty()) {
36225             return newPolygon
36226           }
36227           var shell = this.edit(newPolygon.getExteriorRing(), operation);
36228           if (shell === null || shell.isEmpty()) {
36229             return this._factory.createPolygon()
36230           }
36231           var holes = new ArrayList();
36232           for (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {
36233             var hole = this$1.edit(newPolygon.getInteriorRingN(i), operation);
36234             if (hole === null || hole.isEmpty()) {
36235               continue
36236             }
36237             holes.add(hole);
36238           }
36239           return this._factory.createPolygon(shell, holes.toArray([]))
36240         };
36241         GeometryEditor.prototype.interfaces_ = function interfaces_ () {
36242           return []
36243         };
36244         GeometryEditor.prototype.getClass = function getClass () {
36245           return GeometryEditor
36246         };
36247         GeometryEditor.GeometryEditorOperation = function GeometryEditorOperation () {};
36248         staticAccessors$16.NoOpGeometryOperation.get = function () { return NoOpGeometryOperation };
36249         staticAccessors$16.CoordinateOperation.get = function () { return CoordinateOperation };
36250         staticAccessors$16.CoordinateSequenceOperation.get = function () { return CoordinateSequenceOperation };
36251
36252         Object.defineProperties( GeometryEditor, staticAccessors$16 );
36253
36254         var NoOpGeometryOperation = function NoOpGeometryOperation () {};
36255
36256         NoOpGeometryOperation.prototype.edit = function edit (geometry, factory) {
36257           return geometry
36258         };
36259         NoOpGeometryOperation.prototype.interfaces_ = function interfaces_ () {
36260           return [GeometryEditor.GeometryEditorOperation]
36261         };
36262         NoOpGeometryOperation.prototype.getClass = function getClass () {
36263           return NoOpGeometryOperation
36264         };
36265
36266         var CoordinateOperation = function CoordinateOperation () {};
36267
36268         CoordinateOperation.prototype.edit = function edit (geometry, factory) {
36269           var coords = this.editCoordinates(geometry.getCoordinates(), geometry);
36270           if (coords === null) { return geometry }
36271           if (geometry instanceof LinearRing) {
36272             return factory.createLinearRing(coords)
36273           }
36274           if (geometry instanceof LineString) {
36275             return factory.createLineString(coords)
36276           }
36277           if (geometry instanceof Point) {
36278             if (coords.length > 0) {
36279               return factory.createPoint(coords[0])
36280             } else {
36281               return factory.createPoint()
36282             }
36283           }
36284           return geometry
36285         };
36286         CoordinateOperation.prototype.interfaces_ = function interfaces_ () {
36287           return [GeometryEditor.GeometryEditorOperation]
36288         };
36289         CoordinateOperation.prototype.getClass = function getClass () {
36290           return CoordinateOperation
36291         };
36292
36293         var CoordinateSequenceOperation = function CoordinateSequenceOperation () {};
36294
36295         CoordinateSequenceOperation.prototype.edit = function edit (geometry, factory) {
36296           if (geometry instanceof LinearRing) {
36297             return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))
36298           }
36299           if (geometry instanceof LineString) {
36300             return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))
36301           }
36302           if (geometry instanceof Point) {
36303             return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))
36304           }
36305           return geometry
36306         };
36307         CoordinateSequenceOperation.prototype.interfaces_ = function interfaces_ () {
36308           return [GeometryEditor.GeometryEditorOperation]
36309         };
36310         CoordinateSequenceOperation.prototype.getClass = function getClass () {
36311           return CoordinateSequenceOperation
36312         };
36313
36314         var CoordinateArraySequence = function CoordinateArraySequence () {
36315           var this$1 = this;
36316
36317           this._dimension = 3;
36318           this._coordinates = null;
36319           if (arguments.length === 1) {
36320             if (arguments[0] instanceof Array) {
36321               this._coordinates = arguments[0];
36322               this._dimension = 3;
36323             } else if (Number.isInteger(arguments[0])) {
36324               var size = arguments[0];
36325               this._coordinates = new Array(size).fill(null);
36326               for (var i = 0; i < size; i++) {
36327                 this$1._coordinates[i] = new Coordinate();
36328               }
36329             } else if (hasInterface(arguments[0], CoordinateSequence)) {
36330               var coordSeq = arguments[0];
36331               if (coordSeq === null) {
36332                 this._coordinates = new Array(0).fill(null);
36333                 return null
36334               }
36335               this._dimension = coordSeq.getDimension();
36336               this._coordinates = new Array(coordSeq.size()).fill(null);
36337               for (var i$1 = 0; i$1 < this._coordinates.length; i$1++) {
36338                 this$1._coordinates[i$1] = coordSeq.getCoordinateCopy(i$1);
36339               }
36340             }
36341           } else if (arguments.length === 2) {
36342             if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {
36343               var coordinates = arguments[0];
36344               var dimension = arguments[1];
36345               this._coordinates = coordinates;
36346               this._dimension = dimension;
36347               if (coordinates === null) { this._coordinates = new Array(0).fill(null); }
36348             } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {
36349               var size$1 = arguments[0];
36350               var dimension$1 = arguments[1];
36351               this._coordinates = new Array(size$1).fill(null);
36352               this._dimension = dimension$1;
36353               for (var i$2 = 0; i$2 < size$1; i$2++) {
36354                 this$1._coordinates[i$2] = new Coordinate();
36355               }
36356             }
36357           }
36358         };
36359
36360         var staticAccessors$18 = { serialVersionUID: { configurable: true } };
36361         CoordinateArraySequence.prototype.setOrdinate = function setOrdinate (index, ordinateIndex, value) {
36362           switch (ordinateIndex) {
36363             case CoordinateSequence.X:
36364               this._coordinates[index].x = value;
36365               break
36366             case CoordinateSequence.Y:
36367               this._coordinates[index].y = value;
36368               break
36369             case CoordinateSequence.Z:
36370               this._coordinates[index].z = value;
36371               break
36372             default:
36373               throw new IllegalArgumentException('invalid ordinateIndex')
36374           }
36375         };
36376         CoordinateArraySequence.prototype.size = function size () {
36377           return this._coordinates.length
36378         };
36379         CoordinateArraySequence.prototype.getOrdinate = function getOrdinate (index, ordinateIndex) {
36380           switch (ordinateIndex) {
36381             case CoordinateSequence.X:
36382               return this._coordinates[index].x
36383             case CoordinateSequence.Y:
36384               return this._coordinates[index].y
36385             case CoordinateSequence.Z:
36386               return this._coordinates[index].z
36387           }
36388           return Double.NaN
36389         };
36390         CoordinateArraySequence.prototype.getCoordinate = function getCoordinate () {
36391           if (arguments.length === 1) {
36392             var i = arguments[0];
36393             return this._coordinates[i]
36394           } else if (arguments.length === 2) {
36395             var index = arguments[0];
36396             var coord = arguments[1];
36397             coord.x = this._coordinates[index].x;
36398             coord.y = this._coordinates[index].y;
36399             coord.z = this._coordinates[index].z;
36400           }
36401         };
36402         CoordinateArraySequence.prototype.getCoordinateCopy = function getCoordinateCopy (i) {
36403           return new Coordinate(this._coordinates[i])
36404         };
36405         CoordinateArraySequence.prototype.getDimension = function getDimension () {
36406           return this._dimension
36407         };
36408         CoordinateArraySequence.prototype.getX = function getX (index) {
36409           return this._coordinates[index].x
36410         };
36411         CoordinateArraySequence.prototype.clone = function clone () {
36412             var this$1 = this;
36413
36414           var cloneCoordinates = new Array(this.size()).fill(null);
36415           for (var i = 0; i < this._coordinates.length; i++) {
36416             cloneCoordinates[i] = this$1._coordinates[i].clone();
36417           }
36418           return new CoordinateArraySequence(cloneCoordinates, this._dimension)
36419         };
36420         CoordinateArraySequence.prototype.expandEnvelope = function expandEnvelope (env) {
36421             var this$1 = this;
36422
36423           for (var i = 0; i < this._coordinates.length; i++) {
36424             env.expandToInclude(this$1._coordinates[i]);
36425           }
36426           return env
36427         };
36428         CoordinateArraySequence.prototype.copy = function copy () {
36429             var this$1 = this;
36430
36431           var cloneCoordinates = new Array(this.size()).fill(null);
36432           for (var i = 0; i < this._coordinates.length; i++) {
36433             cloneCoordinates[i] = this$1._coordinates[i].copy();
36434           }
36435           return new CoordinateArraySequence(cloneCoordinates, this._dimension)
36436         };
36437         CoordinateArraySequence.prototype.toString = function toString () {
36438             var this$1 = this;
36439
36440           if (this._coordinates.length > 0) {
36441             var strBuf = new StringBuffer(17 * this._coordinates.length);
36442             strBuf.append('(');
36443             strBuf.append(this._coordinates[0]);
36444             for (var i = 1; i < this._coordinates.length; i++) {
36445               strBuf.append(', ');
36446               strBuf.append(this$1._coordinates[i]);
36447             }
36448             strBuf.append(')');
36449             return strBuf.toString()
36450           } else {
36451             return '()'
36452           }
36453         };
36454         CoordinateArraySequence.prototype.getY = function getY (index) {
36455           return this._coordinates[index].y
36456         };
36457         CoordinateArraySequence.prototype.toCoordinateArray = function toCoordinateArray () {
36458           return this._coordinates
36459         };
36460         CoordinateArraySequence.prototype.interfaces_ = function interfaces_ () {
36461           return [CoordinateSequence, Serializable]
36462         };
36463         CoordinateArraySequence.prototype.getClass = function getClass () {
36464           return CoordinateArraySequence
36465         };
36466         staticAccessors$18.serialVersionUID.get = function () { return -915438501601840650 };
36467
36468         Object.defineProperties( CoordinateArraySequence, staticAccessors$18 );
36469
36470         var CoordinateArraySequenceFactory = function CoordinateArraySequenceFactory () {};
36471
36472         var staticAccessors$17 = { serialVersionUID: { configurable: true },instanceObject: { configurable: true } };
36473
36474         CoordinateArraySequenceFactory.prototype.readResolve = function readResolve () {
36475           return CoordinateArraySequenceFactory.instance()
36476         };
36477         CoordinateArraySequenceFactory.prototype.create = function create () {
36478           if (arguments.length === 1) {
36479             if (arguments[0] instanceof Array) {
36480               var coordinates = arguments[0];
36481               return new CoordinateArraySequence(coordinates)
36482             } else if (hasInterface(arguments[0], CoordinateSequence)) {
36483               var coordSeq = arguments[0];
36484               return new CoordinateArraySequence(coordSeq)
36485             }
36486           } else if (arguments.length === 2) {
36487             var size = arguments[0];
36488             var dimension = arguments[1];
36489             if (dimension > 3) { dimension = 3; }
36490             if (dimension < 2) { return new CoordinateArraySequence(size) }
36491             return new CoordinateArraySequence(size, dimension)
36492           }
36493         };
36494         CoordinateArraySequenceFactory.prototype.interfaces_ = function interfaces_ () {
36495           return [CoordinateSequenceFactory, Serializable]
36496         };
36497         CoordinateArraySequenceFactory.prototype.getClass = function getClass () {
36498           return CoordinateArraySequenceFactory
36499         };
36500         CoordinateArraySequenceFactory.instance = function instance () {
36501           return CoordinateArraySequenceFactory.instanceObject
36502         };
36503
36504         staticAccessors$17.serialVersionUID.get = function () { return -4099577099607551657 };
36505         staticAccessors$17.instanceObject.get = function () { return new CoordinateArraySequenceFactory() };
36506
36507         Object.defineProperties( CoordinateArraySequenceFactory, staticAccessors$17 );
36508
36509         /**
36510          * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html
36511          *
36512          * @extends {javascript.util.Map}
36513          * @constructor
36514          * @private
36515          */
36516         var HashMap = (function (MapInterface) {
36517           function HashMap () {
36518             MapInterface.call(this);
36519             this.map_ = new Map();
36520           }
36521
36522           if ( MapInterface ) { HashMap.__proto__ = MapInterface; }
36523           HashMap.prototype = Object.create( MapInterface && MapInterface.prototype );
36524           HashMap.prototype.constructor = HashMap;
36525           /**
36526            * @override
36527            */
36528           HashMap.prototype.get = function get (key) {
36529             return this.map_.get(key) || null
36530           };
36531
36532           /**
36533            * @override
36534            */
36535           HashMap.prototype.put = function put (key, value) {
36536             this.map_.set(key, value);
36537             return value
36538           };
36539
36540           /**
36541            * @override
36542            */
36543           HashMap.prototype.values = function values () {
36544             var arrayList = new ArrayList();
36545             var it = this.map_.values();
36546             var o = it.next();
36547             while (!o.done) {
36548               arrayList.add(o.value);
36549               o = it.next();
36550             }
36551             return arrayList
36552           };
36553
36554           /**
36555            * @override
36556            */
36557           HashMap.prototype.entrySet = function entrySet () {
36558             var hashSet = new HashSet();
36559             this.map_.entries().forEach(function (entry) { return hashSet.add(entry); });
36560             return hashSet
36561           };
36562
36563           /**
36564            * @override
36565            */
36566           HashMap.prototype.size = function size () {
36567             return this.map_.size()
36568           };
36569
36570           return HashMap;
36571         }(Map$1$1));
36572
36573         var PrecisionModel = function PrecisionModel () {
36574           this._modelType = null;
36575           this._scale = null;
36576           if (arguments.length === 0) {
36577             this._modelType = PrecisionModel.FLOATING;
36578           } else if (arguments.length === 1) {
36579             if (arguments[0] instanceof Type$3) {
36580               var modelType = arguments[0];
36581               this._modelType = modelType;
36582               if (modelType === PrecisionModel.FIXED) {
36583                 this.setScale(1.0);
36584               }
36585             } else if (typeof arguments[0] === 'number') {
36586               var scale = arguments[0];
36587               this._modelType = PrecisionModel.FIXED;
36588               this.setScale(scale);
36589             } else if (arguments[0] instanceof PrecisionModel) {
36590               var pm = arguments[0];
36591               this._modelType = pm._modelType;
36592               this._scale = pm._scale;
36593             }
36594           }
36595         };
36596
36597         var staticAccessors$19 = { serialVersionUID: { configurable: true },maximumPreciseValue: { configurable: true } };
36598         PrecisionModel.prototype.equals = function equals (other) {
36599           if (!(other instanceof PrecisionModel)) {
36600             return false
36601           }
36602           var otherPrecisionModel = other;
36603           return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale
36604         };
36605         PrecisionModel.prototype.compareTo = function compareTo (o) {
36606           var other = o;
36607           var sigDigits = this.getMaximumSignificantDigits();
36608           var otherSigDigits = other.getMaximumSignificantDigits();
36609           return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))
36610         };
36611         PrecisionModel.prototype.getScale = function getScale () {
36612           return this._scale
36613         };
36614         PrecisionModel.prototype.isFloating = function isFloating () {
36615           return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE
36616         };
36617         PrecisionModel.prototype.getType = function getType () {
36618           return this._modelType
36619         };
36620         PrecisionModel.prototype.toString = function toString () {
36621           var description = 'UNKNOWN';
36622           if (this._modelType === PrecisionModel.FLOATING) {
36623             description = 'Floating';
36624           } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
36625             description = 'Floating-Single';
36626           } else if (this._modelType === PrecisionModel.FIXED) {
36627             description = 'Fixed (Scale=' + this.getScale() + ')';
36628           }
36629           return description
36630         };
36631         PrecisionModel.prototype.makePrecise = function makePrecise () {
36632           if (typeof arguments[0] === 'number') {
36633             var val = arguments[0];
36634             if (Double.isNaN(val)) { return val }
36635             if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
36636               var floatSingleVal = val;
36637               return floatSingleVal
36638             }
36639             if (this._modelType === PrecisionModel.FIXED) {
36640               return Math.round(val * this._scale) / this._scale
36641             }
36642             return val
36643           } else if (arguments[0] instanceof Coordinate) {
36644             var coord = arguments[0];
36645             if (this._modelType === PrecisionModel.FLOATING) { return null }
36646             coord.x = this.makePrecise(coord.x);
36647             coord.y = this.makePrecise(coord.y);
36648           }
36649         };
36650         PrecisionModel.prototype.getMaximumSignificantDigits = function getMaximumSignificantDigits () {
36651           var maxSigDigits = 16;
36652           if (this._modelType === PrecisionModel.FLOATING) {
36653             maxSigDigits = 16;
36654           } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {
36655             maxSigDigits = 6;
36656           } else if (this._modelType === PrecisionModel.FIXED) {
36657             maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));
36658           }
36659           return maxSigDigits
36660         };
36661         PrecisionModel.prototype.setScale = function setScale (scale) {
36662           this._scale = Math.abs(scale);
36663         };
36664         PrecisionModel.prototype.interfaces_ = function interfaces_ () {
36665           return [Serializable, Comparable]
36666         };
36667         PrecisionModel.prototype.getClass = function getClass () {
36668           return PrecisionModel
36669         };
36670         PrecisionModel.mostPrecise = function mostPrecise (pm1, pm2) {
36671           if (pm1.compareTo(pm2) >= 0) { return pm1 }
36672           return pm2
36673         };
36674         staticAccessors$19.serialVersionUID.get = function () { return 7777263578777803835 };
36675         staticAccessors$19.maximumPreciseValue.get = function () { return 9007199254740992.0 };
36676
36677         Object.defineProperties( PrecisionModel, staticAccessors$19 );
36678
36679         var Type$3 = function Type (name) {
36680           this._name = name || null;
36681           Type.nameToTypeMap.put(name, this);
36682         };
36683
36684         var staticAccessors$1$1 = { serialVersionUID: { configurable: true },nameToTypeMap: { configurable: true } };
36685         Type$3.prototype.readResolve = function readResolve () {
36686           return Type$3.nameToTypeMap.get(this._name)
36687         };
36688         Type$3.prototype.toString = function toString () {
36689           return this._name
36690         };
36691         Type$3.prototype.interfaces_ = function interfaces_ () {
36692           return [Serializable]
36693         };
36694         Type$3.prototype.getClass = function getClass () {
36695           return Type$3
36696         };
36697         staticAccessors$1$1.serialVersionUID.get = function () { return -5528602631731589822 };
36698         staticAccessors$1$1.nameToTypeMap.get = function () { return new HashMap() };
36699
36700         Object.defineProperties( Type$3, staticAccessors$1$1 );
36701
36702         PrecisionModel.Type = Type$3;
36703         PrecisionModel.FIXED = new Type$3('FIXED');
36704         PrecisionModel.FLOATING = new Type$3('FLOATING');
36705         PrecisionModel.FLOATING_SINGLE = new Type$3('FLOATING SINGLE');
36706
36707         var GeometryFactory = function GeometryFactory () {
36708           this._precisionModel = new PrecisionModel();
36709           this._SRID = 0;
36710           this._coordinateSequenceFactory = GeometryFactory.getDefaultCoordinateSequenceFactory();
36711
36712           if (arguments.length === 0) ; else if (arguments.length === 1) {
36713             if (hasInterface(arguments[0], CoordinateSequenceFactory)) {
36714               this._coordinateSequenceFactory = arguments[0];
36715             } else if (arguments[0] instanceof PrecisionModel) {
36716               this._precisionModel = arguments[0];
36717             }
36718           } else if (arguments.length === 2) {
36719             this._precisionModel = arguments[0];
36720             this._SRID = arguments[1];
36721           } else if (arguments.length === 3) {
36722             this._precisionModel = arguments[0];
36723             this._SRID = arguments[1];
36724             this._coordinateSequenceFactory = arguments[2];
36725           }
36726         };
36727
36728         var staticAccessors$2 = { serialVersionUID: { configurable: true } };
36729         GeometryFactory.prototype.toGeometry = function toGeometry (envelope) {
36730           if (envelope.isNull()) {
36731             return this.createPoint(null)
36732           }
36733           if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {
36734             return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))
36735           }
36736           if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {
36737             return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])
36738           }
36739           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)
36740         };
36741         GeometryFactory.prototype.createLineString = function createLineString (coordinates) {
36742           if (!coordinates) { return new LineString(this.getCoordinateSequenceFactory().create([]), this) }
36743           else if (coordinates instanceof Array) { return new LineString(this.getCoordinateSequenceFactory().create(coordinates), this) }
36744           else if (hasInterface(coordinates, CoordinateSequence)) { return new LineString(coordinates, this) }
36745         };
36746         GeometryFactory.prototype.createMultiLineString = function createMultiLineString () {
36747           if (arguments.length === 0) {
36748             return new MultiLineString(null, this)
36749           } else if (arguments.length === 1) {
36750             var lineStrings = arguments[0];
36751             return new MultiLineString(lineStrings, this)
36752           }
36753         };
36754         GeometryFactory.prototype.buildGeometry = function buildGeometry (geomList) {
36755           var geomClass = null;
36756           var isHeterogeneous = false;
36757           var hasGeometryCollection = false;
36758           for (var i = geomList.iterator(); i.hasNext();) {
36759             var geom = i.next();
36760             var partClass = geom.getClass();
36761             if (geomClass === null) {
36762               geomClass = partClass;
36763             }
36764             if (partClass !== geomClass) {
36765               isHeterogeneous = true;
36766             }
36767             if (geom.isGeometryCollectionOrDerived()) { hasGeometryCollection = true; }
36768           }
36769           if (geomClass === null) {
36770             return this.createGeometryCollection()
36771           }
36772           if (isHeterogeneous || hasGeometryCollection) {
36773             return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))
36774           }
36775           var geom0 = geomList.iterator().next();
36776           var isCollection = geomList.size() > 1;
36777           if (isCollection) {
36778             if (geom0 instanceof Polygon) {
36779               return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))
36780             } else if (geom0 instanceof LineString) {
36781               return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))
36782             } else if (geom0 instanceof Point) {
36783               return this.createMultiPoint(GeometryFactory.toPointArray(geomList))
36784             }
36785             Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName());
36786           }
36787           return geom0
36788         };
36789         GeometryFactory.prototype.createMultiPointFromCoords = function createMultiPointFromCoords (coordinates) {
36790           return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
36791         };
36792         GeometryFactory.prototype.createPoint = function createPoint () {
36793           if (arguments.length === 0) {
36794             return this.createPoint(this.getCoordinateSequenceFactory().create([]))
36795           } else if (arguments.length === 1) {
36796             if (arguments[0] instanceof Coordinate) {
36797               var coordinate = arguments[0];
36798               return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)
36799             } else if (hasInterface(arguments[0], CoordinateSequence)) {
36800               var coordinates = arguments[0];
36801               return new Point(coordinates, this)
36802             }
36803           }
36804         };
36805         GeometryFactory.prototype.getCoordinateSequenceFactory = function getCoordinateSequenceFactory () {
36806           return this._coordinateSequenceFactory
36807         };
36808         GeometryFactory.prototype.createPolygon = function createPolygon () {
36809           if (arguments.length === 0) {
36810             return new Polygon(null, null, this)
36811           } else if (arguments.length === 1) {
36812             if (hasInterface(arguments[0], CoordinateSequence)) {
36813               var coordinates = arguments[0];
36814               return this.createPolygon(this.createLinearRing(coordinates))
36815             } else if (arguments[0] instanceof Array) {
36816               var coordinates$1 = arguments[0];
36817               return this.createPolygon(this.createLinearRing(coordinates$1))
36818             } else if (arguments[0] instanceof LinearRing) {
36819               var shell = arguments[0];
36820               return this.createPolygon(shell, null)
36821             }
36822           } else if (arguments.length === 2) {
36823             var shell$1 = arguments[0];
36824             var holes = arguments[1];
36825             return new Polygon(shell$1, holes, this)
36826           }
36827         };
36828         GeometryFactory.prototype.getSRID = function getSRID () {
36829           return this._SRID
36830         };
36831         GeometryFactory.prototype.createGeometryCollection = function createGeometryCollection () {
36832           if (arguments.length === 0) {
36833             return new GeometryCollection(null, this)
36834           } else if (arguments.length === 1) {
36835             var geometries = arguments[0];
36836             return new GeometryCollection(geometries, this)
36837           }
36838         };
36839         GeometryFactory.prototype.createGeometry = function createGeometry (g) {
36840           var editor = new GeometryEditor(this);
36841           return editor.edit(g, {
36842             edit: function () {
36843               if (arguments.length === 2) {
36844                 var coordSeq = arguments[0];
36845                 // const geometry = arguments[1]
36846                 return this._coordinateSequenceFactory.create(coordSeq)
36847               }
36848             }
36849           })
36850         };
36851         GeometryFactory.prototype.getPrecisionModel = function getPrecisionModel () {
36852           return this._precisionModel
36853         };
36854         GeometryFactory.prototype.createLinearRing = function createLinearRing () {
36855           if (arguments.length === 0) {
36856             return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))
36857           } else if (arguments.length === 1) {
36858             if (arguments[0] instanceof Array) {
36859               var coordinates = arguments[0];
36860               return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
36861             } else if (hasInterface(arguments[0], CoordinateSequence)) {
36862               var coordinates$1 = arguments[0];
36863               return new LinearRing(coordinates$1, this)
36864             }
36865           }
36866         };
36867         GeometryFactory.prototype.createMultiPolygon = function createMultiPolygon () {
36868           if (arguments.length === 0) {
36869             return new MultiPolygon(null, this)
36870           } else if (arguments.length === 1) {
36871             var polygons = arguments[0];
36872             return new MultiPolygon(polygons, this)
36873           }
36874         };
36875         GeometryFactory.prototype.createMultiPoint = function createMultiPoint () {
36876             var this$1 = this;
36877
36878           if (arguments.length === 0) {
36879             return new MultiPoint(null, this)
36880           } else if (arguments.length === 1) {
36881             if (arguments[0] instanceof Array) {
36882               var point = arguments[0];
36883               return new MultiPoint(point, this)
36884             } else if (arguments[0] instanceof Array) {
36885               var coordinates = arguments[0];
36886               return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)
36887             } else if (hasInterface(arguments[0], CoordinateSequence)) {
36888               var coordinates$1 = arguments[0];
36889               if (coordinates$1 === null) {
36890                 return this.createMultiPoint(new Array(0).fill(null))
36891               }
36892               var points = new Array(coordinates$1.size()).fill(null);
36893               for (var i = 0; i < coordinates$1.size(); i++) {
36894                 var ptSeq = this$1.getCoordinateSequenceFactory().create(1, coordinates$1.getDimension());
36895                 CoordinateSequences.copy(coordinates$1, i, ptSeq, 0, 1);
36896                 points[i] = this$1.createPoint(ptSeq);
36897               }
36898               return this.createMultiPoint(points)
36899             }
36900           }
36901         };
36902         GeometryFactory.prototype.interfaces_ = function interfaces_ () {
36903           return [Serializable]
36904         };
36905         GeometryFactory.prototype.getClass = function getClass () {
36906           return GeometryFactory
36907         };
36908         GeometryFactory.toMultiPolygonArray = function toMultiPolygonArray (multiPolygons) {
36909           var multiPolygonArray = new Array(multiPolygons.size()).fill(null);
36910           return multiPolygons.toArray(multiPolygonArray)
36911         };
36912         GeometryFactory.toGeometryArray = function toGeometryArray (geometries) {
36913           if (geometries === null) { return null }
36914           var geometryArray = new Array(geometries.size()).fill(null);
36915           return geometries.toArray(geometryArray)
36916         };
36917         GeometryFactory.getDefaultCoordinateSequenceFactory = function getDefaultCoordinateSequenceFactory () {
36918           return CoordinateArraySequenceFactory.instance()
36919         };
36920         GeometryFactory.toMultiLineStringArray = function toMultiLineStringArray (multiLineStrings) {
36921           var multiLineStringArray = new Array(multiLineStrings.size()).fill(null);
36922           return multiLineStrings.toArray(multiLineStringArray)
36923         };
36924         GeometryFactory.toLineStringArray = function toLineStringArray (lineStrings) {
36925           var lineStringArray = new Array(lineStrings.size()).fill(null);
36926           return lineStrings.toArray(lineStringArray)
36927         };
36928         GeometryFactory.toMultiPointArray = function toMultiPointArray (multiPoints) {
36929           var multiPointArray = new Array(multiPoints.size()).fill(null);
36930           return multiPoints.toArray(multiPointArray)
36931         };
36932         GeometryFactory.toLinearRingArray = function toLinearRingArray (linearRings) {
36933           var linearRingArray = new Array(linearRings.size()).fill(null);
36934           return linearRings.toArray(linearRingArray)
36935         };
36936         GeometryFactory.toPointArray = function toPointArray (points) {
36937           var pointArray = new Array(points.size()).fill(null);
36938           return points.toArray(pointArray)
36939         };
36940         GeometryFactory.toPolygonArray = function toPolygonArray (polygons) {
36941           var polygonArray = new Array(polygons.size()).fill(null);
36942           return polygons.toArray(polygonArray)
36943         };
36944         GeometryFactory.createPointFromInternalCoord = function createPointFromInternalCoord (coord, exemplar) {
36945           exemplar.getPrecisionModel().makePrecise(coord);
36946           return exemplar.getFactory().createPoint(coord)
36947         };
36948         staticAccessors$2.serialVersionUID.get = function () { return -6820524753094095635 };
36949
36950         Object.defineProperties( GeometryFactory, staticAccessors$2 );
36951
36952         var geometryTypes = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'];
36953
36954         /**
36955          * Class for reading and writing Well-Known Text.Create a new parser for GeoJSON
36956          * NOTE: Adapted from OpenLayers 2.11 implementation.
36957          */
36958
36959         /**
36960          * Create a new parser for GeoJSON
36961          *
36962          * @param {GeometryFactory} geometryFactory
36963          * @return An instance of GeoJsonParser.
36964          * @constructor
36965          * @private
36966          */
36967         var GeoJSONParser = function GeoJSONParser (geometryFactory) {
36968           this.geometryFactory = geometryFactory || new GeometryFactory();
36969         };
36970         /**
36971          * Deserialize a GeoJSON object and return the Geometry or Feature(Collection) with JSTS Geometries
36972          *
36973          * @param {}
36974          *        A GeoJSON object.
36975          * @return {} A Geometry instance or object representing a Feature(Collection) with Geometry instances.
36976          * @private
36977          */
36978         GeoJSONParser.prototype.read = function read (json) {
36979           var obj;
36980           if (typeof json === 'string') {
36981             obj = JSON.parse(json);
36982           } else {
36983             obj = json;
36984           }
36985
36986           var type = obj.type;
36987
36988           if (!parse[type]) {
36989             throw new Error('Unknown GeoJSON type: ' + obj.type)
36990           }
36991
36992           if (geometryTypes.indexOf(type) !== -1) {
36993             return parse[type].apply(this, [obj.coordinates])
36994           } else if (type === 'GeometryCollection') {
36995             return parse[type].apply(this, [obj.geometries])
36996           }
36997
36998           // feature or feature collection
36999           return parse[type].apply(this, [obj])
37000         };
37001
37002         /**
37003          * Serialize a Geometry object into GeoJSON
37004          *
37005          * @param {Geometry}
37006          *        geometry A Geometry or array of Geometries.
37007          * @return {Object} A GeoJSON object represting the input Geometry/Geometries.
37008          * @private
37009          */
37010         GeoJSONParser.prototype.write = function write (geometry) {
37011           var type = geometry.getGeometryType();
37012
37013           if (!extract[type]) {
37014             throw new Error('Geometry is not supported')
37015           }
37016
37017           return extract[type].apply(this, [geometry])
37018         };
37019
37020         var parse = {
37021           /**
37022            * Parse a GeoJSON Feature object
37023            *
37024            * @param {Object}
37025            *          obj Object to parse.
37026            *
37027            * @return {Object} Feature with geometry/bbox converted to JSTS Geometries.
37028            */
37029           Feature: function (obj) {
37030             var feature = {};
37031
37032             // copy features
37033             for (var key in obj) {
37034               feature[key] = obj[key];
37035             }
37036
37037             // parse geometry
37038             if (obj.geometry) {
37039               var type = obj.geometry.type;
37040               if (!parse[type]) {
37041                 throw new Error('Unknown GeoJSON type: ' + obj.type)
37042               }
37043               feature.geometry = this.read(obj.geometry);
37044             }
37045
37046             // bbox
37047             if (obj.bbox) {
37048               feature.bbox = parse.bbox.apply(this, [obj.bbox]);
37049             }
37050
37051             return feature
37052           },
37053
37054           /**
37055            * Parse a GeoJSON FeatureCollection object
37056            *
37057            * @param {Object}
37058            *          obj Object to parse.
37059            *
37060            * @return {Object} FeatureCollection with geometry/bbox converted to JSTS Geometries.
37061            */
37062           FeatureCollection: function (obj) {
37063             var this$1 = this;
37064
37065             var featureCollection = {};
37066
37067             if (obj.features) {
37068               featureCollection.features = [];
37069
37070               for (var i = 0; i < obj.features.length; ++i) {
37071                 featureCollection.features.push(this$1.read(obj.features[i]));
37072               }
37073             }
37074
37075             if (obj.bbox) {
37076               featureCollection.bbox = this.parse.bbox.apply(this, [obj.bbox]);
37077             }
37078
37079             return featureCollection
37080           },
37081
37082           /**
37083            * Convert the ordinates in an array to an array of Coordinates
37084            *
37085            * @param {Array}
37086            *          array Array with {Number}s.
37087            *
37088            * @return {Array} Array with Coordinates.
37089            */
37090           coordinates: function (array) {
37091             var coordinates = [];
37092             for (var i = 0; i < array.length; ++i) {
37093               var sub = array[i];
37094               coordinates.push(new Coordinate(sub[0], sub[1]));
37095             }
37096             return coordinates
37097           },
37098
37099           /**
37100            * Convert the bbox to a LinearRing
37101            *
37102            * @param {Array}
37103            *          array Array with [xMin, yMin, xMax, yMax].
37104            *
37105            * @return {Array} Array with Coordinates.
37106            */
37107           bbox: function (array) {
37108             return this.geometryFactory.createLinearRing([
37109               new Coordinate(array[0], array[1]),
37110               new Coordinate(array[2], array[1]),
37111               new Coordinate(array[2], array[3]),
37112               new Coordinate(array[0], array[3]),
37113               new Coordinate(array[0], array[1])
37114             ])
37115           },
37116
37117           /**
37118            * Convert an Array with ordinates to a Point
37119            *
37120            * @param {Array}
37121            *          array Array with ordinates.
37122            *
37123            * @return {Point} Point.
37124            */
37125           Point: function (array) {
37126             var coordinate = new Coordinate(array[0], array[1]);
37127             return this.geometryFactory.createPoint(coordinate)
37128           },
37129
37130           /**
37131            * Convert an Array with coordinates to a MultiPoint
37132            *
37133            * @param {Array}
37134            *          array Array with coordinates.
37135            *
37136            * @return {MultiPoint} MultiPoint.
37137            */
37138           MultiPoint: function (array) {
37139             var this$1 = this;
37140
37141             var points = [];
37142             for (var i = 0; i < array.length; ++i) {
37143               points.push(parse.Point.apply(this$1, [array[i]]));
37144             }
37145             return this.geometryFactory.createMultiPoint(points)
37146           },
37147
37148           /**
37149            * Convert an Array with coordinates to a LineString
37150            *
37151            * @param {Array}
37152            *          array Array with coordinates.
37153            *
37154            * @return {LineString} LineString.
37155            */
37156           LineString: function (array) {
37157             var coordinates = parse.coordinates.apply(this, [array]);
37158             return this.geometryFactory.createLineString(coordinates)
37159           },
37160
37161           /**
37162            * Convert an Array with coordinates to a MultiLineString
37163            *
37164            * @param {Array}
37165            *          array Array with coordinates.
37166            *
37167            * @return {MultiLineString} MultiLineString.
37168            */
37169           MultiLineString: function (array) {
37170             var this$1 = this;
37171
37172             var lineStrings = [];
37173             for (var i = 0; i < array.length; ++i) {
37174               lineStrings.push(parse.LineString.apply(this$1, [array[i]]));
37175             }
37176             return this.geometryFactory.createMultiLineString(lineStrings)
37177           },
37178
37179           /**
37180            * Convert an Array to a Polygon
37181            *
37182            * @param {Array}
37183            *          array Array with shell and holes.
37184            *
37185            * @return {Polygon} Polygon.
37186            */
37187           Polygon: function (array) {
37188             var this$1 = this;
37189
37190             var shellCoordinates = parse.coordinates.apply(this, [array[0]]);
37191             var shell = this.geometryFactory.createLinearRing(shellCoordinates);
37192             var holes = [];
37193             for (var i = 1; i < array.length; ++i) {
37194               var hole = array[i];
37195               var coordinates = parse.coordinates.apply(this$1, [hole]);
37196               var linearRing = this$1.geometryFactory.createLinearRing(coordinates);
37197               holes.push(linearRing);
37198             }
37199             return this.geometryFactory.createPolygon(shell, holes)
37200           },
37201
37202           /**
37203            * Convert an Array to a MultiPolygon
37204            *
37205            * @param {Array}
37206            *          array Array of arrays with shell and rings.
37207            *
37208            * @return {MultiPolygon} MultiPolygon.
37209            */
37210           MultiPolygon: function (array) {
37211             var this$1 = this;
37212
37213             var polygons = [];
37214             for (var i = 0; i < array.length; ++i) {
37215               var polygon = array[i];
37216               polygons.push(parse.Polygon.apply(this$1, [polygon]));
37217             }
37218             return this.geometryFactory.createMultiPolygon(polygons)
37219           },
37220
37221           /**
37222            * Convert an Array to a GeometryCollection
37223            *
37224            * @param {Array}
37225            *          array Array of GeoJSON geometries.
37226            *
37227            * @return {GeometryCollection} GeometryCollection.
37228            */
37229           GeometryCollection: function (array) {
37230             var this$1 = this;
37231
37232             var geometries = [];
37233             for (var i = 0; i < array.length; ++i) {
37234               var geometry = array[i];
37235               geometries.push(this$1.read(geometry));
37236             }
37237             return this.geometryFactory.createGeometryCollection(geometries)
37238           }
37239         };
37240
37241         var extract = {
37242           /**
37243            * Convert a Coordinate to an Array
37244            *
37245            * @param {Coordinate}
37246            *          coordinate Coordinate to convert.
37247            *
37248            * @return {Array} Array of ordinates.
37249            */
37250           coordinate: function (coordinate) {
37251             return [coordinate.x, coordinate.y]
37252           },
37253
37254           /**
37255            * Convert a Point to a GeoJSON object
37256            *
37257            * @param {Point}
37258            *          point Point to convert.
37259            *
37260            * @return {Array} Array of 2 ordinates (paired to a coordinate).
37261            */
37262           Point: function (point) {
37263             var array = extract.coordinate.apply(this, [point.getCoordinate()]);
37264             return {
37265               type: 'Point',
37266               coordinates: array
37267             }
37268           },
37269
37270           /**
37271            * Convert a MultiPoint to a GeoJSON object
37272            *
37273            * @param {MultiPoint}
37274            *          multipoint MultiPoint to convert.
37275            *
37276            * @return {Array} Array of coordinates.
37277            */
37278           MultiPoint: function (multipoint) {
37279             var this$1 = this;
37280
37281             var array = [];
37282             for (var i = 0; i < multipoint._geometries.length; ++i) {
37283               var point = multipoint._geometries[i];
37284               var geoJson = extract.Point.apply(this$1, [point]);
37285               array.push(geoJson.coordinates);
37286             }
37287             return {
37288               type: 'MultiPoint',
37289               coordinates: array
37290             }
37291           },
37292
37293           /**
37294            * Convert a LineString to a GeoJSON object
37295            *
37296            * @param {LineString}
37297            *          linestring LineString to convert.
37298            *
37299            * @return {Array} Array of coordinates.
37300            */
37301           LineString: function (linestring) {
37302             var this$1 = this;
37303
37304             var array = [];
37305             var coordinates = linestring.getCoordinates();
37306             for (var i = 0; i < coordinates.length; ++i) {
37307               var coordinate = coordinates[i];
37308               array.push(extract.coordinate.apply(this$1, [coordinate]));
37309             }
37310             return {
37311               type: 'LineString',
37312               coordinates: array
37313             }
37314           },
37315
37316           /**
37317            * Convert a MultiLineString to a GeoJSON object
37318            *
37319            * @param {MultiLineString}
37320            *          multilinestring MultiLineString to convert.
37321            *
37322            * @return {Array} Array of Array of coordinates.
37323            */
37324           MultiLineString: function (multilinestring) {
37325             var this$1 = this;
37326
37327             var array = [];
37328             for (var i = 0; i < multilinestring._geometries.length; ++i) {
37329               var linestring = multilinestring._geometries[i];
37330               var geoJson = extract.LineString.apply(this$1, [linestring]);
37331               array.push(geoJson.coordinates);
37332             }
37333             return {
37334               type: 'MultiLineString',
37335               coordinates: array
37336             }
37337           },
37338
37339           /**
37340            * Convert a Polygon to a GeoJSON object
37341            *
37342            * @param {Polygon}
37343            *          polygon Polygon to convert.
37344            *
37345            * @return {Array} Array with shell, holes.
37346            */
37347           Polygon: function (polygon) {
37348             var this$1 = this;
37349
37350             var array = [];
37351             var shellGeoJson = extract.LineString.apply(this, [polygon._shell]);
37352             array.push(shellGeoJson.coordinates);
37353             for (var i = 0; i < polygon._holes.length; ++i) {
37354               var hole = polygon._holes[i];
37355               var holeGeoJson = extract.LineString.apply(this$1, [hole]);
37356               array.push(holeGeoJson.coordinates);
37357             }
37358             return {
37359               type: 'Polygon',
37360               coordinates: array
37361             }
37362           },
37363
37364           /**
37365            * Convert a MultiPolygon to a GeoJSON object
37366            *
37367            * @param {MultiPolygon}
37368            *          multipolygon MultiPolygon to convert.
37369            *
37370            * @return {Array} Array of polygons.
37371            */
37372           MultiPolygon: function (multipolygon) {
37373             var this$1 = this;
37374
37375             var array = [];
37376             for (var i = 0; i < multipolygon._geometries.length; ++i) {
37377               var polygon = multipolygon._geometries[i];
37378               var geoJson = extract.Polygon.apply(this$1, [polygon]);
37379               array.push(geoJson.coordinates);
37380             }
37381             return {
37382               type: 'MultiPolygon',
37383               coordinates: array
37384             }
37385           },
37386
37387           /**
37388            * Convert a GeometryCollection to a GeoJSON object
37389            *
37390            * @param {GeometryCollection}
37391            *          collection GeometryCollection to convert.
37392            *
37393            * @return {Array} Array of geometries.
37394            */
37395           GeometryCollection: function (collection) {
37396             var this$1 = this;
37397
37398             var array = [];
37399             for (var i = 0; i < collection._geometries.length; ++i) {
37400               var geometry = collection._geometries[i];
37401               var type = geometry.getGeometryType();
37402               array.push(extract[type].apply(this$1, [geometry]));
37403             }
37404             return {
37405               type: 'GeometryCollection',
37406               geometries: array
37407             }
37408           }
37409         };
37410
37411         /**
37412          * Converts a geometry in GeoJSON to a {@link Geometry}.
37413          */
37414
37415         /**
37416          * A <code>GeoJSONReader</code> is parameterized by a <code>GeometryFactory</code>,
37417          * to allow it to create <code>Geometry</code> objects of the appropriate
37418          * implementation. In particular, the <code>GeometryFactory</code> determines
37419          * the <code>PrecisionModel</code> and <code>SRID</code> that is used.
37420          *
37421          * @param {GeometryFactory} geometryFactory
37422          * @constructor
37423          */
37424         var GeoJSONReader = function GeoJSONReader (geometryFactory) {
37425           this.geometryFactory = geometryFactory || new GeometryFactory();
37426           this.precisionModel = this.geometryFactory.getPrecisionModel();
37427           this.parser = new GeoJSONParser(this.geometryFactory);
37428         };
37429         /**
37430          * Reads a GeoJSON representation of a {@link Geometry}
37431          *
37432          * Will also parse GeoJSON Features/FeatureCollections as custom objects.
37433          *
37434          * @param {Object|String} geoJson a GeoJSON Object or String.
37435          * @return {Geometry|Object} a <code>Geometry or Feature/FeatureCollection representation.</code>
37436          * @memberof GeoJSONReader
37437          */
37438         GeoJSONReader.prototype.read = function read (geoJson) {
37439           var geometry = this.parser.read(geoJson);
37440
37441           if (this.precisionModel.getType() === PrecisionModel.FIXED) {
37442             this.reducePrecision(geometry);
37443           }
37444
37445           return geometry
37446         };
37447
37448         // NOTE: this is a hack
37449         GeoJSONReader.prototype.reducePrecision = function reducePrecision (geometry) {
37450             var this$1 = this;
37451
37452           var i, len;
37453
37454           if (geometry.coordinate) {
37455             this.precisionModel.makePrecise(geometry.coordinate);
37456           } else if (geometry.points) {
37457             for (i = 0, len = geometry.points.length; i < len; i++) {
37458               this$1.precisionModel.makePrecise(geometry.points[i]);
37459             }
37460           } else if (geometry.geometries) {
37461             for (i = 0, len = geometry.geometries.length; i < len; i++) {
37462               this$1.reducePrecision(geometry.geometries[i]);
37463             }
37464           }
37465         };
37466
37467         /**
37468          * @module GeoJSONWriter
37469          */
37470
37471         /**
37472          * Writes the GeoJSON representation of a {@link Geometry}. The
37473          * The GeoJSON format is defined <A
37474          * HREF="http://geojson.org/geojson-spec.html">here</A>.
37475          */
37476
37477         /**
37478          * The <code>GeoJSONWriter</code> outputs coordinates rounded to the precision
37479          * model. Only the maximum number of decimal places necessary to represent the
37480          * ordinates to the required precision will be output.
37481          *
37482          * @param {GeometryFactory} geometryFactory
37483          * @constructor
37484          */
37485         var GeoJSONWriter = function GeoJSONWriter () {
37486           this.parser = new GeoJSONParser(this.geometryFactory);
37487         };
37488         /**
37489          * Converts a <code>Geometry</code> to its GeoJSON representation.
37490          *
37491          * @param {Geometry}
37492          *        geometry a <code>Geometry</code> to process.
37493          * @return {Object} The GeoJSON representation of the Geometry.
37494          * @memberof GeoJSONWriter
37495          */
37496         GeoJSONWriter.prototype.write = function write (geometry) {
37497           return this.parser.write(geometry)
37498         };
37499
37500         /* eslint-disable no-undef */
37501
37502         // io
37503
37504         var Position = function Position () {};
37505
37506         var staticAccessors$20 = { ON: { configurable: true },LEFT: { configurable: true },RIGHT: { configurable: true } };
37507
37508         Position.prototype.interfaces_ = function interfaces_ () {
37509           return []
37510         };
37511         Position.prototype.getClass = function getClass () {
37512           return Position
37513         };
37514         Position.opposite = function opposite (position) {
37515           if (position === Position.LEFT) { return Position.RIGHT }
37516           if (position === Position.RIGHT) { return Position.LEFT }
37517           return position
37518         };
37519         staticAccessors$20.ON.get = function () { return 0 };
37520         staticAccessors$20.LEFT.get = function () { return 1 };
37521         staticAccessors$20.RIGHT.get = function () { return 2 };
37522
37523         Object.defineProperties( Position, staticAccessors$20 );
37524
37525         /**
37526          * @param {string=} message Optional message
37527          * @extends {Error}
37528          * @constructor
37529          * @private
37530          */
37531         function EmptyStackException (message) {
37532           this.message = message || '';
37533         }
37534         EmptyStackException.prototype = new Error();
37535
37536         /**
37537          * @type {string}
37538          */
37539         EmptyStackException.prototype.name = 'EmptyStackException';
37540
37541         /**
37542          * @see http://download.oracle.com/javase/6/docs/api/java/util/Stack.html
37543          *
37544          * @extends {List}
37545          * @constructor
37546          * @private
37547          */
37548         function Stack () {
37549           /**
37550            * @type {Array}
37551            * @private
37552            */
37553           this.array_ = [];
37554         }
37555         Stack.prototype = new List();
37556
37557         /**
37558          * @override
37559          */
37560         Stack.prototype.add = function (e) {
37561           this.array_.push(e);
37562           return true
37563         };
37564
37565         /**
37566          * @override
37567          */
37568         Stack.prototype.get = function (index) {
37569           if (index < 0 || index >= this.size()) {
37570             throw new Error()
37571           }
37572
37573           return this.array_[index]
37574         };
37575
37576         /**
37577          * Pushes an item onto the top of this stack.
37578          * @param {Object} e
37579          * @return {Object}
37580          */
37581         Stack.prototype.push = function (e) {
37582           this.array_.push(e);
37583           return e
37584         };
37585
37586         /**
37587          * Pushes an item onto the top of this stack.
37588          * @param {Object} e
37589          * @return {Object}
37590          */
37591         Stack.prototype.pop = function (e) {
37592           if (this.array_.length === 0) {
37593             throw new EmptyStackException()
37594           }
37595
37596           return this.array_.pop()
37597         };
37598
37599         /**
37600          * Looks at the object at the top of this stack without removing it from the
37601          * stack.
37602          * @return {Object}
37603          */
37604         Stack.prototype.peek = function () {
37605           if (this.array_.length === 0) {
37606             throw new EmptyStackException()
37607           }
37608
37609           return this.array_[this.array_.length - 1]
37610         };
37611
37612         /**
37613          * Tests if this stack is empty.
37614          * @return {boolean} true if and only if this stack contains no items; false
37615          *         otherwise.
37616          */
37617         Stack.prototype.empty = function () {
37618           if (this.array_.length === 0) {
37619             return true
37620           } else {
37621             return false
37622           }
37623         };
37624
37625         /**
37626          * @return {boolean}
37627          */
37628         Stack.prototype.isEmpty = function () {
37629           return this.empty()
37630         };
37631
37632         /**
37633          * Returns the 1-based position where an object is on this stack. If the object
37634          * o occurs as an item in this stack, this method returns the distance from the
37635          * top of the stack of the occurrence nearest the top of the stack; the topmost
37636          * item on the stack is considered to be at distance 1. The equals method is
37637          * used to compare o to the items in this stack.
37638          *
37639          * NOTE: does not currently actually use equals. (=== is used)
37640          *
37641          * @param {Object} o
37642          * @return {number} the 1-based position from the top of the stack where the
37643          *         object is located; the return value -1 indicates that the object is
37644          *         not on the stack.
37645          */
37646         Stack.prototype.search = function (o) {
37647           return this.array_.indexOf(o)
37648         };
37649
37650         /**
37651          * @return {number}
37652          * @export
37653          */
37654         Stack.prototype.size = function () {
37655           return this.array_.length
37656         };
37657
37658         /**
37659          * @return {Array}
37660          */
37661         Stack.prototype.toArray = function () {
37662           var this$1 = this;
37663
37664           var array = [];
37665
37666           for (var i = 0, len = this.array_.length; i < len; i++) {
37667             array.push(this$1.array_[i]);
37668           }
37669
37670           return array
37671         };
37672
37673         var RightmostEdgeFinder = function RightmostEdgeFinder () {
37674           this._minIndex = -1;
37675           this._minCoord = null;
37676           this._minDe = null;
37677           this._orientedDe = null;
37678         };
37679         RightmostEdgeFinder.prototype.getCoordinate = function getCoordinate () {
37680           return this._minCoord
37681         };
37682         RightmostEdgeFinder.prototype.getRightmostSide = function getRightmostSide (de, index) {
37683           var side = this.getRightmostSideOfSegment(de, index);
37684           if (side < 0) { side = this.getRightmostSideOfSegment(de, index - 1); }
37685           if (side < 0) {
37686             this._minCoord = null;
37687             this.checkForRightmostCoordinate(de);
37688           }
37689           return side
37690         };
37691         RightmostEdgeFinder.prototype.findRightmostEdgeAtVertex = function findRightmostEdgeAtVertex () {
37692           var pts = this._minDe.getEdge().getCoordinates();
37693           Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge');
37694           var pPrev = pts[this._minIndex - 1];
37695           var pNext = pts[this._minIndex + 1];
37696           var orientation = CGAlgorithms.computeOrientation(this._minCoord, pNext, pPrev);
37697           var usePrev = false;
37698           if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === CGAlgorithms.COUNTERCLOCKWISE) {
37699             usePrev = true;
37700           } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === CGAlgorithms.CLOCKWISE) {
37701             usePrev = true;
37702           }
37703           if (usePrev) {
37704             this._minIndex = this._minIndex - 1;
37705           }
37706         };
37707         RightmostEdgeFinder.prototype.getRightmostSideOfSegment = function getRightmostSideOfSegment (de, i) {
37708           var e = de.getEdge();
37709           var coord = e.getCoordinates();
37710           if (i < 0 || i + 1 >= coord.length) { return -1 }
37711           if (coord[i].y === coord[i + 1].y) { return -1 }
37712           var pos = Position.LEFT;
37713           if (coord[i].y < coord[i + 1].y) { pos = Position.RIGHT; }
37714           return pos
37715         };
37716         RightmostEdgeFinder.prototype.getEdge = function getEdge () {
37717           return this._orientedDe
37718         };
37719         RightmostEdgeFinder.prototype.checkForRightmostCoordinate = function checkForRightmostCoordinate (de) {
37720             var this$1 = this;
37721
37722           var coord = de.getEdge().getCoordinates();
37723           for (var i = 0; i < coord.length - 1; i++) {
37724             if (this$1._minCoord === null || coord[i].x > this$1._minCoord.x) {
37725               this$1._minDe = de;
37726               this$1._minIndex = i;
37727               this$1._minCoord = coord[i];
37728             }
37729           }
37730         };
37731         RightmostEdgeFinder.prototype.findRightmostEdgeAtNode = function findRightmostEdgeAtNode () {
37732           var node = this._minDe.getNode();
37733           var star = node.getEdges();
37734           this._minDe = star.getRightmostEdge();
37735           if (!this._minDe.isForward()) {
37736             this._minDe = this._minDe.getSym();
37737             this._minIndex = this._minDe.getEdge().getCoordinates().length - 1;
37738           }
37739         };
37740         RightmostEdgeFinder.prototype.findEdge = function findEdge (dirEdgeList) {
37741             var this$1 = this;
37742
37743           for (var i = dirEdgeList.iterator(); i.hasNext();) {
37744             var de = i.next();
37745             if (!de.isForward()) { continue }
37746             this$1.checkForRightmostCoordinate(de);
37747           }
37748           Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing');
37749           if (this._minIndex === 0) {
37750             this.findRightmostEdgeAtNode();
37751           } else {
37752             this.findRightmostEdgeAtVertex();
37753           }
37754           this._orientedDe = this._minDe;
37755           var rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);
37756           if (rightmostSide === Position.LEFT) {
37757             this._orientedDe = this._minDe.getSym();
37758           }
37759         };
37760         RightmostEdgeFinder.prototype.interfaces_ = function interfaces_ () {
37761           return []
37762         };
37763         RightmostEdgeFinder.prototype.getClass = function getClass () {
37764           return RightmostEdgeFinder
37765         };
37766
37767         var TopologyException = (function (RuntimeException$$1) {
37768           function TopologyException (msg, pt) {
37769             RuntimeException$$1.call(this, TopologyException.msgWithCoord(msg, pt));
37770             this.pt = pt ? new Coordinate(pt) : null;
37771             this.name = 'TopologyException';
37772           }
37773
37774           if ( RuntimeException$$1 ) { TopologyException.__proto__ = RuntimeException$$1; }
37775           TopologyException.prototype = Object.create( RuntimeException$$1 && RuntimeException$$1.prototype );
37776           TopologyException.prototype.constructor = TopologyException;
37777           TopologyException.prototype.getCoordinate = function getCoordinate () {
37778             return this.pt
37779           };
37780           TopologyException.prototype.interfaces_ = function interfaces_ () {
37781             return []
37782           };
37783           TopologyException.prototype.getClass = function getClass () {
37784             return TopologyException
37785           };
37786           TopologyException.msgWithCoord = function msgWithCoord (msg, pt) {
37787             if (!pt) { return msg + ' [ ' + pt + ' ]' }
37788             return msg
37789           };
37790
37791           return TopologyException;
37792         }(RuntimeException));
37793
37794         var LinkedList = function LinkedList () {
37795           this.array_ = [];
37796         };
37797         LinkedList.prototype.addLast = function addLast (e) {
37798           this.array_.push(e);
37799         };
37800         LinkedList.prototype.removeFirst = function removeFirst () {
37801           return this.array_.shift()
37802         };
37803         LinkedList.prototype.isEmpty = function isEmpty () {
37804           return this.array_.length === 0
37805         };
37806
37807         var BufferSubgraph = function BufferSubgraph () {
37808           this._finder = null;
37809           this._dirEdgeList = new ArrayList();
37810           this._nodes = new ArrayList();
37811           this._rightMostCoord = null;
37812           this._env = null;
37813           this._finder = new RightmostEdgeFinder();
37814         };
37815         BufferSubgraph.prototype.clearVisitedEdges = function clearVisitedEdges () {
37816           for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
37817             var de = it.next();
37818             de.setVisited(false);
37819           }
37820         };
37821         BufferSubgraph.prototype.getRightmostCoordinate = function getRightmostCoordinate () {
37822           return this._rightMostCoord
37823         };
37824         BufferSubgraph.prototype.computeNodeDepth = function computeNodeDepth (n) {
37825             var this$1 = this;
37826
37827           var startEdge = null;
37828           for (var i = n.getEdges().iterator(); i.hasNext();) {
37829             var de = i.next();
37830             if (de.isVisited() || de.getSym().isVisited()) {
37831               startEdge = de;
37832               break
37833             }
37834           }
37835           if (startEdge === null) { throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate()) }
37836           n.getEdges().computeDepths(startEdge);
37837           for (var i$1 = n.getEdges().iterator(); i$1.hasNext();) {
37838             var de$1 = i$1.next();
37839             de$1.setVisited(true);
37840             this$1.copySymDepths(de$1);
37841           }
37842         };
37843         BufferSubgraph.prototype.computeDepth = function computeDepth (outsideDepth) {
37844           this.clearVisitedEdges();
37845           var de = this._finder.getEdge();
37846           // const n = de.getNode()
37847           // const label = de.getLabel()
37848           de.setEdgeDepths(Position.RIGHT, outsideDepth);
37849           this.copySymDepths(de);
37850           this.computeDepths(de);
37851         };
37852         BufferSubgraph.prototype.create = function create (node) {
37853           this.addReachable(node);
37854           this._finder.findEdge(this._dirEdgeList);
37855           this._rightMostCoord = this._finder.getCoordinate();
37856         };
37857         BufferSubgraph.prototype.findResultEdges = function findResultEdges () {
37858           for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
37859             var de = it.next();
37860             if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {
37861               de.setInResult(true);
37862             }
37863           }
37864         };
37865         BufferSubgraph.prototype.computeDepths = function computeDepths (startEdge) {
37866             var this$1 = this;
37867
37868           var nodesVisited = new HashSet();
37869           var nodeQueue = new LinkedList();
37870           var startNode = startEdge.getNode();
37871           nodeQueue.addLast(startNode);
37872           nodesVisited.add(startNode);
37873           startEdge.setVisited(true);
37874           while (!nodeQueue.isEmpty()) {
37875             var n = nodeQueue.removeFirst();
37876             nodesVisited.add(n);
37877             this$1.computeNodeDepth(n);
37878             for (var i = n.getEdges().iterator(); i.hasNext();) {
37879               var de = i.next();
37880               var sym = de.getSym();
37881               if (sym.isVisited()) { continue }
37882               var adjNode = sym.getNode();
37883               if (!nodesVisited.contains(adjNode)) {
37884                 nodeQueue.addLast(adjNode);
37885                 nodesVisited.add(adjNode);
37886               }
37887             }
37888           }
37889         };
37890         BufferSubgraph.prototype.compareTo = function compareTo (o) {
37891           var graph = o;
37892           if (this._rightMostCoord.x < graph._rightMostCoord.x) {
37893             return -1
37894           }
37895           if (this._rightMostCoord.x > graph._rightMostCoord.x) {
37896             return 1
37897           }
37898           return 0
37899         };
37900         BufferSubgraph.prototype.getEnvelope = function getEnvelope () {
37901           if (this._env === null) {
37902             var edgeEnv = new Envelope();
37903             for (var it = this._dirEdgeList.iterator(); it.hasNext();) {
37904               var dirEdge = it.next();
37905               var pts = dirEdge.getEdge().getCoordinates();
37906               for (var i = 0; i < pts.length - 1; i++) {
37907                 edgeEnv.expandToInclude(pts[i]);
37908               }
37909             }
37910             this._env = edgeEnv;
37911           }
37912           return this._env
37913         };
37914         BufferSubgraph.prototype.addReachable = function addReachable (startNode) {
37915             var this$1 = this;
37916
37917           var nodeStack = new Stack();
37918           nodeStack.add(startNode);
37919           while (!nodeStack.empty()) {
37920             var node = nodeStack.pop();
37921             this$1.add(node, nodeStack);
37922           }
37923         };
37924         BufferSubgraph.prototype.copySymDepths = function copySymDepths (de) {
37925           var sym = de.getSym();
37926           sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));
37927           sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));
37928         };
37929         BufferSubgraph.prototype.add = function add (node, nodeStack) {
37930             var this$1 = this;
37931
37932           node.setVisited(true);
37933           this._nodes.add(node);
37934           for (var i = node.getEdges().iterator(); i.hasNext();) {
37935             var de = i.next();
37936             this$1._dirEdgeList.add(de);
37937             var sym = de.getSym();
37938             var symNode = sym.getNode();
37939             if (!symNode.isVisited()) { nodeStack.push(symNode); }
37940           }
37941         };
37942         BufferSubgraph.prototype.getNodes = function getNodes () {
37943           return this._nodes
37944         };
37945         BufferSubgraph.prototype.getDirectedEdges = function getDirectedEdges () {
37946           return this._dirEdgeList
37947         };
37948         BufferSubgraph.prototype.interfaces_ = function interfaces_ () {
37949           return [Comparable]
37950         };
37951         BufferSubgraph.prototype.getClass = function getClass () {
37952           return BufferSubgraph
37953         };
37954
37955         var TopologyLocation = function TopologyLocation () {
37956           var this$1 = this;
37957
37958           this.location = null;
37959           if (arguments.length === 1) {
37960             if (arguments[0] instanceof Array) {
37961               var location = arguments[0];
37962               this.init(location.length);
37963             } else if (Number.isInteger(arguments[0])) {
37964               var on = arguments[0];
37965               this.init(1);
37966               this.location[Position.ON] = on;
37967             } else if (arguments[0] instanceof TopologyLocation) {
37968               var gl = arguments[0];
37969               this.init(gl.location.length);
37970               if (gl !== null) {
37971                 for (var i = 0; i < this.location.length; i++) {
37972                   this$1.location[i] = gl.location[i];
37973                 }
37974               }
37975             }
37976           } else if (arguments.length === 3) {
37977             var on$1 = arguments[0];
37978             var left = arguments[1];
37979             var right = arguments[2];
37980             this.init(3);
37981             this.location[Position.ON] = on$1;
37982             this.location[Position.LEFT] = left;
37983             this.location[Position.RIGHT] = right;
37984           }
37985         };
37986         TopologyLocation.prototype.setAllLocations = function setAllLocations (locValue) {
37987             var this$1 = this;
37988
37989           for (var i = 0; i < this.location.length; i++) {
37990             this$1.location[i] = locValue;
37991           }
37992         };
37993         TopologyLocation.prototype.isNull = function isNull () {
37994             var this$1 = this;
37995
37996           for (var i = 0; i < this.location.length; i++) {
37997             if (this$1.location[i] !== Location.NONE) { return false }
37998           }
37999           return true
38000         };
38001         TopologyLocation.prototype.setAllLocationsIfNull = function setAllLocationsIfNull (locValue) {
38002             var this$1 = this;
38003
38004           for (var i = 0; i < this.location.length; i++) {
38005             if (this$1.location[i] === Location.NONE) { this$1.location[i] = locValue; }
38006           }
38007         };
38008         TopologyLocation.prototype.isLine = function isLine () {
38009           return this.location.length === 1
38010         };
38011         TopologyLocation.prototype.merge = function merge (gl) {
38012             var this$1 = this;
38013
38014           if (gl.location.length > this.location.length) {
38015             var newLoc = new Array(3).fill(null);
38016             newLoc[Position.ON] = this.location[Position.ON];
38017             newLoc[Position.LEFT] = Location.NONE;
38018             newLoc[Position.RIGHT] = Location.NONE;
38019             this.location = newLoc;
38020           }
38021           for (var i = 0; i < this.location.length; i++) {
38022             if (this$1.location[i] === Location.NONE && i < gl.location.length) { this$1.location[i] = gl.location[i]; }
38023           }
38024         };
38025         TopologyLocation.prototype.getLocations = function getLocations () {
38026           return this.location
38027         };
38028         TopologyLocation.prototype.flip = function flip () {
38029           if (this.location.length <= 1) { return null }
38030           var temp = this.location[Position.LEFT];
38031           this.location[Position.LEFT] = this.location[Position.RIGHT];
38032           this.location[Position.RIGHT] = temp;
38033         };
38034         TopologyLocation.prototype.toString = function toString () {
38035           var buf = new StringBuffer();
38036           if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.LEFT])); }
38037           buf.append(Location.toLocationSymbol(this.location[Position.ON]));
38038           if (this.location.length > 1) { buf.append(Location.toLocationSymbol(this.location[Position.RIGHT])); }
38039           return buf.toString()
38040         };
38041         TopologyLocation.prototype.setLocations = function setLocations (on, left, right) {
38042           this.location[Position.ON] = on;
38043           this.location[Position.LEFT] = left;
38044           this.location[Position.RIGHT] = right;
38045         };
38046         TopologyLocation.prototype.get = function get (posIndex) {
38047           if (posIndex < this.location.length) { return this.location[posIndex] }
38048           return Location.NONE
38049         };
38050         TopologyLocation.prototype.isArea = function isArea () {
38051           return this.location.length > 1
38052         };
38053         TopologyLocation.prototype.isAnyNull = function isAnyNull () {
38054             var this$1 = this;
38055
38056           for (var i = 0; i < this.location.length; i++) {
38057             if (this$1.location[i] === Location.NONE) { return true }
38058           }
38059           return false
38060         };
38061         TopologyLocation.prototype.setLocation = function setLocation () {
38062           if (arguments.length === 1) {
38063             var locValue = arguments[0];
38064             this.setLocation(Position.ON, locValue);
38065           } else if (arguments.length === 2) {
38066             var locIndex = arguments[0];
38067             var locValue$1 = arguments[1];
38068             this.location[locIndex] = locValue$1;
38069           }
38070         };
38071         TopologyLocation.prototype.init = function init (size) {
38072           this.location = new Array(size).fill(null);
38073           this.setAllLocations(Location.NONE);
38074         };
38075         TopologyLocation.prototype.isEqualOnSide = function isEqualOnSide (le, locIndex) {
38076           return this.location[locIndex] === le.location[locIndex]
38077         };
38078         TopologyLocation.prototype.allPositionsEqual = function allPositionsEqual (loc) {
38079             var this$1 = this;
38080
38081           for (var i = 0; i < this.location.length; i++) {
38082             if (this$1.location[i] !== loc) { return false }
38083           }
38084           return true
38085         };
38086         TopologyLocation.prototype.interfaces_ = function interfaces_ () {
38087           return []
38088         };
38089         TopologyLocation.prototype.getClass = function getClass () {
38090           return TopologyLocation
38091         };
38092
38093         var Label = function Label () {
38094           this.elt = new Array(2).fill(null);
38095           if (arguments.length === 1) {
38096             if (Number.isInteger(arguments[0])) {
38097               var onLoc = arguments[0];
38098               this.elt[0] = new TopologyLocation(onLoc);
38099               this.elt[1] = new TopologyLocation(onLoc);
38100             } else if (arguments[0] instanceof Label) {
38101               var lbl = arguments[0];
38102               this.elt[0] = new TopologyLocation(lbl.elt[0]);
38103               this.elt[1] = new TopologyLocation(lbl.elt[1]);
38104             }
38105           } else if (arguments.length === 2) {
38106             var geomIndex = arguments[0];
38107             var onLoc$1 = arguments[1];
38108             this.elt[0] = new TopologyLocation(Location.NONE);
38109             this.elt[1] = new TopologyLocation(Location.NONE);
38110             this.elt[geomIndex].setLocation(onLoc$1);
38111           } else if (arguments.length === 3) {
38112             var onLoc$2 = arguments[0];
38113             var leftLoc = arguments[1];
38114             var rightLoc = arguments[2];
38115             this.elt[0] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
38116             this.elt[1] = new TopologyLocation(onLoc$2, leftLoc, rightLoc);
38117           } else if (arguments.length === 4) {
38118             var geomIndex$1 = arguments[0];
38119             var onLoc$3 = arguments[1];
38120             var leftLoc$1 = arguments[2];
38121             var rightLoc$1 = arguments[3];
38122             this.elt[0] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
38123             this.elt[1] = new TopologyLocation(Location.NONE, Location.NONE, Location.NONE);
38124             this.elt[geomIndex$1].setLocations(onLoc$3, leftLoc$1, rightLoc$1);
38125           }
38126         };
38127         Label.prototype.getGeometryCount = function getGeometryCount () {
38128           var count = 0;
38129           if (!this.elt[0].isNull()) { count++; }
38130           if (!this.elt[1].isNull()) { count++; }
38131           return count
38132         };
38133         Label.prototype.setAllLocations = function setAllLocations (geomIndex, location) {
38134           this.elt[geomIndex].setAllLocations(location);
38135         };
38136         Label.prototype.isNull = function isNull (geomIndex) {
38137           return this.elt[geomIndex].isNull()
38138         };
38139         Label.prototype.setAllLocationsIfNull = function setAllLocationsIfNull () {
38140           if (arguments.length === 1) {
38141             var location = arguments[0];
38142             this.setAllLocationsIfNull(0, location);
38143             this.setAllLocationsIfNull(1, location);
38144           } else if (arguments.length === 2) {
38145             var geomIndex = arguments[0];
38146             var location$1 = arguments[1];
38147             this.elt[geomIndex].setAllLocationsIfNull(location$1);
38148           }
38149         };
38150         Label.prototype.isLine = function isLine (geomIndex) {
38151           return this.elt[geomIndex].isLine()
38152         };
38153         Label.prototype.merge = function merge (lbl) {
38154             var this$1 = this;
38155
38156           for (var i = 0; i < 2; i++) {
38157             if (this$1.elt[i] === null && lbl.elt[i] !== null) {
38158               this$1.elt[i] = new TopologyLocation(lbl.elt[i]);
38159             } else {
38160               this$1.elt[i].merge(lbl.elt[i]);
38161             }
38162           }
38163         };
38164         Label.prototype.flip = function flip () {
38165           this.elt[0].flip();
38166           this.elt[1].flip();
38167         };
38168         Label.prototype.getLocation = function getLocation () {
38169           if (arguments.length === 1) {
38170             var geomIndex = arguments[0];
38171             return this.elt[geomIndex].get(Position.ON)
38172           } else if (arguments.length === 2) {
38173             var geomIndex$1 = arguments[0];
38174             var posIndex = arguments[1];
38175             return this.elt[geomIndex$1].get(posIndex)
38176           }
38177         };
38178         Label.prototype.toString = function toString () {
38179           var buf = new StringBuffer();
38180           if (this.elt[0] !== null) {
38181             buf.append('A:');
38182             buf.append(this.elt[0].toString());
38183           }
38184           if (this.elt[1] !== null) {
38185             buf.append(' B:');
38186             buf.append(this.elt[1].toString());
38187           }
38188           return buf.toString()
38189         };
38190         Label.prototype.isArea = function isArea () {
38191           if (arguments.length === 0) {
38192             return this.elt[0].isArea() || this.elt[1].isArea()
38193           } else if (arguments.length === 1) {
38194             var geomIndex = arguments[0];
38195             return this.elt[geomIndex].isArea()
38196           }
38197         };
38198         Label.prototype.isAnyNull = function isAnyNull (geomIndex) {
38199           return this.elt[geomIndex].isAnyNull()
38200         };
38201         Label.prototype.setLocation = function setLocation () {
38202           if (arguments.length === 2) {
38203             var geomIndex = arguments[0];
38204             var location = arguments[1];
38205             this.elt[geomIndex].setLocation(Position.ON, location);
38206           } else if (arguments.length === 3) {
38207             var geomIndex$1 = arguments[0];
38208             var posIndex = arguments[1];
38209             var location$1 = arguments[2];
38210             this.elt[geomIndex$1].setLocation(posIndex, location$1);
38211           }
38212         };
38213         Label.prototype.isEqualOnSide = function isEqualOnSide (lbl, side) {
38214           return this.elt[0].isEqualOnSide(lbl.elt[0], side) && this.elt[1].isEqualOnSide(lbl.elt[1], side)
38215         };
38216         Label.prototype.allPositionsEqual = function allPositionsEqual (geomIndex, loc) {
38217           return this.elt[geomIndex].allPositionsEqual(loc)
38218         };
38219         Label.prototype.toLine = function toLine (geomIndex) {
38220           if (this.elt[geomIndex].isArea()) { this.elt[geomIndex] = new TopologyLocation(this.elt[geomIndex].location[0]); }
38221         };
38222         Label.prototype.interfaces_ = function interfaces_ () {
38223           return []
38224         };
38225         Label.prototype.getClass = function getClass () {
38226           return Label
38227         };
38228         Label.toLineLabel = function toLineLabel (label) {
38229           var lineLabel = new Label(Location.NONE);
38230           for (var i = 0; i < 2; i++) {
38231             lineLabel.setLocation(i, label.getLocation(i));
38232           }
38233           return lineLabel
38234         };
38235
38236         var EdgeRing = function EdgeRing () {
38237           this._startDe = null;
38238           this._maxNodeDegree = -1;
38239           this._edges = new ArrayList();
38240           this._pts = new ArrayList();
38241           this._label = new Label(Location.NONE);
38242           this._ring = null;
38243           this._isHole = null;
38244           this._shell = null;
38245           this._holes = new ArrayList();
38246           this._geometryFactory = null;
38247           var start = arguments[0];
38248           var geometryFactory = arguments[1];
38249           this._geometryFactory = geometryFactory;
38250           this.computePoints(start);
38251           this.computeRing();
38252         };
38253         EdgeRing.prototype.computeRing = function computeRing () {
38254             var this$1 = this;
38255
38256           if (this._ring !== null) { return null }
38257           var coord = new Array(this._pts.size()).fill(null);
38258           for (var i = 0; i < this._pts.size(); i++) {
38259             coord[i] = this$1._pts.get(i);
38260           }
38261           this._ring = this._geometryFactory.createLinearRing(coord);
38262           this._isHole = CGAlgorithms.isCCW(this._ring.getCoordinates());
38263         };
38264         EdgeRing.prototype.isIsolated = function isIsolated () {
38265           return this._label.getGeometryCount() === 1
38266         };
38267         EdgeRing.prototype.computePoints = function computePoints (start) {
38268             var this$1 = this;
38269
38270           this._startDe = start;
38271           var de = start;
38272           var isFirstEdge = true;
38273           do {
38274             if (de === null) { throw new TopologyException('Found null DirectedEdge') }
38275             if (de.getEdgeRing() === this$1) { throw new TopologyException('Directed Edge visited twice during ring-building at ' + de.getCoordinate()) }
38276             this$1._edges.add(de);
38277             var label = de.getLabel();
38278             Assert.isTrue(label.isArea());
38279             this$1.mergeLabel(label);
38280             this$1.addPoints(de.getEdge(), de.isForward(), isFirstEdge);
38281             isFirstEdge = false;
38282             this$1.setEdgeRing(de, this$1);
38283             de = this$1.getNext(de);
38284           } while (de !== this._startDe)
38285         };
38286         EdgeRing.prototype.getLinearRing = function getLinearRing () {
38287           return this._ring
38288         };
38289         EdgeRing.prototype.getCoordinate = function getCoordinate (i) {
38290           return this._pts.get(i)
38291         };
38292         EdgeRing.prototype.computeMaxNodeDegree = function computeMaxNodeDegree () {
38293             var this$1 = this;
38294
38295           this._maxNodeDegree = 0;
38296           var de = this._startDe;
38297           do {
38298             var node = de.getNode();
38299             var degree = node.getEdges().getOutgoingDegree(this$1);
38300             if (degree > this$1._maxNodeDegree) { this$1._maxNodeDegree = degree; }
38301             de = this$1.getNext(de);
38302           } while (de !== this._startDe)
38303           this._maxNodeDegree *= 2;
38304         };
38305         EdgeRing.prototype.addPoints = function addPoints (edge, isForward, isFirstEdge) {
38306             var this$1 = this;
38307
38308           var edgePts = edge.getCoordinates();
38309           if (isForward) {
38310             var startIndex = 1;
38311             if (isFirstEdge) { startIndex = 0; }
38312             for (var i = startIndex; i < edgePts.length; i++) {
38313               this$1._pts.add(edgePts[i]);
38314             }
38315           } else {
38316             var startIndex$1 = edgePts.length - 2;
38317             if (isFirstEdge) { startIndex$1 = edgePts.length - 1; }
38318             for (var i$1 = startIndex$1; i$1 >= 0; i$1--) {
38319               this$1._pts.add(edgePts[i$1]);
38320             }
38321           }
38322         };
38323         EdgeRing.prototype.isHole = function isHole () {
38324           return this._isHole
38325         };
38326         EdgeRing.prototype.setInResult = function setInResult () {
38327           var de = this._startDe;
38328           do {
38329             de.getEdge().setInResult(true);
38330             de = de.getNext();
38331           } while (de !== this._startDe)
38332         };
38333         EdgeRing.prototype.containsPoint = function containsPoint (p) {
38334           var shell = this.getLinearRing();
38335           var env = shell.getEnvelopeInternal();
38336           if (!env.contains(p)) { return false }
38337           if (!CGAlgorithms.isPointInRing(p, shell.getCoordinates())) { return false }
38338           for (var i = this._holes.iterator(); i.hasNext();) {
38339             var hole = i.next();
38340             if (hole.containsPoint(p)) { return false }
38341           }
38342           return true
38343         };
38344         EdgeRing.prototype.addHole = function addHole (ring) {
38345           this._holes.add(ring);
38346         };
38347         EdgeRing.prototype.isShell = function isShell () {
38348           return this._shell === null
38349         };
38350         EdgeRing.prototype.getLabel = function getLabel () {
38351           return this._label
38352         };
38353         EdgeRing.prototype.getEdges = function getEdges () {
38354           return this._edges
38355         };
38356         EdgeRing.prototype.getMaxNodeDegree = function getMaxNodeDegree () {
38357           if (this._maxNodeDegree < 0) { this.computeMaxNodeDegree(); }
38358           return this._maxNodeDegree
38359         };
38360         EdgeRing.prototype.getShell = function getShell () {
38361           return this._shell
38362         };
38363         EdgeRing.prototype.mergeLabel = function mergeLabel () {
38364           if (arguments.length === 1) {
38365             var deLabel = arguments[0];
38366             this.mergeLabel(deLabel, 0);
38367             this.mergeLabel(deLabel, 1);
38368           } else if (arguments.length === 2) {
38369             var deLabel$1 = arguments[0];
38370             var geomIndex = arguments[1];
38371             var loc = deLabel$1.getLocation(geomIndex, Position.RIGHT);
38372             if (loc === Location.NONE) { return null }
38373             if (this._label.getLocation(geomIndex) === Location.NONE) {
38374               this._label.setLocation(geomIndex, loc);
38375               return null
38376             }
38377           }
38378         };
38379         EdgeRing.prototype.setShell = function setShell (shell) {
38380           this._shell = shell;
38381           if (shell !== null) { shell.addHole(this); }
38382         };
38383         EdgeRing.prototype.toPolygon = function toPolygon (geometryFactory) {
38384             var this$1 = this;
38385
38386           var holeLR = new Array(this._holes.size()).fill(null);
38387           for (var i = 0; i < this._holes.size(); i++) {
38388             holeLR[i] = this$1._holes.get(i).getLinearRing();
38389           }
38390           var poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);
38391           return poly
38392         };
38393         EdgeRing.prototype.interfaces_ = function interfaces_ () {
38394           return []
38395         };
38396         EdgeRing.prototype.getClass = function getClass () {
38397           return EdgeRing
38398         };
38399
38400         var MinimalEdgeRing = (function (EdgeRing$$1) {
38401           function MinimalEdgeRing () {
38402             var start = arguments[0];
38403             var geometryFactory = arguments[1];
38404             EdgeRing$$1.call(this, start, geometryFactory);
38405           }
38406
38407           if ( EdgeRing$$1 ) { MinimalEdgeRing.__proto__ = EdgeRing$$1; }
38408           MinimalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
38409           MinimalEdgeRing.prototype.constructor = MinimalEdgeRing;
38410           MinimalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
38411             de.setMinEdgeRing(er);
38412           };
38413           MinimalEdgeRing.prototype.getNext = function getNext (de) {
38414             return de.getNextMin()
38415           };
38416           MinimalEdgeRing.prototype.interfaces_ = function interfaces_ () {
38417             return []
38418           };
38419           MinimalEdgeRing.prototype.getClass = function getClass () {
38420             return MinimalEdgeRing
38421           };
38422
38423           return MinimalEdgeRing;
38424         }(EdgeRing));
38425
38426         var MaximalEdgeRing = (function (EdgeRing$$1) {
38427           function MaximalEdgeRing () {
38428             var start = arguments[0];
38429             var geometryFactory = arguments[1];
38430             EdgeRing$$1.call(this, start, geometryFactory);
38431           }
38432
38433           if ( EdgeRing$$1 ) { MaximalEdgeRing.__proto__ = EdgeRing$$1; }
38434           MaximalEdgeRing.prototype = Object.create( EdgeRing$$1 && EdgeRing$$1.prototype );
38435           MaximalEdgeRing.prototype.constructor = MaximalEdgeRing;
38436           MaximalEdgeRing.prototype.buildMinimalRings = function buildMinimalRings () {
38437             var this$1 = this;
38438
38439             var minEdgeRings = new ArrayList();
38440             var de = this._startDe;
38441             do {
38442               if (de.getMinEdgeRing() === null) {
38443                 var minEr = new MinimalEdgeRing(de, this$1._geometryFactory);
38444                 minEdgeRings.add(minEr);
38445               }
38446               de = de.getNext();
38447             } while (de !== this._startDe)
38448             return minEdgeRings
38449           };
38450           MaximalEdgeRing.prototype.setEdgeRing = function setEdgeRing (de, er) {
38451             de.setEdgeRing(er);
38452           };
38453           MaximalEdgeRing.prototype.linkDirectedEdgesForMinimalEdgeRings = function linkDirectedEdgesForMinimalEdgeRings () {
38454             var this$1 = this;
38455
38456             var de = this._startDe;
38457             do {
38458               var node = de.getNode();
38459               node.getEdges().linkMinimalDirectedEdges(this$1);
38460               de = de.getNext();
38461             } while (de !== this._startDe)
38462           };
38463           MaximalEdgeRing.prototype.getNext = function getNext (de) {
38464             return de.getNext()
38465           };
38466           MaximalEdgeRing.prototype.interfaces_ = function interfaces_ () {
38467             return []
38468           };
38469           MaximalEdgeRing.prototype.getClass = function getClass () {
38470             return MaximalEdgeRing
38471           };
38472
38473           return MaximalEdgeRing;
38474         }(EdgeRing));
38475
38476         var GraphComponent = function GraphComponent () {
38477           this._label = null;
38478           this._isInResult = false;
38479           this._isCovered = false;
38480           this._isCoveredSet = false;
38481           this._isVisited = false;
38482           if (arguments.length === 0) ; else if (arguments.length === 1) {
38483             var label = arguments[0];
38484             this._label = label;
38485           }
38486         };
38487         GraphComponent.prototype.setVisited = function setVisited (isVisited) {
38488           this._isVisited = isVisited;
38489         };
38490         GraphComponent.prototype.setInResult = function setInResult (isInResult) {
38491           this._isInResult = isInResult;
38492         };
38493         GraphComponent.prototype.isCovered = function isCovered () {
38494           return this._isCovered
38495         };
38496         GraphComponent.prototype.isCoveredSet = function isCoveredSet () {
38497           return this._isCoveredSet
38498         };
38499         GraphComponent.prototype.setLabel = function setLabel (label) {
38500           this._label = label;
38501         };
38502         GraphComponent.prototype.getLabel = function getLabel () {
38503           return this._label
38504         };
38505         GraphComponent.prototype.setCovered = function setCovered (isCovered) {
38506           this._isCovered = isCovered;
38507           this._isCoveredSet = true;
38508         };
38509         GraphComponent.prototype.updateIM = function updateIM (im) {
38510           Assert.isTrue(this._label.getGeometryCount() >= 2, 'found partial label');
38511           this.computeIM(im);
38512         };
38513         GraphComponent.prototype.isInResult = function isInResult () {
38514           return this._isInResult
38515         };
38516         GraphComponent.prototype.isVisited = function isVisited () {
38517           return this._isVisited
38518         };
38519         GraphComponent.prototype.interfaces_ = function interfaces_ () {
38520           return []
38521         };
38522         GraphComponent.prototype.getClass = function getClass () {
38523           return GraphComponent
38524         };
38525
38526         var Node$2 = (function (GraphComponent$$1) {
38527           function Node () {
38528             GraphComponent$$1.call(this);
38529             this._coord = null;
38530             this._edges = null;
38531             var coord = arguments[0];
38532             var edges = arguments[1];
38533             this._coord = coord;
38534             this._edges = edges;
38535             this._label = new Label(0, Location.NONE);
38536           }
38537
38538           if ( GraphComponent$$1 ) { Node.__proto__ = GraphComponent$$1; }
38539           Node.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
38540           Node.prototype.constructor = Node;
38541           Node.prototype.isIncidentEdgeInResult = function isIncidentEdgeInResult () {
38542             for (var it = this.getEdges().getEdges().iterator(); it.hasNext();) {
38543               var de = it.next();
38544               if (de.getEdge().isInResult()) { return true }
38545             }
38546             return false
38547           };
38548           Node.prototype.isIsolated = function isIsolated () {
38549             return this._label.getGeometryCount() === 1
38550           };
38551           Node.prototype.getCoordinate = function getCoordinate () {
38552             return this._coord
38553           };
38554           Node.prototype.print = function print (out) {
38555             out.println('node ' + this._coord + ' lbl: ' + this._label);
38556           };
38557           Node.prototype.computeIM = function computeIM (im) {};
38558           Node.prototype.computeMergedLocation = function computeMergedLocation (label2, eltIndex) {
38559             var loc = Location.NONE;
38560             loc = this._label.getLocation(eltIndex);
38561             if (!label2.isNull(eltIndex)) {
38562               var nLoc = label2.getLocation(eltIndex);
38563               if (loc !== Location.BOUNDARY) { loc = nLoc; }
38564             }
38565             return loc
38566           };
38567           Node.prototype.setLabel = function setLabel () {
38568             if (arguments.length === 2) {
38569               var argIndex = arguments[0];
38570               var onLocation = arguments[1];
38571               if (this._label === null) {
38572                 this._label = new Label(argIndex, onLocation);
38573               } else { this._label.setLocation(argIndex, onLocation); }
38574             } else { return GraphComponent$$1.prototype.setLabel.apply(this, arguments) }
38575           };
38576           Node.prototype.getEdges = function getEdges () {
38577             return this._edges
38578           };
38579           Node.prototype.mergeLabel = function mergeLabel () {
38580             var this$1 = this;
38581
38582             if (arguments[0] instanceof Node) {
38583               var n = arguments[0];
38584               this.mergeLabel(n._label);
38585             } else if (arguments[0] instanceof Label) {
38586               var label2 = arguments[0];
38587               for (var i = 0; i < 2; i++) {
38588                 var loc = this$1.computeMergedLocation(label2, i);
38589                 var thisLoc = this$1._label.getLocation(i);
38590                 if (thisLoc === Location.NONE) { this$1._label.setLocation(i, loc); }
38591               }
38592             }
38593           };
38594           Node.prototype.add = function add (e) {
38595             this._edges.insert(e);
38596             e.setNode(this);
38597           };
38598           Node.prototype.setLabelBoundary = function setLabelBoundary (argIndex) {
38599             if (this._label === null) { return null }
38600             var loc = Location.NONE;
38601             if (this._label !== null) { loc = this._label.getLocation(argIndex); }
38602             var newLoc = null;
38603             switch (loc) {
38604               case Location.BOUNDARY:
38605                 newLoc = Location.INTERIOR;
38606                 break
38607               case Location.INTERIOR:
38608                 newLoc = Location.BOUNDARY;
38609                 break
38610               default:
38611                 newLoc = Location.BOUNDARY;
38612                 break
38613             }
38614             this._label.setLocation(argIndex, newLoc);
38615           };
38616           Node.prototype.interfaces_ = function interfaces_ () {
38617             return []
38618           };
38619           Node.prototype.getClass = function getClass () {
38620             return Node
38621           };
38622
38623           return Node;
38624         }(GraphComponent));
38625
38626         var NodeMap = function NodeMap () {
38627           this.nodeMap = new TreeMap();
38628           this.nodeFact = null;
38629           var nodeFact = arguments[0];
38630           this.nodeFact = nodeFact;
38631         };
38632         NodeMap.prototype.find = function find (coord) {
38633           return this.nodeMap.get(coord)
38634         };
38635         NodeMap.prototype.addNode = function addNode () {
38636           if (arguments[0] instanceof Coordinate) {
38637             var coord = arguments[0];
38638             var node = this.nodeMap.get(coord);
38639             if (node === null) {
38640               node = this.nodeFact.createNode(coord);
38641               this.nodeMap.put(coord, node);
38642             }
38643             return node
38644           } else if (arguments[0] instanceof Node$2) {
38645             var n = arguments[0];
38646             var node$1 = this.nodeMap.get(n.getCoordinate());
38647             if (node$1 === null) {
38648               this.nodeMap.put(n.getCoordinate(), n);
38649               return n
38650             }
38651             node$1.mergeLabel(n);
38652             return node$1
38653           }
38654         };
38655         NodeMap.prototype.print = function print (out) {
38656           for (var it = this.iterator(); it.hasNext();) {
38657             var n = it.next();
38658             n.print(out);
38659           }
38660         };
38661         NodeMap.prototype.iterator = function iterator () {
38662           return this.nodeMap.values().iterator()
38663         };
38664         NodeMap.prototype.values = function values () {
38665           return this.nodeMap.values()
38666         };
38667         NodeMap.prototype.getBoundaryNodes = function getBoundaryNodes (geomIndex) {
38668           var bdyNodes = new ArrayList();
38669           for (var i = this.iterator(); i.hasNext();) {
38670             var node = i.next();
38671             if (node.getLabel().getLocation(geomIndex) === Location.BOUNDARY) { bdyNodes.add(node); }
38672           }
38673           return bdyNodes
38674         };
38675         NodeMap.prototype.add = function add (e) {
38676           var p = e.getCoordinate();
38677           var n = this.addNode(p);
38678           n.add(e);
38679         };
38680         NodeMap.prototype.interfaces_ = function interfaces_ () {
38681           return []
38682         };
38683         NodeMap.prototype.getClass = function getClass () {
38684           return NodeMap
38685         };
38686
38687         var Quadrant = function Quadrant () {};
38688
38689         var staticAccessors$21 = { NE: { configurable: true },NW: { configurable: true },SW: { configurable: true },SE: { configurable: true } };
38690
38691         Quadrant.prototype.interfaces_ = function interfaces_ () {
38692           return []
38693         };
38694         Quadrant.prototype.getClass = function getClass () {
38695           return Quadrant
38696         };
38697         Quadrant.isNorthern = function isNorthern (quad) {
38698           return quad === Quadrant.NE || quad === Quadrant.NW
38699         };
38700         Quadrant.isOpposite = function isOpposite (quad1, quad2) {
38701           if (quad1 === quad2) { return false }
38702           var diff = (quad1 - quad2 + 4) % 4;
38703           if (diff === 2) { return true }
38704           return false
38705         };
38706         Quadrant.commonHalfPlane = function commonHalfPlane (quad1, quad2) {
38707           if (quad1 === quad2) { return quad1 }
38708           var diff = (quad1 - quad2 + 4) % 4;
38709           if (diff === 2) { return -1 }
38710           var min = quad1 < quad2 ? quad1 : quad2;
38711           var max = quad1 > quad2 ? quad1 : quad2;
38712           if (min === 0 && max === 3) { return 3 }
38713           return min
38714         };
38715         Quadrant.isInHalfPlane = function isInHalfPlane (quad, halfPlane) {
38716           if (halfPlane === Quadrant.SE) {
38717             return quad === Quadrant.SE || quad === Quadrant.SW
38718           }
38719           return quad === halfPlane || quad === halfPlane + 1
38720         };
38721         Quadrant.quadrant = function quadrant () {
38722           if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
38723             var dx = arguments[0];
38724             var dy = arguments[1];
38725             if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the quadrant for point ( ' + dx + ', ' + dy + ' )') }
38726             if (dx >= 0.0) {
38727               if (dy >= 0.0) { return Quadrant.NE; } else { return Quadrant.SE }
38728             } else {
38729               if (dy >= 0.0) { return Quadrant.NW; } else { return Quadrant.SW }
38730             }
38731           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
38732             var p0 = arguments[0];
38733             var p1 = arguments[1];
38734             if (p1.x === p0.x && p1.y === p0.y) { throw new IllegalArgumentException('Cannot compute the quadrant for two identical points ' + p0) }
38735             if (p1.x >= p0.x) {
38736               if (p1.y >= p0.y) { return Quadrant.NE; } else { return Quadrant.SE }
38737             } else {
38738               if (p1.y >= p0.y) { return Quadrant.NW; } else { return Quadrant.SW }
38739             }
38740           }
38741         };
38742         staticAccessors$21.NE.get = function () { return 0 };
38743         staticAccessors$21.NW.get = function () { return 1 };
38744         staticAccessors$21.SW.get = function () { return 2 };
38745         staticAccessors$21.SE.get = function () { return 3 };
38746
38747         Object.defineProperties( Quadrant, staticAccessors$21 );
38748
38749         var EdgeEnd = function EdgeEnd () {
38750           this._edge = null;
38751           this._label = null;
38752           this._node = null;
38753           this._p0 = null;
38754           this._p1 = null;
38755           this._dx = null;
38756           this._dy = null;
38757           this._quadrant = null;
38758           if (arguments.length === 1) {
38759             var edge = arguments[0];
38760             this._edge = edge;
38761           } else if (arguments.length === 3) {
38762             var edge$1 = arguments[0];
38763             var p0 = arguments[1];
38764             var p1 = arguments[2];
38765             var label = null;
38766             this._edge = edge$1;
38767             this.init(p0, p1);
38768             this._label = label;
38769           } else if (arguments.length === 4) {
38770             var edge$2 = arguments[0];
38771             var p0$1 = arguments[1];
38772             var p1$1 = arguments[2];
38773             var label$1 = arguments[3];
38774             this._edge = edge$2;
38775             this.init(p0$1, p1$1);
38776             this._label = label$1;
38777           }
38778         };
38779         EdgeEnd.prototype.compareDirection = function compareDirection (e) {
38780           if (this._dx === e._dx && this._dy === e._dy) { return 0 }
38781           if (this._quadrant > e._quadrant) { return 1 }
38782           if (this._quadrant < e._quadrant) { return -1 }
38783           return CGAlgorithms.computeOrientation(e._p0, e._p1, this._p1)
38784         };
38785         EdgeEnd.prototype.getDy = function getDy () {
38786           return this._dy
38787         };
38788         EdgeEnd.prototype.getCoordinate = function getCoordinate () {
38789           return this._p0
38790         };
38791         EdgeEnd.prototype.setNode = function setNode (node) {
38792           this._node = node;
38793         };
38794         EdgeEnd.prototype.print = function print (out) {
38795           var angle = Math.atan2(this._dy, this._dx);
38796           var className = this.getClass().getName();
38797           var lastDotPos = className.lastIndexOf('.');
38798           var name = className.substring(lastDotPos + 1);
38799           out.print('  ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + '   ' + this._label);
38800         };
38801         EdgeEnd.prototype.compareTo = function compareTo (obj) {
38802           var e = obj;
38803           return this.compareDirection(e)
38804         };
38805         EdgeEnd.prototype.getDirectedCoordinate = function getDirectedCoordinate () {
38806           return this._p1
38807         };
38808         EdgeEnd.prototype.getDx = function getDx () {
38809           return this._dx
38810         };
38811         EdgeEnd.prototype.getLabel = function getLabel () {
38812           return this._label
38813         };
38814         EdgeEnd.prototype.getEdge = function getEdge () {
38815           return this._edge
38816         };
38817         EdgeEnd.prototype.getQuadrant = function getQuadrant () {
38818           return this._quadrant
38819         };
38820         EdgeEnd.prototype.getNode = function getNode () {
38821           return this._node
38822         };
38823         EdgeEnd.prototype.toString = function toString () {
38824           var angle = Math.atan2(this._dy, this._dx);
38825           var className = this.getClass().getName();
38826           var lastDotPos = className.lastIndexOf('.');
38827           var name = className.substring(lastDotPos + 1);
38828           return '  ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + angle + '   ' + this._label
38829         };
38830         EdgeEnd.prototype.computeLabel = function computeLabel (boundaryNodeRule) {};
38831         EdgeEnd.prototype.init = function init (p0, p1) {
38832           this._p0 = p0;
38833           this._p1 = p1;
38834           this._dx = p1.x - p0.x;
38835           this._dy = p1.y - p0.y;
38836           this._quadrant = Quadrant.quadrant(this._dx, this._dy);
38837           Assert.isTrue(!(this._dx === 0 && this._dy === 0), 'EdgeEnd with identical endpoints found');
38838         };
38839         EdgeEnd.prototype.interfaces_ = function interfaces_ () {
38840           return [Comparable]
38841         };
38842         EdgeEnd.prototype.getClass = function getClass () {
38843           return EdgeEnd
38844         };
38845
38846         var DirectedEdge = (function (EdgeEnd$$1) {
38847           function DirectedEdge () {
38848             var edge = arguments[0];
38849             var isForward = arguments[1];
38850             EdgeEnd$$1.call(this, edge);
38851             this._isForward = null;
38852             this._isInResult = false;
38853             this._isVisited = false;
38854             this._sym = null;
38855             this._next = null;
38856             this._nextMin = null;
38857             this._edgeRing = null;
38858             this._minEdgeRing = null;
38859             this._depth = [0, -999, -999];
38860             this._isForward = isForward;
38861             if (isForward) {
38862               this.init(edge.getCoordinate(0), edge.getCoordinate(1));
38863             } else {
38864               var n = edge.getNumPoints() - 1;
38865               this.init(edge.getCoordinate(n), edge.getCoordinate(n - 1));
38866             }
38867             this.computeDirectedLabel();
38868           }
38869
38870           if ( EdgeEnd$$1 ) { DirectedEdge.__proto__ = EdgeEnd$$1; }
38871           DirectedEdge.prototype = Object.create( EdgeEnd$$1 && EdgeEnd$$1.prototype );
38872           DirectedEdge.prototype.constructor = DirectedEdge;
38873           DirectedEdge.prototype.getNextMin = function getNextMin () {
38874             return this._nextMin
38875           };
38876           DirectedEdge.prototype.getDepth = function getDepth (position) {
38877             return this._depth[position]
38878           };
38879           DirectedEdge.prototype.setVisited = function setVisited (isVisited) {
38880             this._isVisited = isVisited;
38881           };
38882           DirectedEdge.prototype.computeDirectedLabel = function computeDirectedLabel () {
38883             this._label = new Label(this._edge.getLabel());
38884             if (!this._isForward) { this._label.flip(); }
38885           };
38886           DirectedEdge.prototype.getNext = function getNext () {
38887             return this._next
38888           };
38889           DirectedEdge.prototype.setDepth = function setDepth (position, depthVal) {
38890             if (this._depth[position] !== -999) {
38891               if (this._depth[position] !== depthVal) { throw new TopologyException('assigned depths do not match', this.getCoordinate()) }
38892             }
38893             this._depth[position] = depthVal;
38894           };
38895           DirectedEdge.prototype.isInteriorAreaEdge = function isInteriorAreaEdge () {
38896             var this$1 = this;
38897
38898             var isInteriorAreaEdge = true;
38899             for (var i = 0; i < 2; i++) {
38900               if (!(this$1._label.isArea(i) && this$1._label.getLocation(i, Position.LEFT) === Location.INTERIOR && this$1._label.getLocation(i, Position.RIGHT) === Location.INTERIOR)) {
38901                 isInteriorAreaEdge = false;
38902               }
38903             }
38904             return isInteriorAreaEdge
38905           };
38906           DirectedEdge.prototype.setNextMin = function setNextMin (nextMin) {
38907             this._nextMin = nextMin;
38908           };
38909           DirectedEdge.prototype.print = function print (out) {
38910             EdgeEnd$$1.prototype.print.call(this, out);
38911             out.print(' ' + this._depth[Position.LEFT] + '/' + this._depth[Position.RIGHT]);
38912             out.print(' (' + this.getDepthDelta() + ')');
38913             if (this._isInResult) { out.print(' inResult'); }
38914           };
38915           DirectedEdge.prototype.setMinEdgeRing = function setMinEdgeRing (minEdgeRing) {
38916             this._minEdgeRing = minEdgeRing;
38917           };
38918           DirectedEdge.prototype.isLineEdge = function isLineEdge () {
38919             var isLine = this._label.isLine(0) || this._label.isLine(1);
38920             var isExteriorIfArea0 = !this._label.isArea(0) || this._label.allPositionsEqual(0, Location.EXTERIOR);
38921             var isExteriorIfArea1 = !this._label.isArea(1) || this._label.allPositionsEqual(1, Location.EXTERIOR);
38922             return isLine && isExteriorIfArea0 && isExteriorIfArea1
38923           };
38924           DirectedEdge.prototype.setEdgeRing = function setEdgeRing (edgeRing) {
38925             this._edgeRing = edgeRing;
38926           };
38927           DirectedEdge.prototype.getMinEdgeRing = function getMinEdgeRing () {
38928             return this._minEdgeRing
38929           };
38930           DirectedEdge.prototype.getDepthDelta = function getDepthDelta () {
38931             var depthDelta = this._edge.getDepthDelta();
38932             if (!this._isForward) { depthDelta = -depthDelta; }
38933             return depthDelta
38934           };
38935           DirectedEdge.prototype.setInResult = function setInResult (isInResult) {
38936             this._isInResult = isInResult;
38937           };
38938           DirectedEdge.prototype.getSym = function getSym () {
38939             return this._sym
38940           };
38941           DirectedEdge.prototype.isForward = function isForward () {
38942             return this._isForward
38943           };
38944           DirectedEdge.prototype.getEdge = function getEdge () {
38945             return this._edge
38946           };
38947           DirectedEdge.prototype.printEdge = function printEdge (out) {
38948             this.print(out);
38949             out.print(' ');
38950             if (this._isForward) { this._edge.print(out); } else { this._edge.printReverse(out); }
38951           };
38952           DirectedEdge.prototype.setSym = function setSym (de) {
38953             this._sym = de;
38954           };
38955           DirectedEdge.prototype.setVisitedEdge = function setVisitedEdge (isVisited) {
38956             this.setVisited(isVisited);
38957             this._sym.setVisited(isVisited);
38958           };
38959           DirectedEdge.prototype.setEdgeDepths = function setEdgeDepths (position, depth) {
38960             var depthDelta = this.getEdge().getDepthDelta();
38961             if (!this._isForward) { depthDelta = -depthDelta; }
38962             var directionFactor = 1;
38963             if (position === Position.LEFT) { directionFactor = -1; }
38964             var oppositePos = Position.opposite(position);
38965             var delta = depthDelta * directionFactor;
38966             var oppositeDepth = depth + delta;
38967             this.setDepth(position, depth);
38968             this.setDepth(oppositePos, oppositeDepth);
38969           };
38970           DirectedEdge.prototype.getEdgeRing = function getEdgeRing () {
38971             return this._edgeRing
38972           };
38973           DirectedEdge.prototype.isInResult = function isInResult () {
38974             return this._isInResult
38975           };
38976           DirectedEdge.prototype.setNext = function setNext (next) {
38977             this._next = next;
38978           };
38979           DirectedEdge.prototype.isVisited = function isVisited () {
38980             return this._isVisited
38981           };
38982           DirectedEdge.prototype.interfaces_ = function interfaces_ () {
38983             return []
38984           };
38985           DirectedEdge.prototype.getClass = function getClass () {
38986             return DirectedEdge
38987           };
38988           DirectedEdge.depthFactor = function depthFactor (currLocation, nextLocation) {
38989             if (currLocation === Location.EXTERIOR && nextLocation === Location.INTERIOR) { return 1; } else if (currLocation === Location.INTERIOR && nextLocation === Location.EXTERIOR) { return -1 }
38990             return 0
38991           };
38992
38993           return DirectedEdge;
38994         }(EdgeEnd));
38995
38996         var NodeFactory = function NodeFactory () {};
38997
38998         NodeFactory.prototype.createNode = function createNode (coord) {
38999           return new Node$2(coord, null)
39000         };
39001         NodeFactory.prototype.interfaces_ = function interfaces_ () {
39002           return []
39003         };
39004         NodeFactory.prototype.getClass = function getClass () {
39005           return NodeFactory
39006         };
39007
39008         var PlanarGraph = function PlanarGraph () {
39009           this._edges = new ArrayList();
39010           this._nodes = null;
39011           this._edgeEndList = new ArrayList();
39012           if (arguments.length === 0) {
39013             this._nodes = new NodeMap(new NodeFactory());
39014           } else if (arguments.length === 1) {
39015             var nodeFact = arguments[0];
39016             this._nodes = new NodeMap(nodeFact);
39017           }
39018         };
39019         PlanarGraph.prototype.printEdges = function printEdges (out) {
39020             var this$1 = this;
39021
39022           out.println('Edges:');
39023           for (var i = 0; i < this._edges.size(); i++) {
39024             out.println('edge ' + i + ':');
39025             var e = this$1._edges.get(i);
39026             e.print(out);
39027             e.eiList.print(out);
39028           }
39029         };
39030         PlanarGraph.prototype.find = function find (coord) {
39031           return this._nodes.find(coord)
39032         };
39033         PlanarGraph.prototype.addNode = function addNode () {
39034           if (arguments[0] instanceof Node$2) {
39035             var node = arguments[0];
39036             return this._nodes.addNode(node)
39037           } else if (arguments[0] instanceof Coordinate) {
39038             var coord = arguments[0];
39039             return this._nodes.addNode(coord)
39040           }
39041         };
39042         PlanarGraph.prototype.getNodeIterator = function getNodeIterator () {
39043           return this._nodes.iterator()
39044         };
39045         PlanarGraph.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
39046           for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
39047             var node = nodeit.next();
39048             node.getEdges().linkResultDirectedEdges();
39049           }
39050         };
39051         PlanarGraph.prototype.debugPrintln = function debugPrintln (o) {
39052           System.out.println(o);
39053         };
39054         PlanarGraph.prototype.isBoundaryNode = function isBoundaryNode (geomIndex, coord) {
39055           var node = this._nodes.find(coord);
39056           if (node === null) { return false }
39057           var label = node.getLabel();
39058           if (label !== null && label.getLocation(geomIndex) === Location.BOUNDARY) { return true }
39059           return false
39060         };
39061         PlanarGraph.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
39062           for (var nodeit = this._nodes.iterator(); nodeit.hasNext();) {
39063             var node = nodeit.next();
39064             node.getEdges().linkAllDirectedEdges();
39065           }
39066         };
39067         PlanarGraph.prototype.matchInSameDirection = function matchInSameDirection (p0, p1, ep0, ep1) {
39068           if (!p0.equals(ep0)) { return false }
39069           if (CGAlgorithms.computeOrientation(p0, p1, ep1) === CGAlgorithms.COLLINEAR && Quadrant.quadrant(p0, p1) === Quadrant.quadrant(ep0, ep1)) { return true }
39070           return false
39071         };
39072         PlanarGraph.prototype.getEdgeEnds = function getEdgeEnds () {
39073           return this._edgeEndList
39074         };
39075         PlanarGraph.prototype.debugPrint = function debugPrint (o) {
39076           System.out.print(o);
39077         };
39078         PlanarGraph.prototype.getEdgeIterator = function getEdgeIterator () {
39079           return this._edges.iterator()
39080         };
39081         PlanarGraph.prototype.findEdgeInSameDirection = function findEdgeInSameDirection (p0, p1) {
39082             var this$1 = this;
39083
39084           for (var i = 0; i < this._edges.size(); i++) {
39085             var e = this$1._edges.get(i);
39086             var eCoord = e.getCoordinates();
39087             if (this$1.matchInSameDirection(p0, p1, eCoord[0], eCoord[1])) { return e }
39088             if (this$1.matchInSameDirection(p0, p1, eCoord[eCoord.length - 1], eCoord[eCoord.length - 2])) { return e }
39089           }
39090           return null
39091         };
39092         PlanarGraph.prototype.insertEdge = function insertEdge (e) {
39093           this._edges.add(e);
39094         };
39095         PlanarGraph.prototype.findEdgeEnd = function findEdgeEnd (e) {
39096           for (var i = this.getEdgeEnds().iterator(); i.hasNext();) {
39097             var ee = i.next();
39098             if (ee.getEdge() === e) { return ee }
39099           }
39100           return null
39101         };
39102         PlanarGraph.prototype.addEdges = function addEdges (edgesToAdd) {
39103             var this$1 = this;
39104
39105           for (var it = edgesToAdd.iterator(); it.hasNext();) {
39106             var e = it.next();
39107             this$1._edges.add(e);
39108             var de1 = new DirectedEdge(e, true);
39109             var de2 = new DirectedEdge(e, false);
39110             de1.setSym(de2);
39111             de2.setSym(de1);
39112             this$1.add(de1);
39113             this$1.add(de2);
39114           }
39115         };
39116         PlanarGraph.prototype.add = function add (e) {
39117           this._nodes.add(e);
39118           this._edgeEndList.add(e);
39119         };
39120         PlanarGraph.prototype.getNodes = function getNodes () {
39121           return this._nodes.values()
39122         };
39123         PlanarGraph.prototype.findEdge = function findEdge (p0, p1) {
39124             var this$1 = this;
39125
39126           for (var i = 0; i < this._edges.size(); i++) {
39127             var e = this$1._edges.get(i);
39128             var eCoord = e.getCoordinates();
39129             if (p0.equals(eCoord[0]) && p1.equals(eCoord[1])) { return e }
39130           }
39131           return null
39132         };
39133         PlanarGraph.prototype.interfaces_ = function interfaces_ () {
39134           return []
39135         };
39136         PlanarGraph.prototype.getClass = function getClass () {
39137           return PlanarGraph
39138         };
39139         PlanarGraph.linkResultDirectedEdges = function linkResultDirectedEdges (nodes) {
39140           for (var nodeit = nodes.iterator(); nodeit.hasNext();) {
39141             var node = nodeit.next();
39142             node.getEdges().linkResultDirectedEdges();
39143           }
39144         };
39145
39146         var PolygonBuilder = function PolygonBuilder () {
39147           this._geometryFactory = null;
39148           this._shellList = new ArrayList();
39149           var geometryFactory = arguments[0];
39150           this._geometryFactory = geometryFactory;
39151         };
39152         PolygonBuilder.prototype.sortShellsAndHoles = function sortShellsAndHoles (edgeRings, shellList, freeHoleList) {
39153           for (var it = edgeRings.iterator(); it.hasNext();) {
39154             var er = it.next();
39155             if (er.isHole()) {
39156               freeHoleList.add(er);
39157             } else {
39158               shellList.add(er);
39159             }
39160           }
39161         };
39162         PolygonBuilder.prototype.computePolygons = function computePolygons (shellList) {
39163             var this$1 = this;
39164
39165           var resultPolyList = new ArrayList();
39166           for (var it = shellList.iterator(); it.hasNext();) {
39167             var er = it.next();
39168             var poly = er.toPolygon(this$1._geometryFactory);
39169             resultPolyList.add(poly);
39170           }
39171           return resultPolyList
39172         };
39173         PolygonBuilder.prototype.placeFreeHoles = function placeFreeHoles (shellList, freeHoleList) {
39174             var this$1 = this;
39175
39176           for (var it = freeHoleList.iterator(); it.hasNext();) {
39177             var hole = it.next();
39178             if (hole.getShell() === null) {
39179               var shell = this$1.findEdgeRingContaining(hole, shellList);
39180               if (shell === null) { throw new TopologyException('unable to assign hole to a shell', hole.getCoordinate(0)) }
39181               hole.setShell(shell);
39182             }
39183           }
39184         };
39185         PolygonBuilder.prototype.buildMinimalEdgeRings = function buildMinimalEdgeRings (maxEdgeRings, shellList, freeHoleList) {
39186             var this$1 = this;
39187
39188           var edgeRings = new ArrayList();
39189           for (var it = maxEdgeRings.iterator(); it.hasNext();) {
39190             var er = it.next();
39191             if (er.getMaxNodeDegree() > 2) {
39192               er.linkDirectedEdgesForMinimalEdgeRings();
39193               var minEdgeRings = er.buildMinimalRings();
39194               var shell = this$1.findShell(minEdgeRings);
39195               if (shell !== null) {
39196                 this$1.placePolygonHoles(shell, minEdgeRings);
39197                 shellList.add(shell);
39198               } else {
39199                 freeHoleList.addAll(minEdgeRings);
39200               }
39201             } else {
39202               edgeRings.add(er);
39203             }
39204           }
39205           return edgeRings
39206         };
39207         PolygonBuilder.prototype.containsPoint = function containsPoint (p) {
39208           for (var it = this._shellList.iterator(); it.hasNext();) {
39209             var er = it.next();
39210             if (er.containsPoint(p)) { return true }
39211           }
39212           return false
39213         };
39214         PolygonBuilder.prototype.buildMaximalEdgeRings = function buildMaximalEdgeRings (dirEdges) {
39215             var this$1 = this;
39216
39217           var maxEdgeRings = new ArrayList();
39218           for (var it = dirEdges.iterator(); it.hasNext();) {
39219             var de = it.next();
39220             if (de.isInResult() && de.getLabel().isArea()) {
39221               if (de.getEdgeRing() === null) {
39222                 var er = new MaximalEdgeRing(de, this$1._geometryFactory);
39223                 maxEdgeRings.add(er);
39224                 er.setInResult();
39225               }
39226             }
39227           }
39228           return maxEdgeRings
39229         };
39230         PolygonBuilder.prototype.placePolygonHoles = function placePolygonHoles (shell, minEdgeRings) {
39231           for (var it = minEdgeRings.iterator(); it.hasNext();) {
39232             var er = it.next();
39233             if (er.isHole()) {
39234               er.setShell(shell);
39235             }
39236           }
39237         };
39238         PolygonBuilder.prototype.getPolygons = function getPolygons () {
39239           var resultPolyList = this.computePolygons(this._shellList);
39240           return resultPolyList
39241         };
39242         PolygonBuilder.prototype.findEdgeRingContaining = function findEdgeRingContaining (testEr, shellList) {
39243           var testRing = testEr.getLinearRing();
39244           var testEnv = testRing.getEnvelopeInternal();
39245           var testPt = testRing.getCoordinateN(0);
39246           var minShell = null;
39247           var minEnv = null;
39248           for (var it = shellList.iterator(); it.hasNext();) {
39249             var tryShell = it.next();
39250             var tryRing = tryShell.getLinearRing();
39251             var tryEnv = tryRing.getEnvelopeInternal();
39252             if (minShell !== null) { minEnv = minShell.getLinearRing().getEnvelopeInternal(); }
39253             var isContained = false;
39254             if (tryEnv.contains(testEnv) && CGAlgorithms.isPointInRing(testPt, tryRing.getCoordinates())) { isContained = true; }
39255             if (isContained) {
39256               if (minShell === null || minEnv.contains(tryEnv)) {
39257                 minShell = tryShell;
39258               }
39259             }
39260           }
39261           return minShell
39262         };
39263         PolygonBuilder.prototype.findShell = function findShell (minEdgeRings) {
39264           var shellCount = 0;
39265           var shell = null;
39266           for (var it = minEdgeRings.iterator(); it.hasNext();) {
39267             var er = it.next();
39268             if (!er.isHole()) {
39269               shell = er;
39270               shellCount++;
39271             }
39272           }
39273           Assert.isTrue(shellCount <= 1, 'found two shells in MinimalEdgeRing list');
39274           return shell
39275         };
39276         PolygonBuilder.prototype.add = function add () {
39277           if (arguments.length === 1) {
39278             var graph = arguments[0];
39279             this.add(graph.getEdgeEnds(), graph.getNodes());
39280           } else if (arguments.length === 2) {
39281             var dirEdges = arguments[0];
39282             var nodes = arguments[1];
39283             PlanarGraph.linkResultDirectedEdges(nodes);
39284             var maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);
39285             var freeHoleList = new ArrayList();
39286             var edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);
39287             this.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);
39288             this.placeFreeHoles(this._shellList, freeHoleList);
39289           }
39290         };
39291         PolygonBuilder.prototype.interfaces_ = function interfaces_ () {
39292           return []
39293         };
39294         PolygonBuilder.prototype.getClass = function getClass () {
39295           return PolygonBuilder
39296         };
39297
39298         var Boundable = function Boundable () {};
39299
39300         Boundable.prototype.getBounds = function getBounds () {};
39301         Boundable.prototype.interfaces_ = function interfaces_ () {
39302           return []
39303         };
39304         Boundable.prototype.getClass = function getClass () {
39305           return Boundable
39306         };
39307
39308         var ItemBoundable = function ItemBoundable () {
39309           this._bounds = null;
39310           this._item = null;
39311           var bounds = arguments[0];
39312           var item = arguments[1];
39313           this._bounds = bounds;
39314           this._item = item;
39315         };
39316         ItemBoundable.prototype.getItem = function getItem () {
39317           return this._item
39318         };
39319         ItemBoundable.prototype.getBounds = function getBounds () {
39320           return this._bounds
39321         };
39322         ItemBoundable.prototype.interfaces_ = function interfaces_ () {
39323           return [Boundable, Serializable]
39324         };
39325         ItemBoundable.prototype.getClass = function getClass () {
39326           return ItemBoundable
39327         };
39328
39329         var PriorityQueue = function PriorityQueue () {
39330           this._size = null;
39331           this._items = null;
39332           this._size = 0;
39333           this._items = new ArrayList();
39334           this._items.add(null);
39335         };
39336         PriorityQueue.prototype.poll = function poll () {
39337           if (this.isEmpty()) { return null }
39338           var minItem = this._items.get(1);
39339           this._items.set(1, this._items.get(this._size));
39340           this._size -= 1;
39341           this.reorder(1);
39342           return minItem
39343         };
39344         PriorityQueue.prototype.size = function size () {
39345           return this._size
39346         };
39347         PriorityQueue.prototype.reorder = function reorder (hole) {
39348             var this$1 = this;
39349
39350           var child = null;
39351           var tmp = this._items.get(hole);
39352           for (; hole * 2 <= this._size; hole = child) {
39353             child = hole * 2;
39354             if (child !== this$1._size && this$1._items.get(child + 1).compareTo(this$1._items.get(child)) < 0) { child++; }
39355             if (this$1._items.get(child).compareTo(tmp) < 0) { this$1._items.set(hole, this$1._items.get(child)); } else { break }
39356           }
39357           this._items.set(hole, tmp);
39358         };
39359         PriorityQueue.prototype.clear = function clear () {
39360           this._size = 0;
39361           this._items.clear();
39362         };
39363         PriorityQueue.prototype.isEmpty = function isEmpty () {
39364           return this._size === 0
39365         };
39366         PriorityQueue.prototype.add = function add (x) {
39367             var this$1 = this;
39368
39369           this._items.add(null);
39370           this._size += 1;
39371           var hole = this._size;
39372           this._items.set(0, x);
39373           for (; x.compareTo(this._items.get(Math.trunc(hole / 2))) < 0; hole /= 2) {
39374             this$1._items.set(hole, this$1._items.get(Math.trunc(hole / 2)));
39375           }
39376           this._items.set(hole, x);
39377         };
39378         PriorityQueue.prototype.interfaces_ = function interfaces_ () {
39379           return []
39380         };
39381         PriorityQueue.prototype.getClass = function getClass () {
39382           return PriorityQueue
39383         };
39384
39385         var ItemVisitor = function ItemVisitor () {};
39386
39387         ItemVisitor.prototype.visitItem = function visitItem (item) {};
39388         ItemVisitor.prototype.interfaces_ = function interfaces_ () {
39389           return []
39390         };
39391         ItemVisitor.prototype.getClass = function getClass () {
39392           return ItemVisitor
39393         };
39394
39395         var SpatialIndex = function SpatialIndex () {};
39396
39397         SpatialIndex.prototype.insert = function insert (itemEnv, item) {};
39398         SpatialIndex.prototype.remove = function remove (itemEnv, item) {};
39399         SpatialIndex.prototype.query = function query () {
39400           // if (arguments.length === 1) {
39401           // const searchEnv = arguments[0]
39402           // } else if (arguments.length === 2) {
39403           // const searchEnv = arguments[0]
39404           // const visitor = arguments[1]
39405           // }
39406         };
39407         SpatialIndex.prototype.interfaces_ = function interfaces_ () {
39408           return []
39409         };
39410         SpatialIndex.prototype.getClass = function getClass () {
39411           return SpatialIndex
39412         };
39413
39414         var AbstractNode = function AbstractNode () {
39415           this._childBoundables = new ArrayList();
39416           this._bounds = null;
39417           this._level = null;
39418           if (arguments.length === 0) ; else if (arguments.length === 1) {
39419             var level = arguments[0];
39420             this._level = level;
39421           }
39422         };
39423
39424         var staticAccessors$22 = { serialVersionUID: { configurable: true } };
39425         AbstractNode.prototype.getLevel = function getLevel () {
39426           return this._level
39427         };
39428         AbstractNode.prototype.size = function size () {
39429           return this._childBoundables.size()
39430         };
39431         AbstractNode.prototype.getChildBoundables = function getChildBoundables () {
39432           return this._childBoundables
39433         };
39434         AbstractNode.prototype.addChildBoundable = function addChildBoundable (childBoundable) {
39435           Assert.isTrue(this._bounds === null);
39436           this._childBoundables.add(childBoundable);
39437         };
39438         AbstractNode.prototype.isEmpty = function isEmpty () {
39439           return this._childBoundables.isEmpty()
39440         };
39441         AbstractNode.prototype.getBounds = function getBounds () {
39442           if (this._bounds === null) {
39443             this._bounds = this.computeBounds();
39444           }
39445           return this._bounds
39446         };
39447         AbstractNode.prototype.interfaces_ = function interfaces_ () {
39448           return [Boundable, Serializable]
39449         };
39450         AbstractNode.prototype.getClass = function getClass () {
39451           return AbstractNode
39452         };
39453         staticAccessors$22.serialVersionUID.get = function () { return 6493722185909573708 };
39454
39455         Object.defineProperties( AbstractNode, staticAccessors$22 );
39456
39457         var Collections = function Collections () {};
39458
39459         Collections.reverseOrder = function reverseOrder () {
39460           return {
39461             compare: function compare (a, b) {
39462               return b.compareTo(a)
39463             }
39464           }
39465         };
39466         Collections.min = function min (l) {
39467           Collections.sort(l);
39468           return l.get(0)
39469         };
39470         Collections.sort = function sort (l, c) {
39471           var a = l.toArray();
39472           if (c) {
39473             Arrays.sort(a, c);
39474           } else {
39475             Arrays.sort(a);
39476           }
39477           var i = l.iterator();
39478           for (var pos = 0, alen = a.length; pos < alen; pos++) {
39479             i.next();
39480             i.set(a[pos]);
39481           }
39482         };
39483         Collections.singletonList = function singletonList (o) {
39484           var arrayList = new ArrayList();
39485           arrayList.add(o);
39486           return arrayList
39487         };
39488
39489         var BoundablePair = function BoundablePair () {
39490           this._boundable1 = null;
39491           this._boundable2 = null;
39492           this._distance = null;
39493           this._itemDistance = null;
39494           var boundable1 = arguments[0];
39495           var boundable2 = arguments[1];
39496           var itemDistance = arguments[2];
39497           this._boundable1 = boundable1;
39498           this._boundable2 = boundable2;
39499           this._itemDistance = itemDistance;
39500           this._distance = this.distance();
39501         };
39502         BoundablePair.prototype.expandToQueue = function expandToQueue (priQ, minDistance) {
39503           var isComp1 = BoundablePair.isComposite(this._boundable1);
39504           var isComp2 = BoundablePair.isComposite(this._boundable2);
39505           if (isComp1 && isComp2) {
39506             if (BoundablePair.area(this._boundable1) > BoundablePair.area(this._boundable2)) {
39507               this.expand(this._boundable1, this._boundable2, priQ, minDistance);
39508               return null
39509             } else {
39510               this.expand(this._boundable2, this._boundable1, priQ, minDistance);
39511               return null
39512             }
39513           } else if (isComp1) {
39514             this.expand(this._boundable1, this._boundable2, priQ, minDistance);
39515             return null
39516           } else if (isComp2) {
39517             this.expand(this._boundable2, this._boundable1, priQ, minDistance);
39518             return null
39519           }
39520           throw new IllegalArgumentException('neither boundable is composite')
39521         };
39522         BoundablePair.prototype.isLeaves = function isLeaves () {
39523           return !(BoundablePair.isComposite(this._boundable1) || BoundablePair.isComposite(this._boundable2))
39524         };
39525         BoundablePair.prototype.compareTo = function compareTo (o) {
39526           var nd = o;
39527           if (this._distance < nd._distance) { return -1 }
39528           if (this._distance > nd._distance) { return 1 }
39529           return 0
39530         };
39531         BoundablePair.prototype.expand = function expand (bndComposite, bndOther, priQ, minDistance) {
39532             var this$1 = this;
39533
39534           var children = bndComposite.getChildBoundables();
39535           for (var i = children.iterator(); i.hasNext();) {
39536             var child = i.next();
39537             var bp = new BoundablePair(child, bndOther, this$1._itemDistance);
39538             if (bp.getDistance() < minDistance) {
39539               priQ.add(bp);
39540             }
39541           }
39542         };
39543         BoundablePair.prototype.getBoundable = function getBoundable (i) {
39544           if (i === 0) { return this._boundable1 }
39545           return this._boundable2
39546         };
39547         BoundablePair.prototype.getDistance = function getDistance () {
39548           return this._distance
39549         };
39550         BoundablePair.prototype.distance = function distance () {
39551           if (this.isLeaves()) {
39552             return this._itemDistance.distance(this._boundable1, this._boundable2)
39553           }
39554           return this._boundable1.getBounds().distance(this._boundable2.getBounds())
39555         };
39556         BoundablePair.prototype.interfaces_ = function interfaces_ () {
39557           return [Comparable]
39558         };
39559         BoundablePair.prototype.getClass = function getClass () {
39560           return BoundablePair
39561         };
39562         BoundablePair.area = function area (b) {
39563           return b.getBounds().getArea()
39564         };
39565         BoundablePair.isComposite = function isComposite (item) {
39566           return item instanceof AbstractNode
39567         };
39568
39569         var AbstractSTRtree = function AbstractSTRtree () {
39570           this._root = null;
39571           this._built = false;
39572           this._itemBoundables = new ArrayList();
39573           this._nodeCapacity = null;
39574           if (arguments.length === 0) {
39575             var nodeCapacity = AbstractSTRtree.DEFAULT_NODE_CAPACITY;
39576             this._nodeCapacity = nodeCapacity;
39577           } else if (arguments.length === 1) {
39578             var nodeCapacity$1 = arguments[0];
39579             Assert.isTrue(nodeCapacity$1 > 1, 'Node capacity must be greater than 1');
39580             this._nodeCapacity = nodeCapacity$1;
39581           }
39582         };
39583
39584         var staticAccessors$23 = { IntersectsOp: { configurable: true },serialVersionUID: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
39585         AbstractSTRtree.prototype.getNodeCapacity = function getNodeCapacity () {
39586           return this._nodeCapacity
39587         };
39588         AbstractSTRtree.prototype.lastNode = function lastNode (nodes) {
39589           return nodes.get(nodes.size() - 1)
39590         };
39591         AbstractSTRtree.prototype.size = function size () {
39592             var this$1 = this;
39593
39594           if (arguments.length === 0) {
39595             if (this.isEmpty()) {
39596               return 0
39597             }
39598             this.build();
39599             return this.size(this._root)
39600           } else if (arguments.length === 1) {
39601             var node = arguments[0];
39602             var size = 0;
39603             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
39604               var childBoundable = i.next();
39605               if (childBoundable instanceof AbstractNode) {
39606                 size += this$1.size(childBoundable);
39607               } else if (childBoundable instanceof ItemBoundable) {
39608                 size += 1;
39609               }
39610             }
39611             return size
39612           }
39613         };
39614         AbstractSTRtree.prototype.removeItem = function removeItem (node, item) {
39615           var childToRemove = null;
39616           for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
39617             var childBoundable = i.next();
39618             if (childBoundable instanceof ItemBoundable) {
39619               if (childBoundable.getItem() === item) { childToRemove = childBoundable; }
39620             }
39621           }
39622           if (childToRemove !== null) {
39623             node.getChildBoundables().remove(childToRemove);
39624             return true
39625           }
39626           return false
39627         };
39628         AbstractSTRtree.prototype.itemsTree = function itemsTree () {
39629             var this$1 = this;
39630
39631           if (arguments.length === 0) {
39632             this.build();
39633             var valuesTree = this.itemsTree(this._root);
39634             if (valuesTree === null) { return new ArrayList() }
39635             return valuesTree
39636           } else if (arguments.length === 1) {
39637             var node = arguments[0];
39638             var valuesTreeForNode = new ArrayList();
39639             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
39640               var childBoundable = i.next();
39641               if (childBoundable instanceof AbstractNode) {
39642                 var valuesTreeForChild = this$1.itemsTree(childBoundable);
39643                 if (valuesTreeForChild !== null) { valuesTreeForNode.add(valuesTreeForChild); }
39644               } else if (childBoundable instanceof ItemBoundable) {
39645                 valuesTreeForNode.add(childBoundable.getItem());
39646               } else {
39647                 Assert.shouldNeverReachHere();
39648               }
39649             }
39650             if (valuesTreeForNode.size() <= 0) { return null }
39651             return valuesTreeForNode
39652           }
39653         };
39654         AbstractSTRtree.prototype.insert = function insert (bounds, item) {
39655           Assert.isTrue(!this._built, 'Cannot insert items into an STR packed R-tree after it has been built.');
39656           this._itemBoundables.add(new ItemBoundable(bounds, item));
39657         };
39658         AbstractSTRtree.prototype.boundablesAtLevel = function boundablesAtLevel () {
39659             var this$1 = this;
39660
39661           if (arguments.length === 1) {
39662             var level = arguments[0];
39663             var boundables = new ArrayList();
39664             this.boundablesAtLevel(level, this._root, boundables);
39665             return boundables
39666           } else if (arguments.length === 3) {
39667             var level$1 = arguments[0];
39668             var top = arguments[1];
39669             var boundables$1 = arguments[2];
39670             Assert.isTrue(level$1 > -2);
39671             if (top.getLevel() === level$1) {
39672               boundables$1.add(top);
39673               return null
39674             }
39675             for (var i = top.getChildBoundables().iterator(); i.hasNext();) {
39676               var boundable = i.next();
39677               if (boundable instanceof AbstractNode) {
39678                 this$1.boundablesAtLevel(level$1, boundable, boundables$1);
39679               } else {
39680                 Assert.isTrue(boundable instanceof ItemBoundable);
39681                 if (level$1 === -1) {
39682                   boundables$1.add(boundable);
39683                 }
39684               }
39685             }
39686             return null
39687           }
39688         };
39689         AbstractSTRtree.prototype.query = function query () {
39690             var this$1 = this;
39691
39692           if (arguments.length === 1) {
39693             var searchBounds = arguments[0];
39694             this.build();
39695             var matches = new ArrayList();
39696             if (this.isEmpty()) {
39697               return matches
39698             }
39699             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
39700               this.query(searchBounds, this._root, matches);
39701             }
39702             return matches
39703           } else if (arguments.length === 2) {
39704             var searchBounds$1 = arguments[0];
39705             var visitor = arguments[1];
39706             this.build();
39707             if (this.isEmpty()) {
39708               return null
39709             }
39710             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds$1)) {
39711               this.query(searchBounds$1, this._root, visitor);
39712             }
39713           } else if (arguments.length === 3) {
39714             if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
39715               var searchBounds$2 = arguments[0];
39716               var node = arguments[1];
39717               var visitor$1 = arguments[2];
39718               var childBoundables = node.getChildBoundables();
39719               for (var i = 0; i < childBoundables.size(); i++) {
39720                 var childBoundable = childBoundables.get(i);
39721                 if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$2)) {
39722                   continue
39723                 }
39724                 if (childBoundable instanceof AbstractNode) {
39725                   this$1.query(searchBounds$2, childBoundable, visitor$1);
39726                 } else if (childBoundable instanceof ItemBoundable) {
39727                   visitor$1.visitItem(childBoundable.getItem());
39728                 } else {
39729                   Assert.shouldNeverReachHere();
39730                 }
39731               }
39732             } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
39733               var searchBounds$3 = arguments[0];
39734               var node$1 = arguments[1];
39735               var matches$1 = arguments[2];
39736               var childBoundables$1 = node$1.getChildBoundables();
39737               for (var i$1 = 0; i$1 < childBoundables$1.size(); i$1++) {
39738                 var childBoundable$1 = childBoundables$1.get(i$1);
39739                 if (!this$1.getIntersectsOp().intersects(childBoundable$1.getBounds(), searchBounds$3)) {
39740                   continue
39741                 }
39742                 if (childBoundable$1 instanceof AbstractNode) {
39743                   this$1.query(searchBounds$3, childBoundable$1, matches$1);
39744                 } else if (childBoundable$1 instanceof ItemBoundable) {
39745                   matches$1.add(childBoundable$1.getItem());
39746                 } else {
39747                   Assert.shouldNeverReachHere();
39748                 }
39749               }
39750             }
39751           }
39752         };
39753         AbstractSTRtree.prototype.build = function build () {
39754           if (this._built) { return null }
39755           this._root = this._itemBoundables.isEmpty() ? this.createNode(0) : this.createHigherLevels(this._itemBoundables, -1);
39756           this._itemBoundables = null;
39757           this._built = true;
39758         };
39759         AbstractSTRtree.prototype.getRoot = function getRoot () {
39760           this.build();
39761           return this._root
39762         };
39763         AbstractSTRtree.prototype.remove = function remove () {
39764             var this$1 = this;
39765
39766           if (arguments.length === 2) {
39767             var searchBounds = arguments[0];
39768             var item = arguments[1];
39769             this.build();
39770             if (this.getIntersectsOp().intersects(this._root.getBounds(), searchBounds)) {
39771               return this.remove(searchBounds, this._root, item)
39772             }
39773             return false
39774           } else if (arguments.length === 3) {
39775             var searchBounds$1 = arguments[0];
39776             var node = arguments[1];
39777             var item$1 = arguments[2];
39778             var found = this.removeItem(node, item$1);
39779             if (found) { return true }
39780             var childToPrune = null;
39781             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
39782               var childBoundable = i.next();
39783               if (!this$1.getIntersectsOp().intersects(childBoundable.getBounds(), searchBounds$1)) {
39784                 continue
39785               }
39786               if (childBoundable instanceof AbstractNode) {
39787                 found = this$1.remove(searchBounds$1, childBoundable, item$1);
39788                 if (found) {
39789                   childToPrune = childBoundable;
39790                   break
39791                 }
39792               }
39793             }
39794             if (childToPrune !== null) {
39795               if (childToPrune.getChildBoundables().isEmpty()) {
39796                 node.getChildBoundables().remove(childToPrune);
39797               }
39798             }
39799             return found
39800           }
39801         };
39802         AbstractSTRtree.prototype.createHigherLevels = function createHigherLevels (boundablesOfALevel, level) {
39803           Assert.isTrue(!boundablesOfALevel.isEmpty());
39804           var parentBoundables = this.createParentBoundables(boundablesOfALevel, level + 1);
39805           if (parentBoundables.size() === 1) {
39806             return parentBoundables.get(0)
39807           }
39808           return this.createHigherLevels(parentBoundables, level + 1)
39809         };
39810         AbstractSTRtree.prototype.depth = function depth () {
39811             var this$1 = this;
39812
39813           if (arguments.length === 0) {
39814             if (this.isEmpty()) {
39815               return 0
39816             }
39817             this.build();
39818             return this.depth(this._root)
39819           } else if (arguments.length === 1) {
39820             var node = arguments[0];
39821             var maxChildDepth = 0;
39822             for (var i = node.getChildBoundables().iterator(); i.hasNext();) {
39823               var childBoundable = i.next();
39824               if (childBoundable instanceof AbstractNode) {
39825                 var childDepth = this$1.depth(childBoundable);
39826                 if (childDepth > maxChildDepth) { maxChildDepth = childDepth; }
39827               }
39828             }
39829             return maxChildDepth + 1
39830           }
39831         };
39832         AbstractSTRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
39833             var this$1 = this;
39834
39835           Assert.isTrue(!childBoundables.isEmpty());
39836           var parentBoundables = new ArrayList();
39837           parentBoundables.add(this.createNode(newLevel));
39838           var sortedChildBoundables = new ArrayList(childBoundables);
39839           Collections.sort(sortedChildBoundables, this.getComparator());
39840           for (var i = sortedChildBoundables.iterator(); i.hasNext();) {
39841             var childBoundable = i.next();
39842             if (this$1.lastNode(parentBoundables).getChildBoundables().size() === this$1.getNodeCapacity()) {
39843               parentBoundables.add(this$1.createNode(newLevel));
39844             }
39845             this$1.lastNode(parentBoundables).addChildBoundable(childBoundable);
39846           }
39847           return parentBoundables
39848         };
39849         AbstractSTRtree.prototype.isEmpty = function isEmpty () {
39850           if (!this._built) { return this._itemBoundables.isEmpty() }
39851           return this._root.isEmpty()
39852         };
39853         AbstractSTRtree.prototype.interfaces_ = function interfaces_ () {
39854           return [Serializable]
39855         };
39856         AbstractSTRtree.prototype.getClass = function getClass () {
39857           return AbstractSTRtree
39858         };
39859         AbstractSTRtree.compareDoubles = function compareDoubles (a, b) {
39860           return a > b ? 1 : a < b ? -1 : 0
39861         };
39862         staticAccessors$23.IntersectsOp.get = function () { return IntersectsOp };
39863         staticAccessors$23.serialVersionUID.get = function () { return -3886435814360241337 };
39864         staticAccessors$23.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
39865
39866         Object.defineProperties( AbstractSTRtree, staticAccessors$23 );
39867
39868         var IntersectsOp = function IntersectsOp () {};
39869
39870         var ItemDistance = function ItemDistance () {};
39871
39872         ItemDistance.prototype.distance = function distance (item1, item2) {};
39873         ItemDistance.prototype.interfaces_ = function interfaces_ () {
39874           return []
39875         };
39876         ItemDistance.prototype.getClass = function getClass () {
39877           return ItemDistance
39878         };
39879
39880         var STRtree = (function (AbstractSTRtree$$1) {
39881           function STRtree (nodeCapacity) {
39882             nodeCapacity = nodeCapacity || STRtree.DEFAULT_NODE_CAPACITY;
39883             AbstractSTRtree$$1.call(this, nodeCapacity);
39884           }
39885
39886           if ( AbstractSTRtree$$1 ) { STRtree.__proto__ = AbstractSTRtree$$1; }
39887           STRtree.prototype = Object.create( AbstractSTRtree$$1 && AbstractSTRtree$$1.prototype );
39888           STRtree.prototype.constructor = STRtree;
39889
39890           var staticAccessors = { STRtreeNode: { configurable: true },serialVersionUID: { configurable: true },xComparator: { configurable: true },yComparator: { configurable: true },intersectsOp: { configurable: true },DEFAULT_NODE_CAPACITY: { configurable: true } };
39891           STRtree.prototype.createParentBoundablesFromVerticalSlices = function createParentBoundablesFromVerticalSlices (verticalSlices, newLevel) {
39892             var this$1 = this;
39893
39894             Assert.isTrue(verticalSlices.length > 0);
39895             var parentBoundables = new ArrayList();
39896             for (var i = 0; i < verticalSlices.length; i++) {
39897               parentBoundables.addAll(this$1.createParentBoundablesFromVerticalSlice(verticalSlices[i], newLevel));
39898             }
39899             return parentBoundables
39900           };
39901           STRtree.prototype.createNode = function createNode (level) {
39902             return new STRtreeNode(level)
39903           };
39904           STRtree.prototype.size = function size () {
39905             if (arguments.length === 0) {
39906               return AbstractSTRtree$$1.prototype.size.call(this)
39907             } else { return AbstractSTRtree$$1.prototype.size.apply(this, arguments) }
39908           };
39909           STRtree.prototype.insert = function insert () {
39910             if (arguments.length === 2) {
39911               var itemEnv = arguments[0];
39912               var item = arguments[1];
39913               if (itemEnv.isNull()) {
39914                 return null
39915               }
39916               AbstractSTRtree$$1.prototype.insert.call(this, itemEnv, item);
39917             } else { return AbstractSTRtree$$1.prototype.insert.apply(this, arguments) }
39918           };
39919           STRtree.prototype.getIntersectsOp = function getIntersectsOp () {
39920             return STRtree.intersectsOp
39921           };
39922           STRtree.prototype.verticalSlices = function verticalSlices (childBoundables, sliceCount) {
39923             var sliceCapacity = Math.trunc(Math.ceil(childBoundables.size() / sliceCount));
39924             var slices = new Array(sliceCount).fill(null);
39925             var i = childBoundables.iterator();
39926             for (var j = 0; j < sliceCount; j++) {
39927               slices[j] = new ArrayList();
39928               var boundablesAddedToSlice = 0;
39929               while (i.hasNext() && boundablesAddedToSlice < sliceCapacity) {
39930                 var childBoundable = i.next();
39931                 slices[j].add(childBoundable);
39932                 boundablesAddedToSlice++;
39933               }
39934             }
39935             return slices
39936           };
39937           STRtree.prototype.query = function query () {
39938             if (arguments.length === 1) {
39939               var searchEnv = arguments[0];
39940               return AbstractSTRtree$$1.prototype.query.call(this, searchEnv)
39941             } else if (arguments.length === 2) {
39942               var searchEnv$1 = arguments[0];
39943               var visitor = arguments[1];
39944               AbstractSTRtree$$1.prototype.query.call(this, searchEnv$1, visitor);
39945             } else if (arguments.length === 3) {
39946               if (hasInterface(arguments[2], ItemVisitor) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
39947                 var searchBounds = arguments[0];
39948                 var node = arguments[1];
39949                 var visitor$1 = arguments[2];
39950                 AbstractSTRtree$$1.prototype.query.call(this, searchBounds, node, visitor$1);
39951               } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Object && arguments[1] instanceof AbstractNode)) {
39952                 var searchBounds$1 = arguments[0];
39953                 var node$1 = arguments[1];
39954                 var matches = arguments[2];
39955                 AbstractSTRtree$$1.prototype.query.call(this, searchBounds$1, node$1, matches);
39956               }
39957             }
39958           };
39959           STRtree.prototype.getComparator = function getComparator () {
39960             return STRtree.yComparator
39961           };
39962           STRtree.prototype.createParentBoundablesFromVerticalSlice = function createParentBoundablesFromVerticalSlice (childBoundables, newLevel) {
39963             return AbstractSTRtree$$1.prototype.createParentBoundables.call(this, childBoundables, newLevel)
39964           };
39965           STRtree.prototype.remove = function remove () {
39966             if (arguments.length === 2) {
39967               var itemEnv = arguments[0];
39968               var item = arguments[1];
39969               return AbstractSTRtree$$1.prototype.remove.call(this, itemEnv, item)
39970             } else { return AbstractSTRtree$$1.prototype.remove.apply(this, arguments) }
39971           };
39972           STRtree.prototype.depth = function depth () {
39973             if (arguments.length === 0) {
39974               return AbstractSTRtree$$1.prototype.depth.call(this)
39975             } else { return AbstractSTRtree$$1.prototype.depth.apply(this, arguments) }
39976           };
39977           STRtree.prototype.createParentBoundables = function createParentBoundables (childBoundables, newLevel) {
39978             Assert.isTrue(!childBoundables.isEmpty());
39979             var minLeafCount = Math.trunc(Math.ceil(childBoundables.size() / this.getNodeCapacity()));
39980             var sortedChildBoundables = new ArrayList(childBoundables);
39981             Collections.sort(sortedChildBoundables, STRtree.xComparator);
39982             var verticalSlices = this.verticalSlices(sortedChildBoundables, Math.trunc(Math.ceil(Math.sqrt(minLeafCount))));
39983             return this.createParentBoundablesFromVerticalSlices(verticalSlices, newLevel)
39984           };
39985           STRtree.prototype.nearestNeighbour = function nearestNeighbour () {
39986             if (arguments.length === 1) {
39987               if (hasInterface(arguments[0], ItemDistance)) {
39988                 var itemDist = arguments[0];
39989                 var bp = new BoundablePair(this.getRoot(), this.getRoot(), itemDist);
39990                 return this.nearestNeighbour(bp)
39991               } else if (arguments[0] instanceof BoundablePair) {
39992                 var initBndPair = arguments[0];
39993                 return this.nearestNeighbour(initBndPair, Double.POSITIVE_INFINITY)
39994               }
39995             } else if (arguments.length === 2) {
39996               if (arguments[0] instanceof STRtree && hasInterface(arguments[1], ItemDistance)) {
39997                 var tree = arguments[0];
39998                 var itemDist$1 = arguments[1];
39999                 var bp$1 = new BoundablePair(this.getRoot(), tree.getRoot(), itemDist$1);
40000                 return this.nearestNeighbour(bp$1)
40001               } else if (arguments[0] instanceof BoundablePair && typeof arguments[1] === 'number') {
40002                 var initBndPair$1 = arguments[0];
40003                 var maxDistance = arguments[1];
40004                 var distanceLowerBound = maxDistance;
40005                 var minPair = null;
40006                 var priQ = new PriorityQueue();
40007                 priQ.add(initBndPair$1);
40008                 while (!priQ.isEmpty() && distanceLowerBound > 0.0) {
40009                   var bndPair = priQ.poll();
40010                   var currentDistance = bndPair.getDistance();
40011                   if (currentDistance >= distanceLowerBound) { break }
40012                   if (bndPair.isLeaves()) {
40013                     distanceLowerBound = currentDistance;
40014                     minPair = bndPair;
40015                   } else {
40016                     bndPair.expandToQueue(priQ, distanceLowerBound);
40017                   }
40018                 }
40019                 return [minPair.getBoundable(0).getItem(), minPair.getBoundable(1).getItem()]
40020               }
40021             } else if (arguments.length === 3) {
40022               var env = arguments[0];
40023               var item = arguments[1];
40024               var itemDist$2 = arguments[2];
40025               var bnd = new ItemBoundable(env, item);
40026               var bp$2 = new BoundablePair(this.getRoot(), bnd, itemDist$2);
40027               return this.nearestNeighbour(bp$2)[0]
40028             }
40029           };
40030           STRtree.prototype.interfaces_ = function interfaces_ () {
40031             return [SpatialIndex, Serializable]
40032           };
40033           STRtree.prototype.getClass = function getClass () {
40034             return STRtree
40035           };
40036           STRtree.centreX = function centreX (e) {
40037             return STRtree.avg(e.getMinX(), e.getMaxX())
40038           };
40039           STRtree.avg = function avg (a, b) {
40040             return (a + b) / 2
40041           };
40042           STRtree.centreY = function centreY (e) {
40043             return STRtree.avg(e.getMinY(), e.getMaxY())
40044           };
40045           staticAccessors.STRtreeNode.get = function () { return STRtreeNode };
40046           staticAccessors.serialVersionUID.get = function () { return 259274702368956900 };
40047           staticAccessors.xComparator.get = function () {
40048             return {
40049               interfaces_: function () {
40050                 return [Comparator]
40051               },
40052               compare: function (o1, o2) {
40053                 return AbstractSTRtree$$1.compareDoubles(STRtree.centreX(o1.getBounds()), STRtree.centreX(o2.getBounds()))
40054               }
40055             }
40056           };
40057           staticAccessors.yComparator.get = function () {
40058             return {
40059               interfaces_: function () {
40060                 return [Comparator]
40061               },
40062               compare: function (o1, o2) {
40063                 return AbstractSTRtree$$1.compareDoubles(STRtree.centreY(o1.getBounds()), STRtree.centreY(o2.getBounds()))
40064               }
40065             }
40066           };
40067           staticAccessors.intersectsOp.get = function () {
40068             return {
40069               interfaces_: function () {
40070                 return [AbstractSTRtree$$1.IntersectsOp]
40071               },
40072               intersects: function (aBounds, bBounds) {
40073                 return aBounds.intersects(bBounds)
40074               }
40075             }
40076           };
40077           staticAccessors.DEFAULT_NODE_CAPACITY.get = function () { return 10 };
40078
40079           Object.defineProperties( STRtree, staticAccessors );
40080
40081           return STRtree;
40082         }(AbstractSTRtree));
40083
40084         var STRtreeNode = (function (AbstractNode$$1) {
40085           function STRtreeNode () {
40086             var level = arguments[0];
40087             AbstractNode$$1.call(this, level);
40088           }
40089
40090           if ( AbstractNode$$1 ) { STRtreeNode.__proto__ = AbstractNode$$1; }
40091           STRtreeNode.prototype = Object.create( AbstractNode$$1 && AbstractNode$$1.prototype );
40092           STRtreeNode.prototype.constructor = STRtreeNode;
40093           STRtreeNode.prototype.computeBounds = function computeBounds () {
40094             var bounds = null;
40095             for (var i = this.getChildBoundables().iterator(); i.hasNext();) {
40096               var childBoundable = i.next();
40097               if (bounds === null) {
40098                 bounds = new Envelope(childBoundable.getBounds());
40099               } else {
40100                 bounds.expandToInclude(childBoundable.getBounds());
40101               }
40102             }
40103             return bounds
40104           };
40105           STRtreeNode.prototype.interfaces_ = function interfaces_ () {
40106             return []
40107           };
40108           STRtreeNode.prototype.getClass = function getClass () {
40109             return STRtreeNode
40110           };
40111
40112           return STRtreeNode;
40113         }(AbstractNode));
40114
40115         var SegmentPointComparator = function SegmentPointComparator () {};
40116
40117         SegmentPointComparator.prototype.interfaces_ = function interfaces_ () {
40118           return []
40119         };
40120         SegmentPointComparator.prototype.getClass = function getClass () {
40121           return SegmentPointComparator
40122         };
40123         SegmentPointComparator.relativeSign = function relativeSign (x0, x1) {
40124           if (x0 < x1) { return -1 }
40125           if (x0 > x1) { return 1 }
40126           return 0
40127         };
40128         SegmentPointComparator.compare = function compare (octant, p0, p1) {
40129           if (p0.equals2D(p1)) { return 0 }
40130           var xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);
40131           var ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);
40132           switch (octant) {
40133             case 0:
40134               return SegmentPointComparator.compareValue(xSign, ySign)
40135             case 1:
40136               return SegmentPointComparator.compareValue(ySign, xSign)
40137             case 2:
40138               return SegmentPointComparator.compareValue(ySign, -xSign)
40139             case 3:
40140               return SegmentPointComparator.compareValue(-xSign, ySign)
40141             case 4:
40142               return SegmentPointComparator.compareValue(-xSign, -ySign)
40143             case 5:
40144               return SegmentPointComparator.compareValue(-ySign, -xSign)
40145             case 6:
40146               return SegmentPointComparator.compareValue(-ySign, xSign)
40147             case 7:
40148               return SegmentPointComparator.compareValue(xSign, -ySign)
40149           }
40150           Assert.shouldNeverReachHere('invalid octant value');
40151           return 0
40152         };
40153         SegmentPointComparator.compareValue = function compareValue (compareSign0, compareSign1) {
40154           if (compareSign0 < 0) { return -1 }
40155           if (compareSign0 > 0) { return 1 }
40156           if (compareSign1 < 0) { return -1 }
40157           if (compareSign1 > 0) { return 1 }
40158           return 0
40159         };
40160
40161         var SegmentNode = function SegmentNode () {
40162           this._segString = null;
40163           this.coord = null;
40164           this.segmentIndex = null;
40165           this._segmentOctant = null;
40166           this._isInterior = null;
40167           var segString = arguments[0];
40168           var coord = arguments[1];
40169           var segmentIndex = arguments[2];
40170           var segmentOctant = arguments[3];
40171           this._segString = segString;
40172           this.coord = new Coordinate(coord);
40173           this.segmentIndex = segmentIndex;
40174           this._segmentOctant = segmentOctant;
40175           this._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));
40176         };
40177         SegmentNode.prototype.getCoordinate = function getCoordinate () {
40178           return this.coord
40179         };
40180         SegmentNode.prototype.print = function print (out) {
40181           out.print(this.coord);
40182           out.print(' seg # = ' + this.segmentIndex);
40183         };
40184         SegmentNode.prototype.compareTo = function compareTo (obj) {
40185           var other = obj;
40186           if (this.segmentIndex < other.segmentIndex) { return -1 }
40187           if (this.segmentIndex > other.segmentIndex) { return 1 }
40188           if (this.coord.equals2D(other.coord)) { return 0 }
40189           return SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord)
40190         };
40191         SegmentNode.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
40192           if (this.segmentIndex === 0 && !this._isInterior) { return true }
40193           if (this.segmentIndex === maxSegmentIndex) { return true }
40194           return false
40195         };
40196         SegmentNode.prototype.isInterior = function isInterior () {
40197           return this._isInterior
40198         };
40199         SegmentNode.prototype.interfaces_ = function interfaces_ () {
40200           return [Comparable]
40201         };
40202         SegmentNode.prototype.getClass = function getClass () {
40203           return SegmentNode
40204         };
40205
40206         // import Iterator from '../../../../java/util/Iterator'
40207         var SegmentNodeList = function SegmentNodeList () {
40208           this._nodeMap = new TreeMap();
40209           this._edge = null;
40210           var edge = arguments[0];
40211           this._edge = edge;
40212         };
40213         SegmentNodeList.prototype.getSplitCoordinates = function getSplitCoordinates () {
40214             var this$1 = this;
40215
40216           var coordList = new CoordinateList();
40217           this.addEndpoints();
40218           var it = this.iterator();
40219           var eiPrev = it.next();
40220           while (it.hasNext()) {
40221             var ei = it.next();
40222             this$1.addEdgeCoordinates(eiPrev, ei, coordList);
40223             eiPrev = ei;
40224           }
40225           return coordList.toCoordinateArray()
40226         };
40227         SegmentNodeList.prototype.addCollapsedNodes = function addCollapsedNodes () {
40228             var this$1 = this;
40229
40230           var collapsedVertexIndexes = new ArrayList();
40231           this.findCollapsesFromInsertedNodes(collapsedVertexIndexes);
40232           this.findCollapsesFromExistingVertices(collapsedVertexIndexes);
40233           for (var it = collapsedVertexIndexes.iterator(); it.hasNext();) {
40234             var vertexIndex = it.next().intValue();
40235             this$1.add(this$1._edge.getCoordinate(vertexIndex), vertexIndex);
40236           }
40237         };
40238         SegmentNodeList.prototype.print = function print (out) {
40239           out.println('Intersections:');
40240           for (var it = this.iterator(); it.hasNext();) {
40241             var ei = it.next();
40242             ei.print(out);
40243           }
40244         };
40245         SegmentNodeList.prototype.findCollapsesFromExistingVertices = function findCollapsesFromExistingVertices (collapsedVertexIndexes) {
40246             var this$1 = this;
40247
40248           for (var i = 0; i < this._edge.size() - 2; i++) {
40249             var p0 = this$1._edge.getCoordinate(i);
40250             // const p1 = this._edge.getCoordinate(i + 1)
40251             var p2 = this$1._edge.getCoordinate(i + 2);
40252             if (p0.equals2D(p2)) {
40253               collapsedVertexIndexes.add(new Integer(i + 1));
40254             }
40255           }
40256         };
40257         SegmentNodeList.prototype.addEdgeCoordinates = function addEdgeCoordinates (ei0, ei1, coordList) {
40258             var this$1 = this;
40259
40260           // let npts = ei1.segmentIndex - ei0.segmentIndex + 2
40261           var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
40262           var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
40263           // if (!useIntPt1) {
40264           // npts--
40265           // }
40266           // const ipt = 0
40267           coordList.add(new Coordinate(ei0.coord), false);
40268           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
40269             coordList.add(this$1._edge.getCoordinate(i));
40270           }
40271           if (useIntPt1) {
40272             coordList.add(new Coordinate(ei1.coord));
40273           }
40274         };
40275         SegmentNodeList.prototype.iterator = function iterator () {
40276           return this._nodeMap.values().iterator()
40277         };
40278         SegmentNodeList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
40279             var this$1 = this;
40280
40281           this.addEndpoints();
40282           this.addCollapsedNodes();
40283           var it = this.iterator();
40284           var eiPrev = it.next();
40285           while (it.hasNext()) {
40286             var ei = it.next();
40287             var newEdge = this$1.createSplitEdge(eiPrev, ei);
40288             edgeList.add(newEdge);
40289             eiPrev = ei;
40290           }
40291         };
40292         SegmentNodeList.prototype.findCollapseIndex = function findCollapseIndex (ei0, ei1, collapsedVertexIndex) {
40293           if (!ei0.coord.equals2D(ei1.coord)) { return false }
40294           var numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;
40295           if (!ei1.isInterior()) {
40296             numVerticesBetween--;
40297           }
40298           if (numVerticesBetween === 1) {
40299             collapsedVertexIndex[0] = ei0.segmentIndex + 1;
40300             return true
40301           }
40302           return false
40303         };
40304         SegmentNodeList.prototype.findCollapsesFromInsertedNodes = function findCollapsesFromInsertedNodes (collapsedVertexIndexes) {
40305             var this$1 = this;
40306
40307           var collapsedVertexIndex = new Array(1).fill(null);
40308           var it = this.iterator();
40309           var eiPrev = it.next();
40310           while (it.hasNext()) {
40311             var ei = it.next();
40312             var isCollapsed = this$1.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);
40313             if (isCollapsed) { collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0])); }
40314             eiPrev = ei;
40315           }
40316         };
40317         SegmentNodeList.prototype.getEdge = function getEdge () {
40318           return this._edge
40319         };
40320         SegmentNodeList.prototype.addEndpoints = function addEndpoints () {
40321           var maxSegIndex = this._edge.size() - 1;
40322           this.add(this._edge.getCoordinate(0), 0);
40323           this.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);
40324         };
40325         SegmentNodeList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
40326             var this$1 = this;
40327
40328           var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
40329           var lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);
40330           var useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);
40331           if (!useIntPt1) {
40332             npts--;
40333           }
40334           var pts = new Array(npts).fill(null);
40335           var ipt = 0;
40336           pts[ipt++] = new Coordinate(ei0.coord);
40337           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
40338             pts[ipt++] = this$1._edge.getCoordinate(i);
40339           }
40340           if (useIntPt1) { pts[ipt] = new Coordinate(ei1.coord); }
40341           return new NodedSegmentString(pts, this._edge.getData())
40342         };
40343         SegmentNodeList.prototype.add = function add (intPt, segmentIndex) {
40344           var eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));
40345           var ei = this._nodeMap.get(eiNew);
40346           if (ei !== null) {
40347             Assert.isTrue(ei.coord.equals2D(intPt), 'Found equal nodes with different coordinates');
40348             return ei
40349           }
40350           this._nodeMap.put(eiNew, eiNew);
40351           return eiNew
40352         };
40353         SegmentNodeList.prototype.checkSplitEdgesCorrectness = function checkSplitEdgesCorrectness (splitEdges) {
40354           var edgePts = this._edge.getCoordinates();
40355           var split0 = splitEdges.get(0);
40356           var pt0 = split0.getCoordinate(0);
40357           if (!pt0.equals2D(edgePts[0])) { throw new RuntimeException('bad split edge start point at ' + pt0) }
40358           var splitn = splitEdges.get(splitEdges.size() - 1);
40359           var splitnPts = splitn.getCoordinates();
40360           var ptn = splitnPts[splitnPts.length - 1];
40361           if (!ptn.equals2D(edgePts[edgePts.length - 1])) { throw new RuntimeException('bad split edge end point at ' + ptn) }
40362         };
40363         SegmentNodeList.prototype.interfaces_ = function interfaces_ () {
40364           return []
40365         };
40366         SegmentNodeList.prototype.getClass = function getClass () {
40367           return SegmentNodeList
40368         };
40369
40370
40371
40372         // class NodeVertexIterator {
40373         //   constructor () {
40374         //     this._nodeList = null
40375         //     this._edge = null
40376         //     this._nodeIt = null
40377         //     this._currNode = null
40378         //     this._nextNode = null
40379         //     this._currSegIndex = 0
40380         //     let nodeList = arguments[0]
40381         //     this._nodeList = nodeList
40382         //     this._edge = nodeList.getEdge()
40383         //     this._nodeIt = nodeList.iterator()
40384         //     this.readNextNode()
40385         //   }
40386         //   next () {
40387         //     if (this._currNode === null) {
40388         //       this._currNode = this._nextNode
40389         //       this._currSegIndex = this._currNode.segmentIndex
40390         //       this.readNextNode()
40391         //       return this._currNode
40392         //     }
40393         //     if (this._nextNode === null) return null
40394         //     if (this._nextNode.segmentIndex === this._currNode.segmentIndex) {
40395         //       this._currNode = this._nextNode
40396         //       this._currSegIndex = this._currNode.segmentIndex
40397         //       this.readNextNode()
40398         //       return this._currNode
40399         //     }
40400         //     if (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}
40401         //     return null
40402         //   }
40403         //   remove () {
40404         //     // throw new UnsupportedOperationException(this.getClass().getName())
40405         //   }
40406         //   hasNext () {
40407         //     if (this._nextNode === null) return false
40408         //     return true
40409         //   }
40410         //   readNextNode () {
40411         //     if (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null
40412         //   }
40413         //   interfaces_ () {
40414         //     return [Iterator]
40415         //   }
40416         //   getClass () {
40417         //     return NodeVertexIterator
40418         //   }
40419         // }
40420
40421         var Octant = function Octant () {};
40422
40423         Octant.prototype.interfaces_ = function interfaces_ () {
40424           return []
40425         };
40426         Octant.prototype.getClass = function getClass () {
40427           return Octant
40428         };
40429         Octant.octant = function octant () {
40430           if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {
40431             var dx = arguments[0];
40432             var dy = arguments[1];
40433             if (dx === 0.0 && dy === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for point ( ' + dx + ', ' + dy + ' )') }
40434             var adx = Math.abs(dx);
40435             var ady = Math.abs(dy);
40436             if (dx >= 0) {
40437               if (dy >= 0) {
40438                 if (adx >= ady) { return 0; } else { return 1 }
40439               } else {
40440                 if (adx >= ady) { return 7; } else { return 6 }
40441               }
40442             } else {
40443               if (dy >= 0) {
40444                 if (adx >= ady) { return 3; } else { return 2 }
40445               } else {
40446                 if (adx >= ady) { return 4; } else { return 5 }
40447               }
40448             }
40449           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {
40450             var p0 = arguments[0];
40451             var p1 = arguments[1];
40452             var dx$1 = p1.x - p0.x;
40453             var dy$1 = p1.y - p0.y;
40454             if (dx$1 === 0.0 && dy$1 === 0.0) { throw new IllegalArgumentException('Cannot compute the octant for two identical points ' + p0) }
40455             return Octant.octant(dx$1, dy$1)
40456           }
40457         };
40458
40459         var SegmentString = function SegmentString () {};
40460
40461         SegmentString.prototype.getCoordinates = function getCoordinates () {};
40462         SegmentString.prototype.size = function size () {};
40463         SegmentString.prototype.getCoordinate = function getCoordinate (i) {};
40464         SegmentString.prototype.isClosed = function isClosed () {};
40465         SegmentString.prototype.setData = function setData (data) {};
40466         SegmentString.prototype.getData = function getData () {};
40467         SegmentString.prototype.interfaces_ = function interfaces_ () {
40468           return []
40469         };
40470         SegmentString.prototype.getClass = function getClass () {
40471           return SegmentString
40472         };
40473
40474         var NodableSegmentString = function NodableSegmentString () {};
40475
40476         NodableSegmentString.prototype.addIntersection = function addIntersection (intPt, segmentIndex) {};
40477         NodableSegmentString.prototype.interfaces_ = function interfaces_ () {
40478           return [SegmentString]
40479         };
40480         NodableSegmentString.prototype.getClass = function getClass () {
40481           return NodableSegmentString
40482         };
40483
40484         var NodedSegmentString = function NodedSegmentString () {
40485           this._nodeList = new SegmentNodeList(this);
40486           this._pts = null;
40487           this._data = null;
40488           var pts = arguments[0];
40489           var data = arguments[1];
40490           this._pts = pts;
40491           this._data = data;
40492         };
40493         NodedSegmentString.prototype.getCoordinates = function getCoordinates () {
40494           return this._pts
40495         };
40496         NodedSegmentString.prototype.size = function size () {
40497           return this._pts.length
40498         };
40499         NodedSegmentString.prototype.getCoordinate = function getCoordinate (i) {
40500           return this._pts[i]
40501         };
40502         NodedSegmentString.prototype.isClosed = function isClosed () {
40503           return this._pts[0].equals(this._pts[this._pts.length - 1])
40504         };
40505         NodedSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
40506           if (index === this._pts.length - 1) { return -1 }
40507           return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))
40508         };
40509         NodedSegmentString.prototype.setData = function setData (data) {
40510           this._data = data;
40511         };
40512         NodedSegmentString.prototype.safeOctant = function safeOctant (p0, p1) {
40513           if (p0.equals2D(p1)) { return 0 }
40514           return Octant.octant(p0, p1)
40515         };
40516         NodedSegmentString.prototype.getData = function getData () {
40517           return this._data
40518         };
40519         NodedSegmentString.prototype.addIntersection = function addIntersection () {
40520           if (arguments.length === 2) {
40521             var intPt$1 = arguments[0];
40522             var segmentIndex = arguments[1];
40523             this.addIntersectionNode(intPt$1, segmentIndex);
40524           } else if (arguments.length === 4) {
40525             var li = arguments[0];
40526             var segmentIndex$1 = arguments[1];
40527             // const geomIndex = arguments[2]
40528             var intIndex = arguments[3];
40529             var intPt = new Coordinate(li.getIntersection(intIndex));
40530             this.addIntersection(intPt, segmentIndex$1);
40531           }
40532         };
40533         NodedSegmentString.prototype.toString = function toString () {
40534           return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
40535         };
40536         NodedSegmentString.prototype.getNodeList = function getNodeList () {
40537           return this._nodeList
40538         };
40539         NodedSegmentString.prototype.addIntersectionNode = function addIntersectionNode (intPt, segmentIndex) {
40540           var normalizedSegmentIndex = segmentIndex;
40541           var nextSegIndex = normalizedSegmentIndex + 1;
40542           if (nextSegIndex < this._pts.length) {
40543             var nextPt = this._pts[nextSegIndex];
40544             if (intPt.equals2D(nextPt)) {
40545               normalizedSegmentIndex = nextSegIndex;
40546             }
40547           }
40548           var ei = this._nodeList.add(intPt, normalizedSegmentIndex);
40549           return ei
40550         };
40551         NodedSegmentString.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
40552             var this$1 = this;
40553
40554           for (var i = 0; i < li.getIntersectionNum(); i++) {
40555             this$1.addIntersection(li, segmentIndex, geomIndex, i);
40556           }
40557         };
40558         NodedSegmentString.prototype.interfaces_ = function interfaces_ () {
40559           return [NodableSegmentString]
40560         };
40561         NodedSegmentString.prototype.getClass = function getClass () {
40562           return NodedSegmentString
40563         };
40564         NodedSegmentString.getNodedSubstrings = function getNodedSubstrings () {
40565           if (arguments.length === 1) {
40566             var segStrings = arguments[0];
40567             var resultEdgelist = new ArrayList();
40568             NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);
40569             return resultEdgelist
40570           } else if (arguments.length === 2) {
40571             var segStrings$1 = arguments[0];
40572             var resultEdgelist$1 = arguments[1];
40573             for (var i = segStrings$1.iterator(); i.hasNext();) {
40574               var ss = i.next();
40575               ss.getNodeList().addSplitEdges(resultEdgelist$1);
40576             }
40577           }
40578         };
40579
40580         var LineSegment = function LineSegment () {
40581           this.p0 = null;
40582           this.p1 = null;
40583           if (arguments.length === 0) {
40584             this.p0 = new Coordinate();
40585             this.p1 = new Coordinate();
40586           } else if (arguments.length === 1) {
40587             var ls = arguments[0];
40588             this.p0 = new Coordinate(ls.p0);
40589             this.p1 = new Coordinate(ls.p1);
40590           } else if (arguments.length === 2) {
40591             this.p0 = arguments[0];
40592             this.p1 = arguments[1];
40593           } else if (arguments.length === 4) {
40594             var x0 = arguments[0];
40595             var y0 = arguments[1];
40596             var x1 = arguments[2];
40597             var y1 = arguments[3];
40598             this.p0 = new Coordinate(x0, y0);
40599             this.p1 = new Coordinate(x1, y1);
40600           }
40601         };
40602
40603         var staticAccessors$24 = { serialVersionUID: { configurable: true } };
40604         LineSegment.prototype.minX = function minX () {
40605           return Math.min(this.p0.x, this.p1.x)
40606         };
40607         LineSegment.prototype.orientationIndex = function orientationIndex () {
40608           if (arguments[0] instanceof LineSegment) {
40609             var seg = arguments[0];
40610             var orient0 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p0);
40611             var orient1 = CGAlgorithms.orientationIndex(this.p0, this.p1, seg.p1);
40612             if (orient0 >= 0 && orient1 >= 0) { return Math.max(orient0, orient1) }
40613             if (orient0 <= 0 && orient1 <= 0) { return Math.max(orient0, orient1) }
40614             return 0
40615           } else if (arguments[0] instanceof Coordinate) {
40616             var p = arguments[0];
40617             return CGAlgorithms.orientationIndex(this.p0, this.p1, p)
40618           }
40619         };
40620         LineSegment.prototype.toGeometry = function toGeometry (geomFactory) {
40621           return geomFactory.createLineString([this.p0, this.p1])
40622         };
40623         LineSegment.prototype.isVertical = function isVertical () {
40624           return this.p0.x === this.p1.x
40625         };
40626         LineSegment.prototype.equals = function equals (o) {
40627           if (!(o instanceof LineSegment)) {
40628             return false
40629           }
40630           var other = o;
40631           return this.p0.equals(other.p0) && this.p1.equals(other.p1)
40632         };
40633         LineSegment.prototype.intersection = function intersection (line) {
40634           var li = new RobustLineIntersector();
40635           li.computeIntersection(this.p0, this.p1, line.p0, line.p1);
40636           if (li.hasIntersection()) { return li.getIntersection(0) }
40637           return null
40638         };
40639         LineSegment.prototype.project = function project () {
40640           if (arguments[0] instanceof Coordinate) {
40641             var p = arguments[0];
40642             if (p.equals(this.p0) || p.equals(this.p1)) { return new Coordinate(p) }
40643             var r = this.projectionFactor(p);
40644             var coord = new Coordinate();
40645             coord.x = this.p0.x + r * (this.p1.x - this.p0.x);
40646             coord.y = this.p0.y + r * (this.p1.y - this.p0.y);
40647             return coord
40648           } else if (arguments[0] instanceof LineSegment) {
40649             var seg = arguments[0];
40650             var pf0 = this.projectionFactor(seg.p0);
40651             var pf1 = this.projectionFactor(seg.p1);
40652             if (pf0 >= 1.0 && pf1 >= 1.0) { return null }
40653             if (pf0 <= 0.0 && pf1 <= 0.0) { return null }
40654             var newp0 = this.project(seg.p0);
40655             if (pf0 < 0.0) { newp0 = this.p0; }
40656             if (pf0 > 1.0) { newp0 = this.p1; }
40657             var newp1 = this.project(seg.p1);
40658             if (pf1 < 0.0) { newp1 = this.p0; }
40659             if (pf1 > 1.0) { newp1 = this.p1; }
40660             return new LineSegment(newp0, newp1)
40661           }
40662         };
40663         LineSegment.prototype.normalize = function normalize () {
40664           if (this.p1.compareTo(this.p0) < 0) { this.reverse(); }
40665         };
40666         LineSegment.prototype.angle = function angle () {
40667           return Math.atan2(this.p1.y - this.p0.y, this.p1.x - this.p0.x)
40668         };
40669         LineSegment.prototype.getCoordinate = function getCoordinate (i) {
40670           if (i === 0) { return this.p0 }
40671           return this.p1
40672         };
40673         LineSegment.prototype.distancePerpendicular = function distancePerpendicular (p) {
40674           return CGAlgorithms.distancePointLinePerpendicular(p, this.p0, this.p1)
40675         };
40676         LineSegment.prototype.minY = function minY () {
40677           return Math.min(this.p0.y, this.p1.y)
40678         };
40679         LineSegment.prototype.midPoint = function midPoint () {
40680           return LineSegment.midPoint(this.p0, this.p1)
40681         };
40682         LineSegment.prototype.projectionFactor = function projectionFactor (p) {
40683           if (p.equals(this.p0)) { return 0.0 }
40684           if (p.equals(this.p1)) { return 1.0 }
40685           var dx = this.p1.x - this.p0.x;
40686           var dy = this.p1.y - this.p0.y;
40687           var len = dx * dx + dy * dy;
40688           if (len <= 0.0) { return Double.NaN }
40689           var r = ((p.x - this.p0.x) * dx + (p.y - this.p0.y) * dy) / len;
40690           return r
40691         };
40692         LineSegment.prototype.closestPoints = function closestPoints (line) {
40693           var intPt = this.intersection(line);
40694           if (intPt !== null) {
40695             return [intPt, intPt]
40696           }
40697           var closestPt = new Array(2).fill(null);
40698           var minDistance = Double.MAX_VALUE;
40699           var dist = null;
40700           var close00 = this.closestPoint(line.p0);
40701           minDistance = close00.distance(line.p0);
40702           closestPt[0] = close00;
40703           closestPt[1] = line.p0;
40704           var close01 = this.closestPoint(line.p1);
40705           dist = close01.distance(line.p1);
40706           if (dist < minDistance) {
40707             minDistance = dist;
40708             closestPt[0] = close01;
40709             closestPt[1] = line.p1;
40710           }
40711           var close10 = line.closestPoint(this.p0);
40712           dist = close10.distance(this.p0);
40713           if (dist < minDistance) {
40714             minDistance = dist;
40715             closestPt[0] = this.p0;
40716             closestPt[1] = close10;
40717           }
40718           var close11 = line.closestPoint(this.p1);
40719           dist = close11.distance(this.p1);
40720           if (dist < minDistance) {
40721             minDistance = dist;
40722             closestPt[0] = this.p1;
40723             closestPt[1] = close11;
40724           }
40725           return closestPt
40726         };
40727         LineSegment.prototype.closestPoint = function closestPoint (p) {
40728           var factor = this.projectionFactor(p);
40729           if (factor > 0 && factor < 1) {
40730             return this.project(p)
40731           }
40732           var dist0 = this.p0.distance(p);
40733           var dist1 = this.p1.distance(p);
40734           if (dist0 < dist1) { return this.p0 }
40735           return this.p1
40736         };
40737         LineSegment.prototype.maxX = function maxX () {
40738           return Math.max(this.p0.x, this.p1.x)
40739         };
40740         LineSegment.prototype.getLength = function getLength () {
40741           return this.p0.distance(this.p1)
40742         };
40743         LineSegment.prototype.compareTo = function compareTo (o) {
40744           var other = o;
40745           var comp0 = this.p0.compareTo(other.p0);
40746           if (comp0 !== 0) { return comp0 }
40747           return this.p1.compareTo(other.p1)
40748         };
40749         LineSegment.prototype.reverse = function reverse () {
40750           var temp = this.p0;
40751           this.p0 = this.p1;
40752           this.p1 = temp;
40753         };
40754         LineSegment.prototype.equalsTopo = function equalsTopo (other) {
40755           return this.p0.equals(other.p0) &&
40756                 (this.p1.equals(other.p1) || this.p0.equals(other.p1)) &&
40757                  this.p1.equals(other.p0)
40758         };
40759         LineSegment.prototype.lineIntersection = function lineIntersection (line) {
40760           try {
40761             var intPt = HCoordinate.intersection(this.p0, this.p1, line.p0, line.p1);
40762             return intPt
40763           } catch (ex) {
40764             if (ex instanceof NotRepresentableException) ; else { throw ex }
40765           } finally {}
40766           return null
40767         };
40768         LineSegment.prototype.maxY = function maxY () {
40769           return Math.max(this.p0.y, this.p1.y)
40770         };
40771         LineSegment.prototype.pointAlongOffset = function pointAlongOffset (segmentLengthFraction, offsetDistance) {
40772           var segx = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
40773           var segy = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
40774           var dx = this.p1.x - this.p0.x;
40775           var dy = this.p1.y - this.p0.y;
40776           var len = Math.sqrt(dx * dx + dy * dy);
40777           var ux = 0.0;
40778           var uy = 0.0;
40779           if (offsetDistance !== 0.0) {
40780             if (len <= 0.0) { throw new Error('Cannot compute offset from zero-length line segment') }
40781             ux = offsetDistance * dx / len;
40782             uy = offsetDistance * dy / len;
40783           }
40784           var offsetx = segx - uy;
40785           var offsety = segy + ux;
40786           var coord = new Coordinate(offsetx, offsety);
40787           return coord
40788         };
40789         LineSegment.prototype.setCoordinates = function setCoordinates () {
40790           if (arguments.length === 1) {
40791             var ls = arguments[0];
40792             this.setCoordinates(ls.p0, ls.p1);
40793           } else if (arguments.length === 2) {
40794             var p0 = arguments[0];
40795             var p1 = arguments[1];
40796             this.p0.x = p0.x;
40797             this.p0.y = p0.y;
40798             this.p1.x = p1.x;
40799             this.p1.y = p1.y;
40800           }
40801         };
40802         LineSegment.prototype.segmentFraction = function segmentFraction (inputPt) {
40803           var segFrac = this.projectionFactor(inputPt);
40804           if (segFrac < 0.0) { segFrac = 0.0; } else if (segFrac > 1.0 || Double.isNaN(segFrac)) { segFrac = 1.0; }
40805           return segFrac
40806         };
40807         LineSegment.prototype.toString = function toString () {
40808           return 'LINESTRING( ' + this.p0.x + ' ' + this.p0.y + ', ' + this.p1.x + ' ' + this.p1.y + ')'
40809         };
40810         LineSegment.prototype.isHorizontal = function isHorizontal () {
40811           return this.p0.y === this.p1.y
40812         };
40813         LineSegment.prototype.distance = function distance () {
40814           if (arguments[0] instanceof LineSegment) {
40815             var ls = arguments[0];
40816             return CGAlgorithms.distanceLineLine(this.p0, this.p1, ls.p0, ls.p1)
40817           } else if (arguments[0] instanceof Coordinate) {
40818             var p = arguments[0];
40819             return CGAlgorithms.distancePointLine(p, this.p0, this.p1)
40820           }
40821         };
40822         LineSegment.prototype.pointAlong = function pointAlong (segmentLengthFraction) {
40823           var coord = new Coordinate();
40824           coord.x = this.p0.x + segmentLengthFraction * (this.p1.x - this.p0.x);
40825           coord.y = this.p0.y + segmentLengthFraction * (this.p1.y - this.p0.y);
40826           return coord
40827         };
40828         LineSegment.prototype.hashCode = function hashCode () {
40829           var bits0 = Double.doubleToLongBits(this.p0.x);
40830           bits0 ^= Double.doubleToLongBits(this.p0.y) * 31;
40831           var hash0 = Math.trunc(bits0) ^ Math.trunc(bits0 >> 32);
40832           var bits1 = Double.doubleToLongBits(this.p1.x);
40833           bits1 ^= Double.doubleToLongBits(this.p1.y) * 31;
40834           var hash1 = Math.trunc(bits1) ^ Math.trunc(bits1 >> 32);
40835           return hash0 ^ hash1
40836         };
40837         LineSegment.prototype.interfaces_ = function interfaces_ () {
40838           return [Comparable, Serializable]
40839         };
40840         LineSegment.prototype.getClass = function getClass () {
40841           return LineSegment
40842         };
40843         LineSegment.midPoint = function midPoint (p0, p1) {
40844           return new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2)
40845         };
40846         staticAccessors$24.serialVersionUID.get = function () { return 3252005833466256227 };
40847
40848         Object.defineProperties( LineSegment, staticAccessors$24 );
40849
40850         var MonotoneChainOverlapAction = function MonotoneChainOverlapAction () {
40851           this.tempEnv1 = new Envelope();
40852           this.tempEnv2 = new Envelope();
40853           this._overlapSeg1 = new LineSegment();
40854           this._overlapSeg2 = new LineSegment();
40855         };
40856         MonotoneChainOverlapAction.prototype.overlap = function overlap () {
40857           if (arguments.length === 2) ; else if (arguments.length === 4) {
40858             var mc1 = arguments[0];
40859             var start1 = arguments[1];
40860             var mc2 = arguments[2];
40861             var start2 = arguments[3];
40862             mc1.getLineSegment(start1, this._overlapSeg1);
40863             mc2.getLineSegment(start2, this._overlapSeg2);
40864             this.overlap(this._overlapSeg1, this._overlapSeg2);
40865           }
40866         };
40867         MonotoneChainOverlapAction.prototype.interfaces_ = function interfaces_ () {
40868           return []
40869         };
40870         MonotoneChainOverlapAction.prototype.getClass = function getClass () {
40871           return MonotoneChainOverlapAction
40872         };
40873
40874         var MonotoneChain = function MonotoneChain () {
40875           this._pts = null;
40876           this._start = null;
40877           this._end = null;
40878           this._env = null;
40879           this._context = null;
40880           this._id = null;
40881           var pts = arguments[0];
40882           var start = arguments[1];
40883           var end = arguments[2];
40884           var context = arguments[3];
40885           this._pts = pts;
40886           this._start = start;
40887           this._end = end;
40888           this._context = context;
40889         };
40890         MonotoneChain.prototype.getLineSegment = function getLineSegment (index, ls) {
40891           ls.p0 = this._pts[index];
40892           ls.p1 = this._pts[index + 1];
40893         };
40894         MonotoneChain.prototype.computeSelect = function computeSelect (searchEnv, start0, end0, mcs) {
40895           var p0 = this._pts[start0];
40896           var p1 = this._pts[end0];
40897           mcs.tempEnv1.init(p0, p1);
40898           if (end0 - start0 === 1) {
40899             mcs.select(this, start0);
40900             return null
40901           }
40902           if (!searchEnv.intersects(mcs.tempEnv1)) { return null }
40903           var mid = Math.trunc((start0 + end0) / 2);
40904           if (start0 < mid) {
40905             this.computeSelect(searchEnv, start0, mid, mcs);
40906           }
40907           if (mid < end0) {
40908             this.computeSelect(searchEnv, mid, end0, mcs);
40909           }
40910         };
40911         MonotoneChain.prototype.getCoordinates = function getCoordinates () {
40912             var this$1 = this;
40913
40914           var coord = new Array(this._end - this._start + 1).fill(null);
40915           var index = 0;
40916           for (var i = this._start; i <= this._end; i++) {
40917             coord[index++] = this$1._pts[i];
40918           }
40919           return coord
40920         };
40921         MonotoneChain.prototype.computeOverlaps = function computeOverlaps (mc, mco) {
40922           this.computeOverlapsInternal(this._start, this._end, mc, mc._start, mc._end, mco);
40923         };
40924         MonotoneChain.prototype.setId = function setId (id) {
40925           this._id = id;
40926         };
40927         MonotoneChain.prototype.select = function select (searchEnv, mcs) {
40928           this.computeSelect(searchEnv, this._start, this._end, mcs);
40929         };
40930         MonotoneChain.prototype.getEnvelope = function getEnvelope () {
40931           if (this._env === null) {
40932             var p0 = this._pts[this._start];
40933             var p1 = this._pts[this._end];
40934             this._env = new Envelope(p0, p1);
40935           }
40936           return this._env
40937         };
40938         MonotoneChain.prototype.getEndIndex = function getEndIndex () {
40939           return this._end
40940         };
40941         MonotoneChain.prototype.getStartIndex = function getStartIndex () {
40942           return this._start
40943         };
40944         MonotoneChain.prototype.getContext = function getContext () {
40945           return this._context
40946         };
40947         MonotoneChain.prototype.getId = function getId () {
40948           return this._id
40949         };
40950         MonotoneChain.prototype.computeOverlapsInternal = function computeOverlapsInternal (start0, end0, mc, start1, end1, mco) {
40951           var p00 = this._pts[start0];
40952           var p01 = this._pts[end0];
40953           var p10 = mc._pts[start1];
40954           var p11 = mc._pts[end1];
40955           if (end0 - start0 === 1 && end1 - start1 === 1) {
40956             mco.overlap(this, start0, mc, start1);
40957             return null
40958           }
40959           mco.tempEnv1.init(p00, p01);
40960           mco.tempEnv2.init(p10, p11);
40961           if (!mco.tempEnv1.intersects(mco.tempEnv2)) { return null }
40962           var mid0 = Math.trunc((start0 + end0) / 2);
40963           var mid1 = Math.trunc((start1 + end1) / 2);
40964           if (start0 < mid0) {
40965             if (start1 < mid1) { this.computeOverlapsInternal(start0, mid0, mc, start1, mid1, mco); }
40966             if (mid1 < end1) { this.computeOverlapsInternal(start0, mid0, mc, mid1, end1, mco); }
40967           }
40968           if (mid0 < end0) {
40969             if (start1 < mid1) { this.computeOverlapsInternal(mid0, end0, mc, start1, mid1, mco); }
40970             if (mid1 < end1) { this.computeOverlapsInternal(mid0, end0, mc, mid1, end1, mco); }
40971           }
40972         };
40973         MonotoneChain.prototype.interfaces_ = function interfaces_ () {
40974           return []
40975         };
40976         MonotoneChain.prototype.getClass = function getClass () {
40977           return MonotoneChain
40978         };
40979
40980         var MonotoneChainBuilder = function MonotoneChainBuilder () {};
40981
40982         MonotoneChainBuilder.prototype.interfaces_ = function interfaces_ () {
40983           return []
40984         };
40985         MonotoneChainBuilder.prototype.getClass = function getClass () {
40986           return MonotoneChainBuilder
40987         };
40988         MonotoneChainBuilder.getChainStartIndices = function getChainStartIndices (pts) {
40989           var start = 0;
40990           var startIndexList = new ArrayList();
40991           startIndexList.add(new Integer(start));
40992           do {
40993             var last = MonotoneChainBuilder.findChainEnd(pts, start);
40994             startIndexList.add(new Integer(last));
40995             start = last;
40996           } while (start < pts.length - 1)
40997           var startIndex = MonotoneChainBuilder.toIntArray(startIndexList);
40998           return startIndex
40999         };
41000         MonotoneChainBuilder.findChainEnd = function findChainEnd (pts, start) {
41001           var safeStart = start;
41002           while (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {
41003             safeStart++;
41004           }
41005           if (safeStart >= pts.length - 1) {
41006             return pts.length - 1
41007           }
41008           var chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);
41009           var last = start + 1;
41010           while (last < pts.length) {
41011             if (!pts[last - 1].equals2D(pts[last])) {
41012               var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
41013               if (quad !== chainQuad) { break }
41014             }
41015             last++;
41016           }
41017           return last - 1
41018         };
41019         MonotoneChainBuilder.getChains = function getChains () {
41020           if (arguments.length === 1) {
41021             var pts = arguments[0];
41022             return MonotoneChainBuilder.getChains(pts, null)
41023           } else if (arguments.length === 2) {
41024             var pts$1 = arguments[0];
41025             var context = arguments[1];
41026             var mcList = new ArrayList();
41027             var startIndex = MonotoneChainBuilder.getChainStartIndices(pts$1);
41028             for (var i = 0; i < startIndex.length - 1; i++) {
41029               var mc = new MonotoneChain(pts$1, startIndex[i], startIndex[i + 1], context);
41030               mcList.add(mc);
41031             }
41032             return mcList
41033           }
41034         };
41035         MonotoneChainBuilder.toIntArray = function toIntArray (list) {
41036           var array = new Array(list.size()).fill(null);
41037           for (var i = 0; i < array.length; i++) {
41038             array[i] = list.get(i).intValue();
41039           }
41040           return array
41041         };
41042
41043         var Noder = function Noder () {};
41044
41045         Noder.prototype.computeNodes = function computeNodes (segStrings) {};
41046         Noder.prototype.getNodedSubstrings = function getNodedSubstrings () {};
41047         Noder.prototype.interfaces_ = function interfaces_ () {
41048           return []
41049         };
41050         Noder.prototype.getClass = function getClass () {
41051           return Noder
41052         };
41053
41054         var SinglePassNoder = function SinglePassNoder () {
41055           this._segInt = null;
41056           if (arguments.length === 0) ; else if (arguments.length === 1) {
41057             var segInt = arguments[0];
41058             this.setSegmentIntersector(segInt);
41059           }
41060         };
41061         SinglePassNoder.prototype.setSegmentIntersector = function setSegmentIntersector (segInt) {
41062           this._segInt = segInt;
41063         };
41064         SinglePassNoder.prototype.interfaces_ = function interfaces_ () {
41065           return [Noder]
41066         };
41067         SinglePassNoder.prototype.getClass = function getClass () {
41068           return SinglePassNoder
41069         };
41070
41071         var MCIndexNoder = (function (SinglePassNoder$$1) {
41072           function MCIndexNoder (si) {
41073             if (si) { SinglePassNoder$$1.call(this, si); }
41074             else { SinglePassNoder$$1.call(this); }
41075             this._monoChains = new ArrayList();
41076             this._index = new STRtree();
41077             this._idCounter = 0;
41078             this._nodedSegStrings = null;
41079             this._nOverlaps = 0;
41080           }
41081
41082           if ( SinglePassNoder$$1 ) { MCIndexNoder.__proto__ = SinglePassNoder$$1; }
41083           MCIndexNoder.prototype = Object.create( SinglePassNoder$$1 && SinglePassNoder$$1.prototype );
41084           MCIndexNoder.prototype.constructor = MCIndexNoder;
41085
41086           var staticAccessors = { SegmentOverlapAction: { configurable: true } };
41087           MCIndexNoder.prototype.getMonotoneChains = function getMonotoneChains () {
41088             return this._monoChains
41089           };
41090           MCIndexNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
41091             return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
41092           };
41093           MCIndexNoder.prototype.getIndex = function getIndex () {
41094             return this._index
41095           };
41096           MCIndexNoder.prototype.add = function add (segStr) {
41097             var this$1 = this;
41098
41099             var segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);
41100             for (var i = segChains.iterator(); i.hasNext();) {
41101               var mc = i.next();
41102               mc.setId(this$1._idCounter++);
41103               this$1._index.insert(mc.getEnvelope(), mc);
41104               this$1._monoChains.add(mc);
41105             }
41106           };
41107           MCIndexNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
41108             var this$1 = this;
41109
41110             this._nodedSegStrings = inputSegStrings;
41111             for (var i = inputSegStrings.iterator(); i.hasNext();) {
41112               this$1.add(i.next());
41113             }
41114             this.intersectChains();
41115           };
41116           MCIndexNoder.prototype.intersectChains = function intersectChains () {
41117             var this$1 = this;
41118
41119             var overlapAction = new SegmentOverlapAction(this._segInt);
41120             for (var i = this._monoChains.iterator(); i.hasNext();) {
41121               var queryChain = i.next();
41122               var overlapChains = this$1._index.query(queryChain.getEnvelope());
41123               for (var j = overlapChains.iterator(); j.hasNext();) {
41124                 var testChain = j.next();
41125                 if (testChain.getId() > queryChain.getId()) {
41126                   queryChain.computeOverlaps(testChain, overlapAction);
41127                   this$1._nOverlaps++;
41128                 }
41129                 if (this$1._segInt.isDone()) { return null }
41130               }
41131             }
41132           };
41133           MCIndexNoder.prototype.interfaces_ = function interfaces_ () {
41134             return []
41135           };
41136           MCIndexNoder.prototype.getClass = function getClass () {
41137             return MCIndexNoder
41138           };
41139           staticAccessors.SegmentOverlapAction.get = function () { return SegmentOverlapAction };
41140
41141           Object.defineProperties( MCIndexNoder, staticAccessors );
41142
41143           return MCIndexNoder;
41144         }(SinglePassNoder));
41145
41146         var SegmentOverlapAction = (function (MonotoneChainOverlapAction$$1) {
41147           function SegmentOverlapAction () {
41148             MonotoneChainOverlapAction$$1.call(this);
41149             this._si = null;
41150             var si = arguments[0];
41151             this._si = si;
41152           }
41153
41154           if ( MonotoneChainOverlapAction$$1 ) { SegmentOverlapAction.__proto__ = MonotoneChainOverlapAction$$1; }
41155           SegmentOverlapAction.prototype = Object.create( MonotoneChainOverlapAction$$1 && MonotoneChainOverlapAction$$1.prototype );
41156           SegmentOverlapAction.prototype.constructor = SegmentOverlapAction;
41157           SegmentOverlapAction.prototype.overlap = function overlap () {
41158             if (arguments.length === 4) {
41159               var mc1 = arguments[0];
41160               var start1 = arguments[1];
41161               var mc2 = arguments[2];
41162               var start2 = arguments[3];
41163               var ss1 = mc1.getContext();
41164               var ss2 = mc2.getContext();
41165               this._si.processIntersections(ss1, start1, ss2, start2);
41166             } else { return MonotoneChainOverlapAction$$1.prototype.overlap.apply(this, arguments) }
41167           };
41168           SegmentOverlapAction.prototype.interfaces_ = function interfaces_ () {
41169             return []
41170           };
41171           SegmentOverlapAction.prototype.getClass = function getClass () {
41172             return SegmentOverlapAction
41173           };
41174
41175           return SegmentOverlapAction;
41176         }(MonotoneChainOverlapAction));
41177
41178         var BufferParameters = function BufferParameters () {
41179           this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
41180           this._endCapStyle = BufferParameters.CAP_ROUND;
41181           this._joinStyle = BufferParameters.JOIN_ROUND;
41182           this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;
41183           this._isSingleSided = false;
41184           this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;
41185
41186           if (arguments.length === 0) ; else if (arguments.length === 1) {
41187             var quadrantSegments = arguments[0];
41188             this.setQuadrantSegments(quadrantSegments);
41189           } else if (arguments.length === 2) {
41190             var quadrantSegments$1 = arguments[0];
41191             var endCapStyle = arguments[1];
41192             this.setQuadrantSegments(quadrantSegments$1);
41193             this.setEndCapStyle(endCapStyle);
41194           } else if (arguments.length === 4) {
41195             var quadrantSegments$2 = arguments[0];
41196             var endCapStyle$1 = arguments[1];
41197             var joinStyle = arguments[2];
41198             var mitreLimit = arguments[3];
41199             this.setQuadrantSegments(quadrantSegments$2);
41200             this.setEndCapStyle(endCapStyle$1);
41201             this.setJoinStyle(joinStyle);
41202             this.setMitreLimit(mitreLimit);
41203           }
41204         };
41205
41206         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 } };
41207         BufferParameters.prototype.getEndCapStyle = function getEndCapStyle () {
41208           return this._endCapStyle
41209         };
41210         BufferParameters.prototype.isSingleSided = function isSingleSided () {
41211           return this._isSingleSided
41212         };
41213         BufferParameters.prototype.setQuadrantSegments = function setQuadrantSegments (quadSegs) {
41214           this._quadrantSegments = quadSegs;
41215           if (this._quadrantSegments === 0) { this._joinStyle = BufferParameters.JOIN_BEVEL; }
41216           if (this._quadrantSegments < 0) {
41217             this._joinStyle = BufferParameters.JOIN_MITRE;
41218             this._mitreLimit = Math.abs(this._quadrantSegments);
41219           }
41220           if (quadSegs <= 0) {
41221             this._quadrantSegments = 1;
41222           }
41223           if (this._joinStyle !== BufferParameters.JOIN_ROUND) {
41224             this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;
41225           }
41226         };
41227         BufferParameters.prototype.getJoinStyle = function getJoinStyle () {
41228           return this._joinStyle
41229         };
41230         BufferParameters.prototype.setJoinStyle = function setJoinStyle (joinStyle) {
41231           this._joinStyle = joinStyle;
41232         };
41233         BufferParameters.prototype.setSimplifyFactor = function setSimplifyFactor (simplifyFactor) {
41234           this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;
41235         };
41236         BufferParameters.prototype.getSimplifyFactor = function getSimplifyFactor () {
41237           return this._simplifyFactor
41238         };
41239         BufferParameters.prototype.getQuadrantSegments = function getQuadrantSegments () {
41240           return this._quadrantSegments
41241         };
41242         BufferParameters.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
41243           this._endCapStyle = endCapStyle;
41244         };
41245         BufferParameters.prototype.getMitreLimit = function getMitreLimit () {
41246           return this._mitreLimit
41247         };
41248         BufferParameters.prototype.setMitreLimit = function setMitreLimit (mitreLimit) {
41249           this._mitreLimit = mitreLimit;
41250         };
41251         BufferParameters.prototype.setSingleSided = function setSingleSided (isSingleSided) {
41252           this._isSingleSided = isSingleSided;
41253         };
41254         BufferParameters.prototype.interfaces_ = function interfaces_ () {
41255           return []
41256         };
41257         BufferParameters.prototype.getClass = function getClass () {
41258           return BufferParameters
41259         };
41260         BufferParameters.bufferDistanceError = function bufferDistanceError (quadSegs) {
41261           var alpha = Math.PI / 2.0 / quadSegs;
41262           return 1 - Math.cos(alpha / 2.0)
41263         };
41264         staticAccessors$25.CAP_ROUND.get = function () { return 1 };
41265         staticAccessors$25.CAP_FLAT.get = function () { return 2 };
41266         staticAccessors$25.CAP_SQUARE.get = function () { return 3 };
41267         staticAccessors$25.JOIN_ROUND.get = function () { return 1 };
41268         staticAccessors$25.JOIN_MITRE.get = function () { return 2 };
41269         staticAccessors$25.JOIN_BEVEL.get = function () { return 3 };
41270         staticAccessors$25.DEFAULT_QUADRANT_SEGMENTS.get = function () { return 8 };
41271         staticAccessors$25.DEFAULT_MITRE_LIMIT.get = function () { return 5.0 };
41272         staticAccessors$25.DEFAULT_SIMPLIFY_FACTOR.get = function () { return 0.01 };
41273
41274         Object.defineProperties( BufferParameters, staticAccessors$25 );
41275
41276         var BufferInputLineSimplifier = function BufferInputLineSimplifier (inputLine) {
41277           this._distanceTol = null;
41278           this._isDeleted = null;
41279           this._angleOrientation = CGAlgorithms.COUNTERCLOCKWISE;
41280           this._inputLine = inputLine || null;
41281         };
41282
41283         var staticAccessors$26 = { INIT: { configurable: true },DELETE: { configurable: true },KEEP: { configurable: true },NUM_PTS_TO_CHECK: { configurable: true } };
41284         BufferInputLineSimplifier.prototype.isDeletable = function isDeletable (i0, i1, i2, distanceTol) {
41285           var p0 = this._inputLine[i0];
41286           var p1 = this._inputLine[i1];
41287           var p2 = this._inputLine[i2];
41288           if (!this.isConcave(p0, p1, p2)) { return false }
41289           if (!this.isShallow(p0, p1, p2, distanceTol)) { return false }
41290           return this.isShallowSampled(p0, p1, i0, i2, distanceTol)
41291         };
41292         BufferInputLineSimplifier.prototype.deleteShallowConcavities = function deleteShallowConcavities () {
41293             var this$1 = this;
41294
41295           var index = 1;
41296           // const maxIndex = this._inputLine.length - 1
41297           var midIndex = this.findNextNonDeletedIndex(index);
41298           var lastIndex = this.findNextNonDeletedIndex(midIndex);
41299           var isChanged = false;
41300           while (lastIndex < this._inputLine.length) {
41301             var isMiddleVertexDeleted = false;
41302             if (this$1.isDeletable(index, midIndex, lastIndex, this$1._distanceTol)) {
41303               this$1._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;
41304               isMiddleVertexDeleted = true;
41305               isChanged = true;
41306             }
41307             if (isMiddleVertexDeleted) { index = lastIndex; } else { index = midIndex; }
41308             midIndex = this$1.findNextNonDeletedIndex(index);
41309             lastIndex = this$1.findNextNonDeletedIndex(midIndex);
41310           }
41311           return isChanged
41312         };
41313         BufferInputLineSimplifier.prototype.isShallowConcavity = function isShallowConcavity (p0, p1, p2, distanceTol) {
41314           var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
41315           var isAngleToSimplify = orientation === this._angleOrientation;
41316           if (!isAngleToSimplify) { return false }
41317           var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
41318           return dist < distanceTol
41319         };
41320         BufferInputLineSimplifier.prototype.isShallowSampled = function isShallowSampled (p0, p2, i0, i2, distanceTol) {
41321             var this$1 = this;
41322
41323           var inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);
41324           if (inc <= 0) { inc = 1; }
41325           for (var i = i0; i < i2; i += inc) {
41326             if (!this$1.isShallow(p0, p2, this$1._inputLine[i], distanceTol)) { return false }
41327           }
41328           return true
41329         };
41330         BufferInputLineSimplifier.prototype.isConcave = function isConcave (p0, p1, p2) {
41331           var orientation = CGAlgorithms.computeOrientation(p0, p1, p2);
41332           var isConcave = orientation === this._angleOrientation;
41333           return isConcave
41334         };
41335         BufferInputLineSimplifier.prototype.simplify = function simplify (distanceTol) {
41336             var this$1 = this;
41337
41338           this._distanceTol = Math.abs(distanceTol);
41339           if (distanceTol < 0) { this._angleOrientation = CGAlgorithms.CLOCKWISE; }
41340           this._isDeleted = new Array(this._inputLine.length).fill(null);
41341           var isChanged = false;
41342           do {
41343             isChanged = this$1.deleteShallowConcavities();
41344           } while (isChanged)
41345           return this.collapseLine()
41346         };
41347         BufferInputLineSimplifier.prototype.findNextNonDeletedIndex = function findNextNonDeletedIndex (index) {
41348           var next = index + 1;
41349           while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) { next++; }
41350           return next
41351         };
41352         BufferInputLineSimplifier.prototype.isShallow = function isShallow (p0, p1, p2, distanceTol) {
41353           var dist = CGAlgorithms.distancePointLine(p1, p0, p2);
41354           return dist < distanceTol
41355         };
41356         BufferInputLineSimplifier.prototype.collapseLine = function collapseLine () {
41357             var this$1 = this;
41358
41359           var coordList = new CoordinateList();
41360           for (var i = 0; i < this._inputLine.length; i++) {
41361             if (this$1._isDeleted[i] !== BufferInputLineSimplifier.DELETE) { coordList.add(this$1._inputLine[i]); }
41362           }
41363           return coordList.toCoordinateArray()
41364         };
41365         BufferInputLineSimplifier.prototype.interfaces_ = function interfaces_ () {
41366           return []
41367         };
41368         BufferInputLineSimplifier.prototype.getClass = function getClass () {
41369           return BufferInputLineSimplifier
41370         };
41371         BufferInputLineSimplifier.simplify = function simplify (inputLine, distanceTol) {
41372           var simp = new BufferInputLineSimplifier(inputLine);
41373           return simp.simplify(distanceTol)
41374         };
41375         staticAccessors$26.INIT.get = function () { return 0 };
41376         staticAccessors$26.DELETE.get = function () { return 1 };
41377         staticAccessors$26.KEEP.get = function () { return 1 };
41378         staticAccessors$26.NUM_PTS_TO_CHECK.get = function () { return 10 };
41379
41380         Object.defineProperties( BufferInputLineSimplifier, staticAccessors$26 );
41381
41382         var OffsetSegmentString = function OffsetSegmentString () {
41383           this._ptList = null;
41384           this._precisionModel = null;
41385           this._minimimVertexDistance = 0.0;
41386           this._ptList = new ArrayList();
41387         };
41388
41389         var staticAccessors$28 = { COORDINATE_ARRAY_TYPE: { configurable: true } };
41390         OffsetSegmentString.prototype.getCoordinates = function getCoordinates () {
41391           var coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);
41392           return coord
41393         };
41394         OffsetSegmentString.prototype.setPrecisionModel = function setPrecisionModel (precisionModel) {
41395           this._precisionModel = precisionModel;
41396         };
41397         OffsetSegmentString.prototype.addPt = function addPt (pt) {
41398           var bufPt = new Coordinate(pt);
41399           this._precisionModel.makePrecise(bufPt);
41400           if (this.isRedundant(bufPt)) { return null }
41401           this._ptList.add(bufPt);
41402         };
41403         OffsetSegmentString.prototype.revere = function revere () {};
41404         OffsetSegmentString.prototype.addPts = function addPts (pt, isForward) {
41405             var this$1 = this;
41406
41407           if (isForward) {
41408             for (var i = 0; i < pt.length; i++) {
41409               this$1.addPt(pt[i]);
41410             }
41411           } else {
41412             for (var i$1 = pt.length - 1; i$1 >= 0; i$1--) {
41413               this$1.addPt(pt[i$1]);
41414             }
41415           }
41416         };
41417         OffsetSegmentString.prototype.isRedundant = function isRedundant (pt) {
41418           if (this._ptList.size() < 1) { return false }
41419           var lastPt = this._ptList.get(this._ptList.size() - 1);
41420           var ptDist = pt.distance(lastPt);
41421           if (ptDist < this._minimimVertexDistance) { return true }
41422           return false
41423         };
41424         OffsetSegmentString.prototype.toString = function toString () {
41425           var fact = new GeometryFactory();
41426           var line = fact.createLineString(this.getCoordinates());
41427           return line.toString()
41428         };
41429         OffsetSegmentString.prototype.closeRing = function closeRing () {
41430           if (this._ptList.size() < 1) { return null }
41431           var startPt = new Coordinate(this._ptList.get(0));
41432           var lastPt = this._ptList.get(this._ptList.size() - 1);
41433           // const last2Pt = null
41434           // if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)
41435           if (startPt.equals(lastPt)) { return null }
41436           this._ptList.add(startPt);
41437         };
41438         OffsetSegmentString.prototype.setMinimumVertexDistance = function setMinimumVertexDistance (minimimVertexDistance) {
41439           this._minimimVertexDistance = minimimVertexDistance;
41440         };
41441         OffsetSegmentString.prototype.interfaces_ = function interfaces_ () {
41442           return []
41443         };
41444         OffsetSegmentString.prototype.getClass = function getClass () {
41445           return OffsetSegmentString
41446         };
41447         staticAccessors$28.COORDINATE_ARRAY_TYPE.get = function () { return new Array(0).fill(null) };
41448
41449         Object.defineProperties( OffsetSegmentString, staticAccessors$28 );
41450
41451         var Angle = function Angle () {};
41452
41453         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 } };
41454
41455         Angle.prototype.interfaces_ = function interfaces_ () {
41456           return []
41457         };
41458         Angle.prototype.getClass = function getClass () {
41459           return Angle
41460         };
41461         Angle.toDegrees = function toDegrees (radians) {
41462           return radians * 180 / Math.PI
41463         };
41464         Angle.normalize = function normalize (angle) {
41465           while (angle > Math.PI) { angle -= Angle.PI_TIMES_2; }
41466           while (angle <= -Math.PI) { angle += Angle.PI_TIMES_2; }
41467           return angle
41468         };
41469         Angle.angle = function angle () {
41470           if (arguments.length === 1) {
41471             var p = arguments[0];
41472             return Math.atan2(p.y, p.x)
41473           } else if (arguments.length === 2) {
41474             var p0 = arguments[0];
41475             var p1 = arguments[1];
41476             var dx = p1.x - p0.x;
41477             var dy = p1.y - p0.y;
41478             return Math.atan2(dy, dx)
41479           }
41480         };
41481         Angle.isAcute = function isAcute (p0, p1, p2) {
41482           var dx0 = p0.x - p1.x;
41483           var dy0 = p0.y - p1.y;
41484           var dx1 = p2.x - p1.x;
41485           var dy1 = p2.y - p1.y;
41486           var dotprod = dx0 * dx1 + dy0 * dy1;
41487           return dotprod > 0
41488         };
41489         Angle.isObtuse = function isObtuse (p0, p1, p2) {
41490           var dx0 = p0.x - p1.x;
41491           var dy0 = p0.y - p1.y;
41492           var dx1 = p2.x - p1.x;
41493           var dy1 = p2.y - p1.y;
41494           var dotprod = dx0 * dx1 + dy0 * dy1;
41495           return dotprod < 0
41496         };
41497         Angle.interiorAngle = function interiorAngle (p0, p1, p2) {
41498           var anglePrev = Angle.angle(p1, p0);
41499           var angleNext = Angle.angle(p1, p2);
41500           return Math.abs(angleNext - anglePrev)
41501         };
41502         Angle.normalizePositive = function normalizePositive (angle) {
41503           if (angle < 0.0) {
41504             while (angle < 0.0) { angle += Angle.PI_TIMES_2; }
41505             if (angle >= Angle.PI_TIMES_2) { angle = 0.0; }
41506           } else {
41507             while (angle >= Angle.PI_TIMES_2) { angle -= Angle.PI_TIMES_2; }
41508             if (angle < 0.0) { angle = 0.0; }
41509           }
41510           return angle
41511         };
41512         Angle.angleBetween = function angleBetween (tip1, tail, tip2) {
41513           var a1 = Angle.angle(tail, tip1);
41514           var a2 = Angle.angle(tail, tip2);
41515           return Angle.diff(a1, a2)
41516         };
41517         Angle.diff = function diff (ang1, ang2) {
41518           var delAngle = null;
41519           if (ang1 < ang2) {
41520             delAngle = ang2 - ang1;
41521           } else {
41522             delAngle = ang1 - ang2;
41523           }
41524           if (delAngle > Math.PI) {
41525             delAngle = 2 * Math.PI - delAngle;
41526           }
41527           return delAngle
41528         };
41529         Angle.toRadians = function toRadians (angleDegrees) {
41530           return angleDegrees * Math.PI / 180.0
41531         };
41532         Angle.getTurn = function getTurn (ang1, ang2) {
41533           var crossproduct = Math.sin(ang2 - ang1);
41534           if (crossproduct > 0) {
41535             return Angle.COUNTERCLOCKWISE
41536           }
41537           if (crossproduct < 0) {
41538             return Angle.CLOCKWISE
41539           }
41540           return Angle.NONE
41541         };
41542         Angle.angleBetweenOriented = function angleBetweenOriented (tip1, tail, tip2) {
41543           var a1 = Angle.angle(tail, tip1);
41544           var a2 = Angle.angle(tail, tip2);
41545           var angDel = a2 - a1;
41546           if (angDel <= -Math.PI) { return angDel + Angle.PI_TIMES_2 }
41547           if (angDel > Math.PI) { return angDel - Angle.PI_TIMES_2 }
41548           return angDel
41549         };
41550         staticAccessors$29.PI_TIMES_2.get = function () { return 2.0 * Math.PI };
41551         staticAccessors$29.PI_OVER_2.get = function () { return Math.PI / 2.0 };
41552         staticAccessors$29.PI_OVER_4.get = function () { return Math.PI / 4.0 };
41553         staticAccessors$29.COUNTERCLOCKWISE.get = function () { return CGAlgorithms.COUNTERCLOCKWISE };
41554         staticAccessors$29.CLOCKWISE.get = function () { return CGAlgorithms.CLOCKWISE };
41555         staticAccessors$29.NONE.get = function () { return CGAlgorithms.COLLINEAR };
41556
41557         Object.defineProperties( Angle, staticAccessors$29 );
41558
41559         var OffsetSegmentGenerator = function OffsetSegmentGenerator () {
41560           this._maxCurveSegmentError = 0.0;
41561           this._filletAngleQuantum = null;
41562           this._closingSegLengthFactor = 1;
41563           this._segList = null;
41564           this._distance = 0.0;
41565           this._precisionModel = null;
41566           this._bufParams = null;
41567           this._li = null;
41568           this._s0 = null;
41569           this._s1 = null;
41570           this._s2 = null;
41571           this._seg0 = new LineSegment();
41572           this._seg1 = new LineSegment();
41573           this._offset0 = new LineSegment();
41574           this._offset1 = new LineSegment();
41575           this._side = 0;
41576           this._hasNarrowConcaveAngle = false;
41577           var precisionModel = arguments[0];
41578           var bufParams = arguments[1];
41579           var distance = arguments[2];
41580           this._precisionModel = precisionModel;
41581           this._bufParams = bufParams;
41582           this._li = new RobustLineIntersector();
41583           this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();
41584           if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) { this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR; }
41585           this.init(distance);
41586         };
41587
41588         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 } };
41589         OffsetSegmentGenerator.prototype.addNextSegment = function addNextSegment (p, addStartPoint) {
41590           this._s0 = this._s1;
41591           this._s1 = this._s2;
41592           this._s2 = p;
41593           this._seg0.setCoordinates(this._s0, this._s1);
41594           this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);
41595           this._seg1.setCoordinates(this._s1, this._s2);
41596           this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);
41597           if (this._s1.equals(this._s2)) { return null }
41598           var orientation = CGAlgorithms.computeOrientation(this._s0, this._s1, this._s2);
41599           var outsideTurn = (orientation === CGAlgorithms.CLOCKWISE && this._side === Position.LEFT) || (orientation === CGAlgorithms.COUNTERCLOCKWISE && this._side === Position.RIGHT);
41600           if (orientation === 0) {
41601             this.addCollinear(addStartPoint);
41602           } else if (outsideTurn) {
41603             this.addOutsideTurn(orientation, addStartPoint);
41604           } else {
41605             this.addInsideTurn(orientation, addStartPoint);
41606           }
41607         };
41608         OffsetSegmentGenerator.prototype.addLineEndCap = function addLineEndCap (p0, p1) {
41609           var seg = new LineSegment(p0, p1);
41610           var offsetL = new LineSegment();
41611           this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);
41612           var offsetR = new LineSegment();
41613           this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);
41614           var dx = p1.x - p0.x;
41615           var dy = p1.y - p0.y;
41616           var angle = Math.atan2(dy, dx);
41617           switch (this._bufParams.getEndCapStyle()) {
41618             case BufferParameters.CAP_ROUND:
41619               this._segList.addPt(offsetL.p1);
41620               this.addFilletArc(p1, angle + Math.PI / 2, angle - Math.PI / 2, CGAlgorithms.CLOCKWISE, this._distance);
41621               this._segList.addPt(offsetR.p1);
41622               break
41623             case BufferParameters.CAP_FLAT:
41624               this._segList.addPt(offsetL.p1);
41625               this._segList.addPt(offsetR.p1);
41626               break
41627             case BufferParameters.CAP_SQUARE:
41628               var squareCapSideOffset = new Coordinate();
41629               squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);
41630               squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);
41631               var squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);
41632               var squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);
41633               this._segList.addPt(squareCapLOffset);
41634               this._segList.addPt(squareCapROffset);
41635               break
41636           }
41637         };
41638         OffsetSegmentGenerator.prototype.getCoordinates = function getCoordinates () {
41639           var pts = this._segList.getCoordinates();
41640           return pts
41641         };
41642         OffsetSegmentGenerator.prototype.addMitreJoin = function addMitreJoin (p, offset0, offset1, distance) {
41643           var isMitreWithinLimit = true;
41644           var intPt = null;
41645           try {
41646             intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);
41647             var mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);
41648             if (mitreRatio > this._bufParams.getMitreLimit()) { isMitreWithinLimit = false; }
41649           } catch (ex) {
41650             if (ex instanceof NotRepresentableException) {
41651               intPt = new Coordinate(0, 0);
41652               isMitreWithinLimit = false;
41653             } else { throw ex }
41654           } finally {}
41655           if (isMitreWithinLimit) {
41656             this._segList.addPt(intPt);
41657           } else {
41658             this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());
41659           }
41660         };
41661         OffsetSegmentGenerator.prototype.addFilletCorner = function addFilletCorner (p, p0, p1, direction, radius) {
41662           var dx0 = p0.x - p.x;
41663           var dy0 = p0.y - p.y;
41664           var startAngle = Math.atan2(dy0, dx0);
41665           var dx1 = p1.x - p.x;
41666           var dy1 = p1.y - p.y;
41667           var endAngle = Math.atan2(dy1, dx1);
41668           if (direction === CGAlgorithms.CLOCKWISE) {
41669             if (startAngle <= endAngle) { startAngle += 2.0 * Math.PI; }
41670           } else {
41671             if (startAngle >= endAngle) { startAngle -= 2.0 * Math.PI; }
41672           }
41673           this._segList.addPt(p0);
41674           this.addFilletArc(p, startAngle, endAngle, direction, radius);
41675           this._segList.addPt(p1);
41676         };
41677         OffsetSegmentGenerator.prototype.addOutsideTurn = function addOutsideTurn (orientation, addStartPoint) {
41678           if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {
41679             this._segList.addPt(this._offset0.p1);
41680             return null
41681           }
41682           if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
41683             this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);
41684           } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {
41685             this.addBevelJoin(this._offset0, this._offset1);
41686           } else {
41687             if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
41688             this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);
41689             this._segList.addPt(this._offset1.p0);
41690           }
41691         };
41692         OffsetSegmentGenerator.prototype.createSquare = function createSquare (p) {
41693           this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));
41694           this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));
41695           this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));
41696           this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));
41697           this._segList.closeRing();
41698         };
41699         OffsetSegmentGenerator.prototype.addSegments = function addSegments (pt, isForward) {
41700           this._segList.addPts(pt, isForward);
41701         };
41702         OffsetSegmentGenerator.prototype.addFirstSegment = function addFirstSegment () {
41703           this._segList.addPt(this._offset1.p0);
41704         };
41705         OffsetSegmentGenerator.prototype.addLastSegment = function addLastSegment () {
41706           this._segList.addPt(this._offset1.p1);
41707         };
41708         OffsetSegmentGenerator.prototype.initSideSegments = function initSideSegments (s1, s2, side) {
41709           this._s1 = s1;
41710           this._s2 = s2;
41711           this._side = side;
41712           this._seg1.setCoordinates(s1, s2);
41713           this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);
41714         };
41715         OffsetSegmentGenerator.prototype.addLimitedMitreJoin = function addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {
41716           var basePt = this._seg0.p1;
41717           var ang0 = Angle.angle(basePt, this._seg0.p0);
41718           // const ang1 = Angle.angle(basePt, this._seg1.p1)
41719           var angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);
41720           var angDiffHalf = angDiff / 2;
41721           var midAng = Angle.normalize(ang0 + angDiffHalf);
41722           var mitreMidAng = Angle.normalize(midAng + Math.PI);
41723           var mitreDist = mitreLimit * distance;
41724           var bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));
41725           var bevelHalfLen = distance - bevelDelta;
41726           var bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);
41727           var bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);
41728           var bevelMidPt = new Coordinate(bevelMidX, bevelMidY);
41729           var mitreMidLine = new LineSegment(basePt, bevelMidPt);
41730           var bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);
41731           var bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);
41732           if (this._side === Position.LEFT) {
41733             this._segList.addPt(bevelEndLeft);
41734             this._segList.addPt(bevelEndRight);
41735           } else {
41736             this._segList.addPt(bevelEndRight);
41737             this._segList.addPt(bevelEndLeft);
41738           }
41739         };
41740         OffsetSegmentGenerator.prototype.computeOffsetSegment = function computeOffsetSegment (seg, side, distance, offset) {
41741           var sideSign = side === Position.LEFT ? 1 : -1;
41742           var dx = seg.p1.x - seg.p0.x;
41743           var dy = seg.p1.y - seg.p0.y;
41744           var len = Math.sqrt(dx * dx + dy * dy);
41745           var ux = sideSign * distance * dx / len;
41746           var uy = sideSign * distance * dy / len;
41747           offset.p0.x = seg.p0.x - uy;
41748           offset.p0.y = seg.p0.y + ux;
41749           offset.p1.x = seg.p1.x - uy;
41750           offset.p1.y = seg.p1.y + ux;
41751         };
41752         OffsetSegmentGenerator.prototype.addFilletArc = function addFilletArc (p, startAngle, endAngle, direction, radius) {
41753             var this$1 = this;
41754
41755           var directionFactor = direction === CGAlgorithms.CLOCKWISE ? -1 : 1;
41756           var totalAngle = Math.abs(startAngle - endAngle);
41757           var nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);
41758           if (nSegs < 1) { return null }
41759           var initAngle = 0.0;
41760           var currAngleInc = totalAngle / nSegs;
41761           var currAngle = initAngle;
41762           var pt = new Coordinate();
41763           while (currAngle < totalAngle) {
41764             var angle = startAngle + directionFactor * currAngle;
41765             pt.x = p.x + radius * Math.cos(angle);
41766             pt.y = p.y + radius * Math.sin(angle);
41767             this$1._segList.addPt(pt);
41768             currAngle += currAngleInc;
41769           }
41770         };
41771         OffsetSegmentGenerator.prototype.addInsideTurn = function addInsideTurn (orientation, addStartPoint) {
41772           this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);
41773           if (this._li.hasIntersection()) {
41774             this._segList.addPt(this._li.getIntersection(0));
41775           } else {
41776             this._hasNarrowConcaveAngle = true;
41777             if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {
41778               this._segList.addPt(this._offset0.p1);
41779             } else {
41780               this._segList.addPt(this._offset0.p1);
41781               if (this._closingSegLengthFactor > 0) {
41782                 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));
41783                 this._segList.addPt(mid0);
41784                 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));
41785                 this._segList.addPt(mid1);
41786               } else {
41787                 this._segList.addPt(this._s1);
41788               }
41789               this._segList.addPt(this._offset1.p0);
41790             }
41791           }
41792         };
41793         OffsetSegmentGenerator.prototype.createCircle = function createCircle (p) {
41794           var pt = new Coordinate(p.x + this._distance, p.y);
41795           this._segList.addPt(pt);
41796           this.addFilletArc(p, 0.0, 2.0 * Math.PI, -1, this._distance);
41797           this._segList.closeRing();
41798         };
41799         OffsetSegmentGenerator.prototype.addBevelJoin = function addBevelJoin (offset0, offset1) {
41800           this._segList.addPt(offset0.p1);
41801           this._segList.addPt(offset1.p0);
41802         };
41803         OffsetSegmentGenerator.prototype.init = function init (distance) {
41804           this._distance = distance;
41805           this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));
41806           this._segList = new OffsetSegmentString();
41807           this._segList.setPrecisionModel(this._precisionModel);
41808           this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);
41809         };
41810         OffsetSegmentGenerator.prototype.addCollinear = function addCollinear (addStartPoint) {
41811           this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);
41812           var numInt = this._li.getIntersectionNum();
41813           if (numInt >= 2) {
41814             if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {
41815               if (addStartPoint) { this._segList.addPt(this._offset0.p1); }
41816               this._segList.addPt(this._offset1.p0);
41817             } else {
41818               this.addFilletCorner(this._s1, this._offset0.p1, this._offset1.p0, CGAlgorithms.CLOCKWISE, this._distance);
41819             }
41820           }
41821         };
41822         OffsetSegmentGenerator.prototype.closeRing = function closeRing () {
41823           this._segList.closeRing();
41824         };
41825         OffsetSegmentGenerator.prototype.hasNarrowConcaveAngle = function hasNarrowConcaveAngle () {
41826           return this._hasNarrowConcaveAngle
41827         };
41828         OffsetSegmentGenerator.prototype.interfaces_ = function interfaces_ () {
41829           return []
41830         };
41831         OffsetSegmentGenerator.prototype.getClass = function getClass () {
41832           return OffsetSegmentGenerator
41833         };
41834         staticAccessors$27.OFFSET_SEGMENT_SEPARATION_FACTOR.get = function () { return 1.0E-3 };
41835         staticAccessors$27.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-3 };
41836         staticAccessors$27.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get = function () { return 1.0E-6 };
41837         staticAccessors$27.MAX_CLOSING_SEG_LEN_FACTOR.get = function () { return 80 };
41838
41839         Object.defineProperties( OffsetSegmentGenerator, staticAccessors$27 );
41840
41841         var OffsetCurveBuilder = function OffsetCurveBuilder () {
41842           this._distance = 0.0;
41843           this._precisionModel = null;
41844           this._bufParams = null;
41845           var precisionModel = arguments[0];
41846           var bufParams = arguments[1];
41847           this._precisionModel = precisionModel;
41848           this._bufParams = bufParams;
41849         };
41850         OffsetCurveBuilder.prototype.getOffsetCurve = function getOffsetCurve (inputPts, distance) {
41851           this._distance = distance;
41852           if (distance === 0.0) { return null }
41853           var isRightSide = distance < 0.0;
41854           var posDistance = Math.abs(distance);
41855           var segGen = this.getSegGen(posDistance);
41856           if (inputPts.length <= 1) {
41857             this.computePointCurve(inputPts[0], segGen);
41858           } else {
41859             this.computeOffsetCurve(inputPts, isRightSide, segGen);
41860           }
41861           var curvePts = segGen.getCoordinates();
41862           if (isRightSide) { CoordinateArrays.reverse(curvePts); }
41863           return curvePts
41864         };
41865         OffsetCurveBuilder.prototype.computeSingleSidedBufferCurve = function computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {
41866           var distTol = this.simplifyTolerance(this._distance);
41867           if (isRightSide) {
41868             segGen.addSegments(inputPts, true);
41869             var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
41870             var n2 = simp2.length - 1;
41871             segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
41872             segGen.addFirstSegment();
41873             for (var i = n2 - 2; i >= 0; i--) {
41874               segGen.addNextSegment(simp2[i], true);
41875             }
41876           } else {
41877             segGen.addSegments(inputPts, false);
41878             var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
41879             var n1 = simp1.length - 1;
41880             segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
41881             segGen.addFirstSegment();
41882             for (var i$1 = 2; i$1 <= n1; i$1++) {
41883               segGen.addNextSegment(simp1[i$1], true);
41884             }
41885           }
41886           segGen.addLastSegment();
41887           segGen.closeRing();
41888         };
41889         OffsetCurveBuilder.prototype.computeRingBufferCurve = function computeRingBufferCurve (inputPts, side, segGen) {
41890           var distTol = this.simplifyTolerance(this._distance);
41891           if (side === Position.RIGHT) { distTol = -distTol; }
41892           var simp = BufferInputLineSimplifier.simplify(inputPts, distTol);
41893           var n = simp.length - 1;
41894           segGen.initSideSegments(simp[n - 1], simp[0], side);
41895           for (var i = 1; i <= n; i++) {
41896             var addStartPoint = i !== 1;
41897             segGen.addNextSegment(simp[i], addStartPoint);
41898           }
41899           segGen.closeRing();
41900         };
41901         OffsetCurveBuilder.prototype.computeLineBufferCurve = function computeLineBufferCurve (inputPts, segGen) {
41902           var distTol = this.simplifyTolerance(this._distance);
41903           var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
41904           var n1 = simp1.length - 1;
41905           segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
41906           for (var i = 2; i <= n1; i++) {
41907             segGen.addNextSegment(simp1[i], true);
41908           }
41909           segGen.addLastSegment();
41910           segGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);
41911           var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
41912           var n2 = simp2.length - 1;
41913           segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
41914           for (var i$1 = n2 - 2; i$1 >= 0; i$1--) {
41915             segGen.addNextSegment(simp2[i$1], true);
41916           }
41917           segGen.addLastSegment();
41918           segGen.addLineEndCap(simp2[1], simp2[0]);
41919           segGen.closeRing();
41920         };
41921         OffsetCurveBuilder.prototype.computePointCurve = function computePointCurve (pt, segGen) {
41922           switch (this._bufParams.getEndCapStyle()) {
41923             case BufferParameters.CAP_ROUND:
41924               segGen.createCircle(pt);
41925               break
41926             case BufferParameters.CAP_SQUARE:
41927               segGen.createSquare(pt);
41928               break
41929           }
41930         };
41931         OffsetCurveBuilder.prototype.getLineCurve = function getLineCurve (inputPts, distance) {
41932           this._distance = distance;
41933           if (distance < 0.0 && !this._bufParams.isSingleSided()) { return null }
41934           if (distance === 0.0) { return null }
41935           var posDistance = Math.abs(distance);
41936           var segGen = this.getSegGen(posDistance);
41937           if (inputPts.length <= 1) {
41938             this.computePointCurve(inputPts[0], segGen);
41939           } else {
41940             if (this._bufParams.isSingleSided()) {
41941               var isRightSide = distance < 0.0;
41942               this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);
41943             } else { this.computeLineBufferCurve(inputPts, segGen); }
41944           }
41945           var lineCoord = segGen.getCoordinates();
41946           return lineCoord
41947         };
41948         OffsetCurveBuilder.prototype.getBufferParameters = function getBufferParameters () {
41949           return this._bufParams
41950         };
41951         OffsetCurveBuilder.prototype.simplifyTolerance = function simplifyTolerance (bufDistance) {
41952           return bufDistance * this._bufParams.getSimplifyFactor()
41953         };
41954         OffsetCurveBuilder.prototype.getRingCurve = function getRingCurve (inputPts, side, distance) {
41955           this._distance = distance;
41956           if (inputPts.length <= 2) { return this.getLineCurve(inputPts, distance) }
41957           if (distance === 0.0) {
41958             return OffsetCurveBuilder.copyCoordinates(inputPts)
41959           }
41960           var segGen = this.getSegGen(distance);
41961           this.computeRingBufferCurve(inputPts, side, segGen);
41962           return segGen.getCoordinates()
41963         };
41964         OffsetCurveBuilder.prototype.computeOffsetCurve = function computeOffsetCurve (inputPts, isRightSide, segGen) {
41965           var distTol = this.simplifyTolerance(this._distance);
41966           if (isRightSide) {
41967             var simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);
41968             var n2 = simp2.length - 1;
41969             segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);
41970             segGen.addFirstSegment();
41971             for (var i = n2 - 2; i >= 0; i--) {
41972               segGen.addNextSegment(simp2[i], true);
41973             }
41974           } else {
41975             var simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);
41976             var n1 = simp1.length - 1;
41977             segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);
41978             segGen.addFirstSegment();
41979             for (var i$1 = 2; i$1 <= n1; i$1++) {
41980               segGen.addNextSegment(simp1[i$1], true);
41981             }
41982           }
41983           segGen.addLastSegment();
41984         };
41985         OffsetCurveBuilder.prototype.getSegGen = function getSegGen (distance) {
41986           return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)
41987         };
41988         OffsetCurveBuilder.prototype.interfaces_ = function interfaces_ () {
41989           return []
41990         };
41991         OffsetCurveBuilder.prototype.getClass = function getClass () {
41992           return OffsetCurveBuilder
41993         };
41994         OffsetCurveBuilder.copyCoordinates = function copyCoordinates (pts) {
41995           var copy = new Array(pts.length).fill(null);
41996           for (var i = 0; i < copy.length; i++) {
41997             copy[i] = new Coordinate(pts[i]);
41998           }
41999           return copy
42000         };
42001
42002         var SubgraphDepthLocater = function SubgraphDepthLocater () {
42003           this._subgraphs = null;
42004           this._seg = new LineSegment();
42005           this._cga = new CGAlgorithms();
42006           var subgraphs = arguments[0];
42007           this._subgraphs = subgraphs;
42008         };
42009
42010         var staticAccessors$30 = { DepthSegment: { configurable: true } };
42011         SubgraphDepthLocater.prototype.findStabbedSegments = function findStabbedSegments () {
42012             var this$1 = this;
42013
42014           if (arguments.length === 1) {
42015             var stabbingRayLeftPt = arguments[0];
42016             var stabbedSegments = new ArrayList();
42017             for (var i = this._subgraphs.iterator(); i.hasNext();) {
42018               var bsg = i.next();
42019               var env = bsg.getEnvelope();
42020               if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) { continue }
42021               this$1.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);
42022             }
42023             return stabbedSegments
42024           } else if (arguments.length === 3) {
42025             if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {
42026               var stabbingRayLeftPt$1 = arguments[0];
42027               var dirEdge = arguments[1];
42028               var stabbedSegments$1 = arguments[2];
42029               var pts = dirEdge.getEdge().getCoordinates();
42030               for (var i$1 = 0; i$1 < pts.length - 1; i$1++) {
42031                 this$1._seg.p0 = pts[i$1];
42032                 this$1._seg.p1 = pts[i$1 + 1];
42033                 if (this$1._seg.p0.y > this$1._seg.p1.y) { this$1._seg.reverse(); }
42034                 var maxx = Math.max(this$1._seg.p0.x, this$1._seg.p1.x);
42035                 if (maxx < stabbingRayLeftPt$1.x) { continue }
42036                 if (this$1._seg.isHorizontal()) { continue }
42037                 if (stabbingRayLeftPt$1.y < this$1._seg.p0.y || stabbingRayLeftPt$1.y > this$1._seg.p1.y) { continue }
42038                 if (CGAlgorithms.computeOrientation(this$1._seg.p0, this$1._seg.p1, stabbingRayLeftPt$1) === CGAlgorithms.RIGHT) { continue }
42039                 var depth = dirEdge.getDepth(Position.LEFT);
42040                 if (!this$1._seg.p0.equals(pts[i$1])) { depth = dirEdge.getDepth(Position.RIGHT); }
42041                 var ds = new DepthSegment(this$1._seg, depth);
42042                 stabbedSegments$1.add(ds);
42043               }
42044             } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {
42045               var stabbingRayLeftPt$2 = arguments[0];
42046               var dirEdges = arguments[1];
42047               var stabbedSegments$2 = arguments[2];
42048               for (var i$2 = dirEdges.iterator(); i$2.hasNext();) {
42049                 var de = i$2.next();
42050                 if (!de.isForward()) { continue }
42051                 this$1.findStabbedSegments(stabbingRayLeftPt$2, de, stabbedSegments$2);
42052               }
42053             }
42054           }
42055         };
42056         SubgraphDepthLocater.prototype.getDepth = function getDepth (p) {
42057           var stabbedSegments = this.findStabbedSegments(p);
42058           if (stabbedSegments.size() === 0) { return 0 }
42059           var ds = Collections.min(stabbedSegments);
42060           return ds._leftDepth
42061         };
42062         SubgraphDepthLocater.prototype.interfaces_ = function interfaces_ () {
42063           return []
42064         };
42065         SubgraphDepthLocater.prototype.getClass = function getClass () {
42066           return SubgraphDepthLocater
42067         };
42068         staticAccessors$30.DepthSegment.get = function () { return DepthSegment };
42069
42070         Object.defineProperties( SubgraphDepthLocater, staticAccessors$30 );
42071
42072         var DepthSegment = function DepthSegment () {
42073           this._upwardSeg = null;
42074           this._leftDepth = null;
42075           var seg = arguments[0];
42076           var depth = arguments[1];
42077           this._upwardSeg = new LineSegment(seg);
42078           this._leftDepth = depth;
42079         };
42080         DepthSegment.prototype.compareTo = function compareTo (obj) {
42081           var other = obj;
42082           if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) { return 1 }
42083           if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) { return -1 }
42084           var orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);
42085           if (orientIndex !== 0) { return orientIndex }
42086           orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);
42087           if (orientIndex !== 0) { return orientIndex }
42088           return this._upwardSeg.compareTo(other._upwardSeg)
42089         };
42090         DepthSegment.prototype.compareX = function compareX (seg0, seg1) {
42091           var compare0 = seg0.p0.compareTo(seg1.p0);
42092           if (compare0 !== 0) { return compare0 }
42093           return seg0.p1.compareTo(seg1.p1)
42094         };
42095         DepthSegment.prototype.toString = function toString () {
42096           return this._upwardSeg.toString()
42097         };
42098         DepthSegment.prototype.interfaces_ = function interfaces_ () {
42099           return [Comparable]
42100         };
42101         DepthSegment.prototype.getClass = function getClass () {
42102           return DepthSegment
42103         };
42104
42105         var Triangle = function Triangle (p0, p1, p2) {
42106           this.p0 = p0 || null;
42107           this.p1 = p1 || null;
42108           this.p2 = p2 || null;
42109         };
42110         Triangle.prototype.area = function area () {
42111           return Triangle.area(this.p0, this.p1, this.p2)
42112         };
42113         Triangle.prototype.signedArea = function signedArea () {
42114           return Triangle.signedArea(this.p0, this.p1, this.p2)
42115         };
42116         Triangle.prototype.interpolateZ = function interpolateZ (p) {
42117           if (p === null) { throw new IllegalArgumentException('Supplied point is null.') }
42118           return Triangle.interpolateZ(p, this.p0, this.p1, this.p2)
42119         };
42120         Triangle.prototype.longestSideLength = function longestSideLength () {
42121           return Triangle.longestSideLength(this.p0, this.p1, this.p2)
42122         };
42123         Triangle.prototype.isAcute = function isAcute () {
42124           return Triangle.isAcute(this.p0, this.p1, this.p2)
42125         };
42126         Triangle.prototype.circumcentre = function circumcentre () {
42127           return Triangle.circumcentre(this.p0, this.p1, this.p2)
42128         };
42129         Triangle.prototype.area3D = function area3D () {
42130           return Triangle.area3D(this.p0, this.p1, this.p2)
42131         };
42132         Triangle.prototype.centroid = function centroid () {
42133           return Triangle.centroid(this.p0, this.p1, this.p2)
42134         };
42135         Triangle.prototype.inCentre = function inCentre () {
42136           return Triangle.inCentre(this.p0, this.p1, this.p2)
42137         };
42138         Triangle.prototype.interfaces_ = function interfaces_ () {
42139           return []
42140         };
42141         Triangle.prototype.getClass = function getClass () {
42142           return Triangle
42143         };
42144         Triangle.area = function area (a, b, c) {
42145           return Math.abs(((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2)
42146         };
42147         Triangle.signedArea = function signedArea (a, b, c) {
42148           return ((c.x - a.x) * (b.y - a.y) - (b.x - a.x) * (c.y - a.y)) / 2
42149         };
42150         Triangle.det = function det (m00, m01, m10, m11) {
42151           return m00 * m11 - m01 * m10
42152         };
42153         Triangle.interpolateZ = function interpolateZ (p, v0, v1, v2) {
42154           var x0 = v0.x;
42155           var y0 = v0.y;
42156           var a = v1.x - x0;
42157           var b = v2.x - x0;
42158           var c = v1.y - y0;
42159           var d = v2.y - y0;
42160           var det = a * d - b * c;
42161           var dx = p.x - x0;
42162           var dy = p.y - y0;
42163           var t = (d * dx - b * dy) / det;
42164           var u = (-c * dx + a * dy) / det;
42165           var z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);
42166           return z
42167         };
42168         Triangle.longestSideLength = function longestSideLength (a, b, c) {
42169           var lenAB = a.distance(b);
42170           var lenBC = b.distance(c);
42171           var lenCA = c.distance(a);
42172           var maxLen = lenAB;
42173           if (lenBC > maxLen) { maxLen = lenBC; }
42174           if (lenCA > maxLen) { maxLen = lenCA; }
42175           return maxLen
42176         };
42177         Triangle.isAcute = function isAcute (a, b, c) {
42178           if (!Angle.isAcute(a, b, c)) { return false }
42179           if (!Angle.isAcute(b, c, a)) { return false }
42180           if (!Angle.isAcute(c, a, b)) { return false }
42181           return true
42182         };
42183         Triangle.circumcentre = function circumcentre (a, b, c) {
42184           var cx = c.x;
42185           var cy = c.y;
42186           var ax = a.x - cx;
42187           var ay = a.y - cy;
42188           var bx = b.x - cx;
42189           var by = b.y - cy;
42190           var denom = 2 * Triangle.det(ax, ay, bx, by);
42191           var numx = Triangle.det(ay, ax * ax + ay * ay, by, bx * bx + by * by);
42192           var numy = Triangle.det(ax, ax * ax + ay * ay, bx, bx * bx + by * by);
42193           var ccx = cx - numx / denom;
42194           var ccy = cy + numy / denom;
42195           return new Coordinate(ccx, ccy)
42196         };
42197         Triangle.perpendicularBisector = function perpendicularBisector (a, b) {
42198           var dx = b.x - a.x;
42199           var dy = b.y - a.y;
42200           var l1 = new HCoordinate(a.x + dx / 2.0, a.y + dy / 2.0, 1.0);
42201           var l2 = new HCoordinate(a.x - dy + dx / 2.0, a.y + dx + dy / 2.0, 1.0);
42202           return new HCoordinate(l1, l2)
42203         };
42204         Triangle.angleBisector = function angleBisector (a, b, c) {
42205           var len0 = b.distance(a);
42206           var len2 = b.distance(c);
42207           var frac = len0 / (len0 + len2);
42208           var dx = c.x - a.x;
42209           var dy = c.y - a.y;
42210           var splitPt = new Coordinate(a.x + frac * dx, a.y + frac * dy);
42211           return splitPt
42212         };
42213         Triangle.area3D = function area3D (a, b, c) {
42214           var ux = b.x - a.x;
42215           var uy = b.y - a.y;
42216           var uz = b.z - a.z;
42217           var vx = c.x - a.x;
42218           var vy = c.y - a.y;
42219           var vz = c.z - a.z;
42220           var crossx = uy * vz - uz * vy;
42221           var crossy = uz * vx - ux * vz;
42222           var crossz = ux * vy - uy * vx;
42223           var absSq = crossx * crossx + crossy * crossy + crossz * crossz;
42224           var area3D = Math.sqrt(absSq) / 2;
42225           return area3D
42226         };
42227         Triangle.centroid = function centroid (a, b, c) {
42228           var x = (a.x + b.x + c.x) / 3;
42229           var y = (a.y + b.y + c.y) / 3;
42230           return new Coordinate(x, y)
42231         };
42232         Triangle.inCentre = function inCentre (a, b, c) {
42233           var len0 = b.distance(c);
42234           var len1 = a.distance(c);
42235           var len2 = a.distance(b);
42236           var circum = len0 + len1 + len2;
42237           var inCentreX = (len0 * a.x + len1 * b.x + len2 * c.x) / circum;
42238           var inCentreY = (len0 * a.y + len1 * b.y + len2 * c.y) / circum;
42239           return new Coordinate(inCentreX, inCentreY)
42240         };
42241
42242         var OffsetCurveSetBuilder = function OffsetCurveSetBuilder () {
42243           this._inputGeom = null;
42244           this._distance = null;
42245           this._curveBuilder = null;
42246           this._curveList = new ArrayList();
42247           var inputGeom = arguments[0];
42248           var distance = arguments[1];
42249           var curveBuilder = arguments[2];
42250           this._inputGeom = inputGeom;
42251           this._distance = distance;
42252           this._curveBuilder = curveBuilder;
42253         };
42254         OffsetCurveSetBuilder.prototype.addPoint = function addPoint (p) {
42255           if (this._distance <= 0.0) { return null }
42256           var coord = p.getCoordinates();
42257           var curve = this._curveBuilder.getLineCurve(coord, this._distance);
42258           this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
42259         };
42260         OffsetCurveSetBuilder.prototype.addPolygon = function addPolygon (p) {
42261             var this$1 = this;
42262
42263           var offsetDistance = this._distance;
42264           var offsetSide = Position.LEFT;
42265           if (this._distance < 0.0) {
42266             offsetDistance = -this._distance;
42267             offsetSide = Position.RIGHT;
42268           }
42269           var shell = p.getExteriorRing();
42270           var shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());
42271           if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) { return null }
42272           if (this._distance <= 0.0 && shellCoord.length < 3) { return null }
42273           this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);
42274           for (var i = 0; i < p.getNumInteriorRing(); i++) {
42275             var hole = p.getInteriorRingN(i);
42276             var holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());
42277             if (this$1._distance > 0.0 && this$1.isErodedCompletely(hole, -this$1._distance)) { continue }
42278             this$1.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);
42279           }
42280         };
42281         OffsetCurveSetBuilder.prototype.isTriangleErodedCompletely = function isTriangleErodedCompletely (triangleCoord, bufferDistance) {
42282           var tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);
42283           var inCentre = tri.inCentre();
42284           var distToCentre = CGAlgorithms.distancePointLine(inCentre, tri.p0, tri.p1);
42285           return distToCentre < Math.abs(bufferDistance)
42286         };
42287         OffsetCurveSetBuilder.prototype.addLineString = function addLineString (line) {
42288           if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) { return null }
42289           var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
42290           var curve = this._curveBuilder.getLineCurve(coord, this._distance);
42291           this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);
42292         };
42293         OffsetCurveSetBuilder.prototype.addCurve = function addCurve (coord, leftLoc, rightLoc) {
42294           if (coord === null || coord.length < 2) { return null }
42295           var e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));
42296           this._curveList.add(e);
42297         };
42298         OffsetCurveSetBuilder.prototype.getCurves = function getCurves () {
42299           this.add(this._inputGeom);
42300           return this._curveList
42301         };
42302         OffsetCurveSetBuilder.prototype.addPolygonRing = function addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {
42303           if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) { return null }
42304           var leftLoc = cwLeftLoc;
42305           var rightLoc = cwRightLoc;
42306           if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && CGAlgorithms.isCCW(coord)) {
42307             leftLoc = cwRightLoc;
42308             rightLoc = cwLeftLoc;
42309             side = Position.opposite(side);
42310           }
42311           var curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);
42312           this.addCurve(curve, leftLoc, rightLoc);
42313         };
42314         OffsetCurveSetBuilder.prototype.add = function add (g) {
42315           if (g.isEmpty()) { return null }
42316           if (g instanceof Polygon) { this.addPolygon(g); }
42317           else if (g instanceof LineString) { this.addLineString(g); }
42318           else if (g instanceof Point) { this.addPoint(g); }
42319           else if (g instanceof MultiPoint) { this.addCollection(g); }
42320           else if (g instanceof MultiLineString) { this.addCollection(g); }
42321           else if (g instanceof MultiPolygon) { this.addCollection(g); }
42322           else if (g instanceof GeometryCollection) { this.addCollection(g); }
42323           // else throw new UnsupportedOperationException(g.getClass().getName())
42324         };
42325         OffsetCurveSetBuilder.prototype.isErodedCompletely = function isErodedCompletely (ring, bufferDistance) {
42326           var ringCoord = ring.getCoordinates();
42327           // const minDiam = 0.0
42328           if (ringCoord.length < 4) { return bufferDistance < 0 }
42329           if (ringCoord.length === 4) { return this.isTriangleErodedCompletely(ringCoord, bufferDistance) }
42330           var env = ring.getEnvelopeInternal();
42331           var envMinDimension = Math.min(env.getHeight(), env.getWidth());
42332           if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) { return true }
42333           return false
42334         };
42335         OffsetCurveSetBuilder.prototype.addCollection = function addCollection (gc) {
42336             var this$1 = this;
42337
42338           for (var i = 0; i < gc.getNumGeometries(); i++) {
42339             var g = gc.getGeometryN(i);
42340             this$1.add(g);
42341           }
42342         };
42343         OffsetCurveSetBuilder.prototype.interfaces_ = function interfaces_ () {
42344           return []
42345         };
42346         OffsetCurveSetBuilder.prototype.getClass = function getClass () {
42347           return OffsetCurveSetBuilder
42348         };
42349
42350         var PointOnGeometryLocator = function PointOnGeometryLocator () {};
42351
42352         PointOnGeometryLocator.prototype.locate = function locate (p) {};
42353         PointOnGeometryLocator.prototype.interfaces_ = function interfaces_ () {
42354           return []
42355         };
42356         PointOnGeometryLocator.prototype.getClass = function getClass () {
42357           return PointOnGeometryLocator
42358         };
42359
42360         var GeometryCollectionIterator = function GeometryCollectionIterator () {
42361           this._parent = null;
42362           this._atStart = null;
42363           this._max = null;
42364           this._index = null;
42365           this._subcollectionIterator = null;
42366           var parent = arguments[0];
42367           this._parent = parent;
42368           this._atStart = true;
42369           this._index = 0;
42370           this._max = parent.getNumGeometries();
42371         };
42372         GeometryCollectionIterator.prototype.next = function next () {
42373           if (this._atStart) {
42374             this._atStart = false;
42375             if (GeometryCollectionIterator.isAtomic(this._parent)) { this._index++; }
42376             return this._parent
42377           }
42378           if (this._subcollectionIterator !== null) {
42379             if (this._subcollectionIterator.hasNext()) {
42380               return this._subcollectionIterator.next()
42381             } else {
42382               this._subcollectionIterator = null;
42383             }
42384           }
42385           if (this._index >= this._max) {
42386             throw new NoSuchElementException()
42387           }
42388           var obj = this._parent.getGeometryN(this._index++);
42389           if (obj instanceof GeometryCollection) {
42390             this._subcollectionIterator = new GeometryCollectionIterator(obj);
42391             return this._subcollectionIterator.next()
42392           }
42393           return obj
42394         };
42395         GeometryCollectionIterator.prototype.remove = function remove () {
42396           throw new Error(this.getClass().getName())
42397         };
42398         GeometryCollectionIterator.prototype.hasNext = function hasNext () {
42399           if (this._atStart) {
42400             return true
42401           }
42402           if (this._subcollectionIterator !== null) {
42403             if (this._subcollectionIterator.hasNext()) {
42404               return true
42405             }
42406             this._subcollectionIterator = null;
42407           }
42408           if (this._index >= this._max) {
42409             return false
42410           }
42411           return true
42412         };
42413         GeometryCollectionIterator.prototype.interfaces_ = function interfaces_ () {
42414           return [Iterator$1]
42415         };
42416         GeometryCollectionIterator.prototype.getClass = function getClass () {
42417           return GeometryCollectionIterator
42418         };
42419         GeometryCollectionIterator.isAtomic = function isAtomic (geom) {
42420           return !(geom instanceof GeometryCollection)
42421         };
42422
42423         var SimplePointInAreaLocator = function SimplePointInAreaLocator () {
42424           this._geom = null;
42425           var geom = arguments[0];
42426           this._geom = geom;
42427         };
42428         SimplePointInAreaLocator.prototype.locate = function locate (p) {
42429           return SimplePointInAreaLocator.locate(p, this._geom)
42430         };
42431         SimplePointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
42432           return [PointOnGeometryLocator]
42433         };
42434         SimplePointInAreaLocator.prototype.getClass = function getClass () {
42435           return SimplePointInAreaLocator
42436         };
42437         SimplePointInAreaLocator.isPointInRing = function isPointInRing (p, ring) {
42438           if (!ring.getEnvelopeInternal().intersects(p)) { return false }
42439           return CGAlgorithms.isPointInRing(p, ring.getCoordinates())
42440         };
42441         SimplePointInAreaLocator.containsPointInPolygon = function containsPointInPolygon (p, poly) {
42442           if (poly.isEmpty()) { return false }
42443           var shell = poly.getExteriorRing();
42444           if (!SimplePointInAreaLocator.isPointInRing(p, shell)) { return false }
42445           for (var i = 0; i < poly.getNumInteriorRing(); i++) {
42446             var hole = poly.getInteriorRingN(i);
42447             if (SimplePointInAreaLocator.isPointInRing(p, hole)) { return false }
42448           }
42449           return true
42450         };
42451         SimplePointInAreaLocator.containsPoint = function containsPoint (p, geom) {
42452           if (geom instanceof Polygon) {
42453             return SimplePointInAreaLocator.containsPointInPolygon(p, geom)
42454           } else if (geom instanceof GeometryCollection) {
42455             var geomi = new GeometryCollectionIterator(geom);
42456             while (geomi.hasNext()) {
42457               var g2 = geomi.next();
42458               if (g2 !== geom) { if (SimplePointInAreaLocator.containsPoint(p, g2)) { return true } }
42459             }
42460           }
42461           return false
42462         };
42463         SimplePointInAreaLocator.locate = function locate (p, geom) {
42464           if (geom.isEmpty()) { return Location.EXTERIOR }
42465           if (SimplePointInAreaLocator.containsPoint(p, geom)) { return Location.INTERIOR }
42466           return Location.EXTERIOR
42467         };
42468
42469         var EdgeEndStar = function EdgeEndStar () {
42470           this._edgeMap = new TreeMap();
42471           this._edgeList = null;
42472           this._ptInAreaLocation = [Location.NONE, Location.NONE];
42473         };
42474         EdgeEndStar.prototype.getNextCW = function getNextCW (ee) {
42475           this.getEdges();
42476           var i = this._edgeList.indexOf(ee);
42477           var iNextCW = i - 1;
42478           if (i === 0) { iNextCW = this._edgeList.size() - 1; }
42479           return this._edgeList.get(iNextCW)
42480         };
42481         EdgeEndStar.prototype.propagateSideLabels = function propagateSideLabels (geomIndex) {
42482           var startLoc = Location.NONE;
42483           for (var it = this.iterator(); it.hasNext();) {
42484             var e = it.next();
42485             var label = e.getLabel();
42486             if (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) { startLoc = label.getLocation(geomIndex, Position.LEFT); }
42487           }
42488           if (startLoc === Location.NONE) { return null }
42489           var currLoc = startLoc;
42490           for (var it$1 = this.iterator(); it$1.hasNext();) {
42491             var e$1 = it$1.next();
42492             var label$1 = e$1.getLabel();
42493             if (label$1.getLocation(geomIndex, Position.ON) === Location.NONE) { label$1.setLocation(geomIndex, Position.ON, currLoc); }
42494             if (label$1.isArea(geomIndex)) {
42495               var leftLoc = label$1.getLocation(geomIndex, Position.LEFT);
42496               var rightLoc = label$1.getLocation(geomIndex, Position.RIGHT);
42497               if (rightLoc !== Location.NONE) {
42498                 if (rightLoc !== currLoc) { throw new TopologyException('side location conflict', e$1.getCoordinate()) }
42499                 if (leftLoc === Location.NONE) {
42500                   Assert.shouldNeverReachHere('found single null side (at ' + e$1.getCoordinate() + ')');
42501                 }
42502                 currLoc = leftLoc;
42503               } else {
42504                 Assert.isTrue(label$1.getLocation(geomIndex, Position.LEFT) === Location.NONE, 'found single null side');
42505                 label$1.setLocation(geomIndex, Position.RIGHT, currLoc);
42506                 label$1.setLocation(geomIndex, Position.LEFT, currLoc);
42507               }
42508             }
42509           }
42510         };
42511         EdgeEndStar.prototype.getCoordinate = function getCoordinate () {
42512           var it = this.iterator();
42513           if (!it.hasNext()) { return null }
42514           var e = it.next();
42515           return e.getCoordinate()
42516         };
42517         EdgeEndStar.prototype.print = function print (out) {
42518           System.out.println('EdgeEndStar:   ' + this.getCoordinate());
42519           for (var it = this.iterator(); it.hasNext();) {
42520             var e = it.next();
42521             e.print(out);
42522           }
42523         };
42524         EdgeEndStar.prototype.isAreaLabelsConsistent = function isAreaLabelsConsistent (geomGraph) {
42525           this.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());
42526           return this.checkAreaLabelsConsistent(0)
42527         };
42528         EdgeEndStar.prototype.checkAreaLabelsConsistent = function checkAreaLabelsConsistent (geomIndex) {
42529           var edges = this.getEdges();
42530           if (edges.size() <= 0) { return true }
42531           var lastEdgeIndex = edges.size() - 1;
42532           var startLabel = edges.get(lastEdgeIndex).getLabel();
42533           var startLoc = startLabel.getLocation(geomIndex, Position.LEFT);
42534           Assert.isTrue(startLoc !== Location.NONE, 'Found unlabelled area edge');
42535           var currLoc = startLoc;
42536           for (var it = this.iterator(); it.hasNext();) {
42537             var e = it.next();
42538             var label = e.getLabel();
42539             Assert.isTrue(label.isArea(geomIndex), 'Found non-area edge');
42540             var leftLoc = label.getLocation(geomIndex, Position.LEFT);
42541             var rightLoc = label.getLocation(geomIndex, Position.RIGHT);
42542             if (leftLoc === rightLoc) {
42543               return false
42544             }
42545             if (rightLoc !== currLoc) {
42546               return false
42547             }
42548             currLoc = leftLoc;
42549           }
42550           return true
42551         };
42552         EdgeEndStar.prototype.findIndex = function findIndex (eSearch) {
42553             var this$1 = this;
42554
42555           this.iterator();
42556           for (var i = 0; i < this._edgeList.size(); i++) {
42557             var e = this$1._edgeList.get(i);
42558             if (e === eSearch) { return i }
42559           }
42560           return -1
42561         };
42562         EdgeEndStar.prototype.iterator = function iterator () {
42563           return this.getEdges().iterator()
42564         };
42565         EdgeEndStar.prototype.getEdges = function getEdges () {
42566           if (this._edgeList === null) {
42567             this._edgeList = new ArrayList(this._edgeMap.values());
42568           }
42569           return this._edgeList
42570         };
42571         EdgeEndStar.prototype.getLocation = function getLocation (geomIndex, p, geom) {
42572           if (this._ptInAreaLocation[geomIndex] === Location.NONE) {
42573             this._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());
42574           }
42575           return this._ptInAreaLocation[geomIndex]
42576         };
42577         EdgeEndStar.prototype.toString = function toString () {
42578           var buf = new StringBuffer();
42579           buf.append('EdgeEndStar:   ' + this.getCoordinate());
42580           buf.append('\n');
42581           for (var it = this.iterator(); it.hasNext();) {
42582             var e = it.next();
42583             buf.append(e);
42584             buf.append('\n');
42585           }
42586           return buf.toString()
42587         };
42588         EdgeEndStar.prototype.computeEdgeEndLabels = function computeEdgeEndLabels (boundaryNodeRule) {
42589           for (var it = this.iterator(); it.hasNext();) {
42590             var ee = it.next();
42591             ee.computeLabel(boundaryNodeRule);
42592           }
42593         };
42594         EdgeEndStar.prototype.computeLabelling = function computeLabelling (geomGraph) {
42595             var this$1 = this;
42596
42597           this.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());
42598           this.propagateSideLabels(0);
42599           this.propagateSideLabels(1);
42600           var hasDimensionalCollapseEdge = [false, false];
42601           for (var it = this.iterator(); it.hasNext();) {
42602             var e = it.next();
42603             var label = e.getLabel();
42604             for (var geomi = 0; geomi < 2; geomi++) {
42605               if (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) { hasDimensionalCollapseEdge[geomi] = true; }
42606             }
42607           }
42608           for (var it$1 = this.iterator(); it$1.hasNext();) {
42609             var e$1 = it$1.next();
42610             var label$1 = e$1.getLabel();
42611             for (var geomi$1 = 0; geomi$1 < 2; geomi$1++) {
42612               if (label$1.isAnyNull(geomi$1)) {
42613                 var loc = Location.NONE;
42614                 if (hasDimensionalCollapseEdge[geomi$1]) {
42615                   loc = Location.EXTERIOR;
42616                 } else {
42617                   var p = e$1.getCoordinate();
42618                   loc = this$1.getLocation(geomi$1, p, geomGraph);
42619                 }
42620                 label$1.setAllLocationsIfNull(geomi$1, loc);
42621               }
42622             }
42623           }
42624         };
42625         EdgeEndStar.prototype.getDegree = function getDegree () {
42626           return this._edgeMap.size()
42627         };
42628         EdgeEndStar.prototype.insertEdgeEnd = function insertEdgeEnd (e, obj) {
42629           this._edgeMap.put(e, obj);
42630           this._edgeList = null;
42631         };
42632         EdgeEndStar.prototype.interfaces_ = function interfaces_ () {
42633           return []
42634         };
42635         EdgeEndStar.prototype.getClass = function getClass () {
42636           return EdgeEndStar
42637         };
42638
42639         var DirectedEdgeStar = (function (EdgeEndStar$$1) {
42640           function DirectedEdgeStar () {
42641             EdgeEndStar$$1.call(this);
42642             this._resultAreaEdgeList = null;
42643             this._label = null;
42644             this._SCANNING_FOR_INCOMING = 1;
42645             this._LINKING_TO_OUTGOING = 2;
42646           }
42647
42648           if ( EdgeEndStar$$1 ) { DirectedEdgeStar.__proto__ = EdgeEndStar$$1; }
42649           DirectedEdgeStar.prototype = Object.create( EdgeEndStar$$1 && EdgeEndStar$$1.prototype );
42650           DirectedEdgeStar.prototype.constructor = DirectedEdgeStar;
42651           DirectedEdgeStar.prototype.linkResultDirectedEdges = function linkResultDirectedEdges () {
42652             var this$1 = this;
42653
42654             this.getResultAreaEdges();
42655             var firstOut = null;
42656             var incoming = null;
42657             var state = this._SCANNING_FOR_INCOMING;
42658             for (var i = 0; i < this._resultAreaEdgeList.size(); i++) {
42659               var nextOut = this$1._resultAreaEdgeList.get(i);
42660               var nextIn = nextOut.getSym();
42661               if (!nextOut.getLabel().isArea()) { continue }
42662               if (firstOut === null && nextOut.isInResult()) { firstOut = nextOut; }
42663               switch (state) {
42664                 case this$1._SCANNING_FOR_INCOMING:
42665                   if (!nextIn.isInResult()) { continue }
42666                   incoming = nextIn;
42667                   state = this$1._LINKING_TO_OUTGOING;
42668                   break
42669                 case this$1._LINKING_TO_OUTGOING:
42670                   if (!nextOut.isInResult()) { continue }
42671                   incoming.setNext(nextOut);
42672                   state = this$1._SCANNING_FOR_INCOMING;
42673                   break
42674               }
42675             }
42676             if (state === this._LINKING_TO_OUTGOING) {
42677               if (firstOut === null) { throw new TopologyException('no outgoing dirEdge found', this.getCoordinate()) }
42678               Assert.isTrue(firstOut.isInResult(), 'unable to link last incoming dirEdge');
42679               incoming.setNext(firstOut);
42680             }
42681           };
42682           DirectedEdgeStar.prototype.insert = function insert (ee) {
42683             var de = ee;
42684             this.insertEdgeEnd(de, de);
42685           };
42686           DirectedEdgeStar.prototype.getRightmostEdge = function getRightmostEdge () {
42687             var edges = this.getEdges();
42688             var size = edges.size();
42689             if (size < 1) { return null }
42690             var de0 = edges.get(0);
42691             if (size === 1) { return de0 }
42692             var deLast = edges.get(size - 1);
42693             var quad0 = de0.getQuadrant();
42694             var quad1 = deLast.getQuadrant();
42695             if (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) { return de0; } else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) { return deLast; } else {
42696               // const nonHorizontalEdge = null
42697               if (de0.getDy() !== 0) { return de0; } else if (deLast.getDy() !== 0) { return deLast }
42698             }
42699             Assert.shouldNeverReachHere('found two horizontal edges incident on node');
42700             return null
42701           };
42702           DirectedEdgeStar.prototype.print = function print (out) {
42703             System.out.println('DirectedEdgeStar: ' + this.getCoordinate());
42704             for (var it = this.iterator(); it.hasNext();) {
42705               var de = it.next();
42706               out.print('out ');
42707               de.print(out);
42708               out.println();
42709               out.print('in ');
42710               de.getSym().print(out);
42711               out.println();
42712             }
42713           };
42714           DirectedEdgeStar.prototype.getResultAreaEdges = function getResultAreaEdges () {
42715             var this$1 = this;
42716
42717             if (this._resultAreaEdgeList !== null) { return this._resultAreaEdgeList }
42718             this._resultAreaEdgeList = new ArrayList();
42719             for (var it = this.iterator(); it.hasNext();) {
42720               var de = it.next();
42721               if (de.isInResult() || de.getSym().isInResult()) { this$1._resultAreaEdgeList.add(de); }
42722             }
42723             return this._resultAreaEdgeList
42724           };
42725           DirectedEdgeStar.prototype.updateLabelling = function updateLabelling (nodeLabel) {
42726             for (var it = this.iterator(); it.hasNext();) {
42727               var de = it.next();
42728               var label = de.getLabel();
42729               label.setAllLocationsIfNull(0, nodeLabel.getLocation(0));
42730               label.setAllLocationsIfNull(1, nodeLabel.getLocation(1));
42731             }
42732           };
42733           DirectedEdgeStar.prototype.linkAllDirectedEdges = function linkAllDirectedEdges () {
42734             var this$1 = this;
42735
42736             this.getEdges();
42737             var prevOut = null;
42738             var firstIn = null;
42739             for (var i = this._edgeList.size() - 1; i >= 0; i--) {
42740               var nextOut = this$1._edgeList.get(i);
42741               var nextIn = nextOut.getSym();
42742               if (firstIn === null) { firstIn = nextIn; }
42743               if (prevOut !== null) { nextIn.setNext(prevOut); }
42744               prevOut = nextOut;
42745             }
42746             firstIn.setNext(prevOut);
42747           };
42748           DirectedEdgeStar.prototype.computeDepths = function computeDepths () {
42749             var this$1 = this;
42750
42751             if (arguments.length === 1) {
42752               var de = arguments[0];
42753               var edgeIndex = this.findIndex(de);
42754               // const label = de.getLabel()
42755               var startDepth = de.getDepth(Position.LEFT);
42756               var targetLastDepth = de.getDepth(Position.RIGHT);
42757               var nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);
42758               var lastDepth = this.computeDepths(0, edgeIndex, nextDepth);
42759               if (lastDepth !== targetLastDepth) { throw new TopologyException('depth mismatch at ' + de.getCoordinate()) }
42760             } else if (arguments.length === 3) {
42761               var startIndex = arguments[0];
42762               var endIndex = arguments[1];
42763               var startDepth$1 = arguments[2];
42764               var currDepth = startDepth$1;
42765               for (var i = startIndex; i < endIndex; i++) {
42766                 var nextDe = this$1._edgeList.get(i);
42767                 // const label = nextDe.getLabel()
42768                 nextDe.setEdgeDepths(Position.RIGHT, currDepth);
42769                 currDepth = nextDe.getDepth(Position.LEFT);
42770               }
42771               return currDepth
42772             }
42773           };
42774           DirectedEdgeStar.prototype.mergeSymLabels = function mergeSymLabels () {
42775             for (var it = this.iterator(); it.hasNext();) {
42776               var de = it.next();
42777               var label = de.getLabel();
42778               label.merge(de.getSym().getLabel());
42779             }
42780           };
42781           DirectedEdgeStar.prototype.linkMinimalDirectedEdges = function linkMinimalDirectedEdges (er) {
42782             var this$1 = this;
42783
42784             var firstOut = null;
42785             var incoming = null;
42786             var state = this._SCANNING_FOR_INCOMING;
42787             for (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {
42788               var nextOut = this$1._resultAreaEdgeList.get(i);
42789               var nextIn = nextOut.getSym();
42790               if (firstOut === null && nextOut.getEdgeRing() === er) { firstOut = nextOut; }
42791               switch (state) {
42792                 case this$1._SCANNING_FOR_INCOMING:
42793                   if (nextIn.getEdgeRing() !== er) { continue }
42794                   incoming = nextIn;
42795                   state = this$1._LINKING_TO_OUTGOING;
42796                   break
42797                 case this$1._LINKING_TO_OUTGOING:
42798                   if (nextOut.getEdgeRing() !== er) { continue }
42799                   incoming.setNextMin(nextOut);
42800                   state = this$1._SCANNING_FOR_INCOMING;
42801                   break
42802               }
42803             }
42804             if (state === this._LINKING_TO_OUTGOING) {
42805               Assert.isTrue(firstOut !== null, 'found null for first outgoing dirEdge');
42806               Assert.isTrue(firstOut.getEdgeRing() === er, 'unable to link last incoming dirEdge');
42807               incoming.setNextMin(firstOut);
42808             }
42809           };
42810           DirectedEdgeStar.prototype.getOutgoingDegree = function getOutgoingDegree () {
42811             if (arguments.length === 0) {
42812               var degree = 0;
42813               for (var it = this.iterator(); it.hasNext();) {
42814                 var de = it.next();
42815                 if (de.isInResult()) { degree++; }
42816               }
42817               return degree
42818             } else if (arguments.length === 1) {
42819               var er = arguments[0];
42820               var degree$1 = 0;
42821               for (var it$1 = this.iterator(); it$1.hasNext();) {
42822                 var de$1 = it$1.next();
42823                 if (de$1.getEdgeRing() === er) { degree$1++; }
42824               }
42825               return degree$1
42826             }
42827           };
42828           DirectedEdgeStar.prototype.getLabel = function getLabel () {
42829             return this._label
42830           };
42831           DirectedEdgeStar.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
42832             var startLoc = Location.NONE;
42833             for (var it = this.iterator(); it.hasNext();) {
42834               var nextOut = it.next();
42835               var nextIn = nextOut.getSym();
42836               if (!nextOut.isLineEdge()) {
42837                 if (nextOut.isInResult()) {
42838                   startLoc = Location.INTERIOR;
42839                   break
42840                 }
42841                 if (nextIn.isInResult()) {
42842                   startLoc = Location.EXTERIOR;
42843                   break
42844                 }
42845               }
42846             }
42847             if (startLoc === Location.NONE) { return null }
42848             var currLoc = startLoc;
42849             for (var it$1 = this.iterator(); it$1.hasNext();) {
42850               var nextOut$1 = it$1.next();
42851               var nextIn$1 = nextOut$1.getSym();
42852               if (nextOut$1.isLineEdge()) {
42853                 nextOut$1.getEdge().setCovered(currLoc === Location.INTERIOR);
42854               } else {
42855                 if (nextOut$1.isInResult()) { currLoc = Location.EXTERIOR; }
42856                 if (nextIn$1.isInResult()) { currLoc = Location.INTERIOR; }
42857               }
42858             }
42859           };
42860           DirectedEdgeStar.prototype.computeLabelling = function computeLabelling (geom) {
42861             var this$1 = this;
42862
42863             EdgeEndStar$$1.prototype.computeLabelling.call(this, geom);
42864             this._label = new Label(Location.NONE);
42865             for (var it = this.iterator(); it.hasNext();) {
42866               var ee = it.next();
42867               var e = ee.getEdge();
42868               var eLabel = e.getLabel();
42869               for (var i = 0; i < 2; i++) {
42870                 var eLoc = eLabel.getLocation(i);
42871                 if (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) { this$1._label.setLocation(i, Location.INTERIOR); }
42872               }
42873             }
42874           };
42875           DirectedEdgeStar.prototype.interfaces_ = function interfaces_ () {
42876             return []
42877           };
42878           DirectedEdgeStar.prototype.getClass = function getClass () {
42879             return DirectedEdgeStar
42880           };
42881
42882           return DirectedEdgeStar;
42883         }(EdgeEndStar));
42884
42885         var OverlayNodeFactory = (function (NodeFactory$$1) {
42886           function OverlayNodeFactory () {
42887             NodeFactory$$1.apply(this, arguments);
42888           }
42889
42890           if ( NodeFactory$$1 ) { OverlayNodeFactory.__proto__ = NodeFactory$$1; }
42891           OverlayNodeFactory.prototype = Object.create( NodeFactory$$1 && NodeFactory$$1.prototype );
42892           OverlayNodeFactory.prototype.constructor = OverlayNodeFactory;
42893
42894           OverlayNodeFactory.prototype.createNode = function createNode (coord) {
42895             return new Node$2(coord, new DirectedEdgeStar())
42896           };
42897           OverlayNodeFactory.prototype.interfaces_ = function interfaces_ () {
42898             return []
42899           };
42900           OverlayNodeFactory.prototype.getClass = function getClass () {
42901             return OverlayNodeFactory
42902           };
42903
42904           return OverlayNodeFactory;
42905         }(NodeFactory));
42906
42907         var OrientedCoordinateArray = function OrientedCoordinateArray () {
42908           this._pts = null;
42909           this._orientation = null;
42910           var pts = arguments[0];
42911           this._pts = pts;
42912           this._orientation = OrientedCoordinateArray.orientation(pts);
42913         };
42914         OrientedCoordinateArray.prototype.compareTo = function compareTo (o1) {
42915           var oca = o1;
42916           var comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);
42917           return comp
42918         };
42919         OrientedCoordinateArray.prototype.interfaces_ = function interfaces_ () {
42920           return [Comparable]
42921         };
42922         OrientedCoordinateArray.prototype.getClass = function getClass () {
42923           return OrientedCoordinateArray
42924         };
42925         OrientedCoordinateArray.orientation = function orientation (pts) {
42926           return CoordinateArrays.increasingDirection(pts) === 1
42927         };
42928         OrientedCoordinateArray.compareOriented = function compareOriented (pts1, orientation1, pts2, orientation2) {
42929           var dir1 = orientation1 ? 1 : -1;
42930           var dir2 = orientation2 ? 1 : -1;
42931           var limit1 = orientation1 ? pts1.length : -1;
42932           var limit2 = orientation2 ? pts2.length : -1;
42933           var i1 = orientation1 ? 0 : pts1.length - 1;
42934           var i2 = orientation2 ? 0 : pts2.length - 1;
42935           // const comp = 0
42936           while (true) {
42937             var compPt = pts1[i1].compareTo(pts2[i2]);
42938             if (compPt !== 0) { return compPt }
42939             i1 += dir1;
42940             i2 += dir2;
42941             var done1 = i1 === limit1;
42942             var done2 = i2 === limit2;
42943             if (done1 && !done2) { return -1 }
42944             if (!done1 && done2) { return 1 }
42945             if (done1 && done2) { return 0 }
42946           }
42947         };
42948
42949         var EdgeList = function EdgeList () {
42950           this._edges = new ArrayList();
42951           this._ocaMap = new TreeMap();
42952         };
42953         EdgeList.prototype.print = function print (out) {
42954             var this$1 = this;
42955
42956           out.print('MULTILINESTRING ( ');
42957           for (var j = 0; j < this._edges.size(); j++) {
42958             var e = this$1._edges.get(j);
42959             if (j > 0) { out.print(','); }
42960             out.print('(');
42961             var pts = e.getCoordinates();
42962             for (var i = 0; i < pts.length; i++) {
42963               if (i > 0) { out.print(','); }
42964               out.print(pts[i].x + ' ' + pts[i].y);
42965             }
42966             out.println(')');
42967           }
42968           out.print(')  ');
42969         };
42970         EdgeList.prototype.addAll = function addAll (edgeColl) {
42971             var this$1 = this;
42972
42973           for (var i = edgeColl.iterator(); i.hasNext();) {
42974             this$1.add(i.next());
42975           }
42976         };
42977         EdgeList.prototype.findEdgeIndex = function findEdgeIndex (e) {
42978             var this$1 = this;
42979
42980           for (var i = 0; i < this._edges.size(); i++) {
42981             if (this$1._edges.get(i).equals(e)) { return i }
42982           }
42983           return -1
42984         };
42985         EdgeList.prototype.iterator = function iterator () {
42986           return this._edges.iterator()
42987         };
42988         EdgeList.prototype.getEdges = function getEdges () {
42989           return this._edges
42990         };
42991         EdgeList.prototype.get = function get (i) {
42992           return this._edges.get(i)
42993         };
42994         EdgeList.prototype.findEqualEdge = function findEqualEdge (e) {
42995           var oca = new OrientedCoordinateArray(e.getCoordinates());
42996           var matchEdge = this._ocaMap.get(oca);
42997           return matchEdge
42998         };
42999         EdgeList.prototype.add = function add (e) {
43000           this._edges.add(e);
43001           var oca = new OrientedCoordinateArray(e.getCoordinates());
43002           this._ocaMap.put(oca, e);
43003         };
43004         EdgeList.prototype.interfaces_ = function interfaces_ () {
43005           return []
43006         };
43007         EdgeList.prototype.getClass = function getClass () {
43008           return EdgeList
43009         };
43010
43011         var SegmentIntersector = function SegmentIntersector () {};
43012
43013         SegmentIntersector.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {};
43014         SegmentIntersector.prototype.isDone = function isDone () {};
43015         SegmentIntersector.prototype.interfaces_ = function interfaces_ () {
43016           return []
43017         };
43018         SegmentIntersector.prototype.getClass = function getClass () {
43019           return SegmentIntersector
43020         };
43021
43022         var IntersectionAdder = function IntersectionAdder () {
43023           this._hasIntersection = false;
43024           this._hasProper = false;
43025           this._hasProperInterior = false;
43026           this._hasInterior = false;
43027           this._properIntersectionPoint = null;
43028           this._li = null;
43029           this._isSelfIntersection = null;
43030           this.numIntersections = 0;
43031           this.numInteriorIntersections = 0;
43032           this.numProperIntersections = 0;
43033           this.numTests = 0;
43034           var li = arguments[0];
43035           this._li = li;
43036         };
43037         IntersectionAdder.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
43038           if (e0 === e1) {
43039             if (this._li.getIntersectionNum() === 1) {
43040               if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) { return true }
43041               if (e0.isClosed()) {
43042                 var maxSegIndex = e0.size() - 1;
43043                 if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
43044                     (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
43045                   return true
43046                 }
43047               }
43048             }
43049           }
43050           return false
43051         };
43052         IntersectionAdder.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
43053           return this._properIntersectionPoint
43054         };
43055         IntersectionAdder.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
43056           return this._hasProperInterior
43057         };
43058         IntersectionAdder.prototype.getLineIntersector = function getLineIntersector () {
43059           return this._li
43060         };
43061         IntersectionAdder.prototype.hasProperIntersection = function hasProperIntersection () {
43062           return this._hasProper
43063         };
43064         IntersectionAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
43065           if (e0 === e1 && segIndex0 === segIndex1) { return null }
43066           this.numTests++;
43067           var p00 = e0.getCoordinates()[segIndex0];
43068           var p01 = e0.getCoordinates()[segIndex0 + 1];
43069           var p10 = e1.getCoordinates()[segIndex1];
43070           var p11 = e1.getCoordinates()[segIndex1 + 1];
43071           this._li.computeIntersection(p00, p01, p10, p11);
43072           if (this._li.hasIntersection()) {
43073             this.numIntersections++;
43074             if (this._li.isInteriorIntersection()) {
43075               this.numInteriorIntersections++;
43076               this._hasInterior = true;
43077             }
43078             if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
43079               this._hasIntersection = true;
43080               e0.addIntersections(this._li, segIndex0, 0);
43081               e1.addIntersections(this._li, segIndex1, 1);
43082               if (this._li.isProper()) {
43083                 this.numProperIntersections++;
43084                 this._hasProper = true;
43085                 this._hasProperInterior = true;
43086               }
43087             }
43088           }
43089         };
43090         IntersectionAdder.prototype.hasIntersection = function hasIntersection () {
43091           return this._hasIntersection
43092         };
43093         IntersectionAdder.prototype.isDone = function isDone () {
43094           return false
43095         };
43096         IntersectionAdder.prototype.hasInteriorIntersection = function hasInteriorIntersection () {
43097           return this._hasInterior
43098         };
43099         IntersectionAdder.prototype.interfaces_ = function interfaces_ () {
43100           return [SegmentIntersector]
43101         };
43102         IntersectionAdder.prototype.getClass = function getClass () {
43103           return IntersectionAdder
43104         };
43105         IntersectionAdder.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
43106           return Math.abs(i1 - i2) === 1
43107         };
43108
43109         var EdgeIntersection = function EdgeIntersection () {
43110           this.coord = null;
43111           this.segmentIndex = null;
43112           this.dist = null;
43113           var coord = arguments[0];
43114           var segmentIndex = arguments[1];
43115           var dist = arguments[2];
43116           this.coord = new Coordinate(coord);
43117           this.segmentIndex = segmentIndex;
43118           this.dist = dist;
43119         };
43120         EdgeIntersection.prototype.getSegmentIndex = function getSegmentIndex () {
43121           return this.segmentIndex
43122         };
43123         EdgeIntersection.prototype.getCoordinate = function getCoordinate () {
43124           return this.coord
43125         };
43126         EdgeIntersection.prototype.print = function print (out) {
43127           out.print(this.coord);
43128           out.print(' seg # = ' + this.segmentIndex);
43129           out.println(' dist = ' + this.dist);
43130         };
43131         EdgeIntersection.prototype.compareTo = function compareTo (obj) {
43132           var other = obj;
43133           return this.compare(other.segmentIndex, other.dist)
43134         };
43135         EdgeIntersection.prototype.isEndPoint = function isEndPoint (maxSegmentIndex) {
43136           if (this.segmentIndex === 0 && this.dist === 0.0) { return true }
43137           if (this.segmentIndex === maxSegmentIndex) { return true }
43138           return false
43139         };
43140         EdgeIntersection.prototype.toString = function toString () {
43141           return this.coord + ' seg # = ' + this.segmentIndex + ' dist = ' + this.dist
43142         };
43143         EdgeIntersection.prototype.getDistance = function getDistance () {
43144           return this.dist
43145         };
43146         EdgeIntersection.prototype.compare = function compare (segmentIndex, dist) {
43147           if (this.segmentIndex < segmentIndex) { return -1 }
43148           if (this.segmentIndex > segmentIndex) { return 1 }
43149           if (this.dist < dist) { return -1 }
43150           if (this.dist > dist) { return 1 }
43151           return 0
43152         };
43153         EdgeIntersection.prototype.interfaces_ = function interfaces_ () {
43154           return [Comparable]
43155         };
43156         EdgeIntersection.prototype.getClass = function getClass () {
43157           return EdgeIntersection
43158         };
43159
43160         var EdgeIntersectionList = function EdgeIntersectionList () {
43161           this._nodeMap = new TreeMap();
43162           this.edge = null;
43163           var edge = arguments[0];
43164           this.edge = edge;
43165         };
43166         EdgeIntersectionList.prototype.print = function print (out) {
43167           out.println('Intersections:');
43168           for (var it = this.iterator(); it.hasNext();) {
43169             var ei = it.next();
43170             ei.print(out);
43171           }
43172         };
43173         EdgeIntersectionList.prototype.iterator = function iterator () {
43174           return this._nodeMap.values().iterator()
43175         };
43176         EdgeIntersectionList.prototype.addSplitEdges = function addSplitEdges (edgeList) {
43177             var this$1 = this;
43178
43179           this.addEndpoints();
43180           var it = this.iterator();
43181           var eiPrev = it.next();
43182           while (it.hasNext()) {
43183             var ei = it.next();
43184             var newEdge = this$1.createSplitEdge(eiPrev, ei);
43185             edgeList.add(newEdge);
43186             eiPrev = ei;
43187           }
43188         };
43189         EdgeIntersectionList.prototype.addEndpoints = function addEndpoints () {
43190           var maxSegIndex = this.edge.pts.length - 1;
43191           this.add(this.edge.pts[0], 0, 0.0);
43192           this.add(this.edge.pts[maxSegIndex], maxSegIndex, 0.0);
43193         };
43194         EdgeIntersectionList.prototype.createSplitEdge = function createSplitEdge (ei0, ei1) {
43195             var this$1 = this;
43196
43197           var npts = ei1.segmentIndex - ei0.segmentIndex + 2;
43198           var lastSegStartPt = this.edge.pts[ei1.segmentIndex];
43199           var useIntPt1 = ei1.dist > 0.0 || !ei1.coord.equals2D(lastSegStartPt);
43200           if (!useIntPt1) {
43201             npts--;
43202           }
43203           var pts = new Array(npts).fill(null);
43204           var ipt = 0;
43205           pts[ipt++] = new Coordinate(ei0.coord);
43206           for (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {
43207             pts[ipt++] = this$1.edge.pts[i];
43208           }
43209           if (useIntPt1) { pts[ipt] = ei1.coord; }
43210           return new Edge(pts, new Label(this.edge._label))
43211         };
43212         EdgeIntersectionList.prototype.add = function add (intPt, segmentIndex, dist) {
43213           var eiNew = new EdgeIntersection(intPt, segmentIndex, dist);
43214           var ei = this._nodeMap.get(eiNew);
43215           if (ei !== null) {
43216             return ei
43217           }
43218           this._nodeMap.put(eiNew, eiNew);
43219           return eiNew
43220         };
43221         EdgeIntersectionList.prototype.isIntersection = function isIntersection (pt) {
43222           for (var it = this.iterator(); it.hasNext();) {
43223             var ei = it.next();
43224             if (ei.coord.equals(pt)) { return true }
43225           }
43226           return false
43227         };
43228         EdgeIntersectionList.prototype.interfaces_ = function interfaces_ () {
43229           return []
43230         };
43231         EdgeIntersectionList.prototype.getClass = function getClass () {
43232           return EdgeIntersectionList
43233         };
43234
43235         var MonotoneChainIndexer = function MonotoneChainIndexer () {};
43236
43237         MonotoneChainIndexer.prototype.getChainStartIndices = function getChainStartIndices (pts) {
43238             var this$1 = this;
43239
43240           var start = 0;
43241           var startIndexList = new ArrayList();
43242           startIndexList.add(new Integer(start));
43243           do {
43244             var last = this$1.findChainEnd(pts, start);
43245             startIndexList.add(new Integer(last));
43246             start = last;
43247           } while (start < pts.length - 1)
43248           var startIndex = MonotoneChainIndexer.toIntArray(startIndexList);
43249           return startIndex
43250         };
43251         MonotoneChainIndexer.prototype.findChainEnd = function findChainEnd (pts, start) {
43252           var chainQuad = Quadrant.quadrant(pts[start], pts[start + 1]);
43253           var last = start + 1;
43254           while (last < pts.length) {
43255             var quad = Quadrant.quadrant(pts[last - 1], pts[last]);
43256             if (quad !== chainQuad) { break }
43257             last++;
43258           }
43259           return last - 1
43260         };
43261         MonotoneChainIndexer.prototype.interfaces_ = function interfaces_ () {
43262           return []
43263         };
43264         MonotoneChainIndexer.prototype.getClass = function getClass () {
43265           return MonotoneChainIndexer
43266         };
43267         MonotoneChainIndexer.toIntArray = function toIntArray (list) {
43268           var array = new Array(list.size()).fill(null);
43269           for (var i = 0; i < array.length; i++) {
43270             array[i] = list.get(i).intValue();
43271           }
43272           return array
43273         };
43274
43275         var MonotoneChainEdge = function MonotoneChainEdge () {
43276           this.e = null;
43277           this.pts = null;
43278           this.startIndex = null;
43279           this.env1 = new Envelope();
43280           this.env2 = new Envelope();
43281           var e = arguments[0];
43282           this.e = e;
43283           this.pts = e.getCoordinates();
43284           var mcb = new MonotoneChainIndexer();
43285           this.startIndex = mcb.getChainStartIndices(this.pts);
43286         };
43287         MonotoneChainEdge.prototype.getCoordinates = function getCoordinates () {
43288           return this.pts
43289         };
43290         MonotoneChainEdge.prototype.getMaxX = function getMaxX (chainIndex) {
43291           var x1 = this.pts[this.startIndex[chainIndex]].x;
43292           var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
43293           return x1 > x2 ? x1 : x2
43294         };
43295         MonotoneChainEdge.prototype.getMinX = function getMinX (chainIndex) {
43296           var x1 = this.pts[this.startIndex[chainIndex]].x;
43297           var x2 = this.pts[this.startIndex[chainIndex + 1]].x;
43298           return x1 < x2 ? x1 : x2
43299         };
43300         MonotoneChainEdge.prototype.computeIntersectsForChain = function computeIntersectsForChain () {
43301           if (arguments.length === 4) {
43302             var chainIndex0 = arguments[0];
43303             var mce = arguments[1];
43304             var chainIndex1 = arguments[2];
43305             var si = arguments[3];
43306             this.computeIntersectsForChain(this.startIndex[chainIndex0], this.startIndex[chainIndex0 + 1], mce, mce.startIndex[chainIndex1], mce.startIndex[chainIndex1 + 1], si);
43307           } else if (arguments.length === 6) {
43308             var start0 = arguments[0];
43309             var end0 = arguments[1];
43310             var mce$1 = arguments[2];
43311             var start1 = arguments[3];
43312             var end1 = arguments[4];
43313             var ei = arguments[5];
43314             var p00 = this.pts[start0];
43315             var p01 = this.pts[end0];
43316             var p10 = mce$1.pts[start1];
43317             var p11 = mce$1.pts[end1];
43318             if (end0 - start0 === 1 && end1 - start1 === 1) {
43319               ei.addIntersections(this.e, start0, mce$1.e, start1);
43320               return null
43321             }
43322             this.env1.init(p00, p01);
43323             this.env2.init(p10, p11);
43324             if (!this.env1.intersects(this.env2)) { return null }
43325             var mid0 = Math.trunc((start0 + end0) / 2);
43326             var mid1 = Math.trunc((start1 + end1) / 2);
43327             if (start0 < mid0) {
43328               if (start1 < mid1) { this.computeIntersectsForChain(start0, mid0, mce$1, start1, mid1, ei); }
43329               if (mid1 < end1) { this.computeIntersectsForChain(start0, mid0, mce$1, mid1, end1, ei); }
43330             }
43331             if (mid0 < end0) {
43332               if (start1 < mid1) { this.computeIntersectsForChain(mid0, end0, mce$1, start1, mid1, ei); }
43333               if (mid1 < end1) { this.computeIntersectsForChain(mid0, end0, mce$1, mid1, end1, ei); }
43334             }
43335           }
43336         };
43337         MonotoneChainEdge.prototype.getStartIndexes = function getStartIndexes () {
43338           return this.startIndex
43339         };
43340         MonotoneChainEdge.prototype.computeIntersects = function computeIntersects (mce, si) {
43341             var this$1 = this;
43342
43343           for (var i = 0; i < this.startIndex.length - 1; i++) {
43344             for (var j = 0; j < mce.startIndex.length - 1; j++) {
43345               this$1.computeIntersectsForChain(i, mce, j, si);
43346             }
43347           }
43348         };
43349         MonotoneChainEdge.prototype.interfaces_ = function interfaces_ () {
43350           return []
43351         };
43352         MonotoneChainEdge.prototype.getClass = function getClass () {
43353           return MonotoneChainEdge
43354         };
43355
43356         var Depth = function Depth () {
43357           var this$1 = this;
43358
43359           this._depth = Array(2).fill().map(function () { return Array(3); });
43360           for (var i = 0; i < 2; i++) {
43361             for (var j = 0; j < 3; j++) {
43362               this$1._depth[i][j] = Depth.NULL_VALUE;
43363             }
43364           }
43365         };
43366
43367         var staticAccessors$31 = { NULL_VALUE: { configurable: true } };
43368         Depth.prototype.getDepth = function getDepth (geomIndex, posIndex) {
43369           return this._depth[geomIndex][posIndex]
43370         };
43371         Depth.prototype.setDepth = function setDepth (geomIndex, posIndex, depthValue) {
43372           this._depth[geomIndex][posIndex] = depthValue;
43373         };
43374         Depth.prototype.isNull = function isNull () {
43375             var this$1 = this;
43376
43377           if (arguments.length === 0) {
43378             for (var i = 0; i < 2; i++) {
43379               for (var j = 0; j < 3; j++) {
43380                 if (this$1._depth[i][j] !== Depth.NULL_VALUE) { return false }
43381               }
43382             }
43383             return true
43384           } else if (arguments.length === 1) {
43385             var geomIndex = arguments[0];
43386             return this._depth[geomIndex][1] === Depth.NULL_VALUE
43387           } else if (arguments.length === 2) {
43388             var geomIndex$1 = arguments[0];
43389             var posIndex = arguments[1];
43390             return this._depth[geomIndex$1][posIndex] === Depth.NULL_VALUE
43391           }
43392         };
43393         Depth.prototype.normalize = function normalize () {
43394             var this$1 = this;
43395
43396           for (var i = 0; i < 2; i++) {
43397             if (!this$1.isNull(i)) {
43398               var minDepth = this$1._depth[i][1];
43399               if (this$1._depth[i][2] < minDepth) { minDepth = this$1._depth[i][2]; }
43400               if (minDepth < 0) { minDepth = 0; }
43401               for (var j = 1; j < 3; j++) {
43402                 var newValue = 0;
43403                 if (this$1._depth[i][j] > minDepth) { newValue = 1; }
43404                 this$1._depth[i][j] = newValue;
43405               }
43406             }
43407           }
43408         };
43409         Depth.prototype.getDelta = function getDelta (geomIndex) {
43410           return this._depth[geomIndex][Position.RIGHT] - this._depth[geomIndex][Position.LEFT]
43411         };
43412         Depth.prototype.getLocation = function getLocation (geomIndex, posIndex) {
43413           if (this._depth[geomIndex][posIndex] <= 0) { return Location.EXTERIOR }
43414           return Location.INTERIOR
43415         };
43416         Depth.prototype.toString = function toString () {
43417           return 'A: ' + this._depth[0][1] + ',' + this._depth[0][2] + ' B: ' + this._depth[1][1] + ',' + this._depth[1][2]
43418         };
43419         Depth.prototype.add = function add () {
43420             var this$1 = this;
43421
43422           if (arguments.length === 1) {
43423             var lbl = arguments[0];
43424             for (var i = 0; i < 2; i++) {
43425               for (var j = 1; j < 3; j++) {
43426                 var loc = lbl.getLocation(i, j);
43427                 if (loc === Location.EXTERIOR || loc === Location.INTERIOR) {
43428                   if (this$1.isNull(i, j)) {
43429                     this$1._depth[i][j] = Depth.depthAtLocation(loc);
43430                   } else { this$1._depth[i][j] += Depth.depthAtLocation(loc); }
43431                 }
43432               }
43433             }
43434           } else if (arguments.length === 3) {
43435             var geomIndex = arguments[0];
43436             var posIndex = arguments[1];
43437             var location = arguments[2];
43438             if (location === Location.INTERIOR) { this._depth[geomIndex][posIndex]++; }
43439           }
43440         };
43441         Depth.prototype.interfaces_ = function interfaces_ () {
43442           return []
43443         };
43444         Depth.prototype.getClass = function getClass () {
43445           return Depth
43446         };
43447         Depth.depthAtLocation = function depthAtLocation (location) {
43448           if (location === Location.EXTERIOR) { return 0 }
43449           if (location === Location.INTERIOR) { return 1 }
43450           return Depth.NULL_VALUE
43451         };
43452         staticAccessors$31.NULL_VALUE.get = function () { return -1 };
43453
43454         Object.defineProperties( Depth, staticAccessors$31 );
43455
43456         var Edge = (function (GraphComponent$$1) {
43457           function Edge () {
43458             GraphComponent$$1.call(this);
43459             this.pts = null;
43460             this._env = null;
43461             this.eiList = new EdgeIntersectionList(this);
43462             this._name = null;
43463             this._mce = null;
43464             this._isIsolated = true;
43465             this._depth = new Depth();
43466             this._depthDelta = 0;
43467             if (arguments.length === 1) {
43468               var pts = arguments[0];
43469               Edge.call(this, pts, null);
43470             } else if (arguments.length === 2) {
43471               var pts$1 = arguments[0];
43472               var label = arguments[1];
43473               this.pts = pts$1;
43474               this._label = label;
43475             }
43476           }
43477
43478           if ( GraphComponent$$1 ) { Edge.__proto__ = GraphComponent$$1; }
43479           Edge.prototype = Object.create( GraphComponent$$1 && GraphComponent$$1.prototype );
43480           Edge.prototype.constructor = Edge;
43481           Edge.prototype.getDepth = function getDepth () {
43482             return this._depth
43483           };
43484           Edge.prototype.getCollapsedEdge = function getCollapsedEdge () {
43485             var newPts = new Array(2).fill(null);
43486             newPts[0] = this.pts[0];
43487             newPts[1] = this.pts[1];
43488             var newe = new Edge(newPts, Label.toLineLabel(this._label));
43489             return newe
43490           };
43491           Edge.prototype.isIsolated = function isIsolated () {
43492             return this._isIsolated
43493           };
43494           Edge.prototype.getCoordinates = function getCoordinates () {
43495             return this.pts
43496           };
43497           Edge.prototype.setIsolated = function setIsolated (isIsolated) {
43498             this._isIsolated = isIsolated;
43499           };
43500           Edge.prototype.setName = function setName (name) {
43501             this._name = name;
43502           };
43503           Edge.prototype.equals = function equals (o) {
43504             var this$1 = this;
43505
43506             if (!(o instanceof Edge)) { return false }
43507             var e = o;
43508             if (this.pts.length !== e.pts.length) { return false }
43509             var isEqualForward = true;
43510             var isEqualReverse = true;
43511             var iRev = this.pts.length;
43512             for (var i = 0; i < this.pts.length; i++) {
43513               if (!this$1.pts[i].equals2D(e.pts[i])) {
43514                 isEqualForward = false;
43515               }
43516               if (!this$1.pts[i].equals2D(e.pts[--iRev])) {
43517                 isEqualReverse = false;
43518               }
43519               if (!isEqualForward && !isEqualReverse) { return false }
43520             }
43521             return true
43522           };
43523           Edge.prototype.getCoordinate = function getCoordinate () {
43524             if (arguments.length === 0) {
43525               if (this.pts.length > 0) { return this.pts[0] }
43526               return null
43527             } else if (arguments.length === 1) {
43528               var i = arguments[0];
43529               return this.pts[i]
43530             }
43531           };
43532           Edge.prototype.print = function print (out) {
43533             var this$1 = this;
43534
43535             out.print('edge ' + this._name + ': ');
43536             out.print('LINESTRING (');
43537             for (var i = 0; i < this.pts.length; i++) {
43538               if (i > 0) { out.print(','); }
43539               out.print(this$1.pts[i].x + ' ' + this$1.pts[i].y);
43540             }
43541             out.print(')  ' + this._label + ' ' + this._depthDelta);
43542           };
43543           Edge.prototype.computeIM = function computeIM (im) {
43544             Edge.updateIM(this._label, im);
43545           };
43546           Edge.prototype.isCollapsed = function isCollapsed () {
43547             if (!this._label.isArea()) { return false }
43548             if (this.pts.length !== 3) { return false }
43549             if (this.pts[0].equals(this.pts[2])) { return true }
43550             return false
43551           };
43552           Edge.prototype.isClosed = function isClosed () {
43553             return this.pts[0].equals(this.pts[this.pts.length - 1])
43554           };
43555           Edge.prototype.getMaximumSegmentIndex = function getMaximumSegmentIndex () {
43556             return this.pts.length - 1
43557           };
43558           Edge.prototype.getDepthDelta = function getDepthDelta () {
43559             return this._depthDelta
43560           };
43561           Edge.prototype.getNumPoints = function getNumPoints () {
43562             return this.pts.length
43563           };
43564           Edge.prototype.printReverse = function printReverse (out) {
43565             var this$1 = this;
43566
43567             out.print('edge ' + this._name + ': ');
43568             for (var i = this.pts.length - 1; i >= 0; i--) {
43569               out.print(this$1.pts[i] + ' ');
43570             }
43571             out.println('');
43572           };
43573           Edge.prototype.getMonotoneChainEdge = function getMonotoneChainEdge () {
43574             if (this._mce === null) { this._mce = new MonotoneChainEdge(this); }
43575             return this._mce
43576           };
43577           Edge.prototype.getEnvelope = function getEnvelope () {
43578             var this$1 = this;
43579
43580             if (this._env === null) {
43581               this._env = new Envelope();
43582               for (var i = 0; i < this.pts.length; i++) {
43583                 this$1._env.expandToInclude(this$1.pts[i]);
43584               }
43585             }
43586             return this._env
43587           };
43588           Edge.prototype.addIntersection = function addIntersection (li, segmentIndex, geomIndex, intIndex) {
43589             var intPt = new Coordinate(li.getIntersection(intIndex));
43590             var normalizedSegmentIndex = segmentIndex;
43591             var dist = li.getEdgeDistance(geomIndex, intIndex);
43592             var nextSegIndex = normalizedSegmentIndex + 1;
43593             if (nextSegIndex < this.pts.length) {
43594               var nextPt = this.pts[nextSegIndex];
43595               if (intPt.equals2D(nextPt)) {
43596                 normalizedSegmentIndex = nextSegIndex;
43597                 dist = 0.0;
43598               }
43599             }
43600             this.eiList.add(intPt, normalizedSegmentIndex, dist);
43601           };
43602           Edge.prototype.toString = function toString () {
43603             var this$1 = this;
43604
43605             var buf = new StringBuffer();
43606             buf.append('edge ' + this._name + ': ');
43607             buf.append('LINESTRING (');
43608             for (var i = 0; i < this.pts.length; i++) {
43609               if (i > 0) { buf.append(','); }
43610               buf.append(this$1.pts[i].x + ' ' + this$1.pts[i].y);
43611             }
43612             buf.append(')  ' + this._label + ' ' + this._depthDelta);
43613             return buf.toString()
43614           };
43615           Edge.prototype.isPointwiseEqual = function isPointwiseEqual (e) {
43616             var this$1 = this;
43617
43618             if (this.pts.length !== e.pts.length) { return false }
43619             for (var i = 0; i < this.pts.length; i++) {
43620               if (!this$1.pts[i].equals2D(e.pts[i])) {
43621                 return false
43622               }
43623             }
43624             return true
43625           };
43626           Edge.prototype.setDepthDelta = function setDepthDelta (depthDelta) {
43627             this._depthDelta = depthDelta;
43628           };
43629           Edge.prototype.getEdgeIntersectionList = function getEdgeIntersectionList () {
43630             return this.eiList
43631           };
43632           Edge.prototype.addIntersections = function addIntersections (li, segmentIndex, geomIndex) {
43633             var this$1 = this;
43634
43635             for (var i = 0; i < li.getIntersectionNum(); i++) {
43636               this$1.addIntersection(li, segmentIndex, geomIndex, i);
43637             }
43638           };
43639           Edge.prototype.interfaces_ = function interfaces_ () {
43640             return []
43641           };
43642           Edge.prototype.getClass = function getClass () {
43643             return Edge
43644           };
43645           Edge.updateIM = function updateIM () {
43646             if (arguments.length === 2) {
43647               var label = arguments[0];
43648               var im = arguments[1];
43649               im.setAtLeastIfValid(label.getLocation(0, Position.ON), label.getLocation(1, Position.ON), 1);
43650               if (label.isArea()) {
43651                 im.setAtLeastIfValid(label.getLocation(0, Position.LEFT), label.getLocation(1, Position.LEFT), 2);
43652                 im.setAtLeastIfValid(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), 2);
43653               }
43654             } else { return GraphComponent$$1.prototype.updateIM.apply(this, arguments) }
43655           };
43656
43657           return Edge;
43658         }(GraphComponent));
43659
43660         var BufferBuilder = function BufferBuilder (bufParams) {
43661           this._workingPrecisionModel = null;
43662           this._workingNoder = null;
43663           this._geomFact = null;
43664           this._graph = null;
43665           this._edgeList = new EdgeList();
43666           this._bufParams = bufParams || null;
43667         };
43668         BufferBuilder.prototype.setWorkingPrecisionModel = function setWorkingPrecisionModel (pm) {
43669           this._workingPrecisionModel = pm;
43670         };
43671         BufferBuilder.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
43672           var existingEdge = this._edgeList.findEqualEdge(e);
43673           if (existingEdge !== null) {
43674             var existingLabel = existingEdge.getLabel();
43675             var labelToMerge = e.getLabel();
43676             if (!existingEdge.isPointwiseEqual(e)) {
43677               labelToMerge = new Label(e.getLabel());
43678               labelToMerge.flip();
43679             }
43680             existingLabel.merge(labelToMerge);
43681             var mergeDelta = BufferBuilder.depthDelta(labelToMerge);
43682             var existingDelta = existingEdge.getDepthDelta();
43683             var newDelta = existingDelta + mergeDelta;
43684             existingEdge.setDepthDelta(newDelta);
43685           } else {
43686             this._edgeList.add(e);
43687             e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));
43688           }
43689         };
43690         BufferBuilder.prototype.buildSubgraphs = function buildSubgraphs (subgraphList, polyBuilder) {
43691           var processedGraphs = new ArrayList();
43692           for (var i = subgraphList.iterator(); i.hasNext();) {
43693             var subgraph = i.next();
43694             var p = subgraph.getRightmostCoordinate();
43695             var locater = new SubgraphDepthLocater(processedGraphs);
43696             var outsideDepth = locater.getDepth(p);
43697             subgraph.computeDepth(outsideDepth);
43698             subgraph.findResultEdges();
43699             processedGraphs.add(subgraph);
43700             polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());
43701           }
43702         };
43703         BufferBuilder.prototype.createSubgraphs = function createSubgraphs (graph) {
43704           var subgraphList = new ArrayList();
43705           for (var i = graph.getNodes().iterator(); i.hasNext();) {
43706             var node = i.next();
43707             if (!node.isVisited()) {
43708               var subgraph = new BufferSubgraph();
43709               subgraph.create(node);
43710               subgraphList.add(subgraph);
43711             }
43712           }
43713           Collections.sort(subgraphList, Collections.reverseOrder());
43714           return subgraphList
43715         };
43716         BufferBuilder.prototype.createEmptyResultGeometry = function createEmptyResultGeometry () {
43717           var emptyGeom = this._geomFact.createPolygon();
43718           return emptyGeom
43719         };
43720         BufferBuilder.prototype.getNoder = function getNoder (precisionModel) {
43721           if (this._workingNoder !== null) { return this._workingNoder }
43722           var noder = new MCIndexNoder();
43723           var li = new RobustLineIntersector();
43724           li.setPrecisionModel(precisionModel);
43725           noder.setSegmentIntersector(new IntersectionAdder(li));
43726           return noder
43727         };
43728         BufferBuilder.prototype.buffer = function buffer (g, distance) {
43729           var precisionModel = this._workingPrecisionModel;
43730           if (precisionModel === null) { precisionModel = g.getPrecisionModel(); }
43731           this._geomFact = g.getFactory();
43732           var curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);
43733           var curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);
43734           var bufferSegStrList = curveSetBuilder.getCurves();
43735           if (bufferSegStrList.size() <= 0) {
43736             return this.createEmptyResultGeometry()
43737           }
43738           this.computeNodedEdges(bufferSegStrList, precisionModel);
43739           this._graph = new PlanarGraph(new OverlayNodeFactory());
43740           this._graph.addEdges(this._edgeList.getEdges());
43741           var subgraphList = this.createSubgraphs(this._graph);
43742           var polyBuilder = new PolygonBuilder(this._geomFact);
43743           this.buildSubgraphs(subgraphList, polyBuilder);
43744           var resultPolyList = polyBuilder.getPolygons();
43745           if (resultPolyList.size() <= 0) {
43746             return this.createEmptyResultGeometry()
43747           }
43748           var resultGeom = this._geomFact.buildGeometry(resultPolyList);
43749           return resultGeom
43750         };
43751         BufferBuilder.prototype.computeNodedEdges = function computeNodedEdges (bufferSegStrList, precisionModel) {
43752             var this$1 = this;
43753
43754           var noder = this.getNoder(precisionModel);
43755           noder.computeNodes(bufferSegStrList);
43756           var nodedSegStrings = noder.getNodedSubstrings();
43757           for (var i = nodedSegStrings.iterator(); i.hasNext();) {
43758             var segStr = i.next();
43759             var pts = segStr.getCoordinates();
43760             if (pts.length === 2 && pts[0].equals2D(pts[1])) { continue }
43761             var oldLabel = segStr.getData();
43762             var edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));
43763             this$1.insertUniqueEdge(edge);
43764           }
43765         };
43766         BufferBuilder.prototype.setNoder = function setNoder (noder) {
43767           this._workingNoder = noder;
43768         };
43769         BufferBuilder.prototype.interfaces_ = function interfaces_ () {
43770           return []
43771         };
43772         BufferBuilder.prototype.getClass = function getClass () {
43773           return BufferBuilder
43774         };
43775         BufferBuilder.depthDelta = function depthDelta (label) {
43776           var lLoc = label.getLocation(0, Position.LEFT);
43777           var rLoc = label.getLocation(0, Position.RIGHT);
43778           if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) { return 1; } else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) { return -1 }
43779           return 0
43780         };
43781         BufferBuilder.convertSegStrings = function convertSegStrings (it) {
43782           var fact = new GeometryFactory();
43783           var lines = new ArrayList();
43784           while (it.hasNext()) {
43785             var ss = it.next();
43786             var line = fact.createLineString(ss.getCoordinates());
43787             lines.add(line);
43788           }
43789           return fact.buildGeometry(lines)
43790         };
43791
43792         var ScaledNoder = function ScaledNoder () {
43793           this._noder = null;
43794           this._scaleFactor = null;
43795           this._offsetX = null;
43796           this._offsetY = null;
43797           this._isScaled = false;
43798           if (arguments.length === 2) {
43799             var noder = arguments[0];
43800             var scaleFactor = arguments[1];
43801             this._noder = noder;
43802             this._scaleFactor = scaleFactor;
43803             this._offsetX = 0.0;
43804             this._offsetY = 0.0;
43805             this._isScaled = !this.isIntegerPrecision();
43806           } else if (arguments.length === 4) {
43807             var noder$1 = arguments[0];
43808             var scaleFactor$1 = arguments[1];
43809             var offsetX = arguments[2];
43810             var offsetY = arguments[3];
43811             this._noder = noder$1;
43812             this._scaleFactor = scaleFactor$1;
43813             this._offsetX = offsetX;
43814             this._offsetY = offsetY;
43815             this._isScaled = !this.isIntegerPrecision();
43816           }
43817         };
43818         ScaledNoder.prototype.rescale = function rescale () {
43819             var this$1 = this;
43820
43821           if (hasInterface(arguments[0], Collection)) {
43822             var segStrings = arguments[0];
43823             for (var i = segStrings.iterator(); i.hasNext();) {
43824               var ss = i.next();
43825               this$1.rescale(ss.getCoordinates());
43826             }
43827           } else if (arguments[0] instanceof Array) {
43828             var pts = arguments[0];
43829             // let p0 = null
43830             // let p1 = null
43831             // if (pts.length === 2) {
43832             // p0 = new Coordinate(pts[0])
43833             // p1 = new Coordinate(pts[1])
43834             // }
43835             for (var i$1 = 0; i$1 < pts.length; i$1++) {
43836               pts[i$1].x = pts[i$1].x / this$1._scaleFactor + this$1._offsetX;
43837               pts[i$1].y = pts[i$1].y / this$1._scaleFactor + this$1._offsetY;
43838             }
43839             if (pts.length === 2 && pts[0].equals2D(pts[1])) {
43840               System.out.println(pts);
43841             }
43842           }
43843         };
43844         ScaledNoder.prototype.scale = function scale () {
43845             var this$1 = this;
43846
43847           if (hasInterface(arguments[0], Collection)) {
43848             var segStrings = arguments[0];
43849             var nodedSegmentStrings = new ArrayList();
43850             for (var i = segStrings.iterator(); i.hasNext();) {
43851               var ss = i.next();
43852               nodedSegmentStrings.add(new NodedSegmentString(this$1.scale(ss.getCoordinates()), ss.getData()));
43853             }
43854             return nodedSegmentStrings
43855           } else if (arguments[0] instanceof Array) {
43856             var pts = arguments[0];
43857             var roundPts = new Array(pts.length).fill(null);
43858             for (var i$1 = 0; i$1 < pts.length; i$1++) {
43859               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);
43860             }
43861             var roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);
43862             return roundPtsNoDup
43863           }
43864         };
43865         ScaledNoder.prototype.isIntegerPrecision = function isIntegerPrecision () {
43866           return this._scaleFactor === 1.0
43867         };
43868         ScaledNoder.prototype.getNodedSubstrings = function getNodedSubstrings () {
43869           var splitSS = this._noder.getNodedSubstrings();
43870           if (this._isScaled) { this.rescale(splitSS); }
43871           return splitSS
43872         };
43873         ScaledNoder.prototype.computeNodes = function computeNodes (inputSegStrings) {
43874           var intSegStrings = inputSegStrings;
43875           if (this._isScaled) { intSegStrings = this.scale(inputSegStrings); }
43876           this._noder.computeNodes(intSegStrings);
43877         };
43878         ScaledNoder.prototype.interfaces_ = function interfaces_ () {
43879           return [Noder]
43880         };
43881         ScaledNoder.prototype.getClass = function getClass () {
43882           return ScaledNoder
43883         };
43884
43885         var NodingValidator = function NodingValidator () {
43886           this._li = new RobustLineIntersector();
43887           this._segStrings = null;
43888           var segStrings = arguments[0];
43889           this._segStrings = segStrings;
43890         };
43891
43892         var staticAccessors$33 = { fact: { configurable: true } };
43893         NodingValidator.prototype.checkEndPtVertexIntersections = function checkEndPtVertexIntersections () {
43894             var this$1 = this;
43895
43896           if (arguments.length === 0) {
43897             for (var i = this._segStrings.iterator(); i.hasNext();) {
43898               var ss = i.next();
43899               var pts = ss.getCoordinates();
43900               this$1.checkEndPtVertexIntersections(pts[0], this$1._segStrings);
43901               this$1.checkEndPtVertexIntersections(pts[pts.length - 1], this$1._segStrings);
43902             }
43903           } else if (arguments.length === 2) {
43904             var testPt = arguments[0];
43905             var segStrings = arguments[1];
43906             for (var i$1 = segStrings.iterator(); i$1.hasNext();) {
43907               var ss$1 = i$1.next();
43908               var pts$1 = ss$1.getCoordinates();
43909               for (var j = 1; j < pts$1.length - 1; j++) {
43910                 if (pts$1[j].equals(testPt)) { throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt) }
43911               }
43912             }
43913           }
43914         };
43915         NodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
43916             var this$1 = this;
43917
43918           if (arguments.length === 0) {
43919             for (var i = this._segStrings.iterator(); i.hasNext();) {
43920               var ss0 = i.next();
43921               for (var j = this._segStrings.iterator(); j.hasNext();) {
43922                 var ss1 = j.next();
43923                 this$1.checkInteriorIntersections(ss0, ss1);
43924               }
43925             }
43926           } else if (arguments.length === 2) {
43927             var ss0$1 = arguments[0];
43928             var ss1$1 = arguments[1];
43929             var pts0 = ss0$1.getCoordinates();
43930             var pts1 = ss1$1.getCoordinates();
43931             for (var i0 = 0; i0 < pts0.length - 1; i0++) {
43932               for (var i1 = 0; i1 < pts1.length - 1; i1++) {
43933                 this$1.checkInteriorIntersections(ss0$1, i0, ss1$1, i1);
43934               }
43935             }
43936           } else if (arguments.length === 4) {
43937             var e0 = arguments[0];
43938             var segIndex0 = arguments[1];
43939             var e1 = arguments[2];
43940             var segIndex1 = arguments[3];
43941             if (e0 === e1 && segIndex0 === segIndex1) { return null }
43942             var p00 = e0.getCoordinates()[segIndex0];
43943             var p01 = e0.getCoordinates()[segIndex0 + 1];
43944             var p10 = e1.getCoordinates()[segIndex1];
43945             var p11 = e1.getCoordinates()[segIndex1 + 1];
43946             this._li.computeIntersection(p00, p01, p10, p11);
43947             if (this._li.hasIntersection()) {
43948               if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {
43949                 throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)
43950               }
43951             }
43952           }
43953         };
43954         NodingValidator.prototype.checkValid = function checkValid () {
43955           this.checkEndPtVertexIntersections();
43956           this.checkInteriorIntersections();
43957           this.checkCollapses();
43958         };
43959         NodingValidator.prototype.checkCollapses = function checkCollapses () {
43960             var this$1 = this;
43961
43962           if (arguments.length === 0) {
43963             for (var i = this._segStrings.iterator(); i.hasNext();) {
43964               var ss = i.next();
43965               this$1.checkCollapses(ss);
43966             }
43967           } else if (arguments.length === 1) {
43968             var ss$1 = arguments[0];
43969             var pts = ss$1.getCoordinates();
43970             for (var i$1 = 0; i$1 < pts.length - 2; i$1++) {
43971               this$1.checkCollapse(pts[i$1], pts[i$1 + 1], pts[i$1 + 2]);
43972             }
43973           }
43974         };
43975         NodingValidator.prototype.hasInteriorIntersection = function hasInteriorIntersection (li, p0, p1) {
43976           for (var i = 0; i < li.getIntersectionNum(); i++) {
43977             var intPt = li.getIntersection(i);
43978             if (!(intPt.equals(p0) || intPt.equals(p1))) { return true }
43979           }
43980           return false
43981         };
43982         NodingValidator.prototype.checkCollapse = function checkCollapse (p0, p1, p2) {
43983           if (p0.equals(p2)) { throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2])) }
43984         };
43985         NodingValidator.prototype.interfaces_ = function interfaces_ () {
43986           return []
43987         };
43988         NodingValidator.prototype.getClass = function getClass () {
43989           return NodingValidator
43990         };
43991         staticAccessors$33.fact.get = function () { return new GeometryFactory() };
43992
43993         Object.defineProperties( NodingValidator, staticAccessors$33 );
43994
43995         var HotPixel = function HotPixel () {
43996           this._li = null;
43997           this._pt = null;
43998           this._originalPt = null;
43999           this._ptScaled = null;
44000           this._p0Scaled = null;
44001           this._p1Scaled = null;
44002           this._scaleFactor = null;
44003           this._minx = null;
44004           this._maxx = null;
44005           this._miny = null;
44006           this._maxy = null;
44007           this._corner = new Array(4).fill(null);
44008           this._safeEnv = null;
44009           var pt = arguments[0];
44010           var scaleFactor = arguments[1];
44011           var li = arguments[2];
44012           this._originalPt = pt;
44013           this._pt = pt;
44014           this._scaleFactor = scaleFactor;
44015           this._li = li;
44016           if (scaleFactor <= 0) { throw new IllegalArgumentException('Scale factor must be non-zero') }
44017           if (scaleFactor !== 1.0) {
44018             this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));
44019             this._p0Scaled = new Coordinate();
44020             this._p1Scaled = new Coordinate();
44021           }
44022           this.initCorners(this._pt);
44023         };
44024
44025         var staticAccessors$34 = { SAFE_ENV_EXPANSION_FACTOR: { configurable: true } };
44026         HotPixel.prototype.intersectsScaled = function intersectsScaled (p0, p1) {
44027           var segMinx = Math.min(p0.x, p1.x);
44028           var segMaxx = Math.max(p0.x, p1.x);
44029           var segMiny = Math.min(p0.y, p1.y);
44030           var segMaxy = Math.max(p0.y, p1.y);
44031           var isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;
44032           if (isOutsidePixelEnv) { return false }
44033           var intersects = this.intersectsToleranceSquare(p0, p1);
44034           Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test');
44035           return intersects
44036         };
44037         HotPixel.prototype.initCorners = function initCorners (pt) {
44038           var tolerance = 0.5;
44039           this._minx = pt.x - tolerance;
44040           this._maxx = pt.x + tolerance;
44041           this._miny = pt.y - tolerance;
44042           this._maxy = pt.y + tolerance;
44043           this._corner[0] = new Coordinate(this._maxx, this._maxy);
44044           this._corner[1] = new Coordinate(this._minx, this._maxy);
44045           this._corner[2] = new Coordinate(this._minx, this._miny);
44046           this._corner[3] = new Coordinate(this._maxx, this._miny);
44047         };
44048         HotPixel.prototype.intersects = function intersects (p0, p1) {
44049           if (this._scaleFactor === 1.0) { return this.intersectsScaled(p0, p1) }
44050           this.copyScaled(p0, this._p0Scaled);
44051           this.copyScaled(p1, this._p1Scaled);
44052           return this.intersectsScaled(this._p0Scaled, this._p1Scaled)
44053         };
44054         HotPixel.prototype.scale = function scale (val) {
44055           return Math.round(val * this._scaleFactor)
44056         };
44057         HotPixel.prototype.getCoordinate = function getCoordinate () {
44058           return this._originalPt
44059         };
44060         HotPixel.prototype.copyScaled = function copyScaled (p, pScaled) {
44061           pScaled.x = this.scale(p.x);
44062           pScaled.y = this.scale(p.y);
44063         };
44064         HotPixel.prototype.getSafeEnvelope = function getSafeEnvelope () {
44065           if (this._safeEnv === null) {
44066             var safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;
44067             this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);
44068           }
44069           return this._safeEnv
44070         };
44071         HotPixel.prototype.intersectsPixelClosure = function intersectsPixelClosure (p0, p1) {
44072           this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
44073           if (this._li.hasIntersection()) { return true }
44074           this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
44075           if (this._li.hasIntersection()) { return true }
44076           this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
44077           if (this._li.hasIntersection()) { return true }
44078           this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
44079           if (this._li.hasIntersection()) { return true }
44080           return false
44081         };
44082         HotPixel.prototype.intersectsToleranceSquare = function intersectsToleranceSquare (p0, p1) {
44083           var intersectsLeft = false;
44084           var intersectsBottom = false;
44085           this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);
44086           if (this._li.isProper()) { return true }
44087           this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);
44088           if (this._li.isProper()) { return true }
44089           if (this._li.hasIntersection()) { intersectsLeft = true; }
44090           this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);
44091           if (this._li.isProper()) { return true }
44092           if (this._li.hasIntersection()) { intersectsBottom = true; }
44093           this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);
44094           if (this._li.isProper()) { return true }
44095           if (intersectsLeft && intersectsBottom) { return true }
44096           if (p0.equals(this._pt)) { return true }
44097           if (p1.equals(this._pt)) { return true }
44098           return false
44099         };
44100         HotPixel.prototype.addSnappedNode = function addSnappedNode (segStr, segIndex) {
44101           var p0 = segStr.getCoordinate(segIndex);
44102           var p1 = segStr.getCoordinate(segIndex + 1);
44103           if (this.intersects(p0, p1)) {
44104             segStr.addIntersection(this.getCoordinate(), segIndex);
44105             return true
44106           }
44107           return false
44108         };
44109         HotPixel.prototype.interfaces_ = function interfaces_ () {
44110           return []
44111         };
44112         HotPixel.prototype.getClass = function getClass () {
44113           return HotPixel
44114         };
44115         staticAccessors$34.SAFE_ENV_EXPANSION_FACTOR.get = function () { return 0.75 };
44116
44117         Object.defineProperties( HotPixel, staticAccessors$34 );
44118
44119         var MonotoneChainSelectAction = function MonotoneChainSelectAction () {
44120           this.tempEnv1 = new Envelope();
44121           this.selectedSegment = new LineSegment();
44122         };
44123         MonotoneChainSelectAction.prototype.select = function select () {
44124           if (arguments.length === 1) ; else if (arguments.length === 2) {
44125             var mc = arguments[0];
44126             var startIndex = arguments[1];
44127             mc.getLineSegment(startIndex, this.selectedSegment);
44128             this.select(this.selectedSegment);
44129           }
44130         };
44131         MonotoneChainSelectAction.prototype.interfaces_ = function interfaces_ () {
44132           return []
44133         };
44134         MonotoneChainSelectAction.prototype.getClass = function getClass () {
44135           return MonotoneChainSelectAction
44136         };
44137
44138         var MCIndexPointSnapper = function MCIndexPointSnapper () {
44139           this._index = null;
44140           var index = arguments[0];
44141           this._index = index;
44142         };
44143
44144         var staticAccessors$35 = { HotPixelSnapAction: { configurable: true } };
44145         MCIndexPointSnapper.prototype.snap = function snap () {
44146           if (arguments.length === 1) {
44147             var hotPixel = arguments[0];
44148             return this.snap(hotPixel, null, -1)
44149           } else if (arguments.length === 3) {
44150             var hotPixel$1 = arguments[0];
44151             var parentEdge = arguments[1];
44152             var hotPixelVertexIndex = arguments[2];
44153             var pixelEnv = hotPixel$1.getSafeEnvelope();
44154             var hotPixelSnapAction = new HotPixelSnapAction(hotPixel$1, parentEdge, hotPixelVertexIndex);
44155             this._index.query(pixelEnv, {
44156               interfaces_: function () {
44157                 return [ItemVisitor]
44158               },
44159               visitItem: function (item) {
44160                 var testChain = item;
44161                 testChain.select(pixelEnv, hotPixelSnapAction);
44162               }
44163             });
44164             return hotPixelSnapAction.isNodeAdded()
44165           }
44166         };
44167         MCIndexPointSnapper.prototype.interfaces_ = function interfaces_ () {
44168           return []
44169         };
44170         MCIndexPointSnapper.prototype.getClass = function getClass () {
44171           return MCIndexPointSnapper
44172         };
44173         staticAccessors$35.HotPixelSnapAction.get = function () { return HotPixelSnapAction };
44174
44175         Object.defineProperties( MCIndexPointSnapper, staticAccessors$35 );
44176
44177         var HotPixelSnapAction = (function (MonotoneChainSelectAction$$1) {
44178           function HotPixelSnapAction () {
44179             MonotoneChainSelectAction$$1.call(this);
44180             this._hotPixel = null;
44181             this._parentEdge = null;
44182             this._hotPixelVertexIndex = null;
44183             this._isNodeAdded = false;
44184             var hotPixel = arguments[0];
44185             var parentEdge = arguments[1];
44186             var hotPixelVertexIndex = arguments[2];
44187             this._hotPixel = hotPixel;
44188             this._parentEdge = parentEdge;
44189             this._hotPixelVertexIndex = hotPixelVertexIndex;
44190           }
44191
44192           if ( MonotoneChainSelectAction$$1 ) { HotPixelSnapAction.__proto__ = MonotoneChainSelectAction$$1; }
44193           HotPixelSnapAction.prototype = Object.create( MonotoneChainSelectAction$$1 && MonotoneChainSelectAction$$1.prototype );
44194           HotPixelSnapAction.prototype.constructor = HotPixelSnapAction;
44195           HotPixelSnapAction.prototype.isNodeAdded = function isNodeAdded () {
44196             return this._isNodeAdded
44197           };
44198           HotPixelSnapAction.prototype.select = function select () {
44199             if (arguments.length === 2) {
44200               var mc = arguments[0];
44201               var startIndex = arguments[1];
44202               var ss = mc.getContext();
44203               if (this._parentEdge !== null) {
44204                 if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) { return null }
44205               }
44206               this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);
44207             } else { return MonotoneChainSelectAction$$1.prototype.select.apply(this, arguments) }
44208           };
44209           HotPixelSnapAction.prototype.interfaces_ = function interfaces_ () {
44210             return []
44211           };
44212           HotPixelSnapAction.prototype.getClass = function getClass () {
44213             return HotPixelSnapAction
44214           };
44215
44216           return HotPixelSnapAction;
44217         }(MonotoneChainSelectAction));
44218
44219         var InteriorIntersectionFinderAdder = function InteriorIntersectionFinderAdder () {
44220           this._li = null;
44221           this._interiorIntersections = null;
44222           var li = arguments[0];
44223           this._li = li;
44224           this._interiorIntersections = new ArrayList();
44225         };
44226         InteriorIntersectionFinderAdder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
44227             var this$1 = this;
44228
44229           if (e0 === e1 && segIndex0 === segIndex1) { return null }
44230           var p00 = e0.getCoordinates()[segIndex0];
44231           var p01 = e0.getCoordinates()[segIndex0 + 1];
44232           var p10 = e1.getCoordinates()[segIndex1];
44233           var p11 = e1.getCoordinates()[segIndex1 + 1];
44234           this._li.computeIntersection(p00, p01, p10, p11);
44235           if (this._li.hasIntersection()) {
44236             if (this._li.isInteriorIntersection()) {
44237               for (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {
44238                 this$1._interiorIntersections.add(this$1._li.getIntersection(intIndex));
44239               }
44240               e0.addIntersections(this._li, segIndex0, 0);
44241               e1.addIntersections(this._li, segIndex1, 1);
44242             }
44243           }
44244         };
44245         InteriorIntersectionFinderAdder.prototype.isDone = function isDone () {
44246           return false
44247         };
44248         InteriorIntersectionFinderAdder.prototype.getInteriorIntersections = function getInteriorIntersections () {
44249           return this._interiorIntersections
44250         };
44251         InteriorIntersectionFinderAdder.prototype.interfaces_ = function interfaces_ () {
44252           return [SegmentIntersector]
44253         };
44254         InteriorIntersectionFinderAdder.prototype.getClass = function getClass () {
44255           return InteriorIntersectionFinderAdder
44256         };
44257
44258         var MCIndexSnapRounder = function MCIndexSnapRounder () {
44259           this._pm = null;
44260           this._li = null;
44261           this._scaleFactor = null;
44262           this._noder = null;
44263           this._pointSnapper = null;
44264           this._nodedSegStrings = null;
44265           var pm = arguments[0];
44266           this._pm = pm;
44267           this._li = new RobustLineIntersector();
44268           this._li.setPrecisionModel(pm);
44269           this._scaleFactor = pm.getScale();
44270         };
44271         MCIndexSnapRounder.prototype.checkCorrectness = function checkCorrectness (inputSegmentStrings) {
44272           var resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);
44273           var nv = new NodingValidator(resultSegStrings);
44274           try {
44275             nv.checkValid();
44276           } catch (ex) {
44277             if (ex instanceof Exception) {
44278               ex.printStackTrace();
44279             } else { throw ex }
44280           } finally {}
44281         };
44282         MCIndexSnapRounder.prototype.getNodedSubstrings = function getNodedSubstrings () {
44283           return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)
44284         };
44285         MCIndexSnapRounder.prototype.snapRound = function snapRound (segStrings, li) {
44286           var intersections = this.findInteriorIntersections(segStrings, li);
44287           this.computeIntersectionSnaps(intersections);
44288           this.computeVertexSnaps(segStrings);
44289         };
44290         MCIndexSnapRounder.prototype.findInteriorIntersections = function findInteriorIntersections (segStrings, li) {
44291           var intFinderAdder = new InteriorIntersectionFinderAdder(li);
44292           this._noder.setSegmentIntersector(intFinderAdder);
44293           this._noder.computeNodes(segStrings);
44294           return intFinderAdder.getInteriorIntersections()
44295         };
44296         MCIndexSnapRounder.prototype.computeVertexSnaps = function computeVertexSnaps () {
44297             var this$1 = this;
44298
44299           if (hasInterface(arguments[0], Collection)) {
44300             var edges = arguments[0];
44301             for (var i0 = edges.iterator(); i0.hasNext();) {
44302               var edge0 = i0.next();
44303               this$1.computeVertexSnaps(edge0);
44304             }
44305           } else if (arguments[0] instanceof NodedSegmentString) {
44306             var e = arguments[0];
44307             var pts0 = e.getCoordinates();
44308             for (var i = 0; i < pts0.length; i++) {
44309               var hotPixel = new HotPixel(pts0[i], this$1._scaleFactor, this$1._li);
44310               var isNodeAdded = this$1._pointSnapper.snap(hotPixel, e, i);
44311               if (isNodeAdded) {
44312                 e.addIntersection(pts0[i], i);
44313               }
44314             }
44315           }
44316         };
44317         MCIndexSnapRounder.prototype.computeNodes = function computeNodes (inputSegmentStrings) {
44318           this._nodedSegStrings = inputSegmentStrings;
44319           this._noder = new MCIndexNoder();
44320           this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());
44321           this.snapRound(inputSegmentStrings, this._li);
44322         };
44323         MCIndexSnapRounder.prototype.computeIntersectionSnaps = function computeIntersectionSnaps (snapPts) {
44324             var this$1 = this;
44325
44326           for (var it = snapPts.iterator(); it.hasNext();) {
44327             var snapPt = it.next();
44328             var hotPixel = new HotPixel(snapPt, this$1._scaleFactor, this$1._li);
44329             this$1._pointSnapper.snap(hotPixel);
44330           }
44331         };
44332         MCIndexSnapRounder.prototype.interfaces_ = function interfaces_ () {
44333           return [Noder]
44334         };
44335         MCIndexSnapRounder.prototype.getClass = function getClass () {
44336           return MCIndexSnapRounder
44337         };
44338
44339         var BufferOp = function BufferOp () {
44340           this._argGeom = null;
44341           this._distance = null;
44342           this._bufParams = new BufferParameters();
44343           this._resultGeometry = null;
44344           this._saveException = null;
44345           if (arguments.length === 1) {
44346             var g = arguments[0];
44347             this._argGeom = g;
44348           } else if (arguments.length === 2) {
44349             var g$1 = arguments[0];
44350             var bufParams = arguments[1];
44351             this._argGeom = g$1;
44352             this._bufParams = bufParams;
44353           }
44354         };
44355
44356         var staticAccessors$32 = { CAP_ROUND: { configurable: true },CAP_BUTT: { configurable: true },CAP_FLAT: { configurable: true },CAP_SQUARE: { configurable: true },MAX_PRECISION_DIGITS: { configurable: true } };
44357         BufferOp.prototype.bufferFixedPrecision = function bufferFixedPrecision (fixedPM) {
44358           var noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());
44359           var bufBuilder = new BufferBuilder(this._bufParams);
44360           bufBuilder.setWorkingPrecisionModel(fixedPM);
44361           bufBuilder.setNoder(noder);
44362           this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
44363         };
44364         BufferOp.prototype.bufferReducedPrecision = function bufferReducedPrecision () {
44365             var this$1 = this;
44366
44367           if (arguments.length === 0) {
44368             for (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {
44369               try {
44370                 this$1.bufferReducedPrecision(precDigits);
44371               } catch (ex) {
44372                 if (ex instanceof TopologyException) {
44373                   this$1._saveException = ex;
44374                 } else { throw ex }
44375               } finally {}
44376               if (this$1._resultGeometry !== null) { return null }
44377             }
44378             throw this._saveException
44379           } else if (arguments.length === 1) {
44380             var precisionDigits = arguments[0];
44381             var sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);
44382             var fixedPM = new PrecisionModel(sizeBasedScaleFactor);
44383             this.bufferFixedPrecision(fixedPM);
44384           }
44385         };
44386         BufferOp.prototype.computeGeometry = function computeGeometry () {
44387           this.bufferOriginalPrecision();
44388           if (this._resultGeometry !== null) { return null }
44389           var argPM = this._argGeom.getFactory().getPrecisionModel();
44390           if (argPM.getType() === PrecisionModel.FIXED) { this.bufferFixedPrecision(argPM); } else { this.bufferReducedPrecision(); }
44391         };
44392         BufferOp.prototype.setQuadrantSegments = function setQuadrantSegments (quadrantSegments) {
44393           this._bufParams.setQuadrantSegments(quadrantSegments);
44394         };
44395         BufferOp.prototype.bufferOriginalPrecision = function bufferOriginalPrecision () {
44396           try {
44397             var bufBuilder = new BufferBuilder(this._bufParams);
44398             this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);
44399           } catch (ex) {
44400             if (ex instanceof RuntimeException) {
44401               this._saveException = ex;
44402             } else { throw ex }
44403           } finally {}
44404         };
44405         BufferOp.prototype.getResultGeometry = function getResultGeometry (distance) {
44406           this._distance = distance;
44407           this.computeGeometry();
44408           return this._resultGeometry
44409         };
44410         BufferOp.prototype.setEndCapStyle = function setEndCapStyle (endCapStyle) {
44411           this._bufParams.setEndCapStyle(endCapStyle);
44412         };
44413         BufferOp.prototype.interfaces_ = function interfaces_ () {
44414           return []
44415         };
44416         BufferOp.prototype.getClass = function getClass () {
44417           return BufferOp
44418         };
44419         BufferOp.bufferOp = function bufferOp () {
44420           if (arguments.length === 2) {
44421             var g = arguments[0];
44422             var distance = arguments[1];
44423             var gBuf = new BufferOp(g);
44424             var geomBuf = gBuf.getResultGeometry(distance);
44425             return geomBuf
44426           } else if (arguments.length === 3) {
44427             if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
44428               var g$1 = arguments[0];
44429               var distance$1 = arguments[1];
44430               var quadrantSegments = arguments[2];
44431               var bufOp = new BufferOp(g$1);
44432               bufOp.setQuadrantSegments(quadrantSegments);
44433               var geomBuf$1 = bufOp.getResultGeometry(distance$1);
44434               return geomBuf$1
44435             } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {
44436               var g$2 = arguments[0];
44437               var distance$2 = arguments[1];
44438               var params = arguments[2];
44439               var bufOp$1 = new BufferOp(g$2, params);
44440               var geomBuf$2 = bufOp$1.getResultGeometry(distance$2);
44441               return geomBuf$2
44442             }
44443           } else if (arguments.length === 4) {
44444             var g$3 = arguments[0];
44445             var distance$3 = arguments[1];
44446             var quadrantSegments$1 = arguments[2];
44447             var endCapStyle = arguments[3];
44448             var bufOp$2 = new BufferOp(g$3);
44449             bufOp$2.setQuadrantSegments(quadrantSegments$1);
44450             bufOp$2.setEndCapStyle(endCapStyle);
44451             var geomBuf$3 = bufOp$2.getResultGeometry(distance$3);
44452             return geomBuf$3
44453           }
44454         };
44455         BufferOp.precisionScaleFactor = function precisionScaleFactor (g, distance, maxPrecisionDigits) {
44456           var env = g.getEnvelopeInternal();
44457           var envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));
44458           var expandByDistance = distance > 0.0 ? distance : 0.0;
44459           var bufEnvMax = envMax + 2 * expandByDistance;
44460           var bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);
44461           var minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;
44462           var scaleFactor = Math.pow(10.0, minUnitLog10);
44463           return scaleFactor
44464         };
44465         staticAccessors$32.CAP_ROUND.get = function () { return BufferParameters.CAP_ROUND };
44466         staticAccessors$32.CAP_BUTT.get = function () { return BufferParameters.CAP_FLAT };
44467         staticAccessors$32.CAP_FLAT.get = function () { return BufferParameters.CAP_FLAT };
44468         staticAccessors$32.CAP_SQUARE.get = function () { return BufferParameters.CAP_SQUARE };
44469         staticAccessors$32.MAX_PRECISION_DIGITS.get = function () { return 12 };
44470
44471         Object.defineProperties( BufferOp, staticAccessors$32 );
44472
44473         var PointPairDistance = function PointPairDistance () {
44474           this._pt = [new Coordinate(), new Coordinate()];
44475           this._distance = Double.NaN;
44476           this._isNull = true;
44477         };
44478         PointPairDistance.prototype.getCoordinates = function getCoordinates () {
44479           return this._pt
44480         };
44481         PointPairDistance.prototype.getCoordinate = function getCoordinate (i) {
44482           return this._pt[i]
44483         };
44484         PointPairDistance.prototype.setMinimum = function setMinimum () {
44485           if (arguments.length === 1) {
44486             var ptDist = arguments[0];
44487             this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
44488           } else if (arguments.length === 2) {
44489             var p0 = arguments[0];
44490             var p1 = arguments[1];
44491             if (this._isNull) {
44492               this.initialize(p0, p1);
44493               return null
44494             }
44495             var dist = p0.distance(p1);
44496             if (dist < this._distance) { this.initialize(p0, p1, dist); }
44497           }
44498         };
44499         PointPairDistance.prototype.initialize = function initialize () {
44500           if (arguments.length === 0) {
44501             this._isNull = true;
44502           } else if (arguments.length === 2) {
44503             var p0 = arguments[0];
44504             var p1 = arguments[1];
44505             this._pt[0].setCoordinate(p0);
44506             this._pt[1].setCoordinate(p1);
44507             this._distance = p0.distance(p1);
44508             this._isNull = false;
44509           } else if (arguments.length === 3) {
44510             var p0$1 = arguments[0];
44511             var p1$1 = arguments[1];
44512             var distance = arguments[2];
44513             this._pt[0].setCoordinate(p0$1);
44514             this._pt[1].setCoordinate(p1$1);
44515             this._distance = distance;
44516             this._isNull = false;
44517           }
44518         };
44519         PointPairDistance.prototype.getDistance = function getDistance () {
44520           return this._distance
44521         };
44522         PointPairDistance.prototype.setMaximum = function setMaximum () {
44523           if (arguments.length === 1) {
44524             var ptDist = arguments[0];
44525             this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
44526           } else if (arguments.length === 2) {
44527             var p0 = arguments[0];
44528             var p1 = arguments[1];
44529             if (this._isNull) {
44530               this.initialize(p0, p1);
44531               return null
44532             }
44533             var dist = p0.distance(p1);
44534             if (dist > this._distance) { this.initialize(p0, p1, dist); }
44535           }
44536         };
44537         PointPairDistance.prototype.interfaces_ = function interfaces_ () {
44538           return []
44539         };
44540         PointPairDistance.prototype.getClass = function getClass () {
44541           return PointPairDistance
44542         };
44543
44544         var DistanceToPointFinder = function DistanceToPointFinder () {};
44545
44546         DistanceToPointFinder.prototype.interfaces_ = function interfaces_ () {
44547           return []
44548         };
44549         DistanceToPointFinder.prototype.getClass = function getClass () {
44550           return DistanceToPointFinder
44551         };
44552         DistanceToPointFinder.computeDistance = function computeDistance () {
44553           if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
44554             var line = arguments[0];
44555             var pt = arguments[1];
44556             var ptDist = arguments[2];
44557             var coords = line.getCoordinates();
44558             var tempSegment = new LineSegment();
44559             for (var i = 0; i < coords.length - 1; i++) {
44560               tempSegment.setCoordinates(coords[i], coords[i + 1]);
44561               var closestPt = tempSegment.closestPoint(pt);
44562               ptDist.setMinimum(closestPt, pt);
44563             }
44564           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
44565             var poly = arguments[0];
44566             var pt$1 = arguments[1];
44567             var ptDist$1 = arguments[2];
44568             DistanceToPointFinder.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
44569             for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
44570               DistanceToPointFinder.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
44571             }
44572           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
44573             var geom = arguments[0];
44574             var pt$2 = arguments[1];
44575             var ptDist$2 = arguments[2];
44576             if (geom instanceof LineString) {
44577               DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
44578             } else if (geom instanceof Polygon) {
44579               DistanceToPointFinder.computeDistance(geom, pt$2, ptDist$2);
44580             } else if (geom instanceof GeometryCollection) {
44581               var gc = geom;
44582               for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
44583                 var g = gc.getGeometryN(i$2);
44584                 DistanceToPointFinder.computeDistance(g, pt$2, ptDist$2);
44585               }
44586             } else {
44587               ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
44588             }
44589           } else if (arguments[2] instanceof PointPairDistance && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
44590             var segment = arguments[0];
44591             var pt$3 = arguments[1];
44592             var ptDist$3 = arguments[2];
44593             var closestPt$1 = segment.closestPoint(pt$3);
44594             ptDist$3.setMinimum(closestPt$1, pt$3);
44595           }
44596         };
44597
44598         var BufferCurveMaximumDistanceFinder = function BufferCurveMaximumDistanceFinder (inputGeom) {
44599           this._maxPtDist = new PointPairDistance();
44600           this._inputGeom = inputGeom || null;
44601         };
44602
44603         var staticAccessors$36 = { MaxPointDistanceFilter: { configurable: true },MaxMidpointDistanceFilter: { configurable: true } };
44604         BufferCurveMaximumDistanceFinder.prototype.computeMaxMidpointDistance = function computeMaxMidpointDistance (curve) {
44605           var distFilter = new MaxMidpointDistanceFilter(this._inputGeom);
44606           curve.apply(distFilter);
44607           this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
44608         };
44609         BufferCurveMaximumDistanceFinder.prototype.computeMaxVertexDistance = function computeMaxVertexDistance (curve) {
44610           var distFilter = new MaxPointDistanceFilter(this._inputGeom);
44611           curve.apply(distFilter);
44612           this._maxPtDist.setMaximum(distFilter.getMaxPointDistance());
44613         };
44614         BufferCurveMaximumDistanceFinder.prototype.findDistance = function findDistance (bufferCurve) {
44615           this.computeMaxVertexDistance(bufferCurve);
44616           this.computeMaxMidpointDistance(bufferCurve);
44617           return this._maxPtDist.getDistance()
44618         };
44619         BufferCurveMaximumDistanceFinder.prototype.getDistancePoints = function getDistancePoints () {
44620           return this._maxPtDist
44621         };
44622         BufferCurveMaximumDistanceFinder.prototype.interfaces_ = function interfaces_ () {
44623           return []
44624         };
44625         BufferCurveMaximumDistanceFinder.prototype.getClass = function getClass () {
44626           return BufferCurveMaximumDistanceFinder
44627         };
44628         staticAccessors$36.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter };
44629         staticAccessors$36.MaxMidpointDistanceFilter.get = function () { return MaxMidpointDistanceFilter };
44630
44631         Object.defineProperties( BufferCurveMaximumDistanceFinder, staticAccessors$36 );
44632
44633         var MaxPointDistanceFilter = function MaxPointDistanceFilter (geom) {
44634           this._maxPtDist = new PointPairDistance();
44635           this._minPtDist = new PointPairDistance();
44636           this._geom = geom || null;
44637         };
44638         MaxPointDistanceFilter.prototype.filter = function filter (pt) {
44639           this._minPtDist.initialize();
44640           DistanceToPointFinder.computeDistance(this._geom, pt, this._minPtDist);
44641           this._maxPtDist.setMaximum(this._minPtDist);
44642         };
44643         MaxPointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
44644           return this._maxPtDist
44645         };
44646         MaxPointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
44647           return [CoordinateFilter]
44648         };
44649         MaxPointDistanceFilter.prototype.getClass = function getClass () {
44650           return MaxPointDistanceFilter
44651         };
44652
44653         var MaxMidpointDistanceFilter = function MaxMidpointDistanceFilter (geom) {
44654           this._maxPtDist = new PointPairDistance();
44655           this._minPtDist = new PointPairDistance();
44656           this._geom = geom || null;
44657         };
44658         MaxMidpointDistanceFilter.prototype.filter = function filter (seq, index) {
44659           if (index === 0) { return null }
44660           var p0 = seq.getCoordinate(index - 1);
44661           var p1 = seq.getCoordinate(index);
44662           var midPt = new Coordinate((p0.x + p1.x) / 2, (p0.y + p1.y) / 2);
44663           this._minPtDist.initialize();
44664           DistanceToPointFinder.computeDistance(this._geom, midPt, this._minPtDist);
44665           this._maxPtDist.setMaximum(this._minPtDist);
44666         };
44667         MaxMidpointDistanceFilter.prototype.isDone = function isDone () {
44668           return false
44669         };
44670         MaxMidpointDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
44671           return false
44672         };
44673         MaxMidpointDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
44674           return this._maxPtDist
44675         };
44676         MaxMidpointDistanceFilter.prototype.interfaces_ = function interfaces_ () {
44677           return [CoordinateSequenceFilter]
44678         };
44679         MaxMidpointDistanceFilter.prototype.getClass = function getClass () {
44680           return MaxMidpointDistanceFilter
44681         };
44682
44683         var PolygonExtracter = function PolygonExtracter (comps) {
44684           this._comps = comps || null;
44685         };
44686         PolygonExtracter.prototype.filter = function filter (geom) {
44687           if (geom instanceof Polygon) { this._comps.add(geom); }
44688         };
44689         PolygonExtracter.prototype.interfaces_ = function interfaces_ () {
44690           return [GeometryFilter]
44691         };
44692         PolygonExtracter.prototype.getClass = function getClass () {
44693           return PolygonExtracter
44694         };
44695         PolygonExtracter.getPolygons = function getPolygons () {
44696           if (arguments.length === 1) {
44697             var geom = arguments[0];
44698             return PolygonExtracter.getPolygons(geom, new ArrayList())
44699           } else if (arguments.length === 2) {
44700             var geom$1 = arguments[0];
44701             var list = arguments[1];
44702             if (geom$1 instanceof Polygon) {
44703               list.add(geom$1);
44704             } else if (geom$1 instanceof GeometryCollection) {
44705               geom$1.apply(new PolygonExtracter(list));
44706             }
44707             return list
44708           }
44709         };
44710
44711         var LinearComponentExtracter = function LinearComponentExtracter () {
44712           this._lines = null;
44713           this._isForcedToLineString = false;
44714           if (arguments.length === 1) {
44715             var lines = arguments[0];
44716             this._lines = lines;
44717           } else if (arguments.length === 2) {
44718             var lines$1 = arguments[0];
44719             var isForcedToLineString = arguments[1];
44720             this._lines = lines$1;
44721             this._isForcedToLineString = isForcedToLineString;
44722           }
44723         };
44724         LinearComponentExtracter.prototype.filter = function filter (geom) {
44725           if (this._isForcedToLineString && geom instanceof LinearRing) {
44726             var line = geom.getFactory().createLineString(geom.getCoordinateSequence());
44727             this._lines.add(line);
44728             return null
44729           }
44730           if (geom instanceof LineString) { this._lines.add(geom); }
44731         };
44732         LinearComponentExtracter.prototype.setForceToLineString = function setForceToLineString (isForcedToLineString) {
44733           this._isForcedToLineString = isForcedToLineString;
44734         };
44735         LinearComponentExtracter.prototype.interfaces_ = function interfaces_ () {
44736           return [GeometryComponentFilter]
44737         };
44738         LinearComponentExtracter.prototype.getClass = function getClass () {
44739           return LinearComponentExtracter
44740         };
44741         LinearComponentExtracter.getGeometry = function getGeometry () {
44742           if (arguments.length === 1) {
44743             var geom = arguments[0];
44744             return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))
44745           } else if (arguments.length === 2) {
44746             var geom$1 = arguments[0];
44747             var forceToLineString = arguments[1];
44748             return geom$1.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom$1, forceToLineString))
44749           }
44750         };
44751         LinearComponentExtracter.getLines = function getLines () {
44752           if (arguments.length === 1) {
44753             var geom = arguments[0];
44754             return LinearComponentExtracter.getLines(geom, false)
44755           } else if (arguments.length === 2) {
44756             if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {
44757               var geoms = arguments[0];
44758               var lines$1 = arguments[1];
44759               for (var i = geoms.iterator(); i.hasNext();) {
44760                 var g = i.next();
44761                 LinearComponentExtracter.getLines(g, lines$1);
44762               }
44763               return lines$1
44764             } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {
44765               var geom$1 = arguments[0];
44766               var forceToLineString = arguments[1];
44767               var lines = new ArrayList();
44768               geom$1.apply(new LinearComponentExtracter(lines, forceToLineString));
44769               return lines
44770             } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {
44771               var geom$2 = arguments[0];
44772               var lines$2 = arguments[1];
44773               if (geom$2 instanceof LineString) {
44774                 lines$2.add(geom$2);
44775               } else {
44776                 geom$2.apply(new LinearComponentExtracter(lines$2));
44777               }
44778               return lines$2
44779             }
44780           } else if (arguments.length === 3) {
44781             if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {
44782               var geoms$1 = arguments[0];
44783               var lines$3 = arguments[1];
44784               var forceToLineString$1 = arguments[2];
44785               for (var i$1 = geoms$1.iterator(); i$1.hasNext();) {
44786                 var g$1 = i$1.next();
44787                 LinearComponentExtracter.getLines(g$1, lines$3, forceToLineString$1);
44788               }
44789               return lines$3
44790             } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {
44791               var geom$3 = arguments[0];
44792               var lines$4 = arguments[1];
44793               var forceToLineString$2 = arguments[2];
44794               geom$3.apply(new LinearComponentExtracter(lines$4, forceToLineString$2));
44795               return lines$4
44796             }
44797           }
44798         };
44799
44800         var PointLocator = function PointLocator () {
44801           this._boundaryRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
44802           this._isIn = null;
44803           this._numBoundaries = null;
44804           if (arguments.length === 0) ; else if (arguments.length === 1) {
44805             var boundaryRule = arguments[0];
44806             if (boundaryRule === null) { throw new IllegalArgumentException('Rule must be non-null') }
44807             this._boundaryRule = boundaryRule;
44808           }
44809         };
44810         PointLocator.prototype.locateInternal = function locateInternal () {
44811             var this$1 = this;
44812
44813           if (arguments[0] instanceof Coordinate && arguments[1] instanceof Polygon) {
44814             var p = arguments[0];
44815             var poly = arguments[1];
44816             if (poly.isEmpty()) { return Location.EXTERIOR }
44817             var shell = poly.getExteriorRing();
44818             var shellLoc = this.locateInPolygonRing(p, shell);
44819             if (shellLoc === Location.EXTERIOR) { return Location.EXTERIOR }
44820             if (shellLoc === Location.BOUNDARY) { return Location.BOUNDARY }
44821             for (var i = 0; i < poly.getNumInteriorRing(); i++) {
44822               var hole = poly.getInteriorRingN(i);
44823               var holeLoc = this$1.locateInPolygonRing(p, hole);
44824               if (holeLoc === Location.INTERIOR) { return Location.EXTERIOR }
44825               if (holeLoc === Location.BOUNDARY) { return Location.BOUNDARY }
44826             }
44827             return Location.INTERIOR
44828           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof LineString) {
44829             var p$1 = arguments[0];
44830             var l = arguments[1];
44831             if (!l.getEnvelopeInternal().intersects(p$1)) { return Location.EXTERIOR }
44832             var pt = l.getCoordinates();
44833             if (!l.isClosed()) {
44834               if (p$1.equals(pt[0]) || p$1.equals(pt[pt.length - 1])) {
44835                 return Location.BOUNDARY
44836               }
44837             }
44838             if (CGAlgorithms.isOnLine(p$1, pt)) { return Location.INTERIOR }
44839             return Location.EXTERIOR
44840           } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Point) {
44841             var p$2 = arguments[0];
44842             var pt$1 = arguments[1];
44843             var ptCoord = pt$1.getCoordinate();
44844             if (ptCoord.equals2D(p$2)) { return Location.INTERIOR }
44845             return Location.EXTERIOR
44846           }
44847         };
44848         PointLocator.prototype.locateInPolygonRing = function locateInPolygonRing (p, ring) {
44849           if (!ring.getEnvelopeInternal().intersects(p)) { return Location.EXTERIOR }
44850           return CGAlgorithms.locatePointInRing(p, ring.getCoordinates())
44851         };
44852         PointLocator.prototype.intersects = function intersects (p, geom) {
44853           return this.locate(p, geom) !== Location.EXTERIOR
44854         };
44855         PointLocator.prototype.updateLocationInfo = function updateLocationInfo (loc) {
44856           if (loc === Location.INTERIOR) { this._isIn = true; }
44857           if (loc === Location.BOUNDARY) { this._numBoundaries++; }
44858         };
44859         PointLocator.prototype.computeLocation = function computeLocation (p, geom) {
44860             var this$1 = this;
44861
44862           if (geom instanceof Point) {
44863             this.updateLocationInfo(this.locateInternal(p, geom));
44864           }
44865           if (geom instanceof LineString) {
44866             this.updateLocationInfo(this.locateInternal(p, geom));
44867           } else if (geom instanceof Polygon) {
44868             this.updateLocationInfo(this.locateInternal(p, geom));
44869           } else if (geom instanceof MultiLineString) {
44870             var ml = geom;
44871             for (var i = 0; i < ml.getNumGeometries(); i++) {
44872               var l = ml.getGeometryN(i);
44873               this$1.updateLocationInfo(this$1.locateInternal(p, l));
44874             }
44875           } else if (geom instanceof MultiPolygon) {
44876             var mpoly = geom;
44877             for (var i$1 = 0; i$1 < mpoly.getNumGeometries(); i$1++) {
44878               var poly = mpoly.getGeometryN(i$1);
44879               this$1.updateLocationInfo(this$1.locateInternal(p, poly));
44880             }
44881           } else if (geom instanceof GeometryCollection) {
44882             var geomi = new GeometryCollectionIterator(geom);
44883             while (geomi.hasNext()) {
44884               var g2 = geomi.next();
44885               if (g2 !== geom) { this$1.computeLocation(p, g2); }
44886             }
44887           }
44888         };
44889         PointLocator.prototype.locate = function locate (p, geom) {
44890           if (geom.isEmpty()) { return Location.EXTERIOR }
44891           if (geom instanceof LineString) {
44892             return this.locateInternal(p, geom)
44893           } else if (geom instanceof Polygon) {
44894             return this.locateInternal(p, geom)
44895           }
44896           this._isIn = false;
44897           this._numBoundaries = 0;
44898           this.computeLocation(p, geom);
44899           if (this._boundaryRule.isInBoundary(this._numBoundaries)) { return Location.BOUNDARY }
44900           if (this._numBoundaries > 0 || this._isIn) { return Location.INTERIOR }
44901           return Location.EXTERIOR
44902         };
44903         PointLocator.prototype.interfaces_ = function interfaces_ () {
44904           return []
44905         };
44906         PointLocator.prototype.getClass = function getClass () {
44907           return PointLocator
44908         };
44909
44910         var GeometryLocation = function GeometryLocation () {
44911           this._component = null;
44912           this._segIndex = null;
44913           this._pt = null;
44914           if (arguments.length === 2) {
44915             var component = arguments[0];
44916             var pt = arguments[1];
44917             GeometryLocation.call(this, component, GeometryLocation.INSIDE_AREA, pt);
44918           } else if (arguments.length === 3) {
44919             var component$1 = arguments[0];
44920             var segIndex = arguments[1];
44921             var pt$1 = arguments[2];
44922             this._component = component$1;
44923             this._segIndex = segIndex;
44924             this._pt = pt$1;
44925           }
44926         };
44927
44928         var staticAccessors$38 = { INSIDE_AREA: { configurable: true } };
44929         GeometryLocation.prototype.isInsideArea = function isInsideArea () {
44930           return this._segIndex === GeometryLocation.INSIDE_AREA
44931         };
44932         GeometryLocation.prototype.getCoordinate = function getCoordinate () {
44933           return this._pt
44934         };
44935         GeometryLocation.prototype.getGeometryComponent = function getGeometryComponent () {
44936           return this._component
44937         };
44938         GeometryLocation.prototype.getSegmentIndex = function getSegmentIndex () {
44939           return this._segIndex
44940         };
44941         GeometryLocation.prototype.interfaces_ = function interfaces_ () {
44942           return []
44943         };
44944         GeometryLocation.prototype.getClass = function getClass () {
44945           return GeometryLocation
44946         };
44947         staticAccessors$38.INSIDE_AREA.get = function () { return -1 };
44948
44949         Object.defineProperties( GeometryLocation, staticAccessors$38 );
44950
44951         var PointExtracter = function PointExtracter (pts) {
44952           this._pts = pts || null;
44953         };
44954         PointExtracter.prototype.filter = function filter (geom) {
44955           if (geom instanceof Point) { this._pts.add(geom); }
44956         };
44957         PointExtracter.prototype.interfaces_ = function interfaces_ () {
44958           return [GeometryFilter]
44959         };
44960         PointExtracter.prototype.getClass = function getClass () {
44961           return PointExtracter
44962         };
44963         PointExtracter.getPoints = function getPoints () {
44964           if (arguments.length === 1) {
44965             var geom = arguments[0];
44966             if (geom instanceof Point) {
44967               return Collections.singletonList(geom)
44968             }
44969             return PointExtracter.getPoints(geom, new ArrayList())
44970           } else if (arguments.length === 2) {
44971             var geom$1 = arguments[0];
44972             var list = arguments[1];
44973             if (geom$1 instanceof Point) {
44974               list.add(geom$1);
44975             } else if (geom$1 instanceof GeometryCollection) {
44976               geom$1.apply(new PointExtracter(list));
44977             }
44978             return list
44979           }
44980         };
44981
44982         var ConnectedElementLocationFilter = function ConnectedElementLocationFilter () {
44983           this._locations = null;
44984           var locations = arguments[0];
44985           this._locations = locations;
44986         };
44987         ConnectedElementLocationFilter.prototype.filter = function filter (geom) {
44988           if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) { this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate())); }
44989         };
44990         ConnectedElementLocationFilter.prototype.interfaces_ = function interfaces_ () {
44991           return [GeometryFilter]
44992         };
44993         ConnectedElementLocationFilter.prototype.getClass = function getClass () {
44994           return ConnectedElementLocationFilter
44995         };
44996         ConnectedElementLocationFilter.getLocations = function getLocations (geom) {
44997           var locations = new ArrayList();
44998           geom.apply(new ConnectedElementLocationFilter(locations));
44999           return locations
45000         };
45001
45002         var DistanceOp = function DistanceOp () {
45003           this._geom = null;
45004           this._terminateDistance = 0.0;
45005           this._ptLocator = new PointLocator();
45006           this._minDistanceLocation = null;
45007           this._minDistance = Double.MAX_VALUE;
45008           if (arguments.length === 2) {
45009             var g0 = arguments[0];
45010             var g1 = arguments[1];
45011             this._geom = [g0, g1];
45012             this._terminateDistance = 0.0;
45013           } else if (arguments.length === 3) {
45014             var g0$1 = arguments[0];
45015             var g1$1 = arguments[1];
45016             var terminateDistance = arguments[2];
45017             this._geom = new Array(2).fill(null);
45018             this._geom[0] = g0$1;
45019             this._geom[1] = g1$1;
45020             this._terminateDistance = terminateDistance;
45021           }
45022         };
45023         DistanceOp.prototype.computeContainmentDistance = function computeContainmentDistance () {
45024             var this$1 = this;
45025
45026           if (arguments.length === 0) {
45027             var locPtPoly = new Array(2).fill(null);
45028             this.computeContainmentDistance(0, locPtPoly);
45029             if (this._minDistance <= this._terminateDistance) { return null }
45030             this.computeContainmentDistance(1, locPtPoly);
45031           } else if (arguments.length === 2) {
45032             var polyGeomIndex = arguments[0];
45033             var locPtPoly$1 = arguments[1];
45034             var locationsIndex = 1 - polyGeomIndex;
45035             var polys = PolygonExtracter.getPolygons(this._geom[polyGeomIndex]);
45036             if (polys.size() > 0) {
45037               var insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);
45038               this.computeContainmentDistance(insideLocs, polys, locPtPoly$1);
45039               if (this._minDistance <= this._terminateDistance) {
45040                 this._minDistanceLocation[locationsIndex] = locPtPoly$1[0];
45041                 this._minDistanceLocation[polyGeomIndex] = locPtPoly$1[1];
45042                 return null
45043               }
45044             }
45045           } else if (arguments.length === 3) {
45046             if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
45047               var locs = arguments[0];
45048               var polys$1 = arguments[1];
45049               var locPtPoly$2 = arguments[2];
45050               for (var i = 0; i < locs.size(); i++) {
45051                 var loc = locs.get(i);
45052                 for (var j = 0; j < polys$1.size(); j++) {
45053                   this$1.computeContainmentDistance(loc, polys$1.get(j), locPtPoly$2);
45054                   if (this$1._minDistance <= this$1._terminateDistance) { return null }
45055                 }
45056               }
45057             } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {
45058               var ptLoc = arguments[0];
45059               var poly = arguments[1];
45060               var locPtPoly$3 = arguments[2];
45061               var pt = ptLoc.getCoordinate();
45062               if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {
45063                 this._minDistance = 0.0;
45064                 locPtPoly$3[0] = ptLoc;
45065                 locPtPoly$3[1] = new GeometryLocation(poly, pt);
45066
45067                 return null
45068               }
45069             }
45070           }
45071         };
45072         DistanceOp.prototype.computeMinDistanceLinesPoints = function computeMinDistanceLinesPoints (lines, points, locGeom) {
45073             var this$1 = this;
45074
45075           for (var i = 0; i < lines.size(); i++) {
45076             var line = lines.get(i);
45077             for (var j = 0; j < points.size(); j++) {
45078               var pt = points.get(j);
45079               this$1.computeMinDistance(line, pt, locGeom);
45080               if (this$1._minDistance <= this$1._terminateDistance) { return null }
45081             }
45082           }
45083         };
45084         DistanceOp.prototype.computeFacetDistance = function computeFacetDistance () {
45085           var locGeom = new Array(2).fill(null);
45086           var lines0 = LinearComponentExtracter.getLines(this._geom[0]);
45087           var lines1 = LinearComponentExtracter.getLines(this._geom[1]);
45088           var pts0 = PointExtracter.getPoints(this._geom[0]);
45089           var pts1 = PointExtracter.getPoints(this._geom[1]);
45090           this.computeMinDistanceLines(lines0, lines1, locGeom);
45091           this.updateMinDistance(locGeom, false);
45092           if (this._minDistance <= this._terminateDistance) { return null }
45093           locGeom[0] = null;
45094           locGeom[1] = null;
45095           this.computeMinDistanceLinesPoints(lines0, pts1, locGeom);
45096           this.updateMinDistance(locGeom, false);
45097           if (this._minDistance <= this._terminateDistance) { return null }
45098           locGeom[0] = null;
45099           locGeom[1] = null;
45100           this.computeMinDistanceLinesPoints(lines1, pts0, locGeom);
45101           this.updateMinDistance(locGeom, true);
45102           if (this._minDistance <= this._terminateDistance) { return null }
45103           locGeom[0] = null;
45104           locGeom[1] = null;
45105           this.computeMinDistancePoints(pts0, pts1, locGeom);
45106           this.updateMinDistance(locGeom, false);
45107         };
45108         DistanceOp.prototype.nearestLocations = function nearestLocations () {
45109           this.computeMinDistance();
45110           return this._minDistanceLocation
45111         };
45112         DistanceOp.prototype.updateMinDistance = function updateMinDistance (locGeom, flip) {
45113           if (locGeom[0] === null) { return null }
45114           if (flip) {
45115             this._minDistanceLocation[0] = locGeom[1];
45116             this._minDistanceLocation[1] = locGeom[0];
45117           } else {
45118             this._minDistanceLocation[0] = locGeom[0];
45119             this._minDistanceLocation[1] = locGeom[1];
45120           }
45121         };
45122         DistanceOp.prototype.nearestPoints = function nearestPoints () {
45123           this.computeMinDistance();
45124           var nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];
45125           return nearestPts
45126         };
45127         DistanceOp.prototype.computeMinDistance = function computeMinDistance () {
45128             var this$1 = this;
45129
45130           if (arguments.length === 0) {
45131             if (this._minDistanceLocation !== null) { return null }
45132             this._minDistanceLocation = new Array(2).fill(null);
45133             this.computeContainmentDistance();
45134             if (this._minDistance <= this._terminateDistance) { return null }
45135             this.computeFacetDistance();
45136           } else if (arguments.length === 3) {
45137             if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {
45138               var line = arguments[0];
45139               var pt = arguments[1];
45140               var locGeom = arguments[2];
45141               if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) { return null }
45142               var coord0 = line.getCoordinates();
45143               var coord = pt.getCoordinate();
45144               for (var i = 0; i < coord0.length - 1; i++) {
45145                 var dist = CGAlgorithms.distancePointLine(coord, coord0[i], coord0[i + 1]);
45146                 if (dist < this$1._minDistance) {
45147                   this$1._minDistance = dist;
45148                   var seg = new LineSegment(coord0[i], coord0[i + 1]);
45149                   var segClosestPoint = seg.closestPoint(coord);
45150                   locGeom[0] = new GeometryLocation(line, i, segClosestPoint);
45151                   locGeom[1] = new GeometryLocation(pt, 0, coord);
45152                 }
45153                 if (this$1._minDistance <= this$1._terminateDistance) { return null }
45154               }
45155             } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {
45156               var line0 = arguments[0];
45157               var line1 = arguments[1];
45158               var locGeom$1 = arguments[2];
45159               if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) { return null }
45160               var coord0$1 = line0.getCoordinates();
45161               var coord1 = line1.getCoordinates();
45162               for (var i$1 = 0; i$1 < coord0$1.length - 1; i$1++) {
45163                 for (var j = 0; j < coord1.length - 1; j++) {
45164                   var dist$1 = CGAlgorithms.distanceLineLine(coord0$1[i$1], coord0$1[i$1 + 1], coord1[j], coord1[j + 1]);
45165                   if (dist$1 < this$1._minDistance) {
45166                     this$1._minDistance = dist$1;
45167                     var seg0 = new LineSegment(coord0$1[i$1], coord0$1[i$1 + 1]);
45168                     var seg1 = new LineSegment(coord1[j], coord1[j + 1]);
45169                     var closestPt = seg0.closestPoints(seg1);
45170                     locGeom$1[0] = new GeometryLocation(line0, i$1, closestPt[0]);
45171                     locGeom$1[1] = new GeometryLocation(line1, j, closestPt[1]);
45172                   }
45173                   if (this$1._minDistance <= this$1._terminateDistance) { return null }
45174                 }
45175               }
45176             }
45177           }
45178         };
45179         DistanceOp.prototype.computeMinDistancePoints = function computeMinDistancePoints (points0, points1, locGeom) {
45180             var this$1 = this;
45181
45182           for (var i = 0; i < points0.size(); i++) {
45183             var pt0 = points0.get(i);
45184             for (var j = 0; j < points1.size(); j++) {
45185               var pt1 = points1.get(j);
45186               var dist = pt0.getCoordinate().distance(pt1.getCoordinate());
45187               if (dist < this$1._minDistance) {
45188                 this$1._minDistance = dist;
45189                 locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());
45190                 locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());
45191               }
45192               if (this$1._minDistance <= this$1._terminateDistance) { return null }
45193             }
45194           }
45195         };
45196         DistanceOp.prototype.distance = function distance () {
45197           if (this._geom[0] === null || this._geom[1] === null) { throw new IllegalArgumentException('null geometries are not supported') }
45198           if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) { return 0.0 }
45199           this.computeMinDistance();
45200           return this._minDistance
45201         };
45202         DistanceOp.prototype.computeMinDistanceLines = function computeMinDistanceLines (lines0, lines1, locGeom) {
45203             var this$1 = this;
45204
45205           for (var i = 0; i < lines0.size(); i++) {
45206             var line0 = lines0.get(i);
45207             for (var j = 0; j < lines1.size(); j++) {
45208               var line1 = lines1.get(j);
45209               this$1.computeMinDistance(line0, line1, locGeom);
45210               if (this$1._minDistance <= this$1._terminateDistance) { return null }
45211             }
45212           }
45213         };
45214         DistanceOp.prototype.interfaces_ = function interfaces_ () {
45215           return []
45216         };
45217         DistanceOp.prototype.getClass = function getClass () {
45218           return DistanceOp
45219         };
45220         DistanceOp.distance = function distance (g0, g1) {
45221           var distOp = new DistanceOp(g0, g1);
45222           return distOp.distance()
45223         };
45224         DistanceOp.isWithinDistance = function isWithinDistance (g0, g1, distance) {
45225           var distOp = new DistanceOp(g0, g1, distance);
45226           return distOp.distance() <= distance
45227         };
45228         DistanceOp.nearestPoints = function nearestPoints (g0, g1) {
45229           var distOp = new DistanceOp(g0, g1);
45230           return distOp.nearestPoints()
45231         };
45232
45233         var PointPairDistance$2 = function PointPairDistance () {
45234           this._pt = [new Coordinate(), new Coordinate()];
45235           this._distance = Double.NaN;
45236           this._isNull = true;
45237         };
45238         PointPairDistance$2.prototype.getCoordinates = function getCoordinates () {
45239           return this._pt
45240         };
45241         PointPairDistance$2.prototype.getCoordinate = function getCoordinate (i) {
45242           return this._pt[i]
45243         };
45244         PointPairDistance$2.prototype.setMinimum = function setMinimum () {
45245           if (arguments.length === 1) {
45246             var ptDist = arguments[0];
45247             this.setMinimum(ptDist._pt[0], ptDist._pt[1]);
45248           } else if (arguments.length === 2) {
45249             var p0 = arguments[0];
45250             var p1 = arguments[1];
45251             if (this._isNull) {
45252               this.initialize(p0, p1);
45253               return null
45254             }
45255             var dist = p0.distance(p1);
45256             if (dist < this._distance) { this.initialize(p0, p1, dist); }
45257           }
45258         };
45259         PointPairDistance$2.prototype.initialize = function initialize () {
45260           if (arguments.length === 0) {
45261             this._isNull = true;
45262           } else if (arguments.length === 2) {
45263             var p0 = arguments[0];
45264             var p1 = arguments[1];
45265             this._pt[0].setCoordinate(p0);
45266             this._pt[1].setCoordinate(p1);
45267             this._distance = p0.distance(p1);
45268             this._isNull = false;
45269           } else if (arguments.length === 3) {
45270             var p0$1 = arguments[0];
45271             var p1$1 = arguments[1];
45272             var distance = arguments[2];
45273             this._pt[0].setCoordinate(p0$1);
45274             this._pt[1].setCoordinate(p1$1);
45275             this._distance = distance;
45276             this._isNull = false;
45277           }
45278         };
45279         PointPairDistance$2.prototype.toString = function toString () {
45280           return WKTWriter.toLineString(this._pt[0], this._pt[1])
45281         };
45282         PointPairDistance$2.prototype.getDistance = function getDistance () {
45283           return this._distance
45284         };
45285         PointPairDistance$2.prototype.setMaximum = function setMaximum () {
45286           if (arguments.length === 1) {
45287             var ptDist = arguments[0];
45288             this.setMaximum(ptDist._pt[0], ptDist._pt[1]);
45289           } else if (arguments.length === 2) {
45290             var p0 = arguments[0];
45291             var p1 = arguments[1];
45292             if (this._isNull) {
45293               this.initialize(p0, p1);
45294               return null
45295             }
45296             var dist = p0.distance(p1);
45297             if (dist > this._distance) { this.initialize(p0, p1, dist); }
45298           }
45299         };
45300         PointPairDistance$2.prototype.interfaces_ = function interfaces_ () {
45301           return []
45302         };
45303         PointPairDistance$2.prototype.getClass = function getClass () {
45304           return PointPairDistance$2
45305         };
45306
45307         var DistanceToPoint = function DistanceToPoint () {};
45308
45309         DistanceToPoint.prototype.interfaces_ = function interfaces_ () {
45310           return []
45311         };
45312         DistanceToPoint.prototype.getClass = function getClass () {
45313           return DistanceToPoint
45314         };
45315         DistanceToPoint.computeDistance = function computeDistance () {
45316           if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineString && arguments[1] instanceof Coordinate)) {
45317             var line = arguments[0];
45318             var pt = arguments[1];
45319             var ptDist = arguments[2];
45320             var tempSegment = new LineSegment();
45321             var coords = line.getCoordinates();
45322             for (var i = 0; i < coords.length - 1; i++) {
45323               tempSegment.setCoordinates(coords[i], coords[i + 1]);
45324               var closestPt = tempSegment.closestPoint(pt);
45325               ptDist.setMinimum(closestPt, pt);
45326             }
45327           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Polygon && arguments[1] instanceof Coordinate)) {
45328             var poly = arguments[0];
45329             var pt$1 = arguments[1];
45330             var ptDist$1 = arguments[2];
45331             DistanceToPoint.computeDistance(poly.getExteriorRing(), pt$1, ptDist$1);
45332             for (var i$1 = 0; i$1 < poly.getNumInteriorRing(); i$1++) {
45333               DistanceToPoint.computeDistance(poly.getInteriorRingN(i$1), pt$1, ptDist$1);
45334             }
45335           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof Geometry && arguments[1] instanceof Coordinate)) {
45336             var geom = arguments[0];
45337             var pt$2 = arguments[1];
45338             var ptDist$2 = arguments[2];
45339             if (geom instanceof LineString) {
45340               DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
45341             } else if (geom instanceof Polygon) {
45342               DistanceToPoint.computeDistance(geom, pt$2, ptDist$2);
45343             } else if (geom instanceof GeometryCollection) {
45344               var gc = geom;
45345               for (var i$2 = 0; i$2 < gc.getNumGeometries(); i$2++) {
45346                 var g = gc.getGeometryN(i$2);
45347                 DistanceToPoint.computeDistance(g, pt$2, ptDist$2);
45348               }
45349             } else {
45350               ptDist$2.setMinimum(geom.getCoordinate(), pt$2);
45351             }
45352           } else if (arguments[2] instanceof PointPairDistance$2 && (arguments[0] instanceof LineSegment && arguments[1] instanceof Coordinate)) {
45353             var segment = arguments[0];
45354             var pt$3 = arguments[1];
45355             var ptDist$3 = arguments[2];
45356             var closestPt$1 = segment.closestPoint(pt$3);
45357             ptDist$3.setMinimum(closestPt$1, pt$3);
45358           }
45359         };
45360
45361         var DiscreteHausdorffDistance = function DiscreteHausdorffDistance () {
45362           this._g0 = null;
45363           this._g1 = null;
45364           this._ptDist = new PointPairDistance$2();
45365           this._densifyFrac = 0.0;
45366           var g0 = arguments[0];
45367           var g1 = arguments[1];
45368           this._g0 = g0;
45369           this._g1 = g1;
45370         };
45371
45372         var staticAccessors$39 = { MaxPointDistanceFilter: { configurable: true },MaxDensifiedByFractionDistanceFilter: { configurable: true } };
45373         DiscreteHausdorffDistance.prototype.getCoordinates = function getCoordinates () {
45374           return this._ptDist.getCoordinates()
45375         };
45376         DiscreteHausdorffDistance.prototype.setDensifyFraction = function setDensifyFraction (densifyFrac) {
45377           if (densifyFrac > 1.0 || densifyFrac <= 0.0) { throw new IllegalArgumentException('Fraction is not in range (0.0 - 1.0]') }
45378           this._densifyFrac = densifyFrac;
45379         };
45380         DiscreteHausdorffDistance.prototype.compute = function compute (g0, g1) {
45381           this.computeOrientedDistance(g0, g1, this._ptDist);
45382           this.computeOrientedDistance(g1, g0, this._ptDist);
45383         };
45384         DiscreteHausdorffDistance.prototype.distance = function distance () {
45385           this.compute(this._g0, this._g1);
45386           return this._ptDist.getDistance()
45387         };
45388         DiscreteHausdorffDistance.prototype.computeOrientedDistance = function computeOrientedDistance (discreteGeom, geom, ptDist) {
45389           var distFilter = new MaxPointDistanceFilter$1(geom);
45390           discreteGeom.apply(distFilter);
45391           ptDist.setMaximum(distFilter.getMaxPointDistance());
45392           if (this._densifyFrac > 0) {
45393             var fracFilter = new MaxDensifiedByFractionDistanceFilter(geom, this._densifyFrac);
45394             discreteGeom.apply(fracFilter);
45395             ptDist.setMaximum(fracFilter.getMaxPointDistance());
45396           }
45397         };
45398         DiscreteHausdorffDistance.prototype.orientedDistance = function orientedDistance () {
45399           this.computeOrientedDistance(this._g0, this._g1, this._ptDist);
45400           return this._ptDist.getDistance()
45401         };
45402         DiscreteHausdorffDistance.prototype.interfaces_ = function interfaces_ () {
45403           return []
45404         };
45405         DiscreteHausdorffDistance.prototype.getClass = function getClass () {
45406           return DiscreteHausdorffDistance
45407         };
45408         DiscreteHausdorffDistance.distance = function distance () {
45409           if (arguments.length === 2) {
45410             var g0 = arguments[0];
45411             var g1 = arguments[1];
45412             var dist = new DiscreteHausdorffDistance(g0, g1);
45413             return dist.distance()
45414           } else if (arguments.length === 3) {
45415             var g0$1 = arguments[0];
45416             var g1$1 = arguments[1];
45417             var densifyFrac = arguments[2];
45418             var dist$1 = new DiscreteHausdorffDistance(g0$1, g1$1);
45419             dist$1.setDensifyFraction(densifyFrac);
45420             return dist$1.distance()
45421           }
45422         };
45423         staticAccessors$39.MaxPointDistanceFilter.get = function () { return MaxPointDistanceFilter$1 };
45424         staticAccessors$39.MaxDensifiedByFractionDistanceFilter.get = function () { return MaxDensifiedByFractionDistanceFilter };
45425
45426         Object.defineProperties( DiscreteHausdorffDistance, staticAccessors$39 );
45427
45428         var MaxPointDistanceFilter$1 = function MaxPointDistanceFilter () {
45429           this._maxPtDist = new PointPairDistance$2();
45430           this._minPtDist = new PointPairDistance$2();
45431           this._euclideanDist = new DistanceToPoint();
45432           this._geom = null;
45433           var geom = arguments[0];
45434           this._geom = geom;
45435         };
45436         MaxPointDistanceFilter$1.prototype.filter = function filter (pt) {
45437           this._minPtDist.initialize();
45438           DistanceToPoint.computeDistance(this._geom, pt, this._minPtDist);
45439           this._maxPtDist.setMaximum(this._minPtDist);
45440         };
45441         MaxPointDistanceFilter$1.prototype.getMaxPointDistance = function getMaxPointDistance () {
45442           return this._maxPtDist
45443         };
45444         MaxPointDistanceFilter$1.prototype.interfaces_ = function interfaces_ () {
45445           return [CoordinateFilter]
45446         };
45447         MaxPointDistanceFilter$1.prototype.getClass = function getClass () {
45448           return MaxPointDistanceFilter$1
45449         };
45450
45451         var MaxDensifiedByFractionDistanceFilter = function MaxDensifiedByFractionDistanceFilter () {
45452           this._maxPtDist = new PointPairDistance$2();
45453           this._minPtDist = new PointPairDistance$2();
45454           this._geom = null;
45455           this._numSubSegs = 0;
45456           var geom = arguments[0];
45457           var fraction = arguments[1];
45458           this._geom = geom;
45459           this._numSubSegs = Math.trunc(Math.round(1.0 / fraction));
45460         };
45461         MaxDensifiedByFractionDistanceFilter.prototype.filter = function filter (seq, index) {
45462             var this$1 = this;
45463
45464           if (index === 0) { return null }
45465           var p0 = seq.getCoordinate(index - 1);
45466           var p1 = seq.getCoordinate(index);
45467           var delx = (p1.x - p0.x) / this._numSubSegs;
45468           var dely = (p1.y - p0.y) / this._numSubSegs;
45469           for (var i = 0; i < this._numSubSegs; i++) {
45470             var x = p0.x + i * delx;
45471             var y = p0.y + i * dely;
45472             var pt = new Coordinate(x, y);
45473             this$1._minPtDist.initialize();
45474             DistanceToPoint.computeDistance(this$1._geom, pt, this$1._minPtDist);
45475             this$1._maxPtDist.setMaximum(this$1._minPtDist);
45476           }
45477         };
45478         MaxDensifiedByFractionDistanceFilter.prototype.isDone = function isDone () {
45479           return false
45480         };
45481         MaxDensifiedByFractionDistanceFilter.prototype.isGeometryChanged = function isGeometryChanged () {
45482           return false
45483         };
45484         MaxDensifiedByFractionDistanceFilter.prototype.getMaxPointDistance = function getMaxPointDistance () {
45485           return this._maxPtDist
45486         };
45487         MaxDensifiedByFractionDistanceFilter.prototype.interfaces_ = function interfaces_ () {
45488           return [CoordinateSequenceFilter]
45489         };
45490         MaxDensifiedByFractionDistanceFilter.prototype.getClass = function getClass () {
45491           return MaxDensifiedByFractionDistanceFilter
45492         };
45493
45494         var BufferDistanceValidator = function BufferDistanceValidator (input, bufDistance, result) {
45495           this._minValidDistance = null;
45496           this._maxValidDistance = null;
45497           this._minDistanceFound = null;
45498           this._maxDistanceFound = null;
45499           this._isValid = true;
45500           this._errMsg = null;
45501           this._errorLocation = null;
45502           this._errorIndicator = null;
45503           this._input = input || null;
45504           this._bufDistance = bufDistance || null;
45505           this._result = result || null;
45506         };
45507
45508         var staticAccessors$37 = { VERBOSE: { configurable: true },MAX_DISTANCE_DIFF_FRAC: { configurable: true } };
45509         BufferDistanceValidator.prototype.checkMaximumDistance = function checkMaximumDistance (input, bufCurve, maxDist) {
45510           var haus = new DiscreteHausdorffDistance(bufCurve, input);
45511           haus.setDensifyFraction(0.25);
45512           this._maxDistanceFound = haus.orientedDistance();
45513           if (this._maxDistanceFound > maxDist) {
45514             this._isValid = false;
45515             var pts = haus.getCoordinates();
45516             this._errorLocation = pts[1];
45517             this._errorIndicator = input.getFactory().createLineString(pts);
45518             this._errMsg = 'Distance between buffer curve and input is too large (' + this._maxDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ')';
45519           }
45520         };
45521         BufferDistanceValidator.prototype.isValid = function isValid () {
45522           var posDistance = Math.abs(this._bufDistance);
45523           var distDelta = BufferDistanceValidator.MAX_DISTANCE_DIFF_FRAC * posDistance;
45524           this._minValidDistance = posDistance - distDelta;
45525           this._maxValidDistance = posDistance + distDelta;
45526           if (this._input.isEmpty() || this._result.isEmpty()) { return true }
45527           if (this._bufDistance > 0.0) {
45528             this.checkPositiveValid();
45529           } else {
45530             this.checkNegativeValid();
45531           }
45532           if (BufferDistanceValidator.VERBOSE) {
45533             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));
45534           }
45535           return this._isValid
45536         };
45537         BufferDistanceValidator.prototype.checkNegativeValid = function checkNegativeValid () {
45538           if (!(this._input instanceof Polygon || this._input instanceof MultiPolygon || this._input instanceof GeometryCollection)) {
45539             return null
45540           }
45541           var inputCurve = this.getPolygonLines(this._input);
45542           this.checkMinimumDistance(inputCurve, this._result, this._minValidDistance);
45543           if (!this._isValid) { return null }
45544           this.checkMaximumDistance(inputCurve, this._result, this._maxValidDistance);
45545         };
45546         BufferDistanceValidator.prototype.getErrorIndicator = function getErrorIndicator () {
45547           return this._errorIndicator
45548         };
45549         BufferDistanceValidator.prototype.checkMinimumDistance = function checkMinimumDistance (g1, g2, minDist) {
45550           var distOp = new DistanceOp(g1, g2, minDist);
45551           this._minDistanceFound = distOp.distance();
45552           if (this._minDistanceFound < minDist) {
45553             this._isValid = false;
45554             var pts = distOp.nearestPoints();
45555             this._errorLocation = distOp.nearestPoints()[1];
45556             this._errorIndicator = g1.getFactory().createLineString(pts);
45557             this._errMsg = 'Distance between buffer curve and input is too small (' + this._minDistanceFound + ' at ' + WKTWriter.toLineString(pts[0], pts[1]) + ' )';
45558           }
45559         };
45560         BufferDistanceValidator.prototype.checkPositiveValid = function checkPositiveValid () {
45561           var bufCurve = this._result.getBoundary();
45562           this.checkMinimumDistance(this._input, bufCurve, this._minValidDistance);
45563           if (!this._isValid) { return null }
45564           this.checkMaximumDistance(this._input, bufCurve, this._maxValidDistance);
45565         };
45566         BufferDistanceValidator.prototype.getErrorLocation = function getErrorLocation () {
45567           return this._errorLocation
45568         };
45569         BufferDistanceValidator.prototype.getPolygonLines = function getPolygonLines (g) {
45570           var lines = new ArrayList();
45571           var lineExtracter = new LinearComponentExtracter(lines);
45572           var polys = PolygonExtracter.getPolygons(g);
45573           for (var i = polys.iterator(); i.hasNext();) {
45574             var poly = i.next();
45575             poly.apply(lineExtracter);
45576           }
45577           return g.getFactory().buildGeometry(lines)
45578         };
45579         BufferDistanceValidator.prototype.getErrorMessage = function getErrorMessage () {
45580           return this._errMsg
45581         };
45582         BufferDistanceValidator.prototype.interfaces_ = function interfaces_ () {
45583           return []
45584         };
45585         BufferDistanceValidator.prototype.getClass = function getClass () {
45586           return BufferDistanceValidator
45587         };
45588         staticAccessors$37.VERBOSE.get = function () { return false };
45589         staticAccessors$37.MAX_DISTANCE_DIFF_FRAC.get = function () { return 0.012 };
45590
45591         Object.defineProperties( BufferDistanceValidator, staticAccessors$37 );
45592
45593         var BufferResultValidator = function BufferResultValidator (input, distance, result) {
45594           this._isValid = true;
45595           this._errorMsg = null;
45596           this._errorLocation = null;
45597           this._errorIndicator = null;
45598           this._input = input || null;
45599           this._distance = distance || null;
45600           this._result = result || null;
45601         };
45602
45603         var staticAccessors$40 = { VERBOSE: { configurable: true },MAX_ENV_DIFF_FRAC: { configurable: true } };
45604         BufferResultValidator.prototype.isValid = function isValid () {
45605           this.checkPolygonal();
45606           if (!this._isValid) { return this._isValid }
45607           this.checkExpectedEmpty();
45608           if (!this._isValid) { return this._isValid }
45609           this.checkEnvelope();
45610           if (!this._isValid) { return this._isValid }
45611           this.checkArea();
45612           if (!this._isValid) { return this._isValid }
45613           this.checkDistance();
45614           return this._isValid
45615         };
45616         BufferResultValidator.prototype.checkEnvelope = function checkEnvelope () {
45617           if (this._distance < 0.0) { return null }
45618           var padding = this._distance * BufferResultValidator.MAX_ENV_DIFF_FRAC;
45619           if (padding === 0.0) { padding = 0.001; }
45620           var expectedEnv = new Envelope(this._input.getEnvelopeInternal());
45621           expectedEnv.expandBy(this._distance);
45622           var bufEnv = new Envelope(this._result.getEnvelopeInternal());
45623           bufEnv.expandBy(padding);
45624           if (!bufEnv.contains(expectedEnv)) {
45625             this._isValid = false;
45626             this._errorMsg = 'Buffer envelope is incorrect';
45627             this._errorIndicator = this._input.getFactory().toGeometry(bufEnv);
45628           }
45629           this.report('Envelope');
45630         };
45631         BufferResultValidator.prototype.checkDistance = function checkDistance () {
45632           var distValid = new BufferDistanceValidator(this._input, this._distance, this._result);
45633           if (!distValid.isValid()) {
45634             this._isValid = false;
45635             this._errorMsg = distValid.getErrorMessage();
45636             this._errorLocation = distValid.getErrorLocation();
45637             this._errorIndicator = distValid.getErrorIndicator();
45638           }
45639           this.report('Distance');
45640         };
45641         BufferResultValidator.prototype.checkArea = function checkArea () {
45642           var inputArea = this._input.getArea();
45643           var resultArea = this._result.getArea();
45644           if (this._distance > 0.0 && inputArea > resultArea) {
45645             this._isValid = false;
45646             this._errorMsg = 'Area of positive buffer is smaller than input';
45647             this._errorIndicator = this._result;
45648           }
45649           if (this._distance < 0.0 && inputArea < resultArea) {
45650             this._isValid = false;
45651             this._errorMsg = 'Area of negative buffer is larger than input';
45652             this._errorIndicator = this._result;
45653           }
45654           this.report('Area');
45655         };
45656         BufferResultValidator.prototype.checkPolygonal = function checkPolygonal () {
45657           if (!(this._result instanceof Polygon || this._result instanceof MultiPolygon)) { this._isValid = false; }
45658           this._errorMsg = 'Result is not polygonal';
45659           this._errorIndicator = this._result;
45660           this.report('Polygonal');
45661         };
45662         BufferResultValidator.prototype.getErrorIndicator = function getErrorIndicator () {
45663           return this._errorIndicator
45664         };
45665         BufferResultValidator.prototype.getErrorLocation = function getErrorLocation () {
45666           return this._errorLocation
45667         };
45668         BufferResultValidator.prototype.checkExpectedEmpty = function checkExpectedEmpty () {
45669           if (this._input.getDimension() >= 2) { return null }
45670           if (this._distance > 0.0) { return null }
45671           if (!this._result.isEmpty()) {
45672             this._isValid = false;
45673             this._errorMsg = 'Result is non-empty';
45674             this._errorIndicator = this._result;
45675           }
45676           this.report('ExpectedEmpty');
45677         };
45678         BufferResultValidator.prototype.report = function report (checkName) {
45679           if (!BufferResultValidator.VERBOSE) { return null }
45680           System.out.println('Check ' + checkName + ': ' + (this._isValid ? 'passed' : 'FAILED'));
45681         };
45682         BufferResultValidator.prototype.getErrorMessage = function getErrorMessage () {
45683           return this._errorMsg
45684         };
45685         BufferResultValidator.prototype.interfaces_ = function interfaces_ () {
45686           return []
45687         };
45688         BufferResultValidator.prototype.getClass = function getClass () {
45689           return BufferResultValidator
45690         };
45691         BufferResultValidator.isValidMsg = function isValidMsg (g, distance, result) {
45692           var validator = new BufferResultValidator(g, distance, result);
45693           if (!validator.isValid()) { return validator.getErrorMessage() }
45694           return null
45695         };
45696         BufferResultValidator.isValid = function isValid (g, distance, result) {
45697           var validator = new BufferResultValidator(g, distance, result);
45698           if (validator.isValid()) { return true }
45699           return false
45700         };
45701         staticAccessors$40.VERBOSE.get = function () { return false };
45702         staticAccessors$40.MAX_ENV_DIFF_FRAC.get = function () { return 0.012 };
45703
45704         Object.defineProperties( BufferResultValidator, staticAccessors$40 );
45705
45706         // operation.buffer
45707
45708         var BasicSegmentString = function BasicSegmentString () {
45709           this._pts = null;
45710           this._data = null;
45711           var pts = arguments[0];
45712           var data = arguments[1];
45713           this._pts = pts;
45714           this._data = data;
45715         };
45716         BasicSegmentString.prototype.getCoordinates = function getCoordinates () {
45717           return this._pts
45718         };
45719         BasicSegmentString.prototype.size = function size () {
45720           return this._pts.length
45721         };
45722         BasicSegmentString.prototype.getCoordinate = function getCoordinate (i) {
45723           return this._pts[i]
45724         };
45725         BasicSegmentString.prototype.isClosed = function isClosed () {
45726           return this._pts[0].equals(this._pts[this._pts.length - 1])
45727         };
45728         BasicSegmentString.prototype.getSegmentOctant = function getSegmentOctant (index) {
45729           if (index === this._pts.length - 1) { return -1 }
45730           return Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1))
45731         };
45732         BasicSegmentString.prototype.setData = function setData (data) {
45733           this._data = data;
45734         };
45735         BasicSegmentString.prototype.getData = function getData () {
45736           return this._data
45737         };
45738         BasicSegmentString.prototype.toString = function toString () {
45739           return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
45740         };
45741         BasicSegmentString.prototype.interfaces_ = function interfaces_ () {
45742           return [SegmentString]
45743         };
45744         BasicSegmentString.prototype.getClass = function getClass () {
45745           return BasicSegmentString
45746         };
45747
45748         var InteriorIntersectionFinder = function InteriorIntersectionFinder () {
45749           this._findAllIntersections = false;
45750           this._isCheckEndSegmentsOnly = false;
45751           this._li = null;
45752           this._interiorIntersection = null;
45753           this._intSegments = null;
45754           this._intersections = new ArrayList();
45755           this._intersectionCount = 0;
45756           this._keepIntersections = true;
45757           var li = arguments[0];
45758           this._li = li;
45759           this._interiorIntersection = null;
45760         };
45761         InteriorIntersectionFinder.prototype.getInteriorIntersection = function getInteriorIntersection () {
45762           return this._interiorIntersection
45763         };
45764         InteriorIntersectionFinder.prototype.setCheckEndSegmentsOnly = function setCheckEndSegmentsOnly (isCheckEndSegmentsOnly) {
45765           this._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;
45766         };
45767         InteriorIntersectionFinder.prototype.getIntersectionSegments = function getIntersectionSegments () {
45768           return this._intSegments
45769         };
45770         InteriorIntersectionFinder.prototype.count = function count () {
45771           return this._intersectionCount
45772         };
45773         InteriorIntersectionFinder.prototype.getIntersections = function getIntersections () {
45774           return this._intersections
45775         };
45776         InteriorIntersectionFinder.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
45777           this._findAllIntersections = findAllIntersections;
45778         };
45779         InteriorIntersectionFinder.prototype.setKeepIntersections = function setKeepIntersections (keepIntersections) {
45780           this._keepIntersections = keepIntersections;
45781         };
45782         InteriorIntersectionFinder.prototype.processIntersections = function processIntersections (e0, segIndex0, e1, segIndex1) {
45783           if (!this._findAllIntersections && this.hasIntersection()) { return null }
45784           if (e0 === e1 && segIndex0 === segIndex1) { return null }
45785           if (this._isCheckEndSegmentsOnly) {
45786             var isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);
45787             if (!isEndSegPresent) { return null }
45788           }
45789           var p00 = e0.getCoordinates()[segIndex0];
45790           var p01 = e0.getCoordinates()[segIndex0 + 1];
45791           var p10 = e1.getCoordinates()[segIndex1];
45792           var p11 = e1.getCoordinates()[segIndex1 + 1];
45793           this._li.computeIntersection(p00, p01, p10, p11);
45794           if (this._li.hasIntersection()) {
45795             if (this._li.isInteriorIntersection()) {
45796               this._intSegments = new Array(4).fill(null);
45797               this._intSegments[0] = p00;
45798               this._intSegments[1] = p01;
45799               this._intSegments[2] = p10;
45800               this._intSegments[3] = p11;
45801               this._interiorIntersection = this._li.getIntersection(0);
45802               if (this._keepIntersections) { this._intersections.add(this._interiorIntersection); }
45803               this._intersectionCount++;
45804             }
45805           }
45806         };
45807         InteriorIntersectionFinder.prototype.isEndSegment = function isEndSegment (segStr, index) {
45808           if (index === 0) { return true }
45809           if (index >= segStr.size() - 2) { return true }
45810           return false
45811         };
45812         InteriorIntersectionFinder.prototype.hasIntersection = function hasIntersection () {
45813           return this._interiorIntersection !== null
45814         };
45815         InteriorIntersectionFinder.prototype.isDone = function isDone () {
45816           if (this._findAllIntersections) { return false }
45817           return this._interiorIntersection !== null
45818         };
45819         InteriorIntersectionFinder.prototype.interfaces_ = function interfaces_ () {
45820           return [SegmentIntersector]
45821         };
45822         InteriorIntersectionFinder.prototype.getClass = function getClass () {
45823           return InteriorIntersectionFinder
45824         };
45825         InteriorIntersectionFinder.createAllIntersectionsFinder = function createAllIntersectionsFinder (li) {
45826           var finder = new InteriorIntersectionFinder(li);
45827           finder.setFindAllIntersections(true);
45828           return finder
45829         };
45830         InteriorIntersectionFinder.createAnyIntersectionFinder = function createAnyIntersectionFinder (li) {
45831           return new InteriorIntersectionFinder(li)
45832         };
45833         InteriorIntersectionFinder.createIntersectionCounter = function createIntersectionCounter (li) {
45834           var finder = new InteriorIntersectionFinder(li);
45835           finder.setFindAllIntersections(true);
45836           finder.setKeepIntersections(false);
45837           return finder
45838         };
45839
45840         var FastNodingValidator = function FastNodingValidator () {
45841           this._li = new RobustLineIntersector();
45842           this._segStrings = null;
45843           this._findAllIntersections = false;
45844           this._segInt = null;
45845           this._isValid = true;
45846           var segStrings = arguments[0];
45847           this._segStrings = segStrings;
45848         };
45849         FastNodingValidator.prototype.execute = function execute () {
45850           if (this._segInt !== null) { return null }
45851           this.checkInteriorIntersections();
45852         };
45853         FastNodingValidator.prototype.getIntersections = function getIntersections () {
45854           return this._segInt.getIntersections()
45855         };
45856         FastNodingValidator.prototype.isValid = function isValid () {
45857           this.execute();
45858           return this._isValid
45859         };
45860         FastNodingValidator.prototype.setFindAllIntersections = function setFindAllIntersections (findAllIntersections) {
45861           this._findAllIntersections = findAllIntersections;
45862         };
45863         FastNodingValidator.prototype.checkInteriorIntersections = function checkInteriorIntersections () {
45864           this._isValid = true;
45865           this._segInt = new InteriorIntersectionFinder(this._li);
45866           this._segInt.setFindAllIntersections(this._findAllIntersections);
45867           var noder = new MCIndexNoder();
45868           noder.setSegmentIntersector(this._segInt);
45869           noder.computeNodes(this._segStrings);
45870           if (this._segInt.hasIntersection()) {
45871             this._isValid = false;
45872             return null
45873           }
45874         };
45875         FastNodingValidator.prototype.checkValid = function checkValid () {
45876           this.execute();
45877           if (!this._isValid) { throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection()) }
45878         };
45879         FastNodingValidator.prototype.getErrorMessage = function getErrorMessage () {
45880           if (this._isValid) { return 'no intersections found' }
45881           var intSegs = this._segInt.getIntersectionSegments();
45882           return 'found non-noded intersection between ' + WKTWriter.toLineString(intSegs[0], intSegs[1]) + ' and ' + WKTWriter.toLineString(intSegs[2], intSegs[3])
45883         };
45884         FastNodingValidator.prototype.interfaces_ = function interfaces_ () {
45885           return []
45886         };
45887         FastNodingValidator.prototype.getClass = function getClass () {
45888           return FastNodingValidator
45889         };
45890         FastNodingValidator.computeIntersections = function computeIntersections (segStrings) {
45891           var nv = new FastNodingValidator(segStrings);
45892           nv.setFindAllIntersections(true);
45893           nv.isValid();
45894           return nv.getIntersections()
45895         };
45896
45897         var EdgeNodingValidator = function EdgeNodingValidator () {
45898           this._nv = null;
45899           var edges = arguments[0];
45900           this._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));
45901         };
45902         EdgeNodingValidator.prototype.checkValid = function checkValid () {
45903           this._nv.checkValid();
45904         };
45905         EdgeNodingValidator.prototype.interfaces_ = function interfaces_ () {
45906           return []
45907         };
45908         EdgeNodingValidator.prototype.getClass = function getClass () {
45909           return EdgeNodingValidator
45910         };
45911         EdgeNodingValidator.toSegmentStrings = function toSegmentStrings (edges) {
45912           var segStrings = new ArrayList();
45913           for (var i = edges.iterator(); i.hasNext();) {
45914             var e = i.next();
45915             segStrings.add(new BasicSegmentString(e.getCoordinates(), e));
45916           }
45917           return segStrings
45918         };
45919         EdgeNodingValidator.checkValid = function checkValid (edges) {
45920           var validator = new EdgeNodingValidator(edges);
45921           validator.checkValid();
45922         };
45923
45924         var GeometryCollectionMapper = function GeometryCollectionMapper (mapOp) {
45925           this._mapOp = mapOp;
45926         };
45927         GeometryCollectionMapper.prototype.map = function map (gc) {
45928             var this$1 = this;
45929
45930           var mapped = new ArrayList();
45931           for (var i = 0; i < gc.getNumGeometries(); i++) {
45932             var g = this$1._mapOp.map(gc.getGeometryN(i));
45933             if (!g.isEmpty()) { mapped.add(g); }
45934           }
45935           return gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped))
45936         };
45937         GeometryCollectionMapper.prototype.interfaces_ = function interfaces_ () {
45938           return []
45939         };
45940         GeometryCollectionMapper.prototype.getClass = function getClass () {
45941           return GeometryCollectionMapper
45942         };
45943         GeometryCollectionMapper.map = function map (gc, op) {
45944           var mapper = new GeometryCollectionMapper(op);
45945           return mapper.map(gc)
45946         };
45947
45948         var LineBuilder = function LineBuilder () {
45949           this._op = null;
45950           this._geometryFactory = null;
45951           this._ptLocator = null;
45952           this._lineEdgesList = new ArrayList();
45953           this._resultLineList = new ArrayList();
45954           var op = arguments[0];
45955           var geometryFactory = arguments[1];
45956           var ptLocator = arguments[2];
45957           this._op = op;
45958           this._geometryFactory = geometryFactory;
45959           this._ptLocator = ptLocator;
45960         };
45961         LineBuilder.prototype.collectLines = function collectLines (opCode) {
45962             var this$1 = this;
45963
45964           for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
45965             var de = it.next();
45966             this$1.collectLineEdge(de, opCode, this$1._lineEdgesList);
45967             this$1.collectBoundaryTouchEdge(de, opCode, this$1._lineEdgesList);
45968           }
45969         };
45970         LineBuilder.prototype.labelIsolatedLine = function labelIsolatedLine (e, targetIndex) {
45971           var loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));
45972           e.getLabel().setLocation(targetIndex, loc);
45973         };
45974         LineBuilder.prototype.build = function build (opCode) {
45975           this.findCoveredLineEdges();
45976           this.collectLines(opCode);
45977           this.buildLines(opCode);
45978           return this._resultLineList
45979         };
45980         LineBuilder.prototype.collectLineEdge = function collectLineEdge (de, opCode, edges) {
45981           var label = de.getLabel();
45982           var e = de.getEdge();
45983           if (de.isLineEdge()) {
45984             if (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {
45985               edges.add(e);
45986               de.setVisitedEdge(true);
45987             }
45988           }
45989         };
45990         LineBuilder.prototype.findCoveredLineEdges = function findCoveredLineEdges () {
45991             var this$1 = this;
45992
45993           for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
45994             var node = nodeit.next();
45995             node.getEdges().findCoveredLineEdges();
45996           }
45997           for (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext();) {
45998             var de = it.next();
45999             var e = de.getEdge();
46000             if (de.isLineEdge() && !e.isCoveredSet()) {
46001               var isCovered = this$1._op.isCoveredByA(de.getCoordinate());
46002               e.setCovered(isCovered);
46003             }
46004           }
46005         };
46006         LineBuilder.prototype.labelIsolatedLines = function labelIsolatedLines (edgesList) {
46007             var this$1 = this;
46008
46009           for (var it = edgesList.iterator(); it.hasNext();) {
46010             var e = it.next();
46011             var label = e.getLabel();
46012             if (e.isIsolated()) {
46013               if (label.isNull(0)) { this$1.labelIsolatedLine(e, 0); } else { this$1.labelIsolatedLine(e, 1); }
46014             }
46015           }
46016         };
46017         LineBuilder.prototype.buildLines = function buildLines (opCode) {
46018             var this$1 = this;
46019
46020           for (var it = this._lineEdgesList.iterator(); it.hasNext();) {
46021             var e = it.next();
46022             // const label = e.getLabel()
46023             var line = this$1._geometryFactory.createLineString(e.getCoordinates());
46024             this$1._resultLineList.add(line);
46025             e.setInResult(true);
46026           }
46027         };
46028         LineBuilder.prototype.collectBoundaryTouchEdge = function collectBoundaryTouchEdge (de, opCode, edges) {
46029           var label = de.getLabel();
46030           if (de.isLineEdge()) { return null }
46031           if (de.isVisited()) { return null }
46032           if (de.isInteriorAreaEdge()) { return null }
46033           if (de.getEdge().isInResult()) { return null }
46034           Assert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());
46035           if (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {
46036             edges.add(de.getEdge());
46037             de.setVisitedEdge(true);
46038           }
46039         };
46040         LineBuilder.prototype.interfaces_ = function interfaces_ () {
46041           return []
46042         };
46043         LineBuilder.prototype.getClass = function getClass () {
46044           return LineBuilder
46045         };
46046
46047         var PointBuilder = function PointBuilder () {
46048           this._op = null;
46049           this._geometryFactory = null;
46050           this._resultPointList = new ArrayList();
46051           var op = arguments[0];
46052           var geometryFactory = arguments[1];
46053           // const ptLocator = arguments[2]
46054           this._op = op;
46055           this._geometryFactory = geometryFactory;
46056         };
46057         PointBuilder.prototype.filterCoveredNodeToPoint = function filterCoveredNodeToPoint (n) {
46058           var coord = n.getCoordinate();
46059           if (!this._op.isCoveredByLA(coord)) {
46060             var pt = this._geometryFactory.createPoint(coord);
46061             this._resultPointList.add(pt);
46062           }
46063         };
46064         PointBuilder.prototype.extractNonCoveredResultNodes = function extractNonCoveredResultNodes (opCode) {
46065             var this$1 = this;
46066
46067           for (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext();) {
46068             var n = nodeit.next();
46069             if (n.isInResult()) { continue }
46070             if (n.isIncidentEdgeInResult()) { continue }
46071             if (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {
46072               var label = n.getLabel();
46073               if (OverlayOp.isResultOfOp(label, opCode)) {
46074                 this$1.filterCoveredNodeToPoint(n);
46075               }
46076             }
46077           }
46078         };
46079         PointBuilder.prototype.build = function build (opCode) {
46080           this.extractNonCoveredResultNodes(opCode);
46081           return this._resultPointList
46082         };
46083         PointBuilder.prototype.interfaces_ = function interfaces_ () {
46084           return []
46085         };
46086         PointBuilder.prototype.getClass = function getClass () {
46087           return PointBuilder
46088         };
46089
46090         var GeometryTransformer = function GeometryTransformer () {
46091           this._inputGeom = null;
46092           this._factory = null;
46093           this._pruneEmptyGeometry = true;
46094           this._preserveGeometryCollectionType = true;
46095           this._preserveCollections = false;
46096           this._preserveType = false;
46097         };
46098         GeometryTransformer.prototype.transformPoint = function transformPoint (geom, parent) {
46099           return this._factory.createPoint(this.transformCoordinates(geom.getCoordinateSequence(), geom))
46100         };
46101         GeometryTransformer.prototype.transformPolygon = function transformPolygon (geom, parent) {
46102             var this$1 = this;
46103
46104           var isAllValidLinearRings = true;
46105           var shell = this.transformLinearRing(geom.getExteriorRing(), geom);
46106           if (shell === null || !(shell instanceof LinearRing) || shell.isEmpty()) { isAllValidLinearRings = false; }
46107           var holes = new ArrayList();
46108           for (var i = 0; i < geom.getNumInteriorRing(); i++) {
46109             var hole = this$1.transformLinearRing(geom.getInteriorRingN(i), geom);
46110             if (hole === null || hole.isEmpty()) {
46111               continue
46112             }
46113             if (!(hole instanceof LinearRing)) { isAllValidLinearRings = false; }
46114             holes.add(hole);
46115           }
46116           if (isAllValidLinearRings) { return this._factory.createPolygon(shell, holes.toArray([])); } else {
46117             var components = new ArrayList();
46118             if (shell !== null) { components.add(shell); }
46119             components.addAll(holes);
46120             return this._factory.buildGeometry(components)
46121           }
46122         };
46123         GeometryTransformer.prototype.createCoordinateSequence = function createCoordinateSequence (coords) {
46124           return this._factory.getCoordinateSequenceFactory().create(coords)
46125         };
46126         GeometryTransformer.prototype.getInputGeometry = function getInputGeometry () {
46127           return this._inputGeom
46128         };
46129         GeometryTransformer.prototype.transformMultiLineString = function transformMultiLineString (geom, parent) {
46130             var this$1 = this;
46131
46132           var transGeomList = new ArrayList();
46133           for (var i = 0; i < geom.getNumGeometries(); i++) {
46134             var transformGeom = this$1.transformLineString(geom.getGeometryN(i), geom);
46135             if (transformGeom === null) { continue }
46136             if (transformGeom.isEmpty()) { continue }
46137             transGeomList.add(transformGeom);
46138           }
46139           return this._factory.buildGeometry(transGeomList)
46140         };
46141         GeometryTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
46142           return this.copy(coords)
46143         };
46144         GeometryTransformer.prototype.transformLineString = function transformLineString (geom, parent) {
46145           return this._factory.createLineString(this.transformCoordinates(geom.getCoordinateSequence(), geom))
46146         };
46147         GeometryTransformer.prototype.transformMultiPoint = function transformMultiPoint (geom, parent) {
46148             var this$1 = this;
46149
46150           var transGeomList = new ArrayList();
46151           for (var i = 0; i < geom.getNumGeometries(); i++) {
46152             var transformGeom = this$1.transformPoint(geom.getGeometryN(i), geom);
46153             if (transformGeom === null) { continue }
46154             if (transformGeom.isEmpty()) { continue }
46155             transGeomList.add(transformGeom);
46156           }
46157           return this._factory.buildGeometry(transGeomList)
46158         };
46159         GeometryTransformer.prototype.transformMultiPolygon = function transformMultiPolygon (geom, parent) {
46160             var this$1 = this;
46161
46162           var transGeomList = new ArrayList();
46163           for (var i = 0; i < geom.getNumGeometries(); i++) {
46164             var transformGeom = this$1.transformPolygon(geom.getGeometryN(i), geom);
46165             if (transformGeom === null) { continue }
46166             if (transformGeom.isEmpty()) { continue }
46167             transGeomList.add(transformGeom);
46168           }
46169           return this._factory.buildGeometry(transGeomList)
46170         };
46171         GeometryTransformer.prototype.copy = function copy (seq) {
46172           return seq.copy()
46173         };
46174         GeometryTransformer.prototype.transformGeometryCollection = function transformGeometryCollection (geom, parent) {
46175             var this$1 = this;
46176
46177           var transGeomList = new ArrayList();
46178           for (var i = 0; i < geom.getNumGeometries(); i++) {
46179             var transformGeom = this$1.transform(geom.getGeometryN(i));
46180             if (transformGeom === null) { continue }
46181             if (this$1._pruneEmptyGeometry && transformGeom.isEmpty()) { continue }
46182             transGeomList.add(transformGeom);
46183           }
46184           if (this._preserveGeometryCollectionType) { return this._factory.createGeometryCollection(GeometryFactory.toGeometryArray(transGeomList)) }
46185           return this._factory.buildGeometry(transGeomList)
46186         };
46187         GeometryTransformer.prototype.transform = function transform (inputGeom) {
46188           this._inputGeom = inputGeom;
46189           this._factory = inputGeom.getFactory();
46190           if (inputGeom instanceof Point) { return this.transformPoint(inputGeom, null) }
46191           if (inputGeom instanceof MultiPoint) { return this.transformMultiPoint(inputGeom, null) }
46192           if (inputGeom instanceof LinearRing) { return this.transformLinearRing(inputGeom, null) }
46193           if (inputGeom instanceof LineString) { return this.transformLineString(inputGeom, null) }
46194           if (inputGeom instanceof MultiLineString) { return this.transformMultiLineString(inputGeom, null) }
46195           if (inputGeom instanceof Polygon) { return this.transformPolygon(inputGeom, null) }
46196           if (inputGeom instanceof MultiPolygon) { return this.transformMultiPolygon(inputGeom, null) }
46197           if (inputGeom instanceof GeometryCollection) { return this.transformGeometryCollection(inputGeom, null) }
46198           throw new IllegalArgumentException('Unknown Geometry subtype: ' + inputGeom.getClass().getName())
46199         };
46200         GeometryTransformer.prototype.transformLinearRing = function transformLinearRing (geom, parent) {
46201           var seq = this.transformCoordinates(geom.getCoordinateSequence(), geom);
46202           if (seq === null) { return this._factory.createLinearRing(null) }
46203           var seqSize = seq.size();
46204           if (seqSize > 0 && seqSize < 4 && !this._preserveType) { return this._factory.createLineString(seq) }
46205           return this._factory.createLinearRing(seq)
46206         };
46207         GeometryTransformer.prototype.interfaces_ = function interfaces_ () {
46208           return []
46209         };
46210         GeometryTransformer.prototype.getClass = function getClass () {
46211           return GeometryTransformer
46212         };
46213
46214         var LineStringSnapper = function LineStringSnapper () {
46215           this._snapTolerance = 0.0;
46216           this._srcPts = null;
46217           this._seg = new LineSegment();
46218           this._allowSnappingToSourceVertices = false;
46219           this._isClosed = false;
46220           if (arguments[0] instanceof LineString && typeof arguments[1] === 'number') {
46221             var srcLine = arguments[0];
46222             var snapTolerance = arguments[1];
46223             LineStringSnapper.call(this, srcLine.getCoordinates(), snapTolerance);
46224           } else if (arguments[0] instanceof Array && typeof arguments[1] === 'number') {
46225             var srcPts = arguments[0];
46226             var snapTolerance$1 = arguments[1];
46227             this._srcPts = srcPts;
46228             this._isClosed = LineStringSnapper.isClosed(srcPts);
46229             this._snapTolerance = snapTolerance$1;
46230           }
46231         };
46232         LineStringSnapper.prototype.snapVertices = function snapVertices (srcCoords, snapPts) {
46233             var this$1 = this;
46234
46235           var end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();
46236           for (var i = 0; i < end; i++) {
46237             var srcPt = srcCoords.get(i);
46238             var snapVert = this$1.findSnapForVertex(srcPt, snapPts);
46239             if (snapVert !== null) {
46240               srcCoords.set(i, new Coordinate(snapVert));
46241               if (i === 0 && this$1._isClosed) { srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert)); }
46242             }
46243           }
46244         };
46245         LineStringSnapper.prototype.findSnapForVertex = function findSnapForVertex (pt, snapPts) {
46246             var this$1 = this;
46247
46248           for (var i = 0; i < snapPts.length; i++) {
46249             if (pt.equals2D(snapPts[i])) { return null }
46250             if (pt.distance(snapPts[i]) < this$1._snapTolerance) { return snapPts[i] }
46251           }
46252           return null
46253         };
46254         LineStringSnapper.prototype.snapTo = function snapTo (snapPts) {
46255           var coordList = new CoordinateList(this._srcPts);
46256           this.snapVertices(coordList, snapPts);
46257           this.snapSegments(coordList, snapPts);
46258           var newPts = coordList.toCoordinateArray();
46259           return newPts
46260         };
46261         LineStringSnapper.prototype.snapSegments = function snapSegments (srcCoords, snapPts) {
46262             var this$1 = this;
46263
46264           if (snapPts.length === 0) { return null }
46265           var distinctPtCount = snapPts.length;
46266           if (snapPts[0].equals2D(snapPts[snapPts.length - 1])) { distinctPtCount = snapPts.length - 1; }
46267           for (var i = 0; i < distinctPtCount; i++) {
46268             var snapPt = snapPts[i];
46269             var index = this$1.findSegmentIndexToSnap(snapPt, srcCoords);
46270             if (index >= 0) {
46271               srcCoords.add(index + 1, new Coordinate(snapPt), false);
46272             }
46273           }
46274         };
46275         LineStringSnapper.prototype.findSegmentIndexToSnap = function findSegmentIndexToSnap (snapPt, srcCoords) {
46276             var this$1 = this;
46277
46278           var minDist = Double.MAX_VALUE;
46279           var snapIndex = -1;
46280           for (var i = 0; i < srcCoords.size() - 1; i++) {
46281             this$1._seg.p0 = srcCoords.get(i);
46282             this$1._seg.p1 = srcCoords.get(i + 1);
46283             if (this$1._seg.p0.equals2D(snapPt) || this$1._seg.p1.equals2D(snapPt)) {
46284               if (this$1._allowSnappingToSourceVertices) { continue; } else { return -1 }
46285             }
46286             var dist = this$1._seg.distance(snapPt);
46287             if (dist < this$1._snapTolerance && dist < minDist) {
46288               minDist = dist;
46289               snapIndex = i;
46290             }
46291           }
46292           return snapIndex
46293         };
46294         LineStringSnapper.prototype.setAllowSnappingToSourceVertices = function setAllowSnappingToSourceVertices (allowSnappingToSourceVertices) {
46295           this._allowSnappingToSourceVertices = allowSnappingToSourceVertices;
46296         };
46297         LineStringSnapper.prototype.interfaces_ = function interfaces_ () {
46298           return []
46299         };
46300         LineStringSnapper.prototype.getClass = function getClass () {
46301           return LineStringSnapper
46302         };
46303         LineStringSnapper.isClosed = function isClosed (pts) {
46304           if (pts.length <= 1) { return false }
46305           return pts[0].equals2D(pts[pts.length - 1])
46306         };
46307
46308         var GeometrySnapper = function GeometrySnapper (srcGeom) {
46309           this._srcGeom = srcGeom || null;
46310         };
46311
46312         var staticAccessors$41 = { SNAP_PRECISION_FACTOR: { configurable: true } };
46313         GeometrySnapper.prototype.snapTo = function snapTo (snapGeom, snapTolerance) {
46314           var snapPts = this.extractTargetCoordinates(snapGeom);
46315           var snapTrans = new SnapTransformer(snapTolerance, snapPts);
46316           return snapTrans.transform(this._srcGeom)
46317         };
46318         GeometrySnapper.prototype.snapToSelf = function snapToSelf (snapTolerance, cleanResult) {
46319           var snapPts = this.extractTargetCoordinates(this._srcGeom);
46320           var snapTrans = new SnapTransformer(snapTolerance, snapPts, true);
46321           var snappedGeom = snapTrans.transform(this._srcGeom);
46322           var result = snappedGeom;
46323           if (cleanResult && hasInterface(result, Polygonal)) {
46324             result = snappedGeom.buffer(0);
46325           }
46326           return result
46327         };
46328         GeometrySnapper.prototype.computeSnapTolerance = function computeSnapTolerance (ringPts) {
46329           var minSegLen = this.computeMinimumSegmentLength(ringPts);
46330           var snapTol = minSegLen / 10;
46331           return snapTol
46332         };
46333         GeometrySnapper.prototype.extractTargetCoordinates = function extractTargetCoordinates (g) {
46334           var ptSet = new TreeSet();
46335           var pts = g.getCoordinates();
46336           for (var i = 0; i < pts.length; i++) {
46337             ptSet.add(pts[i]);
46338           }
46339           return ptSet.toArray(new Array(0).fill(null))
46340         };
46341         GeometrySnapper.prototype.computeMinimumSegmentLength = function computeMinimumSegmentLength (pts) {
46342           var minSegLen = Double.MAX_VALUE;
46343           for (var i = 0; i < pts.length - 1; i++) {
46344             var segLen = pts[i].distance(pts[i + 1]);
46345             if (segLen < minSegLen) { minSegLen = segLen; }
46346           }
46347           return minSegLen
46348         };
46349         GeometrySnapper.prototype.interfaces_ = function interfaces_ () {
46350           return []
46351         };
46352         GeometrySnapper.prototype.getClass = function getClass () {
46353           return GeometrySnapper
46354         };
46355         GeometrySnapper.snap = function snap (g0, g1, snapTolerance) {
46356           var snapGeom = new Array(2).fill(null);
46357           var snapper0 = new GeometrySnapper(g0);
46358           snapGeom[0] = snapper0.snapTo(g1, snapTolerance);
46359           var snapper1 = new GeometrySnapper(g1);
46360           snapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);
46361           return snapGeom
46362         };
46363         GeometrySnapper.computeOverlaySnapTolerance = function computeOverlaySnapTolerance () {
46364           if (arguments.length === 1) {
46365             var g = arguments[0];
46366             var snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);
46367             var pm = g.getPrecisionModel();
46368             if (pm.getType() === PrecisionModel.FIXED) {
46369               var fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;
46370               if (fixedSnapTol > snapTolerance) { snapTolerance = fixedSnapTol; }
46371             }
46372             return snapTolerance
46373           } else if (arguments.length === 2) {
46374             var g0 = arguments[0];
46375             var g1 = arguments[1];
46376             return Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1))
46377           }
46378         };
46379         GeometrySnapper.computeSizeBasedSnapTolerance = function computeSizeBasedSnapTolerance (g) {
46380           var env = g.getEnvelopeInternal();
46381           var minDimension = Math.min(env.getHeight(), env.getWidth());
46382           var snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;
46383           return snapTol
46384         };
46385         GeometrySnapper.snapToSelf = function snapToSelf (geom, snapTolerance, cleanResult) {
46386           var snapper0 = new GeometrySnapper(geom);
46387           return snapper0.snapToSelf(snapTolerance, cleanResult)
46388         };
46389         staticAccessors$41.SNAP_PRECISION_FACTOR.get = function () { return 1e-9 };
46390
46391         Object.defineProperties( GeometrySnapper, staticAccessors$41 );
46392
46393         var SnapTransformer = (function (GeometryTransformer$$1) {
46394           function SnapTransformer (snapTolerance, snapPts, isSelfSnap) {
46395             GeometryTransformer$$1.call(this);
46396             this._snapTolerance = snapTolerance || null;
46397             this._snapPts = snapPts || null;
46398             this._isSelfSnap = (isSelfSnap !== undefined) ? isSelfSnap : false;
46399           }
46400
46401           if ( GeometryTransformer$$1 ) { SnapTransformer.__proto__ = GeometryTransformer$$1; }
46402           SnapTransformer.prototype = Object.create( GeometryTransformer$$1 && GeometryTransformer$$1.prototype );
46403           SnapTransformer.prototype.constructor = SnapTransformer;
46404           SnapTransformer.prototype.snapLine = function snapLine (srcPts, snapPts) {
46405             var snapper = new LineStringSnapper(srcPts, this._snapTolerance);
46406             snapper.setAllowSnappingToSourceVertices(this._isSelfSnap);
46407             return snapper.snapTo(snapPts)
46408           };
46409           SnapTransformer.prototype.transformCoordinates = function transformCoordinates (coords, parent) {
46410             var srcPts = coords.toCoordinateArray();
46411             var newPts = this.snapLine(srcPts, this._snapPts);
46412             return this._factory.getCoordinateSequenceFactory().create(newPts)
46413           };
46414           SnapTransformer.prototype.interfaces_ = function interfaces_ () {
46415             return []
46416           };
46417           SnapTransformer.prototype.getClass = function getClass () {
46418             return SnapTransformer
46419           };
46420
46421           return SnapTransformer;
46422         }(GeometryTransformer));
46423
46424         var CommonBits = function CommonBits () {
46425           this._isFirst = true;
46426           this._commonMantissaBitsCount = 53;
46427           this._commonBits = 0;
46428           this._commonSignExp = null;
46429         };
46430         CommonBits.prototype.getCommon = function getCommon () {
46431           return Double.longBitsToDouble(this._commonBits)
46432         };
46433         CommonBits.prototype.add = function add (num) {
46434           var numBits = Double.doubleToLongBits(num);
46435           if (this._isFirst) {
46436             this._commonBits = numBits;
46437             this._commonSignExp = CommonBits.signExpBits(this._commonBits);
46438             this._isFirst = false;
46439             return null
46440           }
46441           var numSignExp = CommonBits.signExpBits(numBits);
46442           if (numSignExp !== this._commonSignExp) {
46443             this._commonBits = 0;
46444             return null
46445           }
46446           this._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);
46447           this._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));
46448         };
46449         CommonBits.prototype.toString = function toString () {
46450           if (arguments.length === 1) {
46451             var bits = arguments[0];
46452             var x = Double.longBitsToDouble(bits);
46453             var numStr = Double.toBinaryString(bits);
46454             var padStr = '0000000000000000000000000000000000000000000000000000000000000000' + numStr;
46455             var bitStr = padStr.substring(padStr.length - 64);
46456             var str = bitStr.substring(0, 1) + '  ' + bitStr.substring(1, 12) + '(exp) ' + bitStr.substring(12) + ' [ ' + x + ' ]';
46457             return str
46458           }
46459         };
46460         CommonBits.prototype.interfaces_ = function interfaces_ () {
46461           return []
46462         };
46463         CommonBits.prototype.getClass = function getClass () {
46464           return CommonBits
46465         };
46466         CommonBits.getBit = function getBit (bits, i) {
46467           var mask = 1 << i;
46468           return (bits & mask) !== 0 ? 1 : 0
46469         };
46470         CommonBits.signExpBits = function signExpBits (num) {
46471           return num >> 52
46472         };
46473         CommonBits.zeroLowerBits = function zeroLowerBits (bits, nBits) {
46474           var invMask = (1 << nBits) - 1;
46475           var mask = ~invMask;
46476           var zeroed = bits & mask;
46477           return zeroed
46478         };
46479         CommonBits.numCommonMostSigMantissaBits = function numCommonMostSigMantissaBits (num1, num2) {
46480           var count = 0;
46481           for (var i = 52; i >= 0; i--) {
46482             if (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) { return count }
46483             count++;
46484           }
46485           return 52
46486         };
46487
46488         var CommonBitsRemover = function CommonBitsRemover () {
46489           this._commonCoord = null;
46490           this._ccFilter = new CommonCoordinateFilter();
46491         };
46492
46493         var staticAccessors$42 = { CommonCoordinateFilter: { configurable: true },Translater: { configurable: true } };
46494         CommonBitsRemover.prototype.addCommonBits = function addCommonBits (geom) {
46495           var trans = new Translater(this._commonCoord);
46496           geom.apply(trans);
46497           geom.geometryChanged();
46498         };
46499         CommonBitsRemover.prototype.removeCommonBits = function removeCommonBits (geom) {
46500           if (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) { return geom }
46501           var invCoord = new Coordinate(this._commonCoord);
46502           invCoord.x = -invCoord.x;
46503           invCoord.y = -invCoord.y;
46504           var trans = new Translater(invCoord);
46505           geom.apply(trans);
46506           geom.geometryChanged();
46507           return geom
46508         };
46509         CommonBitsRemover.prototype.getCommonCoordinate = function getCommonCoordinate () {
46510           return this._commonCoord
46511         };
46512         CommonBitsRemover.prototype.add = function add (geom) {
46513           geom.apply(this._ccFilter);
46514           this._commonCoord = this._ccFilter.getCommonCoordinate();
46515         };
46516         CommonBitsRemover.prototype.interfaces_ = function interfaces_ () {
46517           return []
46518         };
46519         CommonBitsRemover.prototype.getClass = function getClass () {
46520           return CommonBitsRemover
46521         };
46522         staticAccessors$42.CommonCoordinateFilter.get = function () { return CommonCoordinateFilter };
46523         staticAccessors$42.Translater.get = function () { return Translater };
46524
46525         Object.defineProperties( CommonBitsRemover, staticAccessors$42 );
46526
46527         var CommonCoordinateFilter = function CommonCoordinateFilter () {
46528           this._commonBitsX = new CommonBits();
46529           this._commonBitsY = new CommonBits();
46530         };
46531         CommonCoordinateFilter.prototype.filter = function filter (coord) {
46532           this._commonBitsX.add(coord.x);
46533           this._commonBitsY.add(coord.y);
46534         };
46535         CommonCoordinateFilter.prototype.getCommonCoordinate = function getCommonCoordinate () {
46536           return new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon())
46537         };
46538         CommonCoordinateFilter.prototype.interfaces_ = function interfaces_ () {
46539           return [CoordinateFilter]
46540         };
46541         CommonCoordinateFilter.prototype.getClass = function getClass () {
46542           return CommonCoordinateFilter
46543         };
46544
46545         var Translater = function Translater () {
46546           this.trans = null;
46547           var trans = arguments[0];
46548           this.trans = trans;
46549         };
46550         Translater.prototype.filter = function filter (seq, i) {
46551           var xp = seq.getOrdinate(i, 0) + this.trans.x;
46552           var yp = seq.getOrdinate(i, 1) + this.trans.y;
46553           seq.setOrdinate(i, 0, xp);
46554           seq.setOrdinate(i, 1, yp);
46555         };
46556         Translater.prototype.isDone = function isDone () {
46557           return false
46558         };
46559         Translater.prototype.isGeometryChanged = function isGeometryChanged () {
46560           return true
46561         };
46562         Translater.prototype.interfaces_ = function interfaces_ () {
46563           return [CoordinateSequenceFilter]
46564         };
46565         Translater.prototype.getClass = function getClass () {
46566           return Translater
46567         };
46568
46569         var SnapOverlayOp = function SnapOverlayOp (g1, g2) {
46570           this._geom = new Array(2).fill(null);
46571           this._snapTolerance = null;
46572           this._cbr = null;
46573           this._geom[0] = g1;
46574           this._geom[1] = g2;
46575           this.computeSnapTolerance();
46576         };
46577         SnapOverlayOp.prototype.selfSnap = function selfSnap (geom) {
46578           var snapper0 = new GeometrySnapper(geom);
46579           var snapGeom = snapper0.snapTo(geom, this._snapTolerance);
46580           return snapGeom
46581         };
46582         SnapOverlayOp.prototype.removeCommonBits = function removeCommonBits (geom) {
46583           this._cbr = new CommonBitsRemover();
46584           this._cbr.add(geom[0]);
46585           this._cbr.add(geom[1]);
46586           var remGeom = new Array(2).fill(null);
46587           remGeom[0] = this._cbr.removeCommonBits(geom[0].copy());
46588           remGeom[1] = this._cbr.removeCommonBits(geom[1].copy());
46589           return remGeom
46590         };
46591         SnapOverlayOp.prototype.prepareResult = function prepareResult (geom) {
46592           this._cbr.addCommonBits(geom);
46593           return geom
46594         };
46595         SnapOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
46596           var prepGeom = this.snap(this._geom);
46597           var result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);
46598           return this.prepareResult(result)
46599         };
46600         SnapOverlayOp.prototype.checkValid = function checkValid (g) {
46601           if (!g.isValid()) {
46602             System.out.println('Snapped geometry is invalid');
46603           }
46604         };
46605         SnapOverlayOp.prototype.computeSnapTolerance = function computeSnapTolerance () {
46606           this._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);
46607         };
46608         SnapOverlayOp.prototype.snap = function snap (geom) {
46609           var remGeom = this.removeCommonBits(geom);
46610           var snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);
46611           return snapGeom
46612         };
46613         SnapOverlayOp.prototype.interfaces_ = function interfaces_ () {
46614           return []
46615         };
46616         SnapOverlayOp.prototype.getClass = function getClass () {
46617           return SnapOverlayOp
46618         };
46619         SnapOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
46620           var op = new SnapOverlayOp(g0, g1);
46621           return op.getResultGeometry(opCode)
46622         };
46623         SnapOverlayOp.union = function union (g0, g1) {
46624           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
46625         };
46626         SnapOverlayOp.intersection = function intersection (g0, g1) {
46627           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
46628         };
46629         SnapOverlayOp.symDifference = function symDifference (g0, g1) {
46630           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
46631         };
46632         SnapOverlayOp.difference = function difference (g0, g1) {
46633           return SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
46634         };
46635
46636         var SnapIfNeededOverlayOp = function SnapIfNeededOverlayOp (g1, g2) {
46637           this._geom = new Array(2).fill(null);
46638           this._geom[0] = g1;
46639           this._geom[1] = g2;
46640         };
46641         SnapIfNeededOverlayOp.prototype.getResultGeometry = function getResultGeometry (opCode) {
46642           var result = null;
46643           var isSuccess = false;
46644           var savedException = null;
46645           try {
46646             result = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
46647             var isValid = true;
46648             if (isValid) { isSuccess = true; }
46649           } catch (ex) {
46650             if (ex instanceof RuntimeException) {
46651               savedException = ex;
46652             } else { throw ex }
46653           } finally {}
46654           if (!isSuccess) {
46655             try {
46656               result = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);
46657             } catch (ex) {
46658               if (ex instanceof RuntimeException) {
46659                 throw savedException
46660               } else { throw ex }
46661             } finally {}
46662           }
46663           return result
46664         };
46665         SnapIfNeededOverlayOp.prototype.interfaces_ = function interfaces_ () {
46666           return []
46667         };
46668         SnapIfNeededOverlayOp.prototype.getClass = function getClass () {
46669           return SnapIfNeededOverlayOp
46670         };
46671         SnapIfNeededOverlayOp.overlayOp = function overlayOp (g0, g1, opCode) {
46672           var op = new SnapIfNeededOverlayOp(g0, g1);
46673           return op.getResultGeometry(opCode)
46674         };
46675         SnapIfNeededOverlayOp.union = function union (g0, g1) {
46676           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION)
46677         };
46678         SnapIfNeededOverlayOp.intersection = function intersection (g0, g1) {
46679           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION)
46680         };
46681         SnapIfNeededOverlayOp.symDifference = function symDifference (g0, g1) {
46682           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE)
46683         };
46684         SnapIfNeededOverlayOp.difference = function difference (g0, g1) {
46685           return SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE)
46686         };
46687
46688         var MonotoneChain$2 = function MonotoneChain () {
46689           this.mce = null;
46690           this.chainIndex = null;
46691           var mce = arguments[0];
46692           var chainIndex = arguments[1];
46693           this.mce = mce;
46694           this.chainIndex = chainIndex;
46695         };
46696         MonotoneChain$2.prototype.computeIntersections = function computeIntersections (mc, si) {
46697           this.mce.computeIntersectsForChain(this.chainIndex, mc.mce, mc.chainIndex, si);
46698         };
46699         MonotoneChain$2.prototype.interfaces_ = function interfaces_ () {
46700           return []
46701         };
46702         MonotoneChain$2.prototype.getClass = function getClass () {
46703           return MonotoneChain$2
46704         };
46705
46706         var SweepLineEvent = function SweepLineEvent () {
46707           this._label = null;
46708           this._xValue = null;
46709           this._eventType = null;
46710           this._insertEvent = null;
46711           this._deleteEventIndex = null;
46712           this._obj = null;
46713           if (arguments.length === 2) {
46714             var x = arguments[0];
46715             var insertEvent = arguments[1];
46716             this._eventType = SweepLineEvent.DELETE;
46717             this._xValue = x;
46718             this._insertEvent = insertEvent;
46719           } else if (arguments.length === 3) {
46720             var label = arguments[0];
46721             var x$1 = arguments[1];
46722             var obj = arguments[2];
46723             this._eventType = SweepLineEvent.INSERT;
46724             this._label = label;
46725             this._xValue = x$1;
46726             this._obj = obj;
46727           }
46728         };
46729
46730         var staticAccessors$43 = { INSERT: { configurable: true },DELETE: { configurable: true } };
46731         SweepLineEvent.prototype.isDelete = function isDelete () {
46732           return this._eventType === SweepLineEvent.DELETE
46733         };
46734         SweepLineEvent.prototype.setDeleteEventIndex = function setDeleteEventIndex (deleteEventIndex) {
46735           this._deleteEventIndex = deleteEventIndex;
46736         };
46737         SweepLineEvent.prototype.getObject = function getObject () {
46738           return this._obj
46739         };
46740         SweepLineEvent.prototype.compareTo = function compareTo (o) {
46741           var pe = o;
46742           if (this._xValue < pe._xValue) { return -1 }
46743           if (this._xValue > pe._xValue) { return 1 }
46744           if (this._eventType < pe._eventType) { return -1 }
46745           if (this._eventType > pe._eventType) { return 1 }
46746           return 0
46747         };
46748         SweepLineEvent.prototype.getInsertEvent = function getInsertEvent () {
46749           return this._insertEvent
46750         };
46751         SweepLineEvent.prototype.isInsert = function isInsert () {
46752           return this._eventType === SweepLineEvent.INSERT
46753         };
46754         SweepLineEvent.prototype.isSameLabel = function isSameLabel (ev) {
46755           if (this._label === null) { return false }
46756           return this._label === ev._label
46757         };
46758         SweepLineEvent.prototype.getDeleteEventIndex = function getDeleteEventIndex () {
46759           return this._deleteEventIndex
46760         };
46761         SweepLineEvent.prototype.interfaces_ = function interfaces_ () {
46762           return [Comparable]
46763         };
46764         SweepLineEvent.prototype.getClass = function getClass () {
46765           return SweepLineEvent
46766         };
46767         staticAccessors$43.INSERT.get = function () { return 1 };
46768         staticAccessors$43.DELETE.get = function () { return 2 };
46769
46770         Object.defineProperties( SweepLineEvent, staticAccessors$43 );
46771
46772         var EdgeSetIntersector = function EdgeSetIntersector () {};
46773
46774         EdgeSetIntersector.prototype.interfaces_ = function interfaces_ () {
46775           return []
46776         };
46777         EdgeSetIntersector.prototype.getClass = function getClass () {
46778           return EdgeSetIntersector
46779         };
46780
46781         var SegmentIntersector$2 = function SegmentIntersector () {
46782           this._hasIntersection = false;
46783           this._hasProper = false;
46784           this._hasProperInterior = false;
46785           this._properIntersectionPoint = null;
46786           this._li = null;
46787           this._includeProper = null;
46788           this._recordIsolated = null;
46789           this._isSelfIntersection = null;
46790           this._numIntersections = 0;
46791           this.numTests = 0;
46792           this._bdyNodes = null;
46793           this._isDone = false;
46794           this._isDoneWhenProperInt = false;
46795           var li = arguments[0];
46796           var includeProper = arguments[1];
46797           var recordIsolated = arguments[2];
46798           this._li = li;
46799           this._includeProper = includeProper;
46800           this._recordIsolated = recordIsolated;
46801         };
46802         SegmentIntersector$2.prototype.isTrivialIntersection = function isTrivialIntersection (e0, segIndex0, e1, segIndex1) {
46803           if (e0 === e1) {
46804             if (this._li.getIntersectionNum() === 1) {
46805               if (SegmentIntersector$2.isAdjacentSegments(segIndex0, segIndex1)) { return true }
46806               if (e0.isClosed()) {
46807                 var maxSegIndex = e0.getNumPoints() - 1;
46808                 if ((segIndex0 === 0 && segIndex1 === maxSegIndex) ||
46809                     (segIndex1 === 0 && segIndex0 === maxSegIndex)) {
46810                   return true
46811                 }
46812               }
46813             }
46814           }
46815           return false
46816         };
46817         SegmentIntersector$2.prototype.getProperIntersectionPoint = function getProperIntersectionPoint () {
46818           return this._properIntersectionPoint
46819         };
46820         SegmentIntersector$2.prototype.setIsDoneIfProperInt = function setIsDoneIfProperInt (isDoneWhenProperInt) {
46821           this._isDoneWhenProperInt = isDoneWhenProperInt;
46822         };
46823         SegmentIntersector$2.prototype.hasProperInteriorIntersection = function hasProperInteriorIntersection () {
46824           return this._hasProperInterior
46825         };
46826         SegmentIntersector$2.prototype.isBoundaryPointInternal = function isBoundaryPointInternal (li, bdyNodes) {
46827           for (var i = bdyNodes.iterator(); i.hasNext();) {
46828             var node = i.next();
46829             var pt = node.getCoordinate();
46830             if (li.isIntersection(pt)) { return true }
46831           }
46832           return false
46833         };
46834         SegmentIntersector$2.prototype.hasProperIntersection = function hasProperIntersection () {
46835           return this._hasProper
46836         };
46837         SegmentIntersector$2.prototype.hasIntersection = function hasIntersection () {
46838           return this._hasIntersection
46839         };
46840         SegmentIntersector$2.prototype.isDone = function isDone () {
46841           return this._isDone
46842         };
46843         SegmentIntersector$2.prototype.isBoundaryPoint = function isBoundaryPoint (li, bdyNodes) {
46844           if (bdyNodes === null) { return false }
46845           if (this.isBoundaryPointInternal(li, bdyNodes[0])) { return true }
46846           if (this.isBoundaryPointInternal(li, bdyNodes[1])) { return true }
46847           return false
46848         };
46849         SegmentIntersector$2.prototype.setBoundaryNodes = function setBoundaryNodes (bdyNodes0, bdyNodes1) {
46850           this._bdyNodes = new Array(2).fill(null);
46851           this._bdyNodes[0] = bdyNodes0;
46852           this._bdyNodes[1] = bdyNodes1;
46853         };
46854         SegmentIntersector$2.prototype.addIntersections = function addIntersections (e0, segIndex0, e1, segIndex1) {
46855           if (e0 === e1 && segIndex0 === segIndex1) { return null }
46856           this.numTests++;
46857           var p00 = e0.getCoordinates()[segIndex0];
46858           var p01 = e0.getCoordinates()[segIndex0 + 1];
46859           var p10 = e1.getCoordinates()[segIndex1];
46860           var p11 = e1.getCoordinates()[segIndex1 + 1];
46861           this._li.computeIntersection(p00, p01, p10, p11);
46862           if (this._li.hasIntersection()) {
46863             if (this._recordIsolated) {
46864               e0.setIsolated(false);
46865               e1.setIsolated(false);
46866             }
46867             this._numIntersections++;
46868             if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {
46869               this._hasIntersection = true;
46870               if (this._includeProper || !this._li.isProper()) {
46871                 e0.addIntersections(this._li, segIndex0, 0);
46872                 e1.addIntersections(this._li, segIndex1, 1);
46873               }
46874               if (this._li.isProper()) {
46875                 this._properIntersectionPoint = this._li.getIntersection(0).copy();
46876                 this._hasProper = true;
46877                 if (this._isDoneWhenProperInt) {
46878                   this._isDone = true;
46879                 }
46880                 if (!this.isBoundaryPoint(this._li, this._bdyNodes)) { this._hasProperInterior = true; }
46881               }
46882             }
46883           }
46884         };
46885         SegmentIntersector$2.prototype.interfaces_ = function interfaces_ () {
46886           return []
46887         };
46888         SegmentIntersector$2.prototype.getClass = function getClass () {
46889           return SegmentIntersector$2
46890         };
46891         SegmentIntersector$2.isAdjacentSegments = function isAdjacentSegments (i1, i2) {
46892           return Math.abs(i1 - i2) === 1
46893         };
46894
46895         var SimpleMCSweepLineIntersector = (function (EdgeSetIntersector$$1) {
46896           function SimpleMCSweepLineIntersector () {
46897             EdgeSetIntersector$$1.call(this);
46898             this.events = new ArrayList();
46899             this.nOverlaps = null;
46900           }
46901
46902           if ( EdgeSetIntersector$$1 ) { SimpleMCSweepLineIntersector.__proto__ = EdgeSetIntersector$$1; }
46903           SimpleMCSweepLineIntersector.prototype = Object.create( EdgeSetIntersector$$1 && EdgeSetIntersector$$1.prototype );
46904           SimpleMCSweepLineIntersector.prototype.constructor = SimpleMCSweepLineIntersector;
46905           SimpleMCSweepLineIntersector.prototype.prepareEvents = function prepareEvents () {
46906             var this$1 = this;
46907
46908             Collections.sort(this.events);
46909             for (var i = 0; i < this.events.size(); i++) {
46910               var ev = this$1.events.get(i);
46911               if (ev.isDelete()) {
46912                 ev.getInsertEvent().setDeleteEventIndex(i);
46913               }
46914             }
46915           };
46916           SimpleMCSweepLineIntersector.prototype.computeIntersections = function computeIntersections () {
46917             var this$1 = this;
46918
46919             if (arguments.length === 1) {
46920               var si = arguments[0];
46921               this.nOverlaps = 0;
46922               this.prepareEvents();
46923               for (var i = 0; i < this.events.size(); i++) {
46924                 var ev = this$1.events.get(i);
46925                 if (ev.isInsert()) {
46926                   this$1.processOverlaps(i, ev.getDeleteEventIndex(), ev, si);
46927                 }
46928                 if (si.isDone()) {
46929                   break
46930                 }
46931               }
46932             } else if (arguments.length === 3) {
46933               if (arguments[2] instanceof SegmentIntersector$2 && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {
46934                 var edges0 = arguments[0];
46935                 var edges1 = arguments[1];
46936                 var si$1 = arguments[2];
46937                 this.addEdges(edges0, edges0);
46938                 this.addEdges(edges1, edges1);
46939                 this.computeIntersections(si$1);
46940               } else if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], List) && arguments[1] instanceof SegmentIntersector$2)) {
46941                 var edges = arguments[0];
46942                 var si$2 = arguments[1];
46943                 var testAllSegments = arguments[2];
46944                 if (testAllSegments) { this.addEdges(edges, null); } else { this.addEdges(edges); }
46945                 this.computeIntersections(si$2);
46946               }
46947             }
46948           };
46949           SimpleMCSweepLineIntersector.prototype.addEdge = function addEdge (edge, edgeSet) {
46950             var this$1 = this;
46951
46952             var mce = edge.getMonotoneChainEdge();
46953             var startIndex = mce.getStartIndexes();
46954             for (var i = 0; i < startIndex.length - 1; i++) {
46955               var mc = new MonotoneChain$2(mce, i);
46956               var insertEvent = new SweepLineEvent(edgeSet, mce.getMinX(i), mc);
46957               this$1.events.add(insertEvent);
46958               this$1.events.add(new SweepLineEvent(mce.getMaxX(i), insertEvent));
46959             }
46960           };
46961           SimpleMCSweepLineIntersector.prototype.processOverlaps = function processOverlaps (start, end, ev0, si) {
46962             var this$1 = this;
46963
46964             var mc0 = ev0.getObject();
46965             for (var i = start; i < end; i++) {
46966               var ev1 = this$1.events.get(i);
46967               if (ev1.isInsert()) {
46968                 var mc1 = ev1.getObject();
46969                 if (!ev0.isSameLabel(ev1)) {
46970                   mc0.computeIntersections(mc1, si);
46971                   this$1.nOverlaps++;
46972                 }
46973               }
46974             }
46975           };
46976           SimpleMCSweepLineIntersector.prototype.addEdges = function addEdges () {
46977             var this$1 = this;
46978
46979             if (arguments.length === 1) {
46980               var edges = arguments[0];
46981               for (var i = edges.iterator(); i.hasNext();) {
46982                 var edge = i.next();
46983                 this$1.addEdge(edge, edge);
46984               }
46985             } else if (arguments.length === 2) {
46986               var edges$1 = arguments[0];
46987               var edgeSet = arguments[1];
46988               for (var i$1 = edges$1.iterator(); i$1.hasNext();) {
46989                 var edge$1 = i$1.next();
46990                 this$1.addEdge(edge$1, edgeSet);
46991               }
46992             }
46993           };
46994           SimpleMCSweepLineIntersector.prototype.interfaces_ = function interfaces_ () {
46995             return []
46996           };
46997           SimpleMCSweepLineIntersector.prototype.getClass = function getClass () {
46998             return SimpleMCSweepLineIntersector
46999           };
47000
47001           return SimpleMCSweepLineIntersector;
47002         }(EdgeSetIntersector));
47003
47004         var IntervalRTreeNode = function IntervalRTreeNode () {
47005           this._min = Double.POSITIVE_INFINITY;
47006           this._max = Double.NEGATIVE_INFINITY;
47007         };
47008
47009         var staticAccessors$45 = { NodeComparator: { configurable: true } };
47010         IntervalRTreeNode.prototype.getMin = function getMin () {
47011           return this._min
47012         };
47013         IntervalRTreeNode.prototype.intersects = function intersects (queryMin, queryMax) {
47014           if (this._min > queryMax || this._max < queryMin) { return false }
47015           return true
47016         };
47017         IntervalRTreeNode.prototype.getMax = function getMax () {
47018           return this._max
47019         };
47020         IntervalRTreeNode.prototype.toString = function toString () {
47021           return WKTWriter.toLineString(new Coordinate(this._min, 0), new Coordinate(this._max, 0))
47022         };
47023         IntervalRTreeNode.prototype.interfaces_ = function interfaces_ () {
47024           return []
47025         };
47026         IntervalRTreeNode.prototype.getClass = function getClass () {
47027           return IntervalRTreeNode
47028         };
47029         staticAccessors$45.NodeComparator.get = function () { return NodeComparator };
47030
47031         Object.defineProperties( IntervalRTreeNode, staticAccessors$45 );
47032
47033         var NodeComparator = function NodeComparator () {};
47034
47035         NodeComparator.prototype.compare = function compare (o1, o2) {
47036           var n1 = o1;
47037           var n2 = o2;
47038           var mid1 = (n1._min + n1._max) / 2;
47039           var mid2 = (n2._min + n2._max) / 2;
47040           if (mid1 < mid2) { return -1 }
47041           if (mid1 > mid2) { return 1 }
47042           return 0
47043         };
47044         NodeComparator.prototype.interfaces_ = function interfaces_ () {
47045           return [Comparator]
47046         };
47047         NodeComparator.prototype.getClass = function getClass () {
47048           return NodeComparator
47049         };
47050
47051         var IntervalRTreeLeafNode = (function (IntervalRTreeNode$$1) {
47052           function IntervalRTreeLeafNode () {
47053             IntervalRTreeNode$$1.call(this);
47054             this._item = null;
47055             var min = arguments[0];
47056             var max = arguments[1];
47057             var item = arguments[2];
47058             this._min = min;
47059             this._max = max;
47060             this._item = item;
47061           }
47062
47063           if ( IntervalRTreeNode$$1 ) { IntervalRTreeLeafNode.__proto__ = IntervalRTreeNode$$1; }
47064           IntervalRTreeLeafNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
47065           IntervalRTreeLeafNode.prototype.constructor = IntervalRTreeLeafNode;
47066           IntervalRTreeLeafNode.prototype.query = function query (queryMin, queryMax, visitor) {
47067             if (!this.intersects(queryMin, queryMax)) { return null }
47068             visitor.visitItem(this._item);
47069           };
47070           IntervalRTreeLeafNode.prototype.interfaces_ = function interfaces_ () {
47071             return []
47072           };
47073           IntervalRTreeLeafNode.prototype.getClass = function getClass () {
47074             return IntervalRTreeLeafNode
47075           };
47076
47077           return IntervalRTreeLeafNode;
47078         }(IntervalRTreeNode));
47079
47080         var IntervalRTreeBranchNode = (function (IntervalRTreeNode$$1) {
47081           function IntervalRTreeBranchNode () {
47082             IntervalRTreeNode$$1.call(this);
47083             this._node1 = null;
47084             this._node2 = null;
47085             var n1 = arguments[0];
47086             var n2 = arguments[1];
47087             this._node1 = n1;
47088             this._node2 = n2;
47089             this.buildExtent(this._node1, this._node2);
47090           }
47091
47092           if ( IntervalRTreeNode$$1 ) { IntervalRTreeBranchNode.__proto__ = IntervalRTreeNode$$1; }
47093           IntervalRTreeBranchNode.prototype = Object.create( IntervalRTreeNode$$1 && IntervalRTreeNode$$1.prototype );
47094           IntervalRTreeBranchNode.prototype.constructor = IntervalRTreeBranchNode;
47095           IntervalRTreeBranchNode.prototype.buildExtent = function buildExtent (n1, n2) {
47096             this._min = Math.min(n1._min, n2._min);
47097             this._max = Math.max(n1._max, n2._max);
47098           };
47099           IntervalRTreeBranchNode.prototype.query = function query (queryMin, queryMax, visitor) {
47100             if (!this.intersects(queryMin, queryMax)) {
47101               return null
47102             }
47103             if (this._node1 !== null) { this._node1.query(queryMin, queryMax, visitor); }
47104             if (this._node2 !== null) { this._node2.query(queryMin, queryMax, visitor); }
47105           };
47106           IntervalRTreeBranchNode.prototype.interfaces_ = function interfaces_ () {
47107             return []
47108           };
47109           IntervalRTreeBranchNode.prototype.getClass = function getClass () {
47110             return IntervalRTreeBranchNode
47111           };
47112
47113           return IntervalRTreeBranchNode;
47114         }(IntervalRTreeNode));
47115
47116         var SortedPackedIntervalRTree = function SortedPackedIntervalRTree () {
47117           this._leaves = new ArrayList();
47118           this._root = null;
47119           this._level = 0;
47120         };
47121         SortedPackedIntervalRTree.prototype.buildTree = function buildTree () {
47122             var this$1 = this;
47123
47124           Collections.sort(this._leaves, new IntervalRTreeNode.NodeComparator());
47125           var src = this._leaves;
47126           var temp = null;
47127           var dest = new ArrayList();
47128           while (true) {
47129             this$1.buildLevel(src, dest);
47130             if (dest.size() === 1) { return dest.get(0) }
47131             temp = src;
47132             src = dest;
47133             dest = temp;
47134           }
47135         };
47136         SortedPackedIntervalRTree.prototype.insert = function insert (min, max, item) {
47137           if (this._root !== null) { throw new Error('Index cannot be added to once it has been queried') }
47138           this._leaves.add(new IntervalRTreeLeafNode(min, max, item));
47139         };
47140         SortedPackedIntervalRTree.prototype.query = function query (min, max, visitor) {
47141           this.init();
47142           this._root.query(min, max, visitor);
47143         };
47144         SortedPackedIntervalRTree.prototype.buildRoot = function buildRoot () {
47145           if (this._root !== null) { return null }
47146           this._root = this.buildTree();
47147         };
47148         SortedPackedIntervalRTree.prototype.printNode = function printNode (node) {
47149           System.out.println(WKTWriter.toLineString(new Coordinate(node._min, this._level), new Coordinate(node._max, this._level)));
47150         };
47151         SortedPackedIntervalRTree.prototype.init = function init () {
47152           if (this._root !== null) { return null }
47153           this.buildRoot();
47154         };
47155         SortedPackedIntervalRTree.prototype.buildLevel = function buildLevel (src, dest) {
47156           this._level++;
47157           dest.clear();
47158           for (var i = 0; i < src.size(); i += 2) {
47159             var n1 = src.get(i);
47160             var n2 = i + 1 < src.size() ? src.get(i) : null;
47161             if (n2 === null) {
47162               dest.add(n1);
47163             } else {
47164               var node = new IntervalRTreeBranchNode(src.get(i), src.get(i + 1));
47165               dest.add(node);
47166             }
47167           }
47168         };
47169         SortedPackedIntervalRTree.prototype.interfaces_ = function interfaces_ () {
47170           return []
47171         };
47172         SortedPackedIntervalRTree.prototype.getClass = function getClass () {
47173           return SortedPackedIntervalRTree
47174         };
47175
47176         var ArrayListVisitor = function ArrayListVisitor () {
47177           this._items = new ArrayList();
47178         };
47179         ArrayListVisitor.prototype.visitItem = function visitItem (item) {
47180           this._items.add(item);
47181         };
47182         ArrayListVisitor.prototype.getItems = function getItems () {
47183           return this._items
47184         };
47185         ArrayListVisitor.prototype.interfaces_ = function interfaces_ () {
47186           return [ItemVisitor]
47187         };
47188         ArrayListVisitor.prototype.getClass = function getClass () {
47189           return ArrayListVisitor
47190         };
47191
47192         var IndexedPointInAreaLocator = function IndexedPointInAreaLocator () {
47193           this._index = null;
47194           var g = arguments[0];
47195           if (!hasInterface(g, Polygonal)) { throw new IllegalArgumentException('Argument must be Polygonal') }
47196           this._index = new IntervalIndexedGeometry(g);
47197         };
47198
47199         var staticAccessors$44 = { SegmentVisitor: { configurable: true },IntervalIndexedGeometry: { configurable: true } };
47200         IndexedPointInAreaLocator.prototype.locate = function locate (p) {
47201           var rcc = new RayCrossingCounter(p);
47202           var visitor = new SegmentVisitor(rcc);
47203           this._index.query(p.y, p.y, visitor);
47204           return rcc.getLocation()
47205         };
47206         IndexedPointInAreaLocator.prototype.interfaces_ = function interfaces_ () {
47207           return [PointOnGeometryLocator]
47208         };
47209         IndexedPointInAreaLocator.prototype.getClass = function getClass () {
47210           return IndexedPointInAreaLocator
47211         };
47212         staticAccessors$44.SegmentVisitor.get = function () { return SegmentVisitor };
47213         staticAccessors$44.IntervalIndexedGeometry.get = function () { return IntervalIndexedGeometry };
47214
47215         Object.defineProperties( IndexedPointInAreaLocator, staticAccessors$44 );
47216
47217         var SegmentVisitor = function SegmentVisitor () {
47218           this._counter = null;
47219           var counter = arguments[0];
47220           this._counter = counter;
47221         };
47222         SegmentVisitor.prototype.visitItem = function visitItem (item) {
47223           var seg = item;
47224           this._counter.countSegment(seg.getCoordinate(0), seg.getCoordinate(1));
47225         };
47226         SegmentVisitor.prototype.interfaces_ = function interfaces_ () {
47227           return [ItemVisitor]
47228         };
47229         SegmentVisitor.prototype.getClass = function getClass () {
47230           return SegmentVisitor
47231         };
47232
47233         var IntervalIndexedGeometry = function IntervalIndexedGeometry () {
47234           this._index = new SortedPackedIntervalRTree();
47235           var geom = arguments[0];
47236           this.init(geom);
47237         };
47238         IntervalIndexedGeometry.prototype.init = function init (geom) {
47239             var this$1 = this;
47240
47241           var lines = LinearComponentExtracter.getLines(geom);
47242           for (var i = lines.iterator(); i.hasNext();) {
47243             var line = i.next();
47244             var pts = line.getCoordinates();
47245             this$1.addLine(pts);
47246           }
47247         };
47248         IntervalIndexedGeometry.prototype.addLine = function addLine (pts) {
47249             var this$1 = this;
47250
47251           for (var i = 1; i < pts.length; i++) {
47252             var seg = new LineSegment(pts[i - 1], pts[i]);
47253             var min = Math.min(seg.p0.y, seg.p1.y);
47254             var max = Math.max(seg.p0.y, seg.p1.y);
47255             this$1._index.insert(min, max, seg);
47256           }
47257         };
47258         IntervalIndexedGeometry.prototype.query = function query () {
47259           if (arguments.length === 2) {
47260             var min = arguments[0];
47261             var max = arguments[1];
47262             var visitor = new ArrayListVisitor();
47263             this._index.query(min, max, visitor);
47264             return visitor.getItems()
47265           } else if (arguments.length === 3) {
47266             var min$1 = arguments[0];
47267             var max$1 = arguments[1];
47268             var visitor$1 = arguments[2];
47269             this._index.query(min$1, max$1, visitor$1);
47270           }
47271         };
47272         IntervalIndexedGeometry.prototype.interfaces_ = function interfaces_ () {
47273           return []
47274         };
47275         IntervalIndexedGeometry.prototype.getClass = function getClass () {
47276           return IntervalIndexedGeometry
47277         };
47278
47279         var GeometryGraph = (function (PlanarGraph$$1) {
47280           function GeometryGraph () {
47281             PlanarGraph$$1.call(this);
47282             this._parentGeom = null;
47283             this._lineEdgeMap = new HashMap();
47284             this._boundaryNodeRule = null;
47285             this._useBoundaryDeterminationRule = true;
47286             this._argIndex = null;
47287             this._boundaryNodes = null;
47288             this._hasTooFewPoints = false;
47289             this._invalidPoint = null;
47290             this._areaPtLocator = null;
47291             this._ptLocator = new PointLocator();
47292             if (arguments.length === 2) {
47293               var argIndex = arguments[0];
47294               var parentGeom = arguments[1];
47295               var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
47296               this._argIndex = argIndex;
47297               this._parentGeom = parentGeom;
47298               this._boundaryNodeRule = boundaryNodeRule;
47299               if (parentGeom !== null) {
47300                 this.add(parentGeom);
47301               }
47302             } else if (arguments.length === 3) {
47303               var argIndex$1 = arguments[0];
47304               var parentGeom$1 = arguments[1];
47305               var boundaryNodeRule$1 = arguments[2];
47306               this._argIndex = argIndex$1;
47307               this._parentGeom = parentGeom$1;
47308               this._boundaryNodeRule = boundaryNodeRule$1;
47309               if (parentGeom$1 !== null) {
47310                 this.add(parentGeom$1);
47311               }
47312             }
47313           }
47314
47315           if ( PlanarGraph$$1 ) { GeometryGraph.__proto__ = PlanarGraph$$1; }
47316           GeometryGraph.prototype = Object.create( PlanarGraph$$1 && PlanarGraph$$1.prototype );
47317           GeometryGraph.prototype.constructor = GeometryGraph;
47318           GeometryGraph.prototype.insertBoundaryPoint = function insertBoundaryPoint (argIndex, coord) {
47319             var n = this._nodes.addNode(coord);
47320             var lbl = n.getLabel();
47321             var boundaryCount = 1;
47322             var loc = Location.NONE;
47323             loc = lbl.getLocation(argIndex, Position.ON);
47324             if (loc === Location.BOUNDARY) { boundaryCount++; }
47325             var newLoc = GeometryGraph.determineBoundary(this._boundaryNodeRule, boundaryCount);
47326             lbl.setLocation(argIndex, newLoc);
47327           };
47328           GeometryGraph.prototype.computeSelfNodes = function computeSelfNodes () {
47329             if (arguments.length === 2) {
47330               var li = arguments[0];
47331               var computeRingSelfNodes = arguments[1];
47332               return this.computeSelfNodes(li, computeRingSelfNodes, false)
47333             } else if (arguments.length === 3) {
47334               var li$1 = arguments[0];
47335               var computeRingSelfNodes$1 = arguments[1];
47336               var isDoneIfProperInt = arguments[2];
47337               var si = new SegmentIntersector$2(li$1, true, false);
47338               si.setIsDoneIfProperInt(isDoneIfProperInt);
47339               var esi = this.createEdgeSetIntersector();
47340               var isRings = this._parentGeom instanceof LinearRing || this._parentGeom instanceof Polygon || this._parentGeom instanceof MultiPolygon;
47341               var computeAllSegments = computeRingSelfNodes$1 || !isRings;
47342               esi.computeIntersections(this._edges, si, computeAllSegments);
47343               this.addSelfIntersectionNodes(this._argIndex);
47344               return si
47345             }
47346           };
47347           GeometryGraph.prototype.computeSplitEdges = function computeSplitEdges (edgelist) {
47348             for (var i = this._edges.iterator(); i.hasNext();) {
47349               var e = i.next();
47350               e.eiList.addSplitEdges(edgelist);
47351             }
47352           };
47353           GeometryGraph.prototype.computeEdgeIntersections = function computeEdgeIntersections (g, li, includeProper) {
47354             var si = new SegmentIntersector$2(li, includeProper, true);
47355             si.setBoundaryNodes(this.getBoundaryNodes(), g.getBoundaryNodes());
47356             var esi = this.createEdgeSetIntersector();
47357             esi.computeIntersections(this._edges, g._edges, si);
47358             return si
47359           };
47360           GeometryGraph.prototype.getGeometry = function getGeometry () {
47361             return this._parentGeom
47362           };
47363           GeometryGraph.prototype.getBoundaryNodeRule = function getBoundaryNodeRule () {
47364             return this._boundaryNodeRule
47365           };
47366           GeometryGraph.prototype.hasTooFewPoints = function hasTooFewPoints () {
47367             return this._hasTooFewPoints
47368           };
47369           GeometryGraph.prototype.addPoint = function addPoint () {
47370             if (arguments[0] instanceof Point) {
47371               var p = arguments[0];
47372               var coord = p.getCoordinate();
47373               this.insertPoint(this._argIndex, coord, Location.INTERIOR);
47374             } else if (arguments[0] instanceof Coordinate) {
47375               var pt = arguments[0];
47376               this.insertPoint(this._argIndex, pt, Location.INTERIOR);
47377             }
47378           };
47379           GeometryGraph.prototype.addPolygon = function addPolygon (p) {
47380             var this$1 = this;
47381
47382             this.addPolygonRing(p.getExteriorRing(), Location.EXTERIOR, Location.INTERIOR);
47383             for (var i = 0; i < p.getNumInteriorRing(); i++) {
47384               var hole = p.getInteriorRingN(i);
47385               this$1.addPolygonRing(hole, Location.INTERIOR, Location.EXTERIOR);
47386             }
47387           };
47388           GeometryGraph.prototype.addEdge = function addEdge (e) {
47389             this.insertEdge(e);
47390             var coord = e.getCoordinates();
47391             this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
47392             this.insertPoint(this._argIndex, coord[coord.length - 1], Location.BOUNDARY);
47393           };
47394           GeometryGraph.prototype.addLineString = function addLineString (line) {
47395             var coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());
47396             if (coord.length < 2) {
47397               this._hasTooFewPoints = true;
47398               this._invalidPoint = coord[0];
47399               return null
47400             }
47401             var e = new Edge(coord, new Label(this._argIndex, Location.INTERIOR));
47402             this._lineEdgeMap.put(line, e);
47403             this.insertEdge(e);
47404             Assert.isTrue(coord.length >= 2, 'found LineString with single point');
47405             this.insertBoundaryPoint(this._argIndex, coord[0]);
47406             this.insertBoundaryPoint(this._argIndex, coord[coord.length - 1]);
47407           };
47408           GeometryGraph.prototype.getInvalidPoint = function getInvalidPoint () {
47409             return this._invalidPoint
47410           };
47411           GeometryGraph.prototype.getBoundaryPoints = function getBoundaryPoints () {
47412             var coll = this.getBoundaryNodes();
47413             var pts = new Array(coll.size()).fill(null);
47414             var i = 0;
47415             for (var it = coll.iterator(); it.hasNext();) {
47416               var node = it.next();
47417               pts[i++] = node.getCoordinate().copy();
47418             }
47419             return pts
47420           };
47421           GeometryGraph.prototype.getBoundaryNodes = function getBoundaryNodes () {
47422             if (this._boundaryNodes === null) { this._boundaryNodes = this._nodes.getBoundaryNodes(this._argIndex); }
47423             return this._boundaryNodes
47424           };
47425           GeometryGraph.prototype.addSelfIntersectionNode = function addSelfIntersectionNode (argIndex, coord, loc) {
47426             if (this.isBoundaryNode(argIndex, coord)) { return null }
47427             if (loc === Location.BOUNDARY && this._useBoundaryDeterminationRule) { this.insertBoundaryPoint(argIndex, coord); } else { this.insertPoint(argIndex, coord, loc); }
47428           };
47429           GeometryGraph.prototype.addPolygonRing = function addPolygonRing (lr, cwLeft, cwRight) {
47430             if (lr.isEmpty()) { return null }
47431             var coord = CoordinateArrays.removeRepeatedPoints(lr.getCoordinates());
47432             if (coord.length < 4) {
47433               this._hasTooFewPoints = true;
47434               this._invalidPoint = coord[0];
47435               return null
47436             }
47437             var left = cwLeft;
47438             var right = cwRight;
47439             if (CGAlgorithms.isCCW(coord)) {
47440               left = cwRight;
47441               right = cwLeft;
47442             }
47443             var e = new Edge(coord, new Label(this._argIndex, Location.BOUNDARY, left, right));
47444             this._lineEdgeMap.put(lr, e);
47445             this.insertEdge(e);
47446             this.insertPoint(this._argIndex, coord[0], Location.BOUNDARY);
47447           };
47448           GeometryGraph.prototype.insertPoint = function insertPoint (argIndex, coord, onLocation) {
47449             var n = this._nodes.addNode(coord);
47450             var lbl = n.getLabel();
47451             if (lbl === null) {
47452               n._label = new Label(argIndex, onLocation);
47453             } else { lbl.setLocation(argIndex, onLocation); }
47454           };
47455           GeometryGraph.prototype.createEdgeSetIntersector = function createEdgeSetIntersector () {
47456             return new SimpleMCSweepLineIntersector()
47457           };
47458           GeometryGraph.prototype.addSelfIntersectionNodes = function addSelfIntersectionNodes (argIndex) {
47459             var this$1 = this;
47460
47461             for (var i = this._edges.iterator(); i.hasNext();) {
47462               var e = i.next();
47463               var eLoc = e.getLabel().getLocation(argIndex);
47464               for (var eiIt = e.eiList.iterator(); eiIt.hasNext();) {
47465                 var ei = eiIt.next();
47466                 this$1.addSelfIntersectionNode(argIndex, ei.coord, eLoc);
47467               }
47468             }
47469           };
47470           GeometryGraph.prototype.add = function add () {
47471             if (arguments.length === 1) {
47472               var g = arguments[0];
47473               if (g.isEmpty()) { return null }
47474               if (g instanceof MultiPolygon) { this._useBoundaryDeterminationRule = false; }
47475               if (g instanceof Polygon) { this.addPolygon(g); }
47476               else if (g instanceof LineString) { this.addLineString(g); }
47477               else if (g instanceof Point) { this.addPoint(g); }
47478               else if (g instanceof MultiPoint) { this.addCollection(g); }
47479               else if (g instanceof MultiLineString) { this.addCollection(g); }
47480               else if (g instanceof MultiPolygon) { this.addCollection(g); }
47481               else if (g instanceof GeometryCollection) { this.addCollection(g); }
47482               else { throw new Error(g.getClass().getName()) }
47483             } else { return PlanarGraph$$1.prototype.add.apply(this, arguments) }
47484           };
47485           GeometryGraph.prototype.addCollection = function addCollection (gc) {
47486             var this$1 = this;
47487
47488             for (var i = 0; i < gc.getNumGeometries(); i++) {
47489               var g = gc.getGeometryN(i);
47490               this$1.add(g);
47491             }
47492           };
47493           GeometryGraph.prototype.locate = function locate (pt) {
47494             if (hasInterface(this._parentGeom, Polygonal) && this._parentGeom.getNumGeometries() > 50) {
47495               if (this._areaPtLocator === null) {
47496                 this._areaPtLocator = new IndexedPointInAreaLocator(this._parentGeom);
47497               }
47498               return this._areaPtLocator.locate(pt)
47499             }
47500             return this._ptLocator.locate(pt, this._parentGeom)
47501           };
47502           GeometryGraph.prototype.findEdge = function findEdge () {
47503             if (arguments.length === 1) {
47504               var line = arguments[0];
47505               return this._lineEdgeMap.get(line)
47506             } else { return PlanarGraph$$1.prototype.findEdge.apply(this, arguments) }
47507           };
47508           GeometryGraph.prototype.interfaces_ = function interfaces_ () {
47509             return []
47510           };
47511           GeometryGraph.prototype.getClass = function getClass () {
47512             return GeometryGraph
47513           };
47514           GeometryGraph.determineBoundary = function determineBoundary (boundaryNodeRule, boundaryCount) {
47515             return boundaryNodeRule.isInBoundary(boundaryCount) ? Location.BOUNDARY : Location.INTERIOR
47516           };
47517
47518           return GeometryGraph;
47519         }(PlanarGraph));
47520
47521         var GeometryGraphOp = function GeometryGraphOp () {
47522           this._li = new RobustLineIntersector();
47523           this._resultPrecisionModel = null;
47524           this._arg = null;
47525           if (arguments.length === 1) {
47526             var g0 = arguments[0];
47527             this.setComputationPrecision(g0.getPrecisionModel());
47528             this._arg = new Array(1).fill(null);
47529             this._arg[0] = new GeometryGraph(0, g0);
47530           } else if (arguments.length === 2) {
47531             var g0$1 = arguments[0];
47532             var g1 = arguments[1];
47533             var boundaryNodeRule = BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE;
47534             if (g0$1.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$1.getPrecisionModel()); } else { this.setComputationPrecision(g1.getPrecisionModel()); }
47535             this._arg = new Array(2).fill(null);
47536             this._arg[0] = new GeometryGraph(0, g0$1, boundaryNodeRule);
47537             this._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);
47538           } else if (arguments.length === 3) {
47539             var g0$2 = arguments[0];
47540             var g1$1 = arguments[1];
47541             var boundaryNodeRule$1 = arguments[2];
47542             if (g0$2.getPrecisionModel().compareTo(g1$1.getPrecisionModel()) >= 0) { this.setComputationPrecision(g0$2.getPrecisionModel()); } else { this.setComputationPrecision(g1$1.getPrecisionModel()); }
47543             this._arg = new Array(2).fill(null);
47544             this._arg[0] = new GeometryGraph(0, g0$2, boundaryNodeRule$1);
47545             this._arg[1] = new GeometryGraph(1, g1$1, boundaryNodeRule$1);
47546           }
47547         };
47548         GeometryGraphOp.prototype.getArgGeometry = function getArgGeometry (i) {
47549           return this._arg[i].getGeometry()
47550         };
47551         GeometryGraphOp.prototype.setComputationPrecision = function setComputationPrecision (pm) {
47552           this._resultPrecisionModel = pm;
47553           this._li.setPrecisionModel(this._resultPrecisionModel);
47554         };
47555         GeometryGraphOp.prototype.interfaces_ = function interfaces_ () {
47556           return []
47557         };
47558         GeometryGraphOp.prototype.getClass = function getClass () {
47559           return GeometryGraphOp
47560         };
47561
47562         // operation.geometrygraph
47563
47564         var GeometryMapper = function GeometryMapper () {};
47565
47566         GeometryMapper.prototype.interfaces_ = function interfaces_ () {
47567           return []
47568         };
47569         GeometryMapper.prototype.getClass = function getClass () {
47570           return GeometryMapper
47571         };
47572         GeometryMapper.map = function map () {
47573           if (arguments[0] instanceof Geometry && hasInterface(arguments[1], GeometryMapper.MapOp)) {
47574             var geom = arguments[0];
47575             var op = arguments[1];
47576             var mapped = new ArrayList();
47577             for (var i = 0; i < geom.getNumGeometries(); i++) {
47578               var g = op.map(geom.getGeometryN(i));
47579               if (g !== null) { mapped.add(g); }
47580             }
47581             return geom.getFactory().buildGeometry(mapped)
47582           } else if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], GeometryMapper.MapOp)) {
47583             var geoms = arguments[0];
47584             var op$1 = arguments[1];
47585             var mapped$1 = new ArrayList();
47586             for (var i$1 = geoms.iterator(); i$1.hasNext();) {
47587               var g$1 = i$1.next();
47588               var gr = op$1.map(g$1);
47589               if (gr !== null) { mapped$1.add(gr); }
47590             }
47591             return mapped$1
47592           }
47593         };
47594         GeometryMapper.MapOp = function MapOp () {};
47595
47596         var OverlayOp = (function (GeometryGraphOp) {
47597           function OverlayOp () {
47598             var g0 = arguments[0];
47599             var g1 = arguments[1];
47600             GeometryGraphOp.call(this, g0, g1);
47601             this._ptLocator = new PointLocator();
47602             this._geomFact = null;
47603             this._resultGeom = null;
47604             this._graph = null;
47605             this._edgeList = new EdgeList();
47606             this._resultPolyList = new ArrayList();
47607             this._resultLineList = new ArrayList();
47608             this._resultPointList = new ArrayList();
47609             this._graph = new PlanarGraph(new OverlayNodeFactory());
47610             this._geomFact = g0.getFactory();
47611           }
47612
47613           if ( GeometryGraphOp ) { OverlayOp.__proto__ = GeometryGraphOp; }
47614           OverlayOp.prototype = Object.create( GeometryGraphOp && GeometryGraphOp.prototype );
47615           OverlayOp.prototype.constructor = OverlayOp;
47616           OverlayOp.prototype.insertUniqueEdge = function insertUniqueEdge (e) {
47617             var existingEdge = this._edgeList.findEqualEdge(e);
47618             if (existingEdge !== null) {
47619               var existingLabel = existingEdge.getLabel();
47620               var labelToMerge = e.getLabel();
47621               if (!existingEdge.isPointwiseEqual(e)) {
47622                 labelToMerge = new Label(e.getLabel());
47623                 labelToMerge.flip();
47624               }
47625               var depth = existingEdge.getDepth();
47626               if (depth.isNull()) {
47627                 depth.add(existingLabel);
47628               }
47629               depth.add(labelToMerge);
47630               existingLabel.merge(labelToMerge);
47631             } else {
47632               this._edgeList.add(e);
47633             }
47634           };
47635           OverlayOp.prototype.getGraph = function getGraph () {
47636             return this._graph
47637           };
47638           OverlayOp.prototype.cancelDuplicateResultEdges = function cancelDuplicateResultEdges () {
47639             for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
47640               var de = it.next();
47641               var sym = de.getSym();
47642               if (de.isInResult() && sym.isInResult()) {
47643                 de.setInResult(false);
47644                 sym.setInResult(false);
47645               }
47646             }
47647           };
47648           OverlayOp.prototype.isCoveredByLA = function isCoveredByLA (coord) {
47649             if (this.isCovered(coord, this._resultLineList)) { return true }
47650             if (this.isCovered(coord, this._resultPolyList)) { return true }
47651             return false
47652           };
47653           OverlayOp.prototype.computeGeometry = function computeGeometry (resultPointList, resultLineList, resultPolyList, opcode) {
47654             var geomList = new ArrayList();
47655             geomList.addAll(resultPointList);
47656             geomList.addAll(resultLineList);
47657             geomList.addAll(resultPolyList);
47658             if (geomList.isEmpty()) { return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact) }
47659             return this._geomFact.buildGeometry(geomList)
47660           };
47661           OverlayOp.prototype.mergeSymLabels = function mergeSymLabels () {
47662             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
47663               var node = nodeit.next();
47664               node.getEdges().mergeSymLabels();
47665             }
47666           };
47667           OverlayOp.prototype.isCovered = function isCovered (coord, geomList) {
47668             var this$1 = this;
47669
47670             for (var it = geomList.iterator(); it.hasNext();) {
47671               var geom = it.next();
47672               var loc = this$1._ptLocator.locate(coord, geom);
47673               if (loc !== Location.EXTERIOR) { return true }
47674             }
47675             return false
47676           };
47677           OverlayOp.prototype.replaceCollapsedEdges = function replaceCollapsedEdges () {
47678             var newEdges = new ArrayList();
47679             for (var it = this._edgeList.iterator(); it.hasNext();) {
47680               var e = it.next();
47681               if (e.isCollapsed()) {
47682                 it.remove();
47683                 newEdges.add(e.getCollapsedEdge());
47684               }
47685             }
47686             this._edgeList.addAll(newEdges);
47687           };
47688           OverlayOp.prototype.updateNodeLabelling = function updateNodeLabelling () {
47689             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
47690               var node = nodeit.next();
47691               var lbl = node.getEdges().getLabel();
47692               node.getLabel().merge(lbl);
47693             }
47694           };
47695           OverlayOp.prototype.getResultGeometry = function getResultGeometry (overlayOpCode) {
47696             this.computeOverlay(overlayOpCode);
47697             return this._resultGeom
47698           };
47699           OverlayOp.prototype.insertUniqueEdges = function insertUniqueEdges (edges) {
47700             var this$1 = this;
47701
47702             for (var i = edges.iterator(); i.hasNext();) {
47703               var e = i.next();
47704               this$1.insertUniqueEdge(e);
47705             }
47706           };
47707           OverlayOp.prototype.computeOverlay = function computeOverlay (opCode) {
47708             this.copyPoints(0);
47709             this.copyPoints(1);
47710             this._arg[0].computeSelfNodes(this._li, false);
47711             this._arg[1].computeSelfNodes(this._li, false);
47712             this._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);
47713             var baseSplitEdges = new ArrayList();
47714             this._arg[0].computeSplitEdges(baseSplitEdges);
47715             this._arg[1].computeSplitEdges(baseSplitEdges);
47716             // const splitEdges = baseSplitEdges
47717             this.insertUniqueEdges(baseSplitEdges);
47718             this.computeLabelsFromDepths();
47719             this.replaceCollapsedEdges();
47720             EdgeNodingValidator.checkValid(this._edgeList.getEdges());
47721             this._graph.addEdges(this._edgeList.getEdges());
47722             this.computeLabelling();
47723             this.labelIncompleteNodes();
47724             this.findResultAreaEdges(opCode);
47725             this.cancelDuplicateResultEdges();
47726             var polyBuilder = new PolygonBuilder(this._geomFact);
47727             polyBuilder.add(this._graph);
47728             this._resultPolyList = polyBuilder.getPolygons();
47729             var lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);
47730             this._resultLineList = lineBuilder.build(opCode);
47731             var pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);
47732             this._resultPointList = pointBuilder.build(opCode);
47733             this._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);
47734           };
47735           OverlayOp.prototype.labelIncompleteNode = function labelIncompleteNode (n, targetIndex) {
47736             var loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());
47737             n.getLabel().setLocation(targetIndex, loc);
47738           };
47739           OverlayOp.prototype.copyPoints = function copyPoints (argIndex) {
47740             var this$1 = this;
47741
47742             for (var i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {
47743               var graphNode = i.next();
47744               var newNode = this$1._graph.addNode(graphNode.getCoordinate());
47745               newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));
47746             }
47747           };
47748           OverlayOp.prototype.findResultAreaEdges = function findResultAreaEdges (opCode) {
47749             for (var it = this._graph.getEdgeEnds().iterator(); it.hasNext();) {
47750               var de = it.next();
47751               var label = de.getLabel();
47752               if (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {
47753                 de.setInResult(true);
47754               }
47755             }
47756           };
47757           OverlayOp.prototype.computeLabelsFromDepths = function computeLabelsFromDepths () {
47758             for (var it = this._edgeList.iterator(); it.hasNext();) {
47759               var e = it.next();
47760               var lbl = e.getLabel();
47761               var depth = e.getDepth();
47762               if (!depth.isNull()) {
47763                 depth.normalize();
47764                 for (var i = 0; i < 2; i++) {
47765                   if (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {
47766                     if (depth.getDelta(i) === 0) {
47767                       lbl.toLine(i);
47768                     } else {
47769                       Assert.isTrue(!depth.isNull(i, Position.LEFT), 'depth of LEFT side has not been initialized');
47770                       lbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));
47771                       Assert.isTrue(!depth.isNull(i, Position.RIGHT), 'depth of RIGHT side has not been initialized');
47772                       lbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));
47773                     }
47774                   }
47775                 }
47776               }
47777             }
47778           };
47779           OverlayOp.prototype.computeLabelling = function computeLabelling () {
47780             var this$1 = this;
47781
47782             for (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext();) {
47783               var node = nodeit.next();
47784               node.getEdges().computeLabelling(this$1._arg);
47785             }
47786             this.mergeSymLabels();
47787             this.updateNodeLabelling();
47788           };
47789           OverlayOp.prototype.labelIncompleteNodes = function labelIncompleteNodes () {
47790             var this$1 = this;
47791
47792             // let nodeCount = 0
47793             for (var ni = this._graph.getNodes().iterator(); ni.hasNext();) {
47794               var n = ni.next();
47795               var label = n.getLabel();
47796               if (n.isIsolated()) {
47797                 // nodeCount++
47798                 if (label.isNull(0)) { this$1.labelIncompleteNode(n, 0); } else { this$1.labelIncompleteNode(n, 1); }
47799               }
47800               n.getEdges().updateLabelling(label);
47801             }
47802           };
47803           OverlayOp.prototype.isCoveredByA = function isCoveredByA (coord) {
47804             if (this.isCovered(coord, this._resultPolyList)) { return true }
47805             return false
47806           };
47807           OverlayOp.prototype.interfaces_ = function interfaces_ () {
47808             return []
47809           };
47810           OverlayOp.prototype.getClass = function getClass () {
47811             return OverlayOp
47812           };
47813
47814           return OverlayOp;
47815         }(GeometryGraphOp));
47816
47817         OverlayOp.overlayOp = function (geom0, geom1, opCode) {
47818           var gov = new OverlayOp(geom0, geom1);
47819           var geomOv = gov.getResultGeometry(opCode);
47820           return geomOv
47821         };
47822         OverlayOp.intersection = function (g, other) {
47823           if (g.isEmpty() || other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, g, other, g.getFactory()) }
47824           if (g.isGeometryCollection()) {
47825             var g2 = other;
47826             return GeometryCollectionMapper.map(g, {
47827               interfaces_: function () {
47828                 return [GeometryMapper.MapOp]
47829               },
47830               map: function (g) {
47831                 return g.intersection(g2)
47832               }
47833             })
47834           }
47835           g.checkNotGeometryCollection(g);
47836           g.checkNotGeometryCollection(other);
47837           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.INTERSECTION)
47838         };
47839         OverlayOp.symDifference = function (g, other) {
47840           if (g.isEmpty() || other.isEmpty()) {
47841             if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, g, other, g.getFactory()) }
47842             if (g.isEmpty()) { return other.copy() }
47843             if (other.isEmpty()) { return g.copy() }
47844           }
47845           g.checkNotGeometryCollection(g);
47846           g.checkNotGeometryCollection(other);
47847           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.SYMDIFFERENCE)
47848         };
47849         OverlayOp.resultDimension = function (opCode, g0, g1) {
47850           var dim0 = g0.getDimension();
47851           var dim1 = g1.getDimension();
47852           var resultDimension = -1;
47853           switch (opCode) {
47854             case OverlayOp.INTERSECTION:
47855               resultDimension = Math.min(dim0, dim1);
47856               break
47857             case OverlayOp.UNION:
47858               resultDimension = Math.max(dim0, dim1);
47859               break
47860             case OverlayOp.DIFFERENCE:
47861               resultDimension = dim0;
47862               break
47863             case OverlayOp.SYMDIFFERENCE:
47864               resultDimension = Math.max(dim0, dim1);
47865               break
47866           }
47867           return resultDimension
47868         };
47869         OverlayOp.createEmptyResult = function (overlayOpCode, a, b, geomFact) {
47870           var result = null;
47871           switch (OverlayOp.resultDimension(overlayOpCode, a, b)) {
47872             case -1:
47873               result = geomFact.createGeometryCollection(new Array(0).fill(null));
47874               break
47875             case 0:
47876               result = geomFact.createPoint();
47877               break
47878             case 1:
47879               result = geomFact.createLineString();
47880               break
47881             case 2:
47882               result = geomFact.createPolygon();
47883               break
47884           }
47885           return result
47886         };
47887         OverlayOp.difference = function (g, other) {
47888           if (g.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, g, other, g.getFactory()) }
47889           if (other.isEmpty()) { return g.copy() }
47890           g.checkNotGeometryCollection(g);
47891           g.checkNotGeometryCollection(other);
47892           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.DIFFERENCE)
47893         };
47894         OverlayOp.isResultOfOp = function () {
47895           if (arguments.length === 2) {
47896             var label = arguments[0];
47897             var opCode = arguments[1];
47898             var loc0 = label.getLocation(0);
47899             var loc1 = label.getLocation(1);
47900             return OverlayOp.isResultOfOp(loc0, loc1, opCode)
47901           } else if (arguments.length === 3) {
47902             var loc0$1 = arguments[0];
47903             var loc1$1 = arguments[1];
47904             var overlayOpCode = arguments[2];
47905             if (loc0$1 === Location.BOUNDARY) { loc0$1 = Location.INTERIOR; }
47906             if (loc1$1 === Location.BOUNDARY) { loc1$1 = Location.INTERIOR; }
47907             switch (overlayOpCode) {
47908               case OverlayOp.INTERSECTION:
47909                 return loc0$1 === Location.INTERIOR && loc1$1 === Location.INTERIOR
47910               case OverlayOp.UNION:
47911                 return loc0$1 === Location.INTERIOR || loc1$1 === Location.INTERIOR
47912               case OverlayOp.DIFFERENCE:
47913                 return loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR
47914               case OverlayOp.SYMDIFFERENCE:
47915                 return (loc0$1 === Location.INTERIOR && loc1$1 !== Location.INTERIOR) || (loc0$1 !== Location.INTERIOR && loc1$1 === Location.INTERIOR)
47916             }
47917             return false
47918           }
47919         };
47920         OverlayOp.INTERSECTION = 1;
47921         OverlayOp.UNION = 2;
47922         OverlayOp.DIFFERENCE = 3;
47923         OverlayOp.SYMDIFFERENCE = 4;
47924
47925         var FuzzyPointLocator = function FuzzyPointLocator () {
47926           this._g = null;
47927           this._boundaryDistanceTolerance = null;
47928           this._linework = null;
47929           this._ptLocator = new PointLocator();
47930           this._seg = new LineSegment();
47931           var g = arguments[0];
47932           var boundaryDistanceTolerance = arguments[1];
47933           this._g = g;
47934           this._boundaryDistanceTolerance = boundaryDistanceTolerance;
47935           this._linework = this.extractLinework(g);
47936         };
47937         FuzzyPointLocator.prototype.isWithinToleranceOfBoundary = function isWithinToleranceOfBoundary (pt) {
47938             var this$1 = this;
47939
47940           for (var i = 0; i < this._linework.getNumGeometries(); i++) {
47941             var line = this$1._linework.getGeometryN(i);
47942             var seq = line.getCoordinateSequence();
47943             for (var j = 0; j < seq.size() - 1; j++) {
47944               seq.getCoordinate(j, this$1._seg.p0);
47945               seq.getCoordinate(j + 1, this$1._seg.p1);
47946               var dist = this$1._seg.distance(pt);
47947               if (dist <= this$1._boundaryDistanceTolerance) { return true }
47948             }
47949           }
47950           return false
47951         };
47952         FuzzyPointLocator.prototype.getLocation = function getLocation (pt) {
47953           if (this.isWithinToleranceOfBoundary(pt)) { return Location.BOUNDARY }
47954           return this._ptLocator.locate(pt, this._g)
47955         };
47956         FuzzyPointLocator.prototype.extractLinework = function extractLinework (g) {
47957           var extracter = new PolygonalLineworkExtracter();
47958           g.apply(extracter);
47959           var linework = extracter.getLinework();
47960           var lines = GeometryFactory.toLineStringArray(linework);
47961           return g.getFactory().createMultiLineString(lines)
47962         };
47963         FuzzyPointLocator.prototype.interfaces_ = function interfaces_ () {
47964           return []
47965         };
47966         FuzzyPointLocator.prototype.getClass = function getClass () {
47967           return FuzzyPointLocator
47968         };
47969
47970         var PolygonalLineworkExtracter = function PolygonalLineworkExtracter () {
47971           this._linework = null;
47972           this._linework = new ArrayList();
47973         };
47974         PolygonalLineworkExtracter.prototype.getLinework = function getLinework () {
47975           return this._linework
47976         };
47977         PolygonalLineworkExtracter.prototype.filter = function filter (g) {
47978             var this$1 = this;
47979
47980           if (g instanceof Polygon) {
47981             var poly = g;
47982             this._linework.add(poly.getExteriorRing());
47983             for (var i = 0; i < poly.getNumInteriorRing(); i++) {
47984               this$1._linework.add(poly.getInteriorRingN(i));
47985             }
47986           }
47987         };
47988         PolygonalLineworkExtracter.prototype.interfaces_ = function interfaces_ () {
47989           return [GeometryFilter]
47990         };
47991         PolygonalLineworkExtracter.prototype.getClass = function getClass () {
47992           return PolygonalLineworkExtracter
47993         };
47994
47995         var OffsetPointGenerator = function OffsetPointGenerator () {
47996           this._g = null;
47997           this._doLeft = true;
47998           this._doRight = true;
47999           var g = arguments[0];
48000           this._g = g;
48001         };
48002         OffsetPointGenerator.prototype.extractPoints = function extractPoints (line, offsetDistance, offsetPts) {
48003             var this$1 = this;
48004
48005           var pts = line.getCoordinates();
48006           for (var i = 0; i < pts.length - 1; i++) {
48007             this$1.computeOffsetPoints(pts[i], pts[i + 1], offsetDistance, offsetPts);
48008           }
48009         };
48010         OffsetPointGenerator.prototype.setSidesToGenerate = function setSidesToGenerate (doLeft, doRight) {
48011           this._doLeft = doLeft;
48012           this._doRight = doRight;
48013         };
48014         OffsetPointGenerator.prototype.getPoints = function getPoints (offsetDistance) {
48015             var this$1 = this;
48016
48017           var offsetPts = new ArrayList();
48018           var lines = LinearComponentExtracter.getLines(this._g);
48019           for (var i = lines.iterator(); i.hasNext();) {
48020             var line = i.next();
48021             this$1.extractPoints(line, offsetDistance, offsetPts);
48022           }
48023           return offsetPts
48024         };
48025         OffsetPointGenerator.prototype.computeOffsetPoints = function computeOffsetPoints (p0, p1, offsetDistance, offsetPts) {
48026           var dx = p1.x - p0.x;
48027           var dy = p1.y - p0.y;
48028           var len = Math.sqrt(dx * dx + dy * dy);
48029           var ux = offsetDistance * dx / len;
48030           var uy = offsetDistance * dy / len;
48031           var midX = (p1.x + p0.x) / 2;
48032           var midY = (p1.y + p0.y) / 2;
48033           if (this._doLeft) {
48034             var offsetLeft = new Coordinate(midX - uy, midY + ux);
48035             offsetPts.add(offsetLeft);
48036           }
48037           if (this._doRight) {
48038             var offsetRight = new Coordinate(midX + uy, midY - ux);
48039             offsetPts.add(offsetRight);
48040           }
48041         };
48042         OffsetPointGenerator.prototype.interfaces_ = function interfaces_ () {
48043           return []
48044         };
48045         OffsetPointGenerator.prototype.getClass = function getClass () {
48046           return OffsetPointGenerator
48047         };
48048
48049         var OverlayResultValidator = function OverlayResultValidator () {
48050           this._geom = null;
48051           this._locFinder = null;
48052           this._location = new Array(3).fill(null);
48053           this._invalidLocation = null;
48054           this._boundaryDistanceTolerance = OverlayResultValidator.TOLERANCE;
48055           this._testCoords = new ArrayList();
48056           var a = arguments[0];
48057           var b = arguments[1];
48058           var result = arguments[2];
48059           this._boundaryDistanceTolerance = OverlayResultValidator.computeBoundaryDistanceTolerance(a, b);
48060           this._geom = [a, b, result];
48061           this._locFinder = [new FuzzyPointLocator(this._geom[0], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[1], this._boundaryDistanceTolerance), new FuzzyPointLocator(this._geom[2], this._boundaryDistanceTolerance)];
48062         };
48063
48064         var staticAccessors$46 = { TOLERANCE: { configurable: true } };
48065         OverlayResultValidator.prototype.reportResult = function reportResult (overlayOp, location, expectedInterior) {
48066           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]));
48067         };
48068         OverlayResultValidator.prototype.isValid = function isValid (overlayOp) {
48069           this.addTestPts(this._geom[0]);
48070           this.addTestPts(this._geom[1]);
48071           var isValid = this.checkValid(overlayOp);
48072           return isValid
48073         };
48074         OverlayResultValidator.prototype.checkValid = function checkValid () {
48075             var this$1 = this;
48076
48077           if (arguments.length === 1) {
48078             var overlayOp = arguments[0];
48079             for (var i = 0; i < this._testCoords.size(); i++) {
48080               var pt = this$1._testCoords.get(i);
48081               if (!this$1.checkValid(overlayOp, pt)) {
48082                 this$1._invalidLocation = pt;
48083                 return false
48084               }
48085             }
48086             return true
48087           } else if (arguments.length === 2) {
48088             var overlayOp$1 = arguments[0];
48089             var pt$1 = arguments[1];
48090             this._location[0] = this._locFinder[0].getLocation(pt$1);
48091             this._location[1] = this._locFinder[1].getLocation(pt$1);
48092             this._location[2] = this._locFinder[2].getLocation(pt$1);
48093             if (OverlayResultValidator.hasLocation(this._location, Location.BOUNDARY)) { return true }
48094             return this.isValidResult(overlayOp$1, this._location)
48095           }
48096         };
48097         OverlayResultValidator.prototype.addTestPts = function addTestPts (g) {
48098           var ptGen = new OffsetPointGenerator(g);
48099           this._testCoords.addAll(ptGen.getPoints(5 * this._boundaryDistanceTolerance));
48100         };
48101         OverlayResultValidator.prototype.isValidResult = function isValidResult (overlayOp, location) {
48102           var expectedInterior = OverlayOp.isResultOfOp(location[0], location[1], overlayOp);
48103           var resultInInterior = location[2] === Location.INTERIOR;
48104           var isValid = !(expectedInterior ^ resultInInterior);
48105           if (!isValid) { this.reportResult(overlayOp, location, expectedInterior); }
48106           return isValid
48107         };
48108         OverlayResultValidator.prototype.getInvalidLocation = function getInvalidLocation () {
48109           return this._invalidLocation
48110         };
48111         OverlayResultValidator.prototype.interfaces_ = function interfaces_ () {
48112           return []
48113         };
48114         OverlayResultValidator.prototype.getClass = function getClass () {
48115           return OverlayResultValidator
48116         };
48117         OverlayResultValidator.hasLocation = function hasLocation (location, loc) {
48118           for (var i = 0; i < 3; i++) {
48119             if (location[i] === loc) { return true }
48120           }
48121           return false
48122         };
48123         OverlayResultValidator.computeBoundaryDistanceTolerance = function computeBoundaryDistanceTolerance (g0, g1) {
48124           return Math.min(GeometrySnapper.computeSizeBasedSnapTolerance(g0), GeometrySnapper.computeSizeBasedSnapTolerance(g1))
48125         };
48126         OverlayResultValidator.isValid = function isValid (a, b, overlayOp, result) {
48127           var validator = new OverlayResultValidator(a, b, result);
48128           return validator.isValid(overlayOp)
48129         };
48130         staticAccessors$46.TOLERANCE.get = function () { return 0.000001 };
48131
48132         Object.defineProperties( OverlayResultValidator, staticAccessors$46 );
48133
48134         // operation.overlay
48135
48136         var GeometryCombiner = function GeometryCombiner (geoms) {
48137           this._geomFactory = null;
48138           this._skipEmpty = false;
48139           this._inputGeoms = null;
48140           this._geomFactory = GeometryCombiner.extractFactory(geoms);
48141           this._inputGeoms = geoms;
48142         };
48143         GeometryCombiner.prototype.extractElements = function extractElements (geom, elems) {
48144             var this$1 = this;
48145
48146           if (geom === null) { return null }
48147           for (var i = 0; i < geom.getNumGeometries(); i++) {
48148             var elemGeom = geom.getGeometryN(i);
48149             if (this$1._skipEmpty && elemGeom.isEmpty()) { continue }
48150             elems.add(elemGeom);
48151           }
48152         };
48153         GeometryCombiner.prototype.combine = function combine () {
48154             var this$1 = this;
48155
48156           var elems = new ArrayList();
48157           for (var i = this._inputGeoms.iterator(); i.hasNext();) {
48158             var g = i.next();
48159             this$1.extractElements(g, elems);
48160           }
48161           if (elems.size() === 0) {
48162             if (this._geomFactory !== null) {
48163               return this._geomFactory.createGeometryCollection(null)
48164             }
48165             return null
48166           }
48167           return this._geomFactory.buildGeometry(elems)
48168         };
48169         GeometryCombiner.prototype.interfaces_ = function interfaces_ () {
48170           return []
48171         };
48172         GeometryCombiner.prototype.getClass = function getClass () {
48173           return GeometryCombiner
48174         };
48175         GeometryCombiner.combine = function combine () {
48176           if (arguments.length === 1) {
48177             var geoms = arguments[0];
48178             var combiner = new GeometryCombiner(geoms);
48179             return combiner.combine()
48180           } else if (arguments.length === 2) {
48181             var g0 = arguments[0];
48182             var g1 = arguments[1];
48183             var combiner$1 = new GeometryCombiner(GeometryCombiner.createList(g0, g1));
48184             return combiner$1.combine()
48185           } else if (arguments.length === 3) {
48186             var g0$1 = arguments[0];
48187             var g1$1 = arguments[1];
48188             var g2 = arguments[2];
48189             var combiner$2 = new GeometryCombiner(GeometryCombiner.createList(g0$1, g1$1, g2));
48190             return combiner$2.combine()
48191           }
48192         };
48193         GeometryCombiner.extractFactory = function extractFactory (geoms) {
48194           if (geoms.isEmpty()) { return null }
48195           return geoms.iterator().next().getFactory()
48196         };
48197         GeometryCombiner.createList = function createList () {
48198           if (arguments.length === 2) {
48199             var obj0 = arguments[0];
48200             var obj1 = arguments[1];
48201             var list = new ArrayList();
48202             list.add(obj0);
48203             list.add(obj1);
48204             return list
48205           } else if (arguments.length === 3) {
48206             var obj0$1 = arguments[0];
48207             var obj1$1 = arguments[1];
48208             var obj2 = arguments[2];
48209             var list$1 = new ArrayList();
48210             list$1.add(obj0$1);
48211             list$1.add(obj1$1);
48212             list$1.add(obj2);
48213             return list$1
48214           }
48215         };
48216
48217         var CascadedPolygonUnion = function CascadedPolygonUnion () {
48218           this._inputPolys = null;
48219           this._geomFactory = null;
48220           var polys = arguments[0];
48221           this._inputPolys = polys;
48222           if (this._inputPolys === null) { this._inputPolys = new ArrayList(); }
48223         };
48224
48225         var staticAccessors$47 = { STRTREE_NODE_CAPACITY: { configurable: true } };
48226         CascadedPolygonUnion.prototype.reduceToGeometries = function reduceToGeometries (geomTree) {
48227             var this$1 = this;
48228
48229           var geoms = new ArrayList();
48230           for (var i = geomTree.iterator(); i.hasNext();) {
48231             var o = i.next();
48232             var geom = null;
48233             if (hasInterface(o, List)) {
48234               geom = this$1.unionTree(o);
48235             } else if (o instanceof Geometry) {
48236               geom = o;
48237             }
48238             geoms.add(geom);
48239           }
48240           return geoms
48241         };
48242         CascadedPolygonUnion.prototype.extractByEnvelope = function extractByEnvelope (env, geom, disjointGeoms) {
48243           var intersectingGeoms = new ArrayList();
48244           for (var i = 0; i < geom.getNumGeometries(); i++) {
48245             var elem = geom.getGeometryN(i);
48246             if (elem.getEnvelopeInternal().intersects(env)) { intersectingGeoms.add(elem); } else { disjointGeoms.add(elem); }
48247           }
48248           return this._geomFactory.buildGeometry(intersectingGeoms)
48249         };
48250         CascadedPolygonUnion.prototype.unionOptimized = function unionOptimized (g0, g1) {
48251           var g0Env = g0.getEnvelopeInternal();
48252           var g1Env = g1.getEnvelopeInternal();
48253           if (!g0Env.intersects(g1Env)) {
48254             var combo = GeometryCombiner.combine(g0, g1);
48255             return combo
48256           }
48257           if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) { return this.unionActual(g0, g1) }
48258           var commonEnv = g0Env.intersection(g1Env);
48259           return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)
48260         };
48261         CascadedPolygonUnion.prototype.union = function union () {
48262           if (this._inputPolys === null) { throw new Error('union() method cannot be called twice') }
48263           if (this._inputPolys.isEmpty()) { return null }
48264           this._geomFactory = this._inputPolys.iterator().next().getFactory();
48265           var index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);
48266           for (var i = this._inputPolys.iterator(); i.hasNext();) {
48267             var item = i.next();
48268             index.insert(item.getEnvelopeInternal(), item);
48269           }
48270           this._inputPolys = null;
48271           var itemTree = index.itemsTree();
48272           var unionAll = this.unionTree(itemTree);
48273           return unionAll
48274         };
48275         CascadedPolygonUnion.prototype.binaryUnion = function binaryUnion () {
48276           if (arguments.length === 1) {
48277             var geoms = arguments[0];
48278             return this.binaryUnion(geoms, 0, geoms.size())
48279           } else if (arguments.length === 3) {
48280             var geoms$1 = arguments[0];
48281             var start = arguments[1];
48282             var end = arguments[2];
48283             if (end - start <= 1) {
48284               var g0 = CascadedPolygonUnion.getGeometry(geoms$1, start);
48285               return this.unionSafe(g0, null)
48286             } else if (end - start === 2) {
48287               return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms$1, start), CascadedPolygonUnion.getGeometry(geoms$1, start + 1))
48288             } else {
48289               var mid = Math.trunc((end + start) / 2);
48290               var g0$1 = this.binaryUnion(geoms$1, start, mid);
48291               var g1 = this.binaryUnion(geoms$1, mid, end);
48292               return this.unionSafe(g0$1, g1)
48293             }
48294           }
48295         };
48296         CascadedPolygonUnion.prototype.repeatedUnion = function repeatedUnion (geoms) {
48297           var union = null;
48298           for (var i = geoms.iterator(); i.hasNext();) {
48299             var g = i.next();
48300             if (union === null) { union = g.copy(); } else { union = union.union(g); }
48301           }
48302           return union
48303         };
48304         CascadedPolygonUnion.prototype.unionSafe = function unionSafe (g0, g1) {
48305           if (g0 === null && g1 === null) { return null }
48306           if (g0 === null) { return g1.copy() }
48307           if (g1 === null) { return g0.copy() }
48308           return this.unionOptimized(g0, g1)
48309         };
48310         CascadedPolygonUnion.prototype.unionActual = function unionActual (g0, g1) {
48311           return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))
48312         };
48313         CascadedPolygonUnion.prototype.unionTree = function unionTree (geomTree) {
48314           var geoms = this.reduceToGeometries(geomTree);
48315           var union = this.binaryUnion(geoms);
48316           return union
48317         };
48318         CascadedPolygonUnion.prototype.unionUsingEnvelopeIntersection = function unionUsingEnvelopeIntersection (g0, g1, common) {
48319           var disjointPolys = new ArrayList();
48320           var g0Int = this.extractByEnvelope(common, g0, disjointPolys);
48321           var g1Int = this.extractByEnvelope(common, g1, disjointPolys);
48322           var union = this.unionActual(g0Int, g1Int);
48323           disjointPolys.add(union);
48324           var overallUnion = GeometryCombiner.combine(disjointPolys);
48325           return overallUnion
48326         };
48327         CascadedPolygonUnion.prototype.bufferUnion = function bufferUnion () {
48328           if (arguments.length === 1) {
48329             var geoms = arguments[0];
48330             var factory = geoms.get(0).getFactory();
48331             var gColl = factory.buildGeometry(geoms);
48332             var unionAll = gColl.buffer(0.0);
48333             return unionAll
48334           } else if (arguments.length === 2) {
48335             var g0 = arguments[0];
48336             var g1 = arguments[1];
48337             var factory$1 = g0.getFactory();
48338             var gColl$1 = factory$1.createGeometryCollection([g0, g1]);
48339             var unionAll$1 = gColl$1.buffer(0.0);
48340             return unionAll$1
48341           }
48342         };
48343         CascadedPolygonUnion.prototype.interfaces_ = function interfaces_ () {
48344           return []
48345         };
48346         CascadedPolygonUnion.prototype.getClass = function getClass () {
48347           return CascadedPolygonUnion
48348         };
48349         CascadedPolygonUnion.restrictToPolygons = function restrictToPolygons (g) {
48350           if (hasInterface(g, Polygonal)) {
48351             return g
48352           }
48353           var polygons = PolygonExtracter.getPolygons(g);
48354           if (polygons.size() === 1) { return polygons.get(0) }
48355           return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))
48356         };
48357         CascadedPolygonUnion.getGeometry = function getGeometry (list, index) {
48358           if (index >= list.size()) { return null }
48359           return list.get(index)
48360         };
48361         CascadedPolygonUnion.union = function union (polys) {
48362           var op = new CascadedPolygonUnion(polys);
48363           return op.union()
48364         };
48365         staticAccessors$47.STRTREE_NODE_CAPACITY.get = function () { return 4 };
48366
48367         Object.defineProperties( CascadedPolygonUnion, staticAccessors$47 );
48368
48369         var UnionOp = function UnionOp () {};
48370
48371         UnionOp.prototype.interfaces_ = function interfaces_ () {
48372           return []
48373         };
48374         UnionOp.prototype.getClass = function getClass () {
48375           return UnionOp
48376         };
48377         UnionOp.union = function union (g, other) {
48378           if (g.isEmpty() || other.isEmpty()) {
48379             if (g.isEmpty() && other.isEmpty()) { return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory()) }
48380             if (g.isEmpty()) { return other.copy() }
48381             if (other.isEmpty()) { return g.copy() }
48382           }
48383           g.checkNotGeometryCollection(g);
48384           g.checkNotGeometryCollection(other);
48385           return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)
48386         };
48387
48388         /**
48389          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
48390          */
48391
48392         /**
48393          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
48394          *
48395          * @name feature
48396          * @param {Geometry} geometry input geometry
48397          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
48398          * @param {Object} [options={}] Optional Parameters
48399          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
48400          * @param {string|number} [options.id] Identifier associated with the Feature
48401          * @returns {Feature} a GeoJSON Feature
48402          * @example
48403          * var geometry = {
48404          *   "type": "Point",
48405          *   "coordinates": [110, 50]
48406          * };
48407          *
48408          * var feature = turf.feature(geometry);
48409          *
48410          * //=feature
48411          */
48412         function feature$1(geometry, properties, options) {
48413             // Optional Parameters
48414             options = options || {};
48415             if (!isObject$1(options)) { throw new Error('options is invalid'); }
48416             var bbox = options.bbox;
48417             var id = options.id;
48418
48419             // Validation
48420             if (geometry === undefined) { throw new Error('geometry is required'); }
48421             if (properties && properties.constructor !== Object) { throw new Error('properties must be an Object'); }
48422             if (bbox) { validateBBox(bbox); }
48423             if (id) { validateId(id); }
48424
48425             // Main
48426             var feat = {type: 'Feature'};
48427             if (id) { feat.id = id; }
48428             if (bbox) { feat.bbox = bbox; }
48429             feat.properties = properties || {};
48430             feat.geometry = geometry;
48431             return feat;
48432         }
48433
48434         /**
48435          * isNumber
48436          *
48437          * @param {*} num Number to validate
48438          * @returns {boolean} true/false
48439          * @example
48440          * turf.isNumber(123)
48441          * //=true
48442          * turf.isNumber('foo')
48443          * //=false
48444          */
48445         function isNumber(num) {
48446             return !isNaN(num) && num !== null && !Array.isArray(num);
48447         }
48448
48449         /**
48450          * isObject
48451          *
48452          * @param {*} input variable to validate
48453          * @returns {boolean} true/false
48454          * @example
48455          * turf.isObject({elevation: 10})
48456          * //=true
48457          * turf.isObject('foo')
48458          * //=false
48459          */
48460         function isObject$1(input) {
48461             return (!!input) && (input.constructor === Object);
48462         }
48463
48464         /**
48465          * Validate BBox
48466          *
48467          * @private
48468          * @param {Array<number>} bbox BBox to validate
48469          * @returns {void}
48470          * @throws Error if BBox is not valid
48471          * @example
48472          * validateBBox([-180, -40, 110, 50])
48473          * //=OK
48474          * validateBBox([-180, -40])
48475          * //=Error
48476          * validateBBox('Foo')
48477          * //=Error
48478          * validateBBox(5)
48479          * //=Error
48480          * validateBBox(null)
48481          * //=Error
48482          * validateBBox(undefined)
48483          * //=Error
48484          */
48485         function validateBBox(bbox) {
48486             if (!bbox) { throw new Error('bbox is required'); }
48487             if (!Array.isArray(bbox)) { throw new Error('bbox must be an Array'); }
48488             if (bbox.length !== 4 && bbox.length !== 6) { throw new Error('bbox must be an Array of 4 or 6 numbers'); }
48489             bbox.forEach(function (num) {
48490                 if (!isNumber(num)) { throw new Error('bbox must only contain numbers'); }
48491             });
48492         }
48493
48494         /**
48495          * Validate Id
48496          *
48497          * @private
48498          * @param {string|number} id Id to validate
48499          * @returns {void}
48500          * @throws Error if Id is not valid
48501          * @example
48502          * validateId([-180, -40, 110, 50])
48503          * //=Error
48504          * validateId([-180, -40])
48505          * //=Error
48506          * validateId('Foo')
48507          * //=OK
48508          * validateId(5)
48509          * //=OK
48510          * validateId(null)
48511          * //=Error
48512          * validateId(undefined)
48513          * //=Error
48514          */
48515         function validateId(id) {
48516             if (!id) { throw new Error('id is required'); }
48517             if (['string', 'number'].indexOf(typeof id) === -1) { throw new Error('id must be a number or a string'); }
48518         }
48519
48520         /**
48521          * Callback for geomEach
48522          *
48523          * @callback geomEachCallback
48524          * @param {Geometry} currentGeometry The current Geometry being processed.
48525          * @param {number} featureIndex The current index of the Feature being processed.
48526          * @param {Object} featureProperties The current Feature Properties being processed.
48527          * @param {Array<number>} featureBBox The current Feature BBox being processed.
48528          * @param {number|string} featureId The current Feature Id being processed.
48529          */
48530
48531         /**
48532          * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()
48533          *
48534          * @name geomEach
48535          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
48536          * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
48537          * @returns {void}
48538          * @example
48539          * var features = turf.featureCollection([
48540          *     turf.point([26, 37], {foo: 'bar'}),
48541          *     turf.point([36, 53], {hello: 'world'})
48542          * ]);
48543          *
48544          * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
48545          *   //=currentGeometry
48546          *   //=featureIndex
48547          *   //=featureProperties
48548          *   //=featureBBox
48549          *   //=featureId
48550          * });
48551          */
48552         function geomEach(geojson, callback) {
48553             var i, j, g, geometry, stopG,
48554                 geometryMaybeCollection,
48555                 isGeometryCollection,
48556                 featureProperties,
48557                 featureBBox,
48558                 featureId,
48559                 featureIndex = 0,
48560                 isFeatureCollection = geojson.type === 'FeatureCollection',
48561                 isFeature = geojson.type === 'Feature',
48562                 stop = isFeatureCollection ? geojson.features.length : 1;
48563
48564             // This logic may look a little weird. The reason why it is that way
48565             // is because it's trying to be fast. GeoJSON supports multiple kinds
48566             // of objects at its root: FeatureCollection, Features, Geometries.
48567             // This function has the responsibility of handling all of them, and that
48568             // means that some of the `for` loops you see below actually just don't apply
48569             // to certain inputs. For instance, if you give this just a
48570             // Point geometry, then both loops are short-circuited and all we do
48571             // is gradually rename the input until it's called 'geometry'.
48572             //
48573             // This also aims to allocate as few resources as possible: just a
48574             // few numbers and booleans, rather than any temporary arrays as would
48575             // be required with the normalization approach.
48576             for (i = 0; i < stop; i++) {
48577
48578                 geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :
48579                     (isFeature ? geojson.geometry : geojson));
48580                 featureProperties = (isFeatureCollection ? geojson.features[i].properties :
48581                     (isFeature ? geojson.properties : {}));
48582                 featureBBox = (isFeatureCollection ? geojson.features[i].bbox :
48583                     (isFeature ? geojson.bbox : undefined));
48584                 featureId = (isFeatureCollection ? geojson.features[i].id :
48585                     (isFeature ? geojson.id : undefined));
48586                 isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
48587                 stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
48588
48589                 for (g = 0; g < stopG; g++) {
48590                     geometry = isGeometryCollection ?
48591                         geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
48592
48593                     // Handle null Geometry
48594                     if (geometry === null) {
48595                         if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
48596                         continue;
48597                     }
48598                     switch (geometry.type) {
48599                     case 'Point':
48600                     case 'LineString':
48601                     case 'MultiPoint':
48602                     case 'Polygon':
48603                     case 'MultiLineString':
48604                     case 'MultiPolygon': {
48605                         if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
48606                         break;
48607                     }
48608                     case 'GeometryCollection': {
48609                         for (j = 0; j < geometry.geometries.length; j++) {
48610                             if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) { return false; }
48611                         }
48612                         break;
48613                     }
48614                     default:
48615                         throw new Error('Unknown Geometry Type');
48616                     }
48617                 }
48618                 // Only increase `featureIndex` per each feature
48619                 featureIndex++;
48620             }
48621         }
48622
48623         /**
48624          * Callback for geomReduce
48625          *
48626          * The first time the callback function is called, the values provided as arguments depend
48627          * on whether the reduce method has an initialValue argument.
48628          *
48629          * If an initialValue is provided to the reduce method:
48630          *  - The previousValue argument is initialValue.
48631          *  - The currentValue argument is the value of the first element present in the array.
48632          *
48633          * If an initialValue is not provided:
48634          *  - The previousValue argument is the value of the first element present in the array.
48635          *  - The currentValue argument is the value of the second element present in the array.
48636          *
48637          * @callback geomReduceCallback
48638          * @param {*} previousValue The accumulated value previously returned in the last invocation
48639          * of the callback, or initialValue, if supplied.
48640          * @param {Geometry} currentGeometry The current Geometry being processed.
48641          * @param {number} featureIndex The current index of the Feature being processed.
48642          * @param {Object} featureProperties The current Feature Properties being processed.
48643          * @param {Array<number>} featureBBox The current Feature BBox being processed.
48644          * @param {number|string} featureId The current Feature Id being processed.
48645          */
48646
48647         /**
48648          * Reduce geometry in any GeoJSON object, similar to Array.reduce().
48649          *
48650          * @name geomReduce
48651          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
48652          * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
48653          * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
48654          * @returns {*} The value that results from the reduction.
48655          * @example
48656          * var features = turf.featureCollection([
48657          *     turf.point([26, 37], {foo: 'bar'}),
48658          *     turf.point([36, 53], {hello: 'world'})
48659          * ]);
48660          *
48661          * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
48662          *   //=previousValue
48663          *   //=currentGeometry
48664          *   //=featureIndex
48665          *   //=featureProperties
48666          *   //=featureBBox
48667          *   //=featureId
48668          *   return currentGeometry
48669          * });
48670          */
48671         function geomReduce(geojson, callback, initialValue) {
48672             var previousValue = initialValue;
48673             geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
48674                 if (featureIndex === 0 && initialValue === undefined) { previousValue = currentGeometry; }
48675                 else { previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId); }
48676             });
48677             return previousValue;
48678         }
48679
48680         /**
48681          * Callback for flattenEach
48682          *
48683          * @callback flattenEachCallback
48684          * @param {Feature} currentFeature The current flattened feature being processed.
48685          * @param {number} featureIndex The current index of the Feature being processed.
48686          * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
48687          */
48688
48689         /**
48690          * Iterate over flattened features in any GeoJSON object, similar to
48691          * Array.forEach.
48692          *
48693          * @name flattenEach
48694          * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
48695          * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)
48696          * @example
48697          * var features = turf.featureCollection([
48698          *     turf.point([26, 37], {foo: 'bar'}),
48699          *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
48700          * ]);
48701          *
48702          * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {
48703          *   //=currentFeature
48704          *   //=featureIndex
48705          *   //=multiFeatureIndex
48706          * });
48707          */
48708         function flattenEach(geojson, callback) {
48709             geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {
48710                 // Callback for single geometry
48711                 var type = (geometry === null) ? null : geometry.type;
48712                 switch (type) {
48713                 case null:
48714                 case 'Point':
48715                 case 'LineString':
48716                 case 'Polygon':
48717                     if (callback(feature$1(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) { return false; }
48718                     return;
48719                 }
48720
48721                 var geomType;
48722
48723                 // Callback for multi-geometry
48724                 switch (type) {
48725                 case 'MultiPoint':
48726                     geomType = 'Point';
48727                     break;
48728                 case 'MultiLineString':
48729                     geomType = 'LineString';
48730                     break;
48731                 case 'MultiPolygon':
48732                     geomType = 'Polygon';
48733                     break;
48734                 }
48735
48736                 for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {
48737                     var coordinate = geometry.coordinates[multiFeatureIndex];
48738                     var geom = {
48739                         type: geomType,
48740                         coordinates: coordinate
48741                     };
48742                     if (callback(feature$1(geom, properties), featureIndex, multiFeatureIndex) === false) { return false; }
48743                 }
48744             });
48745         }
48746
48747         /**
48748          * Takes one or more features and returns their area in square meters.
48749          *
48750          * @name area
48751          * @param {GeoJSON} geojson input GeoJSON feature(s)
48752          * @returns {number} area in square meters
48753          * @example
48754          * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
48755          *
48756          * var area = turf.area(polygon);
48757          *
48758          * //addToMap
48759          * var addToMap = [polygon]
48760          * polygon.properties.area = area
48761          */
48762         function area$2(geojson) {
48763             return geomReduce(geojson, function (value, geom) {
48764                 return value + calculateArea(geom);
48765             }, 0);
48766         }
48767
48768         var RADIUS$1 = 6378137;
48769         // var FLATTENING_DENOM = 298.257223563;
48770         // var FLATTENING = 1 / FLATTENING_DENOM;
48771         // var POLAR_RADIUS = RADIUS * (1 - FLATTENING);
48772
48773         /**
48774          * Calculate Area
48775          *
48776          * @private
48777          * @param {GeoJSON} geojson GeoJSON
48778          * @returns {number} area
48779          */
48780         function calculateArea(geojson) {
48781             var area = 0, i;
48782             switch (geojson.type) {
48783             case 'Polygon':
48784                 return polygonArea$1(geojson.coordinates);
48785             case 'MultiPolygon':
48786                 for (i = 0; i < geojson.coordinates.length; i++) {
48787                     area += polygonArea$1(geojson.coordinates[i]);
48788                 }
48789                 return area;
48790             case 'Point':
48791             case 'MultiPoint':
48792             case 'LineString':
48793             case 'MultiLineString':
48794                 return 0;
48795             case 'GeometryCollection':
48796                 for (i = 0; i < geojson.geometries.length; i++) {
48797                     area += calculateArea(geojson.geometries[i]);
48798                 }
48799                 return area;
48800             }
48801         }
48802
48803         function polygonArea$1(coords) {
48804             var area = 0;
48805             if (coords && coords.length > 0) {
48806                 area += Math.abs(ringArea$1(coords[0]));
48807                 for (var i = 1; i < coords.length; i++) {
48808                     area -= Math.abs(ringArea$1(coords[i]));
48809                 }
48810             }
48811             return area;
48812         }
48813
48814         /**
48815          * @private
48816          * Calculate the approximate area of the polygon were it projected onto the earth.
48817          * Note that this area will be positive if ring is oriented clockwise, otherwise it will be negative.
48818          *
48819          * Reference:
48820          * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
48821          * Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
48822          *
48823          * @param {Array<Array<number>>} coords Ring Coordinates
48824          * @returns {number} The approximate signed geodesic area of the polygon in square meters.
48825          */
48826         function ringArea$1(coords) {
48827             var p1;
48828             var p2;
48829             var p3;
48830             var lowerIndex;
48831             var middleIndex;
48832             var upperIndex;
48833             var i;
48834             var area = 0;
48835             var coordsLength = coords.length;
48836
48837             if (coordsLength > 2) {
48838                 for (i = 0; i < coordsLength; i++) {
48839                     if (i === coordsLength - 2) { // i = N-2
48840                         lowerIndex = coordsLength - 2;
48841                         middleIndex = coordsLength - 1;
48842                         upperIndex = 0;
48843                     } else if (i === coordsLength - 1) { // i = N-1
48844                         lowerIndex = coordsLength - 1;
48845                         middleIndex = 0;
48846                         upperIndex = 1;
48847                     } else { // i = 0 to N-3
48848                         lowerIndex = i;
48849                         middleIndex = i + 1;
48850                         upperIndex = i + 2;
48851                     }
48852                     p1 = coords[lowerIndex];
48853                     p2 = coords[middleIndex];
48854                     p3 = coords[upperIndex];
48855                     area += (rad$1(p3[0]) - rad$1(p1[0])) * Math.sin(rad$1(p2[1]));
48856                 }
48857
48858                 area = area * RADIUS$1 * RADIUS$1 / 2;
48859             }
48860
48861             return area;
48862         }
48863
48864         function rad$1(_) {
48865             return _ * Math.PI / 180;
48866         }
48867
48868         /**
48869          * Get Geometry from Feature or Geometry Object
48870          *
48871          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
48872          * @returns {Geometry|null} GeoJSON Geometry Object
48873          * @throws {Error} if geojson is not a Feature or Geometry Object
48874          * @example
48875          * var point = {
48876          *   "type": "Feature",
48877          *   "properties": {},
48878          *   "geometry": {
48879          *     "type": "Point",
48880          *     "coordinates": [110, 40]
48881          *   }
48882          * }
48883          * var geom = turf.getGeom(point)
48884          * //={"type": "Point", "coordinates": [110, 40]}
48885          */
48886         function getGeom(geojson) {
48887             if (!geojson) { throw new Error('geojson is required'); }
48888             if (geojson.geometry !== undefined) { return geojson.geometry; }
48889             if (geojson.coordinates || geojson.geometries) { return geojson; }
48890             throw new Error('geojson must be a valid Feature or Geometry Object');
48891         }
48892
48893         /**
48894          * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.
48895          *
48896          * @name difference
48897          * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature
48898          * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1
48899          * @returns {Feature<Polygon|MultiPolygon>|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)
48900          * @example
48901          * var polygon1 = turf.polygon([[
48902          *   [128, -26],
48903          *   [141, -26],
48904          *   [141, -21],
48905          *   [128, -21],
48906          *   [128, -26]
48907          * ]], {
48908          *   "fill": "#F00",
48909          *   "fill-opacity": 0.1
48910          * });
48911          * var polygon2 = turf.polygon([[
48912          *   [126, -28],
48913          *   [140, -28],
48914          *   [140, -20],
48915          *   [126, -20],
48916          *   [126, -28]
48917          * ]], {
48918          *   "fill": "#00F",
48919          *   "fill-opacity": 0.1
48920          * });
48921          *
48922          * var difference = turf.difference(polygon1, polygon2);
48923          *
48924          * //addToMap
48925          * var addToMap = [polygon1, polygon2, difference];
48926          */
48927         function difference(polygon1, polygon2) {
48928             var geom1 = getGeom(polygon1);
48929             var geom2 = getGeom(polygon2);
48930             var properties = polygon1.properties || {};
48931
48932             // Issue #721 - JSTS can't handle empty polygons
48933             geom1 = removeEmptyPolygon(geom1);
48934             geom2 = removeEmptyPolygon(geom2);
48935             if (!geom1) { return null; }
48936             if (!geom2) { return feature$1(geom1, properties); }
48937
48938             // JSTS difference operation
48939             var reader = new GeoJSONReader();
48940             var a = reader.read(geom1);
48941             var b = reader.read(geom2);
48942             var differenced = OverlayOp.difference(a, b);
48943             if (differenced.isEmpty()) { return null; }
48944             var writer = new GeoJSONWriter();
48945             var geom = writer.write(differenced);
48946
48947             return feature$1(geom, properties);
48948         }
48949
48950         /**
48951          * Detect Empty Polygon
48952          *
48953          * @private
48954          * @param {Geometry<Polygon|MultiPolygon>} geom Geometry Object
48955          * @returns {Geometry<Polygon|MultiPolygon>|null} removed any polygons with no areas
48956          */
48957         function removeEmptyPolygon(geom) {
48958             switch (geom.type) {
48959             case 'Polygon':
48960                 if (area$2(geom) > 1) { return geom; }
48961                 return null;
48962             case 'MultiPolygon':
48963                 var coordinates = [];
48964                 flattenEach(geom, function (feature$$1) {
48965                     if (area$2(feature$$1) > 1) { coordinates.push(feature$$1.geometry.coordinates); }
48966                 });
48967                 if (coordinates.length) { return {type: 'MultiPolygon', coordinates: coordinates}; }
48968             }
48969         }
48970
48971         /**
48972          * 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.
48973          *
48974          * @name union
48975          * @param {...Feature<Polygon>} A polygon to combine
48976          * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature
48977          * @example
48978          * var poly1 = turf.polygon([[
48979          *     [-82.574787, 35.594087],
48980          *     [-82.574787, 35.615581],
48981          *     [-82.545261, 35.615581],
48982          *     [-82.545261, 35.594087],
48983          *     [-82.574787, 35.594087]
48984          * ]], {"fill": "#0f0"});
48985          * var poly2 = turf.polygon([[
48986          *     [-82.560024, 35.585153],
48987          *     [-82.560024, 35.602602],
48988          *     [-82.52964, 35.602602],
48989          *     [-82.52964, 35.585153],
48990          *     [-82.560024, 35.585153]
48991          * ]], {"fill": "#00f"});
48992          *
48993          * var union = turf.union(poly1, poly2);
48994          *
48995          * //addToMap
48996          * var addToMap = [poly1, poly2, union];
48997          */
48998         function union() {
48999             var arguments$1 = arguments;
49000
49001             var reader = new GeoJSONReader();
49002             var result = reader.read(JSON.stringify(arguments[0].geometry));
49003
49004             for (var i = 1; i < arguments.length; i++) {
49005                 result = UnionOp.union(result, reader.read(JSON.stringify(arguments$1[i].geometry)));
49006             }
49007
49008             var writer = new GeoJSONWriter();
49009             result = writer.write(result);
49010
49011             return {
49012                 type: 'Feature',
49013                 geometry: result,
49014                 properties: arguments[0].properties
49015             };
49016         }
49017
49018         // Reduce an array of locations into a single GeoJSON feature
49019         function _locationReducer(accumulator, location) {
49020           var result = this.locationToFeature(location);   // eslint-disable-line no-invalid-this
49021           if (!result || !result.feature) {
49022             console.warn(("Warning:  Couldn't resolve location \"" + location + "\""));  // eslint-disable-line no-console
49023             return accumulator;
49024           }
49025           return !accumulator ? result.feature : union(accumulator, result.feature);
49026         }
49027
49028
49029         // It's ok to sort location lists because they all end up unioned together.
49030         function _locationSorter(a, b) {
49031           var rank = { countrycoder: 1, geojson: 2, point: 3 };
49032           var aRank = rank[this.isValidLocation(a)] || 4;   // eslint-disable-line no-invalid-this
49033           var bRank = rank[this.isValidLocation(b)] || 4;   // eslint-disable-line no-invalid-this
49034
49035           if (aRank > bRank) { return 1; }
49036           if (aRank < bRank) { return -1; }
49037
49038           // numeric sort point [lon,lat] locations
49039           if (aRank === 3 && bRank === 3) {
49040             return (a[0] - b[0] > 0) ? 1
49041               : (a[0] - b[0] < 0) ? -1
49042               : (a[1] - b[1]);
49043           }
49044
49045           // lexical sort other identifiers
49046           return a.localeCompare(b);
49047         }
49048
49049
49050
49051         var defaultExport = function defaultExport(fc) {
49052           var this$1 = this;
49053
49054           this._cache = {};
49055           this._features = {};
49056
49057           // process input FeatureCollection
49058           if (fc && fc.type === 'FeatureCollection' && Array.isArray(fc.features)) {
49059             fc.features.forEach(function (feature) {
49060               feature.properties = feature.properties || {};
49061               var props = feature.properties;
49062
49063               // get `id` from either `id` or `properties`
49064               var id = feature.id || props.id;
49065               if (!id || !/^\S+\.geojson$/i.test(id)) { return; }
49066
49067               // ensure id
49068               feature.id = id;
49069               props.id = id;
49070
49071               // ensure area property
49072               if (!props.area) {
49073                 var area = geojsonArea.geometry(feature.geometry) / 1e6;// m² to km²
49074                 props.area = Number(area.toFixed(2));
49075               }
49076
49077               this$1._features[id] = feature;
49078             });
49079           }
49080
49081           // Update CountryCoder world geometry to be a polygon covering the world.
49082           // (yes, modifying the internal CountryCoder geometry is hacky, but seems safe)
49083           var world = feature('001');
49084           world.geometry = {
49085             type: 'Polygon',
49086             coordinates: [[[-180, -90], [-180, 90], [180, 90], [180, -90], [-180, -90]]]
49087           };
49088         };
49089
49090
49091         // isValidLocation
49092         //
49093         // Pass a `location` identifier
49094         // Returns 'point', 'geojson', or 'countrycoder' if valid, false otherwise
49095         defaultExport.prototype.isValidLocation = function isValidLocation (location) {
49096           if (Array.isArray(location)) { // a [lon,lat] coordinate pair?
49097             return !!(
49098               location.length === 2 && Number.isFinite(location[0]) && Number.isFinite(location[1]) &&
49099               location[0] >= -180 && location[0] <= 180 && location[1] >= -90 && location[1] <= 90
49100             ) && 'point';
49101
49102           } else if (/^\S+\.geojson$/i.test(location)) { // a .geojson filename?
49103             return !!this._features[location] && 'geojson';
49104
49105           } else {  // a country-coder string?
49106             var ccmatch = feature(location);
49107             return !!ccmatch && 'countrycoder';
49108           }
49109         };
49110
49111
49112         // locationToFeature
49113         //
49114         // Pass a `location` identifier
49115         // Returns a GeoJSON feature
49116         defaultExport.prototype.locationToFeature = function locationToFeature (location) {
49117           // a [lon,lat] coordinate pair?
49118           if (Array.isArray(location)) {
49119             if (location.length === 2 && Number.isFinite(location[0]) && Number.isFinite(location[1]) &&
49120               location[0] >= -180 && location[0] <= 180 && location[1] >= -90 && location[1] <= 90
49121             ) {
49122               var RADIUS = 25000;// meters
49123               var EDGES = 10;
49124               var PRECISION = 3;
49125               var id = 'point:' + location.toString();
49126               var area = Math.PI * RADIUS * RADIUS / 1e6;   // m² to km²
49127
49128               var feature$1 = this._cache[id];
49129               if (!feature$1) {
49130                 feature$1 = this._cache[id] = geojsonPrecision({
49131                   type: 'Feature',
49132                   id: id,
49133                   properties: { id: id, area: Number(area.toFixed(2)) },
49134                   geometry: circleToPolygon(location, RADIUS, EDGES)
49135                 }, PRECISION);
49136               }
49137               return { type: 'point', feature: feature$1 };
49138
49139             } else {
49140               return null;
49141             }
49142
49143            // a .geojson filename?
49144            } else if (/^\S+\.geojson$/i.test(location)) {
49145             var feature$1$1 = this._features[location];
49146             if (feature$1$1) {
49147               return { type: 'geojson', feature: feature$1$1 };
49148             } else {
49149               return null;
49150             }
49151
49152           // a country-coder string?
49153           } else {
49154             var feature$2 = feature(location);
49155             if (feature$2) {
49156               feature$2.properties = feature$2.properties || {};
49157               var props = feature$2.properties;
49158
49159               // -> This block of code is weird and requires some explanation. <-
49160               // CountryCoder includes higher level features which are made up of members.
49161               // These features don't have their own geometry, but CountryCoder provides an
49162               // `aggregateFeature` method to combine these members into a MultiPolygon.
49163               // BUT, when we try to actually work with these aggregated MultiPolygons,
49164               // Turf/JSTS gets crashy because of topography bugs.
49165               // SO, we'll aggregate the features ourselves by unioning them together,
49166               // then store the resulting geometry back in the CountryCoder feature itself.
49167               // This approach also has the benefit of removing all the internal boaders and
49168               // simplifying the regional polygons a lot.
49169               // (yes, modifying the internal CountryCoder geometry is hacky, but seems safe)
49170               if (!feature$2.geometry) {
49171                 var aggregate = props.members.reduce(_locationReducer.bind(this), null);
49172                 feature$2.geometry = aggregate.geometry;
49173               }
49174
49175               // ensure area property
49176               if (!props.area) {
49177                 var area$1 = geojsonArea.geometry(feature$2.geometry) / 1e6;// m² to km²
49178                 props.area = Number(area$1.toFixed(2));
49179               }
49180
49181               // ensure id
49182               var id$1 = (props.iso1A2 || props.iso1N3 || props.m49 || props.M49).toString();
49183               feature$2.id = id$1;
49184               props.id = id$1;
49185
49186               return { type: 'countrycoder', feature: feature$2 };
49187
49188             } else {
49189               return null;
49190             }
49191           }
49192         };
49193
49194
49195         // resolveLocationSet
49196         //
49197         // Pass a `locationSet` Object like:
49198         // `{ include: [ Array ], exclude: [ Array ] }`
49199         // Returns a stable identifier string of the form:
49200         // "+[included]-[excluded]"
49201         //
49202         defaultExport.prototype.resolveLocationSet = function resolveLocationSet (locationSet) {
49203             var this$1 = this;
49204
49205           locationSet = locationSet || {};
49206           var include = (locationSet.include || []).filter(function (l) { return this$1.isValidLocation(l); });
49207           var exclude = (locationSet.exclude || []).filter(function (l) { return this$1.isValidLocation(l); });
49208
49209           if (include.length) {
49210             include.sort(_locationSorter.bind(this));
49211           } else {
49212             include = ['001']; // default to 'the world'
49213           }
49214
49215           // return quickly if it's a single included location..
49216           if (include.length === 1 && exclude.length === 0) {
49217             var result = this.locationToFeature(include[0]);
49218             return result && result.feature;
49219           }
49220
49221           // generate stable identifier
49222           var id = '+' + toIdString(include);
49223           if (exclude.length) {
49224             exclude.sort(_locationSorter.bind(this));
49225             id += '-' + toIdString(exclude);
49226           }
49227
49228           // return cached?
49229           if (this._cache[id]) {
49230             return this._cache[id];
49231           }
49232
49233           // resolve lists
49234           var includeGeoJSON = include.reduce(_locationReducer.bind(this), null);
49235           var excludeGeoJSON = exclude.reduce(_locationReducer.bind(this), null);
49236
49237           // calculate include-exclude, recalc area and return result
49238           var resultGeoJSON = excludeGeoJSON ? difference(includeGeoJSON, excludeGeoJSON) : includeGeoJSON;
49239           var area = geojsonArea.geometry(resultGeoJSON.geometry) / 1e6;// m² to km²
49240
49241           resultGeoJSON.id = id;
49242           resultGeoJSON.properties = { id: id, area: Number(area.toFixed(2)) };
49243           this._cache[id] = resultGeoJSON;
49244
49245           return resultGeoJSON;
49246
49247
49248           function toIdString(arr) {
49249             return JSON.stringify(arr).replace(/"/g,'').toLowerCase();
49250           }
49251         };
49252
49253         // index the osm-community-index
49254         var ociFeatures = {};
49255         var loco = new defaultExport({ type: 'FeatureCollection', features: features });
49256
49257         Object.values(resources).forEach(function (resource) {
49258           var feature = loco.resolveLocationSet(resource.locationSet);
49259           var ociFeature = ociFeatures[feature.id];
49260           if (!ociFeature) {
49261             ociFeature = JSON.parse(JSON.stringify(feature));  // deep clone
49262             ociFeature.properties.resourceIDs = new Set();
49263             ociFeatures[feature.id] = ociFeature;
49264           }
49265           ociFeature.properties.resourceIDs.add(resource.id);
49266         });
49267
49268
49269         var data = {
49270           community: {
49271             features: ociFeatures,
49272             resources: resources,
49273             query: whichPolygon_1({ type: 'FeatureCollection', features: Object.values(ociFeatures) })
49274           },
49275           imagery: dataImagery,  //legacy
49276           presets: {
49277             presets: presets,
49278             defaults: defaults,
49279             categories: categories,
49280             fields: fields
49281           }
49282         };
49283
49284         var aesJs = createCommonjsModule(function (module, exports) {
49285         /*! MIT License. Copyright 2015-2018 Richard Moore <me@ricmoo.com>. See LICENSE.txt. */
49286         (function(root) {
49287
49288             function checkInt(value) {
49289                 return (parseInt(value) === value);
49290             }
49291
49292             function checkInts(arrayish) {
49293                 if (!checkInt(arrayish.length)) { return false; }
49294
49295                 for (var i = 0; i < arrayish.length; i++) {
49296                     if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {
49297                         return false;
49298                     }
49299                 }
49300
49301                 return true;
49302             }
49303
49304             function coerceArray(arg, copy) {
49305
49306                 // ArrayBuffer view
49307                 if (arg.buffer && arg.name === 'Uint8Array') {
49308
49309                     if (copy) {
49310                         if (arg.slice) {
49311                             arg = arg.slice();
49312                         } else {
49313                             arg = Array.prototype.slice.call(arg);
49314                         }
49315                     }
49316
49317                     return arg;
49318                 }
49319
49320                 // It's an array; check it is a valid representation of a byte
49321                 if (Array.isArray(arg)) {
49322                     if (!checkInts(arg)) {
49323                         throw new Error('Array contains invalid value: ' + arg);
49324                     }
49325
49326                     return new Uint8Array(arg);
49327                 }
49328
49329                 // Something else, but behaves like an array (maybe a Buffer? Arguments?)
49330                 if (checkInt(arg.length) && checkInts(arg)) {
49331                     return new Uint8Array(arg);
49332                 }
49333
49334                 throw new Error('unsupported array-like object');
49335             }
49336
49337             function createArray(length) {
49338                 return new Uint8Array(length);
49339             }
49340
49341             function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {
49342                 if (sourceStart != null || sourceEnd != null) {
49343                     if (sourceArray.slice) {
49344                         sourceArray = sourceArray.slice(sourceStart, sourceEnd);
49345                     } else {
49346                         sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);
49347                     }
49348                 }
49349                 targetArray.set(sourceArray, targetStart);
49350             }
49351
49352
49353
49354             var convertUtf8 = (function() {
49355                 function toBytes(text) {
49356                     var result = [], i = 0;
49357                     text = encodeURI(text);
49358                     while (i < text.length) {
49359                         var c = text.charCodeAt(i++);
49360
49361                         // if it is a % sign, encode the following 2 bytes as a hex value
49362                         if (c === 37) {
49363                             result.push(parseInt(text.substr(i, 2), 16));
49364                             i += 2;
49365
49366                         // otherwise, just the actual byte
49367                         } else {
49368                             result.push(c);
49369                         }
49370                     }
49371
49372                     return coerceArray(result);
49373                 }
49374
49375                 function fromBytes(bytes) {
49376                     var result = [], i = 0;
49377
49378                     while (i < bytes.length) {
49379                         var c = bytes[i];
49380
49381                         if (c < 128) {
49382                             result.push(String.fromCharCode(c));
49383                             i++;
49384                         } else if (c > 191 && c < 224) {
49385                             result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));
49386                             i += 2;
49387                         } else {
49388                             result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));
49389                             i += 3;
49390                         }
49391                     }
49392
49393                     return result.join('');
49394                 }
49395
49396                 return {
49397                     toBytes: toBytes,
49398                     fromBytes: fromBytes,
49399                 }
49400             })();
49401
49402             var convertHex = (function() {
49403                 function toBytes(text) {
49404                     var result = [];
49405                     for (var i = 0; i < text.length; i += 2) {
49406                         result.push(parseInt(text.substr(i, 2), 16));
49407                     }
49408
49409                     return result;
49410                 }
49411
49412                 // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html
49413                 var Hex = '0123456789abcdef';
49414
49415                 function fromBytes(bytes) {
49416                         var result = [];
49417                         for (var i = 0; i < bytes.length; i++) {
49418                             var v = bytes[i];
49419                             result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);
49420                         }
49421                         return result.join('');
49422                 }
49423
49424                 return {
49425                     toBytes: toBytes,
49426                     fromBytes: fromBytes,
49427                 }
49428             })();
49429
49430
49431             // Number of rounds by keysize
49432             var numberOfRounds = {16: 10, 24: 12, 32: 14};
49433
49434             // Round constant words
49435             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];
49436
49437             // S-box and Inverse S-box (S is for Substitution)
49438             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];
49439             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];
49440
49441             // Transformations for encryption
49442             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];
49443             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];
49444             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];
49445             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];
49446
49447             // Transformations for decryption
49448             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];
49449             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];
49450             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];
49451             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];
49452
49453             // Transformations for decryption key expansion
49454             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];
49455             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];
49456             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];
49457             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];
49458
49459             function convertToInt32(bytes) {
49460                 var result = [];
49461                 for (var i = 0; i < bytes.length; i += 4) {
49462                     result.push(
49463                         (bytes[i    ] << 24) |
49464                         (bytes[i + 1] << 16) |
49465                         (bytes[i + 2] <<  8) |
49466                          bytes[i + 3]
49467                     );
49468                 }
49469                 return result;
49470             }
49471
49472             var AES = function(key) {
49473                 if (!(this instanceof AES)) {
49474                     throw Error('AES must be instanitated with `new`');
49475                 }
49476
49477                 Object.defineProperty(this, 'key', {
49478                     value: coerceArray(key, true)
49479                 });
49480
49481                 this._prepare();
49482             };
49483
49484
49485             AES.prototype._prepare = function() {
49486
49487                 var rounds = numberOfRounds[this.key.length];
49488                 if (rounds == null) {
49489                     throw new Error('invalid key size (must be 16, 24 or 32 bytes)');
49490                 }
49491
49492                 // encryption round keys
49493                 this._Ke = [];
49494
49495                 // decryption round keys
49496                 this._Kd = [];
49497
49498                 for (var i = 0; i <= rounds; i++) {
49499                     this._Ke.push([0, 0, 0, 0]);
49500                     this._Kd.push([0, 0, 0, 0]);
49501                 }
49502
49503                 var roundKeyCount = (rounds + 1) * 4;
49504                 var KC = this.key.length / 4;
49505
49506                 // convert the key into ints
49507                 var tk = convertToInt32(this.key);
49508
49509                 // copy values into round key arrays
49510                 var index;
49511                 for (var i = 0; i < KC; i++) {
49512                     index = i >> 2;
49513                     this._Ke[index][i % 4] = tk[i];
49514                     this._Kd[rounds - index][i % 4] = tk[i];
49515                 }
49516
49517                 // key expansion (fips-197 section 5.2)
49518                 var rconpointer = 0;
49519                 var t = KC, tt;
49520                 while (t < roundKeyCount) {
49521                     tt = tk[KC - 1];
49522                     tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^
49523                               (S[(tt >>  8) & 0xFF] << 16) ^
49524                               (S[ tt        & 0xFF] <<  8) ^
49525                                S[(tt >> 24) & 0xFF]        ^
49526                               (rcon[rconpointer] << 24));
49527                     rconpointer += 1;
49528
49529                     // key expansion (for non-256 bit)
49530                     if (KC != 8) {
49531                         for (var i = 1; i < KC; i++) {
49532                             tk[i] ^= tk[i - 1];
49533                         }
49534
49535                     // key expansion for 256-bit keys is "slightly different" (fips-197)
49536                     } else {
49537                         for (var i = 1; i < (KC / 2); i++) {
49538                             tk[i] ^= tk[i - 1];
49539                         }
49540                         tt = tk[(KC / 2) - 1];
49541
49542                         tk[KC / 2] ^= (S[ tt        & 0xFF]        ^
49543                                       (S[(tt >>  8) & 0xFF] <<  8) ^
49544                                       (S[(tt >> 16) & 0xFF] << 16) ^
49545                                       (S[(tt >> 24) & 0xFF] << 24));
49546
49547                         for (var i = (KC / 2) + 1; i < KC; i++) {
49548                             tk[i] ^= tk[i - 1];
49549                         }
49550                     }
49551
49552                     // copy values into round key arrays
49553                     var i = 0, r, c;
49554                     while (i < KC && t < roundKeyCount) {
49555                         r = t >> 2;
49556                         c = t % 4;
49557                         this._Ke[r][c] = tk[i];
49558                         this._Kd[rounds - r][c] = tk[i++];
49559                         t++;
49560                     }
49561                 }
49562
49563                 // inverse-cipher-ify the decryption round key (fips-197 section 5.3)
49564                 for (var r = 1; r < rounds; r++) {
49565                     for (var c = 0; c < 4; c++) {
49566                         tt = this._Kd[r][c];
49567                         this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^
49568                                           U2[(tt >> 16) & 0xFF] ^
49569                                           U3[(tt >>  8) & 0xFF] ^
49570                                           U4[ tt        & 0xFF]);
49571                     }
49572                 }
49573             };
49574
49575             AES.prototype.encrypt = function(plaintext) {
49576                 if (plaintext.length != 16) {
49577                     throw new Error('invalid plaintext size (must be 16 bytes)');
49578                 }
49579
49580                 var rounds = this._Ke.length - 1;
49581                 var a = [0, 0, 0, 0];
49582
49583                 // convert plaintext to (ints ^ key)
49584                 var t = convertToInt32(plaintext);
49585                 for (var i = 0; i < 4; i++) {
49586                     t[i] ^= this._Ke[0][i];
49587                 }
49588
49589                 // apply round transforms
49590                 for (var r = 1; r < rounds; r++) {
49591                     for (var i = 0; i < 4; i++) {
49592                         a[i] = (T1[(t[ i         ] >> 24) & 0xff] ^
49593                                 T2[(t[(i + 1) % 4] >> 16) & 0xff] ^
49594                                 T3[(t[(i + 2) % 4] >>  8) & 0xff] ^
49595                                 T4[ t[(i + 3) % 4]        & 0xff] ^
49596                                 this._Ke[r][i]);
49597                     }
49598                     t = a.slice();
49599                 }
49600
49601                 // the last round is special
49602                 var result = createArray(16), tt;
49603                 for (var i = 0; i < 4; i++) {
49604                     tt = this._Ke[rounds][i];
49605                     result[4 * i    ] = (S[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;
49606                     result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;
49607                     result[4 * i + 2] = (S[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;
49608                     result[4 * i + 3] = (S[ t[(i + 3) % 4]        & 0xff] ^  tt       ) & 0xff;
49609                 }
49610
49611                 return result;
49612             };
49613
49614             AES.prototype.decrypt = function(ciphertext) {
49615                 if (ciphertext.length != 16) {
49616                     throw new Error('invalid ciphertext size (must be 16 bytes)');
49617                 }
49618
49619                 var rounds = this._Kd.length - 1;
49620                 var a = [0, 0, 0, 0];
49621
49622                 // convert plaintext to (ints ^ key)
49623                 var t = convertToInt32(ciphertext);
49624                 for (var i = 0; i < 4; i++) {
49625                     t[i] ^= this._Kd[0][i];
49626                 }
49627
49628                 // apply round transforms
49629                 for (var r = 1; r < rounds; r++) {
49630                     for (var i = 0; i < 4; i++) {
49631                         a[i] = (T5[(t[ i          ] >> 24) & 0xff] ^
49632                                 T6[(t[(i + 3) % 4] >> 16) & 0xff] ^
49633                                 T7[(t[(i + 2) % 4] >>  8) & 0xff] ^
49634                                 T8[ t[(i + 1) % 4]        & 0xff] ^
49635                                 this._Kd[r][i]);
49636                     }
49637                     t = a.slice();
49638                 }
49639
49640                 // the last round is special
49641                 var result = createArray(16), tt;
49642                 for (var i = 0; i < 4; i++) {
49643                     tt = this._Kd[rounds][i];
49644                     result[4 * i    ] = (Si[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;
49645                     result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;
49646                     result[4 * i + 2] = (Si[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;
49647                     result[4 * i + 3] = (Si[ t[(i + 1) % 4]        & 0xff] ^  tt       ) & 0xff;
49648                 }
49649
49650                 return result;
49651             };
49652
49653
49654             /**
49655              *  Mode Of Operation - Electonic Codebook (ECB)
49656              */
49657             var ModeOfOperationECB = function(key) {
49658                 if (!(this instanceof ModeOfOperationECB)) {
49659                     throw Error('AES must be instanitated with `new`');
49660                 }
49661
49662                 this.description = "Electronic Code Block";
49663                 this.name = "ecb";
49664
49665                 this._aes = new AES(key);
49666             };
49667
49668             ModeOfOperationECB.prototype.encrypt = function(plaintext) {
49669                 plaintext = coerceArray(plaintext);
49670
49671                 if ((plaintext.length % 16) !== 0) {
49672                     throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
49673                 }
49674
49675                 var ciphertext = createArray(plaintext.length);
49676                 var block = createArray(16);
49677
49678                 for (var i = 0; i < plaintext.length; i += 16) {
49679                     copyArray(plaintext, block, 0, i, i + 16);
49680                     block = this._aes.encrypt(block);
49681                     copyArray(block, ciphertext, i);
49682                 }
49683
49684                 return ciphertext;
49685             };
49686
49687             ModeOfOperationECB.prototype.decrypt = function(ciphertext) {
49688                 ciphertext = coerceArray(ciphertext);
49689
49690                 if ((ciphertext.length % 16) !== 0) {
49691                     throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
49692                 }
49693
49694                 var plaintext = createArray(ciphertext.length);
49695                 var block = createArray(16);
49696
49697                 for (var i = 0; i < ciphertext.length; i += 16) {
49698                     copyArray(ciphertext, block, 0, i, i + 16);
49699                     block = this._aes.decrypt(block);
49700                     copyArray(block, plaintext, i);
49701                 }
49702
49703                 return plaintext;
49704             };
49705
49706
49707             /**
49708              *  Mode Of Operation - Cipher Block Chaining (CBC)
49709              */
49710             var ModeOfOperationCBC = function(key, iv) {
49711                 if (!(this instanceof ModeOfOperationCBC)) {
49712                     throw Error('AES must be instanitated with `new`');
49713                 }
49714
49715                 this.description = "Cipher Block Chaining";
49716                 this.name = "cbc";
49717
49718                 if (!iv) {
49719                     iv = createArray(16);
49720
49721                 } else if (iv.length != 16) {
49722                     throw new Error('invalid initialation vector size (must be 16 bytes)');
49723                 }
49724
49725                 this._lastCipherblock = coerceArray(iv, true);
49726
49727                 this._aes = new AES(key);
49728             };
49729
49730             ModeOfOperationCBC.prototype.encrypt = function(plaintext) {
49731                 plaintext = coerceArray(plaintext);
49732
49733                 if ((plaintext.length % 16) !== 0) {
49734                     throw new Error('invalid plaintext size (must be multiple of 16 bytes)');
49735                 }
49736
49737                 var ciphertext = createArray(plaintext.length);
49738                 var block = createArray(16);
49739
49740                 for (var i = 0; i < plaintext.length; i += 16) {
49741                     copyArray(plaintext, block, 0, i, i + 16);
49742
49743                     for (var j = 0; j < 16; j++) {
49744                         block[j] ^= this._lastCipherblock[j];
49745                     }
49746
49747                     this._lastCipherblock = this._aes.encrypt(block);
49748                     copyArray(this._lastCipherblock, ciphertext, i);
49749                 }
49750
49751                 return ciphertext;
49752             };
49753
49754             ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {
49755                 ciphertext = coerceArray(ciphertext);
49756
49757                 if ((ciphertext.length % 16) !== 0) {
49758                     throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');
49759                 }
49760
49761                 var plaintext = createArray(ciphertext.length);
49762                 var block = createArray(16);
49763
49764                 for (var i = 0; i < ciphertext.length; i += 16) {
49765                     copyArray(ciphertext, block, 0, i, i + 16);
49766                     block = this._aes.decrypt(block);
49767
49768                     for (var j = 0; j < 16; j++) {
49769                         plaintext[i + j] = block[j] ^ this._lastCipherblock[j];
49770                     }
49771
49772                     copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);
49773                 }
49774
49775                 return plaintext;
49776             };
49777
49778
49779             /**
49780              *  Mode Of Operation - Cipher Feedback (CFB)
49781              */
49782             var ModeOfOperationCFB = function(key, iv, segmentSize) {
49783                 if (!(this instanceof ModeOfOperationCFB)) {
49784                     throw Error('AES must be instanitated with `new`');
49785                 }
49786
49787                 this.description = "Cipher Feedback";
49788                 this.name = "cfb";
49789
49790                 if (!iv) {
49791                     iv = createArray(16);
49792
49793                 } else if (iv.length != 16) {
49794                     throw new Error('invalid initialation vector size (must be 16 size)');
49795                 }
49796
49797                 if (!segmentSize) { segmentSize = 1; }
49798
49799                 this.segmentSize = segmentSize;
49800
49801                 this._shiftRegister = coerceArray(iv, true);
49802
49803                 this._aes = new AES(key);
49804             };
49805
49806             ModeOfOperationCFB.prototype.encrypt = function(plaintext) {
49807                 if ((plaintext.length % this.segmentSize) != 0) {
49808                     throw new Error('invalid plaintext size (must be segmentSize bytes)');
49809                 }
49810
49811                 var encrypted = coerceArray(plaintext, true);
49812
49813                 var xorSegment;
49814                 for (var i = 0; i < encrypted.length; i += this.segmentSize) {
49815                     xorSegment = this._aes.encrypt(this._shiftRegister);
49816                     for (var j = 0; j < this.segmentSize; j++) {
49817                         encrypted[i + j] ^= xorSegment[j];
49818                     }
49819
49820                     // Shift the register
49821                     copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
49822                     copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
49823                 }
49824
49825                 return encrypted;
49826             };
49827
49828             ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {
49829                 if ((ciphertext.length % this.segmentSize) != 0) {
49830                     throw new Error('invalid ciphertext size (must be segmentSize bytes)');
49831                 }
49832
49833                 var plaintext = coerceArray(ciphertext, true);
49834
49835                 var xorSegment;
49836                 for (var i = 0; i < plaintext.length; i += this.segmentSize) {
49837                     xorSegment = this._aes.encrypt(this._shiftRegister);
49838
49839                     for (var j = 0; j < this.segmentSize; j++) {
49840                         plaintext[i + j] ^= xorSegment[j];
49841                     }
49842
49843                     // Shift the register
49844                     copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);
49845                     copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);
49846                 }
49847
49848                 return plaintext;
49849             };
49850
49851             /**
49852              *  Mode Of Operation - Output Feedback (OFB)
49853              */
49854             var ModeOfOperationOFB = function(key, iv) {
49855                 if (!(this instanceof ModeOfOperationOFB)) {
49856                     throw Error('AES must be instanitated with `new`');
49857                 }
49858
49859                 this.description = "Output Feedback";
49860                 this.name = "ofb";
49861
49862                 if (!iv) {
49863                     iv = createArray(16);
49864
49865                 } else if (iv.length != 16) {
49866                     throw new Error('invalid initialation vector size (must be 16 bytes)');
49867                 }
49868
49869                 this._lastPrecipher = coerceArray(iv, true);
49870                 this._lastPrecipherIndex = 16;
49871
49872                 this._aes = new AES(key);
49873             };
49874
49875             ModeOfOperationOFB.prototype.encrypt = function(plaintext) {
49876                 var encrypted = coerceArray(plaintext, true);
49877
49878                 for (var i = 0; i < encrypted.length; i++) {
49879                     if (this._lastPrecipherIndex === 16) {
49880                         this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);
49881                         this._lastPrecipherIndex = 0;
49882                     }
49883                     encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];
49884                 }
49885
49886                 return encrypted;
49887             };
49888
49889             // Decryption is symetric
49890             ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;
49891
49892
49893             /**
49894              *  Counter object for CTR common mode of operation
49895              */
49896             var Counter = function(initialValue) {
49897                 if (!(this instanceof Counter)) {
49898                     throw Error('Counter must be instanitated with `new`');
49899                 }
49900
49901                 // We allow 0, but anything false-ish uses the default 1
49902                 if (initialValue !== 0 && !initialValue) { initialValue = 1; }
49903
49904                 if (typeof(initialValue) === 'number') {
49905                     this._counter = createArray(16);
49906                     this.setValue(initialValue);
49907
49908                 } else {
49909                     this.setBytes(initialValue);
49910                 }
49911             };
49912
49913             Counter.prototype.setValue = function(value) {
49914                 if (typeof(value) !== 'number' || parseInt(value) != value) {
49915                     throw new Error('invalid counter value (must be an integer)');
49916                 }
49917
49918                 // We cannot safely handle numbers beyond the safe range for integers
49919                 if (value > Number.MAX_SAFE_INTEGER) {
49920                     throw new Error('integer value out of safe range');
49921                 }
49922
49923                 for (var index = 15; index >= 0; --index) {
49924                     this._counter[index] = value % 256;
49925                     value = parseInt(value / 256);
49926                 }
49927             };
49928
49929             Counter.prototype.setBytes = function(bytes) {
49930                 bytes = coerceArray(bytes, true);
49931
49932                 if (bytes.length != 16) {
49933                     throw new Error('invalid counter bytes size (must be 16 bytes)');
49934                 }
49935
49936                 this._counter = bytes;
49937             };
49938
49939             Counter.prototype.increment = function() {
49940                 for (var i = 15; i >= 0; i--) {
49941                     if (this._counter[i] === 255) {
49942                         this._counter[i] = 0;
49943                     } else {
49944                         this._counter[i]++;
49945                         break;
49946                     }
49947                 }
49948             };
49949
49950
49951             /**
49952              *  Mode Of Operation - Counter (CTR)
49953              */
49954             var ModeOfOperationCTR = function(key, counter) {
49955                 if (!(this instanceof ModeOfOperationCTR)) {
49956                     throw Error('AES must be instanitated with `new`');
49957                 }
49958
49959                 this.description = "Counter";
49960                 this.name = "ctr";
49961
49962                 if (!(counter instanceof Counter)) {
49963                     counter = new Counter(counter);
49964                 }
49965
49966                 this._counter = counter;
49967
49968                 this._remainingCounter = null;
49969                 this._remainingCounterIndex = 16;
49970
49971                 this._aes = new AES(key);
49972             };
49973
49974             ModeOfOperationCTR.prototype.encrypt = function(plaintext) {
49975                 var encrypted = coerceArray(plaintext, true);
49976
49977                 for (var i = 0; i < encrypted.length; i++) {
49978                     if (this._remainingCounterIndex === 16) {
49979                         this._remainingCounter = this._aes.encrypt(this._counter._counter);
49980                         this._remainingCounterIndex = 0;
49981                         this._counter.increment();
49982                     }
49983                     encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];
49984                 }
49985
49986                 return encrypted;
49987             };
49988
49989             // Decryption is symetric
49990             ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;
49991
49992
49993             ///////////////////////
49994             // Padding
49995
49996             // See:https://tools.ietf.org/html/rfc2315
49997             function pkcs7pad(data) {
49998                 data = coerceArray(data, true);
49999                 var padder = 16 - (data.length % 16);
50000                 var result = createArray(data.length + padder);
50001                 copyArray(data, result);
50002                 for (var i = data.length; i < result.length; i++) {
50003                     result[i] = padder;
50004                 }
50005                 return result;
50006             }
50007
50008             function pkcs7strip(data) {
50009                 data = coerceArray(data, true);
50010                 if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }
50011
50012                 var padder = data[data.length - 1];
50013                 if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }
50014
50015                 var length = data.length - padder;
50016                 for (var i = 0; i < padder; i++) {
50017                     if (data[length + i] !== padder) {
50018                         throw new Error('PKCS#7 invalid padding byte');
50019                     }
50020                 }
50021
50022                 var result = createArray(length);
50023                 copyArray(data, result, 0, 0, length);
50024                 return result;
50025             }
50026
50027             ///////////////////////
50028             // Exporting
50029
50030
50031             // The block cipher
50032             var aesjs = {
50033                 AES: AES,
50034                 Counter: Counter,
50035
50036                 ModeOfOperation: {
50037                     ecb: ModeOfOperationECB,
50038                     cbc: ModeOfOperationCBC,
50039                     cfb: ModeOfOperationCFB,
50040                     ofb: ModeOfOperationOFB,
50041                     ctr: ModeOfOperationCTR
50042                 },
50043
50044                 utils: {
50045                     hex: convertHex,
50046                     utf8: convertUtf8
50047                 },
50048
50049                 padding: {
50050                     pkcs7: {
50051                         pad: pkcs7pad,
50052                         strip: pkcs7strip
50053                     }
50054                 },
50055
50056                 _arrayTest: {
50057                     coerceArray: coerceArray,
50058                     createArray: createArray,
50059                     copyArray: copyArray,
50060                 }
50061             };
50062
50063
50064             // node.js
50065             {
50066                 module.exports = aesjs;
50067
50068             // RequireJS/AMD
50069             // http://www.requirejs.org/docs/api.html
50070             // https://github.com/amdjs/amdjs-api/wiki/AMD
50071             }
50072
50073
50074         })();
50075         });
50076
50077         // See https://github.com/ricmoo/aes-js
50078         // We can use keys that are 128 bits (16 bytes), 192 bits (24 bytes) or 256 bits (32 bytes).
50079         // To generate a random key:  window.crypto.getRandomValues(new Uint8Array(16));
50080
50081         // This default signing key is built into iD and can be used to mask/unmask sensitive values.
50082         var DEFAULT_128 = [250, 157, 60, 79, 142, 134, 229, 129, 138, 126, 210, 129, 29, 71, 160, 208];
50083
50084
50085         function utilAesEncrypt(text, key) {
50086           key = key || DEFAULT_128;
50087           var textBytes = aesJs.utils.utf8.toBytes(text);
50088           var aesCtr = new aesJs.ModeOfOperation.ctr(key);
50089           var encryptedBytes = aesCtr.encrypt(textBytes);
50090           var encryptedHex = aesJs.utils.hex.fromBytes(encryptedBytes);
50091           return encryptedHex;
50092         }
50093
50094
50095         function utilAesDecrypt(encryptedHex, key) {
50096           key = key || DEFAULT_128;
50097           var encryptedBytes = aesJs.utils.hex.toBytes(encryptedHex);
50098           var aesCtr = new aesJs.ModeOfOperation.ctr(key);
50099           var decryptedBytes = aesCtr.decrypt(encryptedBytes);
50100           var text = aesJs.utils.utf8.fromBytes(decryptedBytes);
50101           return text;
50102         }
50103
50104         // http://2ality.com/2015/01/es6-set-operations.html
50105
50106         // Difference (a \ b): create a set that contains those elements of set a that are not in set b.
50107         // This operation is also sometimes called minus (-).
50108         // var a = [1,2,3];
50109         // var b = [4,3,2];
50110         // utilArrayDifference(a, b)
50111         //   [1]
50112         // utilArrayDifference(b, a)
50113         //   [4]
50114         function utilArrayDifference(a, b) {
50115             var other = new Set(b);
50116             return Array.from(new Set(a))
50117                 .filter(function(v) { return !other.has(v); });
50118         }
50119
50120         // Intersection (a ∩ b): create a set that contains those elements of set a that are also in set b.
50121         // var a = [1,2,3];
50122         // var b = [4,3,2];
50123         // utilArrayIntersection(a, b)
50124         //   [2,3]
50125         function utilArrayIntersection(a, b) {
50126             var other = new Set(b);
50127             return Array.from(new Set(a))
50128                 .filter(function(v) { return other.has(v); });
50129         }
50130
50131         // Union (a ∪ b): create a set that contains the elements of both set a and set b.
50132         // var a = [1,2,3];
50133         // var b = [4,3,2];
50134         // utilArrayUnion(a, b)
50135         //   [1,2,3,4]
50136         function utilArrayUnion(a, b) {
50137             var result = new Set(a);
50138             b.forEach(function(v) { result.add(v); });
50139             return Array.from(result);
50140         }
50141
50142         // Returns an Array with all the duplicates removed
50143         // var a = [1,1,2,3,3];
50144         // utilArrayUniq(a)
50145         //   [1,2,3]
50146         function utilArrayUniq(a) {
50147             return Array.from(new Set(a));
50148         }
50149
50150
50151         // Splits array into chunks of given chunk size
50152         // var a = [1,2,3,4,5,6,7];
50153         // utilArrayChunk(a, 3);
50154         //   [[1,2,3],[4,5,6],[7]];
50155         function utilArrayChunk(a, chunkSize) {
50156             if (!chunkSize || chunkSize < 0) { return [a.slice()]; }
50157
50158             var result = new Array(Math.ceil(a.length / chunkSize));
50159             return Array.from(result, function(item, i) {
50160                 return a.slice(i * chunkSize, i * chunkSize + chunkSize);
50161             });
50162         }
50163
50164
50165         // Flattens two level array into a single level
50166         // var a = [[1,2,3],[4,5,6],[7]];
50167         // utilArrayFlatten(a);
50168         //   [1,2,3,4,5,6,7];
50169         function utilArrayFlatten(a) {
50170             return a.reduce(function(acc, val) {
50171                 return acc.concat(val);
50172             }, []);
50173         }
50174
50175
50176         // Groups the items of the Array according to the given key
50177         // `key` can be passed as a property or as a key function
50178         //
50179         // var pets = [
50180         //     { type: 'Dog', name: 'Spot' },
50181         //     { type: 'Cat', name: 'Tiger' },
50182         //     { type: 'Dog', name: 'Rover' },
50183         //     { type: 'Cat', name: 'Leo' }
50184         // ];
50185         //
50186         // utilArrayGroupBy(pets, 'type')
50187         //   {
50188         //     'Dog': [{type: 'Dog', name: 'Spot'}, {type: 'Dog', name: 'Rover'}],
50189         //     'Cat': [{type: 'Cat', name: 'Tiger'}, {type: 'Cat', name: 'Leo'}]
50190         //   }
50191         //
50192         // utilArrayGroupBy(pets, function(item) { return item.name.length; })
50193         //   {
50194         //     3: [{type: 'Cat', name: 'Leo'}],
50195         //     4: [{type: 'Dog', name: 'Spot'}],
50196         //     5: [{type: 'Cat', name: 'Tiger'}, {type: 'Dog', name: 'Rover'}]
50197         //   }
50198         function utilArrayGroupBy(a, key) {
50199             return a.reduce(function(acc, item) {
50200                 var group = (typeof key === 'function') ? key(item) : item[key];
50201                 (acc[group] = acc[group] || []).push(item);
50202                 return acc;
50203             }, {});
50204         }
50205
50206
50207         // Returns an Array with all the duplicates removed
50208         // where uniqueness determined by the given key
50209         // `key` can be passed as a property or as a key function
50210         //
50211         // var pets = [
50212         //     { type: 'Dog', name: 'Spot' },
50213         //     { type: 'Cat', name: 'Tiger' },
50214         //     { type: 'Dog', name: 'Rover' },
50215         //     { type: 'Cat', name: 'Leo' }
50216         // ];
50217         //
50218         // utilArrayUniqBy(pets, 'type')
50219         //   [
50220         //     { type: 'Dog', name: 'Spot' },
50221         //     { type: 'Cat', name: 'Tiger' }
50222         //   ]
50223         //
50224         // utilArrayUniqBy(pets, function(item) { return item.name.length; })
50225         //   [
50226         //     { type: 'Dog', name: 'Spot' },
50227         //     { type: 'Cat', name: 'Tiger' },
50228         //     { type: 'Cat', name: 'Leo' }
50229         //   }
50230         function utilArrayUniqBy(a, key) {
50231             var seen = new Set();
50232             return a.reduce(function(acc, item) {
50233                 var val = (typeof key === 'function') ? key(item) : item[key];
50234                 if (val && !seen.has(val)) {
50235                     seen.add(val);
50236                     acc.push(item);
50237                 }
50238                 return acc;
50239             }, []);
50240         }
50241
50242         var remove$1 = removeDiacritics;
50243
50244         var replacementList = [
50245           {
50246             base: ' ',
50247             chars: "\u00A0",
50248           }, {
50249             base: '0',
50250             chars: "\u07C0",
50251           }, {
50252             base: 'A',
50253             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",
50254           }, {
50255             base: 'AA',
50256             chars: "\uA732",
50257           }, {
50258             base: 'AE',
50259             chars: "\u00C6\u01FC\u01E2",
50260           }, {
50261             base: 'AO',
50262             chars: "\uA734",
50263           }, {
50264             base: 'AU',
50265             chars: "\uA736",
50266           }, {
50267             base: 'AV',
50268             chars: "\uA738\uA73A",
50269           }, {
50270             base: 'AY',
50271             chars: "\uA73C",
50272           }, {
50273             base: 'B',
50274             chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
50275           }, {
50276             base: 'C',
50277             chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
50278           }, {
50279             base: 'D',
50280             chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
50281           }, {
50282             base: 'Dh',
50283             chars: "\u00D0",
50284           }, {
50285             base: 'DZ',
50286             chars: "\u01F1\u01C4",
50287           }, {
50288             base: 'Dz',
50289             chars: "\u01F2\u01C5",
50290           }, {
50291             base: 'E',
50292             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",
50293           }, {
50294             base: 'F',
50295             chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
50296           }, {
50297             base: 'G',
50298             chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
50299           }, {
50300             base: 'H',
50301             chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
50302           }, {
50303             base: 'I',
50304             chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
50305           }, {
50306             base: 'J',
50307             chars: "\u24BF\uFF2A\u0134\u0248\u0237",
50308           }, {
50309             base: 'K',
50310             chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
50311           }, {
50312             base: 'L',
50313             chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
50314           }, {
50315             base: 'LJ',
50316             chars: "\u01C7",
50317           }, {
50318             base: 'Lj',
50319             chars: "\u01C8",
50320           }, {
50321             base: 'M',
50322             chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
50323           }, {
50324             base: 'N',
50325             chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
50326           }, {
50327             base: 'NJ',
50328             chars: "\u01CA",
50329           }, {
50330             base: 'Nj',
50331             chars: "\u01CB",
50332           }, {
50333             base: 'O',
50334             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",
50335           }, {
50336             base: 'OE',
50337             chars: "\u0152",
50338           }, {
50339             base: 'OI',
50340             chars: "\u01A2",
50341           }, {
50342             base: 'OO',
50343             chars: "\uA74E",
50344           }, {
50345             base: 'OU',
50346             chars: "\u0222",
50347           }, {
50348             base: 'P',
50349             chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
50350           }, {
50351             base: 'Q',
50352             chars: "\u24C6\uFF31\uA756\uA758\u024A",
50353           }, {
50354             base: 'R',
50355             chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
50356           }, {
50357             base: 'S',
50358             chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
50359           }, {
50360             base: 'T',
50361             chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
50362           }, {
50363             base: 'Th',
50364             chars: "\u00DE",
50365           }, {
50366             base: 'TZ',
50367             chars: "\uA728",
50368           }, {
50369             base: 'U',
50370             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",
50371           }, {
50372             base: 'V',
50373             chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
50374           }, {
50375             base: 'VY',
50376             chars: "\uA760",
50377           }, {
50378             base: 'W',
50379             chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
50380           }, {
50381             base: 'X',
50382             chars: "\u24CD\uFF38\u1E8A\u1E8C",
50383           }, {
50384             base: 'Y',
50385             chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
50386           }, {
50387             base: 'Z',
50388             chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
50389           }, {
50390             base: 'a',
50391             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",
50392           }, {
50393             base: 'aa',
50394             chars: "\uA733",
50395           }, {
50396             base: 'ae',
50397             chars: "\u00E6\u01FD\u01E3",
50398           }, {
50399             base: 'ao',
50400             chars: "\uA735",
50401           }, {
50402             base: 'au',
50403             chars: "\uA737",
50404           }, {
50405             base: 'av',
50406             chars: "\uA739\uA73B",
50407           }, {
50408             base: 'ay',
50409             chars: "\uA73D",
50410           }, {
50411             base: 'b',
50412             chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
50413           }, {
50414             base: 'c',
50415             chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
50416           }, {
50417             base: 'd',
50418             chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
50419           }, {
50420             base: 'dh',
50421             chars: "\u00F0",
50422           }, {
50423             base: 'dz',
50424             chars: "\u01F3\u01C6",
50425           }, {
50426             base: 'e',
50427             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",
50428           }, {
50429             base: 'f',
50430             chars: "\u24D5\uFF46\u1E1F\u0192",
50431           }, {
50432             base: 'ff',
50433             chars: "\uFB00",
50434           }, {
50435             base: 'fi',
50436             chars: "\uFB01",
50437           }, {
50438             base: 'fl',
50439             chars: "\uFB02",
50440           }, {
50441             base: 'ffi',
50442             chars: "\uFB03",
50443           }, {
50444             base: 'ffl',
50445             chars: "\uFB04",
50446           }, {
50447             base: 'g',
50448             chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
50449           }, {
50450             base: 'h',
50451             chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
50452           }, {
50453             base: 'hv',
50454             chars: "\u0195",
50455           }, {
50456             base: 'i',
50457             chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
50458           }, {
50459             base: 'j',
50460             chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
50461           }, {
50462             base: 'k',
50463             chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
50464           }, {
50465             base: 'l',
50466             chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
50467           }, {
50468             base: 'lj',
50469             chars: "\u01C9",
50470           }, {
50471             base: 'm',
50472             chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
50473           }, {
50474             base: 'n',
50475             chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
50476           }, {
50477             base: 'nj',
50478             chars: "\u01CC",
50479           }, {
50480             base: 'o',
50481             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",
50482           }, {
50483             base: 'oe',
50484             chars: "\u0153",
50485           }, {
50486             base: 'oi',
50487             chars: "\u01A3",
50488           }, {
50489             base: 'oo',
50490             chars: "\uA74F",
50491           }, {
50492             base: 'ou',
50493             chars: "\u0223",
50494           }, {
50495             base: 'p',
50496             chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
50497           }, {
50498             base: 'q',
50499             chars: "\u24E0\uFF51\u024B\uA757\uA759",
50500           }, {
50501             base: 'r',
50502             chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
50503           }, {
50504             base: 's',
50505             chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
50506           }, {
50507             base: 'ss',
50508             chars: "\xDF",
50509           }, {
50510             base: 't',
50511             chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
50512           }, {
50513             base: 'th',
50514             chars: "\u00FE",
50515           }, {
50516             base: 'tz',
50517             chars: "\uA729",
50518           }, {
50519             base: 'u',
50520             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",
50521           }, {
50522             base: 'v',
50523             chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
50524           }, {
50525             base: 'vy',
50526             chars: "\uA761",
50527           }, {
50528             base: 'w',
50529             chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
50530           }, {
50531             base: 'x',
50532             chars: "\u24E7\uFF58\u1E8B\u1E8D",
50533           }, {
50534             base: 'y',
50535             chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
50536           }, {
50537             base: 'z',
50538             chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
50539           }
50540         ];
50541
50542         var diacriticsMap = {};
50543         for (var i$1 = 0; i$1 < replacementList.length; i$1 += 1) {
50544           var chars = replacementList[i$1].chars;
50545           for (var j = 0; j < chars.length; j += 1) {
50546             diacriticsMap[chars[j]] = replacementList[i$1].base;
50547           }
50548         }
50549
50550         function removeDiacritics(str) {
50551           return str.replace(/[^\u0000-\u007e]/g, function(c) {
50552             return diacriticsMap[c] || c;
50553           });
50554         }
50555
50556         var replacementList_1 = replacementList;
50557         var diacriticsMap_1 = diacriticsMap;
50558
50559         var diacritics = {
50560                 remove: remove$1,
50561                 replacementList: replacementList_1,
50562                 diacriticsMap: diacriticsMap_1
50563         };
50564
50565         var isArabic_1 = createCommonjsModule(function (module, exports) {
50566         Object.defineProperty(exports, "__esModule", { value: true });
50567         var arabicBlocks = [
50568             [0x0600, 0x06FF],
50569             [0x0750, 0x077F],
50570             [0x08A0, 0x08FF],
50571             [0xFB50, 0xFDFF],
50572             [0xFE70, 0xFEFF],
50573             [0x10E60, 0x10E7F],
50574             [0x1EC70, 0x1ECBF],
50575             [0x1EE00, 0x1EEFF] // Mathematical Alphabetic symbols https://www.unicode.org/charts/PDF/U1EE00.pdf
50576         ];
50577         function isArabic(char) {
50578             if (char.length > 1) {
50579                 // allow the newer chars?
50580                 throw new Error('isArabic works on only one-character strings');
50581             }
50582             var code = char.charCodeAt(0);
50583             for (var i = 0; i < arabicBlocks.length; i++) {
50584                 var block = arabicBlocks[i];
50585                 if (code >= block[0] && code <= block[1]) {
50586                     return true;
50587                 }
50588             }
50589             return false;
50590         }
50591         exports.isArabic = isArabic;
50592         function isMath(char) {
50593             if (char.length > 2) {
50594                 // allow the newer chars?
50595                 throw new Error('isMath works on only one-character strings');
50596             }
50597             var code = char.charCodeAt(0);
50598             return ((code >= 0x660 && code <= 0x66C) || (code >= 0x6F0 && code <= 0x6F9));
50599         }
50600         exports.isMath = isMath;
50601         });
50602
50603         unwrapExports(isArabic_1);
50604         var isArabic_2 = isArabic_1.isArabic;
50605         var isArabic_3 = isArabic_1.isMath;
50606
50607         var unicodeArabic = createCommonjsModule(function (module, exports) {
50608         Object.defineProperty(exports, "__esModule", { value: true });
50609         var arabicReference = {
50610             "alef": {
50611                 "normal": [
50612                     "\u0627"
50613                 ],
50614                 "madda_above": {
50615                     "normal": [
50616                         "\u0627\u0653",
50617                         "\u0622"
50618                     ],
50619                     "isolated": "\uFE81",
50620                     "final": "\uFE82"
50621                 },
50622                 "hamza_above": {
50623                     "normal": [
50624                         "\u0627\u0654",
50625                         "\u0623"
50626                     ],
50627                     "isolated": "\uFE83",
50628                     "final": "\uFE84"
50629                 },
50630                 "hamza_below": {
50631                     "normal": [
50632                         "\u0627\u0655",
50633                         "\u0625"
50634                     ],
50635                     "isolated": "\uFE87",
50636                     "final": "\uFE88"
50637                 },
50638                 "wasla": {
50639                     "normal": "\u0671",
50640                     "isolated": "\uFB50",
50641                     "final": "\uFB51"
50642                 },
50643                 "wavy_hamza_above": [
50644                     "\u0672"
50645                 ],
50646                 "wavy_hamza_below": [
50647                     "\u0627\u065F",
50648                     "\u0673"
50649                 ],
50650                 "high_hamza": [
50651                     "\u0675",
50652                     "\u0627\u0674"
50653                 ],
50654                 "indic_two_above": [
50655                     "\u0773"
50656                 ],
50657                 "indic_three_above": [
50658                     "\u0774"
50659                 ],
50660                 "fathatan": {
50661                     "normal": [
50662                         "\u0627\u064B"
50663                     ],
50664                     "final": "\uFD3C",
50665                     "isolated": "\uFD3D"
50666                 },
50667                 "isolated": "\uFE8D",
50668                 "final": "\uFE8E"
50669             },
50670             "beh": {
50671                 "normal": [
50672                     "\u0628"
50673                 ],
50674                 "dotless": [
50675                     "\u066E"
50676                 ],
50677                 "three_dots_horizontally_below": [
50678                     "\u0750"
50679                 ],
50680                 "dot_below_three_dots_above": [
50681                     "\u0751"
50682                 ],
50683                 "three_dots_pointing_upwards_below": [
50684                     "\u0752"
50685                 ],
50686                 "three_dots_pointing_upwards_below_two_dots_above": [
50687                     "\u0753"
50688                 ],
50689                 "two_dots_below_dot_above": [
50690                     "\u0754"
50691                 ],
50692                 "inverted_small_v_below": [
50693                     "\u0755"
50694                 ],
50695                 "small_v": [
50696                     "\u0756"
50697                 ],
50698                 "small_v_below": [
50699                     "\u08A0"
50700                 ],
50701                 "hamza_above": [
50702                     "\u08A1"
50703                 ],
50704                 "small_meem_above": [
50705                     "\u08B6"
50706                 ],
50707                 "isolated": "\uFE8F",
50708                 "final": "\uFE90",
50709                 "initial": "\uFE91",
50710                 "medial": "\uFE92"
50711             },
50712             "teh marbuta": {
50713                 "normal": [
50714                     "\u0629"
50715                 ],
50716                 "isolated": "\uFE93",
50717                 "final": "\uFE94"
50718             },
50719             "teh": {
50720                 "normal": [
50721                     "\u062A"
50722                 ],
50723                 "ring": [
50724                     "\u067C"
50725                 ],
50726                 "three_dots_above_downwards": [
50727                     "\u067D"
50728                 ],
50729                 "small_teh_above": [
50730                     "\u08B8"
50731                 ],
50732                 "isolated": "\uFE95",
50733                 "final": "\uFE96",
50734                 "initial": "\uFE97",
50735                 "medial": "\uFE98"
50736             },
50737             "theh": {
50738                 "normal": [
50739                     "\u062B"
50740                 ],
50741                 "isolated": "\uFE99",
50742                 "final": "\uFE9A",
50743                 "initial": "\uFE9B",
50744                 "medial": "\uFE9C"
50745             },
50746             "jeem": {
50747                 "normal": [
50748                     "\u062C"
50749                 ],
50750                 "two_dots_above": [
50751                     "\u08A2"
50752                 ],
50753                 "isolated": "\uFE9D",
50754                 "final": "\uFE9E",
50755                 "initial": "\uFE9F",
50756                 "medial": "\uFEA0"
50757             },
50758             "hah": {
50759                 "normal": [
50760                     "\u062D"
50761                 ],
50762                 "hamza_above": [
50763                     "\u0681"
50764                 ],
50765                 "two_dots_vertical_above": [
50766                     "\u0682"
50767                 ],
50768                 "three_dots_above": [
50769                     "\u0685"
50770                 ],
50771                 "two_dots_above": [
50772                     "\u0757"
50773                 ],
50774                 "three_dots_pointing_upwards_below": [
50775                     "\u0758"
50776                 ],
50777                 "small_tah_below": [
50778                     "\u076E"
50779                 ],
50780                 "small_tah_two_dots": [
50781                     "\u076F"
50782                 ],
50783                 "small_tah_above": [
50784                     "\u0772"
50785                 ],
50786                 "indic_four_below": [
50787                     "\u077C"
50788                 ],
50789                 "isolated": "\uFEA1",
50790                 "final": "\uFEA2",
50791                 "initial": "\uFEA3",
50792                 "medial": "\uFEA4"
50793             },
50794             "khah": {
50795                 "normal": [
50796                     "\u062E"
50797                 ],
50798                 "isolated": "\uFEA5",
50799                 "final": "\uFEA6",
50800                 "initial": "\uFEA7",
50801                 "medial": "\uFEA8"
50802             },
50803             "dal": {
50804                 "normal": [
50805                     "\u062F"
50806                 ],
50807                 "ring": [
50808                     "\u0689"
50809                 ],
50810                 "dot_below": [
50811                     "\u068A"
50812                 ],
50813                 "dot_below_small_tah": [
50814                     "\u068B"
50815                 ],
50816                 "three_dots_above_downwards": [
50817                     "\u068F"
50818                 ],
50819                 "four_dots_above": [
50820                     "\u0690"
50821                 ],
50822                 "inverted_v": [
50823                     "\u06EE"
50824                 ],
50825                 "two_dots_vertically_below_small_tah": [
50826                     "\u0759"
50827                 ],
50828                 "inverted_small_v_below": [
50829                     "\u075A"
50830                 ],
50831                 "three_dots_below": [
50832                     "\u08AE"
50833                 ],
50834                 "isolated": "\uFEA9",
50835                 "final": "\uFEAA"
50836             },
50837             "thal": {
50838                 "normal": [
50839                     "\u0630"
50840                 ],
50841                 "isolated": "\uFEAB",
50842                 "final": "\uFEAC"
50843             },
50844             "reh": {
50845                 "normal": [
50846                     "\u0631"
50847                 ],
50848                 "small_v": [
50849                     "\u0692"
50850                 ],
50851                 "ring": [
50852                     "\u0693"
50853                 ],
50854                 "dot_below": [
50855                     "\u0694"
50856                 ],
50857                 "small_v_below": [
50858                     "\u0695"
50859                 ],
50860                 "dot_below_dot_above": [
50861                     "\u0696"
50862                 ],
50863                 "two_dots_above": [
50864                     "\u0697"
50865                 ],
50866                 "four_dots_above": [
50867                     "\u0699"
50868                 ],
50869                 "inverted_v": [
50870                     "\u06EF"
50871                 ],
50872                 "stroke": [
50873                     "\u075B"
50874                 ],
50875                 "two_dots_vertically_above": [
50876                     "\u076B"
50877                 ],
50878                 "hamza_above": [
50879                     "\u076C"
50880                 ],
50881                 "small_tah_two_dots": [
50882                     "\u0771"
50883                 ],
50884                 "loop": [
50885                     "\u08AA"
50886                 ],
50887                 "small_noon_above": [
50888                     "\u08B9"
50889                 ],
50890                 "isolated": "\uFEAD",
50891                 "final": "\uFEAE"
50892             },
50893             "zain": {
50894                 "normal": [
50895                     "\u0632"
50896                 ],
50897                 "inverted_v_above": [
50898                     "\u08B2"
50899                 ],
50900                 "isolated": "\uFEAF",
50901                 "final": "\uFEB0"
50902             },
50903             "seen": {
50904                 "normal": [
50905                     "\u0633"
50906                 ],
50907                 "dot_below_dot_above": [
50908                     "\u069A"
50909                 ],
50910                 "three_dots_below": [
50911                     "\u069B"
50912                 ],
50913                 "three_dots_below_three_dots_above": [
50914                     "\u069C"
50915                 ],
50916                 "four_dots_above": [
50917                     "\u075C"
50918                 ],
50919                 "two_dots_vertically_above": [
50920                     "\u076D"
50921                 ],
50922                 "small_tah_two_dots": [
50923                     "\u0770"
50924                 ],
50925                 "indic_four_above": [
50926                     "\u077D"
50927                 ],
50928                 "inverted_v": [
50929                     "\u077E"
50930                 ],
50931                 "isolated": "\uFEB1",
50932                 "final": "\uFEB2",
50933                 "initial": "\uFEB3",
50934                 "medial": "\uFEB4"
50935             },
50936             "sheen": {
50937                 "normal": [
50938                     "\u0634"
50939                 ],
50940                 "dot_below": [
50941                     "\u06FA"
50942                 ],
50943                 "isolated": "\uFEB5",
50944                 "final": "\uFEB6",
50945                 "initial": "\uFEB7",
50946                 "medial": "\uFEB8"
50947             },
50948             "sad": {
50949                 "normal": [
50950                     "\u0635"
50951                 ],
50952                 "two_dots_below": [
50953                     "\u069D"
50954                 ],
50955                 "three_dots_above": [
50956                     "\u069E"
50957                 ],
50958                 "three_dots_below": [
50959                     "\u08AF"
50960                 ],
50961                 "isolated": "\uFEB9",
50962                 "final": "\uFEBA",
50963                 "initial": "\uFEBB",
50964                 "medial": "\uFEBC"
50965             },
50966             "dad": {
50967                 "normal": [
50968                     "\u0636"
50969                 ],
50970                 "dot_below": [
50971                     "\u06FB"
50972                 ],
50973                 "isolated": "\uFEBD",
50974                 "final": "\uFEBE",
50975                 "initial": "\uFEBF",
50976                 "medial": "\uFEC0"
50977             },
50978             "tah": {
50979                 "normal": [
50980                     "\u0637"
50981                 ],
50982                 "three_dots_above": [
50983                     "\u069F"
50984                 ],
50985                 "two_dots_above": [
50986                     "\u08A3"
50987                 ],
50988                 "isolated": "\uFEC1",
50989                 "final": "\uFEC2",
50990                 "initial": "\uFEC3",
50991                 "medial": "\uFEC4"
50992             },
50993             "zah": {
50994                 "normal": [
50995                     "\u0638"
50996                 ],
50997                 "isolated": "\uFEC5",
50998                 "final": "\uFEC6",
50999                 "initial": "\uFEC7",
51000                 "medial": "\uFEC8"
51001             },
51002             "ain": {
51003                 "normal": [
51004                     "\u0639"
51005                 ],
51006                 "three_dots_above": [
51007                     "\u06A0"
51008                 ],
51009                 "two_dots_above": [
51010                     "\u075D"
51011                 ],
51012                 "three_dots_pointing_downwards_above": [
51013                     "\u075E"
51014                 ],
51015                 "two_dots_vertically_above": [
51016                     "\u075F"
51017                 ],
51018                 "three_dots_below": [
51019                     "\u08B3"
51020                 ],
51021                 "isolated": "\uFEC9",
51022                 "final": "\uFECA",
51023                 "initial": "\uFECB",
51024                 "medial": "\uFECC"
51025             },
51026             "ghain": {
51027                 "normal": [
51028                     "\u063A"
51029                 ],
51030                 "dot_below": [
51031                     "\u06FC"
51032                 ],
51033                 "isolated": "\uFECD",
51034                 "final": "\uFECE",
51035                 "initial": "\uFECF",
51036                 "medial": "\uFED0"
51037             },
51038             "feh": {
51039                 "normal": [
51040                     "\u0641"
51041                 ],
51042                 "dotless": [
51043                     "\u06A1"
51044                 ],
51045                 "dot_moved_below": [
51046                     "\u06A2"
51047                 ],
51048                 "dot_below": [
51049                     "\u06A3"
51050                 ],
51051                 "three_dots_below": [
51052                     "\u06A5"
51053                 ],
51054                 "two_dots_below": [
51055                     "\u0760"
51056                 ],
51057                 "three_dots_pointing_upwards_below": [
51058                     "\u0761"
51059                 ],
51060                 "dot_below_three_dots_above": [
51061                     "\u08A4"
51062                 ],
51063                 "isolated": "\uFED1",
51064                 "final": "\uFED2",
51065                 "initial": "\uFED3",
51066                 "medial": "\uFED4"
51067             },
51068             "qaf": {
51069                 "normal": [
51070                     "\u0642"
51071                 ],
51072                 "dotless": [
51073                     "\u066F"
51074                 ],
51075                 "dot_above": [
51076                     "\u06A7"
51077                 ],
51078                 "three_dots_above": [
51079                     "\u06A8"
51080                 ],
51081                 "dot_below": [
51082                     "\u08A5"
51083                 ],
51084                 "isolated": "\uFED5",
51085                 "final": "\uFED6",
51086                 "initial": "\uFED7",
51087                 "medial": "\uFED8"
51088             },
51089             "kaf": {
51090                 "normal": [
51091                     "\u0643"
51092                 ],
51093                 "swash": [
51094                     "\u06AA"
51095                 ],
51096                 "ring": [
51097                     "\u06AB"
51098                 ],
51099                 "dot_above": [
51100                     "\u06AC"
51101                 ],
51102                 "three_dots_below": [
51103                     "\u06AE"
51104                 ],
51105                 "two_dots_above": [
51106                     "\u077F"
51107                 ],
51108                 "dot_below": [
51109                     "\u08B4"
51110                 ],
51111                 "isolated": "\uFED9",
51112                 "final": "\uFEDA",
51113                 "initial": "\uFEDB",
51114                 "medial": "\uFEDC"
51115             },
51116             "lam": {
51117                 "normal": [
51118                     "\u0644"
51119                 ],
51120                 "small_v": [
51121                     "\u06B5"
51122                 ],
51123                 "dot_above": [
51124                     "\u06B6"
51125                 ],
51126                 "three_dots_above": [
51127                     "\u06B7"
51128                 ],
51129                 "three_dots_below": [
51130                     "\u06B8"
51131                 ],
51132                 "bar": [
51133                     "\u076A"
51134                 ],
51135                 "double_bar": [
51136                     "\u08A6"
51137                 ],
51138                 "isolated": "\uFEDD",
51139                 "final": "\uFEDE",
51140                 "initial": "\uFEDF",
51141                 "medial": "\uFEE0"
51142             },
51143             "meem": {
51144                 "normal": [
51145                     "\u0645"
51146                 ],
51147                 "dot_above": [
51148                     "\u0765"
51149                 ],
51150                 "dot_below": [
51151                     "\u0766"
51152                 ],
51153                 "three_dots_above": [
51154                     "\u08A7"
51155                 ],
51156                 "isolated": "\uFEE1",
51157                 "final": "\uFEE2",
51158                 "initial": "\uFEE3",
51159                 "medial": "\uFEE4"
51160             },
51161             "noon": {
51162                 "normal": [
51163                     "\u0646"
51164                 ],
51165                 "dot_below": [
51166                     "\u06B9"
51167                 ],
51168                 "ring": [
51169                     "\u06BC"
51170                 ],
51171                 "three_dots_above": [
51172                     "\u06BD"
51173                 ],
51174                 "two_dots_below": [
51175                     "\u0767"
51176                 ],
51177                 "small_tah": [
51178                     "\u0768"
51179                 ],
51180                 "small_v": [
51181                     "\u0769"
51182                 ],
51183                 "isolated": "\uFEE5",
51184                 "final": "\uFEE6",
51185                 "initial": "\uFEE7",
51186                 "medial": "\uFEE8"
51187             },
51188             "heh": {
51189                 "normal": [
51190                     "\u0647"
51191                 ],
51192                 "isolated": "\uFEE9",
51193                 "final": "\uFEEA",
51194                 "initial": "\uFEEB",
51195                 "medial": "\uFEEC"
51196             },
51197             "waw": {
51198                 "normal": [
51199                     "\u0648"
51200                 ],
51201                 "hamza_above": {
51202                     "normal": [
51203                         "\u0624",
51204                         "\u0648\u0654"
51205                     ],
51206                     "isolated": "\uFE85",
51207                     "final": "\uFE86"
51208                 },
51209                 "high_hamza": [
51210                     "\u0676",
51211                     "\u0648\u0674"
51212                 ],
51213                 "ring": [
51214                     "\u06C4"
51215                 ],
51216                 "two_dots_above": [
51217                     "\u06CA"
51218                 ],
51219                 "dot_above": [
51220                     "\u06CF"
51221                 ],
51222                 "indic_two_above": [
51223                     "\u0778"
51224                 ],
51225                 "indic_three_above": [
51226                     "\u0779"
51227                 ],
51228                 "dot_within": [
51229                     "\u08AB"
51230                 ],
51231                 "isolated": "\uFEED",
51232                 "final": "\uFEEE"
51233             },
51234             "alef_maksura": {
51235                 "normal": [
51236                     "\u0649"
51237                 ],
51238                 "hamza_above": [
51239                     "\u0626",
51240                     "\u064A\u0654"
51241                 ],
51242                 "initial": "\uFBE8",
51243                 "medial": "\uFBE9",
51244                 "isolated": "\uFEEF",
51245                 "final": "\uFEF0"
51246             },
51247             "yeh": {
51248                 "normal": [
51249                     "\u064A"
51250                 ],
51251                 "hamza_above": {
51252                     "normal": [
51253                         "\u0626",
51254                         "\u0649\u0654"
51255                     ],
51256                     "isolated": "\uFE89",
51257                     "final": "\uFE8A",
51258                     "initial": "\uFE8B",
51259                     "medial": "\uFE8C"
51260                 },
51261                 "two_dots_below_hamza_above": [
51262                     "\u08A8"
51263                 ],
51264                 "high_hamza": [
51265                     "\u0678",
51266                     "\u064A\u0674"
51267                 ],
51268                 "tail": [
51269                     "\u06CD"
51270                 ],
51271                 "small_v": [
51272                     "\u06CE"
51273                 ],
51274                 "three_dots_below": [
51275                     "\u06D1"
51276                 ],
51277                 "two_dots_below_dot_above": [
51278                     "\u08A9"
51279                 ],
51280                 "two_dots_below_small_noon_above": [
51281                     "\u08BA"
51282                 ],
51283                 "isolated": "\uFEF1",
51284                 "final": "\uFEF2",
51285                 "initial": "\uFEF3",
51286                 "medial": "\uFEF4"
51287             },
51288             "tteh": {
51289                 "normal": [
51290                     "\u0679"
51291                 ],
51292                 "isolated": "\uFB66",
51293                 "final": "\uFB67",
51294                 "initial": "\uFB68",
51295                 "medial": "\uFB69"
51296             },
51297             "tteheh": {
51298                 "normal": [
51299                     "\u067A"
51300                 ],
51301                 "isolated": "\uFB5E",
51302                 "final": "\uFB5F",
51303                 "initial": "\uFB60",
51304                 "medial": "\uFB61"
51305             },
51306             "beeh": {
51307                 "normal": [
51308                     "\u067B"
51309                 ],
51310                 "isolated": "\uFB52",
51311                 "final": "\uFB53",
51312                 "initial": "\uFB54",
51313                 "medial": "\uFB55"
51314             },
51315             "peh": {
51316                 "normal": [
51317                     "\u067E"
51318                 ],
51319                 "small_meem_above": [
51320                     "\u08B7"
51321                 ],
51322                 "isolated": "\uFB56",
51323                 "final": "\uFB57",
51324                 "initial": "\uFB58",
51325                 "medial": "\uFB59"
51326             },
51327             "teheh": {
51328                 "normal": [
51329                     "\u067F"
51330                 ],
51331                 "isolated": "\uFB62",
51332                 "final": "\uFB63",
51333                 "initial": "\uFB64",
51334                 "medial": "\uFB65"
51335             },
51336             "beheh": {
51337                 "normal": [
51338                     "\u0680"
51339                 ],
51340                 "isolated": "\uFB5A",
51341                 "final": "\uFB5B",
51342                 "initial": "\uFB5C",
51343                 "medial": "\uFB5D"
51344             },
51345             "nyeh": {
51346                 "normal": [
51347                     "\u0683"
51348                 ],
51349                 "isolated": "\uFB76",
51350                 "final": "\uFB77",
51351                 "initial": "\uFB78",
51352                 "medial": "\uFB79"
51353             },
51354             "dyeh": {
51355                 "normal": [
51356                     "\u0684"
51357                 ],
51358                 "isolated": "\uFB72",
51359                 "final": "\uFB73",
51360                 "initial": "\uFB74",
51361                 "medial": "\uFB75"
51362             },
51363             "tcheh": {
51364                 "normal": [
51365                     "\u0686"
51366                 ],
51367                 "dot_above": [
51368                     "\u06BF"
51369                 ],
51370                 "isolated": "\uFB7A",
51371                 "final": "\uFB7B",
51372                 "initial": "\uFB7C",
51373                 "medial": "\uFB7D"
51374             },
51375             "tcheheh": {
51376                 "normal": [
51377                     "\u0687"
51378                 ],
51379                 "isolated": "\uFB7E",
51380                 "final": "\uFB7F",
51381                 "initial": "\uFB80",
51382                 "medial": "\uFB81"
51383             },
51384             "ddal": {
51385                 "normal": [
51386                     "\u0688"
51387                 ],
51388                 "isolated": "\uFB88",
51389                 "final": "\uFB89"
51390             },
51391             "dahal": {
51392                 "normal": [
51393                     "\u068C"
51394                 ],
51395                 "isolated": "\uFB84",
51396                 "final": "\uFB85"
51397             },
51398             "ddahal": {
51399                 "normal": [
51400                     "\u068D"
51401                 ],
51402                 "isolated": "\uFB82",
51403                 "final": "\uFB83"
51404             },
51405             "dul": {
51406                 "normal": [
51407                     "\u068F",
51408                     "\u068E"
51409                 ],
51410                 "isolated": "\uFB86",
51411                 "final": "\uFB87"
51412             },
51413             "rreh": {
51414                 "normal": [
51415                     "\u0691"
51416                 ],
51417                 "isolated": "\uFB8C",
51418                 "final": "\uFB8D"
51419             },
51420             "jeh": {
51421                 "normal": [
51422                     "\u0698"
51423                 ],
51424                 "isolated": "\uFB8A",
51425                 "final": "\uFB8B"
51426             },
51427             "veh": {
51428                 "normal": [
51429                     "\u06A4"
51430                 ],
51431                 "isolated": "\uFB6A",
51432                 "final": "\uFB6B",
51433                 "initial": "\uFB6C",
51434                 "medial": "\uFB6D"
51435             },
51436             "peheh": {
51437                 "normal": [
51438                     "\u06A6"
51439                 ],
51440                 "isolated": "\uFB6E",
51441                 "final": "\uFB6F",
51442                 "initial": "\uFB70",
51443                 "medial": "\uFB71"
51444             },
51445             "keheh": {
51446                 "normal": [
51447                     "\u06A9"
51448                 ],
51449                 "dot_above": [
51450                     "\u0762"
51451                 ],
51452                 "three_dots_above": [
51453                     "\u0763"
51454                 ],
51455                 "three_dots_pointing_upwards_below": [
51456                     "\u0764"
51457                 ],
51458                 "isolated": "\uFB8E",
51459                 "final": "\uFB8F",
51460                 "initial": "\uFB90",
51461                 "medial": "\uFB91"
51462             },
51463             "ng": {
51464                 "normal": [
51465                     "\u06AD"
51466                 ],
51467                 "isolated": "\uFBD3",
51468                 "final": "\uFBD4",
51469                 "initial": "\uFBD5",
51470                 "medial": "\uFBD6"
51471             },
51472             "gaf": {
51473                 "normal": [
51474                     "\u06AF"
51475                 ],
51476                 "ring": [
51477                     "\u06B0"
51478                 ],
51479                 "two_dots_below": [
51480                     "\u06B2"
51481                 ],
51482                 "three_dots_above": [
51483                     "\u06B4"
51484                 ],
51485                 "inverted_stroke": [
51486                     "\u08B0"
51487                 ],
51488                 "isolated": "\uFB92",
51489                 "final": "\uFB93",
51490                 "initial": "\uFB94",
51491                 "medial": "\uFB95"
51492             },
51493             "ngoeh": {
51494                 "normal": [
51495                     "\u06B1"
51496                 ],
51497                 "isolated": "\uFB9A",
51498                 "final": "\uFB9B",
51499                 "initial": "\uFB9C",
51500                 "medial": "\uFB9D"
51501             },
51502             "gueh": {
51503                 "normal": [
51504                     "\u06B3"
51505                 ],
51506                 "isolated": "\uFB96",
51507                 "final": "\uFB97",
51508                 "initial": "\uFB98",
51509                 "medial": "\uFB99"
51510             },
51511             "noon ghunna": {
51512                 "normal": [
51513                     "\u06BA"
51514                 ],
51515                 "isolated": "\uFB9E",
51516                 "final": "\uFB9F"
51517             },
51518             "rnoon": {
51519                 "normal": [
51520                     "\u06BB"
51521                 ],
51522                 "isolated": "\uFBA0",
51523                 "final": "\uFBA1",
51524                 "initial": "\uFBA2",
51525                 "medial": "\uFBA3"
51526             },
51527             "heh doachashmee": {
51528                 "normal": [
51529                     "\u06BE"
51530                 ],
51531                 "isolated": "\uFBAA",
51532                 "final": "\uFBAB",
51533                 "initial": "\uFBAC",
51534                 "medial": "\uFBAD"
51535             },
51536             "heh goal": {
51537                 "normal": [
51538                     "\u06C1"
51539                 ],
51540                 "hamza_above": [
51541                     "\u06C1\u0654",
51542                     "\u06C2"
51543                 ],
51544                 "isolated": "\uFBA6",
51545                 "final": "\uFBA7",
51546                 "initial": "\uFBA8",
51547                 "medial": "\uFBA9"
51548             },
51549             "teh marbuta goal": {
51550                 "normal": [
51551                     "\u06C3"
51552                 ]
51553             },
51554             "kirghiz oe": {
51555                 "normal": [
51556                     "\u06C5"
51557                 ],
51558                 "isolated": "\uFBE0",
51559                 "final": "\uFBE1"
51560             },
51561             "oe": {
51562                 "normal": [
51563                     "\u06C6"
51564                 ],
51565                 "isolated": "\uFBD9",
51566                 "final": "\uFBDA"
51567             },
51568             "u": {
51569                 "normal": [
51570                     "\u06C7"
51571                 ],
51572                 "hamza_above": {
51573                     "normal": [
51574                         "\u0677",
51575                         "\u06C7\u0674"
51576                     ],
51577                     "isolated": "\uFBDD"
51578                 },
51579                 "isolated": "\uFBD7",
51580                 "final": "\uFBD8"
51581             },
51582             "yu": {
51583                 "normal": [
51584                     "\u06C8"
51585                 ],
51586                 "isolated": "\uFBDB",
51587                 "final": "\uFBDC"
51588             },
51589             "kirghiz yu": {
51590                 "normal": [
51591                     "\u06C9"
51592                 ],
51593                 "isolated": "\uFBE2",
51594                 "final": "\uFBE3"
51595             },
51596             "ve": {
51597                 "normal": [
51598                     "\u06CB"
51599                 ],
51600                 "isolated": "\uFBDE",
51601                 "final": "\uFBDF"
51602             },
51603             "farsi yeh": {
51604                 "normal": [
51605                     "\u06CC"
51606                 ],
51607                 "indic_two_above": [
51608                     "\u0775"
51609                 ],
51610                 "indic_three_above": [
51611                     "\u0776"
51612                 ],
51613                 "indic_four_above": [
51614                     "\u0777"
51615                 ],
51616                 "isolated": "\uFBFC",
51617                 "final": "\uFBFD",
51618                 "initial": "\uFBFE",
51619                 "medial": "\uFBFF"
51620             },
51621             "e": {
51622                 "normal": [
51623                     "\u06D0"
51624                 ],
51625                 "isolated": "\uFBE4",
51626                 "final": "\uFBE5",
51627                 "initial": "\uFBE6",
51628                 "medial": "\uFBE7"
51629             },
51630             "yeh barree": {
51631                 "normal": [
51632                     "\u06D2"
51633                 ],
51634                 "hamza_above": {
51635                     "normal": [
51636                         "\u06D2\u0654",
51637                         "\u06D3"
51638                     ],
51639                     "isolated": "\uFBB0",
51640                     "final": "\uFBB1"
51641                 },
51642                 "indic_two_above": [
51643                     "\u077A"
51644                 ],
51645                 "indic_three_above": [
51646                     "\u077B"
51647                 ],
51648                 "isolated": "\uFBAE",
51649                 "final": "\uFBAF"
51650             },
51651             "ae": {
51652                 "normal": [
51653                     "\u06D5"
51654                 ],
51655                 "isolated": "\u06D5",
51656                 "final": "\uFEEA",
51657                 "yeh_above": {
51658                     "normal": [
51659                         "\u06C0",
51660                         "\u06D5\u0654"
51661                     ],
51662                     "isolated": "\uFBA4",
51663                     "final": "\uFBA5"
51664                 }
51665             },
51666             "rohingya yeh": {
51667                 "normal": [
51668                     "\u08AC"
51669                 ]
51670             },
51671             "low alef": {
51672                 "normal": [
51673                     "\u08AD"
51674                 ]
51675             },
51676             "straight waw": {
51677                 "normal": [
51678                     "\u08B1"
51679                 ]
51680             },
51681             "african feh": {
51682                 "normal": [
51683                     "\u08BB"
51684                 ]
51685             },
51686             "african qaf": {
51687                 "normal": [
51688                     "\u08BC"
51689                 ]
51690             },
51691             "african noon": {
51692                 "normal": [
51693                     "\u08BD"
51694                 ]
51695             }
51696         };
51697         exports.default = arabicReference;
51698         });
51699
51700         unwrapExports(unicodeArabic);
51701
51702         var unicodeLigatures = createCommonjsModule(function (module, exports) {
51703         Object.defineProperty(exports, "__esModule", { value: true });
51704         var ligatureReference = {
51705             "\u0626\u0627": {
51706                 "isolated": "\uFBEA",
51707                 "final": "\uFBEB"
51708             },
51709             "\u0626\u06D5": {
51710                 "isolated": "\uFBEC",
51711                 "final": "\uFBED"
51712             },
51713             "\u0626\u0648": {
51714                 "isolated": "\uFBEE",
51715                 "final": "\uFBEF"
51716             },
51717             "\u0626\u06C7": {
51718                 "isolated": "\uFBF0",
51719                 "final": "\uFBF1"
51720             },
51721             "\u0626\u06C6": {
51722                 "isolated": "\uFBF2",
51723                 "final": "\uFBF3"
51724             },
51725             "\u0626\u06C8": {
51726                 "isolated": "\uFBF4",
51727                 "final": "\uFBF5"
51728             },
51729             "\u0626\u06D0": {
51730                 "isolated": "\uFBF6",
51731                 "final": "\uFBF7",
51732                 "initial": "\uFBF8"
51733             },
51734             "\u0626\u0649": {
51735                 "uighur_kirghiz": {
51736                     "isolated": "\uFBF9",
51737                     "final": "\uFBFA",
51738                     "initial": "\uFBFB"
51739                 },
51740                 "isolated": "\uFC03",
51741                 "final": "\uFC68"
51742             },
51743             "\u0626\u062C": {
51744                 "isolated": "\uFC00",
51745                 "initial": "\uFC97"
51746             },
51747             "\u0626\u062D": {
51748                 "isolated": "\uFC01",
51749                 "initial": "\uFC98"
51750             },
51751             "\u0626\u0645": {
51752                 "isolated": "\uFC02",
51753                 "final": "\uFC66",
51754                 "initial": "\uFC9A",
51755                 "medial": "\uFCDF"
51756             },
51757             "\u0626\u064A": {
51758                 "isolated": "\uFC04",
51759                 "final": "\uFC69"
51760             },
51761             "\u0628\u062C": {
51762                 "isolated": "\uFC05",
51763                 "initial": "\uFC9C"
51764             },
51765             "\u0628\u062D": {
51766                 "isolated": "\uFC06",
51767                 "initial": "\uFC9D"
51768             },
51769             "\u0628\u062E": {
51770                 "isolated": "\uFC07",
51771                 "initial": "\uFC9E"
51772             },
51773             "\u0628\u0645": {
51774                 "isolated": "\uFC08",
51775                 "final": "\uFC6C",
51776                 "initial": "\uFC9F",
51777                 "medial": "\uFCE1"
51778             },
51779             "\u0628\u0649": {
51780                 "isolated": "\uFC09",
51781                 "final": "\uFC6E"
51782             },
51783             "\u0628\u064A": {
51784                 "isolated": "\uFC0A",
51785                 "final": "\uFC6F"
51786             },
51787             "\u062A\u062C": {
51788                 "isolated": "\uFC0B",
51789                 "initial": "\uFCA1"
51790             },
51791             "\u062A\u062D": {
51792                 "isolated": "\uFC0C",
51793                 "initial": "\uFCA2"
51794             },
51795             "\u062A\u062E": {
51796                 "isolated": "\uFC0D",
51797                 "initial": "\uFCA3"
51798             },
51799             "\u062A\u0645": {
51800                 "isolated": "\uFC0E",
51801                 "final": "\uFC72",
51802                 "initial": "\uFCA4",
51803                 "medial": "\uFCE3"
51804             },
51805             "\u062A\u0649": {
51806                 "isolated": "\uFC0F",
51807                 "final": "\uFC74"
51808             },
51809             "\u062A\u064A": {
51810                 "isolated": "\uFC10",
51811                 "final": "\uFC75"
51812             },
51813             "\u062B\u062C": {
51814                 "isolated": "\uFC11"
51815             },
51816             "\u062B\u0645": {
51817                 "isolated": "\uFC12",
51818                 "final": "\uFC78",
51819                 "initial": "\uFCA6",
51820                 "medial": "\uFCE5"
51821             },
51822             "\u062B\u0649": {
51823                 "isolated": "\uFC13",
51824                 "final": "\uFC7A"
51825             },
51826             "\u062B\u0648": {
51827                 "isolated": "\uFC14"
51828             },
51829             "\u062C\u062D": {
51830                 "isolated": "\uFC15",
51831                 "initial": "\uFCA7"
51832             },
51833             "\u062C\u0645": {
51834                 "isolated": "\uFC16",
51835                 "initial": "\uFCA8"
51836             },
51837             "\u062D\u062C": {
51838                 "isolated": "\uFC17",
51839                 "initial": "\uFCA9"
51840             },
51841             "\u062D\u0645": {
51842                 "isolated": "\uFC18",
51843                 "initial": "\uFCAA"
51844             },
51845             "\u062E\u062C": {
51846                 "isolated": "\uFC19",
51847                 "initial": "\uFCAB"
51848             },
51849             "\u062E\u062D": {
51850                 "isolated": "\uFC1A"
51851             },
51852             "\u062E\u0645": {
51853                 "isolated": "\uFC1B",
51854                 "initial": "\uFCAC"
51855             },
51856             "\u0633\u062C": {
51857                 "isolated": "\uFC1C",
51858                 "initial": "\uFCAD",
51859                 "medial": "\uFD34"
51860             },
51861             "\u0633\u062D": {
51862                 "isolated": "\uFC1D",
51863                 "initial": "\uFCAE",
51864                 "medial": "\uFD35"
51865             },
51866             "\u0633\u062E": {
51867                 "isolated": "\uFC1E",
51868                 "initial": "\uFCAF",
51869                 "medial": "\uFD36"
51870             },
51871             "\u0633\u0645": {
51872                 "isolated": "\uFC1F",
51873                 "initial": "\uFCB0",
51874                 "medial": "\uFCE7"
51875             },
51876             "\u0635\u062D": {
51877                 "isolated": "\uFC20",
51878                 "initial": "\uFCB1"
51879             },
51880             "\u0635\u0645": {
51881                 "isolated": "\uFC21",
51882                 "initial": "\uFCB3"
51883             },
51884             "\u0636\u062C": {
51885                 "isolated": "\uFC22",
51886                 "initial": "\uFCB4"
51887             },
51888             "\u0636\u062D": {
51889                 "isolated": "\uFC23",
51890                 "initial": "\uFCB5"
51891             },
51892             "\u0636\u062E": {
51893                 "isolated": "\uFC24",
51894                 "initial": "\uFCB6"
51895             },
51896             "\u0636\u0645": {
51897                 "isolated": "\uFC25",
51898                 "initial": "\uFCB7"
51899             },
51900             "\u0637\u062D": {
51901                 "isolated": "\uFC26",
51902                 "initial": "\uFCB8"
51903             },
51904             "\u0637\u0645": {
51905                 "isolated": "\uFC27",
51906                 "initial": "\uFD33",
51907                 "medial": "\uFD3A"
51908             },
51909             "\u0638\u0645": {
51910                 "isolated": "\uFC28",
51911                 "initial": "\uFCB9",
51912                 "medial": "\uFD3B"
51913             },
51914             "\u0639\u062C": {
51915                 "isolated": "\uFC29",
51916                 "initial": "\uFCBA"
51917             },
51918             "\u0639\u0645": {
51919                 "isolated": "\uFC2A",
51920                 "initial": "\uFCBB"
51921             },
51922             "\u063A\u062C": {
51923                 "isolated": "\uFC2B",
51924                 "initial": "\uFCBC"
51925             },
51926             "\u063A\u0645": {
51927                 "isolated": "\uFC2C",
51928                 "initial": "\uFCBD"
51929             },
51930             "\u0641\u062C": {
51931                 "isolated": "\uFC2D",
51932                 "initial": "\uFCBE"
51933             },
51934             "\u0641\u062D": {
51935                 "isolated": "\uFC2E",
51936                 "initial": "\uFCBF"
51937             },
51938             "\u0641\u062E": {
51939                 "isolated": "\uFC2F",
51940                 "initial": "\uFCC0"
51941             },
51942             "\u0641\u0645": {
51943                 "isolated": "\uFC30",
51944                 "initial": "\uFCC1"
51945             },
51946             "\u0641\u0649": {
51947                 "isolated": "\uFC31",
51948                 "final": "\uFC7C"
51949             },
51950             "\u0641\u064A": {
51951                 "isolated": "\uFC32",
51952                 "final": "\uFC7D"
51953             },
51954             "\u0642\u062D": {
51955                 "isolated": "\uFC33",
51956                 "initial": "\uFCC2"
51957             },
51958             "\u0642\u0645": {
51959                 "isolated": "\uFC34",
51960                 "initial": "\uFCC3"
51961             },
51962             "\u0642\u0649": {
51963                 "isolated": "\uFC35",
51964                 "final": "\uFC7E"
51965             },
51966             "\u0642\u064A": {
51967                 "isolated": "\uFC36",
51968                 "final": "\uFC7F"
51969             },
51970             "\u0643\u0627": {
51971                 "isolated": "\uFC37",
51972                 "final": "\uFC80"
51973             },
51974             "\u0643\u062C": {
51975                 "isolated": "\uFC38",
51976                 "initial": "\uFCC4"
51977             },
51978             "\u0643\u062D": {
51979                 "isolated": "\uFC39",
51980                 "initial": "\uFCC5"
51981             },
51982             "\u0643\u062E": {
51983                 "isolated": "\uFC3A",
51984                 "initial": "\uFCC6"
51985             },
51986             "\u0643\u0644": {
51987                 "isolated": "\uFC3B",
51988                 "final": "\uFC81",
51989                 "initial": "\uFCC7",
51990                 "medial": "\uFCEB"
51991             },
51992             "\u0643\u0645": {
51993                 "isolated": "\uFC3C",
51994                 "final": "\uFC82",
51995                 "initial": "\uFCC8",
51996                 "medial": "\uFCEC"
51997             },
51998             "\u0643\u0649": {
51999                 "isolated": "\uFC3D",
52000                 "final": "\uFC83"
52001             },
52002             "\u0643\u064A": {
52003                 "isolated": "\uFC3E",
52004                 "final": "\uFC84"
52005             },
52006             "\u0644\u062C": {
52007                 "isolated": "\uFC3F",
52008                 "initial": "\uFCC9"
52009             },
52010             "\u0644\u062D": {
52011                 "isolated": "\uFC40",
52012                 "initial": "\uFCCA"
52013             },
52014             "\u0644\u062E": {
52015                 "isolated": "\uFC41",
52016                 "initial": "\uFCCB"
52017             },
52018             "\u0644\u0645": {
52019                 "isolated": "\uFC42",
52020                 "final": "\uFC85",
52021                 "initial": "\uFCCC",
52022                 "medial": "\uFCED"
52023             },
52024             "\u0644\u0649": {
52025                 "isolated": "\uFC43",
52026                 "final": "\uFC86"
52027             },
52028             "\u0644\u064A": {
52029                 "isolated": "\uFC44",
52030                 "final": "\uFC87"
52031             },
52032             "\u0645\u062C": {
52033                 "isolated": "\uFC45",
52034                 "initial": "\uFCCE"
52035             },
52036             "\u0645\u062D": {
52037                 "isolated": "\uFC46",
52038                 "initial": "\uFCCF"
52039             },
52040             "\u0645\u062E": {
52041                 "isolated": "\uFC47",
52042                 "initial": "\uFCD0"
52043             },
52044             "\u0645\u0645": {
52045                 "isolated": "\uFC48",
52046                 "final": "\uFC89",
52047                 "initial": "\uFCD1"
52048             },
52049             "\u0645\u0649": {
52050                 "isolated": "\uFC49"
52051             },
52052             "\u0645\u064A": {
52053                 "isolated": "\uFC4A"
52054             },
52055             "\u0646\u062C": {
52056                 "isolated": "\uFC4B",
52057                 "initial": "\uFCD2"
52058             },
52059             "\u0646\u062D": {
52060                 "isolated": "\uFC4C",
52061                 "initial": "\uFCD3"
52062             },
52063             "\u0646\u062E": {
52064                 "isolated": "\uFC4D",
52065                 "initial": "\uFCD4"
52066             },
52067             "\u0646\u0645": {
52068                 "isolated": "\uFC4E",
52069                 "final": "\uFC8C",
52070                 "initial": "\uFCD5",
52071                 "medial": "\uFCEE"
52072             },
52073             "\u0646\u0649": {
52074                 "isolated": "\uFC4F",
52075                 "final": "\uFC8E"
52076             },
52077             "\u0646\u064A": {
52078                 "isolated": "\uFC50",
52079                 "final": "\uFC8F"
52080             },
52081             "\u0647\u062C": {
52082                 "isolated": "\uFC51",
52083                 "initial": "\uFCD7"
52084             },
52085             "\u0647\u0645": {
52086                 "isolated": "\uFC52",
52087                 "initial": "\uFCD8"
52088             },
52089             "\u0647\u0649": {
52090                 "isolated": "\uFC53"
52091             },
52092             "\u0647\u064A": {
52093                 "isolated": "\uFC54"
52094             },
52095             "\u064A\u062C": {
52096                 "isolated": "\uFC55",
52097                 "initial": "\uFCDA"
52098             },
52099             "\u064A\u062D": {
52100                 "isolated": "\uFC56",
52101                 "initial": "\uFCDB"
52102             },
52103             "\u064A\u062E": {
52104                 "isolated": "\uFC57",
52105                 "initial": "\uFCDC"
52106             },
52107             "\u064A\u0645": {
52108                 "isolated": "\uFC58",
52109                 "final": "\uFC93",
52110                 "initial": "\uFCDD",
52111                 "medial": "\uFCF0"
52112             },
52113             "\u064A\u0649": {
52114                 "isolated": "\uFC59",
52115                 "final": "\uFC95"
52116             },
52117             "\u064A\u064A": {
52118                 "isolated": "\uFC5A",
52119                 "final": "\uFC96"
52120             },
52121             "\u0630\u0670": {
52122                 "isolated": "\uFC5B"
52123             },
52124             "\u0631\u0670": {
52125                 "isolated": "\uFC5C"
52126             },
52127             "\u0649\u0670": {
52128                 "isolated": "\uFC5D",
52129                 "final": "\uFC90"
52130             },
52131             "\u064C\u0651": {
52132                 "isolated": "\uFC5E"
52133             },
52134             "\u064D\u0651": {
52135                 "isolated": "\uFC5F"
52136             },
52137             "\u064E\u0651": {
52138                 "isolated": "\uFC60"
52139             },
52140             "\u064F\u0651": {
52141                 "isolated": "\uFC61"
52142             },
52143             "\u0650\u0651": {
52144                 "isolated": "\uFC62"
52145             },
52146             "\u0651\u0670": {
52147                 "isolated": "\uFC63"
52148             },
52149             "\u0626\u0631": {
52150                 "final": "\uFC64"
52151             },
52152             "\u0626\u0632": {
52153                 "final": "\uFC65"
52154             },
52155             "\u0626\u0646": {
52156                 "final": "\uFC67"
52157             },
52158             "\u0628\u0631": {
52159                 "final": "\uFC6A"
52160             },
52161             "\u0628\u0632": {
52162                 "final": "\uFC6B"
52163             },
52164             "\u0628\u0646": {
52165                 "final": "\uFC6D"
52166             },
52167             "\u062A\u0631": {
52168                 "final": "\uFC70"
52169             },
52170             "\u062A\u0632": {
52171                 "final": "\uFC71"
52172             },
52173             "\u062A\u0646": {
52174                 "final": "\uFC73"
52175             },
52176             "\u062B\u0631": {
52177                 "final": "\uFC76"
52178             },
52179             "\u062B\u0632": {
52180                 "final": "\uFC77"
52181             },
52182             "\u062B\u0646": {
52183                 "final": "\uFC79"
52184             },
52185             "\u062B\u064A": {
52186                 "final": "\uFC7B"
52187             },
52188             "\u0645\u0627": {
52189                 "final": "\uFC88"
52190             },
52191             "\u0646\u0631": {
52192                 "final": "\uFC8A"
52193             },
52194             "\u0646\u0632": {
52195                 "final": "\uFC8B"
52196             },
52197             "\u0646\u0646": {
52198                 "final": "\uFC8D"
52199             },
52200             "\u064A\u0631": {
52201                 "final": "\uFC91"
52202             },
52203             "\u064A\u0632": {
52204                 "final": "\uFC92"
52205             },
52206             "\u064A\u0646": {
52207                 "final": "\uFC94"
52208             },
52209             "\u0626\u062E": {
52210                 "initial": "\uFC99"
52211             },
52212             "\u0626\u0647": {
52213                 "initial": "\uFC9B",
52214                 "medial": "\uFCE0"
52215             },
52216             "\u0628\u0647": {
52217                 "initial": "\uFCA0",
52218                 "medial": "\uFCE2"
52219             },
52220             "\u062A\u0647": {
52221                 "initial": "\uFCA5",
52222                 "medial": "\uFCE4"
52223             },
52224             "\u0635\u062E": {
52225                 "initial": "\uFCB2"
52226             },
52227             "\u0644\u0647": {
52228                 "initial": "\uFCCD"
52229             },
52230             "\u0646\u0647": {
52231                 "initial": "\uFCD6",
52232                 "medial": "\uFCEF"
52233             },
52234             "\u0647\u0670": {
52235                 "initial": "\uFCD9"
52236             },
52237             "\u064A\u0647": {
52238                 "initial": "\uFCDE",
52239                 "medial": "\uFCF1"
52240             },
52241             "\u062B\u0647": {
52242                 "medial": "\uFCE6"
52243             },
52244             "\u0633\u0647": {
52245                 "medial": "\uFCE8",
52246                 "initial": "\uFD31"
52247             },
52248             "\u0634\u0645": {
52249                 "medial": "\uFCE9",
52250                 "isolated": "\uFD0C",
52251                 "final": "\uFD28",
52252                 "initial": "\uFD30"
52253             },
52254             "\u0634\u0647": {
52255                 "medial": "\uFCEA",
52256                 "initial": "\uFD32"
52257             },
52258             "\u0640\u064E\u0651": {
52259                 "medial": "\uFCF2"
52260             },
52261             "\u0640\u064F\u0651": {
52262                 "medial": "\uFCF3"
52263             },
52264             "\u0640\u0650\u0651": {
52265                 "medial": "\uFCF4"
52266             },
52267             "\u0637\u0649": {
52268                 "isolated": "\uFCF5",
52269                 "final": "\uFD11"
52270             },
52271             "\u0637\u064A": {
52272                 "isolated": "\uFCF6",
52273                 "final": "\uFD12"
52274             },
52275             "\u0639\u0649": {
52276                 "isolated": "\uFCF7",
52277                 "final": "\uFD13"
52278             },
52279             "\u0639\u064A": {
52280                 "isolated": "\uFCF8",
52281                 "final": "\uFD14"
52282             },
52283             "\u063A\u0649": {
52284                 "isolated": "\uFCF9",
52285                 "final": "\uFD15"
52286             },
52287             "\u063A\u064A": {
52288                 "isolated": "\uFCFA",
52289                 "final": "\uFD16"
52290             },
52291             "\u0633\u0649": {
52292                 "isolated": "\uFCFB"
52293             },
52294             "\u0633\u064A": {
52295                 "isolated": "\uFCFC",
52296                 "final": "\uFD18"
52297             },
52298             "\u0634\u0649": {
52299                 "isolated": "\uFCFD",
52300                 "final": "\uFD19"
52301             },
52302             "\u0634\u064A": {
52303                 "isolated": "\uFCFE",
52304                 "final": "\uFD1A"
52305             },
52306             "\u062D\u0649": {
52307                 "isolated": "\uFCFF",
52308                 "final": "\uFD1B"
52309             },
52310             "\u062D\u064A": {
52311                 "isolated": "\uFD00",
52312                 "final": "\uFD1C"
52313             },
52314             "\u062C\u0649": {
52315                 "isolated": "\uFD01",
52316                 "final": "\uFD1D"
52317             },
52318             "\u062C\u064A": {
52319                 "isolated": "\uFD02",
52320                 "final": "\uFD1E"
52321             },
52322             "\u062E\u0649": {
52323                 "isolated": "\uFD03",
52324                 "final": "\uFD1F"
52325             },
52326             "\u062E\u064A": {
52327                 "isolated": "\uFD04",
52328                 "final": "\uFD20"
52329             },
52330             "\u0635\u0649": {
52331                 "isolated": "\uFD05",
52332                 "final": "\uFD21"
52333             },
52334             "\u0635\u064A": {
52335                 "isolated": "\uFD06",
52336                 "final": "\uFD22"
52337             },
52338             "\u0636\u0649": {
52339                 "isolated": "\uFD07",
52340                 "final": "\uFD23"
52341             },
52342             "\u0636\u064A": {
52343                 "isolated": "\uFD08",
52344                 "final": "\uFD24"
52345             },
52346             "\u0634\u062C": {
52347                 "isolated": "\uFD09",
52348                 "final": "\uFD25",
52349                 "initial": "\uFD2D",
52350                 "medial": "\uFD37"
52351             },
52352             "\u0634\u062D": {
52353                 "isolated": "\uFD0A",
52354                 "final": "\uFD26",
52355                 "initial": "\uFD2E",
52356                 "medial": "\uFD38"
52357             },
52358             "\u0634\u062E": {
52359                 "isolated": "\uFD0B",
52360                 "final": "\uFD27",
52361                 "initial": "\uFD2F",
52362                 "medial": "\uFD39"
52363             },
52364             "\u0634\u0631": {
52365                 "isolated": "\uFD0D",
52366                 "final": "\uFD29"
52367             },
52368             "\u0633\u0631": {
52369                 "isolated": "\uFD0E",
52370                 "final": "\uFD2A"
52371             },
52372             "\u0635\u0631": {
52373                 "isolated": "\uFD0F",
52374                 "final": "\uFD2B"
52375             },
52376             "\u0636\u0631": {
52377                 "isolated": "\uFD10",
52378                 "final": "\uFD2C"
52379             },
52380             "\u0633\u0639": {
52381                 "final": "\uFD17"
52382             },
52383             "\u062A\u062C\u0645": {
52384                 "initial": "\uFD50"
52385             },
52386             "\u062A\u062D\u062C": {
52387                 "final": "\uFD51",
52388                 "initial": "\uFD52"
52389             },
52390             "\u062A\u062D\u0645": {
52391                 "initial": "\uFD53"
52392             },
52393             "\u062A\u062E\u0645": {
52394                 "initial": "\uFD54"
52395             },
52396             "\u062A\u0645\u062C": {
52397                 "initial": "\uFD55"
52398             },
52399             "\u062A\u0645\u062D": {
52400                 "initial": "\uFD56"
52401             },
52402             "\u062A\u0645\u062E": {
52403                 "initial": "\uFD57"
52404             },
52405             "\u062C\u0645\u062D": {
52406                 "final": "\uFD58",
52407                 "initial": "\uFD59"
52408             },
52409             "\u062D\u0645\u064A": {
52410                 "final": "\uFD5A"
52411             },
52412             "\u062D\u0645\u0649": {
52413                 "final": "\uFD5B"
52414             },
52415             "\u0633\u062D\u062C": {
52416                 "initial": "\uFD5C"
52417             },
52418             "\u0633\u062C\u062D": {
52419                 "initial": "\uFD5D"
52420             },
52421             "\u0633\u062C\u0649": {
52422                 "final": "\uFD5E"
52423             },
52424             "\u0633\u0645\u062D": {
52425                 "final": "\uFD5F",
52426                 "initial": "\uFD60"
52427             },
52428             "\u0633\u0645\u062C": {
52429                 "initial": "\uFD61"
52430             },
52431             "\u0633\u0645\u0645": {
52432                 "final": "\uFD62",
52433                 "initial": "\uFD63"
52434             },
52435             "\u0635\u062D\u062D": {
52436                 "final": "\uFD64",
52437                 "initial": "\uFD65"
52438             },
52439             "\u0635\u0645\u0645": {
52440                 "final": "\uFD66",
52441                 "initial": "\uFDC5"
52442             },
52443             "\u0634\u062D\u0645": {
52444                 "final": "\uFD67",
52445                 "initial": "\uFD68"
52446             },
52447             "\u0634\u062C\u064A": {
52448                 "final": "\uFD69"
52449             },
52450             "\u0634\u0645\u062E": {
52451                 "final": "\uFD6A",
52452                 "initial": "\uFD6B"
52453             },
52454             "\u0634\u0645\u0645": {
52455                 "final": "\uFD6C",
52456                 "initial": "\uFD6D"
52457             },
52458             "\u0636\u062D\u0649": {
52459                 "final": "\uFD6E"
52460             },
52461             "\u0636\u062E\u0645": {
52462                 "final": "\uFD6F",
52463                 "initial": "\uFD70"
52464             },
52465             "\u0636\u0645\u062D": {
52466                 "final": "\uFD71"
52467             },
52468             "\u0637\u0645\u062D": {
52469                 "initial": "\uFD72"
52470             },
52471             "\u0637\u0645\u0645": {
52472                 "initial": "\uFD73"
52473             },
52474             "\u0637\u0645\u064A": {
52475                 "final": "\uFD74"
52476             },
52477             "\u0639\u062C\u0645": {
52478                 "final": "\uFD75",
52479                 "initial": "\uFDC4"
52480             },
52481             "\u0639\u0645\u0645": {
52482                 "final": "\uFD76",
52483                 "initial": "\uFD77"
52484             },
52485             "\u0639\u0645\u0649": {
52486                 "final": "\uFD78"
52487             },
52488             "\u063A\u0645\u0645": {
52489                 "final": "\uFD79"
52490             },
52491             "\u063A\u0645\u064A": {
52492                 "final": "\uFD7A"
52493             },
52494             "\u063A\u0645\u0649": {
52495                 "final": "\uFD7B"
52496             },
52497             "\u0641\u062E\u0645": {
52498                 "final": "\uFD7C",
52499                 "initial": "\uFD7D"
52500             },
52501             "\u0642\u0645\u062D": {
52502                 "final": "\uFD7E",
52503                 "initial": "\uFDB4"
52504             },
52505             "\u0642\u0645\u0645": {
52506                 "final": "\uFD7F"
52507             },
52508             "\u0644\u062D\u0645": {
52509                 "final": "\uFD80",
52510                 "initial": "\uFDB5"
52511             },
52512             "\u0644\u062D\u064A": {
52513                 "final": "\uFD81"
52514             },
52515             "\u0644\u062D\u0649": {
52516                 "final": "\uFD82"
52517             },
52518             "\u0644\u062C\u062C": {
52519                 "initial": "\uFD83",
52520                 "final": "\uFD84"
52521             },
52522             "\u0644\u062E\u0645": {
52523                 "final": "\uFD85",
52524                 "initial": "\uFD86"
52525             },
52526             "\u0644\u0645\u062D": {
52527                 "final": "\uFD87",
52528                 "initial": "\uFD88"
52529             },
52530             "\u0645\u062D\u062C": {
52531                 "initial": "\uFD89"
52532             },
52533             "\u0645\u062D\u0645": {
52534                 "initial": "\uFD8A"
52535             },
52536             "\u0645\u062D\u064A": {
52537                 "final": "\uFD8B"
52538             },
52539             "\u0645\u062C\u062D": {
52540                 "initial": "\uFD8C"
52541             },
52542             "\u0645\u062C\u0645": {
52543                 "initial": "\uFD8D"
52544             },
52545             "\u0645\u062E\u062C": {
52546                 "initial": "\uFD8E"
52547             },
52548             "\u0645\u062E\u0645": {
52549                 "initial": "\uFD8F"
52550             },
52551             "\u0645\u062C\u062E": {
52552                 "initial": "\uFD92"
52553             },
52554             "\u0647\u0645\u062C": {
52555                 "initial": "\uFD93"
52556             },
52557             "\u0647\u0645\u0645": {
52558                 "initial": "\uFD94"
52559             },
52560             "\u0646\u062D\u0645": {
52561                 "initial": "\uFD95"
52562             },
52563             "\u0646\u062D\u0649": {
52564                 "final": "\uFD96"
52565             },
52566             "\u0646\u062C\u0645": {
52567                 "final": "\uFD97",
52568                 "initial": "\uFD98"
52569             },
52570             "\u0646\u062C\u0649": {
52571                 "final": "\uFD99"
52572             },
52573             "\u0646\u0645\u064A": {
52574                 "final": "\uFD9A"
52575             },
52576             "\u0646\u0645\u0649": {
52577                 "final": "\uFD9B"
52578             },
52579             "\u064A\u0645\u0645": {
52580                 "final": "\uFD9C",
52581                 "initial": "\uFD9D"
52582             },
52583             "\u0628\u062E\u064A": {
52584                 "final": "\uFD9E"
52585             },
52586             "\u062A\u062C\u064A": {
52587                 "final": "\uFD9F"
52588             },
52589             "\u062A\u062C\u0649": {
52590                 "final": "\uFDA0"
52591             },
52592             "\u062A\u062E\u064A": {
52593                 "final": "\uFDA1"
52594             },
52595             "\u062A\u062E\u0649": {
52596                 "final": "\uFDA2"
52597             },
52598             "\u062A\u0645\u064A": {
52599                 "final": "\uFDA3"
52600             },
52601             "\u062A\u0645\u0649": {
52602                 "final": "\uFDA4"
52603             },
52604             "\u062C\u0645\u064A": {
52605                 "final": "\uFDA5"
52606             },
52607             "\u062C\u062D\u0649": {
52608                 "final": "\uFDA6"
52609             },
52610             "\u062C\u0645\u0649": {
52611                 "final": "\uFDA7"
52612             },
52613             "\u0633\u062E\u0649": {
52614                 "final": "\uFDA8"
52615             },
52616             "\u0635\u062D\u064A": {
52617                 "final": "\uFDA9"
52618             },
52619             "\u0634\u062D\u064A": {
52620                 "final": "\uFDAA"
52621             },
52622             "\u0636\u062D\u064A": {
52623                 "final": "\uFDAB"
52624             },
52625             "\u0644\u062C\u064A": {
52626                 "final": "\uFDAC"
52627             },
52628             "\u0644\u0645\u064A": {
52629                 "final": "\uFDAD"
52630             },
52631             "\u064A\u062D\u064A": {
52632                 "final": "\uFDAE"
52633             },
52634             "\u064A\u062C\u064A": {
52635                 "final": "\uFDAF"
52636             },
52637             "\u064A\u0645\u064A": {
52638                 "final": "\uFDB0"
52639             },
52640             "\u0645\u0645\u064A": {
52641                 "final": "\uFDB1"
52642             },
52643             "\u0642\u0645\u064A": {
52644                 "final": "\uFDB2"
52645             },
52646             "\u0646\u062D\u064A": {
52647                 "final": "\uFDB3"
52648             },
52649             "\u0639\u0645\u064A": {
52650                 "final": "\uFDB6"
52651             },
52652             "\u0643\u0645\u064A": {
52653                 "final": "\uFDB7"
52654             },
52655             "\u0646\u062C\u062D": {
52656                 "initial": "\uFDB8",
52657                 "final": "\uFDBD"
52658             },
52659             "\u0645\u062E\u064A": {
52660                 "final": "\uFDB9"
52661             },
52662             "\u0644\u062C\u0645": {
52663                 "initial": "\uFDBA",
52664                 "final": "\uFDBC"
52665             },
52666             "\u0643\u0645\u0645": {
52667                 "final": "\uFDBB",
52668                 "initial": "\uFDC3"
52669             },
52670             "\u062C\u062D\u064A": {
52671                 "final": "\uFDBE"
52672             },
52673             "\u062D\u062C\u064A": {
52674                 "final": "\uFDBF"
52675             },
52676             "\u0645\u062C\u064A": {
52677                 "final": "\uFDC0"
52678             },
52679             "\u0641\u0645\u064A": {
52680                 "final": "\uFDC1"
52681             },
52682             "\u0628\u062D\u064A": {
52683                 "final": "\uFDC2"
52684             },
52685             "\u0633\u062E\u064A": {
52686                 "final": "\uFDC6"
52687             },
52688             "\u0646\u062C\u064A": {
52689                 "final": "\uFDC7"
52690             },
52691             "\u0644\u0622": {
52692                 "isolated": "\uFEF5",
52693                 "final": "\uFEF6"
52694             },
52695             "\u0644\u0623": {
52696                 "isolated": "\uFEF7",
52697                 "final": "\uFEF8"
52698             },
52699             "\u0644\u0625": {
52700                 "isolated": "\uFEF9",
52701                 "final": "\uFEFA"
52702             },
52703             "\u0644\u0627": {
52704                 "isolated": "\uFEFB",
52705                 "final": "\uFEFC"
52706             },
52707             "words": {
52708                 "\u0635\u0644\u06D2": "\uFDF0",
52709                 "\u0642\u0644\u06D2": "\uFDF1",
52710                 "\u0627\u0644\u0644\u0647": "\uFDF2",
52711                 "\u0627\u0643\u0628\u0631": "\uFDF3",
52712                 "\u0645\u062D\u0645\u062F": "\uFDF4",
52713                 "\u0635\u0644\u0639\u0645": "\uFDF5",
52714                 "\u0631\u0633\u0648\u0644": "\uFDF6",
52715                 "\u0639\u0644\u064A\u0647": "\uFDF7",
52716                 "\u0648\u0633\u0644\u0645": "\uFDF8",
52717                 "\u0635\u0644\u0649": "\uFDF9",
52718                 "\u0635\u0644\u0649\u0627\u0644\u0644\u0647\u0639\u0644\u064A\u0647\u0648\u0633\u0644\u0645": "\uFDFA",
52719                 "\u062C\u0644\u062C\u0644\u0627\u0644\u0647": "\uFDFB",
52720                 "\u0631\u06CC\u0627\u0644": "\uFDFC"
52721             }
52722         };
52723         exports.default = ligatureReference;
52724         });
52725
52726         unwrapExports(unicodeLigatures);
52727
52728         var reference = createCommonjsModule(function (module, exports) {
52729         Object.defineProperty(exports, "__esModule", { value: true });
52730
52731
52732         var letterList = Object.keys(unicodeArabic.default);
52733         exports.letterList = letterList;
52734         var ligatureList = Object.keys(unicodeLigatures.default);
52735         exports.ligatureList = ligatureList;
52736         var ligatureWordList = Object.keys(unicodeLigatures.default.words);
52737         exports.ligatureWordList = ligatureWordList;
52738         var lams = '\u0644\u06B5\u06B6\u06B7\u06B8';
52739         exports.lams = lams;
52740         var alefs = '\u0627\u0622\u0623\u0625\u0671\u0672\u0673\u0675\u0773\u0774';
52741         exports.alefs = alefs;
52742         // for (var l = 1; l < lams.length; l++) {
52743         //   console.log('-');
52744         //   for (var a = 0; a < alefs.length; a++) {
52745         //     console.log(a + ': ' + lams[l] + alefs[a]);
52746         //   }
52747         // }
52748         var tashkeel = '\u0605\u0640\u0670\u0674\u06DF\u06E7\u06E8';
52749         exports.tashkeel = tashkeel;
52750         function addToTashkeel(start, finish) {
52751             for (var i = start; i <= finish; i++) {
52752                 exports.tashkeel = tashkeel += String.fromCharCode(i);
52753             }
52754         }
52755         addToTashkeel(0x0610, 0x061A);
52756         addToTashkeel(0x064B, 0x065F);
52757         addToTashkeel(0x06D6, 0x06DC);
52758         addToTashkeel(0x06E0, 0x06E4);
52759         addToTashkeel(0x06EA, 0x06ED);
52760         addToTashkeel(0x08D3, 0x08E1);
52761         addToTashkeel(0x08E3, 0x08FF);
52762         addToTashkeel(0xFE70, 0xFE7F);
52763         var lineBreakers = '\u0627\u0629\u0648\u06C0\u06CF\u06FD\u06FE\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u08E2\u08B1\u08B2\u08B9';
52764         exports.lineBreakers = lineBreakers;
52765         function addToLineBreakers(start, finish) {
52766             for (var i = start; i <= finish; i++) {
52767                 exports.lineBreakers = lineBreakers += String.fromCharCode(i);
52768             }
52769         }
52770         addToLineBreakers(0x0600, 0x061F); // it's OK to include tashkeel in this range as it is ignored
52771         addToLineBreakers(0x0621, 0x0625);
52772         addToLineBreakers(0x062F, 0x0632);
52773         addToLineBreakers(0x0660, 0x066D); // numerals, math
52774         addToLineBreakers(0x0671, 0x0677);
52775         addToLineBreakers(0x0688, 0x0699);
52776         addToLineBreakers(0x06C3, 0x06CB);
52777         addToLineBreakers(0x06D2, 0x06F9);
52778         addToLineBreakers(0x0759, 0x075B);
52779         addToLineBreakers(0x08AA, 0x08AE);
52780         addToLineBreakers(0xFB50, 0xFDFD); // presentation forms look like they could connect, but never do
52781         // Presentation Forms A includes diacritics but they are meant to stand alone
52782         addToLineBreakers(0xFE80, 0xFEFC); // presentation forms look like they could connect, but never do
52783         // numerals, math
52784         addToLineBreakers(0x10E60, 0x10E7F);
52785         addToLineBreakers(0x1EC70, 0x1ECBF);
52786         addToLineBreakers(0x1EE00, 0x1EEFF);
52787         });
52788
52789         unwrapExports(reference);
52790         var reference_1 = reference.letterList;
52791         var reference_2 = reference.ligatureList;
52792         var reference_3 = reference.ligatureWordList;
52793         var reference_4 = reference.lams;
52794         var reference_5 = reference.alefs;
52795         var reference_6 = reference.tashkeel;
52796         var reference_7 = reference.lineBreakers;
52797
52798         var GlyphSplitter_1 = createCommonjsModule(function (module, exports) {
52799         Object.defineProperty(exports, "__esModule", { value: true });
52800
52801
52802         function GlyphSplitter(word) {
52803             var letters = [];
52804             var lastLetter = '';
52805             word.split('').forEach(function (letter) {
52806                 if (isArabic_1.isArabic(letter)) {
52807                     if (reference.tashkeel.indexOf(letter) > -1) {
52808                         letters[letters.length - 1] += letter;
52809                     }
52810                     else if (lastLetter.length && ((reference.lams.indexOf(lastLetter) === 0 && reference.alefs.indexOf(letter) > -1) || (reference.lams.indexOf(lastLetter) > 0 && reference.alefs.indexOf(letter) === 0))) {
52811                         // valid LA forms
52812                         letters[letters.length - 1] += letter;
52813                     }
52814                     else {
52815                         letters.push(letter);
52816                     }
52817                 }
52818                 else {
52819                     letters.push(letter);
52820                 }
52821                 if (reference.tashkeel.indexOf(letter) === -1) {
52822                     lastLetter = letter;
52823                 }
52824             });
52825             return letters;
52826         }
52827         exports.GlyphSplitter = GlyphSplitter;
52828         });
52829
52830         unwrapExports(GlyphSplitter_1);
52831         var GlyphSplitter_2 = GlyphSplitter_1.GlyphSplitter;
52832
52833         var BaselineSplitter_1 = createCommonjsModule(function (module, exports) {
52834         Object.defineProperty(exports, "__esModule", { value: true });
52835
52836
52837         function BaselineSplitter(word) {
52838             var letters = [];
52839             var lastLetter = '';
52840             word.split('').forEach(function (letter) {
52841                 if (isArabic_1.isArabic(letter) && isArabic_1.isArabic(lastLetter)) {
52842                     if (lastLetter.length && reference.tashkeel.indexOf(letter) > -1) {
52843                         letters[letters.length - 1] += letter;
52844                     }
52845                     else if (reference.lineBreakers.indexOf(lastLetter) > -1) {
52846                         letters.push(letter);
52847                     }
52848                     else {
52849                         letters[letters.length - 1] += letter;
52850                     }
52851                 }
52852                 else {
52853                     letters.push(letter);
52854                 }
52855                 if (reference.tashkeel.indexOf(letter) === -1) {
52856                     // don't allow tashkeel to hide line break
52857                     lastLetter = letter;
52858                 }
52859             });
52860             return letters;
52861         }
52862         exports.BaselineSplitter = BaselineSplitter;
52863         });
52864
52865         unwrapExports(BaselineSplitter_1);
52866         var BaselineSplitter_2 = BaselineSplitter_1.BaselineSplitter;
52867
52868         var Normalization = createCommonjsModule(function (module, exports) {
52869         Object.defineProperty(exports, "__esModule", { value: true });
52870
52871
52872
52873
52874         function Normal(word, breakPresentationForm) {
52875             // default is to turn initial/isolated/medial/final presentation form to generic
52876             if (typeof breakPresentationForm === 'undefined') {
52877                 breakPresentationForm = true;
52878             }
52879             var returnable = '';
52880             word.split('').forEach(function (letter) {
52881                 if (!isArabic_1.isArabic(letter)) {
52882                     returnable += letter;
52883                     return;
52884                 }
52885                 for (var w = 0; w < reference.letterList.length; w++) {
52886                     // ok so we are checking this potential lettertron
52887                     var letterForms = unicodeArabic.default[reference.letterList[w]];
52888                     var versions = Object.keys(letterForms);
52889                     for (var v = 0; v < versions.length; v++) {
52890                         var localVersion = letterForms[versions[v]];
52891                         if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
52892                             // look at this embedded object
52893                             var embeddedForms = Object.keys(localVersion);
52894                             for (var ef = 0; ef < embeddedForms.length; ef++) {
52895                                 var form = localVersion[embeddedForms[ef]];
52896                                 if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
52897                                     // match
52898                                     // console.log('embedded match');
52899                                     if (form === letter) {
52900                                         // match exact
52901                                         if (breakPresentationForm && localVersion['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(embeddedForms[ef]) > -1) {
52902                                             // replace presentation form
52903                                             // console.log('keeping normal form of the letter');
52904                                             if (typeof localVersion['normal'] === 'object') {
52905                                                 returnable += localVersion['normal'][0];
52906                                             }
52907                                             else {
52908                                                 returnable += localVersion['normal'];
52909                                             }
52910                                             return;
52911                                         }
52912                                         // console.log('keeping this letter');
52913                                         returnable += letter;
52914                                         return;
52915                                     }
52916                                     else if (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1) {
52917                                         // match
52918                                         returnable += form[0];
52919                                         // console.log('added the first letter from the same array');
52920                                         return;
52921                                     }
52922                                 }
52923                             }
52924                         }
52925                         else if (localVersion === letter) {
52926                             // match exact
52927                             if (breakPresentationForm && letterForms['normal'] && ['isolated', 'initial', 'medial', 'final'].indexOf(versions[v]) > -1) {
52928                                 // replace presentation form
52929                                 // console.log('keeping normal form of the letter');
52930                                 if (typeof letterForms['normal'] === 'object') {
52931                                     returnable += letterForms['normal'][0];
52932                                 }
52933                                 else {
52934                                     returnable += letterForms['normal'];
52935                                 }
52936                                 return;
52937                             }
52938                             // console.log('keeping this letter');
52939                             returnable += letter;
52940                             return;
52941                         }
52942                         else if (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1) {
52943                             // match
52944                             returnable += localVersion[0];
52945                             // console.log('added the first letter from the same array');
52946                             return;
52947                         }
52948                     }
52949                 }
52950                 // try ligatures
52951                 for (var v2 = 0; v2 < reference.ligatureList.length; v2++) {
52952                     var normalForm = reference.ligatureList[v2];
52953                     if (normalForm !== 'words') {
52954                         var ligForms = Object.keys(unicodeLigatures.default[normalForm]);
52955                         for (var f = 0; f < ligForms.length; f++) {
52956                             if (unicodeLigatures.default[normalForm][ligForms[f]] === letter) {
52957                                 returnable += normalForm;
52958                                 return;
52959                             }
52960                         }
52961                     }
52962                 }
52963                 // try words ligatures
52964                 for (var v3 = 0; v3 < reference.ligatureWordList.length; v3++) {
52965                     var normalForm$1 = reference.ligatureWordList[v3];
52966                     if (unicodeLigatures.default.words[normalForm$1] === letter) {
52967                         returnable += normalForm$1;
52968                         return;
52969                     }
52970                 }
52971                 returnable += letter;
52972                 // console.log('kept the letter')
52973             });
52974             return returnable;
52975         }
52976         exports.Normal = Normal;
52977         });
52978
52979         unwrapExports(Normalization);
52980         var Normalization_1 = Normalization.Normal;
52981
52982         var CharShaper_1 = createCommonjsModule(function (module, exports) {
52983         Object.defineProperty(exports, "__esModule", { value: true });
52984
52985
52986
52987         function CharShaper(letter, form) {
52988             if (!isArabic_1.isArabic(letter)) {
52989                 // fail not Arabic
52990                 throw new Error('Not Arabic');
52991             }
52992             if (letter === "\u0621") {
52993                 // hamza alone
52994                 return "\u0621";
52995             }
52996             for (var w = 0; w < reference.letterList.length; w++) {
52997                 // ok so we are checking this potential lettertron
52998                 var letterForms = unicodeArabic.default[reference.letterList[w]];
52999                 var versions = Object.keys(letterForms);
53000                 for (var v = 0; v < versions.length; v++) {
53001                     var localVersion = letterForms[versions[v]];
53002                     if ((localVersion === letter) ||
53003                         (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
53004                         if (versions.indexOf(form) > -1) {
53005                             return letterForms[form];
53006                         }
53007                     }
53008                     else if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
53009                         // check embedded
53010                         var embeddedVersions = Object.keys(localVersion);
53011                         for (var ev = 0; ev < embeddedVersions.length; ev++) {
53012                             if ((localVersion[embeddedVersions[ev]] === letter) ||
53013                                 (typeof localVersion[embeddedVersions[ev]] === 'object' && localVersion[embeddedVersions[ev]].indexOf && localVersion[embeddedVersions[ev]].indexOf(letter) > -1)) {
53014                                 if (embeddedVersions.indexOf(form) > -1) {
53015                                     return localVersion[form];
53016                                 }
53017                             }
53018                         }
53019                     }
53020                 }
53021             }
53022         }
53023         exports.CharShaper = CharShaper;
53024         });
53025
53026         unwrapExports(CharShaper_1);
53027         var CharShaper_2 = CharShaper_1.CharShaper;
53028
53029         var WordShaper_1 = createCommonjsModule(function (module, exports) {
53030         Object.defineProperty(exports, "__esModule", { value: true });
53031
53032
53033
53034
53035         function WordShaper(word) {
53036             var state = 'initial';
53037             var output = '';
53038             for (var w = 0; w < word.length; w++) {
53039                 var nextLetter = ' ';
53040                 for (var nxw = w + 1; nxw < word.length; nxw++) {
53041                     if (!isArabic_1.isArabic(word[nxw])) {
53042                         break;
53043                     }
53044                     if (reference.tashkeel.indexOf(word[nxw]) === -1) {
53045                         nextLetter = word[nxw];
53046                         break;
53047                     }
53048                 }
53049                 if (!isArabic_1.isArabic(word[w]) || isArabic_1.isMath(word[w])) {
53050                     // space or other non-Arabic
53051                     output += word[w];
53052                     state = 'initial';
53053                 }
53054                 else if (reference.tashkeel.indexOf(word[w]) > -1) {
53055                     // tashkeel - add without changing state
53056                     output += word[w];
53057                 }
53058                 else if ((nextLetter === ' ') // last Arabic letter in this word
53059                     || (reference.lineBreakers.indexOf(word[w]) > -1)) { // the current letter is known to break lines
53060                     output += CharShaper_1.CharShaper(word[w], state === 'initial' ? 'isolated' : 'final');
53061                     state = 'initial';
53062                 }
53063                 else if (reference.lams.indexOf(word[w]) > -1 && reference.alefs.indexOf(nextLetter) > -1) {
53064                     // LA letters - advance an additional letter after this
53065                     output += unicodeLigatures.default[word[w] + nextLetter][(state === 'initial' ? 'isolated' : 'final')];
53066                     while (word[w] !== nextLetter) {
53067                         w++;
53068                     }
53069                     state = 'initial';
53070                 }
53071                 else {
53072                     output += CharShaper_1.CharShaper(word[w], state);
53073                     state = 'medial';
53074                 }
53075             }
53076             return output;
53077         }
53078         exports.WordShaper = WordShaper;
53079         });
53080
53081         unwrapExports(WordShaper_1);
53082         var WordShaper_2 = WordShaper_1.WordShaper;
53083
53084         var ParentLetter_1 = createCommonjsModule(function (module, exports) {
53085         Object.defineProperty(exports, "__esModule", { value: true });
53086
53087
53088
53089         function ParentLetter(letter) {
53090             if (!isArabic_1.isArabic(letter)) {
53091                 throw new Error('Not an Arabic letter');
53092             }
53093             for (var w = 0; w < reference.letterList.length; w++) {
53094                 // ok so we are checking this potential lettertron
53095                 var letterForms = unicodeArabic.default[reference.letterList[w]];
53096                 var versions = Object.keys(letterForms);
53097                 for (var v = 0; v < versions.length; v++) {
53098                     var localVersion = letterForms[versions[v]];
53099                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
53100                         // look at this embedded object
53101                         var embeddedForms = Object.keys(localVersion);
53102                         for (var ef = 0; ef < embeddedForms.length; ef++) {
53103                             var form = localVersion[embeddedForms[ef]];
53104                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
53105                                 // match
53106                                 return localVersion;
53107                             }
53108                         }
53109                     }
53110                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
53111                         // match
53112                         return letterForms;
53113                     }
53114                 }
53115                 return null;
53116             }
53117         }
53118         exports.ParentLetter = ParentLetter;
53119         function GrandparentLetter(letter) {
53120             if (!isArabic_1.isArabic(letter)) {
53121                 throw new Error('Not an Arabic letter');
53122             }
53123             for (var w = 0; w < reference.letterList.length; w++) {
53124                 // ok so we are checking this potential lettertron
53125                 var letterForms = unicodeArabic.default[reference.letterList[w]];
53126                 var versions = Object.keys(letterForms);
53127                 for (var v = 0; v < versions.length; v++) {
53128                     var localVersion = letterForms[versions[v]];
53129                     if (typeof localVersion === 'object' && typeof localVersion.indexOf === 'undefined') {
53130                         // look at this embedded object
53131                         var embeddedForms = Object.keys(localVersion);
53132                         for (var ef = 0; ef < embeddedForms.length; ef++) {
53133                             var form = localVersion[embeddedForms[ef]];
53134                             if (form === letter || (typeof form === 'object' && form.indexOf && form.indexOf(letter) > -1)) {
53135                                 // match
53136                                 return letterForms;
53137                             }
53138                         }
53139                     }
53140                     else if (localVersion === letter || (typeof localVersion === 'object' && localVersion.indexOf && localVersion.indexOf(letter) > -1)) {
53141                         // match
53142                         return letterForms;
53143                     }
53144                 }
53145                 return null;
53146             }
53147         }
53148         exports.GrandparentLetter = GrandparentLetter;
53149         });
53150
53151         unwrapExports(ParentLetter_1);
53152         var ParentLetter_2 = ParentLetter_1.ParentLetter;
53153         var ParentLetter_3 = ParentLetter_1.GrandparentLetter;
53154
53155         var lib$1 = createCommonjsModule(function (module, exports) {
53156         Object.defineProperty(exports, "__esModule", { value: true });
53157
53158         exports.isArabic = isArabic_1.isArabic;
53159
53160         exports.GlyphSplitter = GlyphSplitter_1.GlyphSplitter;
53161
53162         exports.BaselineSplitter = BaselineSplitter_1.BaselineSplitter;
53163
53164         exports.Normal = Normalization.Normal;
53165
53166         exports.CharShaper = CharShaper_1.CharShaper;
53167
53168         exports.WordShaper = WordShaper_1.WordShaper;
53169
53170         exports.ParentLetter = ParentLetter_1.ParentLetter;
53171         exports.GrandparentLetter = ParentLetter_1.GrandparentLetter;
53172         });
53173
53174         unwrapExports(lib$1);
53175         var lib_1 = lib$1.isArabic;
53176         var lib_2 = lib$1.GlyphSplitter;
53177         var lib_3 = lib$1.BaselineSplitter;
53178         var lib_4 = lib$1.Normal;
53179         var lib_5 = lib$1.CharShaper;
53180         var lib_6 = lib$1.WordShaper;
53181         var lib_7 = lib$1.ParentLetter;
53182         var lib_8 = lib$1.GrandparentLetter;
53183
53184         // see https://github.com/openstreetmap/iD/pull/3707
53185
53186         var rtlRegex = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u07BF\u08A0–\u08BF]/;
53187
53188         function fixRTLTextForSvg(inputText) {
53189             var ret = '', rtlBuffer = [];
53190             var arabicRegex = /[\u0600-\u06FF]/g;
53191             var arabicDiacritics = /[\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06ED]/g;
53192             var arabicMath = /[\u0660-\u066C\u06F0-\u06F9]+/g;
53193             var thaanaVowel = /[\u07A6-\u07B0]/;
53194             var hebrewSign = /[\u0591-\u05bd\u05bf\u05c1-\u05c5\u05c7]/;
53195
53196             // Arabic word shaping
53197             if (arabicRegex.test(inputText)) {
53198                 inputText = lib_6(inputText);
53199             }
53200
53201             for (var n = 0; n < inputText.length; n++) {
53202                 var c = inputText[n];
53203                 if (arabicMath.test(c)) {
53204                     // Arabic numbers go LTR
53205                     ret += rtlBuffer.reverse().join('');
53206                     rtlBuffer = [c];
53207                 } else {
53208                     if (rtlBuffer.length && arabicMath.test(rtlBuffer[rtlBuffer.length - 1])) {
53209                         ret += rtlBuffer.reverse().join('');
53210                         rtlBuffer = [];
53211                     }
53212                     if ((thaanaVowel.test(c) || hebrewSign.test(c) || arabicDiacritics.test(c)) && rtlBuffer.length) {
53213                         rtlBuffer[rtlBuffer.length - 1] += c;
53214                     } else if (rtlRegex.test(c)
53215                         // include Arabic presentation forms
53216                         || (c.charCodeAt(0) >= 64336 && c.charCodeAt(0) <= 65023)
53217                         || (c.charCodeAt(0) >= 65136 && c.charCodeAt(0) <= 65279)) {
53218                         rtlBuffer.push(c);
53219                     } else if (c === ' ' && rtlBuffer.length) {
53220                         // whitespace within RTL text
53221                         rtlBuffer = [rtlBuffer.reverse().join('') + ' '];
53222                     } else {
53223                         // non-RTL character
53224                         ret += rtlBuffer.reverse().join('') + c;
53225                         rtlBuffer = [];
53226                     }
53227                 }
53228             }
53229             ret += rtlBuffer.reverse().join('');
53230             return ret;
53231         }
53232
53233         var translations = Object.create(null);
53234
53235         var currentLocale = 'en';
53236         var textDirection = 'ltr';
53237         var languageNames = {};
53238         var scriptNames = {};
53239
53240         function setLocale(val) {
53241             if (translations[val] !== undefined) {
53242                 currentLocale = val;
53243             } else if (translations[val.split('-')[0]]) {
53244                 currentLocale = val.split('-')[0];
53245             }
53246         }
53247
53248         function addTranslation(id, value) {
53249             translations[id] = value;
53250         }
53251
53252         /**
53253          * Given a string identifier, try to find that string in the current
53254          * language, and return it.  This function will be called recursively
53255          * with locale `en` if a string can not be found in the requested language.
53256          *
53257          * @param {string}   s   string identifier
53258          * @param {object?}  o   object of token replacements and default string
53259          * @param {string?}  loc locale to use
53260          * @returns {string?} locale string
53261          */
53262         function t(s, o, loc) {
53263             loc = loc || currentLocale;
53264
53265             var path = s
53266                 .split('.')
53267                 .map(function (s) { return s.replace(/<TX_DOT>/g, '.'); })
53268                 .reverse();
53269
53270             var rep = translations[loc];
53271
53272             while (rep !== undefined && path.length) {
53273                 rep = rep[path.pop()];
53274             }
53275
53276             if (rep !== undefined) {
53277                 if (o) {
53278                     for (var k in o) {
53279                         var variable = '{' + k + '}';
53280                         var re = new RegExp(variable, 'g'); // check globally for variables
53281                         rep = rep.replace(re, o[k]);
53282                     }
53283                 }
53284                 return rep;
53285             }
53286
53287             if (loc !== 'en') {
53288                 return t(s, o, 'en');
53289             }
53290
53291             if (o && 'default' in o) {
53292                 return o.default;
53293             }
53294
53295             var missing = 'Missing ' + loc + ' translation: ' + s;
53296             if (typeof console !== 'undefined') { console.error(missing); } // eslint-disable-line
53297
53298             return missing;
53299         }
53300
53301         /**
53302          * Given string 'ltr' or 'rtl', save that setting
53303          *
53304          * @param {string} dir ltr or rtl
53305          */
53306
53307         function setTextDirection(dir) {
53308             textDirection = dir;
53309         }
53310
53311         function setLanguageNames(obj) {
53312             languageNames = obj;
53313         }
53314
53315         function setScriptNames(obj) {
53316             scriptNames = obj;
53317         }
53318
53319         function languageName(code, options) {
53320             if (languageNames[code]) { // name in locale langauge
53321
53322                 // e.g. German
53323                 return languageNames[code];
53324             }
53325             // sometimes we only want the local name
53326             if (options && options.localOnly) { return null; }
53327
53328             var langInfo = dataLanguages[code];
53329
53330             if (langInfo) {
53331                 if (langInfo.nativeName) { // name in native language
53332
53333                     // e.g. Deutsch (de)
53334                     return t('translate.language_and_code', { language: langInfo.nativeName, code: code });
53335
53336                 } else if (langInfo.base && langInfo.script) {
53337
53338                     var base = langInfo.base; // the code of the langauge this is based on
53339
53340                     if (languageNames[base]) { // base language name in locale langauge
53341                         var scriptCode = langInfo.script;
53342                         var script = scriptNames[scriptCode] || scriptCode;
53343
53344                         // e.g. Serbian (Cyrillic)
53345                         return t('translate.language_and_code', { language: languageNames[base], code: script });
53346
53347                     } else if (dataLanguages[base] && dataLanguages[base].nativeName) {
53348
53349                         // e.g. српски (sr-Cyrl)
53350                         return t('translate.language_and_code', { language: dataLanguages[base].nativeName, code: code });
53351                     }
53352                 }
53353             }
53354             return code; // if not found, use the code
53355         }
53356
53357         var detected;
53358
53359         function utilDetect(force) {
53360             if (detected && !force) { return detected; }
53361             detected = {};
53362
53363             var ua = navigator.userAgent,
53364                 m = null,
53365                 q = utilStringQs(window.location.hash.substring(1));
53366
53367             m = ua.match(/(edge)\/?\s*(\.?\d+(\.\d+)*)/i);   // Edge
53368             if (m !== null) {
53369                 detected.browser = m[1];
53370                 detected.version = m[2];
53371             }
53372             if (!detected.browser) {
53373                 m = ua.match(/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/i);   // IE11
53374                 if (m !== null) {
53375                     detected.browser = 'msie';
53376                     detected.version = m[1];
53377                 }
53378             }
53379             if (!detected.browser) {
53380                 m = ua.match(/(opr)\/?\s*(\.?\d+(\.\d+)*)/i);   // Opera 15+
53381                 if (m !== null) {
53382                     detected.browser = 'Opera';
53383                     detected.version = m[2];
53384                 }
53385             }
53386             if (!detected.browser) {
53387                 m = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
53388                 if (m !== null) {
53389                     detected.browser = m[1];
53390                     detected.version = m[2];
53391                     m = ua.match(/version\/([\.\d]+)/i);
53392                     if (m !== null) { detected.version = m[1]; }
53393                 }
53394             }
53395             if (!detected.browser) {
53396                 detected.browser = navigator.appName;
53397                 detected.version = navigator.appVersion;
53398             }
53399
53400             // keep major.minor version only..
53401             detected.version = detected.version.split(/\W/).slice(0,2).join('.');
53402
53403             if (detected.browser.toLowerCase() === 'msie') {
53404                 detected.ie = true;
53405                 detected.browser = 'Internet Explorer';
53406                 detected.support = parseFloat(detected.version) >= 11;
53407             } else {
53408                 detected.ie = false;
53409                 detected.support = true;
53410             }
53411
53412             // Added due to incomplete svg style support. See #715
53413             detected.opera = (detected.browser.toLowerCase() === 'opera' && parseFloat(detected.version) < 15 );
53414
53415             // Set locale based on url param (format 'en-US') or browser lang (default)
53416             if (q.hasOwnProperty('locale')) {
53417                 detected.locale = q.locale;
53418                 detected.language = q.locale.split('-')[0];
53419             } else {
53420                 detected.locale = (navigator.language || navigator.userLanguage || 'en-US');
53421                 detected.language = detected.locale.split('-')[0];
53422
53423                 // Search `navigator.languages` for a better locale. Prefer the first language,
53424                 // unless the second language is a culture-specific version of the first one, see #3842
53425                 if (navigator.languages && navigator.languages.length > 0) {
53426                     var code0 = navigator.languages[0],
53427                         parts0 = code0.split('-');
53428
53429                     detected.locale = code0;
53430                     detected.language = parts0[0];
53431
53432                     if (navigator.languages.length > 1 && parts0.length === 1) {
53433                         var code1 = navigator.languages[1],
53434                             parts1 = code1.split('-');
53435
53436                         if (parts1[0] === parts0[0]) {
53437                             detected.locale = code1;
53438                         }
53439                     }
53440                 }
53441             }
53442
53443             // Loaded locale is stored in currentLocale
53444             // return that instead (except in the situation where 'en' might override 'en-US')
53445             var loadedLocale = currentLocale || 'en';
53446             if (loadedLocale !== 'en') {
53447                 detected.locale = loadedLocale;
53448                 detected.language = detected.locale.split('-')[0];
53449             }
53450
53451             // detect text direction
53452             var lang = dataLocales[detected.locale] || dataLocales[detected.language];
53453             if ((lang && lang.rtl) || (q.rtl === 'true')) {
53454                 detected.textDirection = 'rtl';
53455             } else {
53456                 detected.textDirection = 'ltr';
53457             }
53458             setTextDirection(detected.textDirection);
53459             setLanguageNames((lang && lang.languageNames) || {});
53460             setScriptNames((lang && lang.scriptNames) || {});
53461
53462             // detect host
53463             var loc = window.top.location;
53464             var origin = loc.origin;
53465             if (!origin) {  // for unpatched IE11
53466                 origin = loc.protocol + '//' + loc.hostname + (loc.port ? ':' + loc.port: '');
53467             }
53468
53469             detected.host = origin + loc.pathname;
53470
53471             detected.filedrop = (window.FileReader && 'ondrop' in window);
53472
53473             detected.download = !(detected.ie || detected.browser.toLowerCase() === 'edge');
53474
53475             detected.cssfilters = !(detected.ie || detected.browser.toLowerCase() === 'edge');
53476
53477             function nav(x) {
53478                 return navigator.userAgent.indexOf(x) !== -1;
53479             }
53480
53481             if (nav('Win')) {
53482                 detected.os = 'win';
53483                 detected.platform = 'Windows';
53484             }
53485             else if (nav('Mac')) {
53486                 detected.os = 'mac';
53487                 detected.platform = 'Macintosh';
53488             }
53489             else if (nav('X11') || nav('Linux')) {
53490                 detected.os = 'linux';
53491                 detected.platform = 'Linux';
53492             }
53493             else {
53494                 detected.os = 'win';
53495                 detected.platform = 'Unknown';
53496             }
53497
53498             return detected;
53499         }
53500
53501         function utilTagText(entity) {
53502             var obj = (entity && entity.tags) || {};
53503             return Object.keys(obj)
53504                 .map(function(k) { return k + '=' + obj[k]; })
53505                 .join(', ');
53506         }
53507
53508
53509         function utilTagDiff(oldTags, newTags) {
53510             var tagDiff = [];
53511             var keys = utilArrayUnion(Object.keys(oldTags), Object.keys(newTags)).sort();
53512             keys.forEach(function(k) {
53513                 var oldVal = oldTags[k];
53514                 var newVal = newTags[k];
53515
53516                 if (oldVal && (!newVal || newVal !== oldVal)) {
53517                     tagDiff.push({
53518                         type: '-',
53519                         key: k,
53520                         oldVal: oldVal,
53521                         newVal: newVal,
53522                         display: '- ' + k + '=' + oldVal
53523                     });
53524                 }
53525                 if (newVal && (!oldVal || newVal !== oldVal)) {
53526                     tagDiff.push({
53527                         type: '+',
53528                         key: k,
53529                         oldVal: oldVal,
53530                         newVal: newVal,
53531                         display: '+ ' + k + '=' + newVal
53532                     });
53533                 }
53534             });
53535             return tagDiff;
53536         }
53537
53538
53539         function utilEntitySelector(ids) {
53540             return ids.length ? '.' + ids.join(',.') : 'nothing';
53541         }
53542
53543
53544         // returns an selector to select entity ids for:
53545         //  - entityIDs passed in
53546         //  - shallow descendant entityIDs for any of those entities that are relations
53547         function utilEntityOrMemberSelector(ids, graph) {
53548             var seen = new Set(ids);
53549             ids.forEach(collectShallowDescendants);
53550             return utilEntitySelector(Array.from(seen));
53551
53552             function collectShallowDescendants(id) {
53553                 var entity = graph.hasEntity(id);
53554                 if (!entity || entity.type !== 'relation') { return; }
53555
53556                 entity.members
53557                     .map(function(member) { return member.id; })
53558                     .forEach(function(id) { seen.add(id); });
53559             }
53560         }
53561
53562
53563         // returns an selector to select entity ids for:
53564         //  - entityIDs passed in
53565         //  - deep descendant entityIDs for any of those entities that are relations
53566         function utilEntityOrDeepMemberSelector(ids, graph) {
53567             return utilEntitySelector(utilEntityAndDeepMemberIDs(ids, graph));
53568         }
53569
53570
53571         // returns an selector to select entity ids for:
53572         //  - entityIDs passed in
53573         //  - deep descendant entityIDs for any of those entities that are relations
53574         function utilEntityAndDeepMemberIDs(ids, graph) {
53575             var seen = new Set();
53576             ids.forEach(collectDeepDescendants);
53577             return Array.from(seen);
53578
53579             function collectDeepDescendants(id) {
53580                 if (seen.has(id)) { return; }
53581                 seen.add(id);
53582
53583                 var entity = graph.hasEntity(id);
53584                 if (!entity || entity.type !== 'relation') { return; }
53585
53586                 entity.members
53587                     .map(function(member) { return member.id; })
53588                     .forEach(collectDeepDescendants);   // recurse
53589             }
53590         }
53591
53592         // returns an selector to select entity ids for:
53593         //  - deep descendant entityIDs for any of those entities that are relations
53594         function utilDeepMemberSelector(ids, graph, skipMultipolgonMembers) {
53595             var idsSet = new Set(ids);
53596             var seen = new Set();
53597             var returners = new Set();
53598             ids.forEach(collectDeepDescendants);
53599             return utilEntitySelector(Array.from(returners));
53600
53601             function collectDeepDescendants(id) {
53602                 if (seen.has(id)) { return; }
53603                 seen.add(id);
53604
53605                 if (!idsSet.has(id)) {
53606                     returners.add(id);
53607                 }
53608
53609                 var entity = graph.hasEntity(id);
53610                 if (!entity || entity.type !== 'relation') { return; }
53611                 if (skipMultipolgonMembers && entity.isMultipolygon()) { return; }
53612                 entity.members
53613                     .map(function(member) { return member.id; })
53614                     .forEach(collectDeepDescendants);   // recurse
53615             }
53616         }
53617
53618
53619         // Adds or removes highlight styling for the specified entities
53620         function utilHighlightEntities(ids, highlighted, context) {
53621             context.surface()
53622                 .selectAll(utilEntityOrDeepMemberSelector(ids, context.graph()))
53623                 .classed('highlighted', highlighted);
53624         }
53625
53626
53627         // returns an Array that is the union of:
53628         //  - nodes for any nodeIDs passed in
53629         //  - child nodes of any wayIDs passed in
53630         //  - descendant member and child nodes of relationIDs passed in
53631         function utilGetAllNodes(ids, graph) {
53632             var seen = new Set();
53633             var nodes = new Set();
53634
53635             ids.forEach(collectNodes);
53636             return Array.from(nodes);
53637
53638             function collectNodes(id) {
53639                 if (seen.has(id)) { return; }
53640                 seen.add(id);
53641
53642                 var entity = graph.hasEntity(id);
53643                 if (!entity) { return; }
53644
53645                 if (entity.type === 'node') {
53646                     nodes.add(entity);
53647                 } else if (entity.type === 'way') {
53648                     entity.nodes.forEach(collectNodes);
53649                 } else {
53650                     entity.members
53651                         .map(function(member) { return member.id; })
53652                         .forEach(collectNodes);   // recurse
53653                 }
53654             }
53655         }
53656
53657
53658         function utilDisplayName(entity) {
53659             var localizedNameKey = 'name:' + utilDetect().locale.toLowerCase().split('-')[0];
53660             var name = entity.tags[localizedNameKey] || entity.tags.name || '';
53661             var network = entity.tags.cycle_network || entity.tags.network;
53662
53663             if (!name && entity.tags.ref) {
53664                 name = entity.tags.ref;
53665                 if (network) {
53666                     name = network + ' ' + name;
53667                 }
53668             }
53669
53670             return name;
53671         }
53672
53673
53674         function utilDisplayNameForPath(entity) {
53675             var name = utilDisplayName(entity);
53676             var isFirefox = utilDetect().browser.toLowerCase().indexOf('firefox') > -1;
53677
53678             if (!isFirefox && name && rtlRegex.test(name)) {
53679                 name = fixRTLTextForSvg(name);
53680             }
53681
53682             return name;
53683         }
53684
53685
53686         function utilDisplayType(id) {
53687             return {
53688                 n: t('inspector.node'),
53689                 w: t('inspector.way'),
53690                 r: t('inspector.relation')
53691             }[id.charAt(0)];
53692         }
53693
53694
53695         function utilDisplayLabel(entity, context) {
53696             var displayName = utilDisplayName(entity);
53697             if (displayName) {
53698                 // use the display name if there is one
53699                 return displayName;
53700             }
53701             var preset = utilPreset(entity, context);
53702             if (preset && preset.name()) {
53703                 // use the preset name if there is a match
53704                 return preset.name();
53705             }
53706             // fallback to the display type (node/way/relation)
53707             return utilDisplayType(entity.id);
53708         }
53709
53710
53711         function utilPreset(entity, context) {
53712             return context.presets().match(entity, context.graph());
53713         }
53714
53715
53716         function utilEntityRoot(entityType) {
53717             return {
53718                 node: 'n',
53719                 way: 'w',
53720                 relation: 'r'
53721             }[entityType];
53722         }
53723
53724
53725         function utilStringQs(str) {
53726             return str.split('&').reduce(function(obj, pair){
53727                 var parts = pair.split('=');
53728                 if (parts.length === 2) {
53729                     obj[parts[0]] = (null === parts[1]) ? '' : decodeURIComponent(parts[1]);
53730                 }
53731                 return obj;
53732             }, {});
53733         }
53734
53735
53736         function utilQsString(obj, noencode) {
53737             // encode everything except special characters used in certain hash parameters:
53738             // "/" in map states, ":", ",", {" and "}" in background
53739             function softEncode(s) {
53740                 return encodeURIComponent(s).replace(/(%2F|%3A|%2C|%7B|%7D)/g, decodeURIComponent);
53741             }
53742
53743             return Object.keys(obj).sort().map(function(key) {
53744                 return encodeURIComponent(key) + '=' + (
53745                     noencode ? softEncode(obj[key]) : encodeURIComponent(obj[key]));
53746             }).join('&');
53747         }
53748
53749
53750         function utilPrefixDOMProperty(property) {
53751             var prefixes = ['webkit', 'ms', 'moz', 'o'];
53752             var i = -1;
53753             var n = prefixes.length;
53754             var s = document.body;
53755
53756             if (property in s)
53757                 { return property; }
53758
53759             property = property.substr(0, 1).toUpperCase() + property.substr(1);
53760
53761             while (++i < n) {
53762                 if (prefixes[i] + property in s) {
53763                     return prefixes[i] + property;
53764                 }
53765             }
53766
53767             return false;
53768         }
53769
53770
53771         function utilPrefixCSSProperty(property) {
53772             var prefixes = ['webkit', 'ms', 'Moz', 'O'];
53773             var i = -1;
53774             var n = prefixes.length;
53775             var s = document.body.style;
53776
53777             if (property.toLowerCase() in s) {
53778                 return property.toLowerCase();
53779             }
53780
53781             while (++i < n) {
53782                 if (prefixes[i] + property in s) {
53783                     return '-' + prefixes[i].toLowerCase() + property.replace(/([A-Z])/g, '-$1').toLowerCase();
53784                 }
53785             }
53786
53787             return false;
53788         }
53789
53790
53791         var transformProperty;
53792         function utilSetTransform(el, x, y, scale) {
53793             var prop = transformProperty = transformProperty || utilPrefixCSSProperty('Transform');
53794             var translate = utilDetect().opera ? 'translate('   + x + 'px,' + y + 'px)'
53795                 : 'translate3d(' + x + 'px,' + y + 'px,0)';
53796             return el.style(prop, translate + (scale ? ' scale(' + scale + ')' : ''));
53797         }
53798
53799
53800         // Calculates Levenshtein distance between two strings
53801         // see:  https://en.wikipedia.org/wiki/Levenshtein_distance
53802         // first converts the strings to lowercase and replaces diacritic marks with ascii equivalents.
53803         function utilEditDistance(a, b) {
53804             a = remove$1(a.toLowerCase());
53805             b = remove$1(b.toLowerCase());
53806             if (a.length === 0) { return b.length; }
53807             if (b.length === 0) { return a.length; }
53808             var matrix = [];
53809             for (var i = 0; i <= b.length; i++) { matrix[i] = [i]; }
53810             for (var j = 0; j <= a.length; j++) { matrix[0][j] = j; }
53811             for (i = 1; i <= b.length; i++) {
53812                 for (j = 1; j <= a.length; j++) {
53813                     if (b.charAt(i-1) === a.charAt(j-1)) {
53814                         matrix[i][j] = matrix[i-1][j-1];
53815                     } else {
53816                         matrix[i][j] = Math.min(matrix[i-1][j-1] + 1, // substitution
53817                             Math.min(matrix[i][j-1] + 1, // insertion
53818                             matrix[i-1][j] + 1)); // deletion
53819                     }
53820                 }
53821             }
53822             return matrix[b.length][a.length];
53823         }
53824
53825
53826         // a d3.mouse-alike which
53827         // 1. Only works on HTML elements, not SVG
53828         // 2. Does not cause style recalculation
53829         function utilFastMouse(container) {
53830             var rect = container.getBoundingClientRect();
53831             var rectLeft = rect.left;
53832             var rectTop = rect.top;
53833             var clientLeft = +container.clientLeft;
53834             var clientTop = +container.clientTop;
53835
53836             if (textDirection === 'rtl') {
53837                 rectLeft = 0;
53838             }
53839             return function(e) {
53840                 return [
53841                     e.clientX - rectLeft - clientLeft,
53842                     e.clientY - rectTop - clientTop];
53843             };
53844         }
53845
53846
53847         function utilAsyncMap(inputs, func, callback) {
53848             var remaining = inputs.length;
53849             var results = [];
53850             var errors = [];
53851
53852             inputs.forEach(function(d, i) {
53853                 func(d, function done(err, data) {
53854                     errors[i] = err;
53855                     results[i] = data;
53856                     remaining--;
53857                     if (!remaining) { callback(errors, results); }
53858                 });
53859             });
53860         }
53861
53862
53863         // wraps an index to an interval [0..length-1]
53864         function utilWrap(index, length) {
53865             if (index < 0) {
53866                 index += Math.ceil(-index/length)*length;
53867             }
53868             return index % length;
53869         }
53870
53871
53872         /**
53873          * a replacement for functor
53874          *
53875          * @param {*} value any value
53876          * @returns {Function} a function that returns that value or the value if it's a function
53877          */
53878         function utilFunctor(value) {
53879             if (typeof value === 'function') { return value; }
53880             return function() {
53881                 return value;
53882             };
53883         }
53884
53885
53886         function utilNoAuto(selection) {
53887             var isText = (selection.size() && selection.node().tagName.toLowerCase() === 'textarea');
53888
53889             return selection
53890                 // assign 'new-password' even for non-password fields to prevent browsers (Chrome) ignoring 'off'
53891                 .attr('autocomplete', 'new-password')
53892                 .attr('autocorrect', 'off')
53893                 .attr('autocapitalize', 'off')
53894                 .attr('spellcheck', isText ? 'true' : 'false');
53895         }
53896
53897
53898         // https://stackoverflow.com/questions/194846/is-there-any-kind-of-hash-code-function-in-javascript
53899         // https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
53900         function utilHashcode(str) {
53901             var hash = 0;
53902             if (str.length === 0) {
53903                 return hash;
53904             }
53905             for (var i = 0; i < str.length; i++) {
53906                 var char = str.charCodeAt(i);
53907                 hash = ((hash << 5) - hash) + char;
53908                 hash = hash & hash; // Convert to 32bit integer
53909             }
53910             return hash;
53911         }
53912
53913         // returns version of `str` with all runs of special characters replaced by `_`;
53914         // suitable for HTML ids, classes, selectors, etc.
53915         function utilSafeClassName(str) {
53916             return str.toLowerCase().replace(/[^a-z0-9]+/g, '_');
53917         }
53918
53919         function utilCleanTags(tags) {
53920             var out = {};
53921             for (var k in tags) {
53922                 if (!k) { continue; }
53923                 var v = tags[k];
53924                 if (v !== undefined) {
53925                     out[k] = cleanValue(k, v);
53926                 }
53927             }
53928
53929             return out;
53930
53931
53932             function cleanValue(k, v) {
53933                 function keepSpaces(k) {
53934                     return /_hours|_times|:conditional$/.test(k);
53935                 }
53936
53937                 function skip(k) {
53938                     return /^(description|note|fixme)$/.test(k);
53939                 }
53940
53941                 if (skip(k)) { return v; }
53942
53943                 var cleaned = v
53944                     .split(';')
53945                     .map(function(s) { return s.trim(); })
53946                     .join(keepSpaces(k) ? '; ' : ';');
53947
53948                 // The code below is not intended to validate websites and emails.
53949                 // It is only intended to prevent obvious copy-paste errors. (#2323)
53950                 // clean website- and email-like tags
53951                 if (k.indexOf('website') !== -1 ||
53952                     k.indexOf('email') !== -1 ||
53953                     cleaned.indexOf('http') === 0) {
53954                     cleaned = cleaned
53955                         .replace(/[\u200B-\u200F\uFEFF]/g, '');  // strip LRM and other zero width chars
53956
53957                 }
53958
53959                 return cleaned;
53960             }
53961         }
53962
53963         // Like selection.property('value', ...), but avoids no-op value sets,
53964         // which can result in layout/repaint thrashing in some situations.
53965         function utilGetSetValue(selection, value) {
53966             function d3_selection_value(value) {
53967                 function valueNull() {
53968                     delete this.value;
53969                 }
53970
53971                 function valueConstant() {
53972                     if (this.value !== value) {
53973                         this.value = value;
53974                     }
53975                 }
53976
53977                 function valueFunction() {
53978                     var x = value.apply(this, arguments);
53979                     if (x == null) {
53980                         delete this.value;
53981                     } else if (this.value !== x) {
53982                         this.value = x;
53983                     }
53984                 }
53985
53986                 return value == null
53987                     ? valueNull : (typeof value === 'function'
53988                     ? valueFunction : valueConstant);
53989             }
53990
53991             if (arguments.length === 1) {
53992                 return selection.property('value');
53993             }
53994
53995             return selection.each(d3_selection_value(value));
53996         }
53997
53998         function utilKeybinding(namespace) {
53999             var _keybindings = {};
54000
54001
54002             function testBindings(isCapturing) {
54003                 var didMatch = false;
54004                 var bindings = Object.keys(_keybindings).map(function(id) { return _keybindings[id]; });
54005                 var i, binding;
54006
54007                 // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
54008                 // so we don't strictly match on the shift key, but we prioritize
54009                 // shifted keybindings first, and fallback to unshifted only if no match.
54010                 // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
54011
54012                 // priority match shifted keybindings first
54013                 for (i = 0; i < bindings.length; i++) {
54014                     binding = bindings[i];
54015                     if (!binding.event.modifiers.shiftKey) { continue; }  // no shift
54016                     if (!!binding.capture !== isCapturing) { continue; }
54017                     if (matches(binding, true)) {
54018                         binding.callback();
54019                         didMatch = true;
54020                     }
54021                 }
54022
54023                 // then unshifted keybindings
54024                 if (didMatch) { return; }
54025                 for (i = 0; i < bindings.length; i++) {
54026                     binding = bindings[i];
54027                     if (binding.event.modifiers.shiftKey) { continue; }   // shift
54028                     if (!!binding.capture !== isCapturing) { continue; }
54029                     if (matches(binding, false)) {
54030                         binding.callback();
54031                     }
54032                 }
54033
54034
54035                 function matches(binding, testShift) {
54036                     var event$1 = event;
54037                     var isMatch = false;
54038                     var tryKeyCode = true;
54039
54040                     // Prefer a match on `KeyboardEvent.key`
54041                     if (event$1.key !== undefined) {
54042                         tryKeyCode = (event$1.key.charCodeAt(0) > 255);  // outside ISO-Latin-1
54043                         isMatch = true;
54044
54045                         if (binding.event.key === undefined) {
54046                             isMatch = false;
54047                         } else if (Array.isArray(binding.event.key)) {
54048                             if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$1.key.toLowerCase()) === -1)
54049                                 { isMatch = false; }
54050                         } else {
54051                             if (event$1.key.toLowerCase() !== binding.event.key.toLowerCase())
54052                                 { isMatch = false; }
54053                         }
54054                     }
54055
54056                     // Fallback match on `KeyboardEvent.keyCode`, can happen if:
54057                     // - browser doesn't support `KeyboardEvent.key`
54058                     // - `KeyboardEvent.key` is outside ISO-Latin-1 range (cyrillic?)
54059                     if (!isMatch && tryKeyCode) {
54060                         isMatch = (event$1.keyCode === binding.event.keyCode);
54061                     }
54062
54063                     if (!isMatch) { return false; }
54064
54065                     // test modifier keys
54066                     if (!(event$1.ctrlKey && event$1.altKey)) {  // if both are set, assume AltGr and skip it - #4096
54067                         if (event$1.ctrlKey !== binding.event.modifiers.ctrlKey) { return false; }
54068                         if (event$1.altKey !== binding.event.modifiers.altKey) { return false; }
54069                     }
54070                     if (event$1.metaKey !== binding.event.modifiers.metaKey) { return false; }
54071                     if (testShift && event$1.shiftKey !== binding.event.modifiers.shiftKey) { return false; }
54072
54073                     return true;
54074                 }
54075             }
54076
54077
54078             function capture() {
54079                 testBindings(true);
54080             }
54081
54082
54083             function bubble() {
54084                 var tagName = d3_select(event.target).node().tagName;
54085                 if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
54086                     return;
54087                 }
54088                 testBindings(false);
54089             }
54090
54091
54092             function keybinding(selection) {
54093                 selection = selection || d3_select(document);
54094                 selection.on('keydown.capture.' + namespace, capture, true);
54095                 selection.on('keydown.bubble.' + namespace, bubble, false);
54096                 return keybinding;
54097             }
54098
54099             // was: keybinding.off()
54100             keybinding.unbind = function(selection) {
54101                 _keybindings = [];
54102                 selection = selection || d3_select(document);
54103                 selection.on('keydown.capture.' + namespace, null);
54104                 selection.on('keydown.bubble.' + namespace, null);
54105                 return keybinding;
54106             };
54107
54108
54109             keybinding.clear = function() {
54110                 _keybindings = {};
54111                 return keybinding;
54112             };
54113
54114
54115             // Remove one or more keycode bindings.
54116             keybinding.off = function(codes, capture) {
54117                 var arr = utilArrayUniq([].concat(codes));
54118
54119                 for (var i = 0; i < arr.length; i++) {
54120                     var id = arr[i] + (capture ? '-capture' : '-bubble');
54121                     delete _keybindings[id];
54122                 }
54123                 return keybinding;
54124             };
54125
54126
54127             // Add one or more keycode bindings.
54128             keybinding.on = function(codes, callback, capture) {
54129                 if (typeof callback !== 'function') {
54130                     return keybinding.off(codes, capture);
54131                 }
54132
54133                 var arr = utilArrayUniq([].concat(codes));
54134
54135                 for (var i = 0; i < arr.length; i++) {
54136                     var id = arr[i] + (capture ? '-capture' : '-bubble');
54137                     var binding = {
54138                         id: id,
54139                         capture: capture,
54140                         callback: callback,
54141                         event: {
54142                             key: undefined,  // preferred
54143                             keyCode: 0,      // fallback
54144                             modifiers: {
54145                                 shiftKey: false,
54146                                 ctrlKey: false,
54147                                 altKey: false,
54148                                 metaKey: false
54149                             }
54150                         }
54151                     };
54152
54153                     if (_keybindings[id]) {
54154                         console.warn('warning: duplicate keybinding for "' + id + '"'); // eslint-disable-line no-console
54155                     }
54156
54157                     _keybindings[id] = binding;
54158
54159                     var matches = arr[i].toLowerCase().match(/(?:(?:[^+⇧⌃⌥⌘])+|[⇧⌃⌥⌘]|\+\+|^\+$)/g);
54160                     for (var j = 0; j < matches.length; j++) {
54161                         // Normalise matching errors
54162                         if (matches[j] === '++') { matches[j] = '+'; }
54163
54164                         if (matches[j] in utilKeybinding.modifierCodes) {
54165                             var prop = utilKeybinding.modifierProperties[utilKeybinding.modifierCodes[matches[j]]];
54166                             binding.event.modifiers[prop] = true;
54167                         } else {
54168                             binding.event.key = utilKeybinding.keys[matches[j]] || matches[j];
54169                             if (matches[j] in utilKeybinding.keyCodes) {
54170                                 binding.event.keyCode = utilKeybinding.keyCodes[matches[j]];
54171                             }
54172                         }
54173                     }
54174                 }
54175
54176                 return keybinding;
54177             };
54178
54179
54180             return keybinding;
54181         }
54182
54183
54184         /*
54185          * See https://github.com/keithamus/jwerty
54186          */
54187
54188         utilKeybinding.modifierCodes = {
54189             // Shift key, ⇧
54190             '⇧': 16, shift: 16,
54191             // CTRL key, on Mac: ⌃
54192             '⌃': 17, ctrl: 17,
54193             // ALT key, on Mac: ⌥ (Alt)
54194             '⌥': 18, alt: 18, option: 18,
54195             // META, on Mac: ⌘ (CMD), on Windows (Win), on Linux (Super)
54196             '⌘': 91, meta: 91, cmd: 91, 'super': 91, win: 91
54197         };
54198
54199         utilKeybinding.modifierProperties = {
54200             16: 'shiftKey',
54201             17: 'ctrlKey',
54202             18: 'altKey',
54203             91: 'metaKey'
54204         };
54205
54206         utilKeybinding.keys = {
54207             // Backspace key, on Mac: ⌫ (Backspace)
54208             '⌫': 'Backspace', backspace: 'Backspace',
54209             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
54210             '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
54211             // Return key, ↩
54212             '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
54213             // Pause/Break key
54214             'pause': 'Pause', 'pause-break': 'Pause',
54215             // Caps Lock key, ⇪
54216             '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
54217             // Escape key, on Mac: ⎋, on Windows: Esc
54218             '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
54219             // Space key
54220             space: [' ', 'Spacebar'],
54221             // Page-Up key, or pgup, on Mac: ↖
54222             '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
54223             // Page-Down key, or pgdown, on Mac: ↘
54224             '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
54225             // END key, on Mac: ⇟
54226             '⇟': 'End', end: 'End',
54227             // HOME key, on Mac: ⇞
54228             '⇞': 'Home', home: 'Home',
54229             // Insert key, or ins
54230             ins: 'Insert', insert: 'Insert',
54231             // Delete key, on Mac: ⌦ (Delete)
54232             '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
54233             // Left Arrow Key, or ←
54234             '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
54235             // Up Arrow Key, or ↑
54236             '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
54237             // Right Arrow Key, or →
54238             '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
54239             // Up Arrow Key, or ↓
54240             '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
54241             // odities, stuff for backward compatibility (browsers and code):
54242             // Num-Multiply, or *
54243             '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
54244             // Num-Plus or +
54245             '+': ['+', 'Add'], 'plus': ['+', 'Add'],
54246             // Num-Subtract, or -
54247             '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
54248             // Semicolon
54249             semicolon: ';',
54250             // = or equals
54251             equals: '=',
54252             // Comma, or ,
54253             comma: ',',
54254             // Period, or ., or full-stop
54255             period: '.', 'full-stop': '.',
54256             // Slash, or /, or forward-slash
54257             slash: '/', 'forward-slash': '/',
54258             // Tick, or `, or back-quote
54259             tick: '`', 'back-quote': '`',
54260             // Open bracket, or [
54261             'open-bracket': '[',
54262             // Back slash, or \
54263             'back-slash': '\\',
54264             // Close backet, or ]
54265             'close-bracket': ']',
54266             // Apostrophe, or Quote, or '
54267             quote: '\'', apostrophe: '\'',
54268             // NUMPAD 0-9
54269             'num-0': '0',
54270             'num-1': '1',
54271             'num-2': '2',
54272             'num-3': '3',
54273             'num-4': '4',
54274             'num-5': '5',
54275             'num-6': '6',
54276             'num-7': '7',
54277             'num-8': '8',
54278             'num-9': '9',
54279             // F1-F25
54280             f1: 'F1',
54281             f2: 'F2',
54282             f3: 'F3',
54283             f4: 'F4',
54284             f5: 'F5',
54285             f6: 'F6',
54286             f7: 'F7',
54287             f8: 'F8',
54288             f9: 'F9',
54289             f10: 'F10',
54290             f11: 'F11',
54291             f12: 'F12',
54292             f13: 'F13',
54293             f14: 'F14',
54294             f15: 'F15',
54295             f16: 'F16',
54296             f17: 'F17',
54297             f18: 'F18',
54298             f19: 'F19',
54299             f20: 'F20',
54300             f21: 'F21',
54301             f22: 'F22',
54302             f23: 'F23',
54303             f24: 'F24',
54304             f25: 'F25'
54305         };
54306
54307         utilKeybinding.keyCodes = {
54308             // Backspace key, on Mac: ⌫ (Backspace)
54309             '⌫': 8, backspace: 8,
54310             // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
54311             '⇥': 9, '⇆': 9, tab: 9,
54312             // Return key, ↩
54313             '↩': 13, 'return': 13, enter: 13, '⌅': 13,
54314             // Pause/Break key
54315             'pause': 19, 'pause-break': 19,
54316             // Caps Lock key, ⇪
54317             '⇪': 20, caps: 20, 'caps-lock': 20,
54318             // Escape key, on Mac: ⎋, on Windows: Esc
54319             '⎋': 27, escape: 27, esc: 27,
54320             // Space key
54321             space: 32,
54322             // Page-Up key, or pgup, on Mac: ↖
54323             '↖': 33, pgup: 33, 'page-up': 33,
54324             // Page-Down key, or pgdown, on Mac: ↘
54325             '↘': 34, pgdown: 34, 'page-down': 34,
54326             // END key, on Mac: ⇟
54327             '⇟': 35, end: 35,
54328             // HOME key, on Mac: ⇞
54329             '⇞': 36, home: 36,
54330             // Insert key, or ins
54331             ins: 45, insert: 45,
54332             // Delete key, on Mac: ⌦ (Delete)
54333             '⌦': 46, del: 46, 'delete': 46,
54334             // Left Arrow Key, or ←
54335             '←': 37, left: 37, 'arrow-left': 37,
54336             // Up Arrow Key, or ↑
54337             '↑': 38, up: 38, 'arrow-up': 38,
54338             // Right Arrow Key, or →
54339             '→': 39, right: 39, 'arrow-right': 39,
54340             // Up Arrow Key, or ↓
54341             '↓': 40, down: 40, 'arrow-down': 40,
54342             // odities, printing characters that come out wrong:
54343             // Firefox Equals
54344             'ffequals': 61,
54345             // Num-Multiply, or *
54346             '*': 106, star: 106, asterisk: 106, multiply: 106,
54347             // Num-Plus or +
54348             '+': 107, 'plus': 107,
54349             // Num-Subtract, or -
54350             '-': 109, subtract: 109,
54351             // Firefox Plus
54352             'ffplus': 171,
54353             // Firefox Minus
54354             'ffminus': 173,
54355             // Semicolon
54356             ';': 186, semicolon: 186,
54357             // = or equals
54358             '=': 187, 'equals': 187,
54359             // Comma, or ,
54360             ',': 188, comma: 188,
54361             // Dash / Underscore key
54362             'dash': 189,
54363             // Period, or ., or full-stop
54364             '.': 190, period: 190, 'full-stop': 190,
54365             // Slash, or /, or forward-slash
54366             '/': 191, slash: 191, 'forward-slash': 191,
54367             // Tick, or `, or back-quote
54368             '`': 192, tick: 192, 'back-quote': 192,
54369             // Open bracket, or [
54370             '[': 219, 'open-bracket': 219,
54371             // Back slash, or \
54372             '\\': 220, 'back-slash': 220,
54373             // Close backet, or ]
54374             ']': 221, 'close-bracket': 221,
54375             // Apostrophe, or Quote, or '
54376             '\'': 222, quote: 222, apostrophe: 222
54377         };
54378
54379         // NUMPAD 0-9
54380         var i$2 = 95, n = 0;
54381         while (++i$2 < 106) {
54382             utilKeybinding.keyCodes['num-' + n] = i$2;
54383             ++n;
54384         }
54385
54386         // 0-9
54387         i$2 = 47; n = 0;
54388         while (++i$2 < 58) {
54389             utilKeybinding.keyCodes[n] = i$2;
54390             ++n;
54391         }
54392
54393         // F1-F25
54394         i$2 = 111; n = 1;
54395         while (++i$2 < 136) {
54396             utilKeybinding.keyCodes['f' + n] = i$2;
54397             ++n;
54398         }
54399
54400         // a-z
54401         i$2 = 64;
54402         while (++i$2 < 91) {
54403             utilKeybinding.keyCodes[String.fromCharCode(i$2).toLowerCase()] = i$2;
54404         }
54405
54406         function utilObjectOmit(obj, omitKeys) {
54407             return Object.keys(obj).reduce(function(result, key) {
54408                 if (omitKeys.indexOf(key) === -1) {
54409                     result[key] = obj[key];  // keep
54410                 }
54411                 return result;
54412             }, {});
54413         }
54414
54415         // Copies a variable number of methods from source to target.
54416         function utilRebind(target, source) {
54417             var arguments$1 = arguments;
54418
54419             var i = 1, n = arguments.length, method;
54420             while (++i < n) {
54421                 target[method = arguments$1[i]] = d3_rebind(target, source, source[method]);
54422             }
54423             return target;
54424         }
54425
54426         // Method is assumed to be a standard D3 getter-setter:
54427         // If passed with no arguments, gets the value.
54428         // If passed with arguments, sets the value and returns the target.
54429         function d3_rebind(target, source, method) {
54430             return function() {
54431                 var value = method.apply(source, arguments);
54432                 return value === source ? target : value;
54433             };
54434         }
54435
54436         // A per-domain session mutex backed by a cookie and dead man's
54437         // switch. If the session crashes, the mutex will auto-release
54438         // after 5 seconds.
54439
54440         // This accepts a string and returns an object that complies with utilSessionMutexType
54441         function utilSessionMutex(name) {
54442             var mutex = {};
54443             var intervalID;
54444
54445             function renew() {
54446                 var expires = new Date();
54447                 expires.setSeconds(expires.getSeconds() + 5);
54448                 document.cookie = name + '=1; expires=' + expires.toUTCString();
54449             }
54450
54451             mutex.lock = function () {
54452                 if (intervalID) { return true; }
54453                 var cookie = document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + name + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1');
54454                 if (cookie) { return false; }
54455                 renew();
54456                 intervalID = window.setInterval(renew, 4000);
54457                 return true;
54458             };
54459
54460             mutex.unlock = function () {
54461                 if (!intervalID) { return; }
54462                 document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT';
54463                 clearInterval(intervalID);
54464                 intervalID = null;
54465             };
54466
54467             mutex.locked = function () {
54468                 return !!intervalID;
54469             };
54470
54471             return mutex;
54472         }
54473
54474         function utilTiler() {
54475             var _size = [256, 256];
54476             var _scale = 256;
54477             var _tileSize = 256;
54478             var _zoomExtent = [0, 20];
54479             var _translate = [_size[0] / 2, _size[1] / 2];
54480             var _margin = 0;
54481             var _skipNullIsland = false;
54482
54483
54484             function clamp(num, min, max) {
54485                 return Math.max(min, Math.min(num, max));
54486             }
54487
54488
54489             function nearNullIsland(tile) {
54490                 var x = tile[0];
54491                 var y = tile[1];
54492                 var z = tile[2];
54493                 if (z >= 7) {
54494                     var center = Math.pow(2, z - 1);
54495                     var width = Math.pow(2, z - 6);
54496                     var min = center - (width / 2);
54497                     var max = center + (width / 2) - 1;
54498                     return x >= min && x <= max && y >= min && y <= max;
54499                 }
54500                 return false;
54501             }
54502
54503
54504             function tiler() {
54505                 var z = geoScaleToZoom(_scale / (2 * Math.PI), _tileSize);
54506                 var z0 = clamp(Math.round(z), _zoomExtent[0], _zoomExtent[1]);
54507                 var tileMin = 0;
54508                 var tileMax = Math.pow(2, z0) - 1;
54509                 var log2ts = Math.log(_tileSize) * Math.LOG2E;
54510                 var k = Math.pow(2, z - z0 + log2ts);
54511                 var origin = [
54512                     (_translate[0] - _scale / 2) / k,
54513                     (_translate[1] - _scale / 2) / k
54514                 ];
54515
54516                 var cols = d3_range(
54517                     clamp(Math.floor(-origin[0]) - _margin,               tileMin, tileMax + 1),
54518                     clamp(Math.ceil(_size[0] / k - origin[0]) + _margin,  tileMin, tileMax + 1)
54519                 );
54520                 var rows = d3_range(
54521                     clamp(Math.floor(-origin[1]) - _margin,               tileMin, tileMax + 1),
54522                     clamp(Math.ceil(_size[1] / k - origin[1]) + _margin,  tileMin, tileMax + 1)
54523                 );
54524
54525                 var tiles = [];
54526                 for (var i = 0; i < rows.length; i++) {
54527                     var y = rows[i];
54528                     for (var j = 0; j < cols.length; j++) {
54529                         var x = cols[j];
54530
54531                         if (i >= _margin && i <= rows.length - _margin &&
54532                             j >= _margin && j <= cols.length - _margin) {
54533                             tiles.unshift([x, y, z0]);  // tiles in view at beginning
54534                         } else {
54535                             tiles.push([x, y, z0]);     // tiles in margin at the end
54536                         }
54537                     }
54538                 }
54539
54540                 tiles.translate = origin;
54541                 tiles.scale = k;
54542
54543                 return tiles;
54544             }
54545
54546
54547             /**
54548              * getTiles() returns an array of tiles that cover the map view
54549              */
54550             tiler.getTiles = function(projection) {
54551                 var origin = [
54552                     projection.scale() * Math.PI - projection.translate()[0],
54553                     projection.scale() * Math.PI - projection.translate()[1]
54554                 ];
54555
54556                 this
54557                     .size(projection.clipExtent()[1])
54558                     .scale(projection.scale() * 2 * Math.PI)
54559                     .translate(projection.translate());
54560
54561                 var tiles = tiler();
54562                 var ts = tiles.scale;
54563
54564                 return tiles
54565                     .map(function(tile) {
54566                         if (_skipNullIsland && nearNullIsland(tile)) {
54567                             return false;
54568                         }
54569                         var x = tile[0] * ts - origin[0];
54570                         var y = tile[1] * ts - origin[1];
54571                         return {
54572                             id: tile.toString(),
54573                             xyz: tile,
54574                             extent: geoExtent(
54575                                 projection.invert([x, y + ts]),
54576                                 projection.invert([x + ts, y])
54577                             )
54578                         };
54579                     }).filter(Boolean);
54580             };
54581
54582
54583             /**
54584              * getGeoJSON() returns a FeatureCollection for debugging tiles
54585              */
54586             tiler.getGeoJSON = function(projection) {
54587                 var features = tiler.getTiles(projection).map(function(tile) {
54588                     return {
54589                         type: 'Feature',
54590                         properties: {
54591                             id: tile.id,
54592                             name: tile.id
54593                         },
54594                         geometry: {
54595                             type: 'Polygon',
54596                             coordinates: [ tile.extent.polygon() ]
54597                         }
54598                     };
54599                 });
54600
54601                 return {
54602                     type: 'FeatureCollection',
54603                     features: features
54604                 };
54605             };
54606
54607
54608             tiler.tileSize = function(val) {
54609                 if (!arguments.length) { return _tileSize; }
54610                 _tileSize = val;
54611                 return tiler;
54612             };
54613
54614
54615             tiler.zoomExtent = function(val) {
54616                 if (!arguments.length) { return _zoomExtent; }
54617                 _zoomExtent = val;
54618                 return tiler;
54619             };
54620
54621
54622             tiler.size = function(val) {
54623                 if (!arguments.length) { return _size; }
54624                 _size = val;
54625                 return tiler;
54626             };
54627
54628
54629             tiler.scale = function(val) {
54630                 if (!arguments.length) { return _scale; }
54631                 _scale = val;
54632                 return tiler;
54633             };
54634
54635
54636             tiler.translate = function(val) {
54637                 if (!arguments.length) { return _translate; }
54638                 _translate = val;
54639                 return tiler;
54640             };
54641
54642
54643             // number to extend the rows/columns beyond those covering the viewport
54644             tiler.margin = function(val) {
54645                 if (!arguments.length) { return _margin; }
54646                 _margin = +val;
54647                 return tiler;
54648             };
54649
54650
54651             tiler.skipNullIsland = function(val) {
54652                 if (!arguments.length) { return _skipNullIsland; }
54653                 _skipNullIsland = val;
54654                 return tiler;
54655             };
54656
54657
54658             return tiler;
54659         }
54660
54661         function utilTriggerEvent(target, type) {
54662             target.each(function() {
54663                 var evt = document.createEvent('HTMLEvents');
54664                 evt.initEvent(type, true, true);
54665                 this.dispatchEvent(evt);
54666             });
54667         }
54668
54669         function osmEntity(attrs) {
54670             // For prototypal inheritance.
54671             if (this instanceof osmEntity) { return; }
54672
54673             // Create the appropriate subtype.
54674             if (attrs && attrs.type) {
54675                 return osmEntity[attrs.type].apply(this, arguments);
54676             } else if (attrs && attrs.id) {
54677                 return osmEntity[osmEntity.id.type(attrs.id)].apply(this, arguments);
54678             }
54679
54680             // Initialize a generic Entity (used only in tests).
54681             return (new osmEntity()).initialize(arguments);
54682         }
54683
54684
54685         osmEntity.id = function(type) {
54686             return osmEntity.id.fromOSM(type, osmEntity.id.next[type]--);
54687         };
54688
54689
54690         osmEntity.id.next = {
54691             changeset: -1, node: -1, way: -1, relation: -1
54692         };
54693
54694
54695         osmEntity.id.fromOSM = function(type, id) {
54696             return type[0] + id;
54697         };
54698
54699
54700         osmEntity.id.toOSM = function(id) {
54701             return id.slice(1);
54702         };
54703
54704
54705         osmEntity.id.type = function(id) {
54706             return { 'c': 'changeset', 'n': 'node', 'w': 'way', 'r': 'relation' }[id[0]];
54707         };
54708
54709
54710         // A function suitable for use as the second argument to d3.selection#data().
54711         osmEntity.key = function(entity) {
54712             return entity.id + 'v' + (entity.v || 0);
54713         };
54714
54715         var _deprecatedTagValuesByKey;
54716
54717         osmEntity.deprecatedTagValuesByKey = function() {
54718             if (!_deprecatedTagValuesByKey) {
54719                 _deprecatedTagValuesByKey = {};
54720                 dataDeprecated.forEach(function(d) {
54721                     var oldKeys = Object.keys(d.old);
54722                     if (oldKeys.length === 1) {
54723                         var oldKey = oldKeys[0];
54724                         var oldValue = d.old[oldKey];
54725                         if (oldValue !== '*') {
54726                             if (!_deprecatedTagValuesByKey[oldKey]) {
54727                                 _deprecatedTagValuesByKey[oldKey] = [oldValue];
54728                             } else {
54729                                 _deprecatedTagValuesByKey[oldKey].push(oldValue);
54730                             }
54731                         }
54732                     }
54733                 });
54734             }
54735             return _deprecatedTagValuesByKey;
54736         };
54737
54738
54739         osmEntity.prototype = {
54740
54741             tags: {},
54742
54743
54744             initialize: function(sources) {
54745                 for (var i = 0; i < sources.length; ++i) {
54746                     var source = sources[i];
54747                     for (var prop in source) {
54748                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
54749                             if (source[prop] === undefined) {
54750                                 delete this[prop];
54751                             } else {
54752                                 this[prop] = source[prop];
54753                             }
54754                         }
54755                     }
54756                 }
54757
54758                 if (!this.id && this.type) {
54759                     this.id = osmEntity.id(this.type);
54760                 }
54761                 if (!this.hasOwnProperty('visible')) {
54762                     this.visible = true;
54763                 }
54764
54765                 return this;
54766             },
54767
54768
54769             copy: function(resolver, copies) {
54770                 if (copies[this.id])
54771                     { return copies[this.id]; }
54772
54773                 var copy = osmEntity(this, { id: undefined, user: undefined, version: undefined });
54774                 copies[this.id] = copy;
54775
54776                 return copy;
54777             },
54778
54779
54780             osmId: function() {
54781                 return osmEntity.id.toOSM(this.id);
54782             },
54783
54784
54785             isNew: function() {
54786                 return this.osmId() < 0;
54787             },
54788
54789
54790             update: function(attrs) {
54791                 return osmEntity(this, attrs, { v: 1 + (this.v || 0) });
54792             },
54793
54794
54795             mergeTags: function(tags) {
54796                 var merged = Object.assign({}, this.tags);   // shallow copy
54797                 var changed = false;
54798                 for (var k in tags) {
54799                     var t1 = merged[k];
54800                     var t2 = tags[k];
54801                     if (!t1) {
54802                         changed = true;
54803                         merged[k] = t2;
54804                     } else if (t1 !== t2) {
54805                         changed = true;
54806                         merged[k] = utilArrayUnion(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
54807                     }
54808                 }
54809                 return changed ? this.update({ tags: merged }) : this;
54810             },
54811
54812
54813             intersects: function(extent, resolver) {
54814                 return this.extent(resolver).intersects(extent);
54815             },
54816
54817
54818             hasNonGeometryTags: function() {
54819                 return Object.keys(this.tags).some(function(k) { return k !== 'area'; });
54820             },
54821
54822             hasParentRelations: function(resolver) {
54823                 return resolver.parentRelations(this).length > 0;
54824             },
54825
54826             hasInterestingTags: function() {
54827                 return Object.keys(this.tags).some(osmIsInterestingTag);
54828             },
54829
54830             hasWikidata: function() {
54831                 return !!this.tags.wikidata || !!this.tags['brand:wikidata'];
54832             },
54833
54834             isHighwayIntersection: function() {
54835                 return false;
54836             },
54837
54838             isDegenerate: function() {
54839                 return true;
54840             },
54841
54842             deprecatedTags: function() {
54843                 var tags = this.tags;
54844
54845                 // if there are no tags, none can be deprecated
54846                 if (Object.keys(tags).length === 0) { return []; }
54847
54848                 var deprecated = [];
54849                 dataDeprecated.forEach(function(d) {
54850                     var oldKeys = Object.keys(d.old);
54851                     var matchesDeprecatedTags = oldKeys.every(function(oldKey) {
54852                         if (!tags[oldKey]) { return false; }
54853                         if (d.old[oldKey] === '*') { return true; }
54854
54855                         var vals = tags[oldKey].split(';').filter(Boolean);
54856                         if (vals.length === 0) {
54857                             return false;
54858                         } else if (vals.length > 1) {
54859                             return vals.indexOf(d.old[oldKey]) !== -1;
54860                         } else {
54861                             if (tags[oldKey] === d.old[oldKey]) {
54862                                 if (d.replace && d.old[oldKey] === d.replace[oldKey]) {
54863                                     var replaceKeys = Object.keys(d.replace);
54864                                     return !replaceKeys.every(function(replaceKey) {
54865                                         return tags[replaceKey] === d.replace[replaceKey];
54866                                     });
54867                                 } else {
54868                                     return true;
54869                                 }
54870                             }
54871                         }
54872                         return false;
54873                     });
54874                     if (matchesDeprecatedTags) {
54875                         deprecated.push(d);
54876                     }
54877                 });
54878
54879                 return deprecated;
54880             }
54881         };
54882
54883         function osmLanes(entity) {
54884             if (entity.type !== 'way') { return null; }
54885             if (!entity.tags.highway) { return null; }
54886
54887             var tags = entity.tags;
54888             var isOneWay = entity.isOneWay();
54889             var laneCount = getLaneCount(tags, isOneWay);
54890             var maxspeed = parseMaxspeed(tags);
54891
54892             var laneDirections = parseLaneDirections(tags, isOneWay, laneCount);
54893             var forward = laneDirections.forward;
54894             var backward = laneDirections.backward;
54895             var bothways = laneDirections.bothways;
54896
54897             // parse the piped string 'x|y|z' format
54898             var turnLanes = {};
54899             turnLanes.unspecified = parseTurnLanes(tags['turn:lanes']);
54900             turnLanes.forward = parseTurnLanes(tags['turn:lanes:forward']);
54901             turnLanes.backward = parseTurnLanes(tags['turn:lanes:backward']);
54902
54903             var maxspeedLanes = {};
54904             maxspeedLanes.unspecified = parseMaxspeedLanes(tags['maxspeed:lanes'], maxspeed);
54905             maxspeedLanes.forward = parseMaxspeedLanes(tags['maxspeed:lanes:forward'], maxspeed);
54906             maxspeedLanes.backward = parseMaxspeedLanes(tags['maxspeed:lanes:backward'], maxspeed);
54907
54908             var psvLanes = {};
54909             psvLanes.unspecified = parseMiscLanes(tags['psv:lanes']);
54910             psvLanes.forward = parseMiscLanes(tags['psv:lanes:forward']);
54911             psvLanes.backward = parseMiscLanes(tags['psv:lanes:backward']);
54912
54913             var busLanes = {};
54914             busLanes.unspecified = parseMiscLanes(tags['bus:lanes']);
54915             busLanes.forward = parseMiscLanes(tags['bus:lanes:forward']);
54916             busLanes.backward = parseMiscLanes(tags['bus:lanes:backward']);
54917
54918             var taxiLanes = {};
54919             taxiLanes.unspecified = parseMiscLanes(tags['taxi:lanes']);
54920             taxiLanes.forward = parseMiscLanes(tags['taxi:lanes:forward']);
54921             taxiLanes.backward = parseMiscLanes(tags['taxi:lanes:backward']);
54922
54923             var hovLanes = {};
54924             hovLanes.unspecified = parseMiscLanes(tags['hov:lanes']);
54925             hovLanes.forward = parseMiscLanes(tags['hov:lanes:forward']);
54926             hovLanes.backward = parseMiscLanes(tags['hov:lanes:backward']);
54927
54928             var hgvLanes = {};
54929             hgvLanes.unspecified = parseMiscLanes(tags['hgv:lanes']);
54930             hgvLanes.forward = parseMiscLanes(tags['hgv:lanes:forward']);
54931             hgvLanes.backward = parseMiscLanes(tags['hgv:lanes:backward']);
54932
54933             var bicyclewayLanes = {};
54934             bicyclewayLanes.unspecified = parseBicycleWay(tags['bicycleway:lanes']);
54935             bicyclewayLanes.forward = parseBicycleWay(tags['bicycleway:lanes:forward']);
54936             bicyclewayLanes.backward = parseBicycleWay(tags['bicycleway:lanes:backward']);
54937
54938             var lanesObj = {
54939                 forward: [],
54940                 backward: [],
54941                 unspecified: []
54942             };
54943
54944             // map forward/backward/unspecified of each lane type to lanesObj
54945             mapToLanesObj(lanesObj, turnLanes, 'turnLane');
54946             mapToLanesObj(lanesObj, maxspeedLanes, 'maxspeed');
54947             mapToLanesObj(lanesObj, psvLanes, 'psv');
54948             mapToLanesObj(lanesObj, busLanes, 'bus');
54949             mapToLanesObj(lanesObj, taxiLanes, 'taxi');
54950             mapToLanesObj(lanesObj, hovLanes, 'hov');
54951             mapToLanesObj(lanesObj, hgvLanes, 'hgv');
54952             mapToLanesObj(lanesObj, bicyclewayLanes, 'bicycleway');
54953
54954             return {
54955                 metadata: {
54956                     count: laneCount,
54957                     oneway: isOneWay,
54958                     forward: forward,
54959                     backward: backward,
54960                     bothways: bothways,
54961                     turnLanes: turnLanes,
54962                     maxspeed: maxspeed,
54963                     maxspeedLanes: maxspeedLanes,
54964                     psvLanes: psvLanes,
54965                     busLanes: busLanes,
54966                     taxiLanes: taxiLanes,
54967                     hovLanes: hovLanes,
54968                     hgvLanes: hgvLanes,
54969                     bicyclewayLanes: bicyclewayLanes
54970                 },
54971                 lanes: lanesObj
54972             };
54973         }
54974
54975
54976         function getLaneCount(tags, isOneWay) {
54977             var count;
54978             if (tags.lanes) {
54979                 count = parseInt(tags.lanes, 10);
54980                 if (count > 0) {
54981                     return count;
54982                 }
54983             }
54984
54985
54986             switch (tags.highway) {
54987                 case 'trunk':
54988                 case 'motorway':
54989                     count = isOneWay ? 2 : 4;
54990                     break;
54991                 default:
54992                     count = isOneWay ? 1 : 2;
54993                     break;
54994             }
54995
54996             return count;
54997         }
54998
54999
55000         function parseMaxspeed(tags) {
55001             var maxspeed = tags.maxspeed;
55002             if (!maxspeed) { return; }
55003
55004             var maxspeedRegex = /^([0-9][\.0-9]+?)(?:[ ]?(?:km\/h|kmh|kph|mph|knots))?$/;
55005             if (!maxspeedRegex.test(maxspeed)) { return; }
55006
55007             return parseInt(maxspeed, 10);
55008         }
55009
55010
55011         function parseLaneDirections(tags, isOneWay, laneCount) {
55012             var forward = parseInt(tags['lanes:forward'], 10);
55013             var backward = parseInt(tags['lanes:backward'], 10);
55014             var bothways = parseInt(tags['lanes:both_ways'], 10) > 0 ? 1 : 0;
55015
55016             if (parseInt(tags.oneway, 10) === -1) {
55017                 forward = 0;
55018                 bothways = 0;
55019                 backward = laneCount;
55020             }
55021             else if (isOneWay) {
55022                 forward = laneCount;
55023                 bothways = 0;
55024                 backward = 0;
55025             }
55026             else if (isNaN(forward) && isNaN(backward)) {
55027                 backward = Math.floor((laneCount - bothways) / 2);
55028                 forward = laneCount - bothways - backward;
55029             }
55030             else if (isNaN(forward)) {
55031                 if (backward > laneCount - bothways) {
55032                     backward = laneCount - bothways;
55033                 }
55034                 forward = laneCount - bothways - backward;
55035             }
55036             else if (isNaN(backward)) {
55037                 if (forward > laneCount - bothways) {
55038                     forward = laneCount - bothways;
55039                 }
55040                 backward = laneCount - bothways - forward;
55041             }
55042             return {
55043                 forward: forward,
55044                 backward: backward,
55045                 bothways: bothways
55046             };
55047         }
55048
55049
55050         function parseTurnLanes(tag){
55051             if (!tag) { return; }
55052
55053             var validValues = [
55054                 'left', 'slight_left', 'sharp_left', 'through', 'right', 'slight_right',
55055                 'sharp_right', 'reverse', 'merge_to_left', 'merge_to_right', 'none'
55056             ];
55057
55058             return tag.split('|')
55059                 .map(function (s) {
55060                     if (s === '') { s = 'none'; }
55061                     return s.split(';')
55062                         .map(function (d) {
55063                             return validValues.indexOf(d) === -1 ? 'unknown': d;
55064                         });
55065                 });
55066         }
55067
55068
55069         function parseMaxspeedLanes(tag, maxspeed) {
55070             if (!tag) { return; }
55071
55072             return tag.split('|')
55073                 .map(function (s) {
55074                     if (s === 'none') { return s; }
55075                     var m = parseInt(s, 10);
55076                     if (s === '' || m === maxspeed) { return null; }
55077                     return isNaN(m) ? 'unknown': m;
55078                 });
55079         }
55080
55081
55082         function parseMiscLanes(tag) {
55083             if (!tag) { return; }
55084
55085             var validValues = [
55086                 'yes', 'no', 'designated'
55087             ];
55088
55089             return tag.split('|')
55090                 .map(function (s) {
55091                     if (s === '') { s = 'no'; }
55092                     return validValues.indexOf(s) === -1 ? 'unknown': s;
55093                 });
55094         }
55095
55096
55097         function parseBicycleWay(tag) {
55098             if (!tag) { return; }
55099
55100             var validValues = [
55101                 'yes', 'no', 'designated', 'lane'
55102             ];
55103
55104             return tag.split('|')
55105                 .map(function (s) {
55106                     if (s === '') { s = 'no'; }
55107                     return validValues.indexOf(s) === -1 ? 'unknown': s;
55108                 });
55109         }
55110
55111
55112         function mapToLanesObj(lanesObj, data, key) {
55113             if (data.forward) { data.forward.forEach(function(l, i) {
55114                 if (!lanesObj.forward[i]) { lanesObj.forward[i] = {}; }
55115                 lanesObj.forward[i][key] = l;
55116             }); }
55117             if (data.backward) { data.backward.forEach(function(l, i) {
55118                 if (!lanesObj.backward[i]) { lanesObj.backward[i] = {}; }
55119                 lanesObj.backward[i][key] = l;
55120             }); }
55121             if (data.unspecified) { data.unspecified.forEach(function(l, i) {
55122                 if (!lanesObj.unspecified[i]) { lanesObj.unspecified[i] = {}; }
55123                 lanesObj.unspecified[i][key] = l;
55124             }); }
55125         }
55126
55127         function osmWay() {
55128             if (!(this instanceof osmWay)) {
55129                 return (new osmWay()).initialize(arguments);
55130             } else if (arguments.length) {
55131                 this.initialize(arguments);
55132             }
55133         }
55134
55135
55136         osmEntity.way = osmWay;
55137
55138         osmWay.prototype = Object.create(osmEntity.prototype);
55139
55140
55141         Object.assign(osmWay.prototype, {
55142             type: 'way',
55143             nodes: [],
55144
55145
55146             copy: function(resolver, copies) {
55147                 if (copies[this.id]) { return copies[this.id]; }
55148
55149                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
55150
55151                 var nodes = this.nodes.map(function(id) {
55152                     return resolver.entity(id).copy(resolver, copies).id;
55153                 });
55154
55155                 copy = copy.update({ nodes: nodes });
55156                 copies[this.id] = copy;
55157
55158                 return copy;
55159             },
55160
55161
55162             extent: function(resolver) {
55163                 return resolver.transient(this, 'extent', function() {
55164                     var extent = geoExtent();
55165                     for (var i = 0; i < this.nodes.length; i++) {
55166                         var node = resolver.hasEntity(this.nodes[i]);
55167                         if (node) {
55168                             extent._extend(node.extent());
55169                         }
55170                     }
55171                     return extent;
55172                 });
55173             },
55174
55175
55176             first: function() {
55177                 return this.nodes[0];
55178             },
55179
55180
55181             last: function() {
55182                 return this.nodes[this.nodes.length - 1];
55183             },
55184
55185
55186             contains: function(node) {
55187                 return this.nodes.indexOf(node) >= 0;
55188             },
55189
55190
55191             affix: function(node) {
55192                 if (this.nodes[0] === node) { return 'prefix'; }
55193                 if (this.nodes[this.nodes.length - 1] === node) { return 'suffix'; }
55194             },
55195
55196
55197             layer: function() {
55198                 // explicit layer tag, clamp between -10, 10..
55199                 if (isFinite(this.tags.layer)) {
55200                     return Math.max(-10, Math.min(+(this.tags.layer), 10));
55201                 }
55202
55203                 // implied layer tag..
55204                 if (this.tags.covered === 'yes') { return -1; }
55205                 if (this.tags.location === 'overground') { return 1; }
55206                 if (this.tags.location === 'underground') { return -1; }
55207                 if (this.tags.location === 'underwater') { return -10; }
55208
55209                 if (this.tags.power === 'line') { return 10; }
55210                 if (this.tags.power === 'minor_line') { return 10; }
55211                 if (this.tags.aerialway) { return 10; }
55212                 if (this.tags.bridge) { return 1; }
55213                 if (this.tags.cutting) { return -1; }
55214                 if (this.tags.tunnel) { return -1; }
55215                 if (this.tags.waterway) { return -1; }
55216                 if (this.tags.man_made === 'pipeline') { return -10; }
55217                 if (this.tags.boundary) { return -10; }
55218                 return 0;
55219             },
55220
55221
55222             // the approximate width of the line based on its tags except its `width` tag
55223             impliedLineWidthMeters: function() {
55224                 var averageWidths = {
55225                     highway: { // width is for single lane
55226                         motorway: 5, motorway_link: 5, trunk: 4.5, trunk_link: 4.5,
55227                         primary: 4, secondary: 4, tertiary: 4,
55228                         primary_link: 4, secondary_link: 4, tertiary_link: 4,
55229                         unclassified: 4, road: 4, living_street: 4, bus_guideway: 4, pedestrian: 4,
55230                         residential: 3.5, service: 3.5, track: 3, cycleway: 2.5,
55231                         bridleway: 2, corridor: 2, steps: 2, path: 1.5, footway: 1.5
55232                     },
55233                     railway: { // width includes ties and rail bed, not just track gauge
55234                         rail: 2.5, light_rail: 2.5, tram: 2.5, subway: 2.5,
55235                         monorail: 2.5, funicular: 2.5, disused: 2.5, preserved: 2.5,
55236                         miniature: 1.5, narrow_gauge: 1.5
55237                     },
55238                     waterway: {
55239                         river: 50, canal: 25, stream: 5, tidal_channel: 5, fish_pass: 2.5, drain: 2.5, ditch: 1.5
55240                     }
55241                 };
55242                 for (var key in averageWidths) {
55243                     if (this.tags[key] && averageWidths[key][this.tags[key]]) {
55244                         var width = averageWidths[key][this.tags[key]];
55245                         if (key === 'highway') {
55246                             var laneCount = this.tags.lanes && parseInt(this.tags.lanes, 10);
55247                             if (!laneCount) { laneCount = this.isOneWay() ? 1 : 2; }
55248
55249                             return width * laneCount;
55250                         }
55251                         return width;
55252                     }
55253                 }
55254                 return null;
55255             },
55256
55257
55258             isOneWay: function() {
55259                 // explicit oneway tag..
55260                 var values = {
55261                     'yes': true,
55262                     '1': true,
55263                     '-1': true,
55264                     'reversible': true,
55265                     'alternating': true,
55266                     'no': false,
55267                     '0': false
55268                 };
55269                 if (values[this.tags.oneway] !== undefined) {
55270                     return values[this.tags.oneway];
55271                 }
55272
55273                 // implied oneway tag..
55274                 for (var key in this.tags) {
55275                     if (key in osmOneWayTags && (this.tags[key] in osmOneWayTags[key]))
55276                         { return true; }
55277                 }
55278                 return false;
55279             },
55280
55281             // Some identifier for tag that implies that this way is "sided",
55282             // i.e. the right side is the 'inside' (e.g. the right side of a
55283             // natural=cliff is lower).
55284             sidednessIdentifier: function() {
55285                 for (var key in this.tags) {
55286                     var value = this.tags[key];
55287                     if (key in osmRightSideIsInsideTags && (value in osmRightSideIsInsideTags[key])) {
55288                         if (osmRightSideIsInsideTags[key][value] === true) {
55289                             return key;
55290                         } else {
55291                             // if the map's value is something other than a
55292                             // literal true, we should use it so we can
55293                             // special case some keys (e.g. natural=coastline
55294                             // is handled differently to other naturals).
55295                             return osmRightSideIsInsideTags[key][value];
55296                         }
55297                     }
55298                 }
55299
55300                 return null;
55301             },
55302
55303             isSided: function() {
55304                 if (this.tags.two_sided === 'yes') {
55305                     return false;
55306                 }
55307
55308                 return this.sidednessIdentifier() !== null;
55309             },
55310
55311             lanes: function() {
55312                 return osmLanes(this);
55313             },
55314
55315
55316             isClosed: function() {
55317                 return this.nodes.length > 1 && this.first() === this.last();
55318             },
55319
55320
55321             isConvex: function(resolver) {
55322                 if (!this.isClosed() || this.isDegenerate()) { return null; }
55323
55324                 var nodes = utilArrayUniq(resolver.childNodes(this));
55325                 var coords = nodes.map(function(n) { return n.loc; });
55326                 var curr = 0;
55327                 var prev = 0;
55328
55329                 for (var i = 0; i < coords.length; i++) {
55330                     var o = coords[(i+1) % coords.length];
55331                     var a = coords[i];
55332                     var b = coords[(i+2) % coords.length];
55333                     var res = geoVecCross(a, b, o);
55334
55335                     curr = (res > 0) ? 1 : (res < 0) ? -1 : 0;
55336                     if (curr === 0) {
55337                         continue;
55338                     } else if (prev && curr !== prev) {
55339                         return false;
55340                     }
55341                     prev = curr;
55342                 }
55343                 return true;
55344             },
55345
55346             // returns an object with the tag that implies this is an area, if any
55347             tagSuggestingArea: function() {
55348                 if (this.tags.area === 'yes') { return { area: 'yes' }; }
55349                 if (this.tags.area === 'no') { return null; }
55350
55351                 // `highway` and `railway` are typically linear features, but there
55352                 // are a few exceptions that should be treated as areas, even in the
55353                 // absence of a proper `area=yes` or `areaKeys` tag.. see #4194
55354                 var lineKeys = {
55355                     highway: {
55356                         rest_area: true,
55357                         services: true
55358                     },
55359                     railway: {
55360                         roundhouse: true,
55361                         station: true,
55362                         traverser: true,
55363                         turntable: true,
55364                         wash: true
55365                     }
55366                 };
55367                 var returnTags = {};
55368                 for (var key in this.tags) {
55369                     if (key in osmAreaKeys && !(this.tags[key] in osmAreaKeys[key])) {
55370                         returnTags[key] = this.tags[key];
55371                         return returnTags;
55372                     }
55373                     if (key in lineKeys && this.tags[key] in lineKeys[key]) {
55374                         returnTags[key] = this.tags[key];
55375                         return returnTags;
55376                     }
55377                 }
55378                 return null;
55379             },
55380
55381             isArea: function() {
55382                 if (this.tags.area === 'yes')
55383                     { return true; }
55384                 if (!this.isClosed() || this.tags.area === 'no')
55385                     { return false; }
55386                 return this.tagSuggestingArea() !== null;
55387             },
55388
55389
55390             isDegenerate: function() {
55391                 return (new Set(this.nodes).size < (this.isArea() ? 3 : 2));
55392             },
55393
55394
55395             areAdjacent: function(n1, n2) {
55396                 for (var i = 0; i < this.nodes.length; i++) {
55397                     if (this.nodes[i] === n1) {
55398                         if (this.nodes[i - 1] === n2) { return true; }
55399                         if (this.nodes[i + 1] === n2) { return true; }
55400                     }
55401                 }
55402                 return false;
55403             },
55404
55405
55406             geometry: function(graph) {
55407                 return graph.transient(this, 'geometry', function() {
55408                     return this.isArea() ? 'area' : 'line';
55409                 });
55410             },
55411
55412
55413             // If this way is not closed, append the beginning node to the end of the nodelist to close it.
55414             close: function() {
55415                 if (this.isClosed() || !this.nodes.length) { return this; }
55416
55417                 var nodes = this.nodes.slice();
55418                 nodes = nodes.filter(noRepeatNodes);
55419                 nodes.push(nodes[0]);
55420                 return this.update({ nodes: nodes });
55421             },
55422
55423
55424             // If this way is closed, remove any connector nodes from the end of the nodelist to unclose it.
55425             unclose: function() {
55426                 if (!this.isClosed()) { return this; }
55427
55428                 var nodes = this.nodes.slice();
55429                 var connector = this.first();
55430                 var i = nodes.length - 1;
55431
55432                 // remove trailing connectors..
55433                 while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
55434                     nodes.splice(i, 1);
55435                     i = nodes.length - 1;
55436                 }
55437
55438                 nodes = nodes.filter(noRepeatNodes);
55439                 return this.update({ nodes: nodes });
55440             },
55441
55442
55443             // Adds a node (id) in front of the node which is currently at position index.
55444             // If index is undefined, the node will be added to the end of the way for linear ways,
55445             //   or just before the final connecting node for circular ways.
55446             // Consecutive duplicates are eliminated including existing ones.
55447             // Circularity is always preserved when adding a node.
55448             addNode: function(id, index) {
55449                 var nodes = this.nodes.slice();
55450                 var isClosed = this.isClosed();
55451                 var max = isClosed ? nodes.length - 1 : nodes.length;
55452
55453                 if (index === undefined) {
55454                     index = max;
55455                 }
55456
55457                 if (index < 0 || index > max) {
55458                     throw new RangeError('index ' + index + ' out of range 0..' + max);
55459                 }
55460
55461                 // If this is a closed way, remove all connector nodes except the first one
55462                 // (there may be duplicates) and adjust index if necessary..
55463                 if (isClosed) {
55464                     var connector = this.first();
55465
55466                     // leading connectors..
55467                     var i = 1;
55468                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
55469                         nodes.splice(i, 1);
55470                         if (index > i) { index--; }
55471                     }
55472
55473                     // trailing connectors..
55474                     i = nodes.length - 1;
55475                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
55476                         nodes.splice(i, 1);
55477                         if (index > i) { index--; }
55478                         i = nodes.length - 1;
55479                     }
55480                 }
55481
55482                 nodes.splice(index, 0, id);
55483                 nodes = nodes.filter(noRepeatNodes);
55484
55485                 // If the way was closed before, append a connector node to keep it closed..
55486                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
55487                     nodes.push(nodes[0]);
55488                 }
55489
55490                 return this.update({ nodes: nodes });
55491             },
55492
55493
55494             // Replaces the node which is currently at position index with the given node (id).
55495             // Consecutive duplicates are eliminated including existing ones.
55496             // Circularity is preserved when updating a node.
55497             updateNode: function(id, index) {
55498                 var nodes = this.nodes.slice();
55499                 var isClosed = this.isClosed();
55500                 var max = nodes.length - 1;
55501
55502                 if (index === undefined || index < 0 || index > max) {
55503                     throw new RangeError('index ' + index + ' out of range 0..' + max);
55504                 }
55505
55506                 // If this is a closed way, remove all connector nodes except the first one
55507                 // (there may be duplicates) and adjust index if necessary..
55508                 if (isClosed) {
55509                     var connector = this.first();
55510
55511                     // leading connectors..
55512                     var i = 1;
55513                     while (i < nodes.length && nodes.length > 2 && nodes[i] === connector) {
55514                         nodes.splice(i, 1);
55515                         if (index > i) { index--; }
55516                     }
55517
55518                     // trailing connectors..
55519                     i = nodes.length - 1;
55520                     while (i > 0 && nodes.length > 1 && nodes[i] === connector) {
55521                         nodes.splice(i, 1);
55522                         if (index === i) { index = 0; }  // update leading connector instead
55523                         i = nodes.length - 1;
55524                     }
55525                 }
55526
55527                 nodes.splice(index, 1, id);
55528                 nodes = nodes.filter(noRepeatNodes);
55529
55530                 // If the way was closed before, append a connector node to keep it closed..
55531                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
55532                     nodes.push(nodes[0]);
55533                 }
55534
55535                 return this.update({nodes: nodes});
55536             },
55537
55538
55539             // Replaces each occurrence of node id needle with replacement.
55540             // Consecutive duplicates are eliminated including existing ones.
55541             // Circularity is preserved.
55542             replaceNode: function(needleID, replacementID) {
55543                 var nodes = this.nodes.slice();
55544                 var isClosed = this.isClosed();
55545
55546                 for (var i = 0; i < nodes.length; i++) {
55547                     if (nodes[i] === needleID) {
55548                         nodes[i] = replacementID;
55549                     }
55550                 }
55551
55552                 nodes = nodes.filter(noRepeatNodes);
55553
55554                 // If the way was closed before, append a connector node to keep it closed..
55555                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
55556                     nodes.push(nodes[0]);
55557                 }
55558
55559                 return this.update({nodes: nodes});
55560             },
55561
55562
55563             // Removes each occurrence of node id.
55564             // Consecutive duplicates are eliminated including existing ones.
55565             // Circularity is preserved.
55566             removeNode: function(id) {
55567                 var nodes = this.nodes.slice();
55568                 var isClosed = this.isClosed();
55569
55570                 nodes = nodes
55571                     .filter(function(node) { return node !== id; })
55572                     .filter(noRepeatNodes);
55573
55574                 // If the way was closed before, append a connector node to keep it closed..
55575                 if (isClosed && (nodes.length === 1 || nodes[0] !== nodes[nodes.length - 1])) {
55576                     nodes.push(nodes[0]);
55577                 }
55578
55579                 return this.update({nodes: nodes});
55580             },
55581
55582
55583             asJXON: function(changeset_id) {
55584                 var r = {
55585                     way: {
55586                         '@id': this.osmId(),
55587                         '@version': this.version || 0,
55588                         nd: this.nodes.map(function(id) {
55589                             return { keyAttributes: { ref: osmEntity.id.toOSM(id) } };
55590                         }, this),
55591                         tag: Object.keys(this.tags).map(function(k) {
55592                             return { keyAttributes: { k: k, v: this.tags[k] } };
55593                         }, this)
55594                     }
55595                 };
55596                 if (changeset_id) {
55597                     r.way['@changeset'] = changeset_id;
55598                 }
55599                 return r;
55600             },
55601
55602
55603             asGeoJSON: function(resolver) {
55604                 return resolver.transient(this, 'GeoJSON', function() {
55605                     var coordinates = resolver.childNodes(this)
55606                         .map(function(n) { return n.loc; });
55607
55608                     if (this.isArea() && this.isClosed()) {
55609                         return {
55610                             type: 'Polygon',
55611                             coordinates: [coordinates]
55612                         };
55613                     } else {
55614                         return {
55615                             type: 'LineString',
55616                             coordinates: coordinates
55617                         };
55618                     }
55619                 });
55620             },
55621
55622
55623             area: function(resolver) {
55624                 return resolver.transient(this, 'area', function() {
55625                     var nodes = resolver.childNodes(this);
55626
55627                     var json = {
55628                         type: 'Polygon',
55629                         coordinates: [ nodes.map(function(n) { return n.loc; }) ]
55630                     };
55631
55632                     if (!this.isClosed() && nodes.length) {
55633                         json.coordinates[0].push(nodes[0].loc);
55634                     }
55635
55636                     var area = d3_geoArea(json);
55637
55638                     // Heuristic for detecting counterclockwise winding order. Assumes
55639                     // that OpenStreetMap polygons are not hemisphere-spanning.
55640                     if (area > 2 * Math.PI) {
55641                         json.coordinates[0] = json.coordinates[0].reverse();
55642                         area = d3_geoArea(json);
55643                     }
55644
55645                     return isNaN(area) ? 0 : area;
55646                 });
55647             }
55648         });
55649
55650
55651         // Filter function to eliminate consecutive duplicates.
55652         function noRepeatNodes(node, i, arr) {
55653             return i === 0 || node !== arr[i - 1];
55654         }
55655
55656         // "Old" multipolyons, previously known as "simple" multipolygons, are as follows:
55657         //
55658         // 1. Relation tagged with `type=multipolygon` and no interesting tags.
55659         // 2. One and only one member with the `outer` role. Must be a way with interesting tags.
55660         // 3. No members without a role.
55661         //
55662         // Old multipolygons are no longer recommended but are still rendered as areas by iD.
55663
55664         function osmOldMultipolygonOuterMemberOfRelation(entity, graph) {
55665             if (entity.type !== 'relation' ||
55666                 !entity.isMultipolygon()
55667                 || Object.keys(entity.tags).filter(osmIsInterestingTag).length > 1) {
55668                 return false;
55669             }
55670
55671             var outerMember;
55672             for (var memberIndex in entity.members) {
55673                 var member = entity.members[memberIndex];
55674                 if (!member.role || member.role === 'outer') {
55675                     if (outerMember) { return false; }
55676                     if (member.type !== 'way') { return false; }
55677                     if (!graph.hasEntity(member.id)) { return false; }
55678
55679                     outerMember = graph.entity(member.id);
55680
55681                     if (Object.keys(outerMember.tags).filter(osmIsInterestingTag).length === 0) {
55682                         return false;
55683                     }
55684                 }
55685             }
55686
55687             return outerMember;
55688         }
55689
55690         // For fixing up rendering of multipolygons with tags on the outer member.
55691         // https://github.com/openstreetmap/iD/issues/613
55692         function osmIsOldMultipolygonOuterMember(entity, graph) {
55693             if (entity.type !== 'way' || Object.keys(entity.tags).filter(osmIsInterestingTag).length === 0)
55694                 { return false; }
55695
55696             var parents = graph.parentRelations(entity);
55697             if (parents.length !== 1)
55698                 { return false; }
55699
55700             var parent = parents[0];
55701             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
55702                 { return false; }
55703
55704             var members = parent.members, member;
55705             for (var i = 0; i < members.length; i++) {
55706                 member = members[i];
55707                 if (member.id === entity.id && member.role && member.role !== 'outer')
55708                     { return false; } // Not outer member
55709                 if (member.id !== entity.id && (!member.role || member.role === 'outer'))
55710                     { return false; } // Not a simple multipolygon
55711             }
55712
55713             return parent;
55714         }
55715
55716
55717         function osmOldMultipolygonOuterMember(entity, graph) {
55718             if (entity.type !== 'way')
55719                 { return false; }
55720
55721             var parents = graph.parentRelations(entity);
55722             if (parents.length !== 1)
55723                 { return false; }
55724
55725             var parent = parents[0];
55726             if (!parent.isMultipolygon() || Object.keys(parent.tags).filter(osmIsInterestingTag).length > 1)
55727                 { return false; }
55728
55729             var members = parent.members, member, outerMember;
55730             for (var i = 0; i < members.length; i++) {
55731                 member = members[i];
55732                 if (!member.role || member.role === 'outer') {
55733                     if (outerMember)
55734                         { return false; } // Not a simple multipolygon
55735                     outerMember = member;
55736                 }
55737             }
55738
55739             if (!outerMember)
55740                 { return false; }
55741
55742             var outerEntity = graph.hasEntity(outerMember.id);
55743             if (!outerEntity || !Object.keys(outerEntity.tags).filter(osmIsInterestingTag).length)
55744                 { return false; }
55745
55746             return outerEntity;
55747         }
55748
55749
55750         // Join `toJoin` array into sequences of connecting ways.
55751
55752         // Segments which share identical start/end nodes will, as much as possible,
55753         // be connected with each other.
55754         //
55755         // The return value is a nested array. Each constituent array contains elements
55756         // of `toJoin` which have been determined to connect.
55757         //
55758         // Each consitituent array also has a `nodes` property whose value is an
55759         // ordered array of member nodes, with appropriate order reversal and
55760         // start/end coordinate de-duplication.
55761         //
55762         // Members of `toJoin` must have, at minimum, `type` and `id` properties.
55763         // Thus either an array of `osmWay`s or a relation member array may be used.
55764         //
55765         // If an member is an `osmWay`, its tags and childnodes may be reversed via
55766         // `actionReverse` in the output.
55767         //
55768         // The returned sequences array also has an `actions` array property, containing
55769         // any reversal actions that should be applied to the graph, should the calling
55770         // code attempt to actually join the given ways.
55771         //
55772         // Incomplete members (those for which `graph.hasEntity(element.id)` returns
55773         // false) and non-way members are ignored.
55774         //
55775         function osmJoinWays(toJoin, graph) {
55776             function resolve(member) {
55777                 return graph.childNodes(graph.entity(member.id));
55778             }
55779
55780             function reverse(item) {
55781                 var action = actionReverse(item.id, { reverseOneway: true });
55782                 sequences.actions.push(action);
55783                 return (item instanceof osmWay) ? action(graph).entity(item.id) : item;
55784             }
55785
55786             // make a copy containing only the items to join
55787             toJoin = toJoin.filter(function(member) {
55788                 return member.type === 'way' && graph.hasEntity(member.id);
55789             });
55790
55791             // Are the things we are joining relation members or `osmWays`?
55792             // If `osmWays`, skip the "prefer a forward path" code below (see #4872)
55793             var i;
55794             var joinAsMembers = true;
55795             for (i = 0; i < toJoin.length; i++) {
55796                 if (toJoin[i] instanceof osmWay) {
55797                     joinAsMembers = false;
55798                     break;
55799                 }
55800             }
55801
55802             var sequences = [];
55803             sequences.actions = [];
55804
55805             while (toJoin.length) {
55806                 // start a new sequence
55807                 var item = toJoin.shift();
55808                 var currWays = [item];
55809                 var currNodes = resolve(item).slice();
55810                 var doneSequence = false;
55811
55812                 // add to it
55813                 while (toJoin.length && !doneSequence) {
55814                     var start = currNodes[0];
55815                     var end = currNodes[currNodes.length - 1];
55816                     var fn = null;
55817                     var nodes = null;
55818
55819                     // Find the next way/member to join.
55820                     for (i = 0; i < toJoin.length; i++) {
55821                         item = toJoin[i];
55822                         nodes = resolve(item);
55823
55824                         // (for member ordering only, not way ordering - see #4872)
55825                         // Strongly prefer to generate a forward path that preserves the order
55826                         // of the members array. For multipolygons and most relations, member
55827                         // order does not matter - but for routes, it does. (see #4589)
55828                         // If we started this sequence backwards (i.e. next member way attaches to
55829                         // the start node and not the end node), reverse the initial way before continuing.
55830                         if (joinAsMembers && currWays.length === 1 && nodes[0] !== end && nodes[nodes.length - 1] !== end &&
55831                             (nodes[nodes.length - 1] === start || nodes[0] === start)
55832                         ) {
55833                             currWays[0] = reverse(currWays[0]);
55834                             currNodes.reverse();
55835                             start = currNodes[0];
55836                             end = currNodes[currNodes.length - 1];
55837                         }
55838
55839                         if (nodes[0] === end) {
55840                             fn = currNodes.push;               // join to end
55841                             nodes = nodes.slice(1);
55842                             break;
55843                         } else if (nodes[nodes.length - 1] === end) {
55844                             fn = currNodes.push;               // join to end
55845                             nodes = nodes.slice(0, -1).reverse();
55846                             item = reverse(item);
55847                             break;
55848                         } else if (nodes[nodes.length - 1] === start) {
55849                             fn = currNodes.unshift;            // join to beginning
55850                             nodes = nodes.slice(0, -1);
55851                             break;
55852                         } else if (nodes[0] === start) {
55853                             fn = currNodes.unshift;            // join to beginning
55854                             nodes = nodes.slice(1).reverse();
55855                             item = reverse(item);
55856                             break;
55857                         } else {
55858                             fn = nodes = null;
55859                         }
55860                     }
55861
55862                     if (!nodes) {     // couldn't find a joinable way/member
55863                         doneSequence = true;
55864                         break;
55865                     }
55866
55867                     fn.apply(currWays, [item]);
55868                     fn.apply(currNodes, nodes);
55869
55870                     toJoin.splice(i, 1);
55871                 }
55872
55873                 currWays.nodes = currNodes;
55874                 sequences.push(currWays);
55875             }
55876
55877             return sequences;
55878         }
55879
55880         function actionAddMember(relationId, member, memberIndex, insertPair) {
55881
55882             return function action(graph) {
55883                 var relation = graph.entity(relationId);
55884
55885                 // There are some special rules for Public Transport v2 routes.
55886                 var isPTv2 = /stop|platform/.test(member.role);
55887
55888                 if ((isNaN(memberIndex) || insertPair) && member.type === 'way' && !isPTv2) {
55889                     // Try to perform sensible inserts based on how the ways join together
55890                     graph = addWayMember(relation, graph);
55891                 } else {
55892                     // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
55893                     // Stops and Platforms for PTv2 should be ordered first.
55894                     // hack: We do not currently have the ability to place them in the exactly correct order.
55895                     if (isPTv2 && isNaN(memberIndex)) {
55896                         memberIndex = 0;
55897                     }
55898
55899                     graph = graph.replace(relation.addMember(member, memberIndex));
55900                 }
55901
55902                 return graph;
55903             };
55904
55905
55906             // Add a way member into the relation "wherever it makes sense".
55907             // In this situation we were not supplied a memberIndex.
55908             function addWayMember(relation, graph) {
55909                 var groups, tempWay, item, i, j, k;
55910
55911                 // remove PTv2 stops and platforms before doing anything.
55912                 var PTv2members = [];
55913                 var members = [];
55914                 for (i = 0; i < relation.members.length; i++) {
55915                     var m = relation.members[i];
55916                     if (/stop|platform/.test(m.role)) {
55917                         PTv2members.push(m);
55918                     } else {
55919                         members.push(m);
55920                     }
55921                 }
55922                 relation = relation.update({ members: members });
55923
55924
55925                 if (insertPair) {
55926                     // We're adding a member that must stay paired with an existing member.
55927                     // (This feature is used by `actionSplit`)
55928                     //
55929                     // This is tricky because the members may exist multiple times in the
55930                     // member list, and with different A-B/B-A ordering and different roles.
55931                     // (e.g. a bus route that loops out and back - #4589).
55932                     //
55933                     // Replace the existing member with a temporary way,
55934                     // so that `osmJoinWays` can treat the pair like a single way.
55935                     tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes });
55936                     graph = graph.replace(tempWay);
55937                     var tempMember = { id: tempWay.id, type: 'way', role: member.role };
55938                     var tempRelation = relation.replaceMember({id: insertPair.originalID}, tempMember, true);
55939                     groups = utilArrayGroupBy(tempRelation.members, 'type');
55940                     groups.way = groups.way || [];
55941
55942                 } else {
55943                     // Add the member anywhere, one time. Just push and let `osmJoinWays` decide where to put it.
55944                     groups = utilArrayGroupBy(relation.members, 'type');
55945                     groups.way = groups.way || [];
55946                     groups.way.push(member);
55947                 }
55948
55949                 members = withIndex(groups.way);
55950                 var joined = osmJoinWays(members, graph);
55951
55952                 // `joined` might not contain all of the way members,
55953                 // But will contain only the completed (downloaded) members
55954                 for (i = 0; i < joined.length; i++) {
55955                     var segment = joined[i];
55956                     var nodes = segment.nodes.slice();
55957                     var startIndex = segment[0].index;
55958
55959                     // j = array index in `members` where this segment starts
55960                     for (j = 0; j < members.length; j++) {
55961                         if (members[j].index === startIndex) {
55962                             break;
55963                         }
55964                     }
55965
55966                     // k = each member in segment
55967                     for (k = 0; k < segment.length; k++) {
55968                         item = segment[k];
55969                         var way = graph.entity(item.id);
55970
55971                         // If this is a paired item, generate members in correct order and role
55972                         if (tempWay && item.id === tempWay.id) {
55973                             if (nodes[0].id === insertPair.nodes[0]) {
55974                                 item.pair = [
55975                                     { id: insertPair.originalID, type: 'way', role: item.role },
55976                                     { id: insertPair.insertedID, type: 'way', role: item.role }
55977                                 ];
55978                             } else {
55979                                 item.pair = [
55980                                     { id: insertPair.insertedID, type: 'way', role: item.role },
55981                                     { id: insertPair.originalID, type: 'way', role: item.role }
55982                                 ];
55983                             }
55984                         }
55985
55986                         // reorder `members` if necessary
55987                         if (k > 0) {
55988                             if (j+k >= members.length || item.index !== members[j+k].index) {
55989                                 moveMember(members, item.index, j+k);
55990                             }
55991                         }
55992
55993                         nodes.splice(0, way.nodes.length - 1);
55994                     }
55995                 }
55996
55997                 if (tempWay) {
55998                     graph = graph.remove(tempWay);
55999                 }
56000
56001                 // Final pass: skip dead items, split pairs, remove index properties
56002                 var wayMembers = [];
56003                 for (i = 0; i < members.length; i++) {
56004                     item = members[i];
56005                     if (item.index === -1) { continue; }
56006
56007                     if (item.pair) {
56008                         wayMembers.push(item.pair[0]);
56009                         wayMembers.push(item.pair[1]);
56010                     } else {
56011                         wayMembers.push(utilObjectOmit(item, ['index']));
56012                     }
56013                 }
56014
56015                 // Put stops and platforms first, then nodes, ways, relations
56016                 // This is recommended for Public Transport v2 routes:
56017                 // see https://wiki.openstreetmap.org/wiki/Public_transport#Service_routes
56018                 var newMembers = PTv2members.concat( (groups.node || []), wayMembers, (groups.relation || []) );
56019
56020                 return graph.replace(relation.update({ members: newMembers }));
56021
56022
56023                 // `moveMember()` changes the `members` array in place by splicing
56024                 // the item with `.index = findIndex` to where it belongs,
56025                 // and marking the old position as "dead" with `.index = -1`
56026                 //
56027                 // j=5, k=0                jk
56028                 // segment                 5 4 7 6
56029                 // members       0 1 2 3 4 5 6 7 8 9        keep 5 in j+k
56030                 //
56031                 // j=5, k=1                j k
56032                 // segment                 5 4 7 6
56033                 // members       0 1 2 3 4 5 6 7 8 9        move 4 to j+k
56034                 // members       0 1 2 3 x 5 4 6 7 8 9      moved
56035                 //
56036                 // j=5, k=2                j   k
56037                 // segment                 5 4 7 6
56038                 // members       0 1 2 3 x 5 4 6 7 8 9      move 7 to j+k
56039                 // members       0 1 2 3 x 5 4 7 6 x 8 9    moved
56040                 //
56041                 // j=5, k=3                j     k
56042                 // segment                 5 4 7 6
56043                 // members       0 1 2 3 x 5 4 7 6 x 8 9    keep 6 in j+k
56044                 //
56045                 function moveMember(arr, findIndex, toIndex) {
56046                     for (var i = 0; i < arr.length; i++) {
56047                         if (arr[i].index === findIndex) {
56048                             break;
56049                         }
56050                     }
56051
56052                     var item = Object.assign({}, arr[i]);   // shallow copy
56053                     arr[i].index = -1;   // mark as dead
56054                     item.index = toIndex;
56055                     arr.splice(toIndex, 0, item);
56056                 }
56057
56058
56059                 // This is the same as `Relation.indexedMembers`,
56060                 // Except we don't want to index all the members, only the ways
56061                 function withIndex(arr) {
56062                     var result = new Array(arr.length);
56063                     for (var i = 0; i < arr.length; i++) {
56064                         result[i] = Object.assign({}, arr[i]);   // shallow copy
56065                         result[i].index = i;
56066                     }
56067                     return result;
56068                 }
56069             }
56070
56071         }
56072
56073         function actionAddMidpoint(midpoint, node) {
56074             return function(graph) {
56075                 graph = graph.replace(node.move(midpoint.loc));
56076
56077                 var parents = utilArrayIntersection(
56078                     graph.parentWays(graph.entity(midpoint.edge[0])),
56079                     graph.parentWays(graph.entity(midpoint.edge[1]))
56080                 );
56081
56082                 parents.forEach(function(way) {
56083                     for (var i = 0; i < way.nodes.length - 1; i++) {
56084                         if (geoEdgeEqual([way.nodes[i], way.nodes[i + 1]], midpoint.edge)) {
56085                             graph = graph.replace(graph.entity(way.id).addNode(node.id, i + 1));
56086
56087                             // Add only one midpoint on doubled-back segments,
56088                             // turning them into self-intersections.
56089                             return;
56090                         }
56091                     }
56092                 });
56093
56094                 return graph;
56095             };
56096         }
56097
56098         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/AddNodeToWayAction.as
56099         function actionAddVertex(wayId, nodeId, index) {
56100             return function(graph) {
56101                 return graph.replace(graph.entity(wayId).addNode(nodeId, index));
56102             };
56103         }
56104
56105         function actionChangeMember(relationId, member, memberIndex) {
56106             return function(graph) {
56107                 return graph.replace(graph.entity(relationId).updateMember(member, memberIndex));
56108             };
56109         }
56110
56111         function actionChangePreset(entityID, oldPreset, newPreset, skipFieldDefaults) {
56112             return function action(graph) {
56113                 var entity = graph.entity(entityID);
56114                 var geometry = entity.geometry(graph);
56115                 var tags = entity.tags;
56116
56117                 if (oldPreset) { tags = oldPreset.unsetTags(tags, geometry); }
56118                 if (newPreset) { tags = newPreset.setTags(tags, geometry, skipFieldDefaults); }
56119
56120                 return graph.replace(entity.update({tags: tags}));
56121             };
56122         }
56123
56124         function actionChangeTags(entityId, tags) {
56125             return function(graph) {
56126                 var entity = graph.entity(entityId);
56127                 return graph.replace(entity.update({tags: tags}));
56128             };
56129         }
56130
56131         function osmNode() {
56132             if (!(this instanceof osmNode)) {
56133                 return (new osmNode()).initialize(arguments);
56134             } else if (arguments.length) {
56135                 this.initialize(arguments);
56136             }
56137         }
56138
56139         osmEntity.node = osmNode;
56140
56141         osmNode.prototype = Object.create(osmEntity.prototype);
56142
56143         Object.assign(osmNode.prototype, {
56144             type: 'node',
56145             loc: [9999, 9999],
56146
56147             extent: function() {
56148                 return new geoExtent(this.loc);
56149             },
56150
56151
56152             geometry: function(graph) {
56153                 return graph.transient(this, 'geometry', function() {
56154                     return graph.isPoi(this) ? 'point' : 'vertex';
56155                 });
56156             },
56157
56158
56159             move: function(loc) {
56160                 return this.update({loc: loc});
56161             },
56162
56163
56164             isDegenerate: function() {
56165                 return !(
56166                     Array.isArray(this.loc) && this.loc.length === 2 &&
56167                     this.loc[0] >= -180 && this.loc[0] <= 180 &&
56168                     this.loc[1] >= -90 && this.loc[1] <= 90
56169                 );
56170             },
56171
56172
56173             // Inspect tags and geometry to determine which direction(s) this node/vertex points
56174             directions: function(resolver, projection) {
56175                 var val;
56176                 var i;
56177
56178                 // which tag to use?
56179                 if (this.isHighwayIntersection(resolver) && (this.tags.stop || '').toLowerCase() === 'all') {
56180                     // all-way stop tag on a highway intersection
56181                     val = 'all';
56182                 } else {
56183                     // generic direction tag
56184                     val = (this.tags.direction || '').toLowerCase();
56185
56186                     // better suffix-style direction tag
56187                     var re = /:direction$/i;
56188                     var keys = Object.keys(this.tags);
56189                     for (i = 0; i < keys.length; i++) {
56190                         if (re.test(keys[i])) {
56191                             val = this.tags[keys[i]].toLowerCase();
56192                             break;
56193                         }
56194                     }
56195                 }
56196
56197                 if (val === '') { return []; }
56198
56199                 var cardinal = {
56200                     north: 0,               n: 0,
56201                     northnortheast: 22,     nne: 22,
56202                     northeast: 45,          ne: 45,
56203                     eastnortheast: 67,      ene: 67,
56204                     east: 90,               e: 90,
56205                     eastsoutheast: 112,     ese: 112,
56206                     southeast: 135,         se: 135,
56207                     southsoutheast: 157,    sse: 157,
56208                     south: 180,             s: 180,
56209                     southsouthwest: 202,    ssw: 202,
56210                     southwest: 225,         sw: 225,
56211                     westsouthwest: 247,     wsw: 247,
56212                     west: 270,              w: 270,
56213                     westnorthwest: 292,     wnw: 292,
56214                     northwest: 315,         nw: 315,
56215                     northnorthwest: 337,    nnw: 337
56216                 };
56217
56218
56219                 var values = val.split(';');
56220                 var results = [];
56221
56222                 values.forEach(function(v) {
56223                     // swap cardinal for numeric directions
56224                     if (cardinal[v] !== undefined) {
56225                         v = cardinal[v];
56226                     }
56227
56228                     // numeric direction - just add to results
56229                     if (v !== '' && !isNaN(+v)) {
56230                         results.push(+v);
56231                         return;
56232                     }
56233
56234                     // string direction - inspect parent ways
56235                     var lookBackward =
56236                         (this.tags['traffic_sign:backward'] || v === 'backward' || v === 'both' || v === 'all');
56237                     var lookForward =
56238                         (this.tags['traffic_sign:forward'] || v === 'forward' || v === 'both' || v === 'all');
56239
56240                     if (!lookForward && !lookBackward) { return; }
56241
56242                     var nodeIds = {};
56243                     resolver.parentWays(this).forEach(function(parent) {
56244                         var nodes = parent.nodes;
56245                         for (i = 0; i < nodes.length; i++) {
56246                             if (nodes[i] === this.id) {  // match current entity
56247                                 if (lookForward && i > 0) {
56248                                     nodeIds[nodes[i - 1]] = true;  // look back to prev node
56249                                 }
56250                                 if (lookBackward && i < nodes.length - 1) {
56251                                     nodeIds[nodes[i + 1]] = true;  // look ahead to next node
56252                                 }
56253                             }
56254                         }
56255                     }, this);
56256
56257                     Object.keys(nodeIds).forEach(function(nodeId) {
56258                         // +90 because geoAngle returns angle from X axis, not Y (north)
56259                         results.push(
56260                             (geoAngle(this, resolver.entity(nodeId), projection) * (180 / Math.PI)) + 90
56261                         );
56262                     }, this);
56263
56264                 }, this);
56265
56266                 return utilArrayUniq(results);
56267             },
56268
56269
56270             isEndpoint: function(resolver) {
56271                 return resolver.transient(this, 'isEndpoint', function() {
56272                     var id = this.id;
56273                     return resolver.parentWays(this).filter(function(parent) {
56274                         return !parent.isClosed() && !!parent.affix(id);
56275                     }).length > 0;
56276                 });
56277             },
56278
56279
56280             isConnected: function(resolver) {
56281                 return resolver.transient(this, 'isConnected', function() {
56282                     var parents = resolver.parentWays(this);
56283
56284                     function isLine(entity) {
56285                         return entity.geometry(resolver) === 'line' &&
56286                             entity.hasInterestingTags();
56287                     }
56288
56289                     // vertex is connected to multiple parent lines
56290                     if (parents.length > 1 && parents.some(isLine)) {
56291                         return true;
56292
56293                     } else if (parents.length === 1) {
56294                         var way = parents[0];
56295                         var nodes = way.nodes.slice();
56296                         if (way.isClosed()) { nodes.pop(); }  // ignore connecting node if closed
56297
56298                         // return true if vertex appears multiple times (way is self intersecting)
56299                         return nodes.indexOf(this.id) !== nodes.lastIndexOf(this.id);
56300                     }
56301
56302                     return false;
56303                 });
56304             },
56305
56306
56307             parentIntersectionWays: function(resolver) {
56308                 return resolver.transient(this, 'parentIntersectionWays', function() {
56309                     return resolver.parentWays(this).filter(function(parent) {
56310                         return (parent.tags.highway ||
56311                             parent.tags.waterway ||
56312                             parent.tags.railway ||
56313                             parent.tags.aeroway) &&
56314                             parent.geometry(resolver) === 'line';
56315                     });
56316                 });
56317             },
56318
56319
56320             isIntersection: function(resolver) {
56321                 return this.parentIntersectionWays(resolver).length > 1;
56322             },
56323
56324
56325             isHighwayIntersection: function(resolver) {
56326                 return resolver.transient(this, 'isHighwayIntersection', function() {
56327                     return resolver.parentWays(this).filter(function(parent) {
56328                         return parent.tags.highway && parent.geometry(resolver) === 'line';
56329                     }).length > 1;
56330                 });
56331             },
56332
56333
56334             isOnAddressLine: function(resolver) {
56335                 return resolver.transient(this, 'isOnAddressLine', function() {
56336                     return resolver.parentWays(this).filter(function(parent) {
56337                         return parent.tags.hasOwnProperty('addr:interpolation') &&
56338                             parent.geometry(resolver) === 'line';
56339                     }).length > 0;
56340                 });
56341             },
56342
56343
56344             asJXON: function(changeset_id) {
56345                 var r = {
56346                     node: {
56347                         '@id': this.osmId(),
56348                         '@lon': this.loc[0],
56349                         '@lat': this.loc[1],
56350                         '@version': (this.version || 0),
56351                         tag: Object.keys(this.tags).map(function(k) {
56352                             return { keyAttributes: { k: k, v: this.tags[k] } };
56353                         }, this)
56354                     }
56355                 };
56356                 if (changeset_id) { r.node['@changeset'] = changeset_id; }
56357                 return r;
56358             },
56359
56360
56361             asGeoJSON: function() {
56362                 return {
56363                     type: 'Point',
56364                     coordinates: this.loc
56365                 };
56366             }
56367         });
56368
56369         function actionCircularize(wayId, projection, maxAngle) {
56370             maxAngle = (maxAngle || 20) * Math.PI / 180;
56371
56372
56373             var action = function(graph, t) {
56374                 if (t === null || !isFinite(t)) { t = 1; }
56375                 t = Math.min(Math.max(+t, 0), 1);
56376
56377                 var way = graph.entity(wayId);
56378                 var origNodes = {};
56379
56380                 graph.childNodes(way).forEach(function(node) {
56381                     if (!origNodes[node.id]) { origNodes[node.id] = node; }
56382                 });
56383
56384                 if (!way.isConvex(graph)) {
56385                     graph = action.makeConvex(graph);
56386                 }
56387
56388                 var nodes = utilArrayUniq(graph.childNodes(way));
56389                 var keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; });
56390                 var points = nodes.map(function(n) { return projection(n.loc); });
56391                 var keyPoints = keyNodes.map(function(n) { return projection(n.loc); });
56392                 var centroid = (points.length === 2) ? geoVecInterp(points[0], points[1], 0.5) : d3_polygonCentroid(points);
56393                 var radius = d3_median(points, function(p) { return geoVecLength(centroid, p); });
56394                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
56395                 var ids, i, j, k;
56396
56397                 // we need atleast two key nodes for the algorithm to work
56398                 if (!keyNodes.length) {
56399                     keyNodes = [nodes[0]];
56400                     keyPoints = [points[0]];
56401                 }
56402
56403                 if (keyNodes.length === 1) {
56404                     var index = nodes.indexOf(keyNodes[0]);
56405                     var oppositeIndex = Math.floor((index + nodes.length / 2) % nodes.length);
56406
56407                     keyNodes.push(nodes[oppositeIndex]);
56408                     keyPoints.push(points[oppositeIndex]);
56409                 }
56410
56411                 // key points and nodes are those connected to the ways,
56412                 // they are projected onto the circle, inbetween nodes are moved
56413                 // to constant intervals between key nodes, extra inbetween nodes are
56414                 // added if necessary.
56415                 for (i = 0; i < keyPoints.length; i++) {
56416                     var nextKeyNodeIndex = (i + 1) % keyNodes.length;
56417                     var startNode = keyNodes[i];
56418                     var endNode = keyNodes[nextKeyNodeIndex];
56419                     var startNodeIndex = nodes.indexOf(startNode);
56420                     var endNodeIndex = nodes.indexOf(endNode);
56421                     var numberNewPoints = -1;
56422                     var indexRange = endNodeIndex - startNodeIndex;
56423                     var nearNodes = {};
56424                     var inBetweenNodes = [];
56425                     var startAngle, endAngle, totalAngle, eachAngle;
56426                     var angle, loc, node, origNode;
56427
56428                     if (indexRange < 0) {
56429                         indexRange += nodes.length;
56430                     }
56431
56432                     // position this key node
56433                     var distance = geoVecLength(centroid, keyPoints[i]) || 1e-4;
56434                     keyPoints[i] = [
56435                         centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
56436                         centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
56437                     ];
56438                     loc = projection.invert(keyPoints[i]);
56439                     node = keyNodes[i];
56440                     origNode = origNodes[node.id];
56441                     node = node.move(geoVecInterp(origNode.loc, loc, t));
56442                     graph = graph.replace(node);
56443
56444                     // figure out the between delta angle we want to match to
56445                     startAngle = Math.atan2(keyPoints[i][1] - centroid[1], keyPoints[i][0] - centroid[0]);
56446                     endAngle = Math.atan2(keyPoints[nextKeyNodeIndex][1] - centroid[1], keyPoints[nextKeyNodeIndex][0] - centroid[0]);
56447                     totalAngle = endAngle - startAngle;
56448
56449                     // detects looping around -pi/pi
56450                     if (totalAngle * sign > 0) {
56451                         totalAngle = -sign * (2 * Math.PI - Math.abs(totalAngle));
56452                     }
56453
56454                     do {
56455                         numberNewPoints++;
56456                         eachAngle = totalAngle / (indexRange + numberNewPoints);
56457                     } while (Math.abs(eachAngle) > maxAngle);
56458
56459
56460                     // move existing nodes
56461                     for (j = 1; j < indexRange; j++) {
56462                         angle = startAngle + j * eachAngle;
56463                         loc = projection.invert([
56464                             centroid[0] + Math.cos(angle) * radius,
56465                             centroid[1] + Math.sin(angle) * radius
56466                         ]);
56467
56468                         node = nodes[(j + startNodeIndex) % nodes.length];
56469                         origNode = origNodes[node.id];
56470                         nearNodes[node.id] = angle;
56471
56472                         node = node.move(geoVecInterp(origNode.loc, loc, t));
56473                         graph = graph.replace(node);
56474                     }
56475
56476                     // add new inbetween nodes if necessary
56477                     for (j = 0; j < numberNewPoints; j++) {
56478                         angle = startAngle + (indexRange + j) * eachAngle;
56479                         loc = projection.invert([
56480                             centroid[0] + Math.cos(angle) * radius,
56481                             centroid[1] + Math.sin(angle) * radius
56482                         ]);
56483
56484                         // choose a nearnode to use as the original
56485                         var min = Infinity;
56486                         for (var nodeId in nearNodes) {
56487                             var nearAngle = nearNodes[nodeId];
56488                             var dist = Math.abs(nearAngle - angle);
56489                             if (dist < min) {
56490                                 dist = min;
56491                                 origNode = origNodes[nodeId];
56492                             }
56493                         }
56494
56495                         node = osmNode({ loc: geoVecInterp(origNode.loc, loc, t) });
56496                         graph = graph.replace(node);
56497
56498                         nodes.splice(endNodeIndex + j, 0, node);
56499                         inBetweenNodes.push(node.id);
56500                     }
56501
56502                     // Check for other ways that share these keyNodes..
56503                     // If keyNodes are adjacent in both ways,
56504                     // we can add inBetween nodes to that shared way too..
56505                     if (indexRange === 1 && inBetweenNodes.length) {
56506                         var startIndex1 = way.nodes.lastIndexOf(startNode.id);
56507                         var endIndex1 = way.nodes.lastIndexOf(endNode.id);
56508                         var wayDirection1 = (endIndex1 - startIndex1);
56509                         if (wayDirection1 < -1) { wayDirection1 = 1; }
56510
56511                         var parentWays = graph.parentWays(keyNodes[i]);
56512                         for (j = 0; j < parentWays.length; j++) {
56513                             var sharedWay = parentWays[j];
56514                             if (sharedWay === way) { continue; }
56515
56516                             if (sharedWay.areAdjacent(startNode.id, endNode.id)) {
56517                                 var startIndex2 = sharedWay.nodes.lastIndexOf(startNode.id);
56518                                 var endIndex2 = sharedWay.nodes.lastIndexOf(endNode.id);
56519                                 var wayDirection2 = (endIndex2 - startIndex2);
56520                                 var insertAt = endIndex2;
56521                                 if (wayDirection2 < -1) { wayDirection2 = 1; }
56522
56523                                 if (wayDirection1 !== wayDirection2) {
56524                                     inBetweenNodes.reverse();
56525                                     insertAt = startIndex2;
56526                                 }
56527                                 for (k = 0; k < inBetweenNodes.length; k++) {
56528                                     sharedWay = sharedWay.addNode(inBetweenNodes[k], insertAt + k);
56529                                 }
56530                                 graph = graph.replace(sharedWay);
56531                             }
56532                         }
56533                     }
56534
56535                 }
56536
56537                 // update the way to have all the new nodes
56538                 ids = nodes.map(function(n) { return n.id; });
56539                 ids.push(ids[0]);
56540
56541                 way = way.update({nodes: ids});
56542                 graph = graph.replace(way);
56543
56544                 return graph;
56545             };
56546
56547
56548             action.makeConvex = function(graph) {
56549                 var way = graph.entity(wayId);
56550                 var nodes = utilArrayUniq(graph.childNodes(way));
56551                 var points = nodes.map(function(n) { return projection(n.loc); });
56552                 var sign = d3_polygonArea(points) > 0 ? 1 : -1;
56553                 var hull = d3_polygonHull(points);
56554                 var i, j;
56555
56556                 // D3 convex hulls go counterclockwise..
56557                 if (sign === -1) {
56558                     nodes.reverse();
56559                     points.reverse();
56560                 }
56561
56562                 for (i = 0; i < hull.length - 1; i++) {
56563                     var startIndex = points.indexOf(hull[i]);
56564                     var endIndex = points.indexOf(hull[i+1]);
56565                     var indexRange = (endIndex - startIndex);
56566
56567                     if (indexRange < 0) {
56568                         indexRange += nodes.length;
56569                     }
56570
56571                     // move interior nodes to the surface of the convex hull..
56572                     for (j = 1; j < indexRange; j++) {
56573                         var point = geoVecInterp(hull[i], hull[i+1], j / indexRange);
56574                         var node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
56575                         graph = graph.replace(node);
56576                     }
56577                 }
56578                 return graph;
56579             };
56580
56581
56582             action.disabled = function(graph) {
56583                 if (!graph.entity(wayId).isClosed()) {
56584                     return 'not_closed';
56585                 }
56586
56587                 //disable when already circular
56588                 var way = graph.entity(wayId);
56589                 var nodes = utilArrayUniq(graph.childNodes(way));
56590                 var points = nodes.map(function(n) { return projection(n.loc); });
56591                 var hull = d3_polygonHull(points);
56592                 var epsilonAngle =  Math.PI / 180;
56593                 if (hull.length !== points.length || hull.length < 3){
56594                     return false;
56595                 }
56596                 var centroid = d3_polygonCentroid(points);
56597                 var radius = geoVecLengthSquare(centroid, points[0]);
56598
56599                 // compare distances between centroid and points
56600                 for (var i = 0; i<hull.length; i++){
56601                     var actualPoint = hull[i];
56602                     var actualDist = geoVecLengthSquare(actualPoint, centroid);
56603                     var diff = Math.abs(actualDist - radius);
56604                     //compare distances with epsilon-error (5%)
56605                     if (diff > 0.05*radius) {
56606                         return false;
56607                     }
56608                 }
56609                 
56610                 //check if central angles are smaller than maxAngle
56611                 for (i = 0; i<hull.length; i++){
56612                     actualPoint = hull[i];
56613                     var nextPoint = hull[(i+1)%hull.length];
56614                     var startAngle = Math.atan2(actualPoint[1] - centroid[1], actualPoint[0] - centroid[0]);
56615                     var endAngle = Math.atan2(nextPoint[1] - centroid[1], nextPoint[0] - centroid[0]);
56616                     var angle = endAngle - startAngle;
56617                     if (angle < 0) {
56618                         angle = -angle;
56619                     }
56620                     if (angle > Math.PI){
56621                         angle = (2*Math.PI - angle);
56622                     }
56623          
56624                     if (angle > maxAngle + epsilonAngle) {
56625                         return false;
56626                     }
56627                 }
56628                 return 'already_circular';
56629             };
56630
56631
56632             action.transitionable = true;
56633
56634
56635             return action;
56636         }
56637
56638         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteWayAction.as
56639         function actionDeleteWay(wayID) {
56640
56641             function canDeleteNode(node, graph) {
56642                 // don't delete nodes still attached to ways or relations
56643                 if (graph.parentWays(node).length ||
56644                     graph.parentRelations(node).length) { return false; }
56645
56646                 var geometries = osmNodeGeometriesForTags(node.tags);
56647                 // don't delete if this node can be a standalone point
56648                 if (geometries.point) { return false; }
56649                 // delete if this node only be a vertex
56650                 if (geometries.vertex) { return true; }
56651
56652                 // iD doesn't know if this should be a point or vertex,
56653                 // so only delete if there are no interesting tags
56654                 return !node.hasInterestingTags();
56655             }
56656
56657
56658             var action = function(graph) {
56659                 var way = graph.entity(wayID);
56660
56661                 graph.parentRelations(way).forEach(function(parent) {
56662                     parent = parent.removeMembersWithID(wayID);
56663                     graph = graph.replace(parent);
56664
56665                     if (parent.isDegenerate()) {
56666                         graph = actionDeleteRelation(parent.id)(graph);
56667                     }
56668                 });
56669
56670                 (new Set(way.nodes)).forEach(function(nodeID) {
56671                     graph = graph.replace(way.removeNode(nodeID));
56672
56673                     var node = graph.entity(nodeID);
56674                     if (canDeleteNode(node, graph)) {
56675                         graph = graph.remove(node);
56676                     }
56677                 });
56678
56679                 return graph.remove(way);
56680             };
56681
56682
56683             return action;
56684         }
56685
56686         function actionDeleteMultiple(ids) {
56687             var actions = {
56688                 way: actionDeleteWay,
56689                 node: actionDeleteNode,
56690                 relation: actionDeleteRelation
56691             };
56692
56693
56694             var action = function(graph) {
56695                 ids.forEach(function(id) {
56696                     if (graph.hasEntity(id)) { // It may have been deleted aready.
56697                         graph = actions[graph.entity(id).type](id)(graph);
56698                     }
56699                 });
56700
56701                 return graph;
56702             };
56703
56704
56705             return action;
56706         }
56707
56708         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
56709         function actionDeleteRelation(relationID, allowUntaggedMembers) {
56710
56711             function canDeleteEntity(entity, graph) {
56712                 return !graph.parentWays(entity).length &&
56713                     !graph.parentRelations(entity).length &&
56714                     (!entity.hasInterestingTags() && !allowUntaggedMembers);
56715             }
56716
56717
56718             var action = function(graph) {
56719                 var relation = graph.entity(relationID);
56720
56721                 graph.parentRelations(relation)
56722                     .forEach(function(parent) {
56723                         parent = parent.removeMembersWithID(relationID);
56724                         graph = graph.replace(parent);
56725
56726                         if (parent.isDegenerate()) {
56727                             graph = actionDeleteRelation(parent.id)(graph);
56728                         }
56729                     });
56730
56731                 var memberIDs = utilArrayUniq(relation.members.map(function(m) { return m.id; }));
56732                 memberIDs.forEach(function(memberID) {
56733                     graph = graph.replace(relation.removeMembersWithID(memberID));
56734
56735                     var entity = graph.entity(memberID);
56736                     if (canDeleteEntity(entity, graph)) {
56737                         graph = actionDeleteMultiple([memberID])(graph);
56738                     }
56739                 });
56740
56741                 return graph.remove(relation);
56742             };
56743
56744
56745             return action;
56746         }
56747
56748         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteNodeAction.as
56749         function actionDeleteNode(nodeId) {
56750             var action = function(graph) {
56751                 var node = graph.entity(nodeId);
56752
56753                 graph.parentWays(node)
56754                     .forEach(function(parent) {
56755                         parent = parent.removeNode(nodeId);
56756                         graph = graph.replace(parent);
56757
56758                         if (parent.isDegenerate()) {
56759                             graph = actionDeleteWay(parent.id)(graph);
56760                         }
56761                     });
56762
56763                 graph.parentRelations(node)
56764                     .forEach(function(parent) {
56765                         parent = parent.removeMembersWithID(nodeId);
56766                         graph = graph.replace(parent);
56767
56768                         if (parent.isDegenerate()) {
56769                             graph = actionDeleteRelation(parent.id)(graph);
56770                         }
56771                     });
56772
56773                 return graph.remove(node);
56774             };
56775
56776
56777             return action;
56778         }
56779
56780         // Connect the ways at the given nodes.
56781         //
56782         // First choose a node to be the survivor, with preference given
56783         // to an existing (not new) node.
56784         //
56785         // Tags and relation memberships of of non-surviving nodes are merged
56786         // to the survivor.
56787         //
56788         // This is the inverse of `iD.actionDisconnect`.
56789         //
56790         // Reference:
56791         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeNodesAction.as
56792         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/MergeNodesAction.java
56793         //
56794         function actionConnect(nodeIDs) {
56795             var action = function(graph) {
56796                 var survivor;
56797                 var node;
56798                 var parents;
56799                 var i, j;
56800
56801                 // Choose a survivor node, prefer an existing (not new) node - #4974
56802                 for (i = 0; i < nodeIDs.length; i++) {
56803                     survivor = graph.entity(nodeIDs[i]);
56804                     if (survivor.version) { break; }  // found one
56805                 }
56806
56807                 // Replace all non-surviving nodes with the survivor and merge tags.
56808                 for (i = 0; i < nodeIDs.length; i++) {
56809                     node = graph.entity(nodeIDs[i]);
56810                     if (node.id === survivor.id) { continue; }
56811
56812                     parents = graph.parentWays(node);
56813                     for (j = 0; j < parents.length; j++) {
56814                         if (!parents[j].areAdjacent(node.id, survivor.id)) {
56815                             graph = graph.replace(parents[j].replaceNode(node.id, survivor.id));
56816                         }
56817                     }
56818
56819                     parents = graph.parentRelations(node);
56820                     for (j = 0; j < parents.length; j++) {
56821                         graph = graph.replace(parents[j].replaceMember(node, survivor));
56822                     }
56823
56824                     survivor = survivor.mergeTags(node.tags);
56825                     graph = actionDeleteNode(node.id)(graph);
56826                 }
56827
56828                 graph = graph.replace(survivor);
56829
56830                 return graph;
56831             };
56832
56833
56834             action.disabled = function(graph) {
56835                 var seen = {};
56836                 var restrictionIDs = [];
56837                 var survivor;
56838                 var node, way;
56839                 var relations, relation, role;
56840                 var i, j, k;
56841
56842                 // Choose a survivor node, prefer an existing (not new) node - #4974
56843                 for (i = 0; i < nodeIDs.length; i++) {
56844                     survivor = graph.entity(nodeIDs[i]);
56845                     if (survivor.version) { break; }  // found one
56846                 }
56847
56848                 // 1. disable if the nodes being connected have conflicting relation roles
56849                 for (i = 0; i < nodeIDs.length; i++) {
56850                     node = graph.entity(nodeIDs[i]);
56851                     relations = graph.parentRelations(node);
56852
56853                     for (j = 0; j < relations.length; j++) {
56854                         relation = relations[j];
56855                         role = relation.memberById(node.id).role || '';
56856
56857                         // if this node is a via node in a restriction, remember for later
56858                         if (relation.hasFromViaTo()) {
56859                             restrictionIDs.push(relation.id);
56860                         }
56861
56862                         if (seen[relation.id] !== undefined && seen[relation.id] !== role) {
56863                             return 'relation';
56864                         } else {
56865                             seen[relation.id] = role;
56866                         }
56867                     }
56868                 }
56869
56870                 // gather restrictions for parent ways
56871                 for (i = 0; i < nodeIDs.length; i++) {
56872                     node = graph.entity(nodeIDs[i]);
56873
56874                     var parents = graph.parentWays(node);
56875                     for (j = 0; j < parents.length; j++) {
56876                         var parent = parents[j];
56877                         relations = graph.parentRelations(parent);
56878
56879                         for (k = 0; k < relations.length; k++) {
56880                             relation = relations[k];
56881                             if (relation.hasFromViaTo()) {
56882                                 restrictionIDs.push(relation.id);
56883                             }
56884                         }
56885                     }
56886                 }
56887
56888
56889                 // test restrictions
56890                 restrictionIDs = utilArrayUniq(restrictionIDs);
56891                 for (i = 0; i < restrictionIDs.length; i++) {
56892                     relation = graph.entity(restrictionIDs[i]);
56893                     if (!relation.isComplete(graph)) { continue; }
56894
56895                     var memberWays = relation.members
56896                         .filter(function(m) { return m.type === 'way'; })
56897                         .map(function(m) { return graph.entity(m.id); });
56898
56899                     memberWays = utilArrayUniq(memberWays);
56900                     var f = relation.memberByRole('from');
56901                     var t = relation.memberByRole('to');
56902                     var isUturn = (f.id === t.id);
56903
56904                     // 2a. disable if connection would damage a restriction
56905                     // (a key node is a node at the junction of ways)
56906                     var nodes = { from: [], via: [], to: [], keyfrom: [], keyto: [] };
56907                     for (j = 0; j < relation.members.length; j++) {
56908                         collectNodes(relation.members[j], nodes);
56909                     }
56910
56911                     nodes.keyfrom = utilArrayUniq(nodes.keyfrom.filter(hasDuplicates));
56912                     nodes.keyto = utilArrayUniq(nodes.keyto.filter(hasDuplicates));
56913
56914                     var filter = keyNodeFilter(nodes.keyfrom, nodes.keyto);
56915                     nodes.from = nodes.from.filter(filter);
56916                     nodes.via = nodes.via.filter(filter);
56917                     nodes.to = nodes.to.filter(filter);
56918
56919                     var connectFrom = false;
56920                     var connectVia = false;
56921                     var connectTo = false;
56922                     var connectKeyFrom = false;
56923                     var connectKeyTo = false;
56924
56925                     for (j = 0; j < nodeIDs.length; j++) {
56926                         var n = nodeIDs[j];
56927                         if (nodes.from.indexOf(n) !== -1)    { connectFrom = true; }
56928                         if (nodes.via.indexOf(n) !== -1)     { connectVia = true; }
56929                         if (nodes.to.indexOf(n) !== -1)      { connectTo = true; }
56930                         if (nodes.keyfrom.indexOf(n) !== -1) { connectKeyFrom = true; }
56931                         if (nodes.keyto.indexOf(n) !== -1)   { connectKeyTo = true; }
56932                     }
56933                     if (connectFrom && connectTo && !isUturn) { return 'restriction'; }
56934                     if (connectFrom && connectVia) { return 'restriction'; }
56935                     if (connectTo   && connectVia) { return 'restriction'; }
56936
56937                     // connecting to a key node -
56938                     // if both nodes are on a member way (i.e. part of the turn restriction),
56939                     // the connecting node must be adjacent to the key node.
56940                     if (connectKeyFrom || connectKeyTo) {
56941                         if (nodeIDs.length !== 2) { return 'restriction'; }
56942
56943                         var n0 = null;
56944                         var n1 = null;
56945                         for (j = 0; j < memberWays.length; j++) {
56946                             way = memberWays[j];
56947                             if (way.contains(nodeIDs[0])) { n0 = nodeIDs[0]; }
56948                             if (way.contains(nodeIDs[1])) { n1 = nodeIDs[1]; }
56949                         }
56950
56951                         if (n0 && n1) {    // both nodes are part of the restriction
56952                             var ok = false;
56953                             for (j = 0; j < memberWays.length; j++) {
56954                                 way = memberWays[j];
56955                                 if (way.areAdjacent(n0, n1)) {
56956                                     ok = true;
56957                                     break;
56958                                 }
56959                             }
56960                             if (!ok) {
56961                                 return 'restriction';
56962                             }
56963                         }
56964                     }
56965
56966                     // 2b. disable if nodes being connected will destroy a member way in a restriction
56967                     // (to test, make a copy and try actually connecting the nodes)
56968                     for (j = 0; j < memberWays.length; j++) {
56969                         way = memberWays[j].update({});   // make copy
56970                         for (k = 0; k < nodeIDs.length; k++) {
56971                             if (nodeIDs[k] === survivor.id) { continue; }
56972
56973                             if (way.areAdjacent(nodeIDs[k], survivor.id)) {
56974                                 way = way.removeNode(nodeIDs[k]);
56975                             } else {
56976                                 way = way.replaceNode(nodeIDs[k], survivor.id);
56977                             }
56978                         }
56979                         if (way.isDegenerate()) {
56980                             return 'restriction';
56981                         }
56982                     }
56983                 }
56984
56985                 return false;
56986
56987
56988                 // if a key node appears multiple times (indexOf !== lastIndexOf) it's a FROM-VIA or TO-VIA junction
56989                 function hasDuplicates(n, i, arr) {
56990                     return arr.indexOf(n) !== arr.lastIndexOf(n);
56991                 }
56992
56993                 function keyNodeFilter(froms, tos) {
56994                     return function(n) {
56995                         return froms.indexOf(n) === -1 && tos.indexOf(n) === -1;
56996                     };
56997                 }
56998
56999                 function collectNodes(member, collection) {
57000                     var entity = graph.hasEntity(member.id);
57001                     if (!entity) { return; }
57002
57003                     var role = member.role || '';
57004                     if (!collection[role]) {
57005                         collection[role] = [];
57006                     }
57007
57008                     if (member.type === 'node') {
57009                         collection[role].push(member.id);
57010                         if (role === 'via') {
57011                             collection.keyfrom.push(member.id);
57012                             collection.keyto.push(member.id);
57013                         }
57014
57015                     } else if (member.type === 'way') {
57016                         collection[role].push.apply(collection[role], entity.nodes);
57017                         if (role === 'from' || role === 'via') {
57018                             collection.keyfrom.push(entity.first());
57019                             collection.keyfrom.push(entity.last());
57020                         }
57021                         if (role === 'to' || role === 'via') {
57022                             collection.keyto.push(entity.first());
57023                             collection.keyto.push(entity.last());
57024                         }
57025                     }
57026                 }
57027             };
57028
57029
57030             return action;
57031         }
57032
57033         function actionCopyEntities(ids, fromGraph) {
57034             var _copies = {};
57035
57036
57037             var action = function(graph) {
57038                 ids.forEach(function(id) {
57039                     fromGraph.entity(id).copy(fromGraph, _copies);
57040                 });
57041
57042                 for (var id in _copies) {
57043                     graph = graph.replace(_copies[id]);
57044                 }
57045
57046                 return graph;
57047             };
57048
57049
57050             action.copies = function() {
57051                 return _copies;
57052             };
57053
57054
57055             return action;
57056         }
57057
57058         function actionDeleteMember(relationId, memberIndex) {
57059             return function(graph) {
57060                 var relation = graph.entity(relationId)
57061                     .removeMember(memberIndex);
57062
57063                 graph = graph.replace(relation);
57064
57065                 if (relation.isDegenerate())
57066                     { graph = actionDeleteRelation(relation.id)(graph); }
57067
57068                 return graph;
57069             };
57070         }
57071
57072         function actionDiscardTags(difference) {
57073
57074             return function(graph) {
57075                 function discardTags(entity) {
57076                     var tags = {};
57077                     var keys = Object.keys(entity.tags);
57078                     var discarded = false;
57079
57080                     for (var i = 0; i < keys.length; i++) {
57081                         var k = keys[i];
57082                         if (dataDiscarded[k] || !entity.tags[k]) {
57083                             discarded = true;
57084                         } else {
57085                             tags[k] = entity.tags[k];
57086                         }
57087                     }
57088
57089                     if (discarded) {
57090                         graph = graph.replace(entity.update({ tags: tags }));
57091                     }
57092                 }
57093
57094                 difference.modified().forEach(discardTags);
57095                 difference.created().forEach(discardTags);
57096
57097                 return graph;
57098             };
57099         }
57100
57101         // Disconect the ways at the given node.
57102         //
57103         // Optionally, disconnect only the given ways.
57104         //
57105         // For testing convenience, accepts an ID to assign to the (first) new node.
57106         // Normally, this will be undefined and the way will automatically
57107         // be assigned a new ID.
57108         //
57109         // This is the inverse of `iD.actionConnect`.
57110         //
57111         // Reference:
57112         //   https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/UnjoinNodeAction.as
57113         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/UnGlueAction.java
57114         //
57115         function actionDisconnect(nodeId, newNodeId) {
57116             var wayIds;
57117
57118
57119             var action = function(graph) {
57120                 var node = graph.entity(nodeId);
57121                 var connections = action.connections(graph);
57122
57123                 connections.forEach(function(connection) {
57124                     var way = graph.entity(connection.wayID);
57125                     var newNode = osmNode({id: newNodeId, loc: node.loc, tags: node.tags});
57126
57127                     graph = graph.replace(newNode);
57128                     if (connection.index === 0 && way.isArea()) {
57129                         // replace shared node with shared node..
57130                         graph = graph.replace(way.replaceNode(way.nodes[0], newNode.id));
57131                     } else if (way.isClosed() && connection.index === way.nodes.length - 1) {
57132                         // replace closing node with new new node..
57133                         graph = graph.replace(way.unclose().addNode(newNode.id));
57134                     } else {
57135                         // replace shared node with multiple new nodes..
57136                         graph = graph.replace(way.updateNode(newNode.id, connection.index));
57137                     }
57138                 });
57139
57140                 return graph;
57141             };
57142
57143
57144             action.connections = function(graph) {
57145                 var candidates = [];
57146                 var keeping = false;
57147                 var parentWays = graph.parentWays(graph.entity(nodeId));
57148
57149                 parentWays.forEach(function(way) {
57150                     if (wayIds && wayIds.indexOf(way.id) === -1) {
57151                         keeping = true;
57152                         return;
57153                     }
57154                     if (way.isArea() && (way.nodes[0] === nodeId)) {
57155                         candidates.push({ wayID: way.id, index: 0 });
57156                     } else {
57157                         way.nodes.forEach(function(waynode, index) {
57158                             if (waynode === nodeId) {
57159                                 if (way.isClosed() && parentWays.length > 1 && wayIds && wayIds.indexOf(way.id) !== -1 && index === way.nodes.length-1) {
57160                                     return;
57161                                 }
57162                                 candidates.push({ wayID: way.id, index: index });
57163                             }
57164                         });
57165                     }
57166                 });
57167
57168                 return keeping ? candidates : candidates.slice(1);
57169             };
57170
57171
57172             action.disabled = function(graph) {
57173                 var connections = action.connections(graph);
57174                 if (connections.length === 0)
57175                     { return 'not_connected'; }
57176
57177                 var parentWays = graph.parentWays(graph.entity(nodeId));
57178                 var seenRelationIds = {};
57179                 var sharedRelation;
57180
57181                 parentWays.forEach(function(way) {
57182                     var relations = graph.parentRelations(way);
57183                     relations.forEach(function(relation) {
57184                         if (relation.id in seenRelationIds) {
57185                             if (wayIds) {
57186                                 if (wayIds.indexOf(way.id) !== -1 ||
57187                                     wayIds.indexOf(seenRelationIds[relation.id]) !== -1) {
57188                                     sharedRelation = relation;
57189                                 }
57190                             } else {
57191                                 sharedRelation = relation;
57192                             }
57193                         } else {
57194                             seenRelationIds[relation.id] = way.id;
57195                         }
57196                     });
57197                 });
57198
57199                 if (sharedRelation)
57200                     { return 'relation'; }
57201             };
57202
57203
57204             action.limitWays = function(val) {
57205                 if (!arguments.length) { return wayIds; }
57206                 wayIds = val;
57207                 return action;
57208             };
57209
57210
57211             return action;
57212         }
57213
57214         function actionExtract(entityID, projection) {
57215
57216             var extractedNodeID;
57217
57218             var action = function(graph) {
57219                 var entity = graph.entity(entityID);
57220
57221                 if (entity.type === 'node') {
57222                     return extractFromNode(entity, graph);
57223                 }
57224
57225                 return extractFromArea(entity, graph);
57226             };
57227
57228             function extractFromNode(node, graph) {
57229
57230                 extractedNodeID = node.id;
57231
57232                 // Create a new node to replace the one we will detach
57233                 var replacement = osmNode({ loc: node.loc });
57234                 graph = graph.replace(replacement);
57235
57236                 // Process each way in turn, updating the graph as we go
57237                 graph = graph.parentWays(node)
57238                     .reduce(function(accGraph, parentWay) {
57239                         return accGraph.replace(parentWay.replaceNode(entityID, replacement.id));
57240                     }, graph);
57241
57242                 // Process any relations too
57243                 return graph.parentRelations(node)
57244                     .reduce(function(accGraph, parentRel) {
57245                         return accGraph.replace(parentRel.replaceMember(node, replacement));
57246                     }, graph);
57247             }
57248
57249             function extractFromArea(entity, graph) {
57250
57251                 var keysToCopyAndRetain = ['source', 'wheelchair'];
57252                 var keysToRetain = ['area', 'type'];
57253                 var buildingKeysToRetain = ['architect', 'building', 'height', 'layer'];
57254
57255                 var centroid = d3_geoPath(projection).centroid(entity.asGeoJSON(graph, true));
57256
57257                 var isBuilding = entity.tags.building;
57258
57259                 var areaTags = Object.assign({}, entity.tags);  // shallow copy
57260                 var pointTags = {};
57261                 for (var key in areaTags) {
57262
57263                     if (keysToRetain.indexOf(key) !== -1) {
57264                         continue;
57265                     }
57266
57267                     if (isBuilding) {
57268                         // don't transfer building-related tags
57269                         if (buildingKeysToRetain.indexOf(key) !== -1 ||
57270                             key.match(/^building:.{1,}/) ||
57271                             key.match(/^roof:.{1,}/)) { continue; }
57272                     }
57273
57274                     // copy the tag from the area to the point
57275                     pointTags[key] = areaTags[key];
57276
57277                     // leave addresses and some other tags so they're on both features
57278                     if (keysToCopyAndRetain.indexOf(key) !== -1 || key.match(/^addr:.{1,}/)) {
57279                         continue;
57280                     }
57281
57282                     // remove the tag from the area
57283                     delete areaTags[key];
57284                 }
57285
57286                 if (!isBuilding) {
57287                     // ensure that the area keeps the area geometry
57288                     areaTags.area = 'yes';
57289                 }
57290
57291                 var replacement = osmNode({ loc: centroid, tags: pointTags });
57292                 graph = graph.replace(replacement);
57293
57294                 extractedNodeID = replacement.id;
57295
57296                 return graph.replace(entity.update({tags: areaTags}));
57297             }
57298
57299             action.getExtractedNodeID = function() {
57300                 return extractedNodeID;
57301             };
57302
57303             action.disabled = function(graph) {
57304                 var entity = graph.entity(entityID);
57305
57306                 if (entity.type === 'node') {
57307                     var parentRels = graph.parentRelations(entity);
57308                     for (var i = 0; i < parentRels.length; i++) {
57309                         var relation = parentRels[i];
57310                         if (!relation.hasFromViaTo()) { continue; }
57311
57312                         for (var j = 0; j < relation.members.length; j++) {
57313                             var m = relation.members[j];
57314                             if (m.id === entityID && (m.role === 'via' || m.role === 'location_hint')) {
57315                                 return 'restriction';
57316                             }
57317                         }
57318                     }
57319                 }
57320
57321                 return false;
57322             };
57323
57324
57325             return action;
57326         }
57327
57328         // Join ways at the end node they share.
57329         //
57330         // This is the inverse of `iD.actionSplit`.
57331         //
57332         // Reference:
57333         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MergeWaysAction.as
57334         //   https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/actions/CombineWayAction.java
57335         //
57336         function actionJoin(ids) {
57337
57338             function groupEntitiesByGeometry(graph) {
57339                 var entities = ids.map(function(id) { return graph.entity(id); });
57340                 return Object.assign(
57341                     { line: [] },
57342                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
57343                 );
57344             }
57345
57346
57347             var action = function(graph) {
57348                 var ways = ids.map(graph.entity, graph);
57349                 var survivorID = ways[0].id;
57350
57351                 // if any of the ways are sided (e.g. coastline, cliff, kerb)
57352                 // sort them first so they establish the overall order - #6033
57353                 ways.sort(function(a, b) {
57354                     var aSided = a.isSided();
57355                     var bSided = b.isSided();
57356                     return (aSided && !bSided) ? -1
57357                         : (bSided && !aSided) ? 1
57358                         : 0;
57359                 });
57360
57361                 // Prefer to keep an existing way.
57362                 for (var i = 0; i < ways.length; i++) {
57363                     if (!ways[i].isNew()) {
57364                         survivorID = ways[i].id;
57365                         break;
57366                     }
57367                 }
57368
57369                 var sequences = osmJoinWays(ways, graph);
57370                 var joined = sequences[0];
57371
57372                 // We might need to reverse some of these ways before joining them.  #4688
57373                 // `joined.actions` property will contain any actions we need to apply.
57374                 graph = sequences.actions.reduce(function(g, action) { return action(g); }, graph);
57375
57376                 var survivor = graph.entity(survivorID);
57377                 survivor = survivor.update({ nodes: joined.nodes.map(function(n) { return n.id; }) });
57378                 graph = graph.replace(survivor);
57379
57380                 joined.forEach(function(way) {
57381                     if (way.id === survivorID) { return; }
57382
57383                     graph.parentRelations(way).forEach(function(parent) {
57384                         graph = graph.replace(parent.replaceMember(way, survivor));
57385                     });
57386
57387                     survivor = survivor.mergeTags(way.tags);
57388
57389                     graph = graph.replace(survivor);
57390                     graph = actionDeleteWay(way.id)(graph);
57391                 });
57392
57393                 // Finds if the join created a single-member multipolygon,
57394                 // and if so turns it into a basic area instead
57395                 function checkForSimpleMultipolygon() {
57396                     if (!survivor.isClosed()) { return; }
57397
57398                     var multipolygons = graph.parentMultipolygons(survivor).filter(function(multipolygon) {
57399                         // find multipolygons where the survivor is the only member
57400                         return multipolygon.members.length === 1;
57401                     });
57402
57403                     // skip if this is the single member of multiple multipolygons
57404                     if (multipolygons.length !== 1) { return; }
57405
57406                     var multipolygon = multipolygons[0];
57407
57408                     for (var key in survivor.tags) {
57409                         if (multipolygon.tags[key] &&
57410                             // don't collapse if tags cannot be cleanly merged
57411                             multipolygon.tags[key] !== survivor.tags[key]) { return; }
57412                     }
57413
57414                     survivor = survivor.mergeTags(multipolygon.tags);
57415                     graph = graph.replace(survivor);
57416                     graph = actionDeleteRelation(multipolygon.id, true /* allow untagged members */)(graph);
57417
57418                     var tags = Object.assign({}, survivor.tags);
57419                     if (survivor.geometry(graph) !== 'area') {
57420                         // ensure the feature persists as an area
57421                         tags.area = 'yes';
57422                     }
57423                     delete tags.type; // remove type=multipolygon
57424                     survivor = survivor.update({ tags: tags });
57425                     graph = graph.replace(survivor);
57426                 }
57427                 checkForSimpleMultipolygon();
57428
57429                 return graph;
57430             };
57431
57432
57433             action.disabled = function(graph) {
57434                 var geometries = groupEntitiesByGeometry(graph);
57435                 if (ids.length < 2 || ids.length !== geometries.line.length) {
57436                     return 'not_eligible';
57437                 }
57438
57439                 var joined = osmJoinWays(ids.map(graph.entity, graph), graph);
57440                 if (joined.length > 1) {
57441                     return 'not_adjacent';
57442                 }
57443
57444                 // Loop through all combinations of path-pairs
57445                 // to check potential intersections between all pairs
57446                 for (var i = 0; i < ids.length - 1; i++) {
57447                     for (var j = i + 1; j < ids.length; j++) {
57448                         var path1 = graph.childNodes(graph.entity(ids[i]))
57449                             .map(function(e) { return e.loc; });
57450                         var path2 = graph.childNodes(graph.entity(ids[j]))
57451                             .map(function(e) { return e.loc; });
57452                         var intersections = geoPathIntersections(path1, path2);
57453
57454                         // Check if intersections are just nodes lying on top of
57455                         // each other/the line, as opposed to crossing it
57456                         var common = utilArrayIntersection(
57457                             joined[0].nodes.map(function(n) { return n.loc.toString(); }),
57458                             intersections.map(function(n) { return n.toString(); })
57459                         );
57460                         if (common.length !== intersections.length) {
57461                             return 'paths_intersect';
57462                         }
57463                     }
57464                 }
57465
57466                 var nodeIds = joined[0].nodes.map(function(n) { return n.id; }).slice(1, -1);
57467                 var relation;
57468                 var tags = {};
57469                 var conflicting = false;
57470
57471                 joined[0].forEach(function(way) {
57472                     var parents = graph.parentRelations(way);
57473                     parents.forEach(function(parent) {
57474                         if (parent.isRestriction() && parent.members.some(function(m) { return nodeIds.indexOf(m.id) >= 0; })) {
57475                             relation = parent;
57476                         }
57477                     });
57478
57479                     for (var k in way.tags) {
57480                         if (!(k in tags)) {
57481                             tags[k] = way.tags[k];
57482                         } else if (tags[k] && osmIsInterestingTag(k) && tags[k] !== way.tags[k]) {
57483                             conflicting = true;
57484                         }
57485                     }
57486                 });
57487
57488                 if (relation) {
57489                     return 'restriction';
57490                 }
57491
57492                 if (conflicting) {
57493                     return 'conflicting_tags';
57494                 }
57495             };
57496
57497
57498             return action;
57499         }
57500
57501         function actionMerge(ids) {
57502
57503             function groupEntitiesByGeometry(graph) {
57504                 var entities = ids.map(function(id) { return graph.entity(id); });
57505                 return Object.assign(
57506                     { point: [], area: [], line: [], relation: [] },
57507                     utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
57508                 );
57509             }
57510
57511
57512             var action = function(graph) {
57513                 var geometries = groupEntitiesByGeometry(graph);
57514                 var target = geometries.area[0] || geometries.line[0];
57515                 var points = geometries.point;
57516
57517                 points.forEach(function(point) {
57518                     target = target.mergeTags(point.tags);
57519                     graph = graph.replace(target);
57520
57521                     graph.parentRelations(point).forEach(function(parent) {
57522                         graph = graph.replace(parent.replaceMember(point, target));
57523                     });
57524
57525                     var nodes = utilArrayUniq(graph.childNodes(target));
57526                     var removeNode = point;
57527
57528                     for (var i = 0; i < nodes.length; i++) {
57529                         var node = nodes[i];
57530                         if (graph.parentWays(node).length > 1 ||
57531                             graph.parentRelations(node).length ||
57532                             node.hasInterestingTags()) {
57533                             continue;
57534                         }
57535
57536                         // Found an uninteresting child node on the target way.
57537                         // Move orig point into its place to preserve point's history. #3683
57538                         graph = graph.replace(point.update({ tags: {}, loc: node.loc }));
57539                         target = target.replaceNode(node.id, point.id);
57540                         graph = graph.replace(target);
57541                         removeNode = node;
57542                         break;
57543                     }
57544
57545                     graph = graph.remove(removeNode);
57546                 });
57547
57548                 return graph;
57549             };
57550
57551
57552             action.disabled = function(graph) {
57553                 var geometries = groupEntitiesByGeometry(graph);
57554                 if (geometries.point.length === 0 ||
57555                     (geometries.area.length + geometries.line.length) !== 1 ||
57556                     geometries.relation.length !== 0) {
57557                     return 'not_eligible';
57558                 }
57559             };
57560
57561
57562             return action;
57563         }
57564
57565         // `actionMergeNodes` is just a combination of:
57566         //
57567         // 1. move all the nodes to a common location
57568         // 2. `actionConnect` them
57569
57570         function actionMergeNodes(nodeIDs, loc) {
57571
57572             // If there is a single "interesting" node, use that as the location.
57573             // Otherwise return the average location of all the nodes.
57574             function chooseLoc(graph) {
57575                 if (!nodeIDs.length) { return null; }
57576                 var sum = [0,0];
57577                 var interestingCount = 0;
57578                 var interestingLoc;
57579
57580                 for (var i = 0; i < nodeIDs.length; i++) {
57581                     var node = graph.entity(nodeIDs[i]);
57582                     if (node.hasInterestingTags()) {
57583                         interestingLoc = (++interestingCount === 1) ? node.loc : null;
57584                     }
57585                     sum = geoVecAdd(sum, node.loc);
57586                 }
57587
57588                 return interestingLoc || geoVecScale(sum, 1 / nodeIDs.length);
57589             }
57590
57591
57592             var action = function(graph) {
57593                 if (nodeIDs.length < 2) { return graph; }
57594                 var toLoc = loc;
57595                 if (!toLoc) {
57596                     toLoc = chooseLoc(graph);
57597                 }
57598
57599                 for (var i = 0; i < nodeIDs.length; i++) {
57600                     var node = graph.entity(nodeIDs[i]);
57601                     if (node.loc !== toLoc) {
57602                         graph = graph.replace(node.move(toLoc));
57603                     }
57604                 }
57605
57606                 return actionConnect(nodeIDs)(graph);
57607             };
57608
57609
57610             action.disabled = function(graph) {
57611                 if (nodeIDs.length < 2) { return 'not_eligible'; }
57612
57613                 for (var i = 0; i < nodeIDs.length; i++) {
57614                     var entity = graph.entity(nodeIDs[i]);
57615                     if (entity.type !== 'node') { return 'not_eligible'; }
57616                 }
57617
57618                 return actionConnect(nodeIDs).disabled(graph);
57619             };
57620
57621             return action;
57622         }
57623
57624         function osmChangeset() {
57625             if (!(this instanceof osmChangeset)) {
57626                 return (new osmChangeset()).initialize(arguments);
57627             } else if (arguments.length) {
57628                 this.initialize(arguments);
57629             }
57630         }
57631
57632
57633         osmEntity.changeset = osmChangeset;
57634
57635         osmChangeset.prototype = Object.create(osmEntity.prototype);
57636
57637         Object.assign(osmChangeset.prototype, {
57638
57639             type: 'changeset',
57640
57641
57642             extent: function() {
57643                 return new geoExtent();
57644             },
57645
57646
57647             geometry: function() {
57648                 return 'changeset';
57649             },
57650
57651
57652             asJXON: function() {
57653                 return {
57654                     osm: {
57655                         changeset: {
57656                             tag: Object.keys(this.tags).map(function(k) {
57657                                 return { '@k': k, '@v': this.tags[k] };
57658                             }, this),
57659                             '@version': 0.6,
57660                             '@generator': 'iD'
57661                         }
57662                     }
57663                 };
57664             },
57665
57666
57667             // Generate [osmChange](http://wiki.openstreetmap.org/wiki/OsmChange)
57668             // XML. Returns a string.
57669             osmChangeJXON: function(changes) {
57670                 var changeset_id = this.id;
57671
57672                 function nest(x, order) {
57673                     var groups = {};
57674                     for (var i = 0; i < x.length; i++) {
57675                         var tagName = Object.keys(x[i])[0];
57676                         if (!groups[tagName]) { groups[tagName] = []; }
57677                         groups[tagName].push(x[i][tagName]);
57678                     }
57679                     var ordered = {};
57680                     order.forEach(function(o) {
57681                         if (groups[o]) { ordered[o] = groups[o]; }
57682                     });
57683                     return ordered;
57684                 }
57685
57686
57687                 // sort relations in a changeset by dependencies
57688                 function sort(changes) {
57689
57690                     // find a referenced relation in the current changeset
57691                     function resolve(item) {
57692                         return relations.find(function(relation) {
57693                             return item.keyAttributes.type === 'relation'
57694                                 && item.keyAttributes.ref === relation['@id'];
57695                         });
57696                     }
57697
57698                     // a new item is an item that has not been already processed
57699                     function isNew(item) {
57700                         return !sorted[ item['@id'] ] && !processing.find(function(proc) {
57701                             return proc['@id'] === item['@id'];
57702                         });
57703                     }
57704
57705                     var processing = [];
57706                     var sorted = {};
57707                     var relations = changes.relation;
57708
57709                     if (!relations) { return changes; }
57710
57711                     for (var i = 0; i < relations.length; i++) {
57712                         var relation = relations[i];
57713
57714                         // skip relation if already sorted
57715                         if (!sorted[relation['@id']]) {
57716                             processing.push(relation);
57717                         }
57718
57719                         while (processing.length > 0) {
57720                             var next = processing[0],
57721                             deps = next.member.map(resolve).filter(Boolean).filter(isNew);
57722                             if (deps.length === 0) {
57723                                 sorted[next['@id']] = next;
57724                                 processing.shift();
57725                             } else {
57726                                 processing = deps.concat(processing);
57727                             }
57728                         }
57729                     }
57730
57731                     changes.relation = Object.values(sorted);
57732                     return changes;
57733                 }
57734
57735                 function rep(entity) {
57736                     return entity.asJXON(changeset_id);
57737                 }
57738
57739                 return {
57740                     osmChange: {
57741                         '@version': 0.6,
57742                         '@generator': 'iD',
57743                         'create': sort(nest(changes.created.map(rep), ['node', 'way', 'relation'])),
57744                         'modify': nest(changes.modified.map(rep), ['node', 'way', 'relation']),
57745                         'delete': Object.assign(nest(changes.deleted.map(rep), ['relation', 'way', 'node']), { '@if-unused': true })
57746                     }
57747                 };
57748             },
57749
57750
57751             asGeoJSON: function() {
57752                 return {};
57753             }
57754
57755         });
57756
57757         function osmNote() {
57758             if (!(this instanceof osmNote)) {
57759                 return (new osmNote()).initialize(arguments);
57760             } else if (arguments.length) {
57761                 this.initialize(arguments);
57762             }
57763         }
57764
57765
57766         osmNote.id = function() {
57767             return osmNote.id.next--;
57768         };
57769
57770
57771         osmNote.id.next = -1;
57772
57773
57774         Object.assign(osmNote.prototype, {
57775
57776             type: 'note',
57777
57778             initialize: function(sources) {
57779                 for (var i = 0; i < sources.length; ++i) {
57780                     var source = sources[i];
57781                     for (var prop in source) {
57782                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
57783                             if (source[prop] === undefined) {
57784                                 delete this[prop];
57785                             } else {
57786                                 this[prop] = source[prop];
57787                             }
57788                         }
57789                     }
57790                 }
57791
57792                 if (!this.id) {
57793                     this.id = osmNote.id() + '';  // as string
57794                 }
57795
57796                 return this;
57797             },
57798
57799             extent: function() {
57800                 return new geoExtent(this.loc);
57801             },
57802
57803             update: function(attrs) {
57804                 return osmNote(this, attrs); // {v: 1 + (this.v || 0)}
57805             },
57806
57807             isNew: function() {
57808                 return this.id < 0;
57809             },
57810
57811             move: function(loc) {
57812                 return this.update({ loc: loc });
57813             }
57814
57815         });
57816
57817         function osmRelation() {
57818             if (!(this instanceof osmRelation)) {
57819                 return (new osmRelation()).initialize(arguments);
57820             } else if (arguments.length) {
57821                 this.initialize(arguments);
57822             }
57823         }
57824
57825
57826         osmEntity.relation = osmRelation;
57827
57828         osmRelation.prototype = Object.create(osmEntity.prototype);
57829
57830
57831         osmRelation.creationOrder = function(a, b) {
57832             var aId = parseInt(osmEntity.id.toOSM(a.id), 10);
57833             var bId = parseInt(osmEntity.id.toOSM(b.id), 10);
57834
57835             if (aId < 0 || bId < 0) { return aId - bId; }
57836             return bId - aId;
57837         };
57838
57839
57840         Object.assign(osmRelation.prototype, {
57841             type: 'relation',
57842             members: [],
57843
57844
57845             copy: function(resolver, copies) {
57846                 if (copies[this.id]) { return copies[this.id]; }
57847
57848                 var copy = osmEntity.prototype.copy.call(this, resolver, copies);
57849
57850                 var members = this.members.map(function(member) {
57851                     return Object.assign({}, member, { id: resolver.entity(member.id).copy(resolver, copies).id });
57852                 });
57853
57854                 copy = copy.update({members: members});
57855                 copies[this.id] = copy;
57856
57857                 return copy;
57858             },
57859
57860
57861             extent: function(resolver, memo) {
57862                 return resolver.transient(this, 'extent', function() {
57863                     if (memo && memo[this.id]) { return geoExtent(); }
57864                     memo = memo || {};
57865                     memo[this.id] = true;
57866
57867                     var extent = geoExtent();
57868                     for (var i = 0; i < this.members.length; i++) {
57869                         var member = resolver.hasEntity(this.members[i].id);
57870                         if (member) {
57871                             extent._extend(member.extent(resolver, memo));
57872                         }
57873                     }
57874                     return extent;
57875                 });
57876             },
57877
57878
57879             geometry: function(graph) {
57880                 return graph.transient(this, 'geometry', function() {
57881                     return this.isMultipolygon() ? 'area' : 'relation';
57882                 });
57883             },
57884
57885
57886             isDegenerate: function() {
57887                 return this.members.length === 0;
57888             },
57889
57890
57891             // Return an array of members, each extended with an 'index' property whose value
57892             // is the member index.
57893             indexedMembers: function() {
57894                 var result = new Array(this.members.length);
57895                 for (var i = 0; i < this.members.length; i++) {
57896                     result[i] = Object.assign({}, this.members[i], {index: i});
57897                 }
57898                 return result;
57899             },
57900
57901
57902             // Return the first member with the given role. A copy of the member object
57903             // is returned, extended with an 'index' property whose value is the member index.
57904             memberByRole: function(role) {
57905                 for (var i = 0; i < this.members.length; i++) {
57906                     if (this.members[i].role === role) {
57907                         return Object.assign({}, this.members[i], {index: i});
57908                     }
57909                 }
57910             },
57911
57912             // Same as memberByRole, but returns all members with the given role
57913             membersByRole: function(role) {
57914                 var result = [];
57915                 for (var i = 0; i < this.members.length; i++) {
57916                     if (this.members[i].role === role) {
57917                         result.push(Object.assign({}, this.members[i], {index: i}));
57918                     }
57919                 }
57920                 return result;
57921             },
57922
57923             // Return the first member with the given id. A copy of the member object
57924             // is returned, extended with an 'index' property whose value is the member index.
57925             memberById: function(id) {
57926                 for (var i = 0; i < this.members.length; i++) {
57927                     if (this.members[i].id === id) {
57928                         return Object.assign({}, this.members[i], {index: i});
57929                     }
57930                 }
57931             },
57932
57933
57934             // Return the first member with the given id and role. A copy of the member object
57935             // is returned, extended with an 'index' property whose value is the member index.
57936             memberByIdAndRole: function(id, role) {
57937                 for (var i = 0; i < this.members.length; i++) {
57938                     if (this.members[i].id === id && this.members[i].role === role) {
57939                         return Object.assign({}, this.members[i], {index: i});
57940                     }
57941                 }
57942             },
57943
57944
57945             addMember: function(member, index) {
57946                 var members = this.members.slice();
57947                 members.splice(index === undefined ? members.length : index, 0, member);
57948                 return this.update({members: members});
57949             },
57950
57951
57952             updateMember: function(member, index) {
57953                 var members = this.members.slice();
57954                 members.splice(index, 1, Object.assign({}, members[index], member));
57955                 return this.update({members: members});
57956             },
57957
57958
57959             removeMember: function(index) {
57960                 var members = this.members.slice();
57961                 members.splice(index, 1);
57962                 return this.update({members: members});
57963             },
57964
57965
57966             removeMembersWithID: function(id) {
57967                 var members = this.members.filter(function(m) { return m.id !== id; });
57968                 return this.update({members: members});
57969             },
57970
57971             moveMember: function(fromIndex, toIndex) {
57972                 var members = this.members.slice();
57973                 members.splice(toIndex, 0, members.splice(fromIndex, 1)[0]);
57974                 return this.update({members: members});
57975             },
57976
57977
57978             // Wherever a member appears with id `needle.id`, replace it with a member
57979             // with id `replacement.id`, type `replacement.type`, and the original role,
57980             // By default, adding a duplicate member (by id and role) is prevented.
57981             // Return an updated relation.
57982             replaceMember: function(needle, replacement, keepDuplicates) {
57983                 if (!this.memberById(needle.id)) { return this; }
57984
57985                 var members = [];
57986
57987                 for (var i = 0; i < this.members.length; i++) {
57988                     var member = this.members[i];
57989                     if (member.id !== needle.id) {
57990                         members.push(member);
57991                     } else if (keepDuplicates || !this.memberByIdAndRole(replacement.id, member.role)) {
57992                         members.push({ id: replacement.id, type: replacement.type, role: member.role });
57993                     }
57994                 }
57995
57996                 return this.update({ members: members });
57997             },
57998
57999
58000             asJXON: function(changeset_id) {
58001                 var r = {
58002                     relation: {
58003                         '@id': this.osmId(),
58004                         '@version': this.version || 0,
58005                         member: this.members.map(function(member) {
58006                             return {
58007                                 keyAttributes: {
58008                                     type: member.type,
58009                                     role: member.role,
58010                                     ref: osmEntity.id.toOSM(member.id)
58011                                 }
58012                             };
58013                         }, this),
58014                         tag: Object.keys(this.tags).map(function(k) {
58015                             return { keyAttributes: { k: k, v: this.tags[k] } };
58016                         }, this)
58017                     }
58018                 };
58019                 if (changeset_id) {
58020                     r.relation['@changeset'] = changeset_id;
58021                 }
58022                 return r;
58023             },
58024
58025
58026             asGeoJSON: function(resolver) {
58027                 return resolver.transient(this, 'GeoJSON', function () {
58028                     if (this.isMultipolygon()) {
58029                         return {
58030                             type: 'MultiPolygon',
58031                             coordinates: this.multipolygon(resolver)
58032                         };
58033                     } else {
58034                         return {
58035                             type: 'FeatureCollection',
58036                             properties: this.tags,
58037                             features: this.members.map(function (member) {
58038                                 return Object.assign({role: member.role}, resolver.entity(member.id).asGeoJSON(resolver));
58039                             })
58040                         };
58041                     }
58042                 });
58043             },
58044
58045
58046             area: function(resolver) {
58047                 return resolver.transient(this, 'area', function() {
58048                     return d3_geoArea(this.asGeoJSON(resolver));
58049                 });
58050             },
58051
58052
58053             isMultipolygon: function() {
58054                 return this.tags.type === 'multipolygon';
58055             },
58056
58057
58058             isComplete: function(resolver) {
58059                 for (var i = 0; i < this.members.length; i++) {
58060                     if (!resolver.hasEntity(this.members[i].id)) {
58061                         return false;
58062                     }
58063                 }
58064                 return true;
58065             },
58066
58067
58068             hasFromViaTo: function() {
58069                 return (
58070                     this.members.some(function(m) { return m.role === 'from'; }) &&
58071                     this.members.some(function(m) { return m.role === 'via'; }) &&
58072                     this.members.some(function(m) { return m.role === 'to'; })
58073                 );
58074             },
58075
58076
58077             isRestriction: function() {
58078                 return !!(this.tags.type && this.tags.type.match(/^restriction:?/));
58079             },
58080
58081
58082             isValidRestriction: function() {
58083                 if (!this.isRestriction()) { return false; }
58084
58085                 var froms = this.members.filter(function(m) { return m.role === 'from'; });
58086                 var vias = this.members.filter(function(m) { return m.role === 'via'; });
58087                 var tos = this.members.filter(function(m) { return m.role === 'to'; });
58088
58089                 if (froms.length !== 1 && this.tags.restriction !== 'no_entry') { return false; }
58090                 if (froms.some(function(m) { return m.type !== 'way'; })) { return false; }
58091
58092                 if (tos.length !== 1 && this.tags.restriction !== 'no_exit') { return false; }
58093                 if (tos.some(function(m) { return m.type !== 'way'; })) { return false; }
58094
58095                 if (vias.length === 0) { return false; }
58096                 if (vias.length > 1 && vias.some(function(m) { return m.type !== 'way'; })) { return false; }
58097
58098                 return true;
58099             },
58100
58101
58102             // Returns an array [A0, ... An], each Ai being an array of node arrays [Nds0, ... Ndsm],
58103             // where Nds0 is an outer ring and subsequent Ndsi's (if any i > 0) being inner rings.
58104             //
58105             // This corresponds to the structure needed for rendering a multipolygon path using a
58106             // `evenodd` fill rule, as well as the structure of a GeoJSON MultiPolygon geometry.
58107             //
58108             // In the case of invalid geometries, this function will still return a result which
58109             // includes the nodes of all way members, but some Nds may be unclosed and some inner
58110             // rings not matched with the intended outer ring.
58111             //
58112             multipolygon: function(resolver) {
58113                 var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); });
58114                 var inners = this.members.filter(function(m) { return 'inner' === m.role; });
58115
58116                 outers = osmJoinWays(outers, resolver);
58117                 inners = osmJoinWays(inners, resolver);
58118
58119                 var sequenceToLineString = function(sequence) {
58120                     if (sequence.nodes.length > 2 &&
58121                         sequence.nodes[0] !== sequence.nodes[sequence.nodes.length - 1]) {
58122                         // close unclosed parts to ensure correct area rendering - #2945
58123                         sequence.nodes.push(sequence.nodes[0]);
58124                     }
58125                     return sequence.nodes.map(function(node) { return node.loc; });
58126                 };
58127
58128                 outers = outers.map(sequenceToLineString);
58129                 inners = inners.map(sequenceToLineString);
58130
58131                 var result = outers.map(function(o) {
58132                     // Heuristic for detecting counterclockwise winding order. Assumes
58133                     // that OpenStreetMap polygons are not hemisphere-spanning.
58134                     return [d3_geoArea({ type: 'Polygon', coordinates: [o] }) > 2 * Math.PI ? o.reverse() : o];
58135                 });
58136
58137                 function findOuter(inner) {
58138                     var o, outer;
58139
58140                     for (o = 0; o < outers.length; o++) {
58141                         outer = outers[o];
58142                         if (geoPolygonContainsPolygon(outer, inner))
58143                             { return o; }
58144                     }
58145
58146                     for (o = 0; o < outers.length; o++) {
58147                         outer = outers[o];
58148                         if (geoPolygonIntersectsPolygon(outer, inner, false))
58149                             { return o; }
58150                     }
58151                 }
58152
58153                 for (var i = 0; i < inners.length; i++) {
58154                     var inner = inners[i];
58155
58156                     if (d3_geoArea({ type: 'Polygon', coordinates: [inner] }) < 2 * Math.PI) {
58157                         inner = inner.reverse();
58158                     }
58159
58160                     var o = findOuter(inners[i]);
58161                     if (o !== undefined) {
58162                         result[o].push(inners[i]);
58163                     } else {
58164                         result.push([inners[i]]); // Invalid geometry
58165                     }
58166                 }
58167
58168                 return result;
58169             }
58170         });
58171
58172         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:{}}};
58173
58174         function qaError() {
58175             if (!(this instanceof qaError)) {
58176                 return (new qaError()).initialize(arguments);
58177             } else if (arguments.length) {
58178                 this.initialize(arguments);
58179             }
58180         }
58181
58182         // Generic handling for services without nice IDs
58183         qaError.id = function() {
58184             return qaError.id.next--;
58185         };
58186
58187         qaError.id.next = -1;
58188
58189         Object.assign(qaError.prototype, {
58190             type: 'qaError',
58191
58192             // All errors need a position
58193             loc: [0, 0],
58194
58195             // These should be passed in, used to retrieve from qa_errors.json
58196             service: '',
58197             error_type: '',
58198
58199             initialize: function(sources) {
58200                 for (var i = 0; i < sources.length; ++i) {
58201                     var source = sources[i];
58202                     for (var prop in source) {
58203                         if (Object.prototype.hasOwnProperty.call(source, prop)) {
58204                             if (source[prop] === undefined) {
58205                                 delete this[prop];
58206                             } else {
58207                                 this[prop] = source[prop];
58208                             }
58209                         }
58210                     }
58211                 }
58212
58213                 // Extract common error information from data
58214                 if (this.service && this.error_type) {
58215                     var serviceInfo = services[this.service];
58216
58217                     if (serviceInfo) {
58218                         var errInfo = serviceInfo.errorTypes[this.error_type];
58219
58220                         if (errInfo) {
58221                             this.icon = errInfo.icon;
58222                             this.category = errInfo.category;
58223                         }
58224                     }
58225                 }
58226
58227                 // All errors must have an ID for selection
58228                 if (!this.id) {
58229                     this.id = qaError.id() + '';  // as string
58230                 }
58231
58232                 return this;
58233             },
58234
58235             update: function(attrs) {
58236                 return qaError(this, attrs); // {v: 1 + (this.v || 0)}
58237             }
58238         });
58239
58240         // Split a way at the given node.
58241         //
58242         // Optionally, split only the given ways, if multiple ways share
58243         // the given node.
58244         //
58245         // This is the inverse of `iD.actionJoin`.
58246         //
58247         // For testing convenience, accepts an ID to assign to the new way.
58248         // Normally, this will be undefined and the way will automatically
58249         // be assigned a new ID.
58250         //
58251         // Reference:
58252         //   https://github.com/systemed/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/SplitWayAction.as
58253         //
58254         function actionSplit(nodeId, newWayIds) {
58255             var _wayIDs;
58256
58257             // The IDs of the ways actually created by running this action
58258             var createdWayIDs = [];
58259
58260             // If the way is closed, we need to search for a partner node
58261             // to split the way at.
58262             //
58263             // The following looks for a node that is both far away from
58264             // the initial node in terms of way segment length and nearby
58265             // in terms of beeline-distance. This assures that areas get
58266             // split on the most "natural" points (independent of the number
58267             // of nodes).
58268             // For example: bone-shaped areas get split across their waist
58269             // line, circles across the diameter.
58270             function splitArea(nodes, idxA, graph) {
58271                 var lengths = new Array(nodes.length);
58272                 var length;
58273                 var i;
58274                 var best = 0;
58275                 var idxB;
58276
58277                 function wrap(index) {
58278                     return utilWrap(index, nodes.length);
58279                 }
58280
58281                 function dist(nA, nB) {
58282                     var locA = graph.entity(nA).loc;
58283                     var locB = graph.entity(nB).loc;
58284                     var epsilon = 1e-6;
58285                     return (locA && locB) ? geoSphericalDistance(locA, locB) : epsilon;
58286                 }
58287
58288                 // calculate lengths
58289                 length = 0;
58290                 for (i = wrap(idxA + 1); i !== idxA; i = wrap(i + 1)) {
58291                     length += dist(nodes[i], nodes[wrap(i - 1)]);
58292                     lengths[i] = length;
58293                 }
58294
58295                 length = 0;
58296                 for (i = wrap(idxA - 1); i !== idxA; i = wrap(i - 1)) {
58297                     length += dist(nodes[i], nodes[wrap(i + 1)]);
58298                     if (length < lengths[i]) {
58299                         lengths[i] = length;
58300                     }
58301                 }
58302
58303                 // determine best opposite node to split
58304                 for (i = 0; i < nodes.length; i++) {
58305                     var cost = lengths[i] / dist(nodes[idxA], nodes[i]);
58306                     if (cost > best) {
58307                         idxB = i;
58308                         best = cost;
58309                     }
58310                 }
58311
58312                 return idxB;
58313             }
58314
58315
58316             function split(graph, wayA, newWayId) {
58317                 var wayB = osmWay({ id: newWayId, tags: wayA.tags });   // `wayB` is the NEW way
58318                 var origNodes = wayA.nodes.slice();
58319                 var nodesA;
58320                 var nodesB;
58321                 var isArea = wayA.isArea();
58322                 var isOuter = osmIsOldMultipolygonOuterMember(wayA, graph);
58323
58324                 if (wayA.isClosed()) {
58325                     var nodes = wayA.nodes.slice(0, -1);
58326                     var idxA = nodes.indexOf(nodeId);
58327                     var idxB = splitArea(nodes, idxA, graph);
58328
58329                     if (idxB < idxA) {
58330                         nodesA = nodes.slice(idxA).concat(nodes.slice(0, idxB + 1));
58331                         nodesB = nodes.slice(idxB, idxA + 1);
58332                     } else {
58333                         nodesA = nodes.slice(idxA, idxB + 1);
58334                         nodesB = nodes.slice(idxB).concat(nodes.slice(0, idxA + 1));
58335                     }
58336                 } else {
58337                     var idx = wayA.nodes.indexOf(nodeId, 1);
58338                     nodesA = wayA.nodes.slice(0, idx + 1);
58339                     nodesB = wayA.nodes.slice(idx);
58340                 }
58341
58342                 wayA = wayA.update({ nodes: nodesA });
58343                 wayB = wayB.update({ nodes: nodesB });
58344
58345                 graph = graph.replace(wayA);
58346                 graph = graph.replace(wayB);
58347
58348                 graph.parentRelations(wayA).forEach(function(relation) {
58349                     var member;
58350
58351                     // Turn restrictions - make sure:
58352                     // 1. Splitting a FROM/TO way - only `wayA` OR `wayB` remains in relation
58353                     //    (whichever one is connected to the VIA node/ways)
58354                     // 2. Splitting a VIA way - `wayB` remains in relation as a VIA way
58355                     if (relation.hasFromViaTo()) {
58356                         var f = relation.memberByRole('from');
58357                         var v = relation.membersByRole('via');
58358                         var t = relation.memberByRole('to');
58359                         var i;
58360
58361                         // 1. split a FROM/TO
58362                         if (f.id === wayA.id || t.id === wayA.id) {
58363                             var keepB = false;
58364                             if (v.length === 1 && v[0].type === 'node') {   // check via node
58365                                 keepB = wayB.contains(v[0].id);
58366                             } else {                                        // check via way(s)
58367                                 for (i = 0; i < v.length; i++) {
58368                                     if (v[i].type === 'way') {
58369                                         var wayVia = graph.hasEntity(v[i].id);
58370                                         if (wayVia && utilArrayIntersection(wayB.nodes, wayVia.nodes).length) {
58371                                             keepB = true;
58372                                             break;
58373                                         }
58374                                     }
58375                                 }
58376                             }
58377
58378                             if (keepB) {
58379                                 relation = relation.replaceMember(wayA, wayB);
58380                                 graph = graph.replace(relation);
58381                             }
58382
58383                         // 2. split a VIA
58384                         } else {
58385                             for (i = 0; i < v.length; i++) {
58386                                 if (v[i].type === 'way' && v[i].id === wayA.id) {
58387                                     member = {
58388                                         id: wayB.id,
58389                                         type: 'way',
58390                                         role: 'via'
58391                                     };
58392                                     graph = actionAddMember(relation.id, member, v[i].index + 1)(graph);
58393                                     break;
58394                                 }
58395                             }
58396                         }
58397
58398                     // All other relations (Routes, Multipolygons, etc):
58399                     // 1. Both `wayA` and `wayB` remain in the relation
58400                     // 2. But must be inserted as a pair (see `actionAddMember` for details)
58401                     } else {
58402                         if (relation === isOuter) {
58403                             graph = graph.replace(relation.mergeTags(wayA.tags));
58404                             graph = graph.replace(wayA.update({ tags: {} }));
58405                             graph = graph.replace(wayB.update({ tags: {} }));
58406                         }
58407
58408                         member = {
58409                             id: wayB.id,
58410                             type: 'way',
58411                             role: relation.memberById(wayA.id).role
58412                         };
58413
58414                         var insertPair = {
58415                             originalID: wayA.id,
58416                             insertedID: wayB.id,
58417                             nodes: origNodes
58418                         };
58419
58420                         graph = actionAddMember(relation.id, member, undefined, insertPair)(graph);
58421                     }
58422                 });
58423
58424                 if (!isOuter && isArea) {
58425                     var multipolygon = osmRelation({
58426                         tags: Object.assign({}, wayA.tags, { type: 'multipolygon' }),
58427                         members: [
58428                             { id: wayA.id, role: 'outer', type: 'way' },
58429                             { id: wayB.id, role: 'outer', type: 'way' }
58430                         ]
58431                     });
58432
58433                     graph = graph.replace(multipolygon);
58434                     graph = graph.replace(wayA.update({ tags: {} }));
58435                     graph = graph.replace(wayB.update({ tags: {} }));
58436                 }
58437
58438                 createdWayIDs.push(wayB.id);
58439
58440                 return graph;
58441             }
58442
58443             var action = function(graph) {
58444                 var candidates = action.ways(graph);
58445                 createdWayIDs = [];
58446                 for (var i = 0; i < candidates.length; i++) {
58447                     graph = split(graph, candidates[i], newWayIds && newWayIds[i]);
58448                 }
58449                 return graph;
58450             };
58451
58452             action.getCreatedWayIDs = function() {
58453                 return createdWayIDs;
58454             };
58455
58456             action.ways = function(graph) {
58457                 var node = graph.entity(nodeId);
58458                 var parents = graph.parentWays(node);
58459                 var hasLines = parents.some(function(parent) {
58460                     return parent.geometry(graph) === 'line';
58461                 });
58462
58463                 return parents.filter(function(parent) {
58464                     if (_wayIDs && _wayIDs.indexOf(parent.id) === -1)
58465                         { return false; }
58466
58467                     if (!_wayIDs && hasLines && parent.geometry(graph) !== 'line')
58468                         { return false; }
58469
58470                     if (parent.isClosed()) {
58471                         return true;
58472                     }
58473
58474                     for (var i = 1; i < parent.nodes.length - 1; i++) {
58475                         if (parent.nodes[i] === nodeId) {
58476                             return true;
58477                         }
58478                     }
58479
58480                     return false;
58481                 });
58482             };
58483
58484
58485             action.disabled = function(graph) {
58486                 var candidates = action.ways(graph);
58487                 if (candidates.length === 0 || (_wayIDs && _wayIDs.length !== candidates.length)) {
58488                     return 'not_eligible';
58489                 }
58490             };
58491
58492
58493             action.limitWays = function(val) {
58494                 if (!arguments.length) { return _wayIDs; }
58495                 _wayIDs = val;
58496                 return action;
58497             };
58498
58499
58500             return action;
58501         }
58502
58503         function coreGraph(other, mutable) {
58504             if (!(this instanceof coreGraph)) { return new coreGraph(other, mutable); }
58505
58506             if (other instanceof coreGraph) {
58507                 var base = other.base();
58508                 this.entities = Object.assign(Object.create(base.entities), other.entities);
58509                 this._parentWays = Object.assign(Object.create(base.parentWays), other._parentWays);
58510                 this._parentRels = Object.assign(Object.create(base.parentRels), other._parentRels);
58511
58512             } else {
58513                 this.entities = Object.create({});
58514                 this._parentWays = Object.create({});
58515                 this._parentRels = Object.create({});
58516                 this.rebase(other || [], [this]);
58517             }
58518
58519             this.transients = {};
58520             this._childNodes = {};
58521             this.frozen = !mutable;
58522         }
58523
58524
58525         coreGraph.prototype = {
58526
58527             hasEntity: function(id) {
58528                 return this.entities[id];
58529             },
58530
58531
58532             entity: function(id) {
58533                 var entity = this.entities[id];
58534
58535                 //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
58536                 if (!entity) {
58537                     entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
58538                 }
58539
58540                 if (!entity) {
58541                     throw new Error('entity ' + id + ' not found');
58542                 }
58543                 return entity;
58544             },
58545
58546
58547             transient: function(entity, key, fn) {
58548                 var id = entity.id;
58549                 var transients = this.transients[id] || (this.transients[id] = {});
58550
58551                 if (transients[key] !== undefined) {
58552                     return transients[key];
58553                 }
58554
58555                 transients[key] = fn.call(entity);
58556
58557                 return transients[key];
58558             },
58559
58560
58561             parentWays: function(entity) {
58562                 var parents = this._parentWays[entity.id];
58563                 var result = [];
58564                 if (parents) {
58565                     parents.forEach(function(id) {
58566                         result.push(this.entity(id));
58567                     }, this);
58568                 }
58569                 return result;
58570             },
58571
58572
58573             isPoi: function(entity) {
58574                 var parents = this._parentWays[entity.id];
58575                 return !parents || parents.size === 0;
58576             },
58577
58578
58579             isShared: function(entity) {
58580                 var parents = this._parentWays[entity.id];
58581                 return parents && parents.size > 1;
58582             },
58583
58584
58585             parentRelations: function(entity) {
58586                 var parents = this._parentRels[entity.id];
58587                 var result = [];
58588                 if (parents) {
58589                     parents.forEach(function(id) {
58590                         result.push(this.entity(id));
58591                     }, this);
58592                 }
58593                 return result;
58594             },
58595
58596             parentMultipolygons: function(entity) {
58597                 return this.parentRelations(entity).filter(function(relation) {
58598                     return relation.isMultipolygon();
58599                 });
58600             },
58601
58602
58603             childNodes: function(entity) {
58604                 if (this._childNodes[entity.id]) { return this._childNodes[entity.id]; }
58605                 if (!entity.nodes) { return []; }
58606
58607                 var nodes = [];
58608                 for (var i = 0; i < entity.nodes.length; i++) {
58609                     nodes[i] = this.entity(entity.nodes[i]);
58610                 }
58611
58612                 this._childNodes[entity.id] = nodes;
58613                 return this._childNodes[entity.id];
58614             },
58615
58616
58617             base: function() {
58618                 return {
58619                     'entities': Object.getPrototypeOf(this.entities),
58620                     'parentWays': Object.getPrototypeOf(this._parentWays),
58621                     'parentRels': Object.getPrototypeOf(this._parentRels)
58622                 };
58623             },
58624
58625
58626             // Unlike other graph methods, rebase mutates in place. This is because it
58627             // is used only during the history operation that merges newly downloaded
58628             // data into each state. To external consumers, it should appear as if the
58629             // graph always contained the newly downloaded data.
58630             rebase: function(entities, stack, force) {
58631                 var base = this.base();
58632                 var i, j, k, id;
58633
58634                 for (i = 0; i < entities.length; i++) {
58635                     var entity = entities[i];
58636
58637                     if (!entity.visible || (!force && base.entities[entity.id]))
58638                         { continue; }
58639
58640                     // Merging data into the base graph
58641                     base.entities[entity.id] = entity;
58642                     this._updateCalculated(undefined, entity, base.parentWays, base.parentRels);
58643
58644                     // Restore provisionally-deleted nodes that are discovered to have an extant parent
58645                     if (entity.type === 'way') {
58646                         for (j = 0; j < entity.nodes.length; j++) {
58647                             id = entity.nodes[j];
58648                             for (k = 1; k < stack.length; k++) {
58649                                 var ents = stack[k].entities;
58650                                 if (ents.hasOwnProperty(id) && ents[id] === undefined) {
58651                                     delete ents[id];
58652                                 }
58653                             }
58654                         }
58655                     }
58656                 }
58657
58658                 for (i = 0; i < stack.length; i++) {
58659                     stack[i]._updateRebased();
58660                 }
58661             },
58662
58663
58664             _updateRebased: function() {
58665                 var base = this.base();
58666
58667                 Object.keys(this._parentWays).forEach(function(child) {
58668                     if (base.parentWays[child]) {
58669                         base.parentWays[child].forEach(function(id) {
58670                             if (!this.entities.hasOwnProperty(id)) {
58671                                 this._parentWays[child].add(id);
58672                             }
58673                         }, this);
58674                     }
58675                 }, this);
58676
58677                 Object.keys(this._parentRels).forEach(function(child) {
58678                     if (base.parentRels[child]) {
58679                         base.parentRels[child].forEach(function(id) {
58680                             if (!this.entities.hasOwnProperty(id)) {
58681                                 this._parentRels[child].add(id);
58682                             }
58683                         }, this);
58684                     }
58685                 }, this);
58686
58687                 this.transients = {};
58688
58689                 // this._childNodes is not updated, under the assumption that
58690                 // ways are always downloaded with their child nodes.
58691             },
58692
58693
58694             // Updates calculated properties (parentWays, parentRels) for the specified change
58695             _updateCalculated: function(oldentity, entity, parentWays, parentRels) {
58696                 parentWays = parentWays || this._parentWays;
58697                 parentRels = parentRels || this._parentRels;
58698
58699                 var type = entity && entity.type || oldentity && oldentity.type;
58700                 var removed, added, i;
58701
58702                 if (type === 'way') {   // Update parentWays
58703                     if (oldentity && entity) {
58704                         removed = utilArrayDifference(oldentity.nodes, entity.nodes);
58705                         added = utilArrayDifference(entity.nodes, oldentity.nodes);
58706                     } else if (oldentity) {
58707                         removed = oldentity.nodes;
58708                         added = [];
58709                     } else if (entity) {
58710                         removed = [];
58711                         added = entity.nodes;
58712                     }
58713                     for (i = 0; i < removed.length; i++) {
58714                         // make a copy of prototype property, store as own property, and update..
58715                         parentWays[removed[i]] = new Set(parentWays[removed[i]]);
58716                         parentWays[removed[i]].delete(oldentity.id);
58717                     }
58718                     for (i = 0; i < added.length; i++) {
58719                         // make a copy of prototype property, store as own property, and update..
58720                         parentWays[added[i]] = new Set(parentWays[added[i]]);
58721                         parentWays[added[i]].add(entity.id);
58722                     }
58723
58724                 } else if (type === 'relation') {   // Update parentRels
58725
58726                     // diff only on the IDs since the same entity can be a member multiple times with different roles
58727                     var oldentityMemberIDs = oldentity ? oldentity.members.map(function(m) { return m.id; }) : [];
58728                     var entityMemberIDs = entity ? entity.members.map(function(m) { return m.id; }) : [];
58729
58730                     if (oldentity && entity) {
58731                         removed = utilArrayDifference(oldentityMemberIDs, entityMemberIDs);
58732                         added = utilArrayDifference(entityMemberIDs, oldentityMemberIDs);
58733                     } else if (oldentity) {
58734                         removed = oldentityMemberIDs;
58735                         added = [];
58736                     } else if (entity) {
58737                         removed = [];
58738                         added = entityMemberIDs;
58739                     }
58740                     for (i = 0; i < removed.length; i++) {
58741                         // make a copy of prototype property, store as own property, and update..
58742                         parentRels[removed[i]] = new Set(parentRels[removed[i]]);
58743                         parentRels[removed[i]].delete(oldentity.id);
58744                     }
58745                     for (i = 0; i < added.length; i++) {
58746                         // make a copy of prototype property, store as own property, and update..
58747                         parentRels[added[i]] = new Set(parentRels[added[i]]);
58748                         parentRels[added[i]].add(entity.id);
58749                     }
58750                 }
58751             },
58752
58753
58754             replace: function(entity) {
58755                 if (this.entities[entity.id] === entity) { return this; }
58756
58757                 return this.update(function() {
58758                     this._updateCalculated(this.entities[entity.id], entity);
58759                     this.entities[entity.id] = entity;
58760                 });
58761             },
58762
58763
58764             remove: function(entity) {
58765                 return this.update(function() {
58766                     this._updateCalculated(entity, undefined);
58767                     this.entities[entity.id] = undefined;
58768                 });
58769             },
58770
58771
58772             revert: function(id) {
58773                 var baseEntity = this.base().entities[id];
58774                 var headEntity = this.entities[id];
58775                 if (headEntity === baseEntity) { return this; }
58776
58777                 return this.update(function() {
58778                     this._updateCalculated(headEntity, baseEntity);
58779                     delete this.entities[id];
58780                 });
58781             },
58782
58783
58784             update: function() {
58785                 var arguments$1 = arguments;
58786
58787                 var graph = this.frozen ? coreGraph(this, true) : this;
58788                 for (var i = 0; i < arguments.length; i++) {
58789                     arguments$1[i].call(graph, graph);
58790                 }
58791
58792                 if (this.frozen) { graph.frozen = true; }
58793
58794                 return graph;
58795             },
58796
58797
58798             // Obliterates any existing entities
58799             load: function(entities) {
58800                 var base = this.base();
58801                 this.entities = Object.create(base.entities);
58802
58803                 for (var i in entities) {
58804                     this.entities[i] = entities[i];
58805                     this._updateCalculated(base.entities[i], this.entities[i]);
58806                 }
58807
58808                 return this;
58809             }
58810         };
58811
58812         function osmTurn(turn) {
58813             if (!(this instanceof osmTurn)) {
58814                 return new osmTurn(turn);
58815             }
58816             Object.assign(this, turn);
58817         }
58818
58819
58820         function osmIntersection(graph, startVertexId, maxDistance) {
58821             maxDistance = maxDistance || 30;    // in meters
58822             var vgraph = coreGraph();           // virtual graph
58823             var i, j, k;
58824
58825
58826             function memberOfRestriction(entity) {
58827                 return graph.parentRelations(entity)
58828                     .some(function(r) { return r.isRestriction(); });
58829             }
58830
58831             function isRoad(way) {
58832                 if (way.isArea() || way.isDegenerate()) { return false; }
58833                 var roads = {
58834                     'motorway': true,
58835                     'motorway_link': true,
58836                     'trunk': true,
58837                     'trunk_link': true,
58838                     'primary': true,
58839                     'primary_link': true,
58840                     'secondary': true,
58841                     'secondary_link': true,
58842                     'tertiary': true,
58843                     'tertiary_link': true,
58844                     'residential': true,
58845                     'unclassified': true,
58846                     'living_street': true,
58847                     'service': true,
58848                     'road': true,
58849                     'track': true
58850                 };
58851                 return roads[way.tags.highway];
58852             }
58853
58854
58855             var startNode = graph.entity(startVertexId);
58856             var checkVertices = [startNode];
58857             var checkWays;
58858             var vertices = [];
58859             var vertexIds = [];
58860             var vertex;
58861             var ways = [];
58862             var wayIds = [];
58863             var way;
58864             var nodes = [];
58865             var node;
58866             var parents = [];
58867             var parent;
58868
58869             // `actions` will store whatever actions must be performed to satisfy
58870             // preconditions for adding a turn restriction to this intersection.
58871             //  - Remove any existing degenerate turn restrictions (missing from/to, etc)
58872             //  - Reverse oneways so that they are drawn in the forward direction
58873             //  - Split ways on key vertices
58874             var actions = [];
58875
58876
58877             // STEP 1:  walk the graph outwards from starting vertex to search
58878             //  for more key vertices and ways to include in the intersection..
58879
58880             while (checkVertices.length) {
58881                 vertex = checkVertices.pop();
58882
58883                 // check this vertex for parent ways that are roads
58884                 checkWays = graph.parentWays(vertex);
58885                 var hasWays = false;
58886                 for (i = 0; i < checkWays.length; i++) {
58887                     way = checkWays[i];
58888                     if (!isRoad(way) && !memberOfRestriction(way)) { continue; }
58889
58890                     ways.push(way);   // it's a road, or it's already in a turn restriction
58891                     hasWays = true;
58892
58893                     // check the way's children for more key vertices
58894                     nodes = utilArrayUniq(graph.childNodes(way));
58895                     for (j = 0; j < nodes.length; j++) {
58896                         node = nodes[j];
58897                         if (node === vertex) { continue; }                                           // same thing
58898                         if (vertices.indexOf(node) !== -1) { continue; }                             // seen it already
58899                         if (geoSphericalDistance(node.loc, startNode.loc) > maxDistance) { continue; }   // too far from start
58900
58901                         // a key vertex will have parents that are also roads
58902                         var hasParents = false;
58903                         parents = graph.parentWays(node);
58904                         for (k = 0; k < parents.length; k++) {
58905                             parent = parents[k];
58906                             if (parent === way) { continue; }                 // same thing
58907                             if (ways.indexOf(parent) !== -1) { continue; }    // seen it already
58908                             if (!isRoad(parent)) { continue; }                // not a road
58909                             hasParents = true;
58910                             break;
58911                         }
58912
58913                         if (hasParents) {
58914                             checkVertices.push(node);
58915                         }
58916                     }
58917                 }
58918
58919                 if (hasWays) {
58920                     vertices.push(vertex);
58921                 }
58922             }
58923
58924             vertices = utilArrayUniq(vertices);
58925             ways = utilArrayUniq(ways);
58926
58927
58928             // STEP 2:  Build a virtual graph containing only the entities in the intersection..
58929             // Everything done after this step should act on the virtual graph
58930             // Any actions that must be performed later to the main graph go in `actions` array
58931             ways.forEach(function(way) {
58932                 graph.childNodes(way).forEach(function(node) {
58933                     vgraph = vgraph.replace(node);
58934                 });
58935
58936                 vgraph = vgraph.replace(way);
58937
58938                 graph.parentRelations(way).forEach(function(relation) {
58939                     if (relation.isRestriction()) {
58940                         if (relation.isValidRestriction(graph)) {
58941                             vgraph = vgraph.replace(relation);
58942                         } else if (relation.isComplete(graph)) {
58943                             actions.push(actionDeleteRelation(relation.id));
58944                         }
58945                     }
58946                 });
58947             });
58948
58949
58950             // STEP 3:  Force all oneways to be drawn in the forward direction
58951             ways.forEach(function(w) {
58952                 var way = vgraph.entity(w.id);
58953                 if (way.tags.oneway === '-1') {
58954                     var action = actionReverse(way.id, { reverseOneway: true });
58955                     actions.push(action);
58956                     vgraph = action(vgraph);
58957                 }
58958             });
58959
58960
58961             // STEP 4:  Split ways on key vertices
58962             var origCount = osmEntity.id.next.way;
58963             vertices.forEach(function(v) {
58964                 // This is an odd way to do it, but we need to find all the ways that
58965                 // will be split here, then split them one at a time to ensure that these
58966                 // actions can be replayed on the main graph exactly in the same order.
58967                 // (It is unintuitive, but the order of ways returned from graph.parentWays()
58968                 // is arbitrary, depending on how the main graph and vgraph were built)
58969                 var splitAll = actionSplit(v.id);
58970                 if (!splitAll.disabled(vgraph)) {
58971                     splitAll.ways(vgraph).forEach(function(way) {
58972                         var splitOne = actionSplit(v.id).limitWays([way.id]);
58973                         actions.push(splitOne);
58974                         vgraph = splitOne(vgraph);
58975                     });
58976                 }
58977             });
58978
58979             // In here is where we should also split the intersection at nearby junction.
58980             //   for https://github.com/mapbox/iD-internal/issues/31
58981             // nearbyVertices.forEach(function(v) {
58982             // });
58983
58984             // Reasons why we reset the way id count here:
58985             //  1. Continuity with way ids created by the splits so that we can replay
58986             //     these actions later if the user decides to create a turn restriction
58987             //  2. Avoids churning way ids just by hovering over a vertex
58988             //     and displaying the turn restriction editor
58989             osmEntity.id.next.way = origCount;
58990
58991
58992             // STEP 5:  Update arrays to point to vgraph entities
58993             vertexIds = vertices.map(function(v) { return v.id; });
58994             vertices = [];
58995             ways = [];
58996
58997             vertexIds.forEach(function(id) {
58998                 var vertex = vgraph.entity(id);
58999                 var parents = vgraph.parentWays(vertex);
59000                 vertices.push(vertex);
59001                 ways = ways.concat(parents);
59002             });
59003
59004             vertices = utilArrayUniq(vertices);
59005             ways = utilArrayUniq(ways);
59006
59007             vertexIds = vertices.map(function(v) { return v.id; });
59008             wayIds = ways.map(function(w) { return w.id; });
59009
59010
59011             // STEP 6:  Update the ways with some metadata that will be useful for
59012             // walking the intersection graph later and rendering turn arrows.
59013
59014             function withMetadata(way, vertexIds) {
59015                 var __oneWay = way.isOneWay();
59016
59017                 // which affixes are key vertices?
59018                 var __first = (vertexIds.indexOf(way.first()) !== -1);
59019                 var __last = (vertexIds.indexOf(way.last()) !== -1);
59020
59021                 // what roles is this way eligible for?
59022                 var __via = (__first && __last);
59023                 var __from = ((__first && !__oneWay) || __last);
59024                 var __to = (__first || (__last && !__oneWay));
59025
59026                 return way.update({
59027                     __first:  __first,
59028                     __last:  __last,
59029                     __from:  __from,
59030                     __via: __via,
59031                     __to:  __to,
59032                     __oneWay:  __oneWay
59033                 });
59034             }
59035
59036             ways = [];
59037             wayIds.forEach(function(id) {
59038                 var way = withMetadata(vgraph.entity(id), vertexIds);
59039                 vgraph = vgraph.replace(way);
59040                 ways.push(way);
59041             });
59042
59043
59044             // STEP 7:  Simplify - This is an iterative process where we:
59045             //  1. Find trivial vertices with only 2 parents
59046             //  2. trim off the leaf way from those vertices and remove from vgraph
59047
59048             var keepGoing;
59049             var removeWayIds = [];
59050             var removeVertexIds = [];
59051
59052             do {
59053                 keepGoing = false;
59054                 checkVertices = vertexIds.slice();
59055
59056                 for (i = 0; i < checkVertices.length; i++) {
59057                     var vertexId = checkVertices[i];
59058                     vertex = vgraph.hasEntity(vertexId);
59059
59060                     if (!vertex) {
59061                         if (vertexIds.indexOf(vertexId) !== -1) {
59062                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
59063                         }
59064                         removeVertexIds.push(vertexId);
59065                         continue;
59066                     }
59067
59068                     parents = vgraph.parentWays(vertex);
59069                     if (parents.length < 3) {
59070                         if (vertexIds.indexOf(vertexId) !== -1) {
59071                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
59072                         }
59073                     }
59074
59075                     if (parents.length === 2) {     // vertex with 2 parents is trivial
59076                         var a = parents[0];
59077                         var b = parents[1];
59078                         var aIsLeaf = a && !a.__via;
59079                         var bIsLeaf = b && !b.__via;
59080                         var leaf, survivor;
59081
59082                         if (aIsLeaf && !bIsLeaf) {
59083                             leaf = a;
59084                             survivor = b;
59085                         } else if (!aIsLeaf && bIsLeaf) {
59086                             leaf = b;
59087                             survivor = a;
59088                         }
59089
59090                         if (leaf && survivor) {
59091                             survivor = withMetadata(survivor, vertexIds);      // update survivor way
59092                             vgraph = vgraph.replace(survivor).remove(leaf);    // update graph
59093                             removeWayIds.push(leaf.id);
59094                             keepGoing = true;
59095                         }
59096                     }
59097
59098                     parents = vgraph.parentWays(vertex);
59099
59100                     if (parents.length < 2) {     // vertex is no longer a key vertex
59101                         if (vertexIds.indexOf(vertexId) !== -1) {
59102                             vertexIds.splice(vertexIds.indexOf(vertexId), 1);   // stop checking this one
59103                         }
59104                         removeVertexIds.push(vertexId);
59105                         keepGoing = true;
59106                     }
59107
59108                     if (parents.length < 1) {     // vertex is no longer attached to anything
59109                         vgraph = vgraph.remove(vertex);
59110                     }
59111
59112                 }
59113             } while (keepGoing);
59114
59115
59116             vertices = vertices
59117                 .filter(function(vertex) { return removeVertexIds.indexOf(vertex.id) === -1; })
59118                 .map(function(vertex) { return vgraph.entity(vertex.id); });
59119             ways = ways
59120                 .filter(function(way) { return removeWayIds.indexOf(way.id) === -1; })
59121                 .map(function(way) { return vgraph.entity(way.id); });
59122
59123
59124             // OK!  Here is our intersection..
59125             var intersection = {
59126                 graph: vgraph,
59127                 actions: actions,
59128                 vertices: vertices,
59129                 ways: ways,
59130             };
59131
59132
59133
59134             // Get all the valid turns through this intersection given a starting way id.
59135             // This operates on the virtual graph for everything.
59136             //
59137             // Basically, walk through all possible paths from starting way,
59138             //   honoring the existing turn restrictions as we go (watch out for loops!)
59139             //
59140             // For each path found, generate and return a `osmTurn` datastructure.
59141             //
59142             intersection.turns = function(fromWayId, maxViaWay) {
59143                 if (!fromWayId) { return []; }
59144                 if (!maxViaWay) { maxViaWay = 0; }
59145
59146                 var vgraph = intersection.graph;
59147                 var keyVertexIds = intersection.vertices.map(function(v) { return v.id; });
59148
59149                 var start = vgraph.entity(fromWayId);
59150                 if (!start || !(start.__from || start.__via)) { return []; }
59151
59152                 // maxViaWay=0   from-*-to              (0 vias)
59153                 // maxViaWay=1   from-*-via-*-to        (1 via max)
59154                 // maxViaWay=2   from-*-via-*-via-*-to  (2 vias max)
59155                 var maxPathLength = (maxViaWay * 2) + 3;
59156                 var turns = [];
59157
59158                 step(start);
59159                 return turns;
59160
59161
59162                 // traverse the intersection graph and find all the valid paths
59163                 function step(entity, currPath, currRestrictions, matchedRestriction) {
59164                     currPath = (currPath || []).slice();  // shallow copy
59165                     if (currPath.length >= maxPathLength) { return; }
59166                     currPath.push(entity.id);
59167                     currRestrictions = (currRestrictions || []).slice();  // shallow copy
59168                     var i, j;
59169
59170                     if (entity.type === 'node') {
59171                         var parents = vgraph.parentWays(entity);
59172                         var nextWays = [];
59173
59174                         // which ways can we step into?
59175                         for (i = 0; i < parents.length; i++) {
59176                             var way = parents[i];
59177
59178                             // if next way is a oneway incoming to this vertex, skip
59179                             if (way.__oneWay && way.nodes[0] !== entity.id) { continue; }
59180
59181                             // if we have seen it before (allowing for an initial u-turn), skip
59182                             if (currPath.indexOf(way.id) !== -1 && currPath.length >= 3) { continue; }
59183
59184                             // Check all "current" restrictions (where we've already walked the `FROM`)
59185                             var restrict = undefined;
59186                             for (j = 0; j < currRestrictions.length; j++) {
59187                                 var restriction = currRestrictions[j];
59188                                 var f = restriction.memberByRole('from');
59189                                 var v = restriction.membersByRole('via');
59190                                 var t = restriction.memberByRole('to');
59191                                 var isOnly = /^only_/.test(restriction.tags.restriction);
59192
59193                                 // Does the current path match this turn restriction?
59194                                 var matchesFrom = (f.id === fromWayId);
59195                                 var matchesViaTo = false;
59196                                 var isAlongOnlyPath = false;
59197
59198                                 if (t.id === way.id) {     // match TO
59199
59200                                     if (v.length === 1 && v[0].type === 'node') {    // match VIA node
59201                                         matchesViaTo = (v[0].id === entity.id && (
59202                                             (matchesFrom && currPath.length === 2) ||
59203                                             (!matchesFrom && currPath.length > 2)
59204                                         ));
59205
59206                                     } else {                                         // match all VIA ways
59207                                         var pathVias = [];
59208                                         for (k = 2; k < currPath.length; k +=2 ) {   // k = 2 skips FROM
59209                                             pathVias.push(currPath[k]);              // (path goes way-node-way...)
59210                                         }
59211                                         var restrictionVias = [];
59212                                         for (k = 0; k < v.length; k++) {
59213                                             if (v[k].type === 'way') {
59214                                                 restrictionVias.push(v[k].id);
59215                                             }
59216                                         }
59217                                         var diff = utilArrayDifference(pathVias, restrictionVias);
59218                                         matchesViaTo = !diff.length;
59219                                     }
59220
59221                                 } else if (isOnly) {
59222                                     for (k = 0; k < v.length; k++) {
59223                                         // way doesn't match TO, but is one of the via ways along the path of an "only"
59224                                         if (v[k].type === 'way' && v[k].id === way.id) {
59225                                             isAlongOnlyPath = true;
59226                                             break;
59227                                         }
59228                                     }
59229                                 }
59230
59231                                 if (matchesViaTo) {
59232                                     if (isOnly) {
59233                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, only: true, end: true };
59234                                     } else {
59235                                         restrict = { id: restriction.id, direct: matchesFrom, from: f.id, no: true, end: true };
59236                                     }
59237                                 } else {    // indirect - caused by a different nearby restriction
59238                                     if (isAlongOnlyPath) {
59239                                         restrict = { id: restriction.id, direct: false, from: f.id, only: true, end: false };
59240                                     } else if (isOnly) {
59241                                         restrict = { id: restriction.id, direct: false, from: f.id, no: true, end: true };
59242                                     }
59243                                 }
59244
59245                                 // stop looking if we find a "direct" restriction (matching FROM, VIA, TO)
59246                                 if (restrict && restrict.direct)
59247                                     { break; }
59248                             }
59249
59250                             nextWays.push({ way: way, restrict: restrict });
59251                         }
59252
59253                         nextWays.forEach(function(nextWay) {
59254                             step(nextWay.way, currPath, currRestrictions, nextWay.restrict);
59255                         });
59256
59257
59258                     } else {  // entity.type === 'way'
59259                         if (currPath.length >= 3) {     // this is a "complete" path..
59260                             var turnPath = currPath.slice();   // shallow copy
59261
59262                             // an indirect restriction - only include the partial path (starting at FROM)
59263                             if (matchedRestriction && matchedRestriction.direct === false) {
59264                                 for (i = 0; i < turnPath.length; i++) {
59265                                     if (turnPath[i] === matchedRestriction.from) {
59266                                         turnPath = turnPath.slice(i);
59267                                         break;
59268                                     }
59269                                 }
59270                             }
59271
59272                             var turn = pathToTurn(turnPath);
59273                             if (turn) {
59274                                 if (matchedRestriction) {
59275                                     turn.restrictionID = matchedRestriction.id;
59276                                     turn.no = matchedRestriction.no;
59277                                     turn.only = matchedRestriction.only;
59278                                     turn.direct = matchedRestriction.direct;
59279                                 }
59280                                 turns.push(osmTurn(turn));
59281                             }
59282
59283                             if (currPath[0] === currPath[2]) { return; }   // if we made a u-turn - stop here
59284                         }
59285
59286                         if (matchedRestriction && matchedRestriction.end) { return; }  // don't advance any further
59287
59288                         // which nodes can we step into?
59289                         var n1 = vgraph.entity(entity.first());
59290                         var n2 = vgraph.entity(entity.last());
59291                         var dist = geoSphericalDistance(n1.loc, n2.loc);
59292                         var nextNodes = [];
59293
59294                         if (currPath.length > 1) {
59295                             if (dist > maxDistance) { return; }   // the next node is too far
59296                             if (!entity.__via) { return; }        // this way is a leaf / can't be a via
59297                         }
59298
59299                         if (!entity.__oneWay &&                     // bidirectional..
59300                             keyVertexIds.indexOf(n1.id) !== -1 &&   // key vertex..
59301                             currPath.indexOf(n1.id) === -1) {       // haven't seen it yet..
59302                             nextNodes.push(n1);                     // can advance to first node
59303                         }
59304                         if (keyVertexIds.indexOf(n2.id) !== -1 &&   // key vertex..
59305                             currPath.indexOf(n2.id) === -1) {       // haven't seen it yet..
59306                             nextNodes.push(n2);                     // can advance to last node
59307                         }
59308
59309                         nextNodes.forEach(function(nextNode) {
59310                             // gather restrictions FROM this way
59311                             var fromRestrictions = vgraph.parentRelations(entity).filter(function(r) {
59312                                 if (!r.isRestriction()) { return false; }
59313
59314                                 var f = r.memberByRole('from');
59315                                 if (!f || f.id !== entity.id) { return false; }
59316
59317                                 var isOnly = /^only_/.test(r.tags.restriction);
59318                                 if (!isOnly) { return true; }
59319
59320                                 // `only_` restrictions only matter along the direction of the VIA - #4849
59321                                 var isOnlyVia = false;
59322                                 var v = r.membersByRole('via');
59323                                 if (v.length === 1 && v[0].type === 'node') {   // via node
59324                                     isOnlyVia = (v[0].id === nextNode.id);
59325                                 } else {                                        // via way(s)
59326                                     for (var i = 0; i < v.length; i++) {
59327                                         if (v[i].type !== 'way') { continue; }
59328                                         var viaWay = vgraph.entity(v[i].id);
59329                                         if (viaWay.first() === nextNode.id || viaWay.last() === nextNode.id) {
59330                                             isOnlyVia = true;
59331                                             break;
59332                                         }
59333                                     }
59334                                 }
59335                                 return isOnlyVia;
59336                             });
59337
59338                             step(nextNode, currPath, currRestrictions.concat(fromRestrictions), false);
59339                         });
59340                     }
59341                 }
59342
59343
59344                 // assumes path is alternating way-node-way of odd length
59345                 function pathToTurn(path) {
59346                     if (path.length < 3) { return; }
59347                     var fromWayId, fromNodeId, fromVertexId;
59348                     var toWayId, toNodeId, toVertexId;
59349                     var viaWayIds, viaNodeId, isUturn;
59350
59351                     fromWayId = path[0];
59352                     toWayId = path[path.length - 1];
59353
59354                     if (path.length === 3 && fromWayId === toWayId) {  // u turn
59355                         var way = vgraph.entity(fromWayId);
59356                         if (way.__oneWay) { return null; }
59357
59358                         isUturn = true;
59359                         viaNodeId = fromVertexId = toVertexId = path[1];
59360                         fromNodeId = toNodeId = adjacentNode(fromWayId, viaNodeId);
59361
59362                     } else {
59363                         isUturn = false;
59364                         fromVertexId = path[1];
59365                         fromNodeId = adjacentNode(fromWayId, fromVertexId);
59366                         toVertexId = path[path.length - 2];
59367                         toNodeId = adjacentNode(toWayId, toVertexId);
59368
59369                         if (path.length === 3) {
59370                             viaNodeId = path[1];
59371                         } else {
59372                             viaWayIds = path.filter(function(entityId) { return entityId[0] === 'w'; });
59373                             viaWayIds = viaWayIds.slice(1, viaWayIds.length - 1);  // remove first, last
59374                         }
59375                     }
59376
59377                     return {
59378                         key:  path.join('_'),
59379                         path: path,
59380                         from: { node: fromNodeId, way:  fromWayId, vertex: fromVertexId },
59381                         via:  { node: viaNodeId,  ways: viaWayIds },
59382                         to:   { node: toNodeId,   way:  toWayId, vertex: toVertexId },
59383                         u:    isUturn
59384                     };
59385
59386
59387                     function adjacentNode(wayId, affixId) {
59388                         var nodes = vgraph.entity(wayId).nodes;
59389                         return affixId === nodes[0] ? nodes[1] : nodes[nodes.length - 2];
59390                     }
59391                 }
59392
59393             };
59394
59395             return intersection;
59396         }
59397
59398
59399         function osmInferRestriction(graph, turn, projection) {
59400             var fromWay = graph.entity(turn.from.way);
59401             var fromNode = graph.entity(turn.from.node);
59402             var fromVertex = graph.entity(turn.from.vertex);
59403             var toWay = graph.entity(turn.to.way);
59404             var toNode = graph.entity(turn.to.node);
59405             var toVertex = graph.entity(turn.to.vertex);
59406
59407             var fromOneWay = (fromWay.tags.oneway === 'yes');
59408             var toOneWay = (toWay.tags.oneway === 'yes');
59409             var angle = (geoAngle(fromVertex, fromNode, projection) -
59410                         geoAngle(toVertex, toNode, projection)) * 180 / Math.PI;
59411
59412             while (angle < 0)
59413                 { angle += 360; }
59414
59415             if (fromNode === toNode)
59416                 { return 'no_u_turn'; }
59417             if ((angle < 23 || angle > 336) && fromOneWay && toOneWay)
59418                 { return 'no_u_turn'; }   // wider tolerance for u-turn if both ways are oneway
59419             if ((angle < 40 || angle > 319) && fromOneWay && toOneWay && turn.from.vertex !== turn.to.vertex)
59420                 { return 'no_u_turn'; }   // even wider tolerance for u-turn if there is a via way (from !== to)
59421             if (angle < 158)
59422                 { return 'no_right_turn'; }
59423             if (angle > 202)
59424                 { return 'no_left_turn'; }
59425
59426             return 'no_straight_on';
59427         }
59428
59429         function actionMergePolygon(ids, newRelationId) {
59430
59431             function groupEntities(graph) {
59432                 var entities = ids.map(function (id) { return graph.entity(id); });
59433                 var geometryGroups = utilArrayGroupBy(entities, function(entity) {
59434                     if (entity.type === 'way' && entity.isClosed()) {
59435                         return 'closedWay';
59436                     } else if (entity.type === 'relation' && entity.isMultipolygon()) {
59437                         return 'multipolygon';
59438                     } else {
59439                         return 'other';
59440                     }
59441                 });
59442
59443                 return Object.assign(
59444                     { closedWay: [], multipolygon: [], other: [] },
59445                     geometryGroups
59446                 );
59447             }
59448
59449
59450             var action = function(graph) {
59451                 var entities = groupEntities(graph);
59452
59453                 // An array representing all the polygons that are part of the multipolygon.
59454                 //
59455                 // Each element is itself an array of objects with an id property, and has a
59456                 // locs property which is an array of the locations forming the polygon.
59457                 var polygons = entities.multipolygon.reduce(function(polygons, m) {
59458                     return polygons.concat(osmJoinWays(m.members, graph));
59459                 }, []).concat(entities.closedWay.map(function(d) {
59460                     var member = [{id: d.id}];
59461                     member.nodes = graph.childNodes(d);
59462                     return member;
59463                 }));
59464
59465                 // contained is an array of arrays of boolean values,
59466                 // where contained[j][k] is true iff the jth way is
59467                 // contained by the kth way.
59468                 var contained = polygons.map(function(w, i) {
59469                     return polygons.map(function(d, n) {
59470                         if (i === n) { return null; }
59471                         return geoPolygonContainsPolygon(
59472                             d.nodes.map(function(n) { return n.loc; }),
59473                             w.nodes.map(function(n) { return n.loc; })
59474                         );
59475                     });
59476                 });
59477
59478                 // Sort all polygons as either outer or inner ways
59479                 var members = [];
59480                 var outer = true;
59481
59482                 while (polygons.length) {
59483                     extractUncontained(polygons);
59484                     polygons = polygons.filter(isContained);
59485                     contained = contained.filter(isContained).map(filterContained);
59486                 }
59487
59488                 function isContained(d, i) {
59489                     return contained[i].some(function(val) { return val; });
59490                 }
59491
59492                 function filterContained(d) {
59493                     return d.filter(isContained);
59494                 }
59495
59496                 function extractUncontained(polygons) {
59497                     polygons.forEach(function(d, i) {
59498                         if (!isContained(d, i)) {
59499                             d.forEach(function(member) {
59500                                 members.push({
59501                                     type: 'way',
59502                                     id: member.id,
59503                                     role: outer ? 'outer' : 'inner'
59504                                 });
59505                             });
59506                         }
59507                     });
59508                     outer = !outer;
59509                 }
59510
59511                 // Move all tags to one relation
59512                 var relation = entities.multipolygon[0] ||
59513                     osmRelation({ id: newRelationId, tags: { type: 'multipolygon' }});
59514
59515                 entities.multipolygon.slice(1).forEach(function(m) {
59516                     relation = relation.mergeTags(m.tags);
59517                     graph = graph.remove(m);
59518                 });
59519
59520                 entities.closedWay.forEach(function(way) {
59521                     function isThisOuter(m) {
59522                         return m.id === way.id && m.role !== 'inner';
59523                     }
59524                     if (members.some(isThisOuter)) {
59525                         relation = relation.mergeTags(way.tags);
59526                         graph = graph.replace(way.update({ tags: {} }));
59527                     }
59528                 });
59529
59530                 return graph.replace(relation.update({
59531                     members: members,
59532                     tags: utilObjectOmit(relation.tags, ['area'])
59533                 }));
59534             };
59535
59536
59537             action.disabled = function(graph) {
59538                 var entities = groupEntities(graph);
59539                 if (entities.other.length > 0 ||
59540                     entities.closedWay.length + entities.multipolygon.length < 2)
59541                     { return 'not_eligible'; }
59542                 if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
59543                     { return 'incomplete_relation'; }
59544             };
59545
59546
59547             return action;
59548         }
59549
59550         // do not edit .js files directly - edit src/index.jst
59551
59552
59553
59554         var fastDeepEqual = function equal(a, b) {
59555           if (a === b) { return true; }
59556
59557           if (a && b && typeof a == 'object' && typeof b == 'object') {
59558             if (a.constructor !== b.constructor) { return false; }
59559
59560             var length, i, keys;
59561             if (Array.isArray(a)) {
59562               length = a.length;
59563               if (length != b.length) { return false; }
59564               for (i = length; i-- !== 0;)
59565                 { if (!equal(a[i], b[i])) { return false; } }
59566               return true;
59567             }
59568
59569
59570
59571             if (a.constructor === RegExp) { return a.source === b.source && a.flags === b.flags; }
59572             if (a.valueOf !== Object.prototype.valueOf) { return a.valueOf() === b.valueOf(); }
59573             if (a.toString !== Object.prototype.toString) { return a.toString() === b.toString(); }
59574
59575             keys = Object.keys(a);
59576             length = keys.length;
59577             if (length !== Object.keys(b).length) { return false; }
59578
59579             for (i = length; i-- !== 0;)
59580               { if (!Object.prototype.hasOwnProperty.call(b, keys[i])) { return false; } }
59581
59582             for (i = length; i-- !== 0;) {
59583               var key = keys[i];
59584
59585               if (!equal(a[key], b[key])) { return false; }
59586             }
59587
59588             return true;
59589           }
59590
59591           // true if both NaN, false otherwise
59592           return a!==a && b!==b;
59593         };
59594
59595         // Text diff algorithm following Hunt and McIlroy 1976.
59596         // J. W. Hunt and M. D. McIlroy, An algorithm for differential file
59597         // comparison, Bell Telephone Laboratories CSTR #41 (1976)
59598         // http://www.cs.dartmouth.edu/~doug/
59599         //
59600         // Expects two arrays of strings.
59601         function LCS(file1, file2) {
59602           var equivalenceClasses;
59603           var file2indices;
59604           var newCandidate;
59605           var candidates;
59606           var line;
59607           var c, i, j, jX, r, s;
59608
59609           equivalenceClasses = {};
59610           for (j = 0; j < file2.length; j++) {
59611             line = file2[j];
59612             if (equivalenceClasses[line]) {
59613               equivalenceClasses[line].push(j);
59614             } else {
59615               equivalenceClasses[line] = [j];
59616             }
59617           }
59618
59619           candidates = [
59620             { file1index: -1, file2index: -1, chain: null }
59621           ];
59622
59623           for (i = 0; i < file1.length; i++) {
59624             line = file1[i];
59625             file2indices = equivalenceClasses[line] || [];
59626
59627             r = 0;
59628             c = candidates[0];
59629
59630             for (jX = 0; jX < file2indices.length; jX++) {
59631               j = file2indices[jX];
59632
59633               for (s = r; s < candidates.length; s++) {
59634                 if ((candidates[s].file2index < j) && ((s === candidates.length - 1) || (candidates[s + 1].file2index > j))) {
59635                   break;
59636                 }
59637               }
59638
59639               if (s < candidates.length) {
59640                 newCandidate = { file1index: i, file2index: j, chain: candidates[s] };
59641                 if (r === candidates.length) {
59642                   candidates.push(c);
59643                 } else {
59644                   candidates[r] = c;
59645                 }
59646                 r = s + 1;
59647                 c = newCandidate;
59648                 if (r === candidates.length) {
59649                   break; // no point in examining further (j)s
59650                 }
59651               }
59652             }
59653
59654             candidates[r] = c;
59655           }
59656
59657           // At this point, we know the LCS: it's in the reverse of the
59658           // linked-list through .chain of candidates[candidates.length - 1].
59659
59660           return candidates[candidates.length - 1];
59661         }
59662
59663
59664         // We apply the LCS to give a simple representation of the
59665         // offsets and lengths of mismatched chunks in the input
59666         // files. This is used by diff3MergeIndices below.
59667         function diffIndices(file1, file2) {
59668           var result = [];
59669           var tail1 = file1.length;
59670           var tail2 = file2.length;
59671
59672           for (var candidate = LCS(file1, file2);
59673              candidate !== null;
59674              candidate = candidate.chain)
59675           {
59676             var mismatchLength1 = tail1 - candidate.file1index - 1;
59677             var mismatchLength2 = tail2 - candidate.file2index - 1;
59678             tail1 = candidate.file1index;
59679             tail2 = candidate.file2index;
59680
59681             if (mismatchLength1 || mismatchLength2) {
59682               result.push({
59683                 file1: [tail1 + 1, mismatchLength1],
59684                 file2: [tail2 + 1, mismatchLength2]
59685               });
59686             }
59687           }
59688
59689           result.reverse();
59690           return result;
59691         }
59692
59693
59694         // Given three files, A, O, and B, where both A and B are
59695         // independently derived from O, returns a fairly complicated
59696         // internal representation of merge decisions it's taken. The
59697         // interested reader may wish to consult
59698         //
59699         // Sanjeev Khanna, Keshav Kunal, and Benjamin C. Pierce.
59700         // 'A Formal Investigation of ' In Arvind and Prasad,
59701         // editors, Foundations of Software Technology and Theoretical
59702         // Computer Science (FSTTCS), December 2007.
59703         //
59704         // (http://www.cis.upenn.edu/~bcpierce/papers/diff3-short.pdf)
59705         function diff3MergeIndices(a, o, b) {
59706           var i;
59707           var m1 = diffIndices(o, a);
59708           var m2 = diffIndices(o, b);
59709
59710           var hunks = [];
59711           function addHunk(h, side) {
59712             hunks.push([h.file1[0], side, h.file1[1], h.file2[0], h.file2[1]]);
59713           }
59714           for (i = 0; i < m1.length; i++) { addHunk(m1[i], 0); }
59715           for (i = 0; i < m2.length; i++) { addHunk(m2[i], 2); }
59716           hunks.sort(function (x, y) { return x[0] - y[0]; });
59717
59718           var result = [];
59719           var commonOffset = 0;
59720           function copyCommon(targetOffset) {
59721             if (targetOffset > commonOffset) {
59722               result.push([1, commonOffset, targetOffset - commonOffset]);
59723               commonOffset = targetOffset;
59724             }
59725           }
59726
59727           for (var hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) {
59728             var firstHunkIndex = hunkIndex;
59729             var hunk = hunks[hunkIndex];
59730             var regionLhs = hunk[0];
59731             var regionRhs = regionLhs + hunk[2];
59732             while (hunkIndex < hunks.length - 1) {
59733               var maybeOverlapping = hunks[hunkIndex + 1];
59734               var maybeLhs = maybeOverlapping[0];
59735               if (maybeLhs > regionRhs) {
59736                 break;
59737               }
59738               regionRhs = Math.max(regionRhs, maybeLhs + maybeOverlapping[2]);
59739               hunkIndex++;
59740             }
59741
59742             copyCommon(regionLhs);
59743             if (firstHunkIndex === hunkIndex) {
59744               // The 'overlap' was only one hunk long, meaning that
59745               // there's no conflict here. Either a and o were the
59746               // same, or b and o were the same.
59747               if (hunk[4] > 0) {
59748                 result.push([hunk[1], hunk[3], hunk[4]]);
59749               }
59750             } else {
59751               // A proper conflict. Determine the extents of the
59752               // regions involved from a, o and b. Effectively merge
59753               // all the hunks on the left into one giant hunk, and
59754               // do the same for the right; then, correct for skew
59755               // in the regions of o that each side changed, and
59756               // report appropriate spans for the three sides.
59757               var regions = {
59758                 0: [a.length, -1, o.length, -1],
59759                 2: [b.length, -1, o.length, -1]
59760               };
59761               for (i = firstHunkIndex; i <= hunkIndex; i++) {
59762                 hunk = hunks[i];
59763                 var side = hunk[1];
59764                 var r = regions[side];
59765                 var oLhs = hunk[0];
59766                 var oRhs = oLhs + hunk[2];
59767                 var abLhs = hunk[3];
59768                 var abRhs = abLhs + hunk[4];
59769                 r[0] = Math.min(abLhs, r[0]);
59770                 r[1] = Math.max(abRhs, r[1]);
59771                 r[2] = Math.min(oLhs, r[2]);
59772                 r[3] = Math.max(oRhs, r[3]);
59773               }
59774               var aLhs = regions[0][0] + (regionLhs - regions[0][2]);
59775               var aRhs = regions[0][1] + (regionRhs - regions[0][3]);
59776               var bLhs = regions[2][0] + (regionLhs - regions[2][2]);
59777               var bRhs = regions[2][1] + (regionRhs - regions[2][3]);
59778               result.push([-1,
59779                            aLhs,      aRhs      - aLhs,
59780                            regionLhs, regionRhs - regionLhs,
59781                            bLhs,      bRhs      - bLhs]);
59782             }
59783             commonOffset = regionRhs;
59784           }
59785
59786           copyCommon(o.length);
59787           return result;
59788         }
59789
59790
59791         // Applies the output of diff3MergeIndices to actually
59792         // construct the merged file; the returned result alternates
59793         // between 'ok' and 'conflict' blocks.
59794         function diff3Merge(a, o, b, excludeFalseConflicts) {
59795           var result = [];
59796           var files = [a, o, b];
59797           var indices = diff3MergeIndices(a, o, b);
59798
59799           var okLines = [];
59800           function flushOk() {
59801             if (okLines.length) {
59802               result.push({ok: okLines});
59803             }
59804             okLines = [];
59805           }
59806           function pushOk(xs) {
59807             for (var j = 0; j < xs.length; j++) {
59808               okLines.push(xs[j]);
59809             }
59810           }
59811
59812           function isTrueConflict(rec) {
59813             if (rec[2] !== rec[6]) { return true; }
59814             var aoff = rec[1];
59815             var boff = rec[5];
59816             for (var j = 0; j < rec[2]; j++) {
59817               if (a[j + aoff] !== b[j + boff]) {
59818                 return true;
59819               }
59820             }
59821             return false;
59822           }
59823
59824           for (var i = 0; i < indices.length; i++) {
59825             var x = indices[i];
59826             var side = x[0];
59827             if (side === -1) {
59828               if (excludeFalseConflicts && !isTrueConflict(x)) {
59829                 pushOk(files[0].slice(x[1], x[1] + x[2]));
59830               } else {
59831                 flushOk();
59832                 result.push({
59833                   conflict: {
59834                     a: a.slice(x[1], x[1] + x[2]),
59835                     aIndex: x[1],
59836                     o: o.slice(x[3], x[3] + x[4]),
59837                     oIndex: x[3],
59838                     b: b.slice(x[5], x[5] + x[6]),
59839                     bIndex: x[5]
59840                   }
59841                 });
59842               }
59843             } else {
59844               pushOk(files[side].slice(x[1], x[1] + x[2]));
59845             }
59846           }
59847
59848           flushOk();
59849           return result;
59850         }
59851
59852         function actionMergeRemoteChanges(id, localGraph, remoteGraph, formatUser) {
59853             var _option = 'safe';  // 'safe', 'force_local', 'force_remote'
59854             var _conflicts = [];
59855
59856
59857             function user(d) {
59858                 return (typeof formatUser === 'function') ? formatUser(d) : d;
59859             }
59860
59861
59862             function mergeLocation(remote, target) {
59863                 function pointEqual(a, b) {
59864                     var epsilon = 1e-6;
59865                     return (Math.abs(a[0] - b[0]) < epsilon) && (Math.abs(a[1] - b[1]) < epsilon);
59866                 }
59867
59868                 if (_option === 'force_local' || pointEqual(target.loc, remote.loc)) {
59869                     return target;
59870                 }
59871                 if (_option === 'force_remote') {
59872                     return target.update({loc: remote.loc});
59873                 }
59874
59875                 _conflicts.push(t('merge_remote_changes.conflict.location', { user: user(remote.user) }));
59876                 return target;
59877             }
59878
59879
59880             function mergeNodes(base, remote, target) {
59881                 if (_option === 'force_local' || fastDeepEqual(target.nodes, remote.nodes)) {
59882                     return target;
59883                 }
59884                 if (_option === 'force_remote') {
59885                     return target.update({nodes: remote.nodes});
59886                 }
59887
59888                 var ccount = _conflicts.length;
59889                 var o = base.nodes || [];
59890                 var a = target.nodes || [];
59891                 var b = remote.nodes || [];
59892                 var nodes = [];
59893                 var hunks = diff3Merge(a, o, b, true);
59894
59895                 for (var i = 0; i < hunks.length; i++) {
59896                     var hunk = hunks[i];
59897                     if (hunk.ok) {
59898                         nodes.push.apply(nodes, hunk.ok);
59899                     } else {
59900                         // for all conflicts, we can assume c.a !== c.b
59901                         // because `diff3Merge` called with `true` option to exclude false conflicts..
59902                         var c = hunk.conflict;
59903                         if (fastDeepEqual(c.o, c.a)) {  // only changed remotely
59904                             nodes.push.apply(nodes, c.b);
59905                         } else if (fastDeepEqual(c.o, c.b)) {  // only changed locally
59906                             nodes.push.apply(nodes, c.a);
59907                         } else {       // changed both locally and remotely
59908                             _conflicts.push(t('merge_remote_changes.conflict.nodelist', { user: user(remote.user) }));
59909                             break;
59910                         }
59911                     }
59912                 }
59913
59914                 return (_conflicts.length === ccount) ? target.update({nodes: nodes}) : target;
59915             }
59916
59917
59918             function mergeChildren(targetWay, children, updates, graph) {
59919                 function isUsed(node, targetWay) {
59920                     var hasInterestingParent = graph.parentWays(node)
59921                         .some(function(way) { return way.id !== targetWay.id; });
59922
59923                     return node.hasInterestingTags() ||
59924                         hasInterestingParent ||
59925                         graph.parentRelations(node).length > 0;
59926                 }
59927
59928                 var ccount = _conflicts.length;
59929
59930                 for (var i = 0; i < children.length; i++) {
59931                     var id = children[i];
59932                     var node = graph.hasEntity(id);
59933
59934                     // remove unused childNodes..
59935                     if (targetWay.nodes.indexOf(id) === -1) {
59936                         if (node && !isUsed(node, targetWay)) {
59937                             updates.removeIds.push(id);
59938                         }
59939                         continue;
59940                     }
59941
59942                     // restore used childNodes..
59943                     var local = localGraph.hasEntity(id);
59944                     var remote = remoteGraph.hasEntity(id);
59945                     var target;
59946
59947                     if (_option === 'force_remote' && remote && remote.visible) {
59948                         updates.replacements.push(remote);
59949
59950                     } else if (_option === 'force_local' && local) {
59951                         target = osmEntity(local);
59952                         if (remote) {
59953                             target = target.update({ version: remote.version });
59954                         }
59955                         updates.replacements.push(target);
59956
59957                     } else if (_option === 'safe' && local && remote && local.version !== remote.version) {
59958                         target = osmEntity(local, { version: remote.version });
59959                         if (remote.visible) {
59960                             target = mergeLocation(remote, target);
59961                         } else {
59962                             _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
59963                         }
59964
59965                         if (_conflicts.length !== ccount) { break; }
59966                         updates.replacements.push(target);
59967                     }
59968                 }
59969
59970                 return targetWay;
59971             }
59972
59973
59974             function updateChildren(updates, graph) {
59975                 for (var i = 0; i < updates.replacements.length; i++) {
59976                     graph = graph.replace(updates.replacements[i]);
59977                 }
59978                 if (updates.removeIds.length) {
59979                     graph = actionDeleteMultiple(updates.removeIds)(graph);
59980                 }
59981                 return graph;
59982             }
59983
59984
59985             function mergeMembers(remote, target) {
59986                 if (_option === 'force_local' || fastDeepEqual(target.members, remote.members)) {
59987                     return target;
59988                 }
59989                 if (_option === 'force_remote') {
59990                     return target.update({members: remote.members});
59991                 }
59992
59993                 _conflicts.push(t('merge_remote_changes.conflict.memberlist', { user: user(remote.user) }));
59994                 return target;
59995             }
59996
59997
59998             function mergeTags(base, remote, target) {
59999                 if (_option === 'force_local' || fastDeepEqual(target.tags, remote.tags)) {
60000                     return target;
60001                 }
60002                 if (_option === 'force_remote') {
60003                     return target.update({tags: remote.tags});
60004                 }
60005
60006                 var ccount = _conflicts.length;
60007                 var o = base.tags || {};
60008                 var a = target.tags || {};
60009                 var b = remote.tags || {};
60010                 var keys = utilArrayUnion(utilArrayUnion(Object.keys(o), Object.keys(a)), Object.keys(b))
60011                     .filter(function(k) { return !dataDiscarded[k]; });
60012                 var tags = Object.assign({}, a);   // shallow copy
60013                 var changed = false;
60014
60015                 for (var i = 0; i < keys.length; i++) {
60016                     var k = keys[i];
60017
60018                     if (o[k] !== b[k] && a[k] !== b[k]) {    // changed remotely..
60019                         if (o[k] !== a[k]) {      // changed locally..
60020                             _conflicts.push(t('merge_remote_changes.conflict.tags',
60021                                 { tag: k, local: a[k], remote: b[k], user: user(remote.user) }));
60022
60023                         } else {                  // unchanged locally, accept remote change..
60024                             if (b.hasOwnProperty(k)) {
60025                                 tags[k] = b[k];
60026                             } else {
60027                                 delete tags[k];
60028                             }
60029                             changed = true;
60030                         }
60031                     }
60032                 }
60033
60034                 return (changed && _conflicts.length === ccount) ? target.update({tags: tags}) : target;
60035             }
60036
60037
60038             //  `graph.base()` is the common ancestor of the two graphs.
60039             //  `localGraph` contains user's edits up to saving
60040             //  `remoteGraph` contains remote edits to modified nodes
60041             //  `graph` must be a descendent of `localGraph` and may include
60042             //      some conflict resolution actions performed on it.
60043             //
60044             //                  --- ... --- `localGraph` -- ... -- `graph`
60045             //                 /
60046             //  `graph.base()` --- ... --- `remoteGraph`
60047             //
60048             var action = function(graph) {
60049                 var updates = { replacements: [], removeIds: [] };
60050                 var base = graph.base().entities[id];
60051                 var local = localGraph.entity(id);
60052                 var remote = remoteGraph.entity(id);
60053                 var target = osmEntity(local, { version: remote.version });
60054
60055                 // delete/undelete
60056                 if (!remote.visible) {
60057                     if (_option === 'force_remote') {
60058                         return actionDeleteMultiple([id])(graph);
60059
60060                     } else if (_option === 'force_local') {
60061                         if (target.type === 'way') {
60062                             target = mergeChildren(target, utilArrayUniq(local.nodes), updates, graph);
60063                             graph = updateChildren(updates, graph);
60064                         }
60065                         return graph.replace(target);
60066
60067                     } else {
60068                         _conflicts.push(t('merge_remote_changes.conflict.deleted', { user: user(remote.user) }));
60069                         return graph;  // do nothing
60070                     }
60071                 }
60072
60073                 // merge
60074                 if (target.type === 'node') {
60075                     target = mergeLocation(remote, target);
60076
60077                 } else if (target.type === 'way') {
60078                     // pull in any child nodes that may not be present locally..
60079                     graph.rebase(remoteGraph.childNodes(remote), [graph], false);
60080                     target = mergeNodes(base, remote, target);
60081                     target = mergeChildren(target, utilArrayUnion(local.nodes, remote.nodes), updates, graph);
60082
60083                 } else if (target.type === 'relation') {
60084                     target = mergeMembers(remote, target);
60085                 }
60086
60087                 target = mergeTags(base, remote, target);
60088
60089                 if (!_conflicts.length) {
60090                     graph = updateChildren(updates, graph).replace(target);
60091                 }
60092
60093                 return graph;
60094             };
60095
60096
60097             action.withOption = function(opt) {
60098                 _option = opt;
60099                 return action;
60100             };
60101
60102
60103             action.conflicts = function() {
60104                 return _conflicts;
60105             };
60106
60107
60108             return action;
60109         }
60110
60111         // https://github.com/openstreetmap/josm/blob/mirror/src/org/openstreetmap/josm/command/MoveCommand.java
60112         // https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/MoveNodeAction.as
60113         function actionMove(moveIDs, tryDelta, projection, cache) {
60114             var _delta = tryDelta;
60115
60116             function setupCache(graph) {
60117                 function canMove(nodeID) {
60118                     // Allow movement of any node that is in the selectedIDs list..
60119                     if (moveIDs.indexOf(nodeID) !== -1) { return true; }
60120
60121                     // Allow movement of a vertex where 2 ways meet..
60122                     var parents = graph.parentWays(graph.entity(nodeID));
60123                     if (parents.length < 3) { return true; }
60124
60125                     // Restrict movement of a vertex where >2 ways meet, unless all parentWays are moving too..
60126                     var parentsMoving = parents.every(function(way) { return cache.moving[way.id]; });
60127                     if (!parentsMoving) { delete cache.moving[nodeID]; }
60128
60129                     return parentsMoving;
60130                 }
60131
60132                 function cacheEntities(ids) {
60133                     for (var i = 0; i < ids.length; i++) {
60134                         var id = ids[i];
60135                         if (cache.moving[id]) { continue; }
60136                         cache.moving[id] = true;
60137
60138                         var entity = graph.hasEntity(id);
60139                         if (!entity) { continue; }
60140
60141                         if (entity.type === 'node') {
60142                             cache.nodes.push(id);
60143                             cache.startLoc[id] = entity.loc;
60144                         } else if (entity.type === 'way') {
60145                             cache.ways.push(id);
60146                             cacheEntities(entity.nodes);
60147                         } else {
60148                             cacheEntities(entity.members.map(function(member) {
60149                                 return member.id;
60150                             }));
60151                         }
60152                     }
60153                 }
60154
60155                 function cacheIntersections(ids) {
60156                     function isEndpoint(way, id) {
60157                         return !way.isClosed() && !!way.affix(id);
60158                     }
60159
60160                     for (var i = 0; i < ids.length; i++) {
60161                         var id = ids[i];
60162
60163                         // consider only intersections with 1 moved and 1 unmoved way.
60164                         var childNodes = graph.childNodes(graph.entity(id));
60165                         for (var j = 0; j < childNodes.length; j++) {
60166                             var node = childNodes[j];
60167                             var parents = graph.parentWays(node);
60168                             if (parents.length !== 2) { continue; }
60169
60170                             var moved = graph.entity(id);
60171                             var unmoved = null;
60172                             for (var k = 0; k < parents.length; k++) {
60173                                 var way = parents[k];
60174                                 if (!cache.moving[way.id]) {
60175                                     unmoved = way;
60176                                     break;
60177                                 }
60178                             }
60179                             if (!unmoved) { continue; }
60180
60181                             // exclude ways that are overly connected..
60182                             if (utilArrayIntersection(moved.nodes, unmoved.nodes).length > 2) { continue; }
60183                             if (moved.isArea() || unmoved.isArea()) { continue; }
60184
60185                             cache.intersections.push({
60186                                 nodeId: node.id,
60187                                 movedId: moved.id,
60188                                 unmovedId: unmoved.id,
60189                                 movedIsEP: isEndpoint(moved, node.id),
60190                                 unmovedIsEP: isEndpoint(unmoved, node.id)
60191                             });
60192                         }
60193                     }
60194                 }
60195
60196
60197                 if (!cache) {
60198                     cache = {};
60199                 }
60200                 if (!cache.ok) {
60201                     cache.moving = {};
60202                     cache.intersections = [];
60203                     cache.replacedVertex = {};
60204                     cache.startLoc = {};
60205                     cache.nodes = [];
60206                     cache.ways = [];
60207
60208                     cacheEntities(moveIDs);
60209                     cacheIntersections(cache.ways);
60210                     cache.nodes = cache.nodes.filter(canMove);
60211
60212                     cache.ok = true;
60213                 }
60214             }
60215
60216
60217             // Place a vertex where the moved vertex used to be, to preserve way shape..
60218             //
60219             //  Start:
60220             //      b ---- e
60221             //     / \
60222             //    /   \
60223             //   /     \
60224             //  a       c
60225             //
60226             //      *               node '*' added to preserve shape
60227             //     / \
60228             //    /   b ---- e      way `b,e` moved here:
60229             //   /     \
60230             //  a       c
60231             //
60232             //
60233             function replaceMovedVertex(nodeId, wayId, graph, delta) {
60234                 var way = graph.entity(wayId);
60235                 var moved = graph.entity(nodeId);
60236                 var movedIndex = way.nodes.indexOf(nodeId);
60237                 var len, prevIndex, nextIndex;
60238
60239                 if (way.isClosed()) {
60240                     len = way.nodes.length - 1;
60241                     prevIndex = (movedIndex + len - 1) % len;
60242                     nextIndex = (movedIndex + len + 1) % len;
60243                 } else {
60244                     len = way.nodes.length;
60245                     prevIndex = movedIndex - 1;
60246                     nextIndex = movedIndex + 1;
60247                 }
60248
60249                 var prev = graph.hasEntity(way.nodes[prevIndex]);
60250                 var next = graph.hasEntity(way.nodes[nextIndex]);
60251
60252                 // Don't add orig vertex at endpoint..
60253                 if (!prev || !next) { return graph; }
60254
60255                 var key = wayId + '_' + nodeId;
60256                 var orig = cache.replacedVertex[key];
60257                 if (!orig) {
60258                     orig = osmNode();
60259                     cache.replacedVertex[key] = orig;
60260                     cache.startLoc[orig.id] = cache.startLoc[nodeId];
60261                 }
60262
60263                 var start, end;
60264                 if (delta) {
60265                     start = projection(cache.startLoc[nodeId]);
60266                     end = projection.invert(geoVecAdd(start, delta));
60267                 } else {
60268                     end = cache.startLoc[nodeId];
60269                 }
60270                 orig = orig.move(end);
60271
60272                 var angle = Math.abs(geoAngle(orig, prev, projection) -
60273                         geoAngle(orig, next, projection)) * 180 / Math.PI;
60274
60275                 // Don't add orig vertex if it would just make a straight line..
60276                 if (angle > 175 && angle < 185) { return graph; }
60277
60278                 // moving forward or backward along way?
60279                 var p1 = [prev.loc, orig.loc, moved.loc, next.loc].map(projection);
60280                 var p2 = [prev.loc, moved.loc, orig.loc, next.loc].map(projection);
60281                 var d1 = geoPathLength(p1);
60282                 var d2 = geoPathLength(p2);
60283                 var insertAt = (d1 <= d2) ? movedIndex : nextIndex;
60284
60285                 // moving around closed loop?
60286                 if (way.isClosed() && insertAt === 0) { insertAt = len; }
60287
60288                 way = way.addNode(orig.id, insertAt);
60289                 return graph.replace(orig).replace(way);
60290             }
60291
60292
60293             // Remove duplicate vertex that might have been added by
60294             // replaceMovedVertex.  This is done after the unzorro checks.
60295             function removeDuplicateVertices(wayId, graph) {
60296                 var way = graph.entity(wayId);
60297                 var epsilon = 1e-6;
60298                 var prev, curr;
60299
60300                 function isInteresting(node, graph) {
60301                     return graph.parentWays(node).length > 1 ||
60302                         graph.parentRelations(node).length ||
60303                         node.hasInterestingTags();
60304                 }
60305
60306                 for (var i = 0; i < way.nodes.length; i++) {
60307                     curr = graph.entity(way.nodes[i]);
60308
60309                     if (prev && curr && geoVecEqual(prev.loc, curr.loc, epsilon)) {
60310                         if (!isInteresting(prev, graph)) {
60311                             way = way.removeNode(prev.id);
60312                             graph = graph.replace(way).remove(prev);
60313                         } else if (!isInteresting(curr, graph)) {
60314                             way = way.removeNode(curr.id);
60315                             graph = graph.replace(way).remove(curr);
60316                         }
60317                     }
60318
60319                     prev = curr;
60320                 }
60321
60322                 return graph;
60323             }
60324
60325
60326             // Reorder nodes around intersections that have moved..
60327             //
60328             //  Start:                way1.nodes: b,e         (moving)
60329             //  a - b - c ----- d     way2.nodes: a,b,c,d     (static)
60330             //      |                 vertex: b
60331             //      e                 isEP1: true,  isEP2, false
60332             //
60333             //  way1 `b,e` moved here:
60334             //  a ----- c = b - d
60335             //              |
60336             //              e
60337             //
60338             //  reorder nodes         way1.nodes: b,e
60339             //  a ----- c - b - d     way2.nodes: a,c,b,d
60340             //              |
60341             //              e
60342             //
60343             function unZorroIntersection(intersection, graph) {
60344                 var vertex = graph.entity(intersection.nodeId);
60345                 var way1 = graph.entity(intersection.movedId);
60346                 var way2 = graph.entity(intersection.unmovedId);
60347                 var isEP1 = intersection.movedIsEP;
60348                 var isEP2 = intersection.unmovedIsEP;
60349
60350                 // don't move the vertex if it is the endpoint of both ways.
60351                 if (isEP1 && isEP2) { return graph; }
60352
60353                 var nodes1 = graph.childNodes(way1).filter(function(n) { return n !== vertex; });
60354                 var nodes2 = graph.childNodes(way2).filter(function(n) { return n !== vertex; });
60355
60356                 if (way1.isClosed() && way1.first() === vertex.id) { nodes1.push(nodes1[0]); }
60357                 if (way2.isClosed() && way2.first() === vertex.id) { nodes2.push(nodes2[0]); }
60358
60359                 var edge1 = !isEP1 && geoChooseEdge(nodes1, projection(vertex.loc), projection);
60360                 var edge2 = !isEP2 && geoChooseEdge(nodes2, projection(vertex.loc), projection);
60361                 var loc;
60362
60363                 // snap vertex to nearest edge (or some point between them)..
60364                 if (!isEP1 && !isEP2) {
60365                     var epsilon = 1e-6, maxIter = 10;
60366                     for (var i = 0; i < maxIter; i++) {
60367                         loc = geoVecInterp(edge1.loc, edge2.loc, 0.5);
60368                         edge1 = geoChooseEdge(nodes1, projection(loc), projection);
60369                         edge2 = geoChooseEdge(nodes2, projection(loc), projection);
60370                         if (Math.abs(edge1.distance - edge2.distance) < epsilon) { break; }
60371                     }
60372                 } else if (!isEP1) {
60373                     loc = edge1.loc;
60374                 } else {
60375                     loc = edge2.loc;
60376                 }
60377
60378                 graph = graph.replace(vertex.move(loc));
60379
60380                 // if zorro happened, reorder nodes..
60381                 if (!isEP1 && edge1.index !== way1.nodes.indexOf(vertex.id)) {
60382                     way1 = way1.removeNode(vertex.id).addNode(vertex.id, edge1.index);
60383                     graph = graph.replace(way1);
60384                 }
60385                 if (!isEP2 && edge2.index !== way2.nodes.indexOf(vertex.id)) {
60386                     way2 = way2.removeNode(vertex.id).addNode(vertex.id, edge2.index);
60387                     graph = graph.replace(way2);
60388                 }
60389
60390                 return graph;
60391             }
60392
60393
60394             function cleanupIntersections(graph) {
60395                 for (var i = 0; i < cache.intersections.length; i++) {
60396                     var obj = cache.intersections[i];
60397                     graph = replaceMovedVertex(obj.nodeId, obj.movedId, graph, _delta);
60398                     graph = replaceMovedVertex(obj.nodeId, obj.unmovedId, graph, null);
60399                     graph = unZorroIntersection(obj, graph);
60400                     graph = removeDuplicateVertices(obj.movedId, graph);
60401                     graph = removeDuplicateVertices(obj.unmovedId, graph);
60402                 }
60403
60404                 return graph;
60405             }
60406
60407
60408             // check if moving way endpoint can cross an unmoved way, if so limit delta..
60409             function limitDelta(graph) {
60410                 function moveNode(loc) {
60411                     return geoVecAdd(projection(loc), _delta);
60412                 }
60413
60414                 for (var i = 0; i < cache.intersections.length; i++) {
60415                     var obj = cache.intersections[i];
60416
60417                     // Don't limit movement if this is vertex joins 2 endpoints..
60418                     if (obj.movedIsEP && obj.unmovedIsEP) { continue; }
60419                     // Don't limit movement if this vertex is not an endpoint anyway..
60420                     if (!obj.movedIsEP) { continue; }
60421
60422                     var node = graph.entity(obj.nodeId);
60423                     var start = projection(node.loc);
60424                     var end = geoVecAdd(start, _delta);
60425                     var movedNodes = graph.childNodes(graph.entity(obj.movedId));
60426                     var movedPath = movedNodes.map(function(n) { return moveNode(n.loc); });
60427                     var unmovedNodes = graph.childNodes(graph.entity(obj.unmovedId));
60428                     var unmovedPath = unmovedNodes.map(function(n) { return projection(n.loc); });
60429                     var hits = geoPathIntersections(movedPath, unmovedPath);
60430
60431                     for (var j = 0; i < hits.length; i++) {
60432                         if (geoVecEqual(hits[j], end)) { continue; }
60433                         var edge = geoChooseEdge(unmovedNodes, end, projection);
60434                         _delta = geoVecSubtract(projection(edge.loc), start);
60435                     }
60436                 }
60437             }
60438
60439
60440             var action = function(graph) {
60441                 if (_delta[0] === 0 && _delta[1] === 0) { return graph; }
60442
60443                 setupCache(graph);
60444
60445                 if (cache.intersections.length) {
60446                     limitDelta(graph);
60447                 }
60448
60449                 for (var i = 0; i < cache.nodes.length; i++) {
60450                     var node = graph.entity(cache.nodes[i]);
60451                     var start = projection(node.loc);
60452                     var end = geoVecAdd(start, _delta);
60453                     graph = graph.replace(node.move(projection.invert(end)));
60454                 }
60455
60456                 if (cache.intersections.length) {
60457                     graph = cleanupIntersections(graph);
60458                 }
60459
60460                 return graph;
60461             };
60462
60463
60464             action.delta = function() {
60465                 return _delta;
60466             };
60467
60468
60469             return action;
60470         }
60471
60472         function actionMoveMember(relationId, fromIndex, toIndex) {
60473             return function(graph) {
60474                 return graph.replace(graph.entity(relationId).moveMember(fromIndex, toIndex));
60475             };
60476         }
60477
60478         function actionMoveNode(nodeID, toLoc) {
60479
60480             var action = function(graph, t) {
60481                 if (t === null || !isFinite(t)) { t = 1; }
60482                 t = Math.min(Math.max(+t, 0), 1);
60483
60484                 var node = graph.entity(nodeID);
60485                 return graph.replace(
60486                     node.move(geoVecInterp(node.loc, toLoc, t))
60487                 );
60488             };
60489
60490             action.transitionable = true;
60491
60492             return action;
60493         }
60494
60495         function actionNoop() {
60496             return function(graph) {
60497                 return graph;
60498             };
60499         }
60500
60501         function actionOrthogonalize(wayID, projection, vertexID, degThresh, ep) {
60502             var epsilon = ep || 1e-4;
60503             var threshold = degThresh || 13;  // degrees within right or straight to alter
60504
60505             // We test normalized dot products so we can compare as cos(angle)
60506             var lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180);
60507             var upperThreshold = Math.cos(threshold * Math.PI / 180);
60508
60509
60510             var action = function(graph, t) {
60511                 if (t === null || !isFinite(t)) { t = 1; }
60512                 t = Math.min(Math.max(+t, 0), 1);
60513
60514                 var way = graph.entity(wayID);
60515                 way = way.removeNode('');   // sanity check - remove any consecutive duplicates
60516
60517                 if (way.tags.nonsquare) {
60518                     var tags = Object.assign({}, way.tags);
60519                     // since we're squaring, remove indication that this is physically unsquare
60520                     delete tags.nonsquare;
60521                     way = way.update({tags: tags});
60522                 }
60523
60524                 graph = graph.replace(way);
60525
60526                 var isClosed = way.isClosed();
60527                 var nodes = graph.childNodes(way).slice();  // shallow copy
60528                 if (isClosed) { nodes.pop(); }
60529
60530                 if (vertexID !== undefined) {
60531                     nodes = nodeSubset(nodes, vertexID, isClosed);
60532                     if (nodes.length !== 3) { return graph; }
60533                 }
60534
60535                 // note: all geometry functions here use the unclosed node/point/coord list
60536
60537                 var nodeCount = {};
60538                 var points = [];
60539                 var corner = { i: 0, dotp: 1 };
60540                 var node, point, loc, score, motions, i, j;
60541
60542                 for (i = 0; i < nodes.length; i++) {
60543                     node = nodes[i];
60544                     nodeCount[node.id] = (nodeCount[node.id] || 0) + 1;
60545                     points.push({ id: node.id, coord: projection(node.loc) });
60546                 }
60547
60548
60549                 if (points.length === 3) {   // move only one vertex for right triangle
60550                     for (i = 0; i < 1000; i++) {
60551                         motions = points.map(calcMotion);
60552
60553                         points[corner.i].coord = geoVecAdd(points[corner.i].coord, motions[corner.i]);
60554                         score = corner.dotp;
60555                         if (score < epsilon) {
60556                             break;
60557                         }
60558                     }
60559
60560                     node = graph.entity(nodes[corner.i].id);
60561                     loc = projection.invert(points[corner.i].coord);
60562                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
60563
60564                 } else {
60565                     var straights = [];
60566                     var simplified = [];
60567
60568                     // Remove points from nearly straight sections..
60569                     // This produces a simplified shape to orthogonalize
60570                     for (i = 0; i < points.length; i++) {
60571                         point = points[i];
60572                         var dotp = 0;
60573                         if (isClosed || (i > 0 && i < points.length - 1)) {
60574                             var a = points[(i - 1 + points.length) % points.length];
60575                             var b = points[(i + 1) % points.length];
60576                             dotp = Math.abs(geoOrthoNormalizedDotProduct(a.coord, b.coord, point.coord));
60577                         }
60578
60579                         if (dotp > upperThreshold) {
60580                             straights.push(point);
60581                         } else {
60582                             simplified.push(point);
60583                         }
60584                     }
60585
60586                     // Orthogonalize the simplified shape
60587                     var bestPoints = clonePoints(simplified);
60588                     var originalPoints = clonePoints(simplified);
60589
60590                     score = Infinity;
60591                     for (i = 0; i < 1000; i++) {
60592                         motions = simplified.map(calcMotion);
60593
60594                         for (j = 0; j < motions.length; j++) {
60595                             simplified[j].coord = geoVecAdd(simplified[j].coord, motions[j]);
60596                         }
60597                         var newScore = geoOrthoCalcScore(simplified, isClosed, epsilon, threshold);
60598                         if (newScore < score) {
60599                             bestPoints = clonePoints(simplified);
60600                             score = newScore;
60601                         }
60602                         if (score < epsilon) {
60603                             break;
60604                         }
60605                     }
60606
60607                     var bestCoords = bestPoints.map(function(p) { return p.coord; });
60608                     if (isClosed) { bestCoords.push(bestCoords[0]); }
60609
60610                     // move the nodes that should move
60611                     for (i = 0; i < bestPoints.length; i++) {
60612                         point = bestPoints[i];
60613                         if (!geoVecEqual(originalPoints[i].coord, point.coord)) {
60614                             node = graph.entity(point.id);
60615                             loc = projection.invert(point.coord);
60616                             graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
60617                         }
60618                     }
60619
60620                     // move the nodes along straight segments
60621                     for (i = 0; i < straights.length; i++) {
60622                         point = straights[i];
60623                         if (nodeCount[point.id] > 1) { continue; }   // skip self-intersections
60624
60625                         node = graph.entity(point.id);
60626
60627                         if (t === 1 &&
60628                             graph.parentWays(node).length === 1 &&
60629                             graph.parentRelations(node).length === 0 &&
60630                             !node.hasInterestingTags()
60631                         ) {
60632                             // remove uninteresting points..
60633                             graph = actionDeleteNode(node.id)(graph);
60634
60635                         } else {
60636                             // move interesting points to the nearest edge..
60637                             var choice = geoVecProject(point.coord, bestCoords);
60638                             if (choice) {
60639                                 loc = projection.invert(choice.target);
60640                                 graph = graph.replace(node.move(geoVecInterp(node.loc, loc, t)));
60641                             }
60642                         }
60643                     }
60644                 }
60645
60646                 return graph;
60647
60648
60649                 function clonePoints(array) {
60650                     return array.map(function(p) {
60651                         return { id: p.id, coord: [p.coord[0], p.coord[1]] };
60652                     });
60653                 }
60654
60655
60656                 function calcMotion(point, i, array) {
60657                     // don't try to move the endpoints of a non-closed way.
60658                     if (!isClosed && (i === 0 || i === array.length - 1)) { return [0, 0]; }
60659                     // don't try to move a node that appears more than once (self intersection)
60660                     if (nodeCount[array[i].id] > 1) { return [0, 0]; }
60661
60662                     var a = array[(i - 1 + array.length) % array.length].coord;
60663                     var origin = point.coord;
60664                     var b = array[(i + 1) % array.length].coord;
60665                     var p = geoVecSubtract(a, origin);
60666                     var q = geoVecSubtract(b, origin);
60667
60668                     var scale = 2 * Math.min(geoVecLength(p), geoVecLength(q));
60669                     p = geoVecNormalize(p);
60670                     q = geoVecNormalize(q);
60671
60672                     var dotp = (p[0] * q[0] + p[1] * q[1]);
60673                     var val = Math.abs(dotp);
60674
60675                     if (val < lowerThreshold) {  // nearly orthogonal
60676                         corner.i = i;
60677                         corner.dotp = val;
60678                         var vec = geoVecNormalize(geoVecAdd(p, q));
60679                         return geoVecScale(vec, 0.1 * dotp * scale);
60680                     }
60681
60682                     return [0, 0];   // do nothing
60683                 }
60684             };
60685
60686
60687             // if we are only orthogonalizing one vertex,
60688             // get that vertex and the previous and next
60689             function nodeSubset(nodes, vertexID, isClosed) {
60690                 var first = isClosed ? 0 : 1;
60691                 var last = isClosed ? nodes.length : nodes.length - 1;
60692
60693                 for (var i = first; i < last; i++) {
60694                     if (nodes[i].id === vertexID) {
60695                         return [
60696                             nodes[(i - 1 + nodes.length) % nodes.length],
60697                             nodes[i],
60698                             nodes[(i + 1) % nodes.length]
60699                         ];
60700                     }
60701                 }
60702
60703                 return [];
60704             }
60705
60706
60707             action.disabled = function(graph) {
60708                 var way = graph.entity(wayID);
60709                 way = way.removeNode('');  // sanity check - remove any consecutive duplicates
60710                 graph = graph.replace(way);
60711
60712                 var isClosed = way.isClosed();
60713                 var nodes = graph.childNodes(way).slice();  // shallow copy
60714                 if (isClosed) { nodes.pop(); }
60715
60716                 var allowStraightAngles = false;
60717                 if (vertexID !== undefined) {
60718                     allowStraightAngles = true;
60719                     nodes = nodeSubset(nodes, vertexID, isClosed);
60720                     if (nodes.length !== 3) { return 'end_vertex'; }
60721                 }
60722
60723                 var coords = nodes.map(function(n) { return projection(n.loc); });
60724                 var score = geoOrthoCanOrthogonalize(coords, isClosed, epsilon, threshold, allowStraightAngles);
60725
60726                 if (score === null) {
60727                     return 'not_squarish';
60728                 } else if (score === 0) {
60729                     return 'square_enough';
60730                 } else {
60731                     return false;
60732                 }
60733             };
60734
60735
60736             action.transitionable = true;
60737
60738             return action;
60739         }
60740
60741         // `actionRestrictTurn` creates a turn restriction relation.
60742         //
60743         // `turn` must be an `osmTurn` object
60744         // see osm/intersection.js, pathToTurn()
60745         //
60746         // This specifies a restriction of type `restriction` when traveling from
60747         // `turn.from.way` toward `turn.to.way` via `turn.via.node` OR `turn.via.ways`.
60748         // (The action does not check that these entities form a valid intersection.)
60749         //
60750         // From, to, and via ways should be split before calling this action.
60751         // (old versions of the code would split the ways here, but we no longer do it)
60752         //
60753         // For testing convenience, accepts a restrictionID to assign to the new
60754         // relation. Normally, this will be undefined and the relation will
60755         // automatically be assigned a new ID.
60756         //
60757         function actionRestrictTurn(turn, restrictionType, restrictionID) {
60758
60759             return function(graph) {
60760                 var fromWay = graph.entity(turn.from.way);
60761                 var toWay = graph.entity(turn.to.way);
60762                 var viaNode = turn.via.node && graph.entity(turn.via.node);
60763                 var viaWays = turn.via.ways && turn.via.ways.map(function(id) { return graph.entity(id); });
60764                 var members = [];
60765
60766                 members.push({ id: fromWay.id, type: 'way',  role: 'from' });
60767
60768                 if (viaNode) {
60769                     members.push({ id: viaNode.id,  type: 'node', role: 'via' });
60770                 } else if (viaWays) {
60771                     viaWays.forEach(function(viaWay) {
60772                         members.push({ id: viaWay.id,  type: 'way', role: 'via' });
60773                     });
60774                 }
60775
60776                 members.push({ id: toWay.id, type: 'way',  role: 'to' });
60777
60778                 return graph.replace(osmRelation({
60779                     id: restrictionID,
60780                     tags: {
60781                         type: 'restriction',
60782                         restriction: restrictionType
60783                     },
60784                     members: members
60785                 }));
60786             };
60787         }
60788
60789         function actionRevert(id) {
60790             var action = function(graph) {
60791                 var entity = graph.hasEntity(id),
60792                     base = graph.base().entities[id];
60793
60794                 if (entity && !base) {    // entity will be removed..
60795                     if (entity.type === 'node') {
60796                         graph.parentWays(entity)
60797                             .forEach(function(parent) {
60798                                 parent = parent.removeNode(id);
60799                                 graph = graph.replace(parent);
60800
60801                                 if (parent.isDegenerate()) {
60802                                     graph = actionDeleteWay(parent.id)(graph);
60803                                 }
60804                             });
60805                     }
60806
60807                     graph.parentRelations(entity)
60808                         .forEach(function(parent) {
60809                             parent = parent.removeMembersWithID(id);
60810                             graph = graph.replace(parent);
60811
60812                             if (parent.isDegenerate()) {
60813                                 graph = actionDeleteRelation(parent.id)(graph);
60814                             }
60815                         });
60816                 }
60817
60818                 return graph.revert(id);
60819             };
60820
60821             return action;
60822         }
60823
60824         function actionRotate(rotateIds, pivot, angle, projection) {
60825
60826             var action = function(graph) {
60827                 return graph.update(function(graph) {
60828                     utilGetAllNodes(rotateIds, graph).forEach(function(node) {
60829                         var point = geoRotate([projection(node.loc)], angle, pivot)[0];
60830                         graph = graph.replace(node.move(projection.invert(point)));
60831                     });
60832                 });
60833             };
60834
60835             return action;
60836         }
60837
60838         /* Align nodes along their common axis */
60839         function actionStraightenNodes(nodeIDs, projection) {
60840
60841             function positionAlongWay(a, o, b) {
60842                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
60843             }
60844
60845
60846             var action = function(graph, t) {
60847                 if (t === null || !isFinite(t)) { t = 1; }
60848                 t = Math.min(Math.max(+t, 0), 1);
60849
60850                 var nodes = nodeIDs.map(function(id) { return graph.entity(id); });
60851                 var points = nodes.map(function(n) { return projection(n.loc); });
60852                 var ssr = geoGetSmallestSurroundingRectangle(points);
60853
60854                 // Choose line pq = axis of symmetry.
60855                 // The shape's surrounding rectangle has 2 axes of symmetry.
60856                 // Snap points to the long axis
60857                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
60858                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
60859                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
60860                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
60861                 var p, q;
60862
60863                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
60864                 if (isLong) {
60865                     p = p1;
60866                     q = q1;
60867                 } else {
60868                     p = p2;
60869                     q = q2;
60870                 }
60871
60872                 // Move points onto line pq
60873                 for (var i = 0; i < points.length; i++) {
60874                     var node = nodes[i];
60875                     var point = points[i];
60876                     var u = positionAlongWay(point, p, q);
60877                     var point2 = geoVecInterp(p, q, u);
60878                     var loc2 = projection.invert(point2);
60879                     graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
60880                 }
60881
60882                 return graph;
60883             };
60884
60885
60886             action.disabled = function() {
60887                 return false;
60888             };
60889
60890
60891             action.transitionable = true;
60892
60893
60894             return action;
60895         }
60896
60897         /*
60898          * Based on https://github.com/openstreetmap/potlatch2/net/systemeD/potlatch2/tools/Straighten.as
60899          */
60900         function actionStraightenWay(selectedIDs, projection) {
60901
60902             function positionAlongWay(a, o, b) {
60903                 return geoVecDot(a, b, o) / geoVecDot(b, b, o);
60904             }
60905
60906             // Return all selected ways as a continuous, ordered array of nodes
60907             function allNodes(graph) {
60908                 var nodes = [];
60909                 var startNodes = [];
60910                 var endNodes = [];
60911                 var remainingWays = [];
60912                 var selectedWays = selectedIDs.filter(function(w) {
60913                     return graph.entity(w).type === 'way';
60914                 });
60915                 var selectedNodes = selectedIDs.filter(function(n) {
60916                     return graph.entity(n).type === 'node';
60917                 });
60918
60919                 for (var i = 0; i < selectedWays.length; i++) {
60920                     var way = graph.entity(selectedWays[i]);
60921                     nodes = way.nodes.slice(0);
60922                     remainingWays.push(nodes);
60923                     startNodes.push(nodes[0]);
60924                     endNodes.push(nodes[nodes.length-1]);
60925                 }
60926
60927                 // Remove duplicate end/startNodes (duplicate nodes cannot be at the line end,
60928                 //   and need to be removed so currNode difference calculation below works)
60929                 // i.e. ["n-1", "n-1", "n-2"] => ["n-2"]
60930                 startNodes = startNodes.filter(function(n) {
60931                     return startNodes.indexOf(n) === startNodes.lastIndexOf(n);
60932                 });
60933                 endNodes = endNodes.filter(function(n) {
60934                     return endNodes.indexOf(n) === endNodes.lastIndexOf(n);
60935                 });
60936
60937                 // Choose the initial endpoint to start from
60938                 var currNode = utilArrayDifference(startNodes, endNodes)
60939                     .concat(utilArrayDifference(endNodes, startNodes))[0];
60940                 var nextWay = [];
60941                 nodes = [];
60942
60943                 // Create nested function outside of loop to avoid "function in loop" lint error
60944                 var getNextWay = function(currNode, remainingWays) {
60945                     return remainingWays.filter(function(way) {
60946                         return way[0] === currNode || way[way.length-1] === currNode;
60947                     })[0];
60948                 };
60949
60950                 // Add nodes to end of nodes array, until all ways are added
60951                 while (remainingWays.length) {
60952                     nextWay = getNextWay(currNode, remainingWays);
60953                     remainingWays = utilArrayDifference(remainingWays, [nextWay]);
60954
60955                     if (nextWay[0] !== currNode) {
60956                         nextWay.reverse();
60957                     }
60958                     nodes = nodes.concat(nextWay);
60959                     currNode = nodes[nodes.length-1];
60960                 }
60961
60962                 // If user selected 2 nodes to straighten between, then slice nodes array to those nodes
60963                 if (selectedNodes.length === 2) {
60964                     var startNodeIdx = nodes.indexOf(selectedNodes[0]);
60965                     var endNodeIdx = nodes.indexOf(selectedNodes[1]);
60966                     var sortedStartEnd = [startNodeIdx, endNodeIdx];
60967
60968                     sortedStartEnd.sort(function(a, b) { return a - b; });
60969                     nodes = nodes.slice(sortedStartEnd[0], sortedStartEnd[1]+1);
60970                 }
60971
60972                 return nodes.map(function(n) { return graph.entity(n); });
60973             }
60974
60975
60976             var action = function(graph, t) {
60977                 if (t === null || !isFinite(t)) { t = 1; }
60978                 t = Math.min(Math.max(+t, 0), 1);
60979
60980                 var nodes = allNodes(graph);
60981                 var points = nodes.map(function(n) { return projection(n.loc); });
60982                 var startPoint = points[0];
60983                 var endPoint = points[points.length-1];
60984                 var toDelete = [];
60985                 var i;
60986
60987                 for (i = 1; i < points.length-1; i++) {
60988                     var node = nodes[i];
60989                     var point = points[i];
60990
60991                     if (t < 1 || graph.parentWays(node).length > 1 ||
60992                         graph.parentRelations(node).length ||
60993                         node.hasInterestingTags()
60994                     ) {
60995                         var u = positionAlongWay(point, startPoint, endPoint);
60996                         var p = geoVecInterp(startPoint, endPoint, u);
60997                         var loc2 = projection.invert(p);
60998                         graph = graph.replace(node.move(geoVecInterp(node.loc, loc2, t)));
60999
61000                     } else {
61001                         // safe to delete
61002                         if (toDelete.indexOf(node) === -1) {
61003                             toDelete.push(node);
61004                         }
61005                     }
61006                 }
61007
61008                 for (i = 0; i < toDelete.length; i++) {
61009                     graph = actionDeleteNode(toDelete[i].id)(graph);
61010                 }
61011
61012                 return graph;
61013             };
61014
61015
61016             action.disabled = function(graph) {
61017                 // check way isn't too bendy
61018                 var nodes = allNodes(graph);
61019                 var points = nodes.map(function(n) { return projection(n.loc); });
61020                 var startPoint = points[0];
61021                 var endPoint = points[points.length-1];
61022                 var threshold = 0.2 * geoVecLength(startPoint, endPoint);
61023                 var i;
61024
61025                 if (threshold === 0) {
61026                     return 'too_bendy';
61027                 }
61028
61029                 for (i = 1; i < points.length - 1; i++) {
61030                     var point = points[i];
61031                     var u = positionAlongWay(point, startPoint, endPoint);
61032                     var p = geoVecInterp(startPoint, endPoint, u);
61033                     var dist = geoVecLength(p, point);
61034
61035                     // to bendy if point is off by 20% of total start/end distance in projected space
61036                     if (isNaN(dist) || dist > threshold) {
61037                         return 'too_bendy';
61038                     }
61039                 }
61040             };
61041
61042             action.transitionable = true;
61043
61044
61045             return action;
61046         }
61047
61048         // `actionUnrestrictTurn` deletes a turn restriction relation.
61049         //
61050         // `turn` must be an `osmTurn` object with a `restrictionID` property.
61051         // see osm/intersection.js, pathToTurn()
61052         //
61053         function actionUnrestrictTurn(turn) {
61054             return function(graph) {
61055                 return actionDeleteRelation(turn.restrictionID)(graph);
61056             };
61057         }
61058
61059         /* Reflect the given area around its axis of symmetry */
61060         function actionReflect(reflectIds, projection) {
61061             var _useLongAxis = true;
61062
61063
61064             var action = function(graph, t) {
61065                 if (t === null || !isFinite(t)) { t = 1; }
61066                 t = Math.min(Math.max(+t, 0), 1);
61067
61068                 var nodes = utilGetAllNodes(reflectIds, graph);
61069                 var points = nodes.map(function(n) { return projection(n.loc); });
61070                 var ssr = geoGetSmallestSurroundingRectangle(points);
61071
61072                 // Choose line pq = axis of symmetry.
61073                 // The shape's surrounding rectangle has 2 axes of symmetry.
61074                 // Reflect across the longer axis by default.
61075                 var p1 = [(ssr.poly[0][0] + ssr.poly[1][0]) / 2, (ssr.poly[0][1] + ssr.poly[1][1]) / 2 ];
61076                 var q1 = [(ssr.poly[2][0] + ssr.poly[3][0]) / 2, (ssr.poly[2][1] + ssr.poly[3][1]) / 2 ];
61077                 var p2 = [(ssr.poly[3][0] + ssr.poly[4][0]) / 2, (ssr.poly[3][1] + ssr.poly[4][1]) / 2 ];
61078                 var q2 = [(ssr.poly[1][0] + ssr.poly[2][0]) / 2, (ssr.poly[1][1] + ssr.poly[2][1]) / 2 ];
61079                 var p, q;
61080
61081                 var isLong = (geoVecLength(p1, q1) > geoVecLength(p2, q2));
61082                 if ((_useLongAxis && isLong) || (!_useLongAxis && !isLong)) {
61083                     p = p1;
61084                     q = q1;
61085                 } else {
61086                     p = p2;
61087                     q = q2;
61088                 }
61089
61090                 // reflect c across pq
61091                 // http://math.stackexchange.com/questions/65503/point-reflection-over-a-line
61092                 var dx = q[0] - p[0];
61093                 var dy = q[1] - p[1];
61094                 var a = (dx * dx - dy * dy) / (dx * dx + dy * dy);
61095                 var b = 2 * dx * dy / (dx * dx + dy * dy);
61096                 for (var i = 0; i < nodes.length; i++) {
61097                     var node = nodes[i];
61098                     var c = projection(node.loc);
61099                     var c2 = [
61100                         a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
61101                         b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
61102                     ];
61103                     var loc2 = projection.invert(c2);
61104                     node = node.move(geoVecInterp(node.loc, loc2, t));
61105                     graph = graph.replace(node);
61106                 }
61107
61108                 return graph;
61109             };
61110
61111
61112             action.useLongAxis = function(val) {
61113                 if (!arguments.length) { return _useLongAxis; }
61114                 _useLongAxis = val;
61115                 return action;
61116             };
61117
61118
61119             action.transitionable = true;
61120
61121
61122             return action;
61123         }
61124
61125         function actionUpgradeTags(entityId, oldTags, replaceTags) {
61126
61127             return function(graph) {
61128                 var entity = graph.entity(entityId);
61129                 var tags = Object.assign({}, entity.tags);  // shallow copy
61130                 var transferValue;
61131                 var semiIndex;
61132
61133                 for (var oldTagKey in oldTags) {
61134                     if (oldTags[oldTagKey] === '*') {
61135                         transferValue = tags[oldTagKey];
61136                         delete tags[oldTagKey];
61137                     } else {
61138                         var vals = tags[oldTagKey].split(';').filter(Boolean);
61139                         var oldIndex = vals.indexOf(oldTags[oldTagKey]);
61140                         if (vals.length === 1 || oldIndex === -1) {
61141                             delete tags[oldTagKey];
61142                         } else {
61143                             if (replaceTags && replaceTags[oldTagKey]) {
61144                                 // replacing a value within a semicolon-delimited value, note the index
61145                                 semiIndex = oldIndex;
61146                             }
61147                             vals.splice(oldIndex, 1);
61148                             tags[oldTagKey] = vals.join(';');
61149                         }
61150                     }
61151                 }
61152
61153                 if (replaceTags) {
61154                     for (var replaceKey in replaceTags) {
61155                         var replaceValue = replaceTags[replaceKey];
61156                         if (replaceValue === '*') {
61157                             if (tags[replaceKey] && tags[replaceKey] !== 'no') {
61158                                 // allow any pre-existing value except `no` (troll tag)
61159                                 continue;
61160                             } else {
61161                                 // otherwise assume `yes` is okay
61162                                 tags[replaceKey] = 'yes';
61163                             }
61164                         } else if (replaceValue === '$1') {
61165                             tags[replaceKey] = transferValue;
61166                         } else {
61167                             if (tags[replaceKey] && oldTags[replaceKey] && semiIndex !== undefined) {
61168                                 // don't override preexisting values
61169                                 var existingVals = tags[replaceKey].split(';').filter(Boolean);
61170                                 if (existingVals.indexOf(replaceValue) === -1) {
61171                                     existingVals.splice(semiIndex, 0, replaceValue);
61172                                     tags[replaceKey] = existingVals.join(';');
61173                                 }
61174                             } else {
61175                                 tags[replaceKey] = replaceValue;
61176                             }
61177                         }
61178                     }
61179                 }
61180
61181                 return graph.replace(entity.update({ tags: tags }));
61182             };
61183         }
61184
61185         function behaviorEdit(context) {
61186
61187             function behavior() {
61188                 context.map()
61189                     .minzoom(context.minEditableZoom());
61190             }
61191
61192
61193             behavior.off = function() {
61194                 context.map()
61195                     .minzoom(0);
61196             };
61197
61198             return behavior;
61199         }
61200
61201         /*
61202            The hover behavior adds the `.hover` class on mouseover to all elements to which
61203            the identical datum is bound, and removes it on mouseout.
61204
61205            The :hover pseudo-class is insufficient for iD's purposes because a datum's visual
61206            representation may consist of several elements scattered throughout the DOM hierarchy.
61207            Only one of these elements can have the :hover pseudo-class, but all of them will
61208            have the .hover class.
61209          */
61210         function behaviorHover(context) {
61211             var dispatch$1 = dispatch('hover');
61212             var _selection = d3_select(null);
61213             var _newNodeId = null;
61214             var _initialNodeID = null;
61215             var _buttonDown;
61216             var _altDisables;
61217             var _ignoreVertex;
61218             var _target;
61219
61220
61221             function keydown() {
61222                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
61223                     _selection.selectAll('.hover')
61224                         .classed('hover-suppressed', true)
61225                         .classed('hover', false);
61226
61227                     _selection
61228                         .classed('hover-disabled', true);
61229
61230                     dispatch$1.call('hover', this, null);
61231                 }
61232             }
61233
61234
61235             function keyup() {
61236                 if (_altDisables && event.keyCode === utilKeybinding.modifierCodes.alt) {
61237                     _selection.selectAll('.hover-suppressed')
61238                         .classed('hover-suppressed', false)
61239                         .classed('hover', true);
61240
61241                     _selection
61242                         .classed('hover-disabled', false);
61243
61244                     dispatch$1.call('hover', this, _target ? _target.id : null);
61245                 }
61246             }
61247
61248
61249             function behavior(selection) {
61250                 _selection = selection;
61251
61252                 if (_initialNodeID) {
61253                     _newNodeId = _initialNodeID;
61254                     _initialNodeID = null;
61255                 } else {
61256                     _newNodeId = null;
61257                 }
61258
61259                 _selection
61260                     .on('mouseover.hover', mouseover)
61261                     .on('mouseout.hover', mouseout)
61262                     .on('mousedown.hover', mousedown);
61263
61264                 d3_select(window)
61265                     .on('keydown.hover', keydown)
61266                     .on('keyup.hover', keyup);
61267
61268
61269                 function mouseover() {
61270                     if (_buttonDown) { return; }
61271                     var target = event.target;
61272                     enter(target ? target.__data__ : null);
61273                 }
61274
61275
61276                 function mouseout() {
61277                     if (_buttonDown) { return; }
61278                     var target = event.relatedTarget;
61279                     enter(target ? target.__data__ : null);
61280                 }
61281
61282
61283                 function mousedown() {
61284                     _buttonDown = true;
61285                     d3_select(window)
61286                         .on('mouseup.hover', mouseup, true);
61287                 }
61288
61289
61290                 function mouseup() {
61291                     _buttonDown = false;
61292                     d3_select(window)
61293                         .on('mouseup.hover', null, true);
61294                 }
61295
61296                 function allowsVertex(d) {
61297                     return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
61298                 }
61299
61300                 function modeAllowsHover(target) {
61301                     var mode = context.mode();
61302                     if (mode.id === 'add-point') {
61303                         return mode.preset.matchGeometry('vertex') ||
61304                             (target.type !== 'way' && target.geometry(context.graph()) !== 'vertex');
61305                     }
61306                     return true;
61307                 }
61308
61309                 function enter(datum) {
61310                     if (datum === _target) { return; }
61311                     _target = datum;
61312
61313                     _selection.selectAll('.hover')
61314                         .classed('hover', false);
61315                     _selection.selectAll('.hover-suppressed')
61316                         .classed('hover-suppressed', false);
61317
61318                     // What are we hovering over?
61319                     var entity, selector;
61320                     if (datum && datum.__featurehash__) {
61321                         entity = datum;
61322                         selector = '.data' + datum.__featurehash__;
61323
61324                     } else if (datum instanceof qaError) {
61325                         entity = datum;
61326                         selector = '.' + datum.service + '.error_id-' + datum.id;
61327
61328                     } else if (datum instanceof osmNote) {
61329                         entity = datum;
61330                         selector = '.note-' + datum.id;
61331
61332                     } else if (datum instanceof osmEntity) {
61333                         entity = datum;
61334                         selector = '.' + entity.id;
61335                         if (entity.type === 'relation') {
61336                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
61337                         }
61338                     } else if (datum && datum.properties && (datum.properties.entity instanceof osmEntity)) {
61339                         entity = datum.properties.entity;
61340                         selector = '.' + entity.id;
61341                         if (entity.type === 'relation') {
61342                             entity.members.forEach(function(member) { selector += ', .' + member.id; });
61343                         }
61344                     }
61345
61346                     var mode = context.mode();
61347
61348                     // Update hover state and dispatch event
61349                     if (entity && entity.id !== _newNodeId) {
61350                         // If drawing a way, don't hover on a node that was just placed. #3974
61351
61352                         if ((mode.id === 'draw-line' || mode.id === 'draw-area') && !_newNodeId && entity.type === 'node') {
61353                             _newNodeId = entity.id;
61354                             return;
61355                         }
61356
61357                         var suppressed = (_altDisables && event && event.altKey) ||
61358                             (entity.type === 'node' && _ignoreVertex && !allowsVertex(entity)) ||
61359                             !modeAllowsHover(entity);
61360                         _selection.selectAll(selector)
61361                             .classed(suppressed ? 'hover-suppressed' : 'hover', true);
61362
61363                         dispatch$1.call('hover', this, !suppressed && entity);
61364
61365                     } else {
61366                         dispatch$1.call('hover', this, null);
61367                     }
61368                 }
61369             }
61370
61371
61372             behavior.off = function(selection) {
61373                 selection.selectAll('.hover')
61374                     .classed('hover', false);
61375                 selection.selectAll('.hover-suppressed')
61376                     .classed('hover-suppressed', false);
61377                 selection
61378                     .classed('hover-disabled', false);
61379
61380                 selection
61381                     .on('mouseover.hover', null)
61382                     .on('mouseout.hover', null)
61383                     .on('mousedown.hover', null);
61384
61385                 d3_select(window)
61386                     .on('keydown.hover', null)
61387                     .on('keyup.hover', null);
61388             };
61389
61390
61391             behavior.altDisables = function(val) {
61392                 if (!arguments.length) { return _altDisables; }
61393                 _altDisables = val;
61394                 return behavior;
61395             };
61396
61397             behavior.ignoreVertex = function(val) {
61398                 if (!arguments.length) { return _ignoreVertex; }
61399                 _ignoreVertex = val;
61400                 return behavior;
61401             };
61402
61403             behavior.initialNodeID = function(nodeId) {
61404                 _initialNodeID = nodeId;
61405                 return behavior;
61406             };
61407
61408             return utilRebind(behavior, dispatch$1, 'on');
61409         }
61410
61411         function refresh(selection, node) {
61412             var cr = node.getBoundingClientRect();
61413             var prop = [cr.width, cr.height];
61414             selection.property('__dimensions__', prop);
61415             return prop;
61416         }
61417
61418         function utilGetDimensions(selection, force) {
61419             if (!selection || selection.empty()) {
61420                 return [0, 0];
61421             }
61422             var node = selection.node(),
61423                 cached = selection.property('__dimensions__');
61424             return (!cached || force) ? refresh(selection, node) : cached;
61425         }
61426
61427
61428         function utilSetDimensions(selection, dimensions) {
61429             if (!selection || selection.empty()) {
61430                 return selection;
61431             }
61432             var node = selection.node();
61433             if (dimensions === null) {
61434                 refresh(selection, node);
61435                 return selection;
61436             }
61437             return selection
61438                 .property('__dimensions__', [dimensions[0], dimensions[1]])
61439                 .attr('width', dimensions[0])
61440                 .attr('height', dimensions[1]);
61441         }
61442
61443         function behaviorTail() {
61444             var container;
61445             var xmargin = 25;
61446             var tooltipSize = [0, 0];
61447             var selectionSize = [0, 0];
61448             var _text;
61449
61450
61451             function behavior(selection) {
61452                 if (!_text) { return; }
61453
61454                 d3_select(window)
61455                     .on('resize.tail', function() { selectionSize = utilGetDimensions(selection); });
61456
61457                 container = d3_select(document.body)
61458                     .append('div')
61459                     .style('display', 'none')
61460                     .attr('class', 'tail popover-inner');
61461
61462                 container.append('div')
61463                     .text(_text);
61464
61465                 selection
61466                     .on('mousemove.tail', mousemove)
61467                     .on('mouseenter.tail', mouseenter)
61468                     .on('mouseleave.tail', mouseleave);
61469
61470                 container
61471                     .on('mousemove.tail', mousemove);
61472
61473                 tooltipSize = utilGetDimensions(container);
61474                 selectionSize = utilGetDimensions(selection);
61475
61476
61477                 function show() {
61478                     container.style('display', 'block');
61479                     tooltipSize = utilGetDimensions(container);
61480                 }
61481
61482
61483                 function mousemove() {
61484                     if (container.style('display') === 'none') { show(); }
61485                     var xoffset = ((event.clientX + tooltipSize[0] + xmargin) > selectionSize[0]) ?
61486                         -tooltipSize[0] - xmargin : xmargin;
61487                     container.classed('left', xoffset > 0);
61488                     utilSetTransform(container, event.clientX + xoffset, event.clientY);
61489                 }
61490
61491
61492                 function mouseleave() {
61493                     if (event.relatedTarget !== container.node()) {
61494                         container.style('display', 'none');
61495                     }
61496                 }
61497
61498
61499                 function mouseenter() {
61500                     if (event.relatedTarget !== container.node()) {
61501                         show();
61502                     }
61503                 }
61504             }
61505
61506
61507             behavior.off = function(selection) {
61508                 if (!_text) { return; }
61509
61510                 container
61511                     .on('mousemove.tail', null)
61512                     .remove();
61513
61514                 selection
61515                     .on('mousemove.tail', null)
61516                     .on('mouseenter.tail', null)
61517                     .on('mouseleave.tail', null);
61518
61519                 d3_select(window)
61520                     .on('resize.tail', null);
61521             };
61522
61523
61524             behavior.text = function(val) {
61525                 if (!arguments.length) { return _text; }
61526                 _text = val;
61527                 return behavior;
61528             };
61529
61530
61531             return behavior;
61532         }
61533
61534         var _usedTails = {};
61535         var _disableSpace = false;
61536         var _lastSpace = null;
61537
61538
61539         function behaviorDraw(context) {
61540             var dispatch$1 = dispatch(
61541                 'move', 'click', 'clickWay', 'clickNode', 'undo', 'cancel', 'finish'
61542             );
61543
61544             var keybinding = utilKeybinding('draw');
61545
61546             var _hover = behaviorHover(context).altDisables(true).ignoreVertex(true)
61547                 .on('hover', context.ui().sidebar.hover);
61548             var tail = behaviorTail();
61549             var edit = behaviorEdit(context);
61550
61551             var closeTolerance = 4;
61552             var tolerance = 12;
61553             var _mouseLeave = false;
61554             var _lastMouse = null;
61555
61556
61557             // related code
61558             // - `mode/drag_node.js` `datum()`
61559             function datum() {
61560                 var mode = context.mode();
61561                 var isNote = mode && (mode.id.indexOf('note') !== -1);
61562                 if (event.altKey || isNote) { return {}; }
61563
61564                 var element;
61565                 if (event.type === 'keydown') {
61566                     element = _lastMouse && _lastMouse.target;
61567                 } else {
61568                     element = event.target;
61569                 }
61570
61571                 // When drawing, snap only to touch targets..
61572                 // (this excludes area fills and active drawing elements)
61573                 var d = element.__data__;
61574                 return (d && d.properties && d.properties.target) ? d : {};
61575             }
61576
61577
61578             function mousedown() {
61579
61580                 function point() {
61581                     var p = context.container().node();
61582                     return touchId !== null ? d3_touches(p).filter(function(p) {
61583                         return p.identifier === touchId;
61584                     })[0] : d3_mouse(p);
61585                 }
61586
61587                 var element = d3_select(this);
61588                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
61589                 var t1 = +new Date();
61590                 var p1 = point();
61591
61592                 element.on('mousemove.draw', null);
61593
61594                 d3_select(window).on('mouseup.draw', function() {
61595                     var t2 = +new Date();
61596                     var p2 = point();
61597                     var dist = geoVecLength(p1, p2);
61598
61599                     element.on('mousemove.draw', mousemove);
61600                     d3_select(window).on('mouseup.draw', null);
61601
61602                     if (dist < closeTolerance || (dist < tolerance && (t2 - t1) < 500)) {
61603                         // Prevent a quick second click
61604                         d3_select(window).on('click.draw-block', function() {
61605                             event.stopPropagation();
61606                         }, true);
61607
61608                         context.map().dblclickEnable(false);
61609
61610                         window.setTimeout(function() {
61611                             context.map().dblclickEnable(true);
61612                             d3_select(window).on('click.draw-block', null);
61613                         }, 500);
61614
61615                         click();
61616                     }
61617                 }, true);
61618             }
61619
61620
61621             function mousemove() {
61622                 _lastMouse = event;
61623                 dispatch$1.call('move', this, datum());
61624             }
61625
61626
61627             function mouseenter() {
61628                 _mouseLeave = false;
61629             }
61630
61631
61632             function mouseleave() {
61633                 _mouseLeave = true;
61634             }
61635
61636             function allowsVertex(d) {
61637                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
61638             }
61639
61640             // related code
61641             // - `mode/drag_node.js`     `doMode()`
61642             // - `behavior/draw.js`      `click()`
61643             // - `behavior/draw_way.js`  `move()`
61644             function click() {
61645                 var d = datum();
61646                 var target = d && d.properties && d.properties.entity;
61647
61648                 var mode = context.mode();
61649
61650                 if (target && target.type === 'node' && allowsVertex(target)) {   // Snap to a node
61651                     dispatch$1.call('clickNode', this, target, d);
61652                     return;
61653
61654                 } else if (target && target.type === 'way' && (mode.id !== 'add-point' || mode.preset.matchGeometry('vertex'))) {   // Snap to a way
61655                     var choice = geoChooseEdge(
61656                         context.childNodes(target), context.mouse(), context.projection, context.activeID()
61657                     );
61658                     if (choice) {
61659                         var edge = [target.nodes[choice.index - 1], target.nodes[choice.index]];
61660                         dispatch$1.call('clickWay', this, choice.loc, edge, d);
61661                         return;
61662                     }
61663                 } else if (mode.id !== 'add-point' || mode.preset.matchGeometry('point')) {
61664                     dispatch$1.call('click', this, context.map().mouseCoordinates(), d);
61665                 }
61666
61667             }
61668
61669
61670             function space() {
61671                 event.preventDefault();
61672                 event.stopPropagation();
61673
61674                 var currSpace = context.mouse();
61675                 if (_disableSpace && _lastSpace) {
61676                     var dist = geoVecLength(_lastSpace, currSpace);
61677                     if (dist > tolerance) {
61678                         _disableSpace = false;
61679                     }
61680                 }
61681
61682                 if (_disableSpace || _mouseLeave || !_lastMouse) { return; }
61683
61684                 // user must move mouse or release space bar to allow another click
61685                 _lastSpace = currSpace;
61686                 _disableSpace = true;
61687
61688                 d3_select(window).on('keyup.space-block', function() {
61689                     event.preventDefault();
61690                     event.stopPropagation();
61691                     _disableSpace = false;
61692                     d3_select(window).on('keyup.space-block', null);
61693                 });
61694
61695                 click();
61696             }
61697
61698
61699             function backspace() {
61700                 event.preventDefault();
61701                 dispatch$1.call('undo');
61702             }
61703
61704
61705             function del() {
61706                 event.preventDefault();
61707                 dispatch$1.call('cancel');
61708             }
61709
61710
61711             function ret() {
61712                 event.preventDefault();
61713                 dispatch$1.call('finish');
61714             }
61715
61716
61717             function behavior(selection) {
61718                 context.install(_hover);
61719                 context.install(edit);
61720
61721                 if (!context.inIntro() && !_usedTails[tail.text()]) {
61722                     context.install(tail);
61723                 }
61724
61725                 keybinding
61726                     .on('⌫', backspace)
61727                     .on('⌦', del)
61728                     .on('⎋', ret)
61729                     .on('↩', ret)
61730                     .on('space', space)
61731                     .on('⌥space', space);
61732
61733                 selection
61734                     .on('mouseenter.draw', mouseenter)
61735                     .on('mouseleave.draw', mouseleave)
61736                     .on('mousedown.draw', mousedown)
61737                     .on('mousemove.draw', mousemove);
61738
61739                 d3_select(document)
61740                     .call(keybinding);
61741
61742                 return behavior;
61743             }
61744
61745
61746             behavior.off = function(selection) {
61747                 context.ui().sidebar.hover.cancel();
61748                 context.uninstall(_hover);
61749                 context.uninstall(edit);
61750
61751                 if (!context.inIntro() && !_usedTails[tail.text()]) {
61752                     context.uninstall(tail);
61753                     _usedTails[tail.text()] = true;
61754                 }
61755
61756                 selection
61757                     .on('mouseenter.draw', null)
61758                     .on('mouseleave.draw', null)
61759                     .on('mousedown.draw', null)
61760                     .on('mousemove.draw', null);
61761
61762                 d3_select(window)
61763                     .on('mouseup.draw', null);
61764                     // note: keyup.space-block, click.draw-block should remain
61765
61766                 d3_select(document)
61767                     .call(keybinding.unbind);
61768             };
61769
61770
61771             behavior.tail = function(_) {
61772                 tail.text(_);
61773                 return behavior;
61774             };
61775
61776             behavior.hover = function() {
61777                 return _hover;
61778             };
61779
61780
61781             return utilRebind(behavior, dispatch$1, 'on');
61782         }
61783
61784         function behaviorBreathe() {
61785             var duration = 800;
61786             var steps = 4;
61787             var selector = '.selected.shadow, .selected .shadow';
61788             var _selected = d3_select(null);
61789             var _classed = '';
61790             var _params = {};
61791             var _done = false;
61792             var _timer;
61793
61794
61795             function ratchetyInterpolator(a, b, steps, units) {
61796                 a = parseFloat(a);
61797                 b = parseFloat(b);
61798                 var sample = quantize()
61799                     .domain([0, 1])
61800                     .range(d3_quantize(d3_interpolateNumber(a, b), steps));
61801
61802                 return function(t) {
61803                     return String(sample(t)) + (units || '');
61804                 };
61805             }
61806
61807
61808             function reset(selection) {
61809                 selection
61810                     .style('stroke-opacity', null)
61811                     .style('stroke-width', null)
61812                     .style('fill-opacity', null)
61813                     .style('r', null);
61814             }
61815
61816
61817             function setAnimationParams(transition, fromTo) {
61818                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
61819
61820                 transition
61821                     .styleTween('stroke-opacity', function(d) {
61822                         return ratchetyInterpolator(
61823                             _params[d.id][toFrom].opacity,
61824                             _params[d.id][fromTo].opacity,
61825                             steps
61826                         );
61827                     })
61828                     .styleTween('stroke-width', function(d) {
61829                         return ratchetyInterpolator(
61830                             _params[d.id][toFrom].width,
61831                             _params[d.id][fromTo].width,
61832                             steps,
61833                             'px'
61834                         );
61835                     })
61836                     .styleTween('fill-opacity', function(d) {
61837                         return ratchetyInterpolator(
61838                             _params[d.id][toFrom].opacity,
61839                             _params[d.id][fromTo].opacity,
61840                             steps
61841                         );
61842                     })
61843                     .styleTween('r', function(d) {
61844                         return ratchetyInterpolator(
61845                             _params[d.id][toFrom].width,
61846                             _params[d.id][fromTo].width,
61847                             steps,
61848                             'px'
61849                         );
61850                     });
61851             }
61852
61853
61854             function calcAnimationParams(selection) {
61855                 selection
61856                     .call(reset)
61857                     .each(function(d) {
61858                         var s = d3_select(this);
61859                         var tag = s.node().tagName;
61860                         var p = {'from': {}, 'to': {}};
61861                         var opacity;
61862                         var width;
61863
61864                         // determine base opacity and width
61865                         if (tag === 'circle') {
61866                             opacity = parseFloat(s.style('fill-opacity') || 0.5);
61867                             width = parseFloat(s.style('r') || 15.5);
61868                         } else {
61869                             opacity = parseFloat(s.style('stroke-opacity') || 0.7);
61870                             width = parseFloat(s.style('stroke-width') || 10);
61871                         }
61872
61873                         // calculate from/to interpolation params..
61874                         p.tag = tag;
61875                         p.from.opacity = opacity * 0.6;
61876                         p.to.opacity = opacity * 1.25;
61877                         p.from.width = width * 0.7;
61878                         p.to.width = width * (tag === 'circle' ? 1.5 : 1);
61879                         _params[d.id] = p;
61880                     });
61881             }
61882
61883
61884             function run(surface, fromTo) {
61885                 var toFrom = (fromTo === 'from' ? 'to' : 'from');
61886                 var currSelected = surface.selectAll(selector);
61887                 var currClassed = surface.attr('class');
61888
61889                 if (_done || currSelected.empty()) {
61890                     _selected.call(reset);
61891                     _selected = d3_select(null);
61892                     return;
61893                 }
61894
61895                 if (!fastDeepEqual(currSelected.data(), _selected.data()) || currClassed !== _classed) {
61896                     _selected.call(reset);
61897                     _classed = currClassed;
61898                     _selected = currSelected.call(calcAnimationParams);
61899                 }
61900
61901                 var didCallNextRun = false;
61902
61903                 _selected
61904                     .transition()
61905                     .duration(duration)
61906                     .call(setAnimationParams, fromTo)
61907                     .on('end', function() {
61908                         // `end` event is called for each selected element, but we want
61909                         // it to run only once
61910                         if (!didCallNextRun) {
61911                             surface.call(run, toFrom);
61912                             didCallNextRun = true;
61913                         }
61914
61915                         // if entity was deselected, remove breathe styling
61916                         if (!d3_select(this).classed('selected')) {
61917                             reset(d3_select(this));
61918                         }
61919                     });
61920             }
61921
61922             function behavior(surface) {
61923                 _done = false;
61924                 _timer = timer(function() {
61925                     // wait for elements to actually become selected
61926                     if (surface.selectAll(selector).empty()) {
61927                         return false;
61928                     }
61929
61930                     surface.call(run, 'from');
61931                     _timer.stop();
61932                     return true;
61933                 }, 20);
61934             }
61935
61936             behavior.restartIfNeeded = function(surface) {
61937                 if (_selected.empty()) {
61938                     surface.call(run, 'from');
61939                     if (_timer) {
61940                         _timer.stop();
61941                     }
61942                 }
61943             };
61944
61945             behavior.off = function() {
61946                 _done = true;
61947                 if (_timer) {
61948                     _timer.stop();
61949                 }
61950                 _selected
61951                     .interrupt()
61952                     .call(reset);
61953             };
61954
61955
61956             return behavior;
61957         }
61958
61959         // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
61960         // For example, ⌘Z -> Ctrl+Z
61961         var uiCmd = function (code) {
61962             var detected = utilDetect();
61963
61964             if (detected.os === 'mac') {
61965                 return code;
61966             }
61967
61968             if (detected.os === 'win') {
61969                 if (code === '⌘⇧Z') { return 'Ctrl+Y'; }
61970             }
61971
61972             var result = '',
61973                 replacements = {
61974                     '⌘': 'Ctrl',
61975                     '⇧': 'Shift',
61976                     '⌥': 'Alt',
61977                     '⌫': 'Backspace',
61978                     '⌦': 'Delete'
61979                 };
61980
61981             for (var i = 0; i < code.length; i++) {
61982                 if (code[i] in replacements) {
61983                     result += replacements[code[i]] + (i < code.length - 1 ? '+' : '');
61984                 } else {
61985                     result += code[i];
61986                 }
61987             }
61988
61989             return result;
61990         };
61991
61992
61993         // return a display-focused string for a given keyboard code
61994         uiCmd.display = function(code) {
61995             if (code.length !== 1) { return code; }
61996
61997             var detected = utilDetect();
61998             var mac = (detected.os === 'mac');
61999             var replacements = {
62000                 '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd')    : t('shortcuts.key.ctrl'),
62001                 '⇧': mac ? '⇧ ' + t('shortcuts.key.shift')  : t('shortcuts.key.shift'),
62002                 '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
62003                 '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl')   : t('shortcuts.key.ctrl'),
62004                 '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
62005                 '⌦': mac ? '⌦ ' + t('shortcuts.key.del')    : t('shortcuts.key.del'),
62006                 '↖': mac ? '↖ ' + t('shortcuts.key.pgup')   : t('shortcuts.key.pgup'),
62007                 '↘': mac ? '↘ ' + t('shortcuts.key.pgdn')   : t('shortcuts.key.pgdn'),
62008                 '⇞': mac ? '⇞ ' + t('shortcuts.key.home')   : t('shortcuts.key.home'),
62009                 '⇟': mac ? '⇟ ' + t('shortcuts.key.end')    : t('shortcuts.key.end'),
62010                 '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
62011                 '⎋': mac ? '⎋ ' + t('shortcuts.key.esc')    : t('shortcuts.key.esc'),
62012             };
62013
62014             return replacements[code] || code;
62015         };
62016
62017         function behaviorCopy(context) {
62018
62019             function groupEntities(ids, graph) {
62020                 var entities = ids.map(function (id) { return graph.entity(id); });
62021                 return Object.assign(
62022                     { relation: [], way: [], node: [] },
62023                     utilArrayGroupBy(entities, 'type')
62024                 );
62025             }
62026
62027
62028             function getDescendants(id, graph, descendants) {
62029                 var entity = graph.entity(id);
62030                 var children;
62031
62032                 descendants = descendants || {};
62033
62034                 if (entity.type === 'relation') {
62035                     children = entity.members.map(function(m) { return m.id; });
62036                 } else if (entity.type === 'way') {
62037                     children = entity.nodes;
62038                 } else {
62039                     children = [];
62040                 }
62041
62042                 for (var i = 0; i < children.length; i++) {
62043                     if (!descendants[children[i]]) {
62044                         descendants[children[i]] = true;
62045                         descendants = getDescendants(children[i], graph, descendants);
62046                     }
62047                 }
62048
62049                 return descendants;
62050             }
62051
62052
62053             function getSelectionText() {
62054                 return window.getSelection().toString();
62055             }
62056
62057
62058             function doCopy() {
62059                 // prevent copy during low zoom selection
62060                 if (!context.map().withinEditableZoom()) { return; }
62061
62062                 if (!getSelectionText()) {
62063                     event.preventDefault();
62064                 }
62065
62066                 var graph = context.graph();
62067                 var selected = groupEntities(context.selectedIDs(), graph);
62068                 var canCopy = [];
62069                 var skip = {};
62070                 var entity;
62071                 var i;
62072
62073                 for (i = 0; i < selected.relation.length; i++) {
62074                     entity = selected.relation[i];
62075                     if (!skip[entity.id] && entity.isComplete(graph)) {
62076                         canCopy.push(entity.id);
62077                         skip = getDescendants(entity.id, graph, skip);
62078                     }
62079                 }
62080                 for (i = 0; i < selected.way.length; i++) {
62081                     entity = selected.way[i];
62082                     if (!skip[entity.id]) {
62083                         canCopy.push(entity.id);
62084                         skip = getDescendants(entity.id, graph, skip);
62085                     }
62086                 }
62087                 for (i = 0; i < selected.node.length; i++) {
62088                     entity = selected.node[i];
62089                     if (!skip[entity.id]) {
62090                         canCopy.push(entity.id);
62091                     }
62092                 }
62093
62094                 context.copyIDs(canCopy);
62095             }
62096
62097
62098             function behavior() {
62099                 context.keybinding().on(uiCmd('⌘C'), doCopy);
62100                 return behavior;
62101             }
62102
62103             behavior.off = function() {
62104                 context.keybinding().off(uiCmd('⌘C'));
62105             };
62106
62107
62108             return behavior;
62109         }
62110
62111         var _flashTimer;
62112
62113
62114         function uiFlash() {
62115             var _duration = 2000;
62116             var _iconName = '#iD-icon-no';
62117             var _iconClass = 'disabled';
62118             var _text = '';
62119             var _textClass;
62120
62121
62122             function flash() {
62123                 if (_flashTimer) {
62124                     _flashTimer.stop();
62125                 }
62126
62127                 d3_select('#footer-wrap')
62128                     .attr('class', 'footer-hide');
62129                 d3_select('#flash-wrap')
62130                     .attr('class', 'footer-show');
62131
62132                 var content = d3_select('#flash-wrap').selectAll('.flash-content')
62133                     .data([0]);
62134
62135                 // Enter
62136                 var contentEnter = content.enter()
62137                     .append('div')
62138                     .attr('class', 'flash-content');
62139
62140                 var iconEnter = contentEnter
62141                     .append('svg')
62142                     .attr('class', 'flash-icon')
62143                     .append('g')
62144                     .attr('transform', 'translate(10,10)');
62145
62146                 iconEnter
62147                     .append('circle')
62148                     .attr('r', 9);
62149
62150                 iconEnter
62151                     .append('use')
62152                     .attr('transform', 'translate(-7,-7)')
62153                     .attr('width', '14')
62154                     .attr('height', '14');
62155
62156                 contentEnter
62157                     .append('div')
62158                     .attr('class', 'flash-text');
62159
62160
62161                 // Update
62162                 content = content
62163                     .merge(contentEnter);
62164
62165                 content
62166                     .selectAll('.flash-icon')
62167                     .attr('class', 'flash-icon ' + (_iconClass || ''));
62168
62169                 content
62170                     .selectAll('.flash-icon use')
62171                     .attr('xlink:href', _iconName);
62172
62173                 content
62174                     .selectAll('.flash-text')
62175                     .attr('class', 'flash-text ' + (_textClass || ''))
62176                     .text(_text);
62177
62178
62179                 _flashTimer = d3_timeout(function() {
62180                     _flashTimer = null;
62181                     d3_select('#footer-wrap')
62182                         .attr('class', 'footer-show');
62183                     d3_select('#flash-wrap')
62184                         .attr('class', 'footer-hide');
62185                 }, _duration);
62186
62187                 return content;
62188             }
62189
62190
62191             flash.duration = function(_) {
62192                 if (!arguments.length) { return _duration; }
62193                 _duration = _;
62194                 return flash;
62195             };
62196
62197             flash.text = function(_) {
62198                 if (!arguments.length) { return _text; }
62199                 _text = _;
62200                 return flash;
62201             };
62202
62203             flash.textClass = function(_) {
62204                 if (!arguments.length) { return _textClass; }
62205                 _textClass = _;
62206                 return flash;
62207             };
62208
62209             flash.iconName = function(_) {
62210                 if (!arguments.length) { return _iconName; }
62211                 _iconName = _;
62212                 return flash;
62213             };
62214
62215             flash.iconClass = function(_) {
62216                 if (!arguments.length) { return _iconClass; }
62217                 _iconClass = _;
62218                 return flash;
62219             };
62220
62221             return flash;
62222         }
62223
62224         /* Creates a keybinding behavior for an operation */
62225         function behaviorOperation(context) {
62226             var _operation;
62227
62228             function keypress() {
62229                 // prevent operations during low zoom selection
62230                 if (!context.map().withinEditableZoom()) { return; }
62231
62232                 event.preventDefault();
62233                 var disabled = _operation.disabled();
62234                 var flash;
62235
62236                 if (disabled) {
62237                     flash = uiFlash()
62238                         .duration(4000)
62239                         .iconName('#iD-operation-' + _operation.id)
62240                         .iconClass('operation disabled')
62241                         .text(_operation.tooltip);
62242
62243                     flash();
62244
62245                 } else {
62246                     flash = uiFlash()
62247                         .duration(2000)
62248                         .iconName('#iD-operation-' + _operation.id)
62249                         .iconClass('operation')
62250                         .text(_operation.annotation() || _operation.title);
62251
62252                     flash();
62253                     _operation();
62254                 }
62255             }
62256
62257
62258             function behavior() {
62259                 if (_operation && _operation.available()) {
62260                     context.keybinding()
62261                         .on(_operation.keys, keypress);
62262                 }
62263
62264                 return behavior;
62265             }
62266
62267
62268             behavior.off = function() {
62269                 context.keybinding()
62270                     .off(_operation.keys);
62271             };
62272
62273
62274             behavior.which = function (_) {
62275                 if (!arguments.length) { return _operation; }
62276                 _operation = _;
62277                 return behavior;
62278             };
62279
62280
62281             return behavior;
62282         }
62283
62284         function operationCircularize(selectedIDs, context) {
62285             var entityID = selectedIDs[0];
62286             var entity = context.entity(entityID);
62287             var extent = entity.extent(context.graph());
62288             var geometry = context.geometry(entityID);
62289             var action = actionCircularize(entityID, context.projection);
62290             var nodes = utilGetAllNodes(selectedIDs, context.graph());
62291             var coords = nodes.map(function(n) { return n.loc; });
62292
62293             var operation = function() {
62294                 context.perform(action, operation.annotation());
62295
62296                 window.setTimeout(function() {
62297                     context.validator().validate();
62298                 }, 300);  // after any transition
62299             };
62300
62301
62302             operation.available = function() {
62303                 return selectedIDs.length === 1 &&
62304                     entity.type === 'way' &&
62305                     new Set(entity.nodes).size > 1;
62306             };
62307
62308
62309             // don't cache this because the visible extent could change
62310             operation.disabled = function() {
62311                 var actionDisabled = action.disabled(context.graph());
62312                 if (actionDisabled) {
62313                     return actionDisabled;
62314                 } else if (extent.percentContainedIn(context.extent()) < 0.8) {
62315                     return 'too_large';
62316                 } else if (someMissing()) {
62317                     return 'not_downloaded';
62318                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
62319                     return 'connected_to_hidden';
62320                 }
62321
62322                 return false;
62323
62324
62325                 function someMissing() {
62326                     if (context.inIntro()) { return false; }
62327                     var osm = context.connection();
62328                     if (osm) {
62329                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
62330                         if (missing.length) {
62331                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
62332                             return true;
62333                         }
62334                     }
62335                     return false;
62336                 }
62337             };
62338
62339
62340             operation.tooltip = function() {
62341                 var disable = operation.disabled();
62342                 return disable ?
62343                     t('operations.circularize.' + disable + '.single') :
62344                     t('operations.circularize.description.single');
62345             };
62346
62347
62348             operation.annotation = function() {
62349                 return t('operations.circularize.annotation.single');
62350             };
62351
62352
62353             operation.id = 'circularize';
62354             operation.keys = [t('operations.circularize.key')];
62355             operation.title = t('operations.circularize.title');
62356             operation.behavior = behaviorOperation(context).which(operation);
62357
62358             return operation;
62359         }
62360
62361         function operationDelete(selectedIDs, context) {
62362             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
62363             var action = actionDeleteMultiple(selectedIDs);
62364             var nodes = utilGetAllNodes(selectedIDs, context.graph());
62365             var coords = nodes.map(function(n) { return n.loc; });
62366             var extent = nodes.reduce(function(extent, node) {
62367                 return extent.extend(node.extent(context.graph()));
62368             }, geoExtent());
62369
62370
62371             var operation = function() {
62372                 var nextSelectedID;
62373                 var nextSelectedLoc;
62374
62375                 if (selectedIDs.length === 1) {
62376                     var id = selectedIDs[0];
62377                     var entity = context.entity(id);
62378                     var geometry = context.geometry(id);
62379                     var parents = context.graph().parentWays(entity);
62380                     var parent = parents[0];
62381
62382                     // Select the next closest node in the way.
62383                     if (geometry === 'vertex') {
62384                         var nodes = parent.nodes;
62385                         var i = nodes.indexOf(id);
62386
62387                         if (i === 0) {
62388                             i++;
62389                         } else if (i === nodes.length - 1) {
62390                             i--;
62391                         } else {
62392                             var a = geoSphericalDistance(entity.loc, context.entity(nodes[i - 1]).loc);
62393                             var b = geoSphericalDistance(entity.loc, context.entity(nodes[i + 1]).loc);
62394                             i = a < b ? i - 1 : i + 1;
62395                         }
62396
62397                         nextSelectedID = nodes[i];
62398                         nextSelectedLoc = context.entity(nextSelectedID).loc;
62399                     }
62400                 }
62401
62402                 context.perform(action, operation.annotation());
62403                 context.validator().validate();
62404
62405                 if (nextSelectedID && nextSelectedLoc) {
62406                     if (context.hasEntity(nextSelectedID)) {
62407                         context.enter(modeSelect(context, [nextSelectedID]).follow(true));
62408                     } else {
62409                         context.map().centerEase(nextSelectedLoc);
62410                         context.enter(modeBrowse(context));
62411                     }
62412                 } else {
62413                     context.enter(modeBrowse(context));
62414                 }
62415
62416             };
62417
62418
62419             operation.available = function() {
62420                 return true;
62421             };
62422
62423
62424             operation.disabled = function() {
62425                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
62426                     return 'too_large';
62427                 } else if (someMissing()) {
62428                     return 'not_downloaded';
62429                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
62430                     return 'connected_to_hidden';
62431                 } else if (selectedIDs.some(protectedMember)) {
62432                     return 'part_of_relation';
62433                 } else if (selectedIDs.some(incompleteRelation)) {
62434                     return 'incomplete_relation';
62435                 } else if (selectedIDs.some(hasWikidataTag)) {
62436                     return 'has_wikidata_tag';
62437                 }
62438
62439                 return false;
62440
62441
62442                 function someMissing() {
62443                     if (context.inIntro()) { return false; }
62444                     var osm = context.connection();
62445                     if (osm) {
62446                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
62447                         if (missing.length) {
62448                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
62449                             return true;
62450                         }
62451                     }
62452                     return false;
62453                 }
62454
62455                 function hasWikidataTag(id) {
62456                     var entity = context.entity(id);
62457                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
62458                 }
62459
62460                 function incompleteRelation(id) {
62461                     var entity = context.entity(id);
62462                     return entity.type === 'relation' && !entity.isComplete(context.graph());
62463                 }
62464
62465                 function protectedMember(id) {
62466                     var entity = context.entity(id);
62467                     if (entity.type !== 'way') { return false; }
62468
62469                     var parents = context.graph().parentRelations(entity);
62470                     for (var i = 0; i < parents.length; i++) {
62471                         var parent = parents[i];
62472                         var type = parent.tags.type;
62473                         var role = parent.memberById(id).role || 'outer';
62474                         if (type === 'route' || type === 'boundary' || (type === 'multipolygon' && role === 'outer')) {
62475                             return true;
62476                         }
62477                     }
62478                     return false;
62479                 }
62480             };
62481
62482
62483             operation.tooltip = function() {
62484                 var disable = operation.disabled();
62485                 return disable ?
62486                     t('operations.delete.' + disable + '.' + multi) :
62487                     t('operations.delete.description' + '.' + multi);
62488             };
62489
62490
62491             operation.annotation = function() {
62492                 return selectedIDs.length === 1 ?
62493                     t('operations.delete.annotation.' + context.geometry(selectedIDs[0])) :
62494                     t('operations.delete.annotation.multiple', { n: selectedIDs.length });
62495             };
62496
62497
62498             operation.id = 'delete';
62499             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
62500             operation.title = t('operations.delete.title');
62501             operation.behavior = behaviorOperation(context).which(operation);
62502
62503             return operation;
62504         }
62505
62506         function operationOrthogonalize(selectedIDs, context) {
62507             var _extent;
62508             var type;
62509             var actions = selectedIDs.map(chooseAction).filter(Boolean);
62510             var amount = actions.length === 1 ? 'single' : 'multiple';
62511             var nodes = utilGetAllNodes(selectedIDs, context.graph());
62512             var coords = nodes.map(function(n) { return n.loc; });
62513
62514
62515             function chooseAction(entityID) {
62516
62517                 var entity = context.entity(entityID);
62518                 var geometry = context.geometry(entityID);
62519
62520                 if (!_extent) {
62521                     _extent =  entity.extent(context.graph());
62522                 } else {
62523                     _extent = _extent.extend(entity.extent(context.graph()));
62524                 }
62525
62526                 // square a line/area
62527                 if (entity.type === 'way' && new Set(entity.nodes).size > 2 ) {
62528                     if (type && type !== 'feature') { return null; }
62529                     type = 'feature';
62530                     return actionOrthogonalize(entityID, context.projection);
62531
62532                 // square a single vertex
62533                 } else if (geometry === 'vertex') {
62534                     if (type && type !== 'corner') { return null; }
62535                     type = 'corner';
62536                     var graph = context.graph();
62537                     var parents = graph.parentWays(entity);
62538                     if (parents.length === 1) {
62539                         var way = parents[0];
62540                         if (way.nodes.indexOf(entityID) !== -1) {
62541                             return actionOrthogonalize(way.id, context.projection, entityID);
62542                         }
62543                     }
62544                 }
62545
62546                 return null;
62547             }
62548
62549
62550             var operation = function() {
62551                 if (!actions.length) { return; }
62552
62553                 var combinedAction = function(graph, t) {
62554                     actions.forEach(function(action) {
62555                         if (!action.disabled(graph)) {
62556                             graph = action(graph, t);
62557                         }
62558                     });
62559                     return graph;
62560                 };
62561                 combinedAction.transitionable = true;
62562
62563                 context.perform(combinedAction, operation.annotation());
62564
62565                 window.setTimeout(function() {
62566                     context.validator().validate();
62567                 }, 300);  // after any transition
62568             };
62569
62570
62571             operation.available = function() {
62572                 return actions.length && selectedIDs.length === actions.length;
62573             };
62574
62575
62576             // don't cache this because the visible extent could change
62577             operation.disabled = function() {
62578                 if (!actions.length) { return ''; }
62579
62580                 var actionDisabled;
62581
62582                 var actionDisableds = {};
62583
62584                 if (actions.every(function(action) {
62585                     var disabled = action.disabled(context.graph());
62586                     if (disabled) { actionDisableds[disabled] = true; }
62587                     return disabled;
62588                 })) {
62589                     actionDisabled = actions[0].disabled(context.graph());
62590                 }
62591
62592                 if (actionDisabled) {
62593                     if (Object.keys(actionDisableds).length > 1) {
62594                         return 'multiple_blockers';
62595                     }
62596                     return actionDisabled;
62597                 } else if (type !== 'corner' &&
62598                            _extent.percentContainedIn(context.extent()) < 0.8) {
62599                     return 'too_large';
62600                 } else if (someMissing()) {
62601                     return 'not_downloaded';
62602                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
62603                     return 'connected_to_hidden';
62604                 }
62605
62606                 return false;
62607
62608
62609                 function someMissing() {
62610                     if (context.inIntro()) { return false; }
62611                     var osm = context.connection();
62612                     if (osm) {
62613                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
62614                         if (missing.length) {
62615                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
62616                             return true;
62617                         }
62618                     }
62619                     return false;
62620                 }
62621             };
62622
62623
62624             operation.tooltip = function() {
62625                 var disable = operation.disabled();
62626                 return disable ?
62627                     t('operations.orthogonalize.' + disable + '.' + amount) :
62628                     t('operations.orthogonalize.description.' + type + '.' + amount);
62629             };
62630
62631
62632             operation.annotation = function() {
62633                 return t('operations.orthogonalize.annotation.' + type + '.' + amount);
62634             };
62635
62636
62637             operation.id = 'orthogonalize';
62638             operation.keys = [t('operations.orthogonalize.key')];
62639             operation.title = t('operations.orthogonalize.title');
62640             operation.behavior = behaviorOperation(context).which(operation);
62641
62642             return operation;
62643         }
62644
62645         function operationReflectShort(selectedIDs, context) {
62646             return operationReflect(selectedIDs, context, 'short');
62647         }
62648
62649
62650         function operationReflectLong(selectedIDs, context) {
62651             return operationReflect(selectedIDs, context, 'long');
62652         }
62653
62654
62655         function operationReflect(selectedIDs, context, axis) {
62656             axis = axis || 'long';
62657             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
62658             var nodes = utilGetAllNodes(selectedIDs, context.graph());
62659             var coords = nodes.map(function(n) { return n.loc; });
62660             var extent = nodes.reduce(function(extent, node) {
62661                 return extent.extend(node.extent(context.graph()));
62662             }, geoExtent());
62663
62664
62665             var operation = function() {
62666                 var action = actionReflect(selectedIDs, context.projection)
62667                     .useLongAxis(Boolean(axis === 'long'));
62668
62669                 context.perform(action, operation.annotation());
62670
62671                 window.setTimeout(function() {
62672                     context.validator().validate();
62673                 }, 300);  // after any transition
62674             };
62675
62676
62677             operation.available = function() {
62678                 return nodes.length >= 3;
62679             };
62680
62681
62682             // don't cache this because the visible extent could change
62683             operation.disabled = function() {
62684                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
62685                     return 'too_large';
62686                 } else if (someMissing()) {
62687                     return 'not_downloaded';
62688                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
62689                     return 'connected_to_hidden';
62690                 } else if (selectedIDs.some(incompleteRelation)) {
62691                     return 'incomplete_relation';
62692                 }
62693
62694                 return false;
62695
62696
62697                 function someMissing() {
62698                     if (context.inIntro()) { return false; }
62699                     var osm = context.connection();
62700                     if (osm) {
62701                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
62702                         if (missing.length) {
62703                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
62704                             return true;
62705                         }
62706                     }
62707                     return false;
62708                 }
62709
62710                 function incompleteRelation(id) {
62711                     var entity = context.entity(id);
62712                     return entity.type === 'relation' && !entity.isComplete(context.graph());
62713                 }
62714             };
62715
62716
62717             operation.tooltip = function() {
62718                 var disable = operation.disabled();
62719                 return disable ?
62720                     t('operations.reflect.' + disable + '.' + multi) :
62721                     t('operations.reflect.description.' + axis + '.' + multi);
62722             };
62723
62724
62725             operation.annotation = function() {
62726                 return t('operations.reflect.annotation.' + axis + '.' + multi);
62727             };
62728
62729
62730             operation.id = 'reflect-' + axis;
62731             operation.keys = [t('operations.reflect.key.' + axis)];
62732             operation.title = t('operations.reflect.title.' + axis);
62733             operation.behavior = behaviorOperation(context).which(operation);
62734
62735             return operation;
62736         }
62737
62738         function operationMove(selectedIDs, context) {
62739             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
62740             var nodes = utilGetAllNodes(selectedIDs, context.graph());
62741             var coords = nodes.map(function(n) { return n.loc; });
62742             var extent = nodes.reduce(function(extent, node) {
62743                 return extent.extend(node.extent(context.graph()));
62744             }, geoExtent());
62745
62746
62747             var operation = function() {
62748                 context.enter(modeMove(context, selectedIDs));
62749             };
62750
62751
62752             operation.available = function() {
62753                 return selectedIDs.length > 1 ||
62754                     context.entity(selectedIDs[0]).type !== 'node';
62755             };
62756
62757
62758             operation.disabled = function() {
62759                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
62760                     return 'too_large';
62761                 } else if (someMissing()) {
62762                     return 'not_downloaded';
62763                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
62764                     return 'connected_to_hidden';
62765                 } else if (selectedIDs.some(incompleteRelation)) {
62766                     return 'incomplete_relation';
62767                 }
62768
62769                 return false;
62770
62771
62772                 function someMissing() {
62773                     if (context.inIntro()) { return false; }
62774                     var osm = context.connection();
62775                     if (osm) {
62776                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
62777                         if (missing.length) {
62778                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
62779                             return true;
62780                         }
62781                     }
62782                     return false;
62783                 }
62784
62785                 function incompleteRelation(id) {
62786                     var entity = context.entity(id);
62787                     return entity.type === 'relation' && !entity.isComplete(context.graph());
62788                 }
62789             };
62790
62791
62792             operation.tooltip = function() {
62793                 var disable = operation.disabled();
62794                 return disable ?
62795                     t('operations.move.' + disable + '.' + multi) :
62796                     t('operations.move.description.' + multi);
62797             };
62798
62799
62800             operation.annotation = function() {
62801                 return selectedIDs.length === 1 ?
62802                     t('operations.move.annotation.' + context.geometry(selectedIDs[0])) :
62803                     t('operations.move.annotation.multiple');
62804             };
62805
62806
62807             operation.id = 'move';
62808             operation.keys = [t('operations.move.key')];
62809             operation.title = t('operations.move.title');
62810             operation.behavior = behaviorOperation(context).which(operation);
62811
62812             return operation;
62813         }
62814
62815         function modeRotate(context, entityIDs) {
62816             var mode = {
62817                 id: 'rotate',
62818                 button: 'browse'
62819             };
62820
62821             var keybinding = utilKeybinding('rotate');
62822             var behaviors = [
62823                 behaviorEdit(context),
62824                 operationCircularize(entityIDs, context).behavior,
62825                 operationDelete(entityIDs, context).behavior,
62826                 operationMove(entityIDs, context).behavior,
62827                 operationOrthogonalize(entityIDs, context).behavior,
62828                 operationReflectLong(entityIDs, context).behavior,
62829                 operationReflectShort(entityIDs, context).behavior
62830             ];
62831             var annotation = entityIDs.length === 1 ?
62832                 t('operations.rotate.annotation.' + context.geometry(entityIDs[0])) :
62833                 t('operations.rotate.annotation.multiple');
62834
62835             var _prevGraph;
62836             var _prevAngle;
62837             var _prevTransform;
62838             var _pivot;
62839
62840
62841             function doRotate() {
62842                 var fn;
62843                 if (context.graph() !== _prevGraph) {
62844                     fn = context.perform;
62845                 } else {
62846                     fn = context.replace;
62847                 }
62848
62849                 // projection changed, recalculate _pivot
62850                 var projection = context.projection;
62851                 var currTransform = projection.transform();
62852                 if (!_prevTransform ||
62853                     currTransform.k !== _prevTransform.k ||
62854                     currTransform.x !== _prevTransform.x ||
62855                     currTransform.y !== _prevTransform.y) {
62856
62857                     var nodes = utilGetAllNodes(entityIDs, context.graph());
62858                     var points = nodes.map(function(n) { return projection(n.loc); });
62859                     _pivot = getPivot(points);
62860                     _prevAngle = undefined;
62861                 }
62862
62863
62864                 var currMouse = context.mouse();
62865                 var currAngle = Math.atan2(currMouse[1] - _pivot[1], currMouse[0] - _pivot[0]);
62866
62867                 if (typeof _prevAngle === 'undefined') { _prevAngle = currAngle; }
62868                 var delta = currAngle - _prevAngle;
62869
62870                 fn(actionRotate(entityIDs, _pivot, delta, projection));
62871
62872                 _prevTransform = currTransform;
62873                 _prevAngle = currAngle;
62874                 _prevGraph = context.graph();
62875             }
62876
62877             function getPivot(points) {
62878                 var _pivot;
62879                 if (points.length === 1) {
62880                     _pivot = points[0];
62881                 } else if (points.length === 2) {
62882                     _pivot = geoVecInterp(points[0], points[1], 0.5);
62883                 } else {
62884                     var polygonHull = d3_polygonHull(points);
62885                     if (polygonHull.length === 2) {
62886                         _pivot = geoVecInterp(points[0], points[1], 0.5);
62887                     } else {
62888                         _pivot = d3_polygonCentroid(d3_polygonHull(points));
62889                     }
62890                 }
62891                 return _pivot;
62892             }
62893
62894
62895             function finish() {
62896                 event.stopPropagation();
62897                 context.replace(actionNoop(), annotation);
62898                 context.enter(modeSelect(context, entityIDs));
62899             }
62900
62901
62902             function cancel() {
62903                 context.pop();
62904                 context.enter(modeSelect(context, entityIDs));
62905             }
62906
62907
62908             function undone() {
62909                 context.enter(modeBrowse(context));
62910             }
62911
62912
62913             mode.enter = function() {
62914                 context.features().forceVisible(entityIDs);
62915
62916                 behaviors.forEach(context.install);
62917
62918                 context.surface()
62919                     .on('mousemove.rotate', doRotate)
62920                     .on('click.rotate', finish);
62921
62922                 context.history()
62923                     .on('undone.rotate', undone);
62924
62925                 keybinding
62926                     .on('⎋', cancel)
62927                     .on('↩', finish);
62928
62929                 d3_select(document)
62930                     .call(keybinding);
62931             };
62932
62933
62934             mode.exit = function() {
62935                 behaviors.forEach(context.uninstall);
62936
62937                 context.surface()
62938                     .on('mousemove.rotate', null)
62939                     .on('click.rotate', null);
62940
62941                 context.history()
62942                     .on('undone.rotate', null);
62943
62944                 d3_select(document)
62945                     .call(keybinding.unbind);
62946
62947                 context.features().forceVisible([]);
62948             };
62949
62950
62951             mode.selectedIDs = function() {
62952                 if (!arguments.length) { return entityIDs; }
62953                 // no assign
62954                 return mode;
62955             };
62956
62957
62958             return mode;
62959         }
62960
62961         function operationRotate(selectedIDs, context) {
62962             var multi = (selectedIDs.length === 1 ? 'single' : 'multiple');
62963             var nodes = utilGetAllNodes(selectedIDs, context.graph());
62964             var coords = nodes.map(function(n) { return n.loc; });
62965             var extent = nodes.reduce(function(extent, node) {
62966                 return extent.extend(node.extent(context.graph()));
62967             }, geoExtent());
62968
62969
62970             var operation = function() {
62971                 context.enter(modeRotate(context, selectedIDs));
62972             };
62973
62974
62975             operation.available = function() {
62976                 return nodes.length >= 2;
62977             };
62978
62979
62980             operation.disabled = function() {
62981
62982                 if (extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
62983                     return 'too_large';
62984                 } else if (someMissing()) {
62985                     return 'not_downloaded';
62986                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
62987                     return 'connected_to_hidden';
62988                 } else if (selectedIDs.some(incompleteRelation)) {
62989                     return 'incomplete_relation';
62990                 }
62991
62992                 return false;
62993
62994
62995                 function someMissing() {
62996                     if (context.inIntro()) { return false; }
62997                     var osm = context.connection();
62998                     if (osm) {
62999                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
63000                         if (missing.length) {
63001                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
63002                             return true;
63003                         }
63004                     }
63005                     return false;
63006                 }
63007
63008                 function incompleteRelation(id) {
63009                     var entity = context.entity(id);
63010                     return entity.type === 'relation' && !entity.isComplete(context.graph());
63011                 }
63012             };
63013
63014
63015             operation.tooltip = function() {
63016                 var disable = operation.disabled();
63017                 return disable ?
63018                     t('operations.rotate.' + disable + '.' + multi) :
63019                     t('operations.rotate.description.' + multi);
63020             };
63021
63022
63023             operation.annotation = function() {
63024                 return selectedIDs.length === 1 ?
63025                     t('operations.rotate.annotation.' + context.geometry(selectedIDs[0])) :
63026                     t('operations.rotate.annotation.multiple');
63027             };
63028
63029
63030             operation.id = 'rotate';
63031             operation.keys = [t('operations.rotate.key')];
63032             operation.title = t('operations.rotate.title');
63033             operation.behavior = behaviorOperation(context).which(operation);
63034
63035             return operation;
63036         }
63037
63038         function modeMove(context, entityIDs, baseGraph) {
63039             var mode = {
63040                 id: 'move',
63041                 button: 'browse'
63042             };
63043
63044             var keybinding = utilKeybinding('move');
63045             var behaviors = [
63046                 behaviorEdit(context),
63047                 operationCircularize(entityIDs, context).behavior,
63048                 operationDelete(entityIDs, context).behavior,
63049                 operationOrthogonalize(entityIDs, context).behavior,
63050                 operationReflectLong(entityIDs, context).behavior,
63051                 operationReflectShort(entityIDs, context).behavior,
63052                 operationRotate(entityIDs, context).behavior
63053             ];
63054             var annotation = entityIDs.length === 1 ?
63055                 t('operations.move.annotation.' + context.geometry(entityIDs[0])) :
63056                 t('operations.move.annotation.multiple');
63057
63058             var _prevGraph;
63059             var _cache;
63060             var _origin;
63061             var _nudgeInterval;
63062
63063
63064             function doMove(nudge) {
63065                 nudge = nudge || [0, 0];
63066
63067                 var fn;
63068                 if (_prevGraph !== context.graph()) {
63069                     _cache = {};
63070                     _origin = context.map().mouseCoordinates();
63071                     fn = context.perform;
63072                 } else {
63073                     fn = context.overwrite;
63074                 }
63075
63076                 var currMouse = context.mouse();
63077                 var origMouse = context.projection(_origin);
63078                 var delta = geoVecSubtract(geoVecSubtract(currMouse, origMouse), nudge);
63079
63080                 fn(actionMove(entityIDs, delta, context.projection, _cache));
63081                 _prevGraph = context.graph();
63082             }
63083
63084
63085             function startNudge(nudge) {
63086                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
63087                 _nudgeInterval = window.setInterval(function() {
63088                     context.pan(nudge);
63089                     doMove(nudge);
63090                 }, 50);
63091             }
63092
63093
63094             function stopNudge() {
63095                 if (_nudgeInterval) {
63096                     window.clearInterval(_nudgeInterval);
63097                     _nudgeInterval = null;
63098                 }
63099             }
63100
63101
63102             function move() {
63103                 doMove();
63104                 var nudge = geoViewportEdge(context.mouse(), context.map().dimensions());
63105                 if (nudge) {
63106                     startNudge(nudge);
63107                 } else {
63108                     stopNudge();
63109                 }
63110             }
63111
63112
63113             function finish() {
63114                 event.stopPropagation();
63115                 context.replace(actionNoop(), annotation);
63116                 context.enter(modeSelect(context, entityIDs));
63117                 stopNudge();
63118             }
63119
63120
63121             function cancel() {
63122                 if (baseGraph) {
63123                     while (context.graph() !== baseGraph) { context.pop(); }
63124                     context.enter(modeBrowse(context));
63125                 } else {
63126                     context.pop();
63127                     context.enter(modeSelect(context, entityIDs));
63128                 }
63129                 stopNudge();
63130             }
63131
63132
63133             function undone() {
63134                 context.enter(modeBrowse(context));
63135             }
63136
63137
63138             mode.enter = function() {
63139                 _origin = context.map().mouseCoordinates();
63140                 _prevGraph = null;
63141                 _cache = {};
63142
63143                 context.features().forceVisible(entityIDs);
63144
63145                 behaviors.forEach(context.install);
63146
63147                 context.surface()
63148                     .on('mousemove.move', move)
63149                     .on('click.move', finish);
63150
63151                 context.history()
63152                     .on('undone.move', undone);
63153
63154                 keybinding
63155                     .on('⎋', cancel)
63156                     .on('↩', finish);
63157
63158                 d3_select(document)
63159                     .call(keybinding);
63160             };
63161
63162
63163             mode.exit = function() {
63164                 stopNudge();
63165
63166                 behaviors.forEach(function(behavior) {
63167                     context.uninstall(behavior);
63168                 });
63169
63170                 context.surface()
63171                     .on('mousemove.move', null)
63172                     .on('click.move', null);
63173
63174                 context.history()
63175                     .on('undone.move', null);
63176
63177                 d3_select(document)
63178                     .call(keybinding.unbind);
63179
63180                 context.features().forceVisible([]);
63181             };
63182
63183
63184             mode.selectedIDs = function() {
63185                 if (!arguments.length) { return entityIDs; }
63186                 // no assign
63187                 return mode;
63188             };
63189
63190
63191             return mode;
63192         }
63193
63194         function behaviorPaste(context) {
63195
63196             function doPaste() {
63197                 // prevent paste during low zoom selection
63198                 if (!context.map().withinEditableZoom()) { return; }
63199
63200                 event.preventDefault();
63201
63202                 var baseGraph = context.graph();
63203                 var mouse = context.mouse();
63204                 var projection = context.projection;
63205                 var viewport = geoExtent(projection.clipExtent()).polygon();
63206
63207                 if (!geoPointInPolygon(mouse, viewport)) { return; }
63208
63209                 var extent = geoExtent();
63210                 var oldIDs = context.copyIDs();
63211                 var oldGraph = context.copyGraph();
63212                 var newIDs = [];
63213
63214                 if (!oldIDs.length) { return; }
63215
63216                 var action = actionCopyEntities(oldIDs, oldGraph);
63217                 context.perform(action);
63218
63219                 var copies = action.copies();
63220                 var originals = new Set();
63221                 Object.values(copies).forEach(function(entity) { originals.add(entity.id); });
63222
63223                 for (var id in copies) {
63224                     var oldEntity = oldGraph.entity(id);
63225                     var newEntity = copies[id];
63226
63227                     extent._extend(oldEntity.extent(oldGraph));
63228
63229                     // Exclude child nodes from newIDs if their parent way was also copied.
63230                     var parents = context.graph().parentWays(newEntity);
63231                     var parentCopied = parents.some(function(parent) {
63232                         return originals.has(parent.id);
63233                     });
63234
63235                     if (!parentCopied) {
63236                         newIDs.push(newEntity.id);
63237                     }
63238                 }
63239
63240                 // Put pasted objects where mouse pointer is..
63241                 var center = projection(extent.center());
63242                 var delta = geoVecSubtract(mouse, center);
63243
63244                 context.perform(actionMove(newIDs, delta, projection));
63245                 context.enter(modeMove(context, newIDs, baseGraph));
63246             }
63247
63248
63249             function behavior() {
63250                 context.keybinding().on(uiCmd('⌘V'), doPaste);
63251                 return behavior;
63252             }
63253
63254
63255             behavior.off = function() {
63256                 context.keybinding().off(uiCmd('⌘V'));
63257             };
63258
63259
63260             return behavior;
63261         }
63262
63263         /*
63264             `behaviorDrag` is like `d3_behavior.drag`, with the following differences:
63265
63266             * The `origin` function is expected to return an [x, y] tuple rather than an
63267               {x, y} object.
63268             * The events are `start`, `move`, and `end`.
63269               (https://github.com/mbostock/d3/issues/563)
63270             * The `start` event is not dispatched until the first cursor movement occurs.
63271               (https://github.com/mbostock/d3/pull/368)
63272             * The `move` event has a `point` and `delta` [x, y] tuple properties rather
63273               than `x`, `y`, `dx`, and `dy` properties.
63274             * The `end` event is not dispatched if no movement occurs.
63275             * An `off` function is available that unbinds the drag's internal event handlers.
63276          */
63277
63278         function behaviorDrag() {
63279             var dispatch$1 = dispatch('start', 'move', 'end');
63280             var _origin = null;
63281             var _selector = '';
63282             var _event;
63283             var _target;
63284             var _surface;
63285
63286
63287             var d3_event_userSelectProperty = utilPrefixCSSProperty('UserSelect');
63288             var d3_event_userSelectSuppress = function() {
63289                     var selection$1 = selection();
63290                     var select = selection$1.style(d3_event_userSelectProperty);
63291                     selection$1.style(d3_event_userSelectProperty, 'none');
63292                     return function() {
63293                         selection$1.style(d3_event_userSelectProperty, select);
63294                     };
63295                 };
63296
63297
63298             function d3_eventCancel() {
63299                 event.stopPropagation();
63300                 event.preventDefault();
63301             }
63302
63303
63304             function eventOf(thiz, argumentz) {
63305                 return function(e1) {
63306                     e1.target = behavior;
63307                     customEvent(e1, dispatch$1.apply, dispatch$1, [e1.type, thiz, argumentz]);
63308                 };
63309             }
63310
63311
63312             function dragstart() {
63313                 _target = this;
63314                 _event = eventOf(_target, arguments);
63315
63316                 var eventTarget = event.target;
63317                 var touchId = event.touches ? event.changedTouches[0].identifier : null;
63318                 var offset;
63319                 var startOrigin = point();
63320                 var started = false;
63321                 var selectEnable = d3_event_userSelectSuppress();
63322
63323                 d3_select(window)
63324                     .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', dragmove)
63325                     .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', dragend, true);
63326
63327                 if (_origin) {
63328                     offset = _origin.apply(_target, arguments);
63329                     offset = [offset[0] - startOrigin[0], offset[1] - startOrigin[1]];
63330                 } else {
63331                     offset = [0, 0];
63332                 }
63333
63334                 if (touchId === null) {
63335                     event.stopPropagation();
63336                 }
63337
63338
63339                 function point() {
63340                     var p = _surface || _target.parentNode;
63341                     return touchId !== null ? d3_touches(p).filter(function(p) {
63342                         return p.identifier === touchId;
63343                     })[0] : d3_mouse(p);
63344                 }
63345
63346
63347                 function dragmove() {
63348                     var p = point();
63349                     var dx = p[0] - startOrigin[0];
63350                     var dy = p[1] - startOrigin[1];
63351
63352                     if (dx === 0 && dy === 0)
63353                         { return; }
63354
63355                     startOrigin = p;
63356                     d3_eventCancel();
63357
63358                     if (!started) {
63359                         started = true;
63360                         _event({ type: 'start' });
63361                     } else {
63362                         _event({
63363                             type: 'move',
63364                             point: [p[0] + offset[0],  p[1] + offset[1]],
63365                             delta: [dx, dy]
63366                         });
63367                     }
63368                 }
63369
63370
63371                 function dragend() {
63372                     if (started) {
63373                         _event({ type: 'end' });
63374
63375                         d3_eventCancel();
63376                         if (event.target === eventTarget) {
63377                             d3_select(window)
63378                                 .on('click.drag', click, true);
63379                         }
63380                     }
63381
63382                     d3_select(window)
63383                         .on(touchId !== null ? 'touchmove.drag-' + touchId : 'mousemove.drag', null)
63384                         .on(touchId !== null ? 'touchend.drag-' + touchId : 'mouseup.drag', null);
63385
63386                     selectEnable();
63387                 }
63388
63389
63390                 function click() {
63391                     d3_eventCancel();
63392                     d3_select(window)
63393                         .on('click.drag', null);
63394                 }
63395             }
63396
63397
63398             function behavior(selection) {
63399                 var matchesSelector = utilPrefixDOMProperty('matchesSelector');
63400                 var delegate = dragstart;
63401
63402                 if (_selector) {
63403                     delegate = function() {
63404                         var root = this;
63405                         var target = event.target;
63406                         for (; target && target !== root; target = target.parentNode) {
63407                             var datum = target.__data__;
63408
63409                             var entity = datum instanceof osmNote ? datum
63410                                 : datum && datum.properties && datum.properties.entity;
63411
63412                             if (entity && target[matchesSelector](_selector)) {
63413                                 return dragstart.call(target, entity);
63414                             }
63415                         }
63416                     };
63417                 }
63418
63419                 selection
63420                     .on('mousedown.drag' + _selector, delegate)
63421                     .on('touchstart.drag' + _selector, delegate);
63422             }
63423
63424
63425             behavior.off = function(selection) {
63426                 selection
63427                     .on('mousedown.drag' + _selector, null)
63428                     .on('touchstart.drag' + _selector, null);
63429             };
63430
63431
63432             behavior.selector = function(_) {
63433                 if (!arguments.length) { return _selector; }
63434                 _selector = _;
63435                 return behavior;
63436             };
63437
63438
63439             behavior.origin = function(_) {
63440                 if (!arguments.length) { return _origin; }
63441                 _origin = _;
63442                 return behavior;
63443             };
63444
63445
63446             behavior.cancel = function() {
63447                 d3_select(window)
63448                     .on('mousemove.drag', null)
63449                     .on('mouseup.drag', null);
63450                 return behavior;
63451             };
63452
63453
63454             behavior.target = function() {
63455                 if (!arguments.length) { return _target; }
63456                 _target = arguments[0];
63457                 _event = eventOf(_target, Array.prototype.slice.call(arguments, 1));
63458                 return behavior;
63459             };
63460
63461
63462             behavior.surface = function() {
63463                 if (!arguments.length) { return _surface; }
63464                 _surface = arguments[0];
63465                 return behavior;
63466             };
63467
63468
63469             return utilRebind(behavior, dispatch$1, 'on');
63470         }
63471
63472         function modeDragNode(context) {
63473             var mode = {
63474                 id: 'drag-node',
63475                 button: 'browse'
63476             };
63477             var hover = behaviorHover(context).altDisables(true)
63478                 .on('hover', context.ui().sidebar.hover);
63479             var edit = behaviorEdit(context);
63480
63481             var _nudgeInterval;
63482             var _restoreSelectedIDs = [];
63483             var _wasMidpoint = false;
63484             var _isCancelled = false;
63485             var _activeEntity;
63486             var _startLoc;
63487             var _lastLoc;
63488
63489
63490             function startNudge(entity, nudge) {
63491                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
63492                 _nudgeInterval = window.setInterval(function() {
63493                     context.pan(nudge);
63494                     doMove(entity, nudge);
63495                 }, 50);
63496             }
63497
63498
63499             function stopNudge() {
63500                 if (_nudgeInterval) {
63501                     window.clearInterval(_nudgeInterval);
63502                     _nudgeInterval = null;
63503                 }
63504             }
63505
63506
63507             function moveAnnotation(entity) {
63508                 return t('operations.move.annotation.' + entity.geometry(context.graph()));
63509             }
63510
63511
63512             function connectAnnotation(nodeEntity, targetEntity) {
63513                 var nodeGeometry = nodeEntity.geometry(context.graph());
63514                 var targetGeometry = targetEntity.geometry(context.graph());
63515                 if (nodeGeometry === 'vertex' && targetGeometry === 'vertex') {
63516                     var nodeParentWayIDs = context.graph().parentWays(nodeEntity);
63517                     var targetParentWayIDs = context.graph().parentWays(targetEntity);
63518                     var sharedParentWays = utilArrayIntersection(nodeParentWayIDs, targetParentWayIDs);
63519                     // if both vertices are part of the same way
63520                     if (sharedParentWays.length !== 0) {
63521                         // if the nodes are next to each other, they are merged
63522                         if (sharedParentWays[0].areAdjacent(nodeEntity.id, targetEntity.id)) {
63523                             return t('operations.connect.annotation.from_vertex.to_adjacent_vertex');
63524                         }
63525                         return t('operations.connect.annotation.from_vertex.to_sibling_vertex');
63526                     }
63527                 }
63528                 return t('operations.connect.annotation.from_' + nodeGeometry + '.to_' + targetGeometry);
63529             }
63530
63531
63532             function shouldSnapToNode(target) {
63533                 if (!_activeEntity) { return false; }
63534                 return _activeEntity.geometry(context.graph()) !== 'vertex' ||
63535                     (target.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(target, context.graph()));
63536             }
63537
63538
63539             function origin(entity) {
63540                 return context.projection(entity.loc);
63541             }
63542
63543
63544             function keydown() {
63545                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
63546                     if (context.surface().classed('nope')) {
63547                         context.surface()
63548                             .classed('nope-suppressed', true);
63549                     }
63550                     context.surface()
63551                         .classed('nope', false)
63552                         .classed('nope-disabled', true);
63553                 }
63554             }
63555
63556
63557             function keyup() {
63558                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
63559                     if (context.surface().classed('nope-suppressed')) {
63560                         context.surface()
63561                             .classed('nope', true);
63562                     }
63563                     context.surface()
63564                         .classed('nope-suppressed', false)
63565                         .classed('nope-disabled', false);
63566                 }
63567             }
63568
63569
63570             function start(entity) {
63571                 _wasMidpoint = entity.type === 'midpoint';
63572                 var hasHidden = context.features().hasHiddenConnections(entity, context.graph());
63573                 _isCancelled = !context.editable() || event.sourceEvent.shiftKey || hasHidden;
63574
63575
63576                 if (_isCancelled) {
63577                     if (hasHidden) {
63578                         uiFlash()
63579                             .duration(4000)
63580                             .text(t('modes.drag_node.connected_to_hidden'))();
63581                     }
63582                     return drag.cancel();
63583                 }
63584
63585                 if (_wasMidpoint) {
63586                     var midpoint = entity;
63587                     entity = osmNode();
63588                     context.perform(actionAddMidpoint(midpoint, entity));
63589                     entity = context.entity(entity.id);   // get post-action entity
63590
63591                     var vertex = context.surface().selectAll('.' + entity.id);
63592                     drag.target(vertex.node(), entity);
63593
63594                 } else {
63595                     context.perform(actionNoop());
63596                 }
63597
63598                 _activeEntity = entity;
63599                 _startLoc = entity.loc;
63600
63601                 hover.ignoreVertex(entity.geometry(context.graph()) === 'vertex');
63602
63603                 context.surface().selectAll('.' + _activeEntity.id)
63604                     .classed('active', true);
63605
63606                 context.enter(mode);
63607             }
63608
63609
63610             // related code
63611             // - `behavior/draw.js` `datum()`
63612             function datum() {
63613                 var event$1 = event && event.sourceEvent;
63614                 if (!event$1 || event$1.altKey) {
63615                     return {};
63616                 } else {
63617                     // When dragging, snap only to touch targets..
63618                     // (this excludes area fills and active drawing elements)
63619                     var d = event$1.target.__data__;
63620                     return (d && d.properties && d.properties.target) ? d : {};
63621                 }
63622             }
63623
63624
63625             function doMove(entity, nudge) {
63626                 nudge = nudge || [0, 0];
63627
63628                 var currPoint = (event && event.point) || context.projection(_lastLoc);
63629                 var currMouse = geoVecSubtract(currPoint, nudge);
63630                 var loc = context.projection.invert(currMouse);
63631
63632                 if (!_nudgeInterval) {   // If not nudging at the edge of the viewport, try to snap..
63633                     // related code
63634                     // - `mode/drag_node.js`     `doMode()`
63635                     // - `behavior/draw.js`      `click()`
63636                     // - `behavior/draw_way.js`  `move()`
63637                     var d = datum();
63638                     var target = d && d.properties && d.properties.entity;
63639                     var targetLoc = target && target.loc;
63640                     var targetNodes = d && d.properties && d.properties.nodes;
63641                     var edge;
63642
63643                     if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
63644                         if (shouldSnapToNode(target)) {
63645                             loc = targetLoc;
63646                         }
63647
63648                     } else if (targetNodes) {   // snap to way - a line target with `.nodes`
63649                         edge = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
63650                         if (edge) {
63651                             loc = edge.loc;
63652                         }
63653                     }
63654                 }
63655
63656                 context.replace(
63657                     actionMoveNode(entity.id, loc)
63658                 );
63659
63660                 // Below here: validations
63661                 var isInvalid = false;
63662
63663                 // Check if this connection to `target` could cause relations to break..
63664                 if (target) {
63665                     isInvalid = hasRelationConflict(entity, target, edge, context.graph());
63666                 }
63667
63668                 // Check if this drag causes the geometry to break..
63669                 if (!isInvalid) {
63670                     isInvalid = hasInvalidGeometry(entity, context.graph());
63671                 }
63672
63673
63674                 var nope = context.surface().classed('nope');
63675                 if (isInvalid === 'relation' || isInvalid === 'restriction') {
63676                     if (!nope) {   // about to nope - show hint
63677                         uiFlash()
63678                             .duration(4000)
63679                             .text(t('operations.connect.' + isInvalid,
63680                                 { relation: context.presets().item('type/restriction').name() }
63681                             ))();
63682                     }
63683                 } else {
63684                     if (nope) {   // about to un-nope, remove hint
63685                         uiFlash()
63686                             .duration(1)
63687                             .text('')();
63688                     }
63689                 }
63690
63691
63692                 var nopeDisabled = context.surface().classed('nope-disabled');
63693                 if (nopeDisabled) {
63694                     context.surface()
63695                         .classed('nope', false)
63696                         .classed('nope-suppressed', isInvalid);
63697                 } else {
63698                     context.surface()
63699                         .classed('nope', isInvalid)
63700                         .classed('nope-suppressed', false);
63701                 }
63702
63703                 _lastLoc = loc;
63704             }
63705
63706
63707             // Uses `actionConnect.disabled()` to know whether this connection is ok..
63708             function hasRelationConflict(entity, target, edge, graph) {
63709                 var testGraph = graph.update();  // copy
63710
63711                 // if snapping to way - add midpoint there and consider that the target..
63712                 if (edge) {
63713                     var midpoint = osmNode();
63714                     var action = actionAddMidpoint({
63715                         loc: edge.loc,
63716                         edge: [target.nodes[edge.index - 1], target.nodes[edge.index]]
63717                     }, midpoint);
63718
63719                     testGraph = action(testGraph);
63720                     target = midpoint;
63721                 }
63722
63723                 // can we connect to it?
63724                 var ids = [entity.id, target.id];
63725                 return actionConnect(ids).disabled(testGraph);
63726             }
63727
63728
63729             function hasInvalidGeometry(entity, graph) {
63730                 var parents = graph.parentWays(entity);
63731                 var i, j, k;
63732
63733                 for (i = 0; i < parents.length; i++) {
63734                     var parent = parents[i];
63735                     var nodes = [];
63736                     var activeIndex = null;    // which multipolygon ring contains node being dragged
63737
63738                     // test any parent multipolygons for valid geometry
63739                     var relations = graph.parentRelations(parent);
63740                     for (j = 0; j < relations.length; j++) {
63741                         if (!relations[j].isMultipolygon()) { continue; }
63742
63743                         var rings = osmJoinWays(relations[j].members, graph);
63744
63745                         // find active ring and test it for self intersections
63746                         for (k = 0; k < rings.length; k++) {
63747                             nodes = rings[k].nodes;
63748                             if (nodes.find(function(n) { return n.id === entity.id; })) {
63749                                 activeIndex = k;
63750                                 if (geoHasSelfIntersections(nodes, entity.id)) {
63751                                     return true;
63752                                 }
63753                             }
63754                             rings[k].coords = nodes.map(function(n) { return n.loc; });
63755                         }
63756
63757                         // test active ring for intersections with other rings in the multipolygon
63758                         for (k = 0; k < rings.length; k++) {
63759                             if (k === activeIndex) { continue; }
63760
63761                             // make sure active ring doesnt cross passive rings
63762                             if (geoHasLineIntersections(rings[activeIndex].nodes, rings[k].nodes, entity.id)) {
63763                                 return true;
63764                             }
63765                         }
63766                     }
63767
63768
63769                     // If we still haven't tested this node's parent way for self-intersections.
63770                     // (because it's not a member of a multipolygon), test it now.
63771                     if (activeIndex === null) {
63772                         nodes = parent.nodes.map(function(nodeID) { return graph.entity(nodeID); });
63773                         if (nodes.length && geoHasSelfIntersections(nodes, entity.id)) {
63774                             return true;
63775                         }
63776                     }
63777
63778                 }
63779
63780                 return false;
63781             }
63782
63783
63784             function move(entity) {
63785                 if (_isCancelled) { return; }
63786                 event.sourceEvent.stopPropagation();
63787
63788                 context.surface().classed('nope-disabled', event.sourceEvent.altKey);
63789
63790                 _lastLoc = context.projection.invert(event.point);
63791
63792                 doMove(entity);
63793                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
63794                 if (nudge) {
63795                     startNudge(entity, nudge);
63796                 } else {
63797                     stopNudge();
63798                 }
63799             }
63800
63801             function end(entity) {
63802                 if (_isCancelled) { return; }
63803
63804                 var wasPoint = entity.geometry(context.graph()) === 'point';
63805
63806                 var d = datum();
63807                 var nope = (d && d.properties && d.properties.nope) || context.surface().classed('nope');
63808                 var target = d && d.properties && d.properties.entity;   // entity to snap to
63809
63810                 if (nope) {   // bounce back
63811                     context.perform(
63812                         _actionBounceBack(entity.id, _startLoc)
63813                     );
63814
63815                 } else if (target && target.type === 'way') {
63816                     var choice = geoChooseEdge(context.childNodes(target), context.mouse(), context.projection, entity.id);
63817                     context.replace(
63818                         actionAddMidpoint({
63819                             loc: choice.loc,
63820                             edge: [target.nodes[choice.index - 1], target.nodes[choice.index]]
63821                         }, entity),
63822                         connectAnnotation(entity, target)
63823                     );
63824
63825                 } else if (target && target.type === 'node' && shouldSnapToNode(target)) {
63826                     context.replace(
63827                         actionConnect([target.id, entity.id]),
63828                         connectAnnotation(entity, target)
63829                     );
63830
63831                 } else if (_wasMidpoint) {
63832                     context.replace(
63833                         actionNoop(),
63834                         t('operations.add.annotation.vertex')
63835                     );
63836
63837                 } else {
63838                     context.replace(
63839                         actionNoop(),
63840                         moveAnnotation(entity)
63841                     );
63842                 }
63843
63844                 if (wasPoint) {
63845                     context.enter(modeSelect(context, [entity.id]));
63846
63847                 } else {
63848                     var reselection = _restoreSelectedIDs.filter(function(id) {
63849                         return context.graph().hasEntity(id);
63850                     });
63851
63852                     if (reselection.length) {
63853                         context.enter(modeSelect(context, reselection));
63854                     } else {
63855                         context.enter(modeBrowse(context));
63856                     }
63857                 }
63858             }
63859
63860
63861             function _actionBounceBack(nodeID, toLoc) {
63862                 var moveNode = actionMoveNode(nodeID, toLoc);
63863                 var action = function(graph, t) {
63864                     // last time through, pop off the bounceback perform.
63865                     // it will then overwrite the initial perform with a moveNode that does nothing
63866                     if (t === 1) { context.pop(); }
63867                     return moveNode(graph, t);
63868                 };
63869                 action.transitionable = true;
63870                 return action;
63871             }
63872
63873
63874             function cancel() {
63875                 drag.cancel();
63876                 context.enter(modeBrowse(context));
63877             }
63878
63879
63880             var drag = behaviorDrag()
63881                 .selector('.layer-touch.points .target')
63882                 .surface(d3_select('#map').node())
63883                 .origin(origin)
63884                 .on('start', start)
63885                 .on('move', move)
63886                 .on('end', end);
63887
63888
63889             mode.enter = function() {
63890                 context.install(hover);
63891                 context.install(edit);
63892
63893                 d3_select(window)
63894                     .on('keydown.drawWay', keydown)
63895                     .on('keyup.drawWay', keyup);
63896
63897                 context.history()
63898                     .on('undone.drag-node', cancel);
63899             };
63900
63901
63902             mode.exit = function() {
63903                 context.ui().sidebar.hover.cancel();
63904                 context.uninstall(hover);
63905                 context.uninstall(edit);
63906
63907                 d3_select(window)
63908                     .on('keydown.hover', null)
63909                     .on('keyup.hover', null);
63910
63911                 context.history()
63912                     .on('undone.drag-node', null);
63913
63914                 _activeEntity = null;
63915
63916                 context.surface()
63917                     .classed('nope', false)
63918                     .classed('nope-suppressed', false)
63919                     .classed('nope-disabled', false)
63920                     .selectAll('.active')
63921                     .classed('active', false);
63922
63923                 stopNudge();
63924             };
63925
63926
63927             mode.selectedIDs = function() {
63928                 if (!arguments.length) { return _activeEntity ? [_activeEntity.id] : []; }
63929                 // no assign
63930                 return mode;
63931             };
63932
63933
63934             mode.activeID = function() {
63935                 if (!arguments.length) { return _activeEntity && _activeEntity.id; }
63936                 // no assign
63937                 return mode;
63938             };
63939
63940
63941             mode.restoreSelectedIDs = function(_) {
63942                 if (!arguments.length) { return _restoreSelectedIDs; }
63943                 _restoreSelectedIDs = _;
63944                 return mode;
63945             };
63946
63947
63948             mode.behavior = drag;
63949
63950
63951             return mode;
63952         }
63953
63954         function quickselect$1(arr, k, left, right, compare) {
63955             quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
63956         }
63957
63958         function quickselectStep(arr, k, left, right, compare) {
63959
63960             while (right > left) {
63961                 if (right - left > 600) {
63962                     var n = right - left + 1;
63963                     var m = k - left + 1;
63964                     var z = Math.log(n);
63965                     var s = 0.5 * Math.exp(2 * z / 3);
63966                     var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
63967                     var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
63968                     var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
63969                     quickselectStep(arr, k, newLeft, newRight, compare);
63970                 }
63971
63972                 var t = arr[k];
63973                 var i = left;
63974                 var j = right;
63975
63976                 swap(arr, left, k);
63977                 if (compare(arr[right], t) > 0) { swap(arr, left, right); }
63978
63979                 while (i < j) {
63980                     swap(arr, i, j);
63981                     i++;
63982                     j--;
63983                     while (compare(arr[i], t) < 0) { i++; }
63984                     while (compare(arr[j], t) > 0) { j--; }
63985                 }
63986
63987                 if (compare(arr[left], t) === 0) { swap(arr, left, j); }
63988                 else {
63989                     j++;
63990                     swap(arr, j, right);
63991                 }
63992
63993                 if (j <= k) { left = j + 1; }
63994                 if (k <= j) { right = j - 1; }
63995             }
63996         }
63997
63998         function swap(arr, i, j) {
63999             var tmp = arr[i];
64000             arr[i] = arr[j];
64001             arr[j] = tmp;
64002         }
64003
64004         function defaultCompare(a, b) {
64005             return a < b ? -1 : a > b ? 1 : 0;
64006         }
64007
64008         var RBush = function RBush(maxEntries) {
64009             if ( maxEntries === void 0 ) maxEntries = 9;
64010
64011             // max entries in a node is 9 by default; min node fill is 40% for best performance
64012             this._maxEntries = Math.max(4, maxEntries);
64013             this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
64014             this.clear();
64015         };
64016
64017         RBush.prototype.all = function all () {
64018             return this._all(this.data, []);
64019         };
64020
64021         RBush.prototype.search = function search (bbox) {
64022             var node = this.data;
64023             var result = [];
64024
64025             if (!intersects$2(bbox, node)) { return result; }
64026
64027             var toBBox = this.toBBox;
64028             var nodesToSearch = [];
64029
64030             while (node) {
64031                 for (var i = 0; i < node.children.length; i++) {
64032                     var child = node.children[i];
64033                     var childBBox = node.leaf ? toBBox(child) : child;
64034
64035                     if (intersects$2(bbox, childBBox)) {
64036                         if (node.leaf) { result.push(child); }
64037                         else if (contains$5(bbox, childBBox)) { this._all(child, result); }
64038                         else { nodesToSearch.push(child); }
64039                     }
64040                 }
64041                 node = nodesToSearch.pop();
64042             }
64043
64044             return result;
64045         };
64046
64047         RBush.prototype.collides = function collides (bbox) {
64048             var node = this.data;
64049
64050             if (!intersects$2(bbox, node)) { return false; }
64051
64052             var nodesToSearch = [];
64053             while (node) {
64054                 for (var i = 0; i < node.children.length; i++) {
64055                     var child = node.children[i];
64056                     var childBBox = node.leaf ? this.toBBox(child) : child;
64057
64058                     if (intersects$2(bbox, childBBox)) {
64059                         if (node.leaf || contains$5(bbox, childBBox)) { return true; }
64060                         nodesToSearch.push(child);
64061                     }
64062                 }
64063                 node = nodesToSearch.pop();
64064             }
64065
64066             return false;
64067         };
64068
64069         RBush.prototype.load = function load (data) {
64070             if (!(data && data.length)) { return this; }
64071
64072             if (data.length < this._minEntries) {
64073                 for (var i = 0; i < data.length; i++) {
64074                     this.insert(data[i]);
64075                 }
64076                 return this;
64077             }
64078
64079             // recursively build the tree with the given data from scratch using OMT algorithm
64080             var node = this._build(data.slice(), 0, data.length - 1, 0);
64081
64082             if (!this.data.children.length) {
64083                 // save as is if tree is empty
64084                 this.data = node;
64085
64086             } else if (this.data.height === node.height) {
64087                 // split root if trees have the same height
64088                 this._splitRoot(this.data, node);
64089
64090             } else {
64091                 if (this.data.height < node.height) {
64092                     // swap trees if inserted one is bigger
64093                     var tmpNode = this.data;
64094                     this.data = node;
64095                     node = tmpNode;
64096                 }
64097
64098                 // insert the small tree into the large tree at appropriate level
64099                 this._insert(node, this.data.height - node.height - 1, true);
64100             }
64101
64102             return this;
64103         };
64104
64105         RBush.prototype.insert = function insert (item) {
64106             if (item) { this._insert(item, this.data.height - 1); }
64107             return this;
64108         };
64109
64110         RBush.prototype.clear = function clear () {
64111             this.data = createNode$1([]);
64112             return this;
64113         };
64114
64115         RBush.prototype.remove = function remove (item, equalsFn) {
64116             if (!item) { return this; }
64117
64118             var node = this.data;
64119             var bbox = this.toBBox(item);
64120             var path = [];
64121             var indexes = [];
64122             var i, parent, goingUp;
64123
64124             // depth-first iterative tree traversal
64125             while (node || path.length) {
64126
64127                 if (!node) { // go up
64128                     node = path.pop();
64129                     parent = path[path.length - 1];
64130                     i = indexes.pop();
64131                     goingUp = true;
64132                 }
64133
64134                 if (node.leaf) { // check current node
64135                     var index = findItem$1(item, node.children, equalsFn);
64136
64137                     if (index !== -1) {
64138                         // item found, remove the item and condense tree upwards
64139                         node.children.splice(index, 1);
64140                         path.push(node);
64141                         this._condense(path);
64142                         return this;
64143                     }
64144                 }
64145
64146                 if (!goingUp && !node.leaf && contains$5(node, bbox)) { // go down
64147                     path.push(node);
64148                     indexes.push(i);
64149                     i = 0;
64150                     parent = node;
64151                     node = node.children[0];
64152
64153                 } else if (parent) { // go right
64154                     i++;
64155                     node = parent.children[i];
64156                     goingUp = false;
64157
64158                 } else { node = null; } // nothing found
64159             }
64160
64161             return this;
64162         };
64163
64164         RBush.prototype.toBBox = function toBBox (item) { return item; };
64165
64166         RBush.prototype.compareMinX = function compareMinX (a, b) { return a.minX - b.minX; };
64167         RBush.prototype.compareMinY = function compareMinY (a, b) { return a.minY - b.minY; };
64168
64169         RBush.prototype.toJSON = function toJSON () { return this.data; };
64170
64171         RBush.prototype.fromJSON = function fromJSON (data) {
64172             this.data = data;
64173             return this;
64174         };
64175
64176         RBush.prototype._all = function _all (node, result) {
64177             var nodesToSearch = [];
64178             while (node) {
64179                 if (node.leaf) { result.push.apply(result, node.children); }
64180                 else { nodesToSearch.push.apply(nodesToSearch, node.children); }
64181
64182                 node = nodesToSearch.pop();
64183             }
64184             return result;
64185         };
64186
64187         RBush.prototype._build = function _build (items, left, right, height) {
64188
64189             var N = right - left + 1;
64190             var M = this._maxEntries;
64191             var node;
64192
64193             if (N <= M) {
64194                 // reached leaf level; return leaf
64195                 node = createNode$1(items.slice(left, right + 1));
64196                 calcBBox$1(node, this.toBBox);
64197                 return node;
64198             }
64199
64200             if (!height) {
64201                 // target height of the bulk-loaded tree
64202                 height = Math.ceil(Math.log(N) / Math.log(M));
64203
64204                 // target number of root entries to maximize storage utilization
64205                 M = Math.ceil(N / Math.pow(M, height - 1));
64206             }
64207
64208             node = createNode$1([]);
64209             node.leaf = false;
64210             node.height = height;
64211
64212             // split the items into M mostly square tiles
64213
64214             var N2 = Math.ceil(N / M);
64215             var N1 = N2 * Math.ceil(Math.sqrt(M));
64216
64217             multiSelect$1(items, left, right, N1, this.compareMinX);
64218
64219             for (var i = left; i <= right; i += N1) {
64220
64221                 var right2 = Math.min(i + N1 - 1, right);
64222
64223                 multiSelect$1(items, i, right2, N2, this.compareMinY);
64224
64225                 for (var j = i; j <= right2; j += N2) {
64226
64227                     var right3 = Math.min(j + N2 - 1, right2);
64228
64229                     // pack each entry recursively
64230                     node.children.push(this._build(items, j, right3, height - 1));
64231                 }
64232             }
64233
64234             calcBBox$1(node, this.toBBox);
64235
64236             return node;
64237         };
64238
64239         RBush.prototype._chooseSubtree = function _chooseSubtree (bbox, node, level, path) {
64240             while (true) {
64241                 path.push(node);
64242
64243                 if (node.leaf || path.length - 1 === level) { break; }
64244
64245                 var minArea = Infinity;
64246                 var minEnlargement = Infinity;
64247                 var targetNode = (void 0);
64248
64249                 for (var i = 0; i < node.children.length; i++) {
64250                     var child = node.children[i];
64251                     var area = bboxArea$1(child);
64252                     var enlargement = enlargedArea$1(bbox, child) - area;
64253
64254                     // choose entry with the least area enlargement
64255                     if (enlargement < minEnlargement) {
64256                         minEnlargement = enlargement;
64257                         minArea = area < minArea ? area : minArea;
64258                         targetNode = child;
64259
64260                     } else if (enlargement === minEnlargement) {
64261                         // otherwise choose one with the smallest area
64262                         if (area < minArea) {
64263                             minArea = area;
64264                             targetNode = child;
64265                         }
64266                     }
64267                 }
64268
64269                 node = targetNode || node.children[0];
64270             }
64271
64272             return node;
64273         };
64274
64275         RBush.prototype._insert = function _insert (item, level, isNode) {
64276             var bbox = isNode ? item : this.toBBox(item);
64277             var insertPath = [];
64278
64279             // find the best node for accommodating the item, saving all nodes along the path too
64280             var node = this._chooseSubtree(bbox, this.data, level, insertPath);
64281
64282             // put the item into the node
64283             node.children.push(item);
64284             extend$2(node, bbox);
64285
64286             // split on node overflow; propagate upwards if necessary
64287             while (level >= 0) {
64288                 if (insertPath[level].children.length > this._maxEntries) {
64289                     this._split(insertPath, level);
64290                     level--;
64291                 } else { break; }
64292             }
64293
64294             // adjust bboxes along the insertion path
64295             this._adjustParentBBoxes(bbox, insertPath, level);
64296         };
64297
64298         // split overflowed node into two
64299         RBush.prototype._split = function _split (insertPath, level) {
64300             var node = insertPath[level];
64301             var M = node.children.length;
64302             var m = this._minEntries;
64303
64304             this._chooseSplitAxis(node, m, M);
64305
64306             var splitIndex = this._chooseSplitIndex(node, m, M);
64307
64308             var newNode = createNode$1(node.children.splice(splitIndex, node.children.length - splitIndex));
64309             newNode.height = node.height;
64310             newNode.leaf = node.leaf;
64311
64312             calcBBox$1(node, this.toBBox);
64313             calcBBox$1(newNode, this.toBBox);
64314
64315             if (level) { insertPath[level - 1].children.push(newNode); }
64316             else { this._splitRoot(node, newNode); }
64317         };
64318
64319         RBush.prototype._splitRoot = function _splitRoot (node, newNode) {
64320             // split root node
64321             this.data = createNode$1([node, newNode]);
64322             this.data.height = node.height + 1;
64323             this.data.leaf = false;
64324             calcBBox$1(this.data, this.toBBox);
64325         };
64326
64327         RBush.prototype._chooseSplitIndex = function _chooseSplitIndex (node, m, M) {
64328             var index;
64329             var minOverlap = Infinity;
64330             var minArea = Infinity;
64331
64332             for (var i = m; i <= M - m; i++) {
64333                 var bbox1 = distBBox$1(node, 0, i, this.toBBox);
64334                 var bbox2 = distBBox$1(node, i, M, this.toBBox);
64335
64336                 var overlap = intersectionArea$1(bbox1, bbox2);
64337                 var area = bboxArea$1(bbox1) + bboxArea$1(bbox2);
64338
64339                 // choose distribution with minimum overlap
64340                 if (overlap < minOverlap) {
64341                     minOverlap = overlap;
64342                     index = i;
64343
64344                     minArea = area < minArea ? area : minArea;
64345
64346                 } else if (overlap === minOverlap) {
64347                     // otherwise choose distribution with minimum area
64348                     if (area < minArea) {
64349                         minArea = area;
64350                         index = i;
64351                     }
64352                 }
64353             }
64354
64355             return index || M - m;
64356         };
64357
64358         // sorts node children by the best axis for split
64359         RBush.prototype._chooseSplitAxis = function _chooseSplitAxis (node, m, M) {
64360             var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX$1;
64361             var compareMinY = node.leaf ? this.compareMinY : compareNodeMinY$1;
64362             var xMargin = this._allDistMargin(node, m, M, compareMinX);
64363             var yMargin = this._allDistMargin(node, m, M, compareMinY);
64364
64365             // if total distributions margin value is minimal for x, sort by minX,
64366             // otherwise it's already sorted by minY
64367             if (xMargin < yMargin) { node.children.sort(compareMinX); }
64368         };
64369
64370         // total margin of all possible split distributions where each node is at least m full
64371         RBush.prototype._allDistMargin = function _allDistMargin (node, m, M, compare) {
64372             node.children.sort(compare);
64373
64374             var toBBox = this.toBBox;
64375             var leftBBox = distBBox$1(node, 0, m, toBBox);
64376             var rightBBox = distBBox$1(node, M - m, M, toBBox);
64377             var margin = bboxMargin$1(leftBBox) + bboxMargin$1(rightBBox);
64378
64379             for (var i = m; i < M - m; i++) {
64380                 var child = node.children[i];
64381                 extend$2(leftBBox, node.leaf ? toBBox(child) : child);
64382                 margin += bboxMargin$1(leftBBox);
64383             }
64384
64385             for (var i$1 = M - m - 1; i$1 >= m; i$1--) {
64386                 var child$1 = node.children[i$1];
64387                 extend$2(rightBBox, node.leaf ? toBBox(child$1) : child$1);
64388                 margin += bboxMargin$1(rightBBox);
64389             }
64390
64391             return margin;
64392         };
64393
64394         RBush.prototype._adjustParentBBoxes = function _adjustParentBBoxes (bbox, path, level) {
64395             // adjust bboxes along the given tree path
64396             for (var i = level; i >= 0; i--) {
64397                 extend$2(path[i], bbox);
64398             }
64399         };
64400
64401         RBush.prototype._condense = function _condense (path) {
64402             // go through the path, removing empty nodes and updating bboxes
64403             for (var i = path.length - 1, siblings = (void 0); i >= 0; i--) {
64404                 if (path[i].children.length === 0) {
64405                     if (i > 0) {
64406                         siblings = path[i - 1].children;
64407                         siblings.splice(siblings.indexOf(path[i]), 1);
64408
64409                     } else { this.clear(); }
64410
64411                 } else { calcBBox$1(path[i], this.toBBox); }
64412             }
64413         };
64414
64415         function findItem$1(item, items, equalsFn) {
64416             if (!equalsFn) { return items.indexOf(item); }
64417
64418             for (var i = 0; i < items.length; i++) {
64419                 if (equalsFn(item, items[i])) { return i; }
64420             }
64421             return -1;
64422         }
64423
64424         // calculate node's bbox from bboxes of its children
64425         function calcBBox$1(node, toBBox) {
64426             distBBox$1(node, 0, node.children.length, toBBox, node);
64427         }
64428
64429         // min bounding rectangle of node children from k to p-1
64430         function distBBox$1(node, k, p, toBBox, destNode) {
64431             if (!destNode) { destNode = createNode$1(null); }
64432             destNode.minX = Infinity;
64433             destNode.minY = Infinity;
64434             destNode.maxX = -Infinity;
64435             destNode.maxY = -Infinity;
64436
64437             for (var i = k; i < p; i++) {
64438                 var child = node.children[i];
64439                 extend$2(destNode, node.leaf ? toBBox(child) : child);
64440             }
64441
64442             return destNode;
64443         }
64444
64445         function extend$2(a, b) {
64446             a.minX = Math.min(a.minX, b.minX);
64447             a.minY = Math.min(a.minY, b.minY);
64448             a.maxX = Math.max(a.maxX, b.maxX);
64449             a.maxY = Math.max(a.maxY, b.maxY);
64450             return a;
64451         }
64452
64453         function compareNodeMinX$1(a, b) { return a.minX - b.minX; }
64454         function compareNodeMinY$1(a, b) { return a.minY - b.minY; }
64455
64456         function bboxArea$1(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
64457         function bboxMargin$1(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
64458
64459         function enlargedArea$1(a, b) {
64460             return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
64461                    (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
64462         }
64463
64464         function intersectionArea$1(a, b) {
64465             var minX = Math.max(a.minX, b.minX);
64466             var minY = Math.max(a.minY, b.minY);
64467             var maxX = Math.min(a.maxX, b.maxX);
64468             var maxY = Math.min(a.maxY, b.maxY);
64469
64470             return Math.max(0, maxX - minX) *
64471                    Math.max(0, maxY - minY);
64472         }
64473
64474         function contains$5(a, b) {
64475             return a.minX <= b.minX &&
64476                    a.minY <= b.minY &&
64477                    b.maxX <= a.maxX &&
64478                    b.maxY <= a.maxY;
64479         }
64480
64481         function intersects$2(a, b) {
64482             return b.minX <= a.maxX &&
64483                    b.minY <= a.maxY &&
64484                    b.maxX >= a.minX &&
64485                    b.maxY >= a.minY;
64486         }
64487
64488         function createNode$1(children) {
64489             return {
64490                 children: children,
64491                 height: 1,
64492                 leaf: true,
64493                 minX: Infinity,
64494                 minY: Infinity,
64495                 maxX: -Infinity,
64496                 maxY: -Infinity
64497             };
64498         }
64499
64500         // sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
64501         // combines selection algorithm with binary divide & conquer approach
64502
64503         function multiSelect$1(arr, left, right, n, compare) {
64504             var stack = [left, right];
64505
64506             while (stack.length) {
64507                 right = stack.pop();
64508                 left = stack.pop();
64509
64510                 if (right - left <= n) { continue; }
64511
64512                 var mid = left + Math.ceil((right - left) / n / 2) * n;
64513                 quickselect$1(arr, mid, left, right, compare);
64514
64515                 stack.push(left, mid, mid, right);
64516             }
64517         }
64518
64519         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"};
64520         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: \\((.+)\\)"}};
64521
64522         var tiler = utilTiler();
64523         var dispatch$1 = dispatch('loaded');
64524
64525         var _krCache;
64526         var _krZoom = 14;
64527         var _krUrlRoot = 'https://www.keepright.at/';
64528
64529         var _krRuleset = [
64530             // no 20 - multiple node on same spot - these are mostly boundaries overlapping roads
64531             30, 40, 50, 60, 70, 90, 100, 110, 120, 130, 150, 160, 170, 180,
64532             190, 191, 192, 193, 194, 195, 196, 197, 198,
64533             200, 201, 202, 203, 204, 205, 206, 207, 208, 210, 220,
64534             230, 231, 232, 270, 280, 281, 282, 283, 284, 285,
64535             290, 291, 292, 293, 294, 295, 296, 297, 298, 300, 310, 311, 312, 313,
64536             320, 350, 360, 370, 380, 390, 400, 401, 402, 410, 411, 412, 413
64537         ];
64538
64539
64540         function abortRequest(controller) {
64541             if (controller) {
64542                 controller.abort();
64543             }
64544         }
64545
64546         function abortUnwantedRequests(cache, tiles) {
64547             Object.keys(cache.inflightTile).forEach(function(k) {
64548                 var wanted = tiles.find(function(tile) { return k === tile.id; });
64549                 if (!wanted) {
64550                     abortRequest(cache.inflightTile[k]);
64551                     delete cache.inflightTile[k];
64552                 }
64553             });
64554         }
64555
64556
64557         function encodeErrorRtree(d) {
64558             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
64559         }
64560
64561
64562         // replace or remove error from rtree
64563         function updateRtree(item, replace) {
64564             _krCache.rtree.remove(item, function isEql(a, b) {
64565                 return a.data.id === b.data.id;
64566             });
64567
64568             if (replace) {
64569                 _krCache.rtree.insert(item);
64570             }
64571         }
64572
64573
64574         function tokenReplacements(d) {
64575             if (!(d instanceof qaError)) { return; }
64576
64577             var htmlRegex = new RegExp(/<\/[a-z][\s\S]*>/);
64578             var replacements = {};
64579
64580             var errorTemplate = errorTypes[d.which_type];
64581             if (!errorTemplate) {
64582                 /* eslint-disable no-console */
64583                 console.log('No Template: ', d.which_type);
64584                 console.log('  ', d.description);
64585                 /* eslint-enable no-console */
64586                 return;
64587             }
64588
64589             // some descriptions are just fixed text
64590             if (!errorTemplate.regex) { return; }
64591
64592             // regex pattern should match description with variable details captured
64593             var errorRegex = new RegExp(errorTemplate.regex, 'i');
64594             var errorMatch = errorRegex.exec(d.description);
64595             if (!errorMatch) {
64596                 /* eslint-disable no-console */
64597                 console.log('Unmatched: ', d.which_type);
64598                 console.log('  ', d.description);
64599                 console.log('  ', errorRegex);
64600                 /* eslint-enable no-console */
64601                 return;
64602             }
64603
64604             for (var i = 1; i < errorMatch.length; i++) {   // skip first
64605                 var capture = errorMatch[i];
64606                 var idType;
64607
64608                 idType = 'IDs' in errorTemplate ? errorTemplate.IDs[i-1] : '';
64609                 if (idType && capture) {   // link IDs if present in the capture
64610                     capture = parseError(capture, idType);
64611                 } else if (htmlRegex.test(capture)) {   // escape any html in non-IDs
64612                     capture = '\\' +  capture + '\\';
64613                 } else {
64614                     var compare = capture.toLowerCase();
64615                     if (localizeStrings[compare]) {   // some replacement strings can be localized
64616                         capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
64617                     }
64618                 }
64619
64620                 replacements['var' + i] = capture;
64621             }
64622
64623             return replacements;
64624         }
64625
64626
64627         function parseError(capture, idType) {
64628             var compare = capture.toLowerCase();
64629             if (localizeStrings[compare]) {   // some replacement strings can be localized
64630                 capture = t('QA.keepRight.error_parts.' + localizeStrings[compare]);
64631             }
64632
64633             switch (idType) {
64634                 // link a string like "this node"
64635                 case 'this':
64636                     capture = linkErrorObject(capture);
64637                     break;
64638
64639                 case 'url':
64640                     capture = linkURL(capture);
64641                     break;
64642
64643                 // link an entity ID
64644                 case 'n':
64645                 case 'w':
64646                 case 'r':
64647                     capture = linkEntity(idType + capture);
64648                     break;
64649
64650                 // some errors have more complex ID lists/variance
64651                 case '20':
64652                     capture = parse20(capture);
64653                     break;
64654                 case '211':
64655                     capture = parse211(capture);
64656                     break;
64657                 case '231':
64658                     capture = parse231(capture);
64659                     break;
64660                 case '294':
64661                     capture = parse294(capture);
64662                     break;
64663                 case '370':
64664                     capture = parse370(capture);
64665                     break;
64666             }
64667
64668             return capture;
64669
64670
64671             function linkErrorObject(d) {
64672                 return '<a class="error_object_link">' + d + '</a>';
64673             }
64674
64675             function linkEntity(d) {
64676                 return '<a class="error_entity_link">' + d + '</a>';
64677             }
64678
64679             function linkURL(d) {
64680                 return '<a class="kr_external_link" target="_blank" href="' + d + '">' + d + '</a>';
64681             }
64682
64683             // arbitrary node list of form: #ID, #ID, #ID...
64684             function parse211(capture) {
64685                 var newList = [];
64686                 var items = capture.split(', ');
64687
64688                 items.forEach(function(item) {
64689                     // ID has # at the front
64690                     var id = linkEntity('n' + item.slice(1));
64691                     newList.push(id);
64692                 });
64693
64694                 return newList.join(', ');
64695             }
64696
64697             // arbitrary way list of form: #ID(layer),#ID(layer),#ID(layer)...
64698             function parse231(capture) {
64699                 var newList = [];
64700                 // unfortunately 'layer' can itself contain commas, so we split on '),'
64701                 var items = capture.split('),');
64702
64703                 items.forEach(function(item) {
64704                     var match = item.match(/\#(\d+)\((.+)\)?/);
64705                     if (match !== null && match.length > 2) {
64706                         newList.push(linkEntity('w' + match[1]) + ' ' +
64707                             t('QA.keepRight.errorTypes.231.layer', { layer: match[2] })
64708                         );
64709                     }
64710                 });
64711
64712                 return newList.join(', ');
64713             }
64714
64715             // arbitrary node/relation list of form: from node #ID,to relation #ID,to node #ID...
64716             function parse294(capture) {
64717                 var newList = [];
64718                 var items = capture.split(',');
64719
64720                 items.forEach(function(item) {
64721                     var role;
64722                     var idType;
64723                     var id;
64724
64725                     // item of form "from/to node/relation #ID"
64726                     item = item.split(' ');
64727
64728                     // to/from role is more clear in quotes
64729                     role = '"' + item[0] + '"';
64730
64731                     // first letter of node/relation provides the type
64732                     idType = item[1].slice(0,1);
64733
64734                     // ID has # at the front
64735                     id = item[2].slice(1);
64736                     id = linkEntity(idType + id);
64737
64738                     item = [role, item[1], id].join(' ');
64739                     newList.push(item);
64740                 });
64741
64742                 return newList.join(', ');
64743             }
64744
64745             // may or may not include the string "(including the name 'name')"
64746             function parse370(capture) {
64747                 if (!capture) { return ''; }
64748
64749                 var match = capture.match(/\(including the name (\'.+\')\)/);
64750                 if (match !== null && match.length) {
64751                     return t('QA.keepRight.errorTypes.370.including_the_name', { name: match[1] });
64752                 }
64753                 return '';
64754             }
64755
64756             // arbitrary node list of form: #ID,#ID,#ID...
64757             function parse20(capture) {
64758                 var newList = [];
64759                 var items = capture.split(',');
64760
64761                 items.forEach(function(item) {
64762                     // ID has # at the front
64763                     var id = linkEntity('n' + item.slice(1));
64764                     newList.push(id);
64765                 });
64766
64767                 return newList.join(', ');
64768             }
64769         }
64770
64771
64772         var serviceKeepRight = {
64773             init: function() {
64774                 if (!_krCache) {
64775                     this.reset();
64776                 }
64777
64778                 this.event = utilRebind(this, dispatch$1, 'on');
64779             },
64780
64781             reset: function() {
64782                 if (_krCache) {
64783                     Object.values(_krCache.inflightTile).forEach(abortRequest);
64784                 }
64785
64786                 _krCache = {
64787                     data: {},
64788                     loadedTile: {},
64789                     inflightTile: {},
64790                     inflightPost: {},
64791                     closed: {},
64792                     rtree: new RBush()
64793                 };
64794             },
64795
64796
64797             // KeepRight API:  http://osm.mueschelsoft.de/keepright/interfacing.php
64798             loadErrors: function(projection) {
64799                 var options = { format: 'geojson' };
64800                 var rules = _krRuleset.join();
64801
64802                 // determine the needed tiles to cover the view
64803                 var tiles = tiler
64804                     .zoomExtent([_krZoom, _krZoom])
64805                     .getTiles(projection);
64806
64807                 // abort inflight requests that are no longer needed
64808                 abortUnwantedRequests(_krCache, tiles);
64809
64810                 // issue new requests..
64811                 tiles.forEach(function(tile) {
64812                     if (_krCache.loadedTile[tile.id] || _krCache.inflightTile[tile.id]) { return; }
64813
64814                     var rect = tile.extent.rectangle();
64815                     var params = Object.assign({}, options, { left: rect[0], bottom: rect[3], right: rect[2], top: rect[1] });
64816                     var url = _krUrlRoot + 'export.php?' + utilQsString(params) + '&ch=' + rules;
64817
64818                     var controller = new AbortController();
64819                     _krCache.inflightTile[tile.id] = controller;
64820
64821                     d3_json(url, { signal: controller.signal })
64822                         .then(function(data) {
64823                             delete _krCache.inflightTile[tile.id];
64824                             _krCache.loadedTile[tile.id] = true;
64825                             if (!data || !data.features || !data.features.length) {
64826                                 throw new Error('No Data');
64827                             }
64828
64829                             data.features.forEach(function(feature) {
64830                                 var loc = feature.geometry.coordinates;
64831                                 var props = feature.properties;
64832
64833                                 // if there is a parent, save its error type e.g.:
64834                                 //  Error 191 = "highway-highway"
64835                                 //  Error 190 = "intersections without junctions"  (parent)
64836                                 var errorType = props.error_type;
64837                                 var errorTemplate = errorTypes[errorType];
64838                                 var parentErrorType = (Math.floor(errorType / 10) * 10).toString();
64839
64840                                 // try to handle error type directly, fallback to parent error type.
64841                                 var whichType = errorTemplate ? errorType : parentErrorType;
64842                                 var whichTemplate = errorTypes[whichType];
64843
64844                                 // Rewrite a few of the errors at this point..
64845                                 // This is done to make them easier to linkify and translate.
64846                                 switch (whichType) {
64847                                     case '170':
64848                                         props.description = 'This feature has a FIXME tag: ' + props.description;
64849                                         break;
64850                                     case '292':
64851                                     case '293':
64852                                         props.description = props.description.replace('A turn-', 'This turn-');
64853                                         break;
64854                                     case '294':
64855                                     case '295':
64856                                     case '296':
64857                                     case '297':
64858                                     case '298':
64859                                         props.description = 'This turn-restriction~' + props.description;
64860                                         break;
64861                                     case '300':
64862                                         props.description = 'This highway is missing a maxspeed tag';
64863                                         break;
64864                                     case '411':
64865                                     case '412':
64866                                     case '413':
64867                                         props.description = 'This feature~' + props.description;
64868                                         break;
64869                                 }
64870
64871                                 // - move markers slightly so it doesn't obscure the geometry,
64872                                 // - then move markers away from other coincident markers
64873                                 var coincident = false;
64874                                 do {
64875                                     // first time, move marker up. after that, move marker right.
64876                                     var delta = coincident ? [0.00001, 0] : [0, 0.00001];
64877                                     loc = geoVecAdd(loc, delta);
64878                                     var bbox = geoExtent(loc).bbox();
64879                                     coincident = _krCache.rtree.search(bbox).length;
64880                                 } while (coincident);
64881
64882                                 var d = new qaError({
64883                                     // Required values
64884                                     loc: loc,
64885                                     service: 'keepRight',
64886                                     error_type: errorType,
64887                                     // Extra values for this service
64888                                     id: props.error_id,
64889                                     comment: props.comment || null,
64890                                     description: props.description || '',
64891                                     error_id: props.error_id,
64892                                     which_type: whichType,
64893                                     parent_error_type: parentErrorType,
64894                                     severity: whichTemplate.severity || 'error',
64895                                     object_id: props.object_id,
64896                                     object_type: props.object_type,
64897                                     schema: props.schema,
64898                                     title: props.title
64899                                 });
64900
64901                                 d.replacements = tokenReplacements(d);
64902
64903                                 _krCache.data[d.id] = d;
64904                                 _krCache.rtree.insert(encodeErrorRtree(d));
64905                             });
64906
64907                             dispatch$1.call('loaded');
64908                         })
64909                         .catch(function() {
64910                             delete _krCache.inflightTile[tile.id];
64911                             _krCache.loadedTile[tile.id] = true;
64912                         });
64913
64914                 });
64915             },
64916
64917
64918             postKeepRightUpdate: function(d, callback) {
64919                 if (_krCache.inflightPost[d.id]) {
64920                     return callback({ message: 'Error update already inflight', status: -2 }, d);
64921                 }
64922
64923                 var that = this;
64924                 var params = { schema: d.schema, id: d.error_id };
64925
64926                 if (d.state) {
64927                     params.st = d.state;
64928                 }
64929                 if (d.newComment !== undefined) {
64930                     params.co = d.newComment;
64931                 }
64932
64933                 // NOTE: This throws a CORS err, but it seems successful.
64934                 // We don't care too much about the response, so this is fine.
64935                 var url = _krUrlRoot + 'comment.php?' + utilQsString(params);
64936
64937                 var controller = new AbortController();
64938                 _krCache.inflightPost[d.id] = controller;
64939
64940                 fetch(url, { method: 'POST', signal: controller.signal })
64941                     .then(function(response) {
64942                         delete _krCache.inflightPost[d.id];
64943                         if (!response.ok) {
64944                             throw new Error(response.status + ' ' + response.statusText);
64945                         }
64946
64947                         if (d.state === 'ignore') {   // ignore permanently (false positive)
64948                             that.removeError(d);
64949
64950                         } else if (d.state === 'ignore_t') {  // ignore temporarily (error fixed)
64951                             that.removeError(d);
64952                             _krCache.closed[d.schema + ':' + d.error_id] = true;
64953
64954                         } else {
64955                             d = that.replaceError(d.update({
64956                                 comment: d.newComment,
64957                                 newComment: undefined,
64958                                 state: undefined
64959                             }));
64960                         }
64961
64962                         if (callback) { callback(null, d); }
64963                     })
64964                     .catch(function(err) {
64965                         delete _krCache.inflightPost[d.id];
64966                         if (callback) { callback(err.message); }
64967                     });
64968             },
64969
64970
64971             // get all cached errors covering the viewport
64972             getErrors: function(projection) {
64973                 var viewport = projection.clipExtent();
64974                 var min = [viewport[0][0], viewport[1][1]];
64975                 var max = [viewport[1][0], viewport[0][1]];
64976                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
64977
64978                 return _krCache.rtree.search(bbox).map(function(d) {
64979                     return d.data;
64980                 });
64981             },
64982
64983
64984             // get a single error from the cache
64985             getError: function(id) {
64986                 return _krCache.data[id];
64987             },
64988
64989
64990             // replace a single error in the cache
64991             replaceError: function(error) {
64992                 if (!(error instanceof qaError) || !error.id) { return; }
64993
64994                 _krCache.data[error.id] = error;
64995                 updateRtree(encodeErrorRtree(error), true); // true = replace
64996                 return error;
64997             },
64998
64999
65000             // remove a single error from the cache
65001             removeError: function(error) {
65002                 if (!(error instanceof qaError) || !error.id) { return; }
65003
65004                 delete _krCache.data[error.id];
65005                 updateRtree(encodeErrorRtree(error), false); // false = remove
65006             },
65007
65008
65009             errorURL: function(error) {
65010                 return _krUrlRoot + 'report_map.php?schema=' + error.schema + '&error=' + error.id;
65011             },
65012
65013
65014             // Get an array of errors closed during this session.
65015             // Used to populate `closed:keepright` changeset tag
65016             getClosedIDs: function() {
65017                 return Object.keys(_krCache.closed).sort();
65018             }
65019
65020         };
65021
65022         var tiler$1 = utilTiler();
65023         var dispatch$2 = dispatch('loaded');
65024
65025         var _erCache;
65026         var _erZoom = 14;
65027
65028         var _impOsmUrls = {
65029             ow: 'https://grab.community.improve-osm.org/directionOfFlowService',
65030             mr: 'https://grab.community.improve-osm.org/missingGeoService',
65031             tr: 'https://grab.community.improve-osm.org/turnRestrictionService'
65032         };
65033
65034         function abortRequest$1(i) {
65035             Object.values(i).forEach(function(controller) {
65036                 if (controller) {
65037                     controller.abort();
65038                 }
65039             });
65040         }
65041
65042         function abortUnwantedRequests$1(cache, tiles) {
65043             Object.keys(cache.inflightTile).forEach(function(k) {
65044                 var wanted = tiles.find(function(tile) { return k === tile.id; });
65045                 if (!wanted) {
65046                     abortRequest$1(cache.inflightTile[k]);
65047                     delete cache.inflightTile[k];
65048                 }
65049             });
65050         }
65051
65052
65053         function encodeErrorRtree$1(d) {
65054             return { minX: d.loc[0], minY: d.loc[1], maxX: d.loc[0], maxY: d.loc[1], data: d };
65055         }
65056
65057
65058         // replace or remove error from rtree
65059         function updateRtree$1(item, replace) {
65060             _erCache.rtree.remove(item, function isEql(a, b) {
65061                 return a.data.id === b.data.id;
65062             });
65063
65064             if (replace) {
65065                 _erCache.rtree.insert(item);
65066             }
65067         }
65068
65069         function linkErrorObject(d) {
65070             return '<a class="error_object_link">' + d + '</a>';
65071         }
65072
65073         function linkEntity(d) {
65074             return '<a class="error_entity_link">' + d + '</a>';
65075         }
65076
65077         function pointAverage(points) {
65078             if (points.length) {
65079                 var sum = points.reduce(function(acc, point) {
65080                     return geoVecAdd(acc, [point.lon, point.lat]);
65081                 }, [0,0]);
65082                 return geoVecScale(sum, 1 / points.length);
65083             } else {
65084                 return [0,0];
65085             }
65086         }
65087
65088         function relativeBearing(p1, p2) {
65089             var angle = Math.atan2(p2.lon - p1.lon, p2.lat - p1.lat);
65090             if (angle < 0) {
65091                 angle += 2 * Math.PI;
65092             }
65093
65094             // Return degrees
65095             return angle * 180 / Math.PI;
65096         }
65097
65098         // Assuming range [0,360)
65099         function cardinalDirection(bearing) {
65100             var dir = 45 * Math.round(bearing / 45);
65101             var compass = {
65102                 0: 'north',
65103                 45: 'northeast',
65104                 90: 'east',
65105                 135: 'southeast',
65106                 180: 'south',
65107                 225: 'southwest',
65108                 270: 'west',
65109                 315: 'northwest',
65110                 360: 'north'
65111             };
65112
65113             return t('QA.improveOSM.directions.' + compass[dir]);
65114         }
65115
65116         // Errors shouldn't obscure eachother
65117         function preventCoincident(loc, bumpUp) {
65118             var coincident = false;
65119             do {
65120                 // first time, move marker up. after that, move marker right.
65121                 var delta = coincident ? [0.00001, 0] : (bumpUp ? [0, 0.00001] : [0, 0]);
65122                 loc = geoVecAdd(loc, delta);
65123                 var bbox = geoExtent(loc).bbox();
65124                 coincident = _erCache.rtree.search(bbox).length;
65125             } while (coincident);
65126
65127             return loc;
65128         }
65129
65130         var serviceImproveOSM = {
65131             init: function() {
65132                 if (!_erCache) {
65133                     this.reset();
65134                 }
65135
65136                 this.event = utilRebind(this, dispatch$2, 'on');
65137             },
65138
65139             reset: function() {
65140                 if (_erCache) {
65141                     Object.values(_erCache.inflightTile).forEach(abortRequest$1);
65142                 }
65143                 _erCache = {
65144                     data: {},
65145                     loadedTile: {},
65146                     inflightTile: {},
65147                     inflightPost: {},
65148                     closed: {},
65149                     rtree: new RBush()
65150                 };
65151             },
65152
65153             loadErrors: function(projection) {
65154                 var options = {
65155                     client: 'iD',
65156                     status: 'OPEN',
65157                     zoom: '19' // Use a high zoom so that clusters aren't returned
65158                 };
65159
65160                 // determine the needed tiles to cover the view
65161                 var tiles = tiler$1
65162                     .zoomExtent([_erZoom, _erZoom])
65163                     .getTiles(projection);
65164
65165                 // abort inflight requests that are no longer needed
65166                 abortUnwantedRequests$1(_erCache, tiles);
65167
65168                 // issue new requests..
65169                 tiles.forEach(function(tile) {
65170                     if (_erCache.loadedTile[tile.id] || _erCache.inflightTile[tile.id]) { return; }
65171
65172                     var rect = tile.extent.rectangle();
65173                     var params = Object.assign({}, options, { east: rect[0], south: rect[3], west: rect[2], north: rect[1] });
65174
65175                     // 3 separate requests to store for each tile
65176                     var requests = {};
65177
65178                     Object.keys(_impOsmUrls).forEach(function(k) {
65179                         var v = _impOsmUrls[k];
65180                         // We exclude WATER from missing geometry as it doesn't seem useful
65181                         // We use most confident one-way and turn restrictions only, still have false positives
65182                         var kParams = Object.assign({},
65183                             params,
65184                             (k === 'mr') ? { type: 'PARKING,ROAD,BOTH,PATH' } : { confidenceLevel: 'C1' }
65185                         );
65186                         var url = v + '/search?' + utilQsString(kParams);
65187
65188                         var controller = new AbortController();
65189                         requests[k] = controller;
65190
65191                         d3_json(url, { signal: controller.signal })
65192                             .then(function(data) {
65193                                 delete _erCache.inflightTile[tile.id][k];
65194                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
65195                                     delete _erCache.inflightTile[tile.id];
65196                                     _erCache.loadedTile[tile.id] = true;
65197                                 }
65198
65199                                 // Road segments at high zoom == oneways
65200                                 if (data.roadSegments) {
65201                                     data.roadSegments.forEach(function(feature) {
65202                                         // Position error at the approximate middle of the segment
65203                                         var points = feature.points;
65204                                         var mid = points.length / 2;
65205                                         var loc;
65206
65207                                         // Even number of points, find midpoint of the middle two
65208                                         // Odd number of points, use position of very middle point
65209                                         if (mid % 1 === 0) {
65210                                             loc = pointAverage([points[mid - 1], points[mid]]);
65211                                         } else {
65212                                             mid = points[Math.floor(mid)];
65213                                             loc = [mid.lon, mid.lat];
65214                                         }
65215
65216                                         // One-ways can land on same segment in opposite direction
65217                                         loc = preventCoincident(loc, false);
65218
65219                                         var d = new qaError({
65220                                             // Info required for every error
65221                                             loc: loc,
65222                                             service: 'improveOSM',
65223                                             error_type: k,
65224                                             // Extra details needed for this service
65225                                             error_key: k,
65226                                             identifier: { // this is used to post changes to the error
65227                                                 wayId: feature.wayId,
65228                                                 fromNodeId: feature.fromNodeId,
65229                                                 toNodeId: feature.toNodeId
65230                                             },
65231                                             object_id: feature.wayId,
65232                                             object_type: 'way',
65233                                             status: feature.status
65234                                         });
65235
65236                                         // Variables used in the description
65237                                         d.replacements = {
65238                                             percentage: feature.percentOfTrips,
65239                                             num_trips: feature.numberOfTrips,
65240                                             highway: linkErrorObject(t('QA.keepRight.error_parts.highway')),
65241                                             from_node: linkEntity('n' + feature.fromNodeId),
65242                                             to_node: linkEntity('n' + feature.toNodeId)
65243                                         };
65244
65245                                         _erCache.data[d.id] = d;
65246                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
65247                                     });
65248                                 }
65249
65250                                 // Tiles at high zoom == missing roads
65251                                 if (data.tiles) {
65252                                     data.tiles.forEach(function(feature) {
65253                                         var geoType = feature.type.toLowerCase();
65254
65255                                         // Average of recorded points should land on the missing geometry
65256                                         // Missing geometry could happen to land on another error
65257                                         var loc = pointAverage(feature.points);
65258                                         loc = preventCoincident(loc, false);
65259
65260                                         var d = new qaError({
65261                                             // Info required for every error
65262                                             loc: loc,
65263                                             service: 'improveOSM',
65264                                             error_type: k + '-' + geoType,
65265                                             // Extra details needed for this service
65266                                             error_key: k,
65267                                             identifier: { x: feature.x, y: feature.y },
65268                                             status: feature.status
65269                                         });
65270
65271                                         d.replacements = {
65272                                             num_trips: feature.numberOfTrips,
65273                                             geometry_type: t('QA.improveOSM.geometry_types.' + geoType)
65274                                         };
65275
65276                                         // -1 trips indicates data came from a 3rd party
65277                                         if (feature.numberOfTrips === -1) {
65278                                             d.desc = t('QA.improveOSM.error_types.mr.description_alt', d.replacements);
65279                                         }
65280
65281                                         _erCache.data[d.id] = d;
65282                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
65283                                     });
65284                                 }
65285
65286                                 // Entities at high zoom == turn restrictions
65287                                 if (data.entities) {
65288                                     data.entities.forEach(function(feature) {
65289                                         // Turn restrictions could be missing at same junction
65290                                         // We also want to bump the error up so node is accessible
65291                                         var loc = feature.point;
65292                                         loc = preventCoincident([loc.lon, loc.lat], true);
65293
65294                                         // Elements are presented in a strange way
65295                                         var ids = feature.id.split(',');
65296                                         var from_way = ids[0];
65297                                         var via_node = ids[3];
65298                                         var to_way = ids[2].split(':')[1];
65299
65300                                         var d = new qaError({
65301                                             // Info required for every error
65302                                             loc: loc,
65303                                             service: 'improveOSM',
65304                                             error_type: k,
65305                                             // Extra details needed for this service
65306                                             error_key: k,
65307                                             identifier: feature.id,
65308                                             object_id: via_node,
65309                                             object_type: 'node',
65310                                             status: feature.status
65311                                         });
65312
65313                                         // Travel direction along from_way clarifies the turn restriction
65314                                         var p1 = feature.segments[0].points[0];
65315                                         var p2 = feature.segments[0].points[1];
65316
65317                                         var dir_of_travel = cardinalDirection(relativeBearing(p1, p2));
65318
65319                                         // Variables used in the description
65320                                         d.replacements = {
65321                                             num_passed: feature.numberOfPasses,
65322                                             num_trips: feature.segments[0].numberOfTrips,
65323                                             turn_restriction: feature.turnType.toLowerCase(),
65324                                             from_way: linkEntity('w' + from_way),
65325                                             to_way: linkEntity('w' + to_way),
65326                                             travel_direction: dir_of_travel,
65327                                             junction: linkErrorObject(t('QA.keepRight.error_parts.this_node'))
65328                                         };
65329
65330                                         _erCache.data[d.id] = d;
65331                                         _erCache.rtree.insert(encodeErrorRtree$1(d));
65332                                         dispatch$2.call('loaded');
65333                                     });
65334                                 }
65335                             })
65336                             .catch(function() {
65337                                 delete _erCache.inflightTile[tile.id][k];
65338                                 if (!Object.keys(_erCache.inflightTile[tile.id]).length) {
65339                                     delete _erCache.inflightTile[tile.id];
65340                                     _erCache.loadedTile[tile.id] = true;
65341                                 }
65342                             });
65343                     });
65344
65345                     _erCache.inflightTile[tile.id] = requests;
65346                 });
65347             },
65348
65349             getComments: function(d, callback) {
65350                 // If comments already retrieved no need to do so again
65351                 if (d.comments !== undefined) {
65352                     if (callback) { callback({}, d); }
65353                     return;
65354                 }
65355
65356                 var key = d.error_key;
65357                 var qParams = {};
65358
65359                 if (key === 'ow') {
65360                     qParams = d.identifier;
65361                 } else if (key === 'mr') {
65362                     qParams.tileX = d.identifier.x;
65363                     qParams.tileY = d.identifier.y;
65364                 } else if (key === 'tr') {
65365                     qParams.targetId = d.identifier;
65366                 }
65367
65368                 var url = _impOsmUrls[key] + '/retrieveComments?' + utilQsString(qParams);
65369
65370                 var that = this;
65371                 d3_json(url)
65372                     .then(function(data) {
65373                         // Assign directly for immediate use in the callback
65374                         // comments are served newest to oldest
65375                         d.comments = data.comments ? data.comments.reverse() : [];
65376                         that.replaceError(d);
65377                         if (callback) { callback(null, d); }
65378                     })
65379                     .catch(function(err) {
65380                         if (callback) { callback(err.message); }
65381                     });
65382             },
65383
65384             postUpdate: function(d, callback) {
65385                 if (!serviceOsm.authenticated()) { // Username required in payload
65386                     return callback({ message: 'Not Authenticated', status: -3}, d);
65387                 }
65388                 if (_erCache.inflightPost[d.id]) {
65389                     return callback({ message: 'Error update already inflight', status: -2 }, d);
65390                 }
65391
65392                 var that = this;
65393
65394                 // Payload can only be sent once username is established
65395                 serviceOsm.userDetails(sendPayload);
65396
65397                 function sendPayload(err, user) {
65398                     if (err) { return callback(err, d); }
65399
65400                     var key = d.error_key;
65401                     var url = _impOsmUrls[key] + '/comment';
65402                     var payload = {
65403                         username: user.display_name,
65404                         targetIds: [ d.identifier ]
65405                     };
65406
65407                     if (d.newStatus !== undefined) {
65408                         payload.status = d.newStatus;
65409                         payload.text = 'status changed';
65410                     }
65411
65412                     // Comment take place of default text
65413                     if (d.newComment !== undefined) {
65414                         payload.text = d.newComment;
65415                     }
65416
65417                     var controller = new AbortController();
65418                     _erCache.inflightPost[d.id] = controller;
65419
65420                     var options = {
65421                         method: 'POST',
65422                         signal: controller.signal,
65423                         body: JSON.stringify(payload)
65424                     };
65425
65426                      d3_json(url, options)
65427                         .then(function() {
65428                             delete _erCache.inflightPost[d.id];
65429
65430                             // Just a comment, update error in cache
65431                             if (d.newStatus === undefined) {
65432                                 var now = new Date();
65433                                 var comments = d.comments ? d.comments : [];
65434
65435                                 comments.push({
65436                                     username: payload.username,
65437                                     text: payload.text,
65438                                     timestamp: now.getTime() / 1000
65439                                 });
65440
65441                                 that.replaceError(d.update({
65442                                     comments: comments,
65443                                     newComment: undefined
65444                                 }));
65445                             } else {
65446                                 that.removeError(d);
65447                                 if (d.newStatus === 'SOLVED') {
65448                                     // No pretty identifier, so we just use coordinates
65449                                     var closedID = d.loc[1].toFixed(5) + '/' + d.loc[0].toFixed(5);
65450                                     _erCache.closed[key + ':' + closedID] = true;
65451                                 }
65452                             }
65453                             if (callback) { callback(null, d); }
65454                         })
65455                         .catch(function(err) {
65456                             delete _erCache.inflightPost[d.id];
65457                             if (callback) { callback(err.message); }
65458                         });
65459                 }
65460             },
65461
65462
65463             // get all cached errors covering the viewport
65464             getErrors: function(projection) {
65465                 var viewport = projection.clipExtent();
65466                 var min = [viewport[0][0], viewport[1][1]];
65467                 var max = [viewport[1][0], viewport[0][1]];
65468                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
65469
65470                 return _erCache.rtree.search(bbox).map(function(d) {
65471                     return d.data;
65472                 });
65473             },
65474
65475             // get a single error from the cache
65476             getError: function(id) {
65477                 return _erCache.data[id];
65478             },
65479
65480             // replace a single error in the cache
65481             replaceError: function(error) {
65482                 if (!(error instanceof qaError) || !error.id) { return; }
65483
65484                 _erCache.data[error.id] = error;
65485                 updateRtree$1(encodeErrorRtree$1(error), true); // true = replace
65486                 return error;
65487             },
65488
65489             // remove a single error from the cache
65490             removeError: function(error) {
65491                 if (!(error instanceof qaError) || !error.id) { return; }
65492
65493                 delete _erCache.data[error.id];
65494                 updateRtree$1(encodeErrorRtree$1(error), false); // false = remove
65495             },
65496
65497             // Used to populate `closed:improveosm` changeset tag
65498             getClosedIDs: function() {
65499                 return Object.keys(_erCache.closed).sort();
65500             }
65501         };
65502
65503         /*
65504             A standalone SVG element that contains only a `defs` sub-element. To be
65505             used once globally, since defs IDs must be unique within a document.
65506         */
65507         function svgDefs(context) {
65508
65509             function drawDefs(selection) {
65510                 var defs = selection.append('defs');
65511
65512                 // add markers
65513                 defs
65514                     .append('marker')
65515                     .attr('id', 'oneway-marker')
65516                     .attr('viewBox', '0 0 10 5')
65517                     .attr('refX', 2.5)
65518                     .attr('refY', 2.5)
65519                     .attr('markerWidth', 2)
65520                     .attr('markerHeight', 2)
65521                     .attr('markerUnits', 'strokeWidth')
65522                     .attr('orient', 'auto')
65523                     .append('path')
65524                     .attr('class', 'oneway-marker-path')
65525                     .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')
65526                     .attr('stroke', 'none')
65527                     .attr('fill', '#000')
65528                     .attr('opacity', '0.75');
65529
65530                 // SVG markers have to be given a colour where they're defined
65531                 // (they can't inherit it from the line they're attached to),
65532                 // so we need to manually define markers for each color of tag
65533                 // (also, it's slightly nicer if we can control the
65534                 // positioning for different tags)
65535                 function addSidedMarker(name, color, offset) {
65536                     defs
65537                         .append('marker')
65538                         .attr('id', 'sided-marker-' + name)
65539                         .attr('viewBox', '0 0 2 2')
65540                         .attr('refX', 1)
65541                         .attr('refY', -offset)
65542                         .attr('markerWidth', 1.5)
65543                         .attr('markerHeight', 1.5)
65544                         .attr('markerUnits', 'strokeWidth')
65545                         .attr('orient', 'auto')
65546                         .append('path')
65547                         .attr('class', 'sided-marker-path sided-marker-' + name + '-path')
65548                         .attr('d', 'M 0,0 L 1,1 L 2,0 z')
65549                         .attr('stroke', 'none')
65550                         .attr('fill', color);
65551                 }
65552                 addSidedMarker('natural', 'rgb(170, 170, 170)', 0);
65553                 // for a coastline, the arrows are (somewhat unintuitively) on
65554                 // the water side, so let's color them blue (with a gap) to
65555                 // give a stronger indication
65556                 addSidedMarker('coastline', '#77dede', 1);
65557                 addSidedMarker('waterway', '#77dede', 1);
65558                 // barriers have a dashed line, and separating the triangle
65559                 // from the line visually suits that
65560                 addSidedMarker('barrier', '#ddd', 1);
65561                 addSidedMarker('man_made', '#fff', 0);
65562
65563                 defs
65564                     .append('marker')
65565                     .attr('id', 'viewfield-marker')
65566                     .attr('viewBox', '0 0 16 16')
65567                     .attr('refX', 8)
65568                     .attr('refY', 16)
65569                     .attr('markerWidth', 4)
65570                     .attr('markerHeight', 4)
65571                     .attr('markerUnits', 'strokeWidth')
65572                     .attr('orient', 'auto')
65573                     .append('path')
65574                     .attr('class', 'viewfield-marker-path')
65575                     .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')
65576                     .attr('fill', '#333')
65577                     .attr('fill-opacity', '0.75')
65578                     .attr('stroke', '#fff')
65579                     .attr('stroke-width', '0.5px')
65580                     .attr('stroke-opacity', '0.75');
65581
65582                 defs
65583                     .append('marker')
65584                     .attr('id', 'viewfield-marker-wireframe')
65585                     .attr('viewBox', '0 0 16 16')
65586                     .attr('refX', 8)
65587                     .attr('refY', 16)
65588                     .attr('markerWidth', 4)
65589                     .attr('markerHeight', 4)
65590                     .attr('markerUnits', 'strokeWidth')
65591                     .attr('orient', 'auto')
65592                     .append('path')
65593                     .attr('class', 'viewfield-marker-path')
65594                     .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')
65595                     .attr('fill', 'none')
65596                     .attr('stroke', '#fff')
65597                     .attr('stroke-width', '0.5px')
65598                     .attr('stroke-opacity', '0.75');
65599
65600                 // add patterns
65601                 var patterns = defs.selectAll('pattern')
65602                     .data([
65603                         // pattern name, pattern image name
65604                         ['beach', 'dots'],
65605                         ['construction', 'construction'],
65606                         ['cemetery', 'cemetery'],
65607                         ['cemetery_christian', 'cemetery_christian'],
65608                         ['cemetery_buddhist', 'cemetery_buddhist'],
65609                         ['cemetery_muslim', 'cemetery_muslim'],
65610                         ['cemetery_jewish', 'cemetery_jewish'],
65611                         ['farmland', 'farmland'],
65612                         ['farmyard', 'farmyard'],
65613                         ['forest', 'forest'],
65614                         ['forest_broadleaved', 'forest_broadleaved'],
65615                         ['forest_needleleaved', 'forest_needleleaved'],
65616                         ['forest_leafless', 'forest_leafless'],
65617                         ['golf_green', 'grass'],
65618                         ['grass', 'grass'],
65619                         ['landfill', 'landfill'],
65620                         ['meadow', 'grass'],
65621                         ['orchard', 'orchard'],
65622                         ['pond', 'pond'],
65623                         ['quarry', 'quarry'],
65624                         ['scrub', 'bushes'],
65625                         ['vineyard', 'vineyard'],
65626                         ['water_standing', 'lines'],
65627                         ['waves', 'waves'],
65628                         ['wetland', 'wetland'],
65629                         ['wetland_marsh', 'wetland_marsh'],
65630                         ['wetland_swamp', 'wetland_swamp'],
65631                         ['wetland_bog', 'wetland_bog'],
65632                         ['wetland_reedbed', 'wetland_reedbed']
65633                     ])
65634                     .enter()
65635                     .append('pattern')
65636                     .attr('id', function (d) { return 'pattern-' + d[0]; })
65637                     .attr('width', 32)
65638                     .attr('height', 32)
65639                     .attr('patternUnits', 'userSpaceOnUse');
65640
65641                 patterns
65642                     .append('rect')
65643                     .attr('x', 0)
65644                     .attr('y', 0)
65645                     .attr('width', 32)
65646                     .attr('height', 32)
65647                     .attr('class', function (d) { return 'pattern-color-' + d[0]; });
65648
65649                 patterns
65650                     .append('image')
65651                     .attr('x', 0)
65652                     .attr('y', 0)
65653                     .attr('width', 32)
65654                     .attr('height', 32)
65655                     .attr('xlink:href', function (d) {
65656                         return context.imagePath('pattern/' + d[1] + '.png');
65657                     });
65658
65659                 // add clip paths
65660                 defs.selectAll('clipPath')
65661                     .data([12, 18, 20, 32, 45])
65662                     .enter()
65663                     .append('clipPath')
65664                     .attr('id', function (d) { return 'clip-square-' + d; })
65665                     .append('rect')
65666                     .attr('x', 0)
65667                     .attr('y', 0)
65668                     .attr('width', function (d) { return d; })
65669                     .attr('height', function (d) { return d; });
65670
65671                 // add symbol spritesheets
65672                 defs
65673                     .call(drawDefs.addSprites, [
65674                         'iD-sprite', 'maki-sprite', 'temaki-sprite', 'fa-sprite', 'tnp-sprite', 'community-sprite'
65675                     ], true);
65676             }
65677
65678
65679             drawDefs.addSprites = function(selection, ids, overrideColors) {
65680                 var spritesheets = selection.selectAll('.spritesheet');
65681                 var currData = spritesheets.data();
65682                 var data = utilArrayUniq(currData.concat(ids));
65683
65684                 spritesheets
65685                     .data(data)
65686                     .enter()
65687                     .append('g')
65688                     .attr('class', function(d) { return 'spritesheet spritesheet-' + d; })
65689                     .each(function(d) {
65690                         var url = context.imagePath(d + '.svg');
65691                         var node = d3_select(this).node();
65692
65693                         svg(url)
65694                             .then(function(svg) {
65695                                 node.appendChild(
65696                                     d3_select(svg.documentElement).attr('id', d).node()
65697                                 );
65698                                 if (overrideColors && d !== 'iD-sprite') {   // allow icon colors to be overridden..
65699                                     d3_select(node).selectAll('path')
65700                                         .attr('fill', 'currentColor');
65701                                 }
65702                             })
65703                             .catch(function() {
65704                                 /* ignore */
65705                             });
65706                     });
65707             };
65708
65709
65710             return drawDefs;
65711         }
65712
65713         /* global Mapillary:false */
65714
65715
65716         var apibase = 'https://a.mapillary.com/v3/';
65717         var viewercss = 'mapillary-js/mapillary.min.css';
65718         var viewerjs = 'mapillary-js/mapillary.min.js';
65719         var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
65720         var mapFeatureConfig = {
65721             organizationKey: 'FI3NAFfzQQgdF081TRdgTy',
65722             values: [
65723                 'construction--flat--crosswalk-plain',
65724                 'marking--discrete--crosswalk-zebra',
65725                 'object--banner',
65726                 'object--bench',
65727                 'object--bike-rack',
65728                 'object--billboard',
65729                 'object--catch-basin',
65730                 'object--cctv-camera',
65731                 'object--fire-hydrant',
65732                 'object--mailbox',
65733                 'object--manhole',
65734                 'object--phone-booth',
65735                 'object--sign--advertisement',
65736                 'object--sign--information',
65737                 'object--sign--store',
65738                 'object--street-light',
65739                 'object--support--utility-pole',
65740                 'object--traffic-light--*',
65741                 'object--traffic-light--pedestrians',
65742                 'object--trash-can'
65743             ].join(',')
65744         };
65745         var maxResults = 1000;
65746         var tileZoom = 14;
65747         var tiler$2 = utilTiler().zoomExtent([tileZoom, tileZoom]).skipNullIsland(true);
65748         var dispatch$3 = dispatch('loadedImages', 'loadedSigns', 'loadedMapFeatures', 'bearingChanged');
65749         var _mlyFallback = false;
65750         var _mlyCache;
65751         var _mlyClicks;
65752         var _mlySelectedImageKey;
65753         var _mlyViewer;
65754
65755
65756         function abortRequest$2(controller) {
65757             controller.abort();
65758         }
65759
65760
65761         function maxPageAtZoom(z) {
65762             if (z < 15)   { return 2; }
65763             if (z === 15) { return 5; }
65764             if (z === 16) { return 10; }
65765             if (z === 17) { return 20; }
65766             if (z === 18) { return 40; }
65767             if (z > 18)   { return 80; }
65768         }
65769
65770
65771         function loadTiles(which, url, projection) {
65772             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
65773             var tiles = tiler$2.getTiles(projection);
65774
65775             // abort inflight requests that are no longer needed
65776             var cache = _mlyCache[which];
65777             Object.keys(cache.inflight).forEach(function(k) {
65778                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
65779                 if (!wanted) {
65780                     abortRequest$2(cache.inflight[k]);
65781                     delete cache.inflight[k];
65782                 }
65783             });
65784
65785             tiles.forEach(function(tile) {
65786                 loadNextTilePage(which, currZoom, url, tile);
65787             });
65788         }
65789
65790
65791         function loadNextTilePage(which, currZoom, url, tile) {
65792             var cache = _mlyCache[which];
65793             var rect = tile.extent.rectangle();
65794             var maxPages = maxPageAtZoom(currZoom);
65795             var nextPage = cache.nextPage[tile.id] || 0;
65796             var nextURL = cache.nextURL[tile.id] || url +
65797                 utilQsString({
65798                     per_page: maxResults,
65799                     page: nextPage,
65800                     client_id: clientId,
65801                     bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
65802                 });
65803
65804             if (nextPage > maxPages) { return; }
65805
65806             var id = tile.id + ',' + String(nextPage);
65807             if (cache.loaded[id] || cache.inflight[id]) { return; }
65808
65809             var controller = new AbortController();
65810             cache.inflight[id] = controller;
65811
65812             var options = {
65813                 method: 'GET',
65814                 signal: controller.signal,
65815                 headers: { 'Content-Type': 'application/json' }
65816             };
65817
65818             fetch(nextURL, options)
65819                 .then(function(response) {
65820                     if (!response.ok) {
65821                         throw new Error(response.status + ' ' + response.statusText);
65822                     }
65823                     var linkHeader = response.headers.get('Link');
65824                     if (linkHeader) {
65825                         var pagination = parsePagination(linkHeader);
65826                         if (pagination.next) {
65827                             cache.nextURL[tile.id] = pagination.next;
65828                         }
65829                     }
65830                     return response.json();
65831                 })
65832                 .then(function(data) {
65833                     cache.loaded[id] = true;
65834                     delete cache.inflight[id];
65835                     if (!data || !data.features || !data.features.length) {
65836                         throw new Error('No Data');
65837                     }
65838
65839                     var features = data.features.map(function(feature) {
65840                         var loc = feature.geometry.coordinates;
65841                         var d;
65842
65843                         // An image (shown as a green dot on the map) is a single street photo with extra
65844                         // information such as location, camera angle (CA), camera model, and so on.
65845                         // Each image feature is a GeoJSON Point
65846                         if (which === 'images') {
65847                             d = {
65848                                 loc: loc,
65849                                 key: feature.properties.key,
65850                                 ca: feature.properties.ca,
65851                                 captured_at: feature.properties.captured_at,
65852                                 captured_by: feature.properties.username,
65853                                 pano: feature.properties.pano
65854                             };
65855
65856                             cache.forImageKey[d.key] = d;     // cache imageKey -> image
65857
65858                         // Mapillary organizes images as sequences. A sequence of images are continuously captured
65859                         // by a user at a give time. Sequences are shown on the map as green lines.
65860                         // Each sequence feature is a GeoJSON LineString
65861                         } else if (which === 'sequences') {
65862                             var sequenceKey = feature.properties.key;
65863                             cache.lineString[sequenceKey] = feature;           // cache sequenceKey -> lineString
65864                             feature.properties.coordinateProperties.image_keys.forEach(function(imageKey) {
65865                                 cache.forImageKey[imageKey] = sequenceKey;     // cache imageKey -> sequenceKey
65866                             });
65867                             return false;    // because no `d` data worth loading into an rbush
65868
65869                         // An image detection is a semantic pixel area on an image. The area could indicate
65870                         // sky, trees, sidewalk in the image. A detection can be a polygon, a bounding box, or a point.
65871                         // Each image_detection feature is a GeoJSON Point (located where the image was taken)
65872                         } else if (which === 'image_detections') {
65873                             d = {
65874                                 key: feature.properties.key,
65875                                 image_key: feature.properties.image_key,
65876                                 value: feature.properties.value,
65877                                 package: feature.properties.package,
65878                                 shape: feature.properties.shape
65879                             };
65880
65881                             // cache imageKey -> image_detections
65882                             if (!cache.forImageKey[d.image_key]) {
65883                                 cache.forImageKey[d.image_key] = [];
65884                             }
65885                             cache.forImageKey[d.image_key].push(d);
65886                             return false;    // because no `d` data worth loading into an rbush
65887
65888
65889                         // A map feature is a real world object that can be shown on a map. It could be any object
65890                         // recognized from images, manually added in images, or added on the map.
65891                         // Each map feature is a GeoJSON Point (located where the feature is)
65892                         } else if (which === 'map_features' || which === 'points') {
65893                             d = {
65894                                 loc: loc,
65895                                 key: feature.properties.key,
65896                                 value: feature.properties.value,
65897                                 package: feature.properties.package,
65898                                 detections: feature.properties.detections
65899                             };
65900                         }
65901
65902                         return {
65903                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
65904                         };
65905
65906                     }).filter(Boolean);
65907
65908                     if (cache.rtree && features) {
65909                         cache.rtree.load(features);
65910                     }
65911
65912                     if (data.features.length === maxResults) {  // more pages to load
65913                         cache.nextPage[tile.id] = nextPage + 1;
65914                         loadNextTilePage(which, currZoom, url, tile);
65915                     } else {
65916                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
65917                     }
65918
65919                     if (which === 'images' || which === 'sequences') {
65920                         dispatch$3.call('loadedImages');
65921                     } else if (which === 'map_features') {
65922                         dispatch$3.call('loadedSigns');
65923                     } else if (which === 'points') {
65924                         dispatch$3.call('loadedMapFeatures');
65925                     }
65926                 })
65927                 .catch(function() {
65928                     cache.loaded[id] = true;
65929                     delete cache.inflight[id];
65930                 });
65931         }
65932
65933         // extract links to pages of API results
65934         function parsePagination(links) {
65935             return links.split(',').map(function(rel) {
65936                 var elements = rel.split(';');
65937                 if (elements.length === 2) {
65938                     return [
65939                         /<(.+)>/.exec(elements[0])[1],
65940                         /rel="(.+)"/.exec(elements[1])[1]
65941                     ];
65942                 } else {
65943                     return ['',''];
65944                 }
65945             }).reduce(function(pagination, val) {
65946                 pagination[val[1]] = val[0];
65947                 return pagination;
65948             }, {});
65949         }
65950
65951
65952         // partition viewport into higher zoom tiles
65953         function partitionViewport(projection) {
65954             var z = geoScaleToZoom(projection.scale());
65955             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
65956             var tiler = utilTiler().zoomExtent([z2, z2]);
65957
65958             return tiler.getTiles(projection)
65959                 .map(function(tile) { return tile.extent; });
65960         }
65961
65962
65963         // no more than `limit` results per partition.
65964         function searchLimited(limit, projection, rtree) {
65965             limit = limit || 5;
65966
65967             return partitionViewport(projection)
65968                 .reduce(function(result, extent) {
65969                     var found = rtree.search(extent.bbox())
65970                         .slice(0, limit)
65971                         .map(function(d) { return d.data; });
65972
65973                     return (found.length ? result.concat(found) : result);
65974                 }, []);
65975         }
65976
65977
65978
65979         var serviceMapillary = {
65980
65981             init: function() {
65982                 if (!_mlyCache) {
65983                     this.reset();
65984                 }
65985
65986                 this.event = utilRebind(this, dispatch$3, 'on');
65987             },
65988
65989             reset: function() {
65990                 if (_mlyCache) {
65991                     Object.values(_mlyCache.images.inflight).forEach(abortRequest$2);
65992                     Object.values(_mlyCache.image_detections.inflight).forEach(abortRequest$2);
65993                     Object.values(_mlyCache.map_features.inflight).forEach(abortRequest$2);
65994                     Object.values(_mlyCache.points.inflight).forEach(abortRequest$2);
65995                     Object.values(_mlyCache.sequences.inflight).forEach(abortRequest$2);
65996                 }
65997
65998                 _mlyCache = {
65999                     images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush(), forImageKey: {} },
66000                     image_detections: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, forImageKey: {} },
66001                     map_features: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush() },
66002                     points: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush() },
66003                     sequences: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: new RBush(), forImageKey: {}, lineString: {} }
66004                 };
66005
66006                 _mlySelectedImageKey = null;
66007                 _mlyClicks = [];
66008             },
66009
66010
66011             images: function(projection) {
66012                 var limit = 5;
66013                 return searchLimited(limit, projection, _mlyCache.images.rtree);
66014             },
66015
66016
66017             signs: function(projection) {
66018                 var limit = 5;
66019                 return searchLimited(limit, projection, _mlyCache.map_features.rtree);
66020             },
66021
66022
66023             mapFeatures: function(projection) {
66024                 var limit = 5;
66025                 return searchLimited(limit, projection, _mlyCache.points.rtree);
66026             },
66027
66028
66029             cachedImage: function(imageKey) {
66030                 return _mlyCache.images.forImageKey[imageKey];
66031             },
66032
66033
66034             sequences: function(projection) {
66035                 var viewport = projection.clipExtent();
66036                 var min = [viewport[0][0], viewport[1][1]];
66037                 var max = [viewport[1][0], viewport[0][1]];
66038                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
66039                 var sequenceKeys = {};
66040
66041                 // all sequences for images in viewport
66042                 _mlyCache.images.rtree.search(bbox)
66043                     .forEach(function(d) {
66044                         var sequenceKey = _mlyCache.sequences.forImageKey[d.data.key];
66045                         if (sequenceKey) {
66046                             sequenceKeys[sequenceKey] = true;
66047                         }
66048                     });
66049
66050                 // Return lineStrings for the sequences
66051                 return Object.keys(sequenceKeys).map(function(sequenceKey) {
66052                     return _mlyCache.sequences.lineString[sequenceKey];
66053                 });
66054             },
66055
66056
66057             signsSupported: function() {
66058                 return true;
66059             },
66060
66061
66062             loadImages: function(projection) {
66063                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
66064                 loadTiles('sequences', apibase + 'sequences?sort_by=key&', projection);
66065             },
66066
66067
66068             loadSigns: function(projection) {
66069                 // if we are looking at signs, we'll actually need to fetch images too
66070                 loadTiles('images', apibase + 'images?sort_by=key&', projection);
66071                 loadTiles('map_features', apibase + 'map_features?layers=trafficsigns&min_nbr_image_detections=2&sort_by=key&', projection);
66072                 loadTiles('image_detections', apibase + 'image_detections?layers=trafficsigns&sort_by=key&', projection);
66073             },
66074
66075
66076             loadMapFeatures: function(projection) {
66077                 // if we are looking at signs, we'll actually need to fetch images too
66078                 loadTiles('images', apibase + 'images?sort_by=key', projection);
66079                 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);
66080                 loadTiles('image_detections', apibase + 'image_detections?layers=points&sort_by=key&shapes_by_organization_keys=' + mapFeatureConfig.organizationKey + '&' + 'values=' + mapFeatureConfig.values + '&', projection);
66081             },
66082
66083
66084             loadViewer: function(context) {
66085                 // add mly-wrapper
66086                 var wrap = d3_select('#photoviewer').selectAll('.mly-wrapper')
66087                     .data([0]);
66088
66089                 wrap.enter()
66090                     .append('div')
66091                     .attr('id', 'mly')
66092                     .attr('class', 'photo-wrapper mly-wrapper')
66093                     .classed('hide', true);
66094
66095                 // load mapillary-viewercss
66096                 d3_select('head').selectAll('#mapillary-viewercss')
66097                     .data([0])
66098                     .enter()
66099                     .append('link')
66100                     .attr('id', 'mapillary-viewercss')
66101                     .attr('rel', 'stylesheet')
66102                     .attr('href', context.asset(viewercss));
66103
66104                 // load mapillary-viewerjs
66105                 d3_select('head').selectAll('#mapillary-viewerjs')
66106                     .data([0])
66107                     .enter()
66108                     .append('script')
66109                     .attr('id', 'mapillary-viewerjs')
66110                     .attr('src', context.asset(viewerjs));
66111
66112                 // load mapillary signs sprite
66113                 var defs = context.container().select('defs');
66114                 defs.call(svgDefs(context).addSprites, ['mapillary-sprite', 'mapillary-object-sprite'], false /* don't override colors */ );
66115
66116                 // Register viewer resize handler
66117                 context.ui().photoviewer.on('resize.mapillary', function() {
66118                     if (_mlyViewer) {
66119                         _mlyViewer.resize();
66120                     }
66121                 });
66122             },
66123
66124
66125             showViewer: function() {
66126                 var wrap = d3_select('#photoviewer')
66127                     .classed('hide', false);
66128
66129                 var isHidden = wrap.selectAll('.photo-wrapper.mly-wrapper.hide').size();
66130
66131                 if (isHidden && _mlyViewer) {
66132                     wrap
66133                         .selectAll('.photo-wrapper:not(.mly-wrapper)')
66134                         .classed('hide', true);
66135
66136                     wrap
66137                         .selectAll('.photo-wrapper.mly-wrapper')
66138                         .classed('hide', false);
66139
66140                     _mlyViewer.resize();
66141                 }
66142
66143                 return this;
66144             },
66145
66146
66147             hideViewer: function() {
66148                 _mlySelectedImageKey = null;
66149
66150                 if (!_mlyFallback && _mlyViewer) {
66151                     _mlyViewer.getComponent('sequence').stop();
66152                 }
66153
66154                 var viewer = d3_select('#photoviewer');
66155                 if (!viewer.empty()) { viewer.datum(null); }
66156
66157                 viewer
66158                     .classed('hide', true)
66159                     .selectAll('.photo-wrapper')
66160                     .classed('hide', true);
66161
66162                 d3_selectAll('.viewfield-group, .sequence, .icon-detected')
66163                     .classed('currentView', false);
66164
66165                 return this.setStyles(null, true);
66166             },
66167
66168
66169             parsePagination: parsePagination,
66170
66171
66172             updateViewer: function(imageKey, context) {
66173                 if (!imageKey) { return this; }
66174
66175                 if (!_mlyViewer) {
66176                     this.initViewer(imageKey, context);
66177                 } else {
66178                     _mlyViewer.moveToKey(imageKey)
66179                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
66180                 }
66181
66182                 return this;
66183             },
66184
66185
66186             initViewer: function(imageKey, context) {
66187                 var that = this;
66188                 if (window.Mapillary && imageKey) {
66189                     var opts = {
66190                         baseImageSize: 320,
66191                         component: {
66192                             cover: false,
66193                             keyboard: false,
66194                             tag: true
66195                         }
66196                     };
66197
66198                     // Disable components requiring WebGL support
66199                     if (!Mapillary.isSupported() && Mapillary.isFallbackSupported()) {
66200                         _mlyFallback = true;
66201                         opts.component = {
66202                             cover: false,
66203                             direction: false,
66204                             imagePlane: false,
66205                             keyboard: false,
66206                             mouse: false,
66207                             sequence: false,
66208                             tag: false,
66209                             image: true,        // fallback
66210                             navigation: true    // fallback
66211                         };
66212                     }
66213
66214                     _mlyViewer = new Mapillary.Viewer('mly', clientId, null, opts);
66215                     _mlyViewer.on('nodechanged', nodeChanged);
66216                     _mlyViewer.on('bearingchanged', bearingChanged);
66217                     _mlyViewer.moveToKey(imageKey)
66218                         .catch(function(e) { console.error('mly3', e); });  // eslint-disable-line no-console
66219                 }
66220
66221                 // nodeChanged: called after the viewer has changed images and is ready.
66222                 //
66223                 // There is some logic here to batch up clicks into a _mlyClicks array
66224                 // because the user might click on a lot of markers quickly and nodechanged
66225                 // may be called out of order asychronously.
66226                 //
66227                 // Clicks are added to the array in `selectedImage` and removed here.
66228                 //
66229                 function nodeChanged(node) {
66230                     if (!_mlyFallback) {
66231                         _mlyViewer.getComponent('tag').removeAll();  // remove previous detections
66232                     }
66233
66234                     var clicks = _mlyClicks;
66235                     var index = clicks.indexOf(node.key);
66236                     var selectedKey = _mlySelectedImageKey;
66237
66238                     if (index > -1) {              // `nodechanged` initiated from clicking on a marker..
66239                         clicks.splice(index, 1);   // remove the click
66240                         // If `node.key` matches the current _mlySelectedImageKey, call `selectImage()`
66241                         // one more time to update the detections and attribution..
66242                         if (node.key === selectedKey) {
66243                             that.selectImage(_mlySelectedImageKey, true);
66244                         }
66245                     } else {             // `nodechanged` initiated from the Mapillary viewer controls..
66246                         var loc = node.computedLatLon ? [node.computedLatLon.lon, node.computedLatLon.lat] : [node.latLon.lon, node.latLon.lat];
66247                         context.map().centerEase(loc);
66248                         that.selectImage(node.key, true);
66249                     }
66250                 }
66251
66252                 function bearingChanged(e) {
66253                     dispatch$3.call('bearingChanged', undefined, e);
66254                 }
66255             },
66256
66257
66258             // Pass in the image key string as `imageKey`.
66259             // This allows images to be selected from places that dont have access
66260             // to the full image datum (like the street signs layer or the js viewer)
66261             selectImage: function(imageKey, fromViewer) {
66262
66263                 _mlySelectedImageKey = imageKey;
66264
66265                 // Note the datum could be missing, but we'll try to carry on anyway.
66266                 // There just might be a delay before user sees detections, captured_at, etc.
66267                 var d = _mlyCache.images.forImageKey[imageKey];
66268
66269                 var viewer = d3_select('#photoviewer');
66270                 if (!viewer.empty()) { viewer.datum(d); }
66271
66272                 imageKey = (d && d.key) || imageKey;
66273                 if (!fromViewer && imageKey) {
66274                     _mlyClicks.push(imageKey);
66275                 }
66276
66277                 this.setStyles(null, true);
66278
66279                 // if signs signs are shown, highlight the ones that appear in this image
66280                 d3_selectAll('.layer-mapillary-signs .icon-detected')
66281                     .classed('currentView', function(d) {
66282                         return d.detections.some(function(detection) {
66283                             return detection.image_key === imageKey;
66284                         });
66285                     });
66286
66287                 if (d) {
66288                     this.updateDetections(d);
66289                 }
66290
66291                 return this;
66292             },
66293
66294
66295             getSelectedImageKey: function() {
66296                 return _mlySelectedImageKey;
66297             },
66298
66299
66300             getSequenceKeyForImageKey: function(imageKey) {
66301                 return _mlyCache.sequences.forImageKey[imageKey];
66302             },
66303
66304
66305             // Updates the currently highlighted sequence and selected bubble.
66306             // Reset is only necessary when interacting with the viewport because
66307             // this implicitly changes the currently selected bubble/sequence
66308             setStyles: function(hovered, reset) {
66309                 if (reset) {  // reset all layers
66310                     d3_selectAll('.viewfield-group')
66311                         .classed('highlighted', false)
66312                         .classed('hovered', false)
66313                         .classed('currentView', false);
66314
66315                     d3_selectAll('.sequence')
66316                         .classed('highlighted', false)
66317                         .classed('currentView', false);
66318                 }
66319
66320                 var hoveredImageKey = hovered && hovered.key;
66321                 var hoveredSequenceKey = hoveredImageKey && this.getSequenceKeyForImageKey(hoveredImageKey);
66322                 var hoveredLineString = hoveredSequenceKey && _mlyCache.sequences.lineString[hoveredSequenceKey];
66323                 var hoveredImageKeys = (hoveredLineString && hoveredLineString.properties.coordinateProperties.image_keys) || [];
66324
66325                 var selectedImageKey = _mlySelectedImageKey;
66326                 var selectedSequenceKey = selectedImageKey && this.getSequenceKeyForImageKey(selectedImageKey);
66327                 var selectedLineString = selectedSequenceKey && _mlyCache.sequences.lineString[selectedSequenceKey];
66328                 var selectedImageKeys = (selectedLineString && selectedLineString.properties.coordinateProperties.image_keys) || [];
66329
66330                 // highlight sibling viewfields on either the selected or the hovered sequences
66331                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
66332
66333                 d3_selectAll('.layer-mapillary .viewfield-group')
66334                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
66335                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
66336                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
66337
66338                 d3_selectAll('.layer-mapillary .sequence')
66339                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
66340                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
66341
66342                 // update viewfields if needed
66343                 d3_selectAll('.viewfield-group .viewfield')
66344                     .attr('d', viewfieldPath);
66345
66346                 function viewfieldPath() {
66347                     var d = this.parentNode.__data__;
66348                     if (d.pano && d.key !== selectedImageKey) {
66349                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
66350                     } else {
66351                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
66352                     }
66353                 }
66354
66355                 return this;
66356             },
66357
66358
66359             updateDetections: function(d) {
66360                 if (!_mlyViewer || _mlyFallback) { return; }
66361
66362                 var imageKey = d && d.key;
66363                 if (!imageKey) { return; }
66364
66365                 var detections = _mlyCache.image_detections.forImageKey[imageKey] || [];
66366                 detections.forEach(function(data) {
66367                     var tag = makeTag(data);
66368                     if (tag) {
66369                         var tagComponent = _mlyViewer.getComponent('tag');
66370                         tagComponent.add([tag]);
66371                     }
66372                 });
66373
66374                 function makeTag(data) {
66375                     var valueParts = data.value.split('--');
66376                     if (valueParts.length !== 3) { return; }
66377
66378                     var text = valueParts[1].replace(/-/g, ' ');
66379                     var tag;
66380
66381                     // Currently only two shapes <Polygon|Point>
66382                     if (data.shape.type === 'Polygon') {
66383                         var polygonGeometry = new Mapillary
66384                             .TagComponent
66385                             .PolygonGeometry(data.shape.coordinates[0]);
66386
66387                         tag = new Mapillary.TagComponent.OutlineTag(
66388                             data.key,
66389                             polygonGeometry,
66390                             {
66391                                 text: text,
66392                                 textColor: 0xffff00,
66393                                 lineColor: 0xffff00,
66394                                 lineWidth: 2,
66395                                 fillColor: 0xffff00,
66396                                 fillOpacity: 0.3,
66397                             }
66398                         );
66399
66400                     } else if (data.shape.type === 'Point') {
66401                         var pointGeometry = new Mapillary
66402                             .TagComponent
66403                             .PointGeometry(data.shape.coordinates[0]);
66404
66405                         tag = new Mapillary.TagComponent.SpotTag(
66406                             data.key,
66407                             pointGeometry,
66408                             {
66409                                 text: text,
66410                                 color: 0xffff00,
66411                                 textColor: 0xffff00
66412                             }
66413                         );
66414                     }
66415
66416                     return tag;
66417                 }
66418             },
66419
66420
66421             cache: function() {
66422                 return _mlyCache;
66423             }
66424
66425         };
66426
66427         function validationIssue(attrs) {
66428             this.type = attrs.type;                // required - name of rule that created the issue (e.g. 'missing_tag')
66429             this.subtype = attrs.subtype;          // optional - category of the issue within the type (e.g. 'relation_type' under 'missing_tag')
66430             this.severity = attrs.severity;        // required - 'warning' or 'error'
66431             this.message = attrs.message;          // required - function returning localized string
66432             this.reference = attrs.reference;      // optional - function(selection) to render reference information
66433             this.entityIds = attrs.entityIds;      // optional - array of IDs of entities involved in the issue
66434             this.loc = attrs.loc;                  // optional - [lon, lat] to zoom in on to see the issue
66435             this.data = attrs.data;                // optional - object containing extra data for the fixes
66436             this.dynamicFixes = attrs.dynamicFixes;// optional - function(context) returning fixes
66437             this.hash = attrs.hash;                // optional - string to further differentiate the issue
66438
66439             this.id = generateID.apply(this);      // generated - see below
66440             this.autoFix = null;                   // generated - if autofix exists, will be set below
66441
66442             // A unique, deterministic string hash.
66443             // Issues with identical id values are considered identical.
66444             function generateID() {
66445                 var parts = [this.type];
66446
66447                 if (this.hash) {   // subclasses can pass in their own differentiator
66448                     parts.push(this.hash);
66449                 }
66450
66451                 if (this.subtype) {
66452                     parts.push(this.subtype);
66453                 }
66454
66455                 // include the entities this issue is for
66456                 // (sort them so the id is deterministic)
66457                 if (this.entityIds) {
66458                     var entityKeys = this.entityIds.slice().sort();
66459                     parts.push.apply(parts, entityKeys);
66460                 }
66461
66462                 return parts.join(':');
66463             }
66464
66465             this.extent = function(resolver) {
66466                 if (this.loc) {
66467                     return geoExtent(this.loc);
66468                 }
66469                 if (this.entityIds && this.entityIds.length) {
66470                     return this.entityIds.reduce(function(extent, entityId) {
66471                         return extent.extend(resolver.entity(entityId).extent(resolver));
66472                     }, geoExtent());
66473                 }
66474                 return null;
66475             };
66476
66477             this.fixes = function(context) {
66478                 var fixes = this.dynamicFixes ? this.dynamicFixes(context) : [];
66479                 var issue = this;
66480
66481                 if (issue.severity === 'warning') {
66482                     // allow ignoring any issue that's not an error
66483                     fixes.push(new validationIssueFix({
66484                         title: t('issues.fix.ignore_issue.title'),
66485                         icon: 'iD-icon-close',
66486                         onClick: function() {
66487                             context.validator().ignoreIssue(this.issue.id);
66488                         }
66489                     }));
66490                 }
66491
66492                 fixes.forEach(function(fix) {
66493                     fix.id = fix.title;
66494                     // add a reference to the issue for use in actions
66495                     fix.issue = issue;
66496                     if (fix.autoArgs) {
66497                         issue.autoFix = fix;
66498                     }
66499                 });
66500                 return fixes;
66501             };
66502
66503         }
66504
66505
66506         function validationIssueFix(attrs) {
66507             this.title = attrs.title;                   // Required
66508             this.onClick = attrs.onClick;               // Optional - the function to run to apply the fix
66509             this.disabledReason = attrs.disabledReason; // Optional - a string explaining why the fix is unavailable, if any
66510             this.icon = attrs.icon;                     // Optional - shows 'iD-icon-wrench' if not set
66511             this.entityIds = attrs.entityIds || [];     // Optional - used for hover-higlighting.
66512             this.autoArgs = attrs.autoArgs;             // Optional - pass [actions, annotation] arglist if this fix can automatically run
66513
66514             this.issue = null;    // Generated link - added by validationIssue
66515         }
66516
66517         var buildRuleChecks = function() {
66518             return {
66519                 equals: function (equals) {
66520                     return function(tags) {
66521                         return Object.keys(equals).every(function(k) {
66522                             return equals[k] === tags[k];
66523                         });
66524                     };
66525                 },
66526                 notEquals: function (notEquals) {
66527                     return function(tags) {
66528                         return Object.keys(notEquals).some(function(k) {
66529                             return notEquals[k] !== tags[k];
66530                         });
66531                     };
66532                 },
66533                 absence: function(absence) {
66534                     return function(tags) {
66535                         return Object.keys(tags).indexOf(absence) === -1;
66536                     };
66537                 },
66538                 presence: function(presence) {
66539                     return function(tags) {
66540                         return Object.keys(tags).indexOf(presence) > -1;
66541                     };
66542                 },
66543                 greaterThan: function(greaterThan) {
66544                     var key = Object.keys(greaterThan)[0];
66545                     var value = greaterThan[key];
66546
66547                     return function(tags) {
66548                         return tags[key] > value;
66549                     };
66550                 },
66551                 greaterThanEqual: function(greaterThanEqual) {
66552                     var key = Object.keys(greaterThanEqual)[0];
66553                     var value = greaterThanEqual[key];
66554
66555                     return function(tags) {
66556                         return tags[key] >= value;
66557                     };
66558                 },
66559                 lessThan: function(lessThan) {
66560                     var key = Object.keys(lessThan)[0];
66561                     var value = lessThan[key];
66562
66563                     return function(tags) {
66564                         return tags[key] < value;
66565                     };
66566                 },
66567                 lessThanEqual: function(lessThanEqual) {
66568                     var key = Object.keys(lessThanEqual)[0];
66569                     var value = lessThanEqual[key];
66570
66571                     return function(tags) {
66572                         return tags[key] <= value;
66573                     };
66574                 },
66575                 positiveRegex: function(positiveRegex) {
66576                     var tagKey = Object.keys(positiveRegex)[0];
66577                     var expression = positiveRegex[tagKey].join('|');
66578                     var regex = new RegExp(expression);
66579
66580                     return function(tags) {
66581                         return regex.test(tags[tagKey]);
66582                     };
66583                 },
66584                 negativeRegex: function(negativeRegex) {
66585                     var tagKey = Object.keys(negativeRegex)[0];
66586                     var expression = negativeRegex[tagKey].join('|');
66587                     var regex = new RegExp(expression);
66588
66589                     return function(tags) {
66590                         return !regex.test(tags[tagKey]);
66591                     };
66592                 }
66593             };
66594         };
66595
66596         var buildLineKeys = function() {
66597             return {
66598                 highway: {
66599                     rest_area: true,
66600                     services: true
66601                 },
66602                 railway: {
66603                     roundhouse: true,
66604                     station: true,
66605                     traverser: true,
66606                     turntable: true,
66607                     wash: true
66608                 }
66609             };
66610         };
66611
66612         var serviceMapRules = {
66613             init: function() {
66614                 this._ruleChecks  = buildRuleChecks();
66615                 this._validationRules = [];
66616                 this._areaKeys = osmAreaKeys;
66617                 this._lineKeys = buildLineKeys();
66618             },
66619
66620             // list of rules only relevant to tag checks...
66621             filterRuleChecks: function(selector) {
66622                 var _ruleChecks = this._ruleChecks;
66623                 return Object.keys(selector).reduce(function(rules, key) {
66624                     if (['geometry', 'error', 'warning'].indexOf(key) === -1) {
66625                         rules.push(_ruleChecks[key](selector[key]));
66626                     }
66627                     return rules;
66628                 }, []);
66629             },
66630
66631             // builds tagMap from mapcss-parse selector object...
66632             buildTagMap: function(selector) {
66633                 var getRegexValues = function(regexes) {
66634                     return regexes.map(function(regex) {
66635                         return regex.replace(/\$|\^/g, '');
66636                     });
66637                 };
66638
66639                 var tagMap = Object.keys(selector).reduce(function (expectedTags, key) {
66640                     var values;
66641                     var isRegex = /regex/gi.test(key);
66642                     var isEqual = /equals/gi.test(key);
66643
66644                     if (isRegex || isEqual) {
66645                         Object.keys(selector[key]).forEach(function(selectorKey) {
66646                             values = isEqual ? [selector[key][selectorKey]] : getRegexValues(selector[key][selectorKey]);
66647
66648                             if (expectedTags.hasOwnProperty(selectorKey)) {
66649                                 values = values.concat(expectedTags[selectorKey]);
66650                             }
66651
66652                             expectedTags[selectorKey] = values;
66653                         });
66654
66655                     } else if (/(greater|less)Than(Equal)?|presence/g.test(key)) {
66656                         var tagKey = /presence/.test(key) ? selector[key] : Object.keys(selector[key])[0];
66657
66658                         values = [selector[key][tagKey]];
66659
66660                         if (expectedTags.hasOwnProperty(tagKey)) {
66661                             values = values.concat(expectedTags[tagKey]);
66662                         }
66663
66664                         expectedTags[tagKey] = values;
66665                     }
66666
66667                     return expectedTags;
66668                 }, {});
66669
66670                 return tagMap;
66671             },
66672
66673             // inspired by osmWay#isArea()
66674             inferGeometry: function(tagMap) {
66675                 var _lineKeys = this._lineKeys;
66676                 var _areaKeys = this._areaKeys;
66677
66678                 var isAreaKeyBlackList = function(key) {
66679                     return utilArrayIntersection(tagMap[key], Object.keys(_areaKeys[key])).length > 0;
66680                 };
66681                 var isLineKeysWhiteList = function(key) {
66682                     return utilArrayIntersection(tagMap[key], Object.keys(_lineKeys[key])).length > 0;
66683                 };
66684
66685                 if (tagMap.hasOwnProperty('area')) {
66686                     if (tagMap.area.indexOf('yes') > -1) {
66687                         return 'area';
66688                     }
66689                     if (tagMap.area.indexOf('no') > -1) {
66690                         return 'line';
66691                     }
66692                 }
66693
66694                 for (var key in tagMap) {
66695                     if (key in _areaKeys && !isAreaKeyBlackList(key)) {
66696                         return 'area';
66697                     }
66698                     if (key in _lineKeys && isLineKeysWhiteList(key)) {
66699                         return 'area';
66700                     }
66701                 }
66702
66703                 return 'line';
66704             },
66705
66706             // adds from mapcss-parse selector check...
66707             addRule: function(selector) {
66708                 var rule = {
66709                     // checks relevant to mapcss-selector
66710                     checks: this.filterRuleChecks(selector),
66711                     // true if all conditions for a tag error are true..
66712                     matches: function(entity) {
66713                         return this.checks.every(function(check) {
66714                             return check(entity.tags);
66715                         });
66716                     },
66717                     // borrowed from Way#isArea()
66718                     inferredGeometry: this.inferGeometry(this.buildTagMap(selector), this._areaKeys),
66719                     geometryMatches: function(entity, graph) {
66720                         if (entity.type === 'node' || entity.type === 'relation') {
66721                             return selector.geometry === entity.type;
66722                         } else if (entity.type === 'way') {
66723                             return this.inferredGeometry === entity.geometry(graph);
66724                         }
66725                     },
66726                     // when geometries match and tag matches are present, return a warning...
66727                     findIssues: function (entity, graph, issues) {
66728                         if (this.geometryMatches(entity, graph) && this.matches(entity)) {
66729                             var severity = Object.keys(selector).indexOf('error') > -1
66730                                     ? 'error'
66731                                     : 'warning';
66732                             var message = selector[severity];
66733                             issues.push(new validationIssue({
66734                                 type: 'maprules',
66735                                 severity: severity,
66736                                 message: function() {
66737                                     return message;
66738                                 },
66739                                 entityIds: [entity.id]
66740                             }));
66741                         }
66742                     }
66743                 };
66744                 this._validationRules.push(rule);
66745             },
66746
66747             clearRules: function() { this._validationRules = []; },
66748
66749             // returns validationRules...
66750             validationRules: function() { return this._validationRules; },
66751
66752             // returns ruleChecks
66753             ruleChecks: function() { return this._ruleChecks; }
66754         };
66755
66756         var apibase$1 = 'https://nominatim.openstreetmap.org/';
66757         var _inflight = {};
66758         var _nominatimCache;
66759
66760
66761         var serviceNominatim = {
66762
66763             init: function() {
66764                 _inflight = {};
66765                 _nominatimCache = new RBush();
66766             },
66767
66768             reset: function() {
66769                 Object.values(_inflight).forEach(function(controller) { controller.abort(); });
66770                 _inflight = {};
66771                 _nominatimCache = new RBush();
66772             },
66773
66774
66775             countryCode: function (location, callback) {
66776                 this.reverse(location, function(err, result) {
66777                     if (err) {
66778                         return callback(err);
66779                     } else if (result.address) {
66780                         return callback(null, result.address.country_code);
66781                     } else {
66782                         return callback('Unable to geocode', null);
66783                     }
66784                 });
66785             },
66786
66787
66788             reverse: function (loc, callback) {
66789                 var cached = _nominatimCache.search(
66790                     { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] }
66791                 );
66792
66793                 if (cached.length > 0) {
66794                     if (callback) { callback(null, cached[0].data); }
66795                     return;
66796                 }
66797
66798                 var params = { zoom: 13, format: 'json', addressdetails: 1, lat: loc[1], lon: loc[0] };
66799                 var url = apibase$1 + 'reverse?' + utilQsString(params);
66800
66801                 if (_inflight[url]) { return; }
66802                 var controller = new AbortController();
66803                 _inflight[url] = controller;
66804
66805                 d3_json(url, { signal: controller.signal })
66806                     .then(function(result) {
66807                         delete _inflight[url];
66808                         if (result && result.error) {
66809                             throw new Error(result.error);
66810                         }
66811                         var extent = geoExtent(loc).padByMeters(200);
66812                         _nominatimCache.insert(Object.assign(extent.bbox(), {data: result}));
66813                         if (callback) { callback(null, result); }
66814                     })
66815                     .catch(function(err) {
66816                         delete _inflight[url];
66817                         if (err.name === 'AbortError') { return; }
66818                         if (callback) { callback(err.message); }
66819                     });
66820             },
66821
66822
66823             search: function (val, callback) {
66824                 var searchVal = encodeURIComponent(val);
66825                 var url = apibase$1 + 'search/' + searchVal + '?limit=10&format=json';
66826
66827                 if (_inflight[url]) { return; }
66828                 var controller = new AbortController();
66829                 _inflight[url] = controller;
66830
66831                 d3_json(url, { signal: controller.signal })
66832                     .then(function(result) {
66833                         delete _inflight[url];
66834                         if (result && result.error) {
66835                             throw new Error(result.error);
66836                         }
66837                         if (callback) { callback(null, result); }
66838                     })
66839                     .catch(function(err) {
66840                         delete _inflight[url];
66841                         if (err.name === 'AbortError') { return; }
66842                         if (callback) { callback(err.message); }
66843                     });
66844             }
66845
66846         };
66847
66848         var apibase$2 = 'https://openstreetcam.org';
66849         var maxResults$1 = 1000;
66850         var tileZoom$1 = 14;
66851         var tiler$3 = utilTiler().zoomExtent([tileZoom$1, tileZoom$1]).skipNullIsland(true);
66852         var dispatch$4 = dispatch('loadedImages');
66853         var imgZoom = d3_zoom()
66854             .extent([[0, 0], [320, 240]])
66855             .translateExtent([[0, 0], [320, 240]])
66856             .scaleExtent([1, 15])
66857             .on('zoom', zoomPan);
66858         var _oscCache;
66859         var _oscSelectedImage;
66860
66861
66862         function abortRequest$3(controller) {
66863             controller.abort();
66864         }
66865
66866
66867         function maxPageAtZoom$1(z) {
66868             if (z < 15)   { return 2; }
66869             if (z === 15) { return 5; }
66870             if (z === 16) { return 10; }
66871             if (z === 17) { return 20; }
66872             if (z === 18) { return 40; }
66873             if (z > 18)   { return 80; }
66874         }
66875
66876
66877         function loadTiles$1(which, url, projection) {
66878             var currZoom = Math.floor(geoScaleToZoom(projection.scale()));
66879             var tiles = tiler$3.getTiles(projection);
66880
66881             // abort inflight requests that are no longer needed
66882             var cache = _oscCache[which];
66883             Object.keys(cache.inflight).forEach(function(k) {
66884                 var wanted = tiles.find(function(tile) { return k.indexOf(tile.id + ',') === 0; });
66885                 if (!wanted) {
66886                     abortRequest$3(cache.inflight[k]);
66887                     delete cache.inflight[k];
66888                 }
66889             });
66890
66891             tiles.forEach(function(tile) {
66892                 loadNextTilePage$1(which, currZoom, url, tile);
66893             });
66894         }
66895
66896
66897         function loadNextTilePage$1(which, currZoom, url, tile) {
66898             var cache = _oscCache[which];
66899             var bbox = tile.extent.bbox();
66900             var maxPages = maxPageAtZoom$1(currZoom);
66901             var nextPage = cache.nextPage[tile.id] || 1;
66902             var params = utilQsString({
66903                 ipp: maxResults$1,
66904                 page: nextPage,
66905                 // client_id: clientId,
66906                 bbTopLeft: [bbox.maxY, bbox.minX].join(','),
66907                 bbBottomRight: [bbox.minY, bbox.maxX].join(',')
66908             }, true);
66909
66910             if (nextPage > maxPages) { return; }
66911
66912             var id = tile.id + ',' + String(nextPage);
66913             if (cache.loaded[id] || cache.inflight[id]) { return; }
66914
66915             var controller = new AbortController();
66916             cache.inflight[id] = controller;
66917
66918             var options = {
66919                 method: 'POST',
66920                 signal: controller.signal,
66921                 body: params,
66922                 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
66923             };
66924
66925             d3_json(url, options)
66926                 .then(function(data) {
66927                     cache.loaded[id] = true;
66928                     delete cache.inflight[id];
66929                     if (!data || !data.currentPageItems || !data.currentPageItems.length) {
66930                         throw new Error('No Data');
66931                     }
66932
66933                     var features = data.currentPageItems.map(function(item) {
66934                         var loc = [+item.lng, +item.lat];
66935                         var d;
66936
66937                         if (which === 'images') {
66938                             d = {
66939                                 loc: loc,
66940                                 key: item.id,
66941                                 ca: +item.heading,
66942                                 captured_at: (item.shot_date || item.date_added),
66943                                 captured_by: item.username,
66944                                 imagePath: item.lth_name,
66945                                 sequence_id: item.sequence_id,
66946                                 sequence_index: +item.sequence_index
66947                             };
66948
66949                             // cache sequence info
66950                             var seq = _oscCache.sequences[d.sequence_id];
66951                             if (!seq) {
66952                                 seq = { rotation: 0, images: [] };
66953                                 _oscCache.sequences[d.sequence_id] = seq;
66954                             }
66955                             seq.images[d.sequence_index] = d;
66956                         }
66957
66958                         return {
66959                             minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
66960                         };
66961                     });
66962
66963                     cache.rtree.load(features);
66964
66965                     if (data.currentPageItems.length === maxResults$1) {  // more pages to load
66966                         cache.nextPage[tile.id] = nextPage + 1;
66967                         loadNextTilePage$1(which, currZoom, url, tile);
66968                     } else {
66969                         cache.nextPage[tile.id] = Infinity;     // no more pages to load
66970                     }
66971
66972                     if (which === 'images') {
66973                         dispatch$4.call('loadedImages');
66974                     }
66975                 })
66976                 .catch(function() {
66977                     cache.loaded[id] = true;
66978                     delete cache.inflight[id];
66979                 });
66980         }
66981
66982
66983         // partition viewport into higher zoom tiles
66984         function partitionViewport$1(projection) {
66985             var z = geoScaleToZoom(projection.scale());
66986             var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
66987             var tiler = utilTiler().zoomExtent([z2, z2]);
66988
66989             return tiler.getTiles(projection)
66990                 .map(function(tile) { return tile.extent; });
66991         }
66992
66993
66994         // no more than `limit` results per partition.
66995         function searchLimited$1(limit, projection, rtree) {
66996             limit = limit || 5;
66997
66998             return partitionViewport$1(projection)
66999                 .reduce(function(result, extent) {
67000                     var found = rtree.search(extent.bbox())
67001                         .slice(0, limit)
67002                         .map(function(d) { return d.data; });
67003
67004                     return (found.length ? result.concat(found) : result);
67005                 }, []);
67006         }
67007
67008
67009         function zoomPan() {
67010             var t = event.transform;
67011             d3_select('#photoviewer .osc-image-wrap')
67012                 .call(utilSetTransform, t.x, t.y, t.k);
67013         }
67014
67015
67016         var serviceOpenstreetcam = {
67017
67018             init: function() {
67019                 if (!_oscCache) {
67020                     this.reset();
67021                 }
67022
67023                 this.event = utilRebind(this, dispatch$4, 'on');
67024             },
67025
67026             reset: function() {
67027                 if (_oscCache) {
67028                     Object.values(_oscCache.images.inflight).forEach(abortRequest$3);
67029                 }
67030
67031                 _oscCache = {
67032                     images: { inflight: {}, loaded: {}, nextPage: {}, rtree: new RBush() },
67033                     sequences: {}
67034                 };
67035
67036                 _oscSelectedImage = null;
67037             },
67038
67039
67040             images: function(projection) {
67041                 var limit = 5;
67042                 return searchLimited$1(limit, projection, _oscCache.images.rtree);
67043             },
67044
67045
67046             sequences: function(projection) {
67047                 var viewport = projection.clipExtent();
67048                 var min = [viewport[0][0], viewport[1][1]];
67049                 var max = [viewport[1][0], viewport[0][1]];
67050                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
67051                 var sequenceKeys = {};
67052
67053                 // all sequences for images in viewport
67054                 _oscCache.images.rtree.search(bbox)
67055                     .forEach(function(d) { sequenceKeys[d.data.sequence_id] = true; });
67056
67057                 // make linestrings from those sequences
67058                 var lineStrings = [];
67059                 Object.keys(sequenceKeys)
67060                     .forEach(function(sequenceKey) {
67061                         var seq = _oscCache.sequences[sequenceKey];
67062                         var images = seq && seq.images;
67063                         if (images) {
67064                             lineStrings.push({
67065                                 type: 'LineString',
67066                                 coordinates: images.map(function (d) { return d.loc; }).filter(Boolean),
67067                                 properties: { key: sequenceKey }
67068                             });
67069                         }
67070                     });
67071                 return lineStrings;
67072             },
67073
67074
67075             loadImages: function(projection) {
67076                 var url = apibase$2 + '/1.0/list/nearby-photos/';
67077                 loadTiles$1('images', url, projection);
67078             },
67079
67080
67081             loadViewer: function(context) {
67082                 var that = this;
67083
67084                 // add osc-wrapper
67085                 var wrap = d3_select('#photoviewer').selectAll('.osc-wrapper')
67086                     .data([0]);
67087
67088                 var wrapEnter = wrap.enter()
67089                     .append('div')
67090                     .attr('class', 'photo-wrapper osc-wrapper')
67091                     .classed('hide', true)
67092                     .call(imgZoom)
67093                     .on('dblclick.zoom', null);
67094
67095                 wrapEnter
67096                     .append('div')
67097                     .attr('class', 'photo-attribution fillD');
67098
67099                 var controlsEnter = wrapEnter
67100                     .append('div')
67101                     .attr('class', 'photo-controls-wrap')
67102                     .append('div')
67103                     .attr('class', 'photo-controls');
67104
67105                 controlsEnter
67106                     .append('button')
67107                     .on('click.back', step(-1))
67108                     .text('◄');
67109
67110                 controlsEnter
67111                     .append('button')
67112                     .on('click.rotate-ccw', rotate(-90))
67113                     .text('⤿');
67114
67115                 controlsEnter
67116                     .append('button')
67117                     .on('click.rotate-cw', rotate(90))
67118                     .text('⤾');
67119
67120                 controlsEnter
67121                     .append('button')
67122                     .on('click.forward', step(1))
67123                     .text('►');
67124
67125                 wrapEnter
67126                     .append('div')
67127                     .attr('class', 'osc-image-wrap');
67128
67129
67130                 // Register viewer resize handler
67131                 context.ui().photoviewer.on('resize.openstreetcam', function(dimensions) {
67132                     imgZoom = d3_zoom()
67133                         .extent([[0, 0], dimensions])
67134                         .translateExtent([[0, 0], dimensions])
67135                         .scaleExtent([1, 15])
67136                         .on('zoom', zoomPan);
67137                 });
67138
67139
67140                 function rotate(deg) {
67141                     return function() {
67142                         if (!_oscSelectedImage) { return; }
67143                         var sequenceKey = _oscSelectedImage.sequence_id;
67144                         var sequence = _oscCache.sequences[sequenceKey];
67145                         if (!sequence) { return; }
67146
67147                         var r = sequence.rotation || 0;
67148                         r += deg;
67149
67150                         if (r > 180) { r -= 360; }
67151                         if (r < -180) { r += 360; }
67152                         sequence.rotation = r;
67153
67154                         var wrap = d3_select('#photoviewer .osc-wrapper');
67155
67156                         wrap
67157                             .transition()
67158                             .duration(100)
67159                             .call(imgZoom.transform, identity$8);
67160
67161                         wrap.selectAll('.osc-image')
67162                             .transition()
67163                             .duration(100)
67164                             .style('transform', 'rotate(' + r + 'deg)');
67165                     };
67166                 }
67167
67168                 function step(stepBy) {
67169                     return function() {
67170                         if (!_oscSelectedImage) { return; }
67171                         var sequenceKey = _oscSelectedImage.sequence_id;
67172                         var sequence = _oscCache.sequences[sequenceKey];
67173                         if (!sequence) { return; }
67174
67175                         var nextIndex = _oscSelectedImage.sequence_index + stepBy;
67176                         var nextImage = sequence.images[nextIndex];
67177                         if (!nextImage) { return; }
67178
67179                         context.map().centerEase(nextImage.loc);
67180
67181                         that
67182                             .selectImage(nextImage)
67183                             .updateViewer(nextImage);
67184                     };
67185                 }
67186             },
67187
67188
67189             showViewer: function() {
67190                 var viewer = d3_select('#photoviewer')
67191                     .classed('hide', false);
67192
67193                 var isHidden = viewer.selectAll('.photo-wrapper.osc-wrapper.hide').size();
67194
67195                 if (isHidden) {
67196                     viewer
67197                         .selectAll('.photo-wrapper:not(.osc-wrapper)')
67198                         .classed('hide', true);
67199
67200                     viewer
67201                         .selectAll('.photo-wrapper.osc-wrapper')
67202                         .classed('hide', false);
67203                 }
67204
67205                 return this;
67206             },
67207
67208
67209             hideViewer: function() {
67210                 _oscSelectedImage = null;
67211
67212                 var viewer = d3_select('#photoviewer');
67213                 if (!viewer.empty()) { viewer.datum(null); }
67214
67215                 viewer
67216                     .classed('hide', true)
67217                     .selectAll('.photo-wrapper')
67218                     .classed('hide', true);
67219
67220                 d3_selectAll('.viewfield-group, .sequence, .icon-sign')
67221                     .classed('currentView', false);
67222
67223                 return this.setStyles(null, true);
67224             },
67225
67226
67227             updateViewer: function(d) {
67228                 var wrap = d3_select('#photoviewer .osc-wrapper');
67229                 var imageWrap = wrap.selectAll('.osc-image-wrap');
67230                 var attribution = wrap.selectAll('.photo-attribution').html('');
67231
67232                 wrap
67233                     .transition()
67234                     .duration(100)
67235                     .call(imgZoom.transform, identity$8);
67236
67237                 imageWrap
67238                     .selectAll('.osc-image')
67239                     .remove();
67240
67241                 if (d) {
67242                     var sequence = _oscCache.sequences[d.sequence_id];
67243                     var r = (sequence && sequence.rotation) || 0;
67244
67245                     imageWrap
67246                         .append('img')
67247                         .attr('class', 'osc-image')
67248                         .attr('src', apibase$2 + '/' + d.imagePath)
67249                         .style('transform', 'rotate(' + r + 'deg)');
67250
67251                     if (d.captured_by) {
67252                         attribution
67253                             .append('a')
67254                             .attr('class', 'captured_by')
67255                             .attr('target', '_blank')
67256                             .attr('href', 'https://openstreetcam.org/user/' + encodeURIComponent(d.captured_by))
67257                             .text('@' + d.captured_by);
67258
67259                         attribution
67260                             .append('span')
67261                             .text('|');
67262                     }
67263
67264                     if (d.captured_at) {
67265                         attribution
67266                             .append('span')
67267                             .attr('class', 'captured_at')
67268                             .text(localeDateString(d.captured_at));
67269
67270                         attribution
67271                             .append('span')
67272                             .text('|');
67273                     }
67274
67275                     attribution
67276                         .append('a')
67277                         .attr('class', 'image-link')
67278                         .attr('target', '_blank')
67279                         .attr('href', 'https://openstreetcam.org/details/' + d.sequence_id + '/' + d.sequence_index)
67280                         .text('openstreetcam.org');
67281                 }
67282
67283                 return this;
67284
67285
67286                 function localeDateString(s) {
67287                     if (!s) { return null; }
67288                     var detected = utilDetect();
67289                     var options = { day: 'numeric', month: 'short', year: 'numeric' };
67290                     var d = new Date(s);
67291                     if (isNaN(d.getTime())) { return null; }
67292                     return d.toLocaleDateString(detected.locale, options);
67293                 }
67294             },
67295
67296
67297             selectImage: function(d) {
67298                 _oscSelectedImage = d;
67299                 var viewer = d3_select('#photoviewer');
67300                 if (!viewer.empty()) { viewer.datum(d); }
67301
67302                 this.setStyles(null, true);
67303
67304                 d3_selectAll('.icon-sign')
67305                     .classed('currentView', false);
67306
67307                 return this;
67308             },
67309
67310
67311             getSelectedImage: function() {
67312                 return _oscSelectedImage;
67313             },
67314
67315
67316             getSequenceKeyForImage: function(d) {
67317                 return d && d.sequence_id;
67318             },
67319
67320
67321             // Updates the currently highlighted sequence and selected bubble.
67322             // Reset is only necessary when interacting with the viewport because
67323             // this implicitly changes the currently selected bubble/sequence
67324             setStyles: function(hovered, reset) {
67325                 if (reset) {  // reset all layers
67326                     d3_selectAll('.viewfield-group')
67327                         .classed('highlighted', false)
67328                         .classed('hovered', false)
67329                         .classed('currentView', false);
67330
67331                     d3_selectAll('.sequence')
67332                         .classed('highlighted', false)
67333                         .classed('currentView', false);
67334                 }
67335
67336                 var hoveredImageKey = hovered && hovered.key;
67337                 var hoveredSequenceKey = this.getSequenceKeyForImage(hovered);
67338                 var hoveredSequence = hoveredSequenceKey && _oscCache.sequences[hoveredSequenceKey];
67339                 var hoveredImageKeys = (hoveredSequence && hoveredSequence.images.map(function (d) { return d.key; })) || [];
67340
67341                 var viewer = d3_select('#photoviewer');
67342                 var selected = viewer.empty() ? undefined : viewer.datum();
67343                 var selectedImageKey = selected && selected.key;
67344                 var selectedSequenceKey = this.getSequenceKeyForImage(selected);
67345                 var selectedSequence = selectedSequenceKey && _oscCache.sequences[selectedSequenceKey];
67346                 var selectedImageKeys = (selectedSequence && selectedSequence.images.map(function (d) { return d.key; })) || [];
67347
67348                 // highlight sibling viewfields on either the selected or the hovered sequences
67349                 var highlightedImageKeys = utilArrayUnion(hoveredImageKeys, selectedImageKeys);
67350
67351                 d3_selectAll('.layer-openstreetcam .viewfield-group')
67352                     .classed('highlighted', function(d) { return highlightedImageKeys.indexOf(d.key) !== -1; })
67353                     .classed('hovered', function(d) { return d.key === hoveredImageKey; })
67354                     .classed('currentView', function(d) { return d.key === selectedImageKey; });
67355
67356                 d3_selectAll('.layer-openstreetcam .sequence')
67357                     .classed('highlighted', function(d) { return d.properties.key === hoveredSequenceKey; })
67358                     .classed('currentView', function(d) { return d.properties.key === selectedSequenceKey; });
67359
67360                 // update viewfields if needed
67361                 d3_selectAll('.viewfield-group .viewfield')
67362                     .attr('d', viewfieldPath);
67363
67364                 function viewfieldPath() {
67365                     var d = this.parentNode.__data__;
67366                     if (d.pano && d.key !== selectedImageKey) {
67367                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
67368                     } else {
67369                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
67370                     }
67371                 }
67372
67373                 return this;
67374             },
67375
67376
67377             cache: function() {
67378                 return _oscCache;
67379             }
67380
67381         };
67382
67383         /**
67384          * Checks if `value` is the
67385          * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
67386          * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
67387          *
67388          * @static
67389          * @memberOf _
67390          * @since 0.1.0
67391          * @category Lang
67392          * @param {*} value The value to check.
67393          * @returns {boolean} Returns `true` if `value` is an object, else `false`.
67394          * @example
67395          *
67396          * _.isObject({});
67397          * // => true
67398          *
67399          * _.isObject([1, 2, 3]);
67400          * // => true
67401          *
67402          * _.isObject(_.noop);
67403          * // => true
67404          *
67405          * _.isObject(null);
67406          * // => false
67407          */
67408         function isObject$2(value) {
67409           var type = typeof value;
67410           return value != null && (type == 'object' || type == 'function');
67411         }
67412
67413         /** Detect free variable `global` from Node.js. */
67414         var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
67415
67416         /** Detect free variable `self`. */
67417         var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
67418
67419         /** Used as a reference to the global object. */
67420         var root$3 = freeGlobal || freeSelf || Function('return this')();
67421
67422         /**
67423          * Gets the timestamp of the number of milliseconds that have elapsed since
67424          * the Unix epoch (1 January 1970 00:00:00 UTC).
67425          *
67426          * @static
67427          * @memberOf _
67428          * @since 2.4.0
67429          * @category Date
67430          * @returns {number} Returns the timestamp.
67431          * @example
67432          *
67433          * _.defer(function(stamp) {
67434          *   console.log(_.now() - stamp);
67435          * }, _.now());
67436          * // => Logs the number of milliseconds it took for the deferred invocation.
67437          */
67438         var now$1 = function() {
67439           return root$3.Date.now();
67440         };
67441
67442         /** Built-in value references. */
67443         var Symbol$1 = root$3.Symbol;
67444
67445         /** Used for built-in method references. */
67446         var objectProto = Object.prototype;
67447
67448         /** Used to check objects for own properties. */
67449         var hasOwnProperty$2 = objectProto.hasOwnProperty;
67450
67451         /**
67452          * Used to resolve the
67453          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
67454          * of values.
67455          */
67456         var nativeObjectToString = objectProto.toString;
67457
67458         /** Built-in value references. */
67459         var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
67460
67461         /**
67462          * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
67463          *
67464          * @private
67465          * @param {*} value The value to query.
67466          * @returns {string} Returns the raw `toStringTag`.
67467          */
67468         function getRawTag(value) {
67469           var isOwn = hasOwnProperty$2.call(value, symToStringTag),
67470               tag = value[symToStringTag];
67471
67472           try {
67473             value[symToStringTag] = undefined;
67474             var unmasked = true;
67475           } catch (e) {}
67476
67477           var result = nativeObjectToString.call(value);
67478           if (unmasked) {
67479             if (isOwn) {
67480               value[symToStringTag] = tag;
67481             } else {
67482               delete value[symToStringTag];
67483             }
67484           }
67485           return result;
67486         }
67487
67488         /** Used for built-in method references. */
67489         var objectProto$1 = Object.prototype;
67490
67491         /**
67492          * Used to resolve the
67493          * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
67494          * of values.
67495          */
67496         var nativeObjectToString$1 = objectProto$1.toString;
67497
67498         /**
67499          * Converts `value` to a string using `Object.prototype.toString`.
67500          *
67501          * @private
67502          * @param {*} value The value to convert.
67503          * @returns {string} Returns the converted string.
67504          */
67505         function objectToString$1(value) {
67506           return nativeObjectToString$1.call(value);
67507         }
67508
67509         /** `Object#toString` result references. */
67510         var nullTag = '[object Null]',
67511             undefinedTag = '[object Undefined]';
67512
67513         /** Built-in value references. */
67514         var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
67515
67516         /**
67517          * The base implementation of `getTag` without fallbacks for buggy environments.
67518          *
67519          * @private
67520          * @param {*} value The value to query.
67521          * @returns {string} Returns the `toStringTag`.
67522          */
67523         function baseGetTag(value) {
67524           if (value == null) {
67525             return value === undefined ? undefinedTag : nullTag;
67526           }
67527           return (symToStringTag$1 && symToStringTag$1 in Object(value))
67528             ? getRawTag(value)
67529             : objectToString$1(value);
67530         }
67531
67532         /**
67533          * Checks if `value` is object-like. A value is object-like if it's not `null`
67534          * and has a `typeof` result of "object".
67535          *
67536          * @static
67537          * @memberOf _
67538          * @since 4.0.0
67539          * @category Lang
67540          * @param {*} value The value to check.
67541          * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
67542          * @example
67543          *
67544          * _.isObjectLike({});
67545          * // => true
67546          *
67547          * _.isObjectLike([1, 2, 3]);
67548          * // => true
67549          *
67550          * _.isObjectLike(_.noop);
67551          * // => false
67552          *
67553          * _.isObjectLike(null);
67554          * // => false
67555          */
67556         function isObjectLike(value) {
67557           return value != null && typeof value == 'object';
67558         }
67559
67560         /** `Object#toString` result references. */
67561         var symbolTag = '[object Symbol]';
67562
67563         /**
67564          * Checks if `value` is classified as a `Symbol` primitive or object.
67565          *
67566          * @static
67567          * @memberOf _
67568          * @since 4.0.0
67569          * @category Lang
67570          * @param {*} value The value to check.
67571          * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
67572          * @example
67573          *
67574          * _.isSymbol(Symbol.iterator);
67575          * // => true
67576          *
67577          * _.isSymbol('abc');
67578          * // => false
67579          */
67580         function isSymbol$3(value) {
67581           return typeof value == 'symbol' ||
67582             (isObjectLike(value) && baseGetTag(value) == symbolTag);
67583         }
67584
67585         /** Used as references for various `Number` constants. */
67586         var NAN = 0 / 0;
67587
67588         /** Used to match leading and trailing whitespace. */
67589         var reTrim = /^\s+|\s+$/g;
67590
67591         /** Used to detect bad signed hexadecimal string values. */
67592         var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
67593
67594         /** Used to detect binary string values. */
67595         var reIsBinary = /^0b[01]+$/i;
67596
67597         /** Used to detect octal string values. */
67598         var reIsOctal = /^0o[0-7]+$/i;
67599
67600         /** Built-in method references without a dependency on `root`. */
67601         var freeParseInt = parseInt;
67602
67603         /**
67604          * Converts `value` to a number.
67605          *
67606          * @static
67607          * @memberOf _
67608          * @since 4.0.0
67609          * @category Lang
67610          * @param {*} value The value to process.
67611          * @returns {number} Returns the number.
67612          * @example
67613          *
67614          * _.toNumber(3.2);
67615          * // => 3.2
67616          *
67617          * _.toNumber(Number.MIN_VALUE);
67618          * // => 5e-324
67619          *
67620          * _.toNumber(Infinity);
67621          * // => Infinity
67622          *
67623          * _.toNumber('3.2');
67624          * // => 3.2
67625          */
67626         function toNumber(value) {
67627           if (typeof value == 'number') {
67628             return value;
67629           }
67630           if (isSymbol$3(value)) {
67631             return NAN;
67632           }
67633           if (isObject$2(value)) {
67634             var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
67635             value = isObject$2(other) ? (other + '') : other;
67636           }
67637           if (typeof value != 'string') {
67638             return value === 0 ? value : +value;
67639           }
67640           value = value.replace(reTrim, '');
67641           var isBinary = reIsBinary.test(value);
67642           return (isBinary || reIsOctal.test(value))
67643             ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
67644             : (reIsBadHex.test(value) ? NAN : +value);
67645         }
67646
67647         /** Error message constants. */
67648         var FUNC_ERROR_TEXT = 'Expected a function';
67649
67650         /* Built-in method references for those with the same name as other `lodash` methods. */
67651         var nativeMax = Math.max,
67652             nativeMin = Math.min;
67653
67654         /**
67655          * Creates a debounced function that delays invoking `func` until after `wait`
67656          * milliseconds have elapsed since the last time the debounced function was
67657          * invoked. The debounced function comes with a `cancel` method to cancel
67658          * delayed `func` invocations and a `flush` method to immediately invoke them.
67659          * Provide `options` to indicate whether `func` should be invoked on the
67660          * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
67661          * with the last arguments provided to the debounced function. Subsequent
67662          * calls to the debounced function return the result of the last `func`
67663          * invocation.
67664          *
67665          * **Note:** If `leading` and `trailing` options are `true`, `func` is
67666          * invoked on the trailing edge of the timeout only if the debounced function
67667          * is invoked more than once during the `wait` timeout.
67668          *
67669          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
67670          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
67671          *
67672          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
67673          * for details over the differences between `_.debounce` and `_.throttle`.
67674          *
67675          * @static
67676          * @memberOf _
67677          * @since 0.1.0
67678          * @category Function
67679          * @param {Function} func The function to debounce.
67680          * @param {number} [wait=0] The number of milliseconds to delay.
67681          * @param {Object} [options={}] The options object.
67682          * @param {boolean} [options.leading=false]
67683          *  Specify invoking on the leading edge of the timeout.
67684          * @param {number} [options.maxWait]
67685          *  The maximum time `func` is allowed to be delayed before it's invoked.
67686          * @param {boolean} [options.trailing=true]
67687          *  Specify invoking on the trailing edge of the timeout.
67688          * @returns {Function} Returns the new debounced function.
67689          * @example
67690          *
67691          * // Avoid costly calculations while the window size is in flux.
67692          * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
67693          *
67694          * // Invoke `sendMail` when clicked, debouncing subsequent calls.
67695          * jQuery(element).on('click', _.debounce(sendMail, 300, {
67696          *   'leading': true,
67697          *   'trailing': false
67698          * }));
67699          *
67700          * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
67701          * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
67702          * var source = new EventSource('/stream');
67703          * jQuery(source).on('message', debounced);
67704          *
67705          * // Cancel the trailing debounced invocation.
67706          * jQuery(window).on('popstate', debounced.cancel);
67707          */
67708         function debounce(func, wait, options) {
67709           var lastArgs,
67710               lastThis,
67711               maxWait,
67712               result,
67713               timerId,
67714               lastCallTime,
67715               lastInvokeTime = 0,
67716               leading = false,
67717               maxing = false,
67718               trailing = true;
67719
67720           if (typeof func != 'function') {
67721             throw new TypeError(FUNC_ERROR_TEXT);
67722           }
67723           wait = toNumber(wait) || 0;
67724           if (isObject$2(options)) {
67725             leading = !!options.leading;
67726             maxing = 'maxWait' in options;
67727             maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
67728             trailing = 'trailing' in options ? !!options.trailing : trailing;
67729           }
67730
67731           function invokeFunc(time) {
67732             var args = lastArgs,
67733                 thisArg = lastThis;
67734
67735             lastArgs = lastThis = undefined;
67736             lastInvokeTime = time;
67737             result = func.apply(thisArg, args);
67738             return result;
67739           }
67740
67741           function leadingEdge(time) {
67742             // Reset any `maxWait` timer.
67743             lastInvokeTime = time;
67744             // Start the timer for the trailing edge.
67745             timerId = setTimeout(timerExpired, wait);
67746             // Invoke the leading edge.
67747             return leading ? invokeFunc(time) : result;
67748           }
67749
67750           function remainingWait(time) {
67751             var timeSinceLastCall = time - lastCallTime,
67752                 timeSinceLastInvoke = time - lastInvokeTime,
67753                 timeWaiting = wait - timeSinceLastCall;
67754
67755             return maxing
67756               ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
67757               : timeWaiting;
67758           }
67759
67760           function shouldInvoke(time) {
67761             var timeSinceLastCall = time - lastCallTime,
67762                 timeSinceLastInvoke = time - lastInvokeTime;
67763
67764             // Either this is the first call, activity has stopped and we're at the
67765             // trailing edge, the system time has gone backwards and we're treating
67766             // it as the trailing edge, or we've hit the `maxWait` limit.
67767             return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
67768               (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
67769           }
67770
67771           function timerExpired() {
67772             var time = now$1();
67773             if (shouldInvoke(time)) {
67774               return trailingEdge(time);
67775             }
67776             // Restart the timer.
67777             timerId = setTimeout(timerExpired, remainingWait(time));
67778           }
67779
67780           function trailingEdge(time) {
67781             timerId = undefined;
67782
67783             // Only invoke if we have `lastArgs` which means `func` has been
67784             // debounced at least once.
67785             if (trailing && lastArgs) {
67786               return invokeFunc(time);
67787             }
67788             lastArgs = lastThis = undefined;
67789             return result;
67790           }
67791
67792           function cancel() {
67793             if (timerId !== undefined) {
67794               clearTimeout(timerId);
67795             }
67796             lastInvokeTime = 0;
67797             lastArgs = lastCallTime = lastThis = timerId = undefined;
67798           }
67799
67800           function flush() {
67801             return timerId === undefined ? result : trailingEdge(now$1());
67802           }
67803
67804           function debounced() {
67805             var time = now$1(),
67806                 isInvoking = shouldInvoke(time);
67807
67808             lastArgs = arguments;
67809             lastThis = this;
67810             lastCallTime = time;
67811
67812             if (isInvoking) {
67813               if (timerId === undefined) {
67814                 return leadingEdge(lastCallTime);
67815               }
67816               if (maxing) {
67817                 // Handle invocations in a tight loop.
67818                 clearTimeout(timerId);
67819                 timerId = setTimeout(timerExpired, wait);
67820                 return invokeFunc(lastCallTime);
67821               }
67822             }
67823             if (timerId === undefined) {
67824               timerId = setTimeout(timerExpired, wait);
67825             }
67826             return result;
67827           }
67828           debounced.cancel = cancel;
67829           debounced.flush = flush;
67830           return debounced;
67831         }
67832
67833         /** Error message constants. */
67834         var FUNC_ERROR_TEXT$1 = 'Expected a function';
67835
67836         /**
67837          * Creates a throttled function that only invokes `func` at most once per
67838          * every `wait` milliseconds. The throttled function comes with a `cancel`
67839          * method to cancel delayed `func` invocations and a `flush` method to
67840          * immediately invoke them. Provide `options` to indicate whether `func`
67841          * should be invoked on the leading and/or trailing edge of the `wait`
67842          * timeout. The `func` is invoked with the last arguments provided to the
67843          * throttled function. Subsequent calls to the throttled function return the
67844          * result of the last `func` invocation.
67845          *
67846          * **Note:** If `leading` and `trailing` options are `true`, `func` is
67847          * invoked on the trailing edge of the timeout only if the throttled function
67848          * is invoked more than once during the `wait` timeout.
67849          *
67850          * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
67851          * until to the next tick, similar to `setTimeout` with a timeout of `0`.
67852          *
67853          * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
67854          * for details over the differences between `_.throttle` and `_.debounce`.
67855          *
67856          * @static
67857          * @memberOf _
67858          * @since 0.1.0
67859          * @category Function
67860          * @param {Function} func The function to throttle.
67861          * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
67862          * @param {Object} [options={}] The options object.
67863          * @param {boolean} [options.leading=true]
67864          *  Specify invoking on the leading edge of the timeout.
67865          * @param {boolean} [options.trailing=true]
67866          *  Specify invoking on the trailing edge of the timeout.
67867          * @returns {Function} Returns the new throttled function.
67868          * @example
67869          *
67870          * // Avoid excessively updating the position while scrolling.
67871          * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
67872          *
67873          * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
67874          * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
67875          * jQuery(element).on('click', throttled);
67876          *
67877          * // Cancel the trailing throttled invocation.
67878          * jQuery(window).on('popstate', throttled.cancel);
67879          */
67880         function throttle(func, wait, options) {
67881           var leading = true,
67882               trailing = true;
67883
67884           if (typeof func != 'function') {
67885             throw new TypeError(FUNC_ERROR_TEXT$1);
67886           }
67887           if (isObject$2(options)) {
67888             leading = 'leading' in options ? !!options.leading : leading;
67889             trailing = 'trailing' in options ? !!options.trailing : trailing;
67890           }
67891           return debounce(func, wait, {
67892             'leading': leading,
67893             'maxWait': wait,
67894             'trailing': trailing
67895           });
67896         }
67897
67898         var hashes = createCommonjsModule(function (module, exports) {
67899         /**
67900          * jshashes - https://github.com/h2non/jshashes
67901          * Released under the "New BSD" license
67902          *
67903          * Algorithms specification:
67904          *
67905          * MD5 - http://www.ietf.org/rfc/rfc1321.txt
67906          * RIPEMD-160 - http://homes.esat.kuleuven.be/~bosselae/ripemd160.html
67907          * SHA1   - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
67908          * SHA256 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
67909          * SHA512 - http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
67910          * HMAC - http://www.ietf.org/rfc/rfc2104.txt
67911          */
67912         (function() {
67913           var Hashes;
67914
67915           function utf8Encode(str) {
67916             var x, y, output = '',
67917               i = -1,
67918               l;
67919
67920             if (str && str.length) {
67921               l = str.length;
67922               while ((i += 1) < l) {
67923                 /* Decode utf-16 surrogate pairs */
67924                 x = str.charCodeAt(i);
67925                 y = i + 1 < l ? str.charCodeAt(i + 1) : 0;
67926                 if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
67927                   x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
67928                   i += 1;
67929                 }
67930                 /* Encode output as utf-8 */
67931                 if (x <= 0x7F) {
67932                   output += String.fromCharCode(x);
67933                 } else if (x <= 0x7FF) {
67934                   output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F),
67935                     0x80 | (x & 0x3F));
67936                 } else if (x <= 0xFFFF) {
67937                   output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
67938                     0x80 | ((x >>> 6) & 0x3F),
67939                     0x80 | (x & 0x3F));
67940                 } else if (x <= 0x1FFFFF) {
67941                   output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
67942                     0x80 | ((x >>> 12) & 0x3F),
67943                     0x80 | ((x >>> 6) & 0x3F),
67944                     0x80 | (x & 0x3F));
67945                 }
67946               }
67947             }
67948             return output;
67949           }
67950
67951           function utf8Decode(str) {
67952             var i, ac, c1, c2, c3, arr = [],
67953               l;
67954             i = ac = c1 = c2 = c3 = 0;
67955
67956             if (str && str.length) {
67957               l = str.length;
67958               str += '';
67959
67960               while (i < l) {
67961                 c1 = str.charCodeAt(i);
67962                 ac += 1;
67963                 if (c1 < 128) {
67964                   arr[ac] = String.fromCharCode(c1);
67965                   i += 1;
67966                 } else if (c1 > 191 && c1 < 224) {
67967                   c2 = str.charCodeAt(i + 1);
67968                   arr[ac] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
67969                   i += 2;
67970                 } else {
67971                   c2 = str.charCodeAt(i + 1);
67972                   c3 = str.charCodeAt(i + 2);
67973                   arr[ac] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
67974                   i += 3;
67975                 }
67976               }
67977             }
67978             return arr.join('');
67979           }
67980
67981           /**
67982            * Add integers, wrapping at 2^32. This uses 16-bit operations internally
67983            * to work around bugs in some JS interpreters.
67984            */
67985
67986           function safe_add(x, y) {
67987             var lsw = (x & 0xFFFF) + (y & 0xFFFF),
67988               msw = (x >> 16) + (y >> 16) + (lsw >> 16);
67989             return (msw << 16) | (lsw & 0xFFFF);
67990           }
67991
67992           /**
67993            * Bitwise rotate a 32-bit number to the left.
67994            */
67995
67996           function bit_rol(num, cnt) {
67997             return (num << cnt) | (num >>> (32 - cnt));
67998           }
67999
68000           /**
68001            * Convert a raw string to a hex string
68002            */
68003
68004           function rstr2hex(input, hexcase) {
68005             var hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef',
68006               output = '',
68007               x, i = 0,
68008               l = input.length;
68009             for (; i < l; i += 1) {
68010               x = input.charCodeAt(i);
68011               output += hex_tab.charAt((x >>> 4) & 0x0F) + hex_tab.charAt(x & 0x0F);
68012             }
68013             return output;
68014           }
68015
68016           /**
68017            * Convert an array of big-endian words to a string
68018            */
68019
68020           function binb2rstr(input) {
68021             var i, l = input.length * 32,
68022               output = '';
68023             for (i = 0; i < l; i += 8) {
68024               output += String.fromCharCode((input[i >> 5] >>> (24 - i % 32)) & 0xFF);
68025             }
68026             return output;
68027           }
68028
68029           /**
68030            * Convert an array of little-endian words to a string
68031            */
68032
68033           function binl2rstr(input) {
68034             var i, l = input.length * 32,
68035               output = '';
68036             for (i = 0; i < l; i += 8) {
68037               output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
68038             }
68039             return output;
68040           }
68041
68042           /**
68043            * Convert a raw string to an array of little-endian words
68044            * Characters >255 have their high-byte silently ignored.
68045            */
68046
68047           function rstr2binl(input) {
68048             var i, l = input.length * 8,
68049               output = Array(input.length >> 2),
68050               lo = output.length;
68051             for (i = 0; i < lo; i += 1) {
68052               output[i] = 0;
68053             }
68054             for (i = 0; i < l; i += 8) {
68055               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
68056             }
68057             return output;
68058           }
68059
68060           /**
68061            * Convert a raw string to an array of big-endian words
68062            * Characters >255 have their high-byte silently ignored.
68063            */
68064
68065           function rstr2binb(input) {
68066             var i, l = input.length * 8,
68067               output = Array(input.length >> 2),
68068               lo = output.length;
68069             for (i = 0; i < lo; i += 1) {
68070               output[i] = 0;
68071             }
68072             for (i = 0; i < l; i += 8) {
68073               output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
68074             }
68075             return output;
68076           }
68077
68078           /**
68079            * Convert a raw string to an arbitrary string encoding
68080            */
68081
68082           function rstr2any(input, encoding) {
68083             var divisor = encoding.length,
68084               remainders = Array(),
68085               i, q, x, ld, quotient, dividend, output, full_length;
68086
68087             /* Convert to an array of 16-bit big-endian values, forming the dividend */
68088             dividend = Array(Math.ceil(input.length / 2));
68089             ld = dividend.length;
68090             for (i = 0; i < ld; i += 1) {
68091               dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
68092             }
68093
68094             /**
68095              * Repeatedly perform a long division. The binary array forms the dividend,
68096              * the length of the encoding is the divisor. Once computed, the quotient
68097              * forms the dividend for the next step. We stop when the dividend is zerHashes.
68098              * All remainders are stored for later use.
68099              */
68100             while (dividend.length > 0) {
68101               quotient = Array();
68102               x = 0;
68103               for (i = 0; i < dividend.length; i += 1) {
68104                 x = (x << 16) + dividend[i];
68105                 q = Math.floor(x / divisor);
68106                 x -= q * divisor;
68107                 if (quotient.length > 0 || q > 0) {
68108                   quotient[quotient.length] = q;
68109                 }
68110               }
68111               remainders[remainders.length] = x;
68112               dividend = quotient;
68113             }
68114
68115             /* Convert the remainders to the output string */
68116             output = '';
68117             for (i = remainders.length - 1; i >= 0; i--) {
68118               output += encoding.charAt(remainders[i]);
68119             }
68120
68121             /* Append leading zero equivalents */
68122             full_length = Math.ceil(input.length * 8 / (Math.log(encoding.length) / Math.log(2)));
68123             for (i = output.length; i < full_length; i += 1) {
68124               output = encoding[0] + output;
68125             }
68126             return output;
68127           }
68128
68129           /**
68130            * Convert a raw string to a base-64 string
68131            */
68132
68133           function rstr2b64(input, b64pad) {
68134             var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
68135               output = '',
68136               len = input.length,
68137               i, j, triplet;
68138             b64pad = b64pad || '=';
68139             for (i = 0; i < len; i += 3) {
68140               triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
68141               for (j = 0; j < 4; j += 1) {
68142                 if (i * 8 + j * 6 > input.length * 8) {
68143                   output += b64pad;
68144                 } else {
68145                   output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
68146                 }
68147               }
68148             }
68149             return output;
68150           }
68151
68152           Hashes = {
68153             /**
68154              * @property {String} version
68155              * @readonly
68156              */
68157             VERSION: '1.0.6',
68158             /**
68159              * @member Hashes
68160              * @class Base64
68161              * @constructor
68162              */
68163             Base64: function() {
68164               // private properties
68165               var tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
68166                 pad = '=', // default pad according with the RFC standard
68167                 utf8 = true; // by default enable UTF-8 support encoding
68168
68169               // public method for encoding
68170               this.encode = function(input) {
68171                 var i, j, triplet,
68172                   output = '',
68173                   len = input.length;
68174
68175                 pad = pad || '=';
68176                 input = (utf8) ? utf8Encode(input) : input;
68177
68178                 for (i = 0; i < len; i += 3) {
68179                   triplet = (input.charCodeAt(i) << 16) | (i + 1 < len ? input.charCodeAt(i + 1) << 8 : 0) | (i + 2 < len ? input.charCodeAt(i + 2) : 0);
68180                   for (j = 0; j < 4; j += 1) {
68181                     if (i * 8 + j * 6 > len * 8) {
68182                       output += pad;
68183                     } else {
68184                       output += tab.charAt((triplet >>> 6 * (3 - j)) & 0x3F);
68185                     }
68186                   }
68187                 }
68188                 return output;
68189               };
68190
68191               // public method for decoding
68192               this.decode = function(input) {
68193                 // var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
68194                 var i, o1, o2, o3, h1, h2, h3, h4, bits, ac,
68195                   dec = '',
68196                   arr = [];
68197                 if (!input) {
68198                   return input;
68199                 }
68200
68201                 i = ac = 0;
68202                 input = input.replace(new RegExp('\\' + pad, 'gi'), ''); // use '='
68203                 //input += '';
68204
68205                 do { // unpack four hexets into three octets using index points in b64
68206                   h1 = tab.indexOf(input.charAt(i += 1));
68207                   h2 = tab.indexOf(input.charAt(i += 1));
68208                   h3 = tab.indexOf(input.charAt(i += 1));
68209                   h4 = tab.indexOf(input.charAt(i += 1));
68210
68211                   bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
68212
68213                   o1 = bits >> 16 & 0xff;
68214                   o2 = bits >> 8 & 0xff;
68215                   o3 = bits & 0xff;
68216                   ac += 1;
68217
68218                   if (h3 === 64) {
68219                     arr[ac] = String.fromCharCode(o1);
68220                   } else if (h4 === 64) {
68221                     arr[ac] = String.fromCharCode(o1, o2);
68222                   } else {
68223                     arr[ac] = String.fromCharCode(o1, o2, o3);
68224                   }
68225                 } while (i < input.length);
68226
68227                 dec = arr.join('');
68228                 dec = (utf8) ? utf8Decode(dec) : dec;
68229
68230                 return dec;
68231               };
68232
68233               // set custom pad string
68234               this.setPad = function(str) {
68235                 pad = str || pad;
68236                 return this;
68237               };
68238               // set custom tab string characters
68239               this.setTab = function(str) {
68240                 tab = str || tab;
68241                 return this;
68242               };
68243               this.setUTF8 = function(bool) {
68244                 if (typeof bool === 'boolean') {
68245                   utf8 = bool;
68246                 }
68247                 return this;
68248               };
68249             },
68250
68251             /**
68252              * CRC-32 calculation
68253              * @member Hashes
68254              * @method CRC32
68255              * @static
68256              * @param {String} str Input String
68257              * @return {String}
68258              */
68259             CRC32: function(str) {
68260               var crc = 0,
68261                 x = 0,
68262                 y = 0,
68263                 table, i, iTop;
68264               str = utf8Encode(str);
68265
68266               table = [
68267                 '00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 0EDB8832 ',
68268                 '79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 6AB020F2 F3B97148 ',
68269                 '84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 FD62F97A 8A65C9EC 14015C4F ',
68270                 '63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 A2677172 3C03E4D1 4B04D447 D20D85FD ',
68271                 'A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC ',
68272                 '51DE003A C8D75180 BFD06116 21B4F4B5 56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 ',
68273                 'B10BE924 2F6F7C87 58684C11 C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 ',
68274                 '06B6B51F 9FBFE4A5 E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 ',
68275                 'E6635C01 6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 ',
68276                 '12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE A3BC0074 ',
68277                 'D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 DA60B8D0 44042D73 ',
68278                 '33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 5768B525 206F85B3 B966D409 ',
68279                 'CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 2EB40D81 B7BD5C3B C0BA6CAD EDB88320 ',
68280                 '9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF 04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E ',
68281                 '7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D ',
68282                 '806567CB 196C3671 6E6B06E7 FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 ',
68283                 '60B08ED5 D6D6A3E8 A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA ',
68284                 'AF0A1B4C 36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 ',
68285                 '5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 C2D7FFA7 ',
68286                 'B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 EB0E363F 72076785 ',
68287                 '05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D 7CDCEFB7 0BDBDF21 86D3D2D4 ',
68288                 'F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 18B74777 88085AE6 FF0F6A70 66063BCA ',
68289                 '11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 ',
68290                 'D06016F7 4969474D 3E6E77DB AED16A4A D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F ',
68291                 '30B5FFE9 BDBDF21C CABAC28A 53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E ',
68292                 'C4614AB8 5D681B02 2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D'
68293               ].join('');
68294
68295               crc = crc ^ (-1);
68296               for (i = 0, iTop = str.length; i < iTop; i += 1) {
68297                 y = (crc ^ str.charCodeAt(i)) & 0xFF;
68298                 x = '0x' + table.substr(y * 9, 8);
68299                 crc = (crc >>> 8) ^ x;
68300               }
68301               // always return a positive number (that's what >>> 0 does)
68302               return (crc ^ (-1)) >>> 0;
68303             },
68304             /**
68305              * @member Hashes
68306              * @class MD5
68307              * @constructor
68308              * @param {Object} [config]
68309              *
68310              * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
68311              * Digest Algorithm, as defined in RFC 1321.
68312              * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
68313              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
68314              * See <http://pajhome.org.uk/crypt/md5> for more infHashes.
68315              */
68316             MD5: function(options) {
68317               /**
68318                * Private config properties. You may need to tweak these to be compatible with
68319                * the server-side, but the defaults work in most cases.
68320                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
68321                */
68322               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
68323                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
68324                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
68325
68326               // privileged (public) methods
68327               this.hex = function(s) {
68328                 return rstr2hex(rstr(s), hexcase);
68329               };
68330               this.b64 = function(s) {
68331                 return rstr2b64(rstr(s), b64pad);
68332               };
68333               this.any = function(s, e) {
68334                 return rstr2any(rstr(s), e);
68335               };
68336               this.raw = function(s) {
68337                 return rstr(s);
68338               };
68339               this.hex_hmac = function(k, d) {
68340                 return rstr2hex(rstr_hmac(k, d), hexcase);
68341               };
68342               this.b64_hmac = function(k, d) {
68343                 return rstr2b64(rstr_hmac(k, d), b64pad);
68344               };
68345               this.any_hmac = function(k, d, e) {
68346                 return rstr2any(rstr_hmac(k, d), e);
68347               };
68348               /**
68349                * Perform a simple self-test to see if the VM is working
68350                * @return {String} Hexadecimal hash sample
68351                */
68352               this.vm_test = function() {
68353                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
68354               };
68355               /**
68356                * Enable/disable uppercase hexadecimal returned string
68357                * @param {Boolean}
68358                * @return {Object} this
68359                */
68360               this.setUpperCase = function(a) {
68361                 if (typeof a === 'boolean') {
68362                   hexcase = a;
68363                 }
68364                 return this;
68365               };
68366               /**
68367                * Defines a base64 pad string
68368                * @param {String} Pad
68369                * @return {Object} this
68370                */
68371               this.setPad = function(a) {
68372                 b64pad = a || b64pad;
68373                 return this;
68374               };
68375               /**
68376                * Defines a base64 pad string
68377                * @param {Boolean}
68378                * @return {Object} [this]
68379                */
68380               this.setUTF8 = function(a) {
68381                 if (typeof a === 'boolean') {
68382                   utf8 = a;
68383                 }
68384                 return this;
68385               };
68386
68387               // private methods
68388
68389               /**
68390                * Calculate the MD5 of a raw string
68391                */
68392
68393               function rstr(s) {
68394                 s = (utf8) ? utf8Encode(s) : s;
68395                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
68396               }
68397
68398               /**
68399                * Calculate the HMAC-MD5, of a key and some data (raw strings)
68400                */
68401
68402               function rstr_hmac(key, data) {
68403                 var bkey, ipad, opad, hash, i;
68404
68405                 key = (utf8) ? utf8Encode(key) : key;
68406                 data = (utf8) ? utf8Encode(data) : data;
68407                 bkey = rstr2binl(key);
68408                 if (bkey.length > 16) {
68409                   bkey = binl(bkey, key.length * 8);
68410                 }
68411
68412                 ipad = Array(16), opad = Array(16);
68413                 for (i = 0; i < 16; i += 1) {
68414                   ipad[i] = bkey[i] ^ 0x36363636;
68415                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
68416                 }
68417                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
68418                 return binl2rstr(binl(opad.concat(hash), 512 + 128));
68419               }
68420
68421               /**
68422                * Calculate the MD5 of an array of little-endian words, and a bit length.
68423                */
68424
68425               function binl(x, len) {
68426                 var i, olda, oldb, oldc, oldd,
68427                   a = 1732584193,
68428                   b = -271733879,
68429                   c = -1732584194,
68430                   d = 271733878;
68431
68432                 /* append padding */
68433                 x[len >> 5] |= 0x80 << ((len) % 32);
68434                 x[(((len + 64) >>> 9) << 4) + 14] = len;
68435
68436                 for (i = 0; i < x.length; i += 16) {
68437                   olda = a;
68438                   oldb = b;
68439                   oldc = c;
68440                   oldd = d;
68441
68442                   a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
68443                   d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
68444                   c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
68445                   b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
68446                   a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
68447                   d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
68448                   c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
68449                   b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
68450                   a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
68451                   d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
68452                   c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
68453                   b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
68454                   a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
68455                   d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
68456                   c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
68457                   b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
68458
68459                   a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
68460                   d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
68461                   c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
68462                   b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
68463                   a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
68464                   d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
68465                   c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
68466                   b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
68467                   a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
68468                   d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
68469                   c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
68470                   b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
68471                   a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
68472                   d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
68473                   c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
68474                   b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
68475
68476                   a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
68477                   d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
68478                   c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
68479                   b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
68480                   a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
68481                   d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
68482                   c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
68483                   b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
68484                   a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
68485                   d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
68486                   c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
68487                   b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
68488                   a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
68489                   d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
68490                   c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
68491                   b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
68492
68493                   a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
68494                   d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
68495                   c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
68496                   b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
68497                   a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
68498                   d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
68499                   c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
68500                   b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
68501                   a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
68502                   d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
68503                   c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
68504                   b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
68505                   a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
68506                   d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
68507                   c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
68508                   b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
68509
68510                   a = safe_add(a, olda);
68511                   b = safe_add(b, oldb);
68512                   c = safe_add(c, oldc);
68513                   d = safe_add(d, oldd);
68514                 }
68515                 return Array(a, b, c, d);
68516               }
68517
68518               /**
68519                * These functions implement the four basic operations the algorithm uses.
68520                */
68521
68522               function md5_cmn(q, a, b, x, s, t) {
68523                 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
68524               }
68525
68526               function md5_ff(a, b, c, d, x, s, t) {
68527                 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
68528               }
68529
68530               function md5_gg(a, b, c, d, x, s, t) {
68531                 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
68532               }
68533
68534               function md5_hh(a, b, c, d, x, s, t) {
68535                 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
68536               }
68537
68538               function md5_ii(a, b, c, d, x, s, t) {
68539                 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
68540               }
68541             },
68542             /**
68543              * @member Hashes
68544              * @class Hashes.SHA1
68545              * @param {Object} [config]
68546              * @constructor
68547              *
68548              * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined in FIPS 180-1
68549              * Version 2.2 Copyright Paul Johnston 2000 - 2009.
68550              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
68551              * See http://pajhome.org.uk/crypt/md5 for details.
68552              */
68553             SHA1: function(options) {
68554               /**
68555                * Private config properties. You may need to tweak these to be compatible with
68556                * the server-side, but the defaults work in most cases.
68557                * See {@link Hashes.MD5#method-setUpperCase} and {@link Hashes.SHA1#method-setUpperCase}
68558                */
68559               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase
68560                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=', // base-64 pad character. Defaults to '=' for strict RFC compliance
68561                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true; // enable/disable utf8 encoding
68562
68563               // public methods
68564               this.hex = function(s) {
68565                 return rstr2hex(rstr(s), hexcase);
68566               };
68567               this.b64 = function(s) {
68568                 return rstr2b64(rstr(s), b64pad);
68569               };
68570               this.any = function(s, e) {
68571                 return rstr2any(rstr(s), e);
68572               };
68573               this.raw = function(s) {
68574                 return rstr(s);
68575               };
68576               this.hex_hmac = function(k, d) {
68577                 return rstr2hex(rstr_hmac(k, d));
68578               };
68579               this.b64_hmac = function(k, d) {
68580                 return rstr2b64(rstr_hmac(k, d), b64pad);
68581               };
68582               this.any_hmac = function(k, d, e) {
68583                 return rstr2any(rstr_hmac(k, d), e);
68584               };
68585               /**
68586                * Perform a simple self-test to see if the VM is working
68587                * @return {String} Hexadecimal hash sample
68588                * @public
68589                */
68590               this.vm_test = function() {
68591                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
68592               };
68593               /**
68594                * @description Enable/disable uppercase hexadecimal returned string
68595                * @param {boolean}
68596                * @return {Object} this
68597                * @public
68598                */
68599               this.setUpperCase = function(a) {
68600                 if (typeof a === 'boolean') {
68601                   hexcase = a;
68602                 }
68603                 return this;
68604               };
68605               /**
68606                * @description Defines a base64 pad string
68607                * @param {string} Pad
68608                * @return {Object} this
68609                * @public
68610                */
68611               this.setPad = function(a) {
68612                 b64pad = a || b64pad;
68613                 return this;
68614               };
68615               /**
68616                * @description Defines a base64 pad string
68617                * @param {boolean}
68618                * @return {Object} this
68619                * @public
68620                */
68621               this.setUTF8 = function(a) {
68622                 if (typeof a === 'boolean') {
68623                   utf8 = a;
68624                 }
68625                 return this;
68626               };
68627
68628               // private methods
68629
68630               /**
68631                * Calculate the SHA-512 of a raw string
68632                */
68633
68634               function rstr(s) {
68635                 s = (utf8) ? utf8Encode(s) : s;
68636                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
68637               }
68638
68639               /**
68640                * Calculate the HMAC-SHA1 of a key and some data (raw strings)
68641                */
68642
68643               function rstr_hmac(key, data) {
68644                 var bkey, ipad, opad, i, hash;
68645                 key = (utf8) ? utf8Encode(key) : key;
68646                 data = (utf8) ? utf8Encode(data) : data;
68647                 bkey = rstr2binb(key);
68648
68649                 if (bkey.length > 16) {
68650                   bkey = binb(bkey, key.length * 8);
68651                 }
68652                 ipad = Array(16), opad = Array(16);
68653                 for (i = 0; i < 16; i += 1) {
68654                   ipad[i] = bkey[i] ^ 0x36363636;
68655                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
68656                 }
68657                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
68658                 return binb2rstr(binb(opad.concat(hash), 512 + 160));
68659               }
68660
68661               /**
68662                * Calculate the SHA-1 of an array of big-endian words, and a bit length
68663                */
68664
68665               function binb(x, len) {
68666                 var i, j, t, olda, oldb, oldc, oldd, olde,
68667                   w = Array(80),
68668                   a = 1732584193,
68669                   b = -271733879,
68670                   c = -1732584194,
68671                   d = 271733878,
68672                   e = -1009589776;
68673
68674                 /* append padding */
68675                 x[len >> 5] |= 0x80 << (24 - len % 32);
68676                 x[((len + 64 >> 9) << 4) + 15] = len;
68677
68678                 for (i = 0; i < x.length; i += 16) {
68679                   olda = a;
68680                   oldb = b;
68681                   oldc = c;
68682                   oldd = d;
68683                   olde = e;
68684
68685                   for (j = 0; j < 80; j += 1) {
68686                     if (j < 16) {
68687                       w[j] = x[i + j];
68688                     } else {
68689                       w[j] = bit_rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1);
68690                     }
68691                     t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
68692                       safe_add(safe_add(e, w[j]), sha1_kt(j)));
68693                     e = d;
68694                     d = c;
68695                     c = bit_rol(b, 30);
68696                     b = a;
68697                     a = t;
68698                   }
68699
68700                   a = safe_add(a, olda);
68701                   b = safe_add(b, oldb);
68702                   c = safe_add(c, oldc);
68703                   d = safe_add(d, oldd);
68704                   e = safe_add(e, olde);
68705                 }
68706                 return Array(a, b, c, d, e);
68707               }
68708
68709               /**
68710                * Perform the appropriate triplet combination function for the current
68711                * iteration
68712                */
68713
68714               function sha1_ft(t, b, c, d) {
68715                 if (t < 20) {
68716                   return (b & c) | ((~b) & d);
68717                 }
68718                 if (t < 40) {
68719                   return b ^ c ^ d;
68720                 }
68721                 if (t < 60) {
68722                   return (b & c) | (b & d) | (c & d);
68723                 }
68724                 return b ^ c ^ d;
68725               }
68726
68727               /**
68728                * Determine the appropriate additive constant for the current iteration
68729                */
68730
68731               function sha1_kt(t) {
68732                 return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
68733                   (t < 60) ? -1894007588 : -899497514;
68734               }
68735             },
68736             /**
68737              * @class Hashes.SHA256
68738              * @param {config}
68739              *
68740              * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined in FIPS 180-2
68741              * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
68742              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
68743              * See http://pajhome.org.uk/crypt/md5 for details.
68744              * Also http://anmar.eu.org/projects/jssha2/
68745              */
68746             SHA256: function(options) {
68747               /**
68748                * Private properties configuration variables. You may need to tweak these to be compatible with
68749                * the server-side, but the defaults work in most cases.
68750                * @see this.setUpperCase() method
68751                * @see this.setPad() method
68752                */
68753               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false, // hexadecimal output case format. false - lowercase; true - uppercase  */
68754                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
68755                 /* base-64 pad character. Default '=' for strict RFC compliance   */
68756                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
68757                 /* enable/disable utf8 encoding */
68758                 sha256_K;
68759
68760               /* privileged (public) methods */
68761               this.hex = function(s) {
68762                 return rstr2hex(rstr(s, utf8));
68763               };
68764               this.b64 = function(s) {
68765                 return rstr2b64(rstr(s, utf8), b64pad);
68766               };
68767               this.any = function(s, e) {
68768                 return rstr2any(rstr(s, utf8), e);
68769               };
68770               this.raw = function(s) {
68771                 return rstr(s, utf8);
68772               };
68773               this.hex_hmac = function(k, d) {
68774                 return rstr2hex(rstr_hmac(k, d));
68775               };
68776               this.b64_hmac = function(k, d) {
68777                 return rstr2b64(rstr_hmac(k, d), b64pad);
68778               };
68779               this.any_hmac = function(k, d, e) {
68780                 return rstr2any(rstr_hmac(k, d), e);
68781               };
68782               /**
68783                * Perform a simple self-test to see if the VM is working
68784                * @return {String} Hexadecimal hash sample
68785                * @public
68786                */
68787               this.vm_test = function() {
68788                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
68789               };
68790               /**
68791                * Enable/disable uppercase hexadecimal returned string
68792                * @param {boolean}
68793                * @return {Object} this
68794                * @public
68795                */
68796               this.setUpperCase = function(a) {
68797                 if (typeof a === 'boolean') {
68798                   hexcase = a;
68799                 }
68800                 return this;
68801               };
68802               /**
68803                * @description Defines a base64 pad string
68804                * @param {string} Pad
68805                * @return {Object} this
68806                * @public
68807                */
68808               this.setPad = function(a) {
68809                 b64pad = a || b64pad;
68810                 return this;
68811               };
68812               /**
68813                * Defines a base64 pad string
68814                * @param {boolean}
68815                * @return {Object} this
68816                * @public
68817                */
68818               this.setUTF8 = function(a) {
68819                 if (typeof a === 'boolean') {
68820                   utf8 = a;
68821                 }
68822                 return this;
68823               };
68824
68825               // private methods
68826
68827               /**
68828                * Calculate the SHA-512 of a raw string
68829                */
68830
68831               function rstr(s, utf8) {
68832                 s = (utf8) ? utf8Encode(s) : s;
68833                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
68834               }
68835
68836               /**
68837                * Calculate the HMAC-sha256 of a key and some data (raw strings)
68838                */
68839
68840               function rstr_hmac(key, data) {
68841                 key = (utf8) ? utf8Encode(key) : key;
68842                 data = (utf8) ? utf8Encode(data) : data;
68843                 var hash, i = 0,
68844                   bkey = rstr2binb(key),
68845                   ipad = Array(16),
68846                   opad = Array(16);
68847
68848                 if (bkey.length > 16) {
68849                   bkey = binb(bkey, key.length * 8);
68850                 }
68851
68852                 for (; i < 16; i += 1) {
68853                   ipad[i] = bkey[i] ^ 0x36363636;
68854                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
68855                 }
68856
68857                 hash = binb(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
68858                 return binb2rstr(binb(opad.concat(hash), 512 + 256));
68859               }
68860
68861               /*
68862                * Main sha256 function, with its support functions
68863                */
68864
68865               function sha256_S(X, n) {
68866                 return (X >>> n) | (X << (32 - n));
68867               }
68868
68869               function sha256_R(X, n) {
68870                 return (X >>> n);
68871               }
68872
68873               function sha256_Ch(x, y, z) {
68874                 return ((x & y) ^ ((~x) & z));
68875               }
68876
68877               function sha256_Maj(x, y, z) {
68878                 return ((x & y) ^ (x & z) ^ (y & z));
68879               }
68880
68881               function sha256_Sigma0256(x) {
68882                 return (sha256_S(x, 2) ^ sha256_S(x, 13) ^ sha256_S(x, 22));
68883               }
68884
68885               function sha256_Sigma1256(x) {
68886                 return (sha256_S(x, 6) ^ sha256_S(x, 11) ^ sha256_S(x, 25));
68887               }
68888
68889               function sha256_Gamma0256(x) {
68890                 return (sha256_S(x, 7) ^ sha256_S(x, 18) ^ sha256_R(x, 3));
68891               }
68892
68893               function sha256_Gamma1256(x) {
68894                 return (sha256_S(x, 17) ^ sha256_S(x, 19) ^ sha256_R(x, 10));
68895               }
68896
68897               sha256_K = [
68898                 1116352408, 1899447441, -1245643825, -373957723, 961987163, 1508970993, -1841331548, -1424204075, -670586216, 310598401, 607225278, 1426881987,
68899                 1925078388, -2132889090, -1680079193, -1046744716, -459576895, -272742522,
68900                 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, -1740746414, -1473132947, -1341970488, -1084653625, -958395405, -710438585,
68901                 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291,
68902                 1695183700, 1986661051, -2117940946, -1838011259, -1564481375, -1474664885, -1035236496, -949202525, -778901479, -694614492, -200395387, 275423344,
68903                 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218,
68904                 1537002063, 1747873779, 1955562222, 2024104815, -2067236844, -1933114872, -1866530822, -1538233109, -1090935817, -965641998
68905               ];
68906
68907               function binb(m, l) {
68908                 var HASH = [1779033703, -1150833019, 1013904242, -1521486534,
68909                   1359893119, -1694144372, 528734635, 1541459225
68910                 ];
68911                 var W = new Array(64);
68912                 var a, b, c, d, e, f, g, h;
68913                 var i, j, T1, T2;
68914
68915                 /* append padding */
68916                 m[l >> 5] |= 0x80 << (24 - l % 32);
68917                 m[((l + 64 >> 9) << 4) + 15] = l;
68918
68919                 for (i = 0; i < m.length; i += 16) {
68920                   a = HASH[0];
68921                   b = HASH[1];
68922                   c = HASH[2];
68923                   d = HASH[3];
68924                   e = HASH[4];
68925                   f = HASH[5];
68926                   g = HASH[6];
68927                   h = HASH[7];
68928
68929                   for (j = 0; j < 64; j += 1) {
68930                     if (j < 16) {
68931                       W[j] = m[j + i];
68932                     } else {
68933                       W[j] = safe_add(safe_add(safe_add(sha256_Gamma1256(W[j - 2]), W[j - 7]),
68934                         sha256_Gamma0256(W[j - 15])), W[j - 16]);
68935                     }
68936
68937                     T1 = safe_add(safe_add(safe_add(safe_add(h, sha256_Sigma1256(e)), sha256_Ch(e, f, g)),
68938                       sha256_K[j]), W[j]);
68939                     T2 = safe_add(sha256_Sigma0256(a), sha256_Maj(a, b, c));
68940                     h = g;
68941                     g = f;
68942                     f = e;
68943                     e = safe_add(d, T1);
68944                     d = c;
68945                     c = b;
68946                     b = a;
68947                     a = safe_add(T1, T2);
68948                   }
68949
68950                   HASH[0] = safe_add(a, HASH[0]);
68951                   HASH[1] = safe_add(b, HASH[1]);
68952                   HASH[2] = safe_add(c, HASH[2]);
68953                   HASH[3] = safe_add(d, HASH[3]);
68954                   HASH[4] = safe_add(e, HASH[4]);
68955                   HASH[5] = safe_add(f, HASH[5]);
68956                   HASH[6] = safe_add(g, HASH[6]);
68957                   HASH[7] = safe_add(h, HASH[7]);
68958                 }
68959                 return HASH;
68960               }
68961
68962             },
68963
68964             /**
68965              * @class Hashes.SHA512
68966              * @param {config}
68967              *
68968              * A JavaScript implementation of the Secure Hash Algorithm, SHA-512, as defined in FIPS 180-2
68969              * Version 2.2 Copyright Anonymous Contributor, Paul Johnston 2000 - 2009.
68970              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
68971              * See http://pajhome.org.uk/crypt/md5 for details.
68972              */
68973             SHA512: function(options) {
68974               /**
68975                * Private properties configuration variables. You may need to tweak these to be compatible with
68976                * the server-side, but the defaults work in most cases.
68977                * @see this.setUpperCase() method
68978                * @see this.setPad() method
68979                */
68980               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
68981                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
68982                 b64pad = (options && typeof options.pad === 'string') ? options.pad : '=',
68983                 /* base-64 pad character. Default '=' for strict RFC compliance   */
68984                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
68985                 /* enable/disable utf8 encoding */
68986                 sha512_k;
68987
68988               /* privileged (public) methods */
68989               this.hex = function(s) {
68990                 return rstr2hex(rstr(s));
68991               };
68992               this.b64 = function(s) {
68993                 return rstr2b64(rstr(s), b64pad);
68994               };
68995               this.any = function(s, e) {
68996                 return rstr2any(rstr(s), e);
68997               };
68998               this.raw = function(s) {
68999                 return rstr(s);
69000               };
69001               this.hex_hmac = function(k, d) {
69002                 return rstr2hex(rstr_hmac(k, d));
69003               };
69004               this.b64_hmac = function(k, d) {
69005                 return rstr2b64(rstr_hmac(k, d), b64pad);
69006               };
69007               this.any_hmac = function(k, d, e) {
69008                 return rstr2any(rstr_hmac(k, d), e);
69009               };
69010               /**
69011                * Perform a simple self-test to see if the VM is working
69012                * @return {String} Hexadecimal hash sample
69013                * @public
69014                */
69015               this.vm_test = function() {
69016                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
69017               };
69018               /**
69019                * @description Enable/disable uppercase hexadecimal returned string
69020                * @param {boolean}
69021                * @return {Object} this
69022                * @public
69023                */
69024               this.setUpperCase = function(a) {
69025                 if (typeof a === 'boolean') {
69026                   hexcase = a;
69027                 }
69028                 return this;
69029               };
69030               /**
69031                * @description Defines a base64 pad string
69032                * @param {string} Pad
69033                * @return {Object} this
69034                * @public
69035                */
69036               this.setPad = function(a) {
69037                 b64pad = a || b64pad;
69038                 return this;
69039               };
69040               /**
69041                * @description Defines a base64 pad string
69042                * @param {boolean}
69043                * @return {Object} this
69044                * @public
69045                */
69046               this.setUTF8 = function(a) {
69047                 if (typeof a === 'boolean') {
69048                   utf8 = a;
69049                 }
69050                 return this;
69051               };
69052
69053               /* private methods */
69054
69055               /**
69056                * Calculate the SHA-512 of a raw string
69057                */
69058
69059               function rstr(s) {
69060                 s = (utf8) ? utf8Encode(s) : s;
69061                 return binb2rstr(binb(rstr2binb(s), s.length * 8));
69062               }
69063               /*
69064                * Calculate the HMAC-SHA-512 of a key and some data (raw strings)
69065                */
69066
69067               function rstr_hmac(key, data) {
69068                 key = (utf8) ? utf8Encode(key) : key;
69069                 data = (utf8) ? utf8Encode(data) : data;
69070
69071                 var hash, i = 0,
69072                   bkey = rstr2binb(key),
69073                   ipad = Array(32),
69074                   opad = Array(32);
69075
69076                 if (bkey.length > 32) {
69077                   bkey = binb(bkey, key.length * 8);
69078                 }
69079
69080                 for (; i < 32; i += 1) {
69081                   ipad[i] = bkey[i] ^ 0x36363636;
69082                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
69083                 }
69084
69085                 hash = binb(ipad.concat(rstr2binb(data)), 1024 + data.length * 8);
69086                 return binb2rstr(binb(opad.concat(hash), 1024 + 512));
69087               }
69088
69089               /**
69090                * Calculate the SHA-512 of an array of big-endian dwords, and a bit length
69091                */
69092
69093               function binb(x, len) {
69094                 var j, i, l,
69095                   W = new Array(80),
69096                   hash = new Array(16),
69097                   //Initial hash values
69098                   H = [
69099                     new int64(0x6a09e667, -205731576),
69100                     new int64(-1150833019, -2067093701),
69101                     new int64(0x3c6ef372, -23791573),
69102                     new int64(-1521486534, 0x5f1d36f1),
69103                     new int64(0x510e527f, -1377402159),
69104                     new int64(-1694144372, 0x2b3e6c1f),
69105                     new int64(0x1f83d9ab, -79577749),
69106                     new int64(0x5be0cd19, 0x137e2179)
69107                   ],
69108                   T1 = new int64(0, 0),
69109                   T2 = new int64(0, 0),
69110                   a = new int64(0, 0),
69111                   b = new int64(0, 0),
69112                   c = new int64(0, 0),
69113                   d = new int64(0, 0),
69114                   e = new int64(0, 0),
69115                   f = new int64(0, 0),
69116                   g = new int64(0, 0),
69117                   h = new int64(0, 0),
69118                   //Temporary variables not specified by the document
69119                   s0 = new int64(0, 0),
69120                   s1 = new int64(0, 0),
69121                   Ch = new int64(0, 0),
69122                   Maj = new int64(0, 0),
69123                   r1 = new int64(0, 0),
69124                   r2 = new int64(0, 0),
69125                   r3 = new int64(0, 0);
69126
69127                 if (sha512_k === undefined) {
69128                   //SHA512 constants
69129                   sha512_k = [
69130                     new int64(0x428a2f98, -685199838), new int64(0x71374491, 0x23ef65cd),
69131                     new int64(-1245643825, -330482897), new int64(-373957723, -2121671748),
69132                     new int64(0x3956c25b, -213338824), new int64(0x59f111f1, -1241133031),
69133                     new int64(-1841331548, -1357295717), new int64(-1424204075, -630357736),
69134                     new int64(-670586216, -1560083902), new int64(0x12835b01, 0x45706fbe),
69135                     new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, -704662302),
69136                     new int64(0x72be5d74, -226784913), new int64(-2132889090, 0x3b1696b1),
69137                     new int64(-1680079193, 0x25c71235), new int64(-1046744716, -815192428),
69138                     new int64(-459576895, -1628353838), new int64(-272742522, 0x384f25e3),
69139                     new int64(0xfc19dc6, -1953704523), new int64(0x240ca1cc, 0x77ac9c65),
69140                     new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
69141                     new int64(0x5cb0a9dc, -1119749164), new int64(0x76f988da, -2096016459),
69142                     new int64(-1740746414, -295247957), new int64(-1473132947, 0x2db43210),
69143                     new int64(-1341970488, -1728372417), new int64(-1084653625, -1091629340),
69144                     new int64(-958395405, 0x3da88fc2), new int64(-710438585, -1828018395),
69145                     new int64(0x6ca6351, -536640913), new int64(0x14292967, 0xa0e6e70),
69146                     new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
69147                     new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, -1651133473),
69148                     new int64(0x650a7354, -1951439906), new int64(0x766a0abb, 0x3c77b2a8),
69149                     new int64(-2117940946, 0x47edaee6), new int64(-1838011259, 0x1482353b),
69150                     new int64(-1564481375, 0x4cf10364), new int64(-1474664885, -1136513023),
69151                     new int64(-1035236496, -789014639), new int64(-949202525, 0x654be30),
69152                     new int64(-778901479, -688958952), new int64(-694614492, 0x5565a910),
69153                     new int64(-200395387, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
69154                     new int64(0x19a4c116, -1194143544), new int64(0x1e376c08, 0x5141ab53),
69155                     new int64(0x2748774c, -544281703), new int64(0x34b0bcb5, -509917016),
69156                     new int64(0x391c0cb3, -976659869), new int64(0x4ed8aa4a, -482243893),
69157                     new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, -692930397),
69158                     new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
69159                     new int64(-2067236844, -1578062990), new int64(-1933114872, 0x1a6439ec),
69160                     new int64(-1866530822, 0x23631e28), new int64(-1538233109, -561857047),
69161                     new int64(-1090935817, -1295615723), new int64(-965641998, -479046869),
69162                     new int64(-903397682, -366583396), new int64(-779700025, 0x21c0c207),
69163                     new int64(-354779690, -840897762), new int64(-176337025, -294727304),
69164                     new int64(0x6f067aa, 0x72176fba), new int64(0xa637dc5, -1563912026),
69165                     new int64(0x113f9804, -1090974290), new int64(0x1b710b35, 0x131c471b),
69166                     new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
69167                     new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, -1676669620),
69168                     new int64(0x4cc5d4be, -885112138), new int64(0x597f299c, -60457430),
69169                     new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)
69170                   ];
69171                 }
69172
69173                 for (i = 0; i < 80; i += 1) {
69174                   W[i] = new int64(0, 0);
69175                 }
69176
69177                 // append padding to the source string. The format is described in the FIPS.
69178                 x[len >> 5] |= 0x80 << (24 - (len & 0x1f));
69179                 x[((len + 128 >> 10) << 5) + 31] = len;
69180                 l = x.length;
69181                 for (i = 0; i < l; i += 32) { //32 dwords is the block size
69182                   int64copy(a, H[0]);
69183                   int64copy(b, H[1]);
69184                   int64copy(c, H[2]);
69185                   int64copy(d, H[3]);
69186                   int64copy(e, H[4]);
69187                   int64copy(f, H[5]);
69188                   int64copy(g, H[6]);
69189                   int64copy(h, H[7]);
69190
69191                   for (j = 0; j < 16; j += 1) {
69192                     W[j].h = x[i + 2 * j];
69193                     W[j].l = x[i + 2 * j + 1];
69194                   }
69195
69196                   for (j = 16; j < 80; j += 1) {
69197                     //sigma1
69198                     int64rrot(r1, W[j - 2], 19);
69199                     int64revrrot(r2, W[j - 2], 29);
69200                     int64shr(r3, W[j - 2], 6);
69201                     s1.l = r1.l ^ r2.l ^ r3.l;
69202                     s1.h = r1.h ^ r2.h ^ r3.h;
69203                     //sigma0
69204                     int64rrot(r1, W[j - 15], 1);
69205                     int64rrot(r2, W[j - 15], 8);
69206                     int64shr(r3, W[j - 15], 7);
69207                     s0.l = r1.l ^ r2.l ^ r3.l;
69208                     s0.h = r1.h ^ r2.h ^ r3.h;
69209
69210                     int64add4(W[j], s1, W[j - 7], s0, W[j - 16]);
69211                   }
69212
69213                   for (j = 0; j < 80; j += 1) {
69214                     //Ch
69215                     Ch.l = (e.l & f.l) ^ (~e.l & g.l);
69216                     Ch.h = (e.h & f.h) ^ (~e.h & g.h);
69217
69218                     //Sigma1
69219                     int64rrot(r1, e, 14);
69220                     int64rrot(r2, e, 18);
69221                     int64revrrot(r3, e, 9);
69222                     s1.l = r1.l ^ r2.l ^ r3.l;
69223                     s1.h = r1.h ^ r2.h ^ r3.h;
69224
69225                     //Sigma0
69226                     int64rrot(r1, a, 28);
69227                     int64revrrot(r2, a, 2);
69228                     int64revrrot(r3, a, 7);
69229                     s0.l = r1.l ^ r2.l ^ r3.l;
69230                     s0.h = r1.h ^ r2.h ^ r3.h;
69231
69232                     //Maj
69233                     Maj.l = (a.l & b.l) ^ (a.l & c.l) ^ (b.l & c.l);
69234                     Maj.h = (a.h & b.h) ^ (a.h & c.h) ^ (b.h & c.h);
69235
69236                     int64add5(T1, h, s1, Ch, sha512_k[j], W[j]);
69237                     int64add(T2, s0, Maj);
69238
69239                     int64copy(h, g);
69240                     int64copy(g, f);
69241                     int64copy(f, e);
69242                     int64add(e, d, T1);
69243                     int64copy(d, c);
69244                     int64copy(c, b);
69245                     int64copy(b, a);
69246                     int64add(a, T1, T2);
69247                   }
69248                   int64add(H[0], H[0], a);
69249                   int64add(H[1], H[1], b);
69250                   int64add(H[2], H[2], c);
69251                   int64add(H[3], H[3], d);
69252                   int64add(H[4], H[4], e);
69253                   int64add(H[5], H[5], f);
69254                   int64add(H[6], H[6], g);
69255                   int64add(H[7], H[7], h);
69256                 }
69257
69258                 //represent the hash as an array of 32-bit dwords
69259                 for (i = 0; i < 8; i += 1) {
69260                   hash[2 * i] = H[i].h;
69261                   hash[2 * i + 1] = H[i].l;
69262                 }
69263                 return hash;
69264               }
69265
69266               //A constructor for 64-bit numbers
69267
69268               function int64(h, l) {
69269                 this.h = h;
69270                 this.l = l;
69271                 //this.toString = int64toString;
69272               }
69273
69274               //Copies src into dst, assuming both are 64-bit numbers
69275
69276               function int64copy(dst, src) {
69277                 dst.h = src.h;
69278                 dst.l = src.l;
69279               }
69280
69281               //Right-rotates a 64-bit number by shift
69282               //Won't handle cases of shift>=32
69283               //The function revrrot() is for that
69284
69285               function int64rrot(dst, x, shift) {
69286                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
69287                 dst.h = (x.h >>> shift) | (x.l << (32 - shift));
69288               }
69289
69290               //Reverses the dwords of the source and then rotates right by shift.
69291               //This is equivalent to rotation by 32+shift
69292
69293               function int64revrrot(dst, x, shift) {
69294                 dst.l = (x.h >>> shift) | (x.l << (32 - shift));
69295                 dst.h = (x.l >>> shift) | (x.h << (32 - shift));
69296               }
69297
69298               //Bitwise-shifts right a 64-bit number by shift
69299               //Won't handle shift>=32, but it's never needed in SHA512
69300
69301               function int64shr(dst, x, shift) {
69302                 dst.l = (x.l >>> shift) | (x.h << (32 - shift));
69303                 dst.h = (x.h >>> shift);
69304               }
69305
69306               //Adds two 64-bit numbers
69307               //Like the original implementation, does not rely on 32-bit operations
69308
69309               function int64add(dst, x, y) {
69310                 var w0 = (x.l & 0xffff) + (y.l & 0xffff);
69311                 var w1 = (x.l >>> 16) + (y.l >>> 16) + (w0 >>> 16);
69312                 var w2 = (x.h & 0xffff) + (y.h & 0xffff) + (w1 >>> 16);
69313                 var w3 = (x.h >>> 16) + (y.h >>> 16) + (w2 >>> 16);
69314                 dst.l = (w0 & 0xffff) | (w1 << 16);
69315                 dst.h = (w2 & 0xffff) | (w3 << 16);
69316               }
69317
69318               //Same, except with 4 addends. Works faster than adding them one by one.
69319
69320               function int64add4(dst, a, b, c, d) {
69321                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff);
69322                 var w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (w0 >>> 16);
69323                 var w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (w1 >>> 16);
69324                 var w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (w2 >>> 16);
69325                 dst.l = (w0 & 0xffff) | (w1 << 16);
69326                 dst.h = (w2 & 0xffff) | (w3 << 16);
69327               }
69328
69329               //Same, except with 5 addends
69330
69331               function int64add5(dst, a, b, c, d, e) {
69332                 var w0 = (a.l & 0xffff) + (b.l & 0xffff) + (c.l & 0xffff) + (d.l & 0xffff) + (e.l & 0xffff),
69333                   w1 = (a.l >>> 16) + (b.l >>> 16) + (c.l >>> 16) + (d.l >>> 16) + (e.l >>> 16) + (w0 >>> 16),
69334                   w2 = (a.h & 0xffff) + (b.h & 0xffff) + (c.h & 0xffff) + (d.h & 0xffff) + (e.h & 0xffff) + (w1 >>> 16),
69335                   w3 = (a.h >>> 16) + (b.h >>> 16) + (c.h >>> 16) + (d.h >>> 16) + (e.h >>> 16) + (w2 >>> 16);
69336                 dst.l = (w0 & 0xffff) | (w1 << 16);
69337                 dst.h = (w2 & 0xffff) | (w3 << 16);
69338               }
69339             },
69340             /**
69341              * @class Hashes.RMD160
69342              * @constructor
69343              * @param {Object} [config]
69344              *
69345              * A JavaScript implementation of the RIPEMD-160 Algorithm
69346              * Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
69347              * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69348              * See http://pajhome.org.uk/crypt/md5 for details.
69349              * Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
69350              */
69351             RMD160: function(options) {
69352               /**
69353                * Private properties configuration variables. You may need to tweak these to be compatible with
69354                * the server-side, but the defaults work in most cases.
69355                * @see this.setUpperCase() method
69356                * @see this.setPad() method
69357                */
69358               var hexcase = (options && typeof options.uppercase === 'boolean') ? options.uppercase : false,
69359                 /* hexadecimal output case format. false - lowercase; true - uppercase  */
69360                 b64pad = (options && typeof options.pad === 'string') ? options.pa : '=',
69361                 /* base-64 pad character. Default '=' for strict RFC compliance   */
69362                 utf8 = (options && typeof options.utf8 === 'boolean') ? options.utf8 : true,
69363                 /* enable/disable utf8 encoding */
69364                 rmd160_r1 = [
69365                   0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
69366                   7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
69367                   3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
69368                   1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
69369                   4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
69370                 ],
69371                 rmd160_r2 = [
69372                   5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
69373                   6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
69374                   15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
69375                   8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
69376                   12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
69377                 ],
69378                 rmd160_s1 = [
69379                   11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
69380                   7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
69381                   11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
69382                   11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
69383                   9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
69384                 ],
69385                 rmd160_s2 = [
69386                   8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
69387                   9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
69388                   9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
69389                   15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
69390                   8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
69391                 ];
69392
69393               /* privileged (public) methods */
69394               this.hex = function(s) {
69395                 return rstr2hex(rstr(s));
69396               };
69397               this.b64 = function(s) {
69398                 return rstr2b64(rstr(s), b64pad);
69399               };
69400               this.any = function(s, e) {
69401                 return rstr2any(rstr(s), e);
69402               };
69403               this.raw = function(s) {
69404                 return rstr(s);
69405               };
69406               this.hex_hmac = function(k, d) {
69407                 return rstr2hex(rstr_hmac(k, d));
69408               };
69409               this.b64_hmac = function(k, d) {
69410                 return rstr2b64(rstr_hmac(k, d), b64pad);
69411               };
69412               this.any_hmac = function(k, d, e) {
69413                 return rstr2any(rstr_hmac(k, d), e);
69414               };
69415               /**
69416                * Perform a simple self-test to see if the VM is working
69417                * @return {String} Hexadecimal hash sample
69418                * @public
69419                */
69420               this.vm_test = function() {
69421                 return hex('abc').toLowerCase() === '900150983cd24fb0d6963f7d28e17f72';
69422               };
69423               /**
69424                * @description Enable/disable uppercase hexadecimal returned string
69425                * @param {boolean}
69426                * @return {Object} this
69427                * @public
69428                */
69429               this.setUpperCase = function(a) {
69430                 if (typeof a === 'boolean') {
69431                   hexcase = a;
69432                 }
69433                 return this;
69434               };
69435               /**
69436                * @description Defines a base64 pad string
69437                * @param {string} Pad
69438                * @return {Object} this
69439                * @public
69440                */
69441               this.setPad = function(a) {
69442                 if (typeof a !== 'undefined') {
69443                   b64pad = a;
69444                 }
69445                 return this;
69446               };
69447               /**
69448                * @description Defines a base64 pad string
69449                * @param {boolean}
69450                * @return {Object} this
69451                * @public
69452                */
69453               this.setUTF8 = function(a) {
69454                 if (typeof a === 'boolean') {
69455                   utf8 = a;
69456                 }
69457                 return this;
69458               };
69459
69460               /* private methods */
69461
69462               /**
69463                * Calculate the rmd160 of a raw string
69464                */
69465
69466               function rstr(s) {
69467                 s = (utf8) ? utf8Encode(s) : s;
69468                 return binl2rstr(binl(rstr2binl(s), s.length * 8));
69469               }
69470
69471               /**
69472                * Calculate the HMAC-rmd160 of a key and some data (raw strings)
69473                */
69474
69475               function rstr_hmac(key, data) {
69476                 key = (utf8) ? utf8Encode(key) : key;
69477                 data = (utf8) ? utf8Encode(data) : data;
69478                 var i, hash,
69479                   bkey = rstr2binl(key),
69480                   ipad = Array(16),
69481                   opad = Array(16);
69482
69483                 if (bkey.length > 16) {
69484                   bkey = binl(bkey, key.length * 8);
69485                 }
69486
69487                 for (i = 0; i < 16; i += 1) {
69488                   ipad[i] = bkey[i] ^ 0x36363636;
69489                   opad[i] = bkey[i] ^ 0x5C5C5C5C;
69490                 }
69491                 hash = binl(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
69492                 return binl2rstr(binl(opad.concat(hash), 512 + 160));
69493               }
69494
69495               /**
69496                * Convert an array of little-endian words to a string
69497                */
69498
69499               function binl2rstr(input) {
69500                 var i, output = '',
69501                   l = input.length * 32;
69502                 for (i = 0; i < l; i += 8) {
69503                   output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
69504                 }
69505                 return output;
69506               }
69507
69508               /**
69509                * Calculate the RIPE-MD160 of an array of little-endian words, and a bit length.
69510                */
69511
69512               function binl(x, len) {
69513                 var T, j, i, l,
69514                   h0 = 0x67452301,
69515                   h1 = 0xefcdab89,
69516                   h2 = 0x98badcfe,
69517                   h3 = 0x10325476,
69518                   h4 = 0xc3d2e1f0,
69519                   A1, B1, C1, D1, E1,
69520                   A2, B2, C2, D2, E2;
69521
69522                 /* append padding */
69523                 x[len >> 5] |= 0x80 << (len % 32);
69524                 x[(((len + 64) >>> 9) << 4) + 14] = len;
69525                 l = x.length;
69526
69527                 for (i = 0; i < l; i += 16) {
69528                   A1 = A2 = h0;
69529                   B1 = B2 = h1;
69530                   C1 = C2 = h2;
69531                   D1 = D2 = h3;
69532                   E1 = E2 = h4;
69533                   for (j = 0; j <= 79; j += 1) {
69534                     T = safe_add(A1, rmd160_f(j, B1, C1, D1));
69535                     T = safe_add(T, x[i + rmd160_r1[j]]);
69536                     T = safe_add(T, rmd160_K1(j));
69537                     T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
69538                     A1 = E1;
69539                     E1 = D1;
69540                     D1 = bit_rol(C1, 10);
69541                     C1 = B1;
69542                     B1 = T;
69543                     T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
69544                     T = safe_add(T, x[i + rmd160_r2[j]]);
69545                     T = safe_add(T, rmd160_K2(j));
69546                     T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
69547                     A2 = E2;
69548                     E2 = D2;
69549                     D2 = bit_rol(C2, 10);
69550                     C2 = B2;
69551                     B2 = T;
69552                   }
69553
69554                   T = safe_add(h1, safe_add(C1, D2));
69555                   h1 = safe_add(h2, safe_add(D1, E2));
69556                   h2 = safe_add(h3, safe_add(E1, A2));
69557                   h3 = safe_add(h4, safe_add(A1, B2));
69558                   h4 = safe_add(h0, safe_add(B1, C2));
69559                   h0 = T;
69560                 }
69561                 return [h0, h1, h2, h3, h4];
69562               }
69563
69564               // specific algorithm methods
69565
69566               function rmd160_f(j, x, y, z) {
69567                 return (0 <= j && j <= 15) ? (x ^ y ^ z) :
69568                   (16 <= j && j <= 31) ? (x & y) | (~x & z) :
69569                   (32 <= j && j <= 47) ? (x | ~y) ^ z :
69570                   (48 <= j && j <= 63) ? (x & z) | (y & ~z) :
69571                   (64 <= j && j <= 79) ? x ^ (y | ~z) :
69572                   'rmd160_f: j out of range';
69573               }
69574
69575               function rmd160_K1(j) {
69576                 return (0 <= j && j <= 15) ? 0x00000000 :
69577                   (16 <= j && j <= 31) ? 0x5a827999 :
69578                   (32 <= j && j <= 47) ? 0x6ed9eba1 :
69579                   (48 <= j && j <= 63) ? 0x8f1bbcdc :
69580                   (64 <= j && j <= 79) ? 0xa953fd4e :
69581                   'rmd160_K1: j out of range';
69582               }
69583
69584               function rmd160_K2(j) {
69585                 return (0 <= j && j <= 15) ? 0x50a28be6 :
69586                   (16 <= j && j <= 31) ? 0x5c4dd124 :
69587                   (32 <= j && j <= 47) ? 0x6d703ef3 :
69588                   (48 <= j && j <= 63) ? 0x7a6d76e9 :
69589                   (64 <= j && j <= 79) ? 0x00000000 :
69590                   'rmd160_K2: j out of range';
69591               }
69592             }
69593           };
69594
69595           // exposes Hashes
69596           (function(window, undefined$1) {
69597             var freeExports = false;
69598             {
69599               freeExports = exports;
69600               if (exports && typeof commonjsGlobal === 'object' && commonjsGlobal && commonjsGlobal === commonjsGlobal.global) {
69601                 window = commonjsGlobal;
69602               }
69603             }
69604
69605             if (typeof undefined$1 === 'function' && typeof undefined$1.amd === 'object' && undefined$1.amd) {
69606               // define as an anonymous module, so, through path mapping, it can be aliased
69607               undefined$1(function() {
69608                 return Hashes;
69609               });
69610             } else if (freeExports) {
69611               // in Node.js or RingoJS v0.8.0+
69612               if ( module && module.exports === freeExports) {
69613                 module.exports = Hashes;
69614               }
69615               // in Narwhal or RingoJS v0.7.0-
69616               else {
69617                 freeExports.Hashes = Hashes;
69618               }
69619             } else {
69620               // in a browser or Rhino
69621               window.Hashes = Hashes;
69622             }
69623           }(this));
69624         }()); // IIFE
69625         });
69626
69627         var immutable = extend$3;
69628
69629         var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
69630
69631         function extend$3() {
69632             var arguments$1 = arguments;
69633
69634             var target = {};
69635
69636             for (var i = 0; i < arguments.length; i++) {
69637                 var source = arguments$1[i];
69638
69639                 for (var key in source) {
69640                     if (hasOwnProperty$3.call(source, key)) {
69641                         target[key] = source[key];
69642                     }
69643                 }
69644             }
69645
69646             return target
69647         }
69648
69649         var sha1 = new hashes.SHA1();
69650
69651         var ohauth = {};
69652
69653         ohauth.qsString = function(obj) {
69654             return Object.keys(obj).sort().map(function(key) {
69655                 return ohauth.percentEncode(key) + '=' +
69656                     ohauth.percentEncode(obj[key]);
69657             }).join('&');
69658         };
69659
69660         ohauth.stringQs = function(str) {
69661             return str.split('&').filter(function (pair) {
69662                 return pair !== '';
69663             }).reduce(function(obj, pair){
69664                 var parts = pair.split('=');
69665                 obj[decodeURIComponent(parts[0])] = (null === parts[1]) ?
69666                     '' : decodeURIComponent(parts[1]);
69667                 return obj;
69668             }, {});
69669         };
69670
69671         ohauth.rawxhr = function(method, url, data, headers, callback) {
69672             var xhr = new XMLHttpRequest(),
69673                 twoHundred = /^20\d$/;
69674             xhr.onreadystatechange = function() {
69675                 if (4 === xhr.readyState && 0 !== xhr.status) {
69676                     if (twoHundred.test(xhr.status)) { callback(null, xhr); }
69677                     else { return callback(xhr, null); }
69678                 }
69679             };
69680             xhr.onerror = function(e) { return callback(e, null); };
69681             xhr.open(method, url, true);
69682             for (var h in headers) { xhr.setRequestHeader(h, headers[h]); }
69683             xhr.send(data);
69684             return xhr;
69685         };
69686
69687         ohauth.xhr = function(method, url, auth, data, options, callback) {
69688             var headers = (options && options.header) || {
69689                 'Content-Type': 'application/x-www-form-urlencoded'
69690             };
69691             headers.Authorization = 'OAuth ' + ohauth.authHeader(auth);
69692             return ohauth.rawxhr(method, url, data, headers, callback);
69693         };
69694
69695         ohauth.nonce = function() {
69696             for (var o = ''; o.length < 6;) {
69697                 o += '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'[Math.floor(Math.random() * 61)];
69698             }
69699             return o;
69700         };
69701
69702         ohauth.authHeader = function(obj) {
69703             return Object.keys(obj).sort().map(function(key) {
69704                 return encodeURIComponent(key) + '="' + encodeURIComponent(obj[key]) + '"';
69705             }).join(', ');
69706         };
69707
69708         ohauth.timestamp = function() { return ~~((+new Date()) / 1000); };
69709
69710         ohauth.percentEncode = function(s) {
69711             return encodeURIComponent(s)
69712                 .replace(/\!/g, '%21').replace(/\'/g, '%27')
69713                 .replace(/\*/g, '%2A').replace(/\(/g, '%28').replace(/\)/g, '%29');
69714         };
69715
69716         ohauth.baseString = function(method, url, params) {
69717             if (params.oauth_signature) { delete params.oauth_signature; }
69718             return [
69719                 method,
69720                 ohauth.percentEncode(url),
69721                 ohauth.percentEncode(ohauth.qsString(params))].join('&');
69722         };
69723
69724         ohauth.signature = function(oauth_secret, token_secret, baseString) {
69725             return sha1.b64_hmac(
69726                 ohauth.percentEncode(oauth_secret) + '&' +
69727                 ohauth.percentEncode(token_secret),
69728                 baseString);
69729         };
69730
69731         /**
69732          * Takes an options object for configuration (consumer_key,
69733          * consumer_secret, version, signature_method, token, token_secret)
69734          * and returns a function that generates the Authorization header
69735          * for given data.
69736          *
69737          * The returned function takes these parameters:
69738          * - method: GET/POST/...
69739          * - uri: full URI with protocol, port, path and query string
69740          * - extra_params: any extra parameters (that are passed in the POST data),
69741          *   can be an object or a from-urlencoded string.
69742          *
69743          * Returned function returns full OAuth header with "OAuth" string in it.
69744          */
69745
69746         ohauth.headerGenerator = function(options) {
69747             options = options || {};
69748             var consumer_key = options.consumer_key || '',
69749                 consumer_secret = options.consumer_secret || '',
69750                 signature_method = options.signature_method || 'HMAC-SHA1',
69751                 version = options.version || '1.0',
69752                 token = options.token || '',
69753                 token_secret = options.token_secret || '';
69754
69755             return function(method, uri, extra_params) {
69756                 method = method.toUpperCase();
69757                 if (typeof extra_params === 'string' && extra_params.length > 0) {
69758                     extra_params = ohauth.stringQs(extra_params);
69759                 }
69760
69761                 var uri_parts = uri.split('?', 2),
69762                 base_uri = uri_parts[0];
69763
69764                 var query_params = uri_parts.length === 2 ?
69765                     ohauth.stringQs(uri_parts[1]) : {};
69766
69767                 var oauth_params = {
69768                     oauth_consumer_key: consumer_key,
69769                     oauth_signature_method: signature_method,
69770                     oauth_version: version,
69771                     oauth_timestamp: ohauth.timestamp(),
69772                     oauth_nonce: ohauth.nonce()
69773                 };
69774
69775                 if (token) { oauth_params.oauth_token = token; }
69776
69777                 var all_params = immutable({}, oauth_params, query_params, extra_params),
69778                     base_str = ohauth.baseString(method, base_uri, all_params);
69779
69780                 oauth_params.oauth_signature = ohauth.signature(consumer_secret, token_secret, base_str);
69781
69782                 return 'OAuth ' + ohauth.authHeader(oauth_params);
69783             };
69784         };
69785
69786         var ohauth_1 = ohauth;
69787
69788         var resolveUrl = createCommonjsModule(function (module, exports) {
69789         // Copyright 2014 Simon Lydell
69790         // X11 (“MIT”) Licensed. (See LICENSE.)
69791
69792         void (function(root, factory) {
69793           {
69794             module.exports = factory();
69795           }
69796         }(commonjsGlobal, function() {
69797
69798           function resolveUrl(/* ...urls */) {
69799             var arguments$1 = arguments;
69800
69801             var numUrls = arguments.length;
69802
69803             if (numUrls === 0) {
69804               throw new Error("resolveUrl requires at least one argument; got none.")
69805             }
69806
69807             var base = document.createElement("base");
69808             base.href = arguments[0];
69809
69810             if (numUrls === 1) {
69811               return base.href
69812             }
69813
69814             var head = document.getElementsByTagName("head")[0];
69815             head.insertBefore(base, head.firstChild);
69816
69817             var a = document.createElement("a");
69818             var resolved;
69819
69820             for (var index = 1; index < numUrls; index++) {
69821               a.href = arguments$1[index];
69822               resolved = a.href;
69823               base.href = resolved;
69824             }
69825
69826             head.removeChild(base);
69827
69828             return resolved
69829           }
69830
69831           return resolveUrl
69832
69833         }));
69834         });
69835
69836         var assign$1 = make_assign();
69837         var create$9 = make_create();
69838         var trim = make_trim();
69839         var Global = (typeof window !== 'undefined' ? window : commonjsGlobal);
69840
69841         var util = {
69842                 assign: assign$1,
69843                 create: create$9,
69844                 trim: trim,
69845                 bind: bind$3,
69846                 slice: slice$b,
69847                 each: each,
69848                 map: map$6,
69849                 pluck: pluck,
69850                 isList: isList,
69851                 isFunction: isFunction$2,
69852                 isObject: isObject$3,
69853                 Global: Global
69854         };
69855
69856         function make_assign() {
69857                 if (Object.assign) {
69858                         return Object.assign
69859                 } else {
69860                         return function shimAssign(obj, props1, props2, etc) {
69861                                 var arguments$1 = arguments;
69862
69863                                 for (var i = 1; i < arguments.length; i++) {
69864                                         each(Object(arguments$1[i]), function(val, key) {
69865                                                 obj[key] = val;
69866                                         });
69867                                 }                       
69868                                 return obj
69869                         }
69870                 }
69871         }
69872
69873         function make_create() {
69874                 if (Object.create) {
69875                         return function create(obj, assignProps1, assignProps2, etc) {
69876                                 var assignArgsList = slice$b(arguments, 1);
69877                                 return assign$1.apply(this, [Object.create(obj)].concat(assignArgsList))
69878                         }
69879                 } else {
69880                         function F() {} // eslint-disable-line no-inner-declarations
69881                         return function create(obj, assignProps1, assignProps2, etc) {
69882                                 var assignArgsList = slice$b(arguments, 1);
69883                                 F.prototype = obj;
69884                                 return assign$1.apply(this, [new F()].concat(assignArgsList))
69885                         }
69886                 }
69887         }
69888
69889         function make_trim() {
69890                 if (String.prototype.trim) {
69891                         return function trim(str) {
69892                                 return String.prototype.trim.call(str)
69893                         }
69894                 } else {
69895                         return function trim(str) {
69896                                 return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '')
69897                         }
69898                 }
69899         }
69900
69901         function bind$3(obj, fn) {
69902                 return function() {
69903                         return fn.apply(obj, Array.prototype.slice.call(arguments, 0))
69904                 }
69905         }
69906
69907         function slice$b(arr, index) {
69908                 return Array.prototype.slice.call(arr, index || 0)
69909         }
69910
69911         function each(obj, fn) {
69912                 pluck(obj, function(val, key) {
69913                         fn(val, key);
69914                         return false
69915                 });
69916         }
69917
69918         function map$6(obj, fn) {
69919                 var res = (isList(obj) ? [] : {});
69920                 pluck(obj, function(v, k) {
69921                         res[k] = fn(v, k);
69922                         return false
69923                 });
69924                 return res
69925         }
69926
69927         function pluck(obj, fn) {
69928                 if (isList(obj)) {
69929                         for (var i=0; i<obj.length; i++) {
69930                                 if (fn(obj[i], i)) {
69931                                         return obj[i]
69932                                 }
69933                         }
69934                 } else {
69935                         for (var key in obj) {
69936                                 if (obj.hasOwnProperty(key)) {
69937                                         if (fn(obj[key], key)) {
69938                                                 return obj[key]
69939                                         }
69940                                 }
69941                         }
69942                 }
69943         }
69944
69945         function isList(val) {
69946                 return (val != null && typeof val != 'function' && typeof val.length == 'number')
69947         }
69948
69949         function isFunction$2(val) {
69950                 return val && {}.toString.call(val) === '[object Function]'
69951         }
69952
69953         function isObject$3(val) {
69954                 return val && {}.toString.call(val) === '[object Object]'
69955         }
69956
69957         var slice$c = util.slice;
69958         var pluck$1 = util.pluck;
69959         var each$1 = util.each;
69960         var bind$4 = util.bind;
69961         var create$a = util.create;
69962         var isList$1 = util.isList;
69963         var isFunction$3 = util.isFunction;
69964         var isObject$4 = util.isObject;
69965
69966         var storeEngine = {
69967                 createStore: createStore
69968         };
69969
69970         var storeAPI = {
69971                 version: '2.0.12',
69972                 enabled: false,
69973                 
69974                 // get returns the value of the given key. If that value
69975                 // is undefined, it returns optionalDefaultValue instead.
69976                 get: function(key, optionalDefaultValue) {
69977                         var data = this.storage.read(this._namespacePrefix + key);
69978                         return this._deserialize(data, optionalDefaultValue)
69979                 },
69980
69981                 // set will store the given value at key and returns value.
69982                 // Calling set with value === undefined is equivalent to calling remove.
69983                 set: function(key, value) {
69984                         if (value === undefined) {
69985                                 return this.remove(key)
69986                         }
69987                         this.storage.write(this._namespacePrefix + key, this._serialize(value));
69988                         return value
69989                 },
69990
69991                 // remove deletes the key and value stored at the given key.
69992                 remove: function(key) {
69993                         this.storage.remove(this._namespacePrefix + key);
69994                 },
69995
69996                 // each will call the given callback once for each key-value pair
69997                 // in this store.
69998                 each: function(callback) {
69999                         var self = this;
70000                         this.storage.each(function(val, namespacedKey) {
70001                                 callback.call(self, self._deserialize(val), (namespacedKey || '').replace(self._namespaceRegexp, ''));
70002                         });
70003                 },
70004
70005                 // clearAll will remove all the stored key-value pairs in this store.
70006                 clearAll: function() {
70007                         this.storage.clearAll();
70008                 },
70009
70010                 // additional functionality that can't live in plugins
70011                 // ---------------------------------------------------
70012
70013                 // hasNamespace returns true if this store instance has the given namespace.
70014                 hasNamespace: function(namespace) {
70015                         return (this._namespacePrefix == '__storejs_'+namespace+'_')
70016                 },
70017
70018                 // createStore creates a store.js instance with the first
70019                 // functioning storage in the list of storage candidates,
70020                 // and applies the the given mixins to the instance.
70021                 createStore: function() {
70022                         return createStore.apply(this, arguments)
70023                 },
70024                 
70025                 addPlugin: function(plugin) {
70026                         this._addPlugin(plugin);
70027                 },
70028                 
70029                 namespace: function(namespace) {
70030                         return createStore(this.storage, this.plugins, namespace)
70031                 }
70032         };
70033
70034         function _warn() {
70035                 var _console = (typeof console == 'undefined' ? null : console);
70036                 if (!_console) { return }
70037                 var fn = (_console.warn ? _console.warn : _console.log);
70038                 fn.apply(_console, arguments);
70039         }
70040
70041         function createStore(storages, plugins, namespace) {
70042                 if (!namespace) {
70043                         namespace = '';
70044                 }
70045                 if (storages && !isList$1(storages)) {
70046                         storages = [storages];
70047                 }
70048                 if (plugins && !isList$1(plugins)) {
70049                         plugins = [plugins];
70050                 }
70051
70052                 var namespacePrefix = (namespace ? '__storejs_'+namespace+'_' : '');
70053                 var namespaceRegexp = (namespace ? new RegExp('^'+namespacePrefix) : null);
70054                 var legalNamespaces = /^[a-zA-Z0-9_\-]*$/; // alpha-numeric + underscore and dash
70055                 if (!legalNamespaces.test(namespace)) {
70056                         throw new Error('store.js namespaces can only have alphanumerics + underscores and dashes')
70057                 }
70058                 
70059                 var _privateStoreProps = {
70060                         _namespacePrefix: namespacePrefix,
70061                         _namespaceRegexp: namespaceRegexp,
70062
70063                         _testStorage: function(storage) {
70064                                 try {
70065                                         var testStr = '__storejs__test__';
70066                                         storage.write(testStr, testStr);
70067                                         var ok = (storage.read(testStr) === testStr);
70068                                         storage.remove(testStr);
70069                                         return ok
70070                                 } catch(e) {
70071                                         return false
70072                                 }
70073                         },
70074
70075                         _assignPluginFnProp: function(pluginFnProp, propName) {
70076                                 var oldFn = this[propName];
70077                                 this[propName] = function pluginFn() {
70078                                         var args = slice$c(arguments, 0);
70079                                         var self = this;
70080
70081                                         // super_fn calls the old function which was overwritten by
70082                                         // this mixin.
70083                                         function super_fn() {
70084                                                 if (!oldFn) { return }
70085                                                 each$1(arguments, function(arg, i) {
70086                                                         args[i] = arg;
70087                                                 });
70088                                                 return oldFn.apply(self, args)
70089                                         }
70090
70091                                         // Give mixing function access to super_fn by prefixing all mixin function
70092                                         // arguments with super_fn.
70093                                         var newFnArgs = [super_fn].concat(args);
70094
70095                                         return pluginFnProp.apply(self, newFnArgs)
70096                                 };
70097                         },
70098
70099                         _serialize: function(obj) {
70100                                 return JSON.stringify(obj)
70101                         },
70102
70103                         _deserialize: function(strVal, defaultVal) {
70104                                 if (!strVal) { return defaultVal }
70105                                 // It is possible that a raw string value has been previously stored
70106                                 // in a storage without using store.js, meaning it will be a raw
70107                                 // string value instead of a JSON serialized string. By defaulting
70108                                 // to the raw string value in case of a JSON parse error, we allow
70109                                 // for past stored values to be forwards-compatible with store.js
70110                                 var val = '';
70111                                 try { val = JSON.parse(strVal); }
70112                                 catch(e) { val = strVal; }
70113
70114                                 return (val !== undefined ? val : defaultVal)
70115                         },
70116                         
70117                         _addStorage: function(storage) {
70118                                 if (this.enabled) { return }
70119                                 if (this._testStorage(storage)) {
70120                                         this.storage = storage;
70121                                         this.enabled = true;
70122                                 }
70123                         },
70124
70125                         _addPlugin: function(plugin) {
70126                                 var self = this;
70127
70128                                 // If the plugin is an array, then add all plugins in the array.
70129                                 // This allows for a plugin to depend on other plugins.
70130                                 if (isList$1(plugin)) {
70131                                         each$1(plugin, function(plugin) {
70132                                                 self._addPlugin(plugin);
70133                                         });
70134                                         return
70135                                 }
70136
70137                                 // Keep track of all plugins we've seen so far, so that we
70138                                 // don't add any of them twice.
70139                                 var seenPlugin = pluck$1(this.plugins, function(seenPlugin) {
70140                                         return (plugin === seenPlugin)
70141                                 });
70142                                 if (seenPlugin) {
70143                                         return
70144                                 }
70145                                 this.plugins.push(plugin);
70146
70147                                 // Check that the plugin is properly formed
70148                                 if (!isFunction$3(plugin)) {
70149                                         throw new Error('Plugins must be function values that return objects')
70150                                 }
70151
70152                                 var pluginProperties = plugin.call(this);
70153                                 if (!isObject$4(pluginProperties)) {
70154                                         throw new Error('Plugins must return an object of function properties')
70155                                 }
70156
70157                                 // Add the plugin function properties to this store instance.
70158                                 each$1(pluginProperties, function(pluginFnProp, propName) {
70159                                         if (!isFunction$3(pluginFnProp)) {
70160                                                 throw new Error('Bad plugin property: '+propName+' from plugin '+plugin.name+'. Plugins should only return functions.')
70161                                         }
70162                                         self._assignPluginFnProp(pluginFnProp, propName);
70163                                 });
70164                         },
70165                         
70166                         // Put deprecated properties in the private API, so as to not expose it to accidential
70167                         // discovery through inspection of the store object.
70168                         
70169                         // Deprecated: addStorage
70170                         addStorage: function(storage) {
70171                                 _warn('store.addStorage(storage) is deprecated. Use createStore([storages])');
70172                                 this._addStorage(storage);
70173                         }
70174                 };
70175
70176                 var store = create$a(_privateStoreProps, storeAPI, {
70177                         plugins: []
70178                 });
70179                 store.raw = {};
70180                 each$1(store, function(prop, propName) {
70181                         if (isFunction$3(prop)) {
70182                                 store.raw[propName] = bind$4(store, prop);                      
70183                         }
70184                 });
70185                 each$1(storages, function(storage) {
70186                         store._addStorage(storage);
70187                 });
70188                 each$1(plugins, function(plugin) {
70189                         store._addPlugin(plugin);
70190                 });
70191                 return store
70192         }
70193
70194         var Global$1 = util.Global;
70195
70196         var localStorage_1 = {
70197                 name: 'localStorage',
70198                 read: read,
70199                 write: write,
70200                 each: each$2,
70201                 remove: remove$2,
70202                 clearAll: clearAll,
70203         };
70204
70205         function localStorage$1() {
70206                 return Global$1.localStorage
70207         }
70208
70209         function read(key) {
70210                 return localStorage$1().getItem(key)
70211         }
70212
70213         function write(key, data) {
70214                 return localStorage$1().setItem(key, data)
70215         }
70216
70217         function each$2(fn) {
70218                 for (var i = localStorage$1().length - 1; i >= 0; i--) {
70219                         var key = localStorage$1().key(i);
70220                         fn(read(key), key);
70221                 }
70222         }
70223
70224         function remove$2(key) {
70225                 return localStorage$1().removeItem(key)
70226         }
70227
70228         function clearAll() {
70229                 return localStorage$1().clear()
70230         }
70231
70232         // oldFF-globalStorage provides storage for Firefox
70233         // versions 6 and 7, where no localStorage, etc
70234         // is available.
70235
70236
70237         var Global$2 = util.Global;
70238
70239         var oldFFGlobalStorage = {
70240                 name: 'oldFF-globalStorage',
70241                 read: read$1,
70242                 write: write$1,
70243                 each: each$3,
70244                 remove: remove$3,
70245                 clearAll: clearAll$1,
70246         };
70247
70248         var globalStorage = Global$2.globalStorage;
70249
70250         function read$1(key) {
70251                 return globalStorage[key]
70252         }
70253
70254         function write$1(key, data) {
70255                 globalStorage[key] = data;
70256         }
70257
70258         function each$3(fn) {
70259                 for (var i = globalStorage.length - 1; i >= 0; i--) {
70260                         var key = globalStorage.key(i);
70261                         fn(globalStorage[key], key);
70262                 }
70263         }
70264
70265         function remove$3(key) {
70266                 return globalStorage.removeItem(key)
70267         }
70268
70269         function clearAll$1() {
70270                 each$3(function(key, _) {
70271                         delete globalStorage[key];
70272                 });
70273         }
70274
70275         // oldIE-userDataStorage provides storage for Internet Explorer
70276         // versions 6 and 7, where no localStorage, sessionStorage, etc
70277         // is available.
70278
70279
70280         var Global$3 = util.Global;
70281
70282         var oldIEUserDataStorage = {
70283                 name: 'oldIE-userDataStorage',
70284                 write: write$2,
70285                 read: read$2,
70286                 each: each$4,
70287                 remove: remove$4,
70288                 clearAll: clearAll$2,
70289         };
70290
70291         var storageName = 'storejs';
70292         var doc = Global$3.document;
70293         var _withStorageEl = _makeIEStorageElFunction();
70294         var disable = (Global$3.navigator ? Global$3.navigator.userAgent : '').match(/ (MSIE 8|MSIE 9|MSIE 10)\./); // MSIE 9.x, MSIE 10.x
70295
70296         function write$2(unfixedKey, data) {
70297                 if (disable) { return }
70298                 var fixedKey = fixKey(unfixedKey);
70299                 _withStorageEl(function(storageEl) {
70300                         storageEl.setAttribute(fixedKey, data);
70301                         storageEl.save(storageName);
70302                 });
70303         }
70304
70305         function read$2(unfixedKey) {
70306                 if (disable) { return }
70307                 var fixedKey = fixKey(unfixedKey);
70308                 var res = null;
70309                 _withStorageEl(function(storageEl) {
70310                         res = storageEl.getAttribute(fixedKey);
70311                 });
70312                 return res
70313         }
70314
70315         function each$4(callback) {
70316                 _withStorageEl(function(storageEl) {
70317                         var attributes = storageEl.XMLDocument.documentElement.attributes;
70318                         for (var i=attributes.length-1; i>=0; i--) {
70319                                 var attr = attributes[i];
70320                                 callback(storageEl.getAttribute(attr.name), attr.name);
70321                         }
70322                 });
70323         }
70324
70325         function remove$4(unfixedKey) {
70326                 var fixedKey = fixKey(unfixedKey);
70327                 _withStorageEl(function(storageEl) {
70328                         storageEl.removeAttribute(fixedKey);
70329                         storageEl.save(storageName);
70330                 });
70331         }
70332
70333         function clearAll$2() {
70334                 _withStorageEl(function(storageEl) {
70335                         var attributes = storageEl.XMLDocument.documentElement.attributes;
70336                         storageEl.load(storageName);
70337                         for (var i=attributes.length-1; i>=0; i--) {
70338                                 storageEl.removeAttribute(attributes[i].name);
70339                         }
70340                         storageEl.save(storageName);
70341                 });
70342         }
70343
70344         // Helpers
70345         //////////
70346
70347         // In IE7, keys cannot start with a digit or contain certain chars.
70348         // See https://github.com/marcuswestin/store.js/issues/40
70349         // See https://github.com/marcuswestin/store.js/issues/83
70350         var forbiddenCharsRegex = new RegExp("[!\"#$%&'()*+,/\\\\:;<=>?@[\\]^`{|}~]", "g");
70351         function fixKey(key) {
70352                 return key.replace(/^\d/, '___$&').replace(forbiddenCharsRegex, '___')
70353         }
70354
70355         function _makeIEStorageElFunction() {
70356                 if (!doc || !doc.documentElement || !doc.documentElement.addBehavior) {
70357                         return null
70358                 }
70359                 var scriptTag = 'script',
70360                         storageOwner,
70361                         storageContainer,
70362                         storageEl;
70363
70364                 // Since #userData storage applies only to specific paths, we need to
70365                 // somehow link our data to a specific path.  We choose /favicon.ico
70366                 // as a pretty safe option, since all browsers already make a request to
70367                 // this URL anyway and being a 404 will not hurt us here.  We wrap an
70368                 // iframe pointing to the favicon in an ActiveXObject(htmlfile) object
70369                 // (see: http://msdn.microsoft.com/en-us/library/aa752574(v=VS.85).aspx)
70370                 // since the iframe access rules appear to allow direct access and
70371                 // manipulation of the document element, even for a 404 page.  This
70372                 // document can be used instead of the current document (which would
70373                 // have been limited to the current path) to perform #userData storage.
70374                 try {
70375                         /* global ActiveXObject */
70376                         storageContainer = new ActiveXObject('htmlfile');
70377                         storageContainer.open();
70378                         storageContainer.write('<'+scriptTag+'>document.w=window</'+scriptTag+'><iframe src="/favicon.ico"></iframe>');
70379                         storageContainer.close();
70380                         storageOwner = storageContainer.w.frames[0].document;
70381                         storageEl = storageOwner.createElement('div');
70382                 } catch(e) {
70383                         // somehow ActiveXObject instantiation failed (perhaps some special
70384                         // security settings or otherwse), fall back to per-path storage
70385                         storageEl = doc.createElement('div');
70386                         storageOwner = doc.body;
70387                 }
70388
70389                 return function(storeFunction) {
70390                         var args = [].slice.call(arguments, 0);
70391                         args.unshift(storageEl);
70392                         // See http://msdn.microsoft.com/en-us/library/ms531081(v=VS.85).aspx
70393                         // and http://msdn.microsoft.com/en-us/library/ms531424(v=VS.85).aspx
70394                         storageOwner.appendChild(storageEl);
70395                         storageEl.addBehavior('#default#userData');
70396                         storageEl.load(storageName);
70397                         storeFunction.apply(this, args);
70398                         storageOwner.removeChild(storageEl);
70399                         return
70400                 }
70401         }
70402
70403         // cookieStorage is useful Safari private browser mode, where localStorage
70404         // doesn't work but cookies do. This implementation is adopted from
70405         // https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage
70406
70407
70408         var Global$4 = util.Global;
70409         var trim$1 = util.trim;
70410
70411         var cookieStorage = {
70412                 name: 'cookieStorage',
70413                 read: read$3,
70414                 write: write$3,
70415                 each: each$5,
70416                 remove: remove$5,
70417                 clearAll: clearAll$3,
70418         };
70419
70420         var doc$1 = Global$4.document;
70421
70422         function read$3(key) {
70423                 if (!key || !_has(key)) { return null }
70424                 var regexpStr = "(?:^|.*;\\s*)" +
70425                         escape(key).replace(/[\-\.\+\*]/g, "\\$&") +
70426                         "\\s*\\=\\s*((?:[^;](?!;))*[^;]?).*";
70427                 return unescape(doc$1.cookie.replace(new RegExp(regexpStr), "$1"))
70428         }
70429
70430         function each$5(callback) {
70431                 var cookies = doc$1.cookie.split(/; ?/g);
70432                 for (var i = cookies.length - 1; i >= 0; i--) {
70433                         if (!trim$1(cookies[i])) {
70434                                 continue
70435                         }
70436                         var kvp = cookies[i].split('=');
70437                         var key = unescape(kvp[0]);
70438                         var val = unescape(kvp[1]);
70439                         callback(val, key);
70440                 }
70441         }
70442
70443         function write$3(key, data) {
70444                 if(!key) { return }
70445                 doc$1.cookie = escape(key) + "=" + escape(data) + "; expires=Tue, 19 Jan 2038 03:14:07 GMT; path=/";
70446         }
70447
70448         function remove$5(key) {
70449                 if (!key || !_has(key)) {
70450                         return
70451                 }
70452                 doc$1.cookie = escape(key) + "=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";
70453         }
70454
70455         function clearAll$3() {
70456                 each$5(function(_, key) {
70457                         remove$5(key);
70458                 });
70459         }
70460
70461         function _has(key) {
70462                 return (new RegExp("(?:^|;\\s*)" + escape(key).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=")).test(doc$1.cookie)
70463         }
70464
70465         var Global$5 = util.Global;
70466
70467         var sessionStorage_1 = {
70468                 name: 'sessionStorage',
70469                 read: read$4,
70470                 write: write$4,
70471                 each: each$6,
70472                 remove: remove$6,
70473                 clearAll: clearAll$4
70474         };
70475
70476         function sessionStorage() {
70477                 return Global$5.sessionStorage
70478         }
70479
70480         function read$4(key) {
70481                 return sessionStorage().getItem(key)
70482         }
70483
70484         function write$4(key, data) {
70485                 return sessionStorage().setItem(key, data)
70486         }
70487
70488         function each$6(fn) {
70489                 for (var i = sessionStorage().length - 1; i >= 0; i--) {
70490                         var key = sessionStorage().key(i);
70491                         fn(read$4(key), key);
70492                 }
70493         }
70494
70495         function remove$6(key) {
70496                 return sessionStorage().removeItem(key)
70497         }
70498
70499         function clearAll$4() {
70500                 return sessionStorage().clear()
70501         }
70502
70503         // memoryStorage is a useful last fallback to ensure that the store
70504         // is functions (meaning store.get(), store.set(), etc will all function).
70505         // However, stored values will not persist when the browser navigates to
70506         // a new page or reloads the current page.
70507
70508         var memoryStorage_1 = {
70509                 name: 'memoryStorage',
70510                 read: read$5,
70511                 write: write$5,
70512                 each: each$7,
70513                 remove: remove$7,
70514                 clearAll: clearAll$5,
70515         };
70516
70517         var memoryStorage = {};
70518
70519         function read$5(key) {
70520                 return memoryStorage[key]
70521         }
70522
70523         function write$5(key, data) {
70524                 memoryStorage[key] = data;
70525         }
70526
70527         function each$7(callback) {
70528                 for (var key in memoryStorage) {
70529                         if (memoryStorage.hasOwnProperty(key)) {
70530                                 callback(memoryStorage[key], key);
70531                         }
70532                 }
70533         }
70534
70535         function remove$7(key) {
70536                 delete memoryStorage[key];
70537         }
70538
70539         function clearAll$5(key) {
70540                 memoryStorage = {};
70541         }
70542
70543         var all = [
70544                 // Listed in order of usage preference
70545                 localStorage_1,
70546                 oldFFGlobalStorage,
70547                 oldIEUserDataStorage,
70548                 cookieStorage,
70549                 sessionStorage_1,
70550                 memoryStorage_1
70551         ];
70552
70553         /* eslint-disable */
70554
70555         //  json2.js
70556         //  2016-10-28
70557         //  Public Domain.
70558         //  NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
70559         //  See http://www.JSON.org/js.html
70560         //  This code should be minified before deployment.
70561         //  See http://javascript.crockford.com/jsmin.html
70562
70563         //  USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
70564         //  NOT CONTROL.
70565
70566         //  This file creates a global JSON object containing two methods: stringify
70567         //  and parse. This file provides the ES5 JSON capability to ES3 systems.
70568         //  If a project might run on IE8 or earlier, then this file should be included.
70569         //  This file does nothing on ES5 systems.
70570
70571         //      JSON.stringify(value, replacer, space)
70572         //          value       any JavaScript value, usually an object or array.
70573         //          replacer    an optional parameter that determines how object
70574         //                      values are stringified for objects. It can be a
70575         //                      function or an array of strings.
70576         //          space       an optional parameter that specifies the indentation
70577         //                      of nested structures. If it is omitted, the text will
70578         //                      be packed without extra whitespace. If it is a number,
70579         //                      it will specify the number of spaces to indent at each
70580         //                      level. If it is a string (such as "\t" or "&nbsp;"),
70581         //                      it contains the characters used to indent at each level.
70582         //          This method produces a JSON text from a JavaScript value.
70583         //          When an object value is found, if the object contains a toJSON
70584         //          method, its toJSON method will be called and the result will be
70585         //          stringified. A toJSON method does not serialize: it returns the
70586         //          value represented by the name/value pair that should be serialized,
70587         //          or undefined if nothing should be serialized. The toJSON method
70588         //          will be passed the key associated with the value, and this will be
70589         //          bound to the value.
70590
70591         //          For example, this would serialize Dates as ISO strings.
70592
70593         //              Date.prototype.toJSON = function (key) {
70594         //                  function f(n) {
70595         //                      // Format integers to have at least two digits.
70596         //                      return (n < 10)
70597         //                          ? "0" + n
70598         //                          : n;
70599         //                  }
70600         //                  return this.getUTCFullYear()   + "-" +
70601         //                       f(this.getUTCMonth() + 1) + "-" +
70602         //                       f(this.getUTCDate())      + "T" +
70603         //                       f(this.getUTCHours())     + ":" +
70604         //                       f(this.getUTCMinutes())   + ":" +
70605         //                       f(this.getUTCSeconds())   + "Z";
70606         //              };
70607
70608         //          You can provide an optional replacer method. It will be passed the
70609         //          key and value of each member, with this bound to the containing
70610         //          object. The value that is returned from your method will be
70611         //          serialized. If your method returns undefined, then the member will
70612         //          be excluded from the serialization.
70613
70614         //          If the replacer parameter is an array of strings, then it will be
70615         //          used to select the members to be serialized. It filters the results
70616         //          such that only members with keys listed in the replacer array are
70617         //          stringified.
70618
70619         //          Values that do not have JSON representations, such as undefined or
70620         //          functions, will not be serialized. Such values in objects will be
70621         //          dropped; in arrays they will be replaced with null. You can use
70622         //          a replacer function to replace those with JSON values.
70623
70624         //          JSON.stringify(undefined) returns undefined.
70625
70626         //          The optional space parameter produces a stringification of the
70627         //          value that is filled with line breaks and indentation to make it
70628         //          easier to read.
70629
70630         //          If the space parameter is a non-empty string, then that string will
70631         //          be used for indentation. If the space parameter is a number, then
70632         //          the indentation will be that many spaces.
70633
70634         //          Example:
70635
70636         //          text = JSON.stringify(["e", {pluribus: "unum"}]);
70637         //          // text is '["e",{"pluribus":"unum"}]'
70638
70639         //          text = JSON.stringify(["e", {pluribus: "unum"}], null, "\t");
70640         //          // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
70641
70642         //          text = JSON.stringify([new Date()], function (key, value) {
70643         //              return this[key] instanceof Date
70644         //                  ? "Date(" + this[key] + ")"
70645         //                  : value;
70646         //          });
70647         //          // text is '["Date(---current time---)"]'
70648
70649         //      JSON.parse(text, reviver)
70650         //          This method parses a JSON text to produce an object or array.
70651         //          It can throw a SyntaxError exception.
70652
70653         //          The optional reviver parameter is a function that can filter and
70654         //          transform the results. It receives each of the keys and values,
70655         //          and its return value is used instead of the original value.
70656         //          If it returns what it received, then the structure is not modified.
70657         //          If it returns undefined then the member is deleted.
70658
70659         //          Example:
70660
70661         //          // Parse the text. Values that look like ISO date strings will
70662         //          // be converted to Date objects.
70663
70664         //          myData = JSON.parse(text, function (key, value) {
70665         //              var a;
70666         //              if (typeof value === "string") {
70667         //                  a =
70668         //   /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
70669         //                  if (a) {
70670         //                      return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
70671         //                          +a[5], +a[6]));
70672         //                  }
70673         //              }
70674         //              return value;
70675         //          });
70676
70677         //          myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
70678         //              var d;
70679         //              if (typeof value === "string" &&
70680         //                      value.slice(0, 5) === "Date(" &&
70681         //                      value.slice(-1) === ")") {
70682         //                  d = new Date(value.slice(5, -1));
70683         //                  if (d) {
70684         //                      return d;
70685         //                  }
70686         //              }
70687         //              return value;
70688         //          });
70689
70690         //  This is a reference implementation. You are free to copy, modify, or
70691         //  redistribute.
70692
70693         /*jslint
70694             eval, for, this
70695         */
70696
70697         /*property
70698             JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
70699             getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
70700             lastIndex, length, parse, prototype, push, replace, slice, stringify,
70701             test, toJSON, toString, valueOf
70702         */
70703
70704
70705         // Create a JSON object only if one does not already exist. We create the
70706         // methods in a closure to avoid creating global variables.
70707
70708         if (typeof JSON !== "object") {
70709             JSON = {};
70710         }
70711
70712         (function () {
70713
70714             var rx_one = /^[\],:{}\s]*$/;
70715             var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
70716             var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
70717             var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
70718             var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
70719             var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
70720
70721             function f(n) {
70722                 // Format integers to have at least two digits.
70723                 return n < 10
70724                     ? "0" + n
70725                     : n;
70726             }
70727
70728             function this_value() {
70729                 return this.valueOf();
70730             }
70731
70732             if (typeof Date.prototype.toJSON !== "function") {
70733
70734                 Date.prototype.toJSON = function () {
70735
70736                     return isFinite(this.valueOf())
70737                         ? this.getUTCFullYear() + "-" +
70738                                 f(this.getUTCMonth() + 1) + "-" +
70739                                 f(this.getUTCDate()) + "T" +
70740                                 f(this.getUTCHours()) + ":" +
70741                                 f(this.getUTCMinutes()) + ":" +
70742                                 f(this.getUTCSeconds()) + "Z"
70743                         : null;
70744                 };
70745
70746                 Boolean.prototype.toJSON = this_value;
70747                 Number.prototype.toJSON = this_value;
70748                 String.prototype.toJSON = this_value;
70749             }
70750
70751             var gap;
70752             var indent;
70753             var meta;
70754             var rep;
70755
70756
70757             function quote(string) {
70758
70759         // If the string contains no control characters, no quote characters, and no
70760         // backslash characters, then we can safely slap some quotes around it.
70761         // Otherwise we must also replace the offending characters with safe escape
70762         // sequences.
70763
70764                 rx_escapable.lastIndex = 0;
70765                 return rx_escapable.test(string)
70766                     ? "\"" + string.replace(rx_escapable, function (a) {
70767                         var c = meta[a];
70768                         return typeof c === "string"
70769                             ? c
70770                             : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
70771                     }) + "\""
70772                     : "\"" + string + "\"";
70773             }
70774
70775
70776             function str(key, holder) {
70777
70778         // Produce a string from holder[key].
70779
70780                 var i;          // The loop counter.
70781                 var k;          // The member key.
70782                 var v;          // The member value.
70783                 var length;
70784                 var mind = gap;
70785                 var partial;
70786                 var value = holder[key];
70787
70788         // If the value has a toJSON method, call it to obtain a replacement value.
70789
70790                 if (value && typeof value === "object" &&
70791                         typeof value.toJSON === "function") {
70792                     value = value.toJSON(key);
70793                 }
70794
70795         // If we were called with a replacer function, then call the replacer to
70796         // obtain a replacement value.
70797
70798                 if (typeof rep === "function") {
70799                     value = rep.call(holder, key, value);
70800                 }
70801
70802         // What happens next depends on the value's type.
70803
70804                 switch (typeof value) {
70805                 case "string":
70806                     return quote(value);
70807
70808                 case "number":
70809
70810         // JSON numbers must be finite. Encode non-finite numbers as null.
70811
70812                     return isFinite(value)
70813                         ? String(value)
70814                         : "null";
70815
70816                 case "boolean":
70817                 case "null":
70818
70819         // If the value is a boolean or null, convert it to a string. Note:
70820         // typeof null does not produce "null". The case is included here in
70821         // the remote chance that this gets fixed someday.
70822
70823                     return String(value);
70824
70825         // If the type is "object", we might be dealing with an object or an array or
70826         // null.
70827
70828                 case "object":
70829
70830         // Due to a specification blunder in ECMAScript, typeof null is "object",
70831         // so watch out for that case.
70832
70833                     if (!value) {
70834                         return "null";
70835                     }
70836
70837         // Make an array to hold the partial results of stringifying this object value.
70838
70839                     gap += indent;
70840                     partial = [];
70841
70842         // Is the value an array?
70843
70844                     if (Object.prototype.toString.apply(value) === "[object Array]") {
70845
70846         // The value is an array. Stringify every element. Use null as a placeholder
70847         // for non-JSON values.
70848
70849                         length = value.length;
70850                         for (i = 0; i < length; i += 1) {
70851                             partial[i] = str(i, value) || "null";
70852                         }
70853
70854         // Join all of the elements together, separated with commas, and wrap them in
70855         // brackets.
70856
70857                         v = partial.length === 0
70858                             ? "[]"
70859                             : gap
70860                                 ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
70861                                 : "[" + partial.join(",") + "]";
70862                         gap = mind;
70863                         return v;
70864                     }
70865
70866         // If the replacer is an array, use it to select the members to be stringified.
70867
70868                     if (rep && typeof rep === "object") {
70869                         length = rep.length;
70870                         for (i = 0; i < length; i += 1) {
70871                             if (typeof rep[i] === "string") {
70872                                 k = rep[i];
70873                                 v = str(k, value);
70874                                 if (v) {
70875                                     partial.push(quote(k) + (
70876                                         gap
70877                                             ? ": "
70878                                             : ":"
70879                                     ) + v);
70880                                 }
70881                             }
70882                         }
70883                     } else {
70884
70885         // Otherwise, iterate through all of the keys in the object.
70886
70887                         for (k in value) {
70888                             if (Object.prototype.hasOwnProperty.call(value, k)) {
70889                                 v = str(k, value);
70890                                 if (v) {
70891                                     partial.push(quote(k) + (
70892                                         gap
70893                                             ? ": "
70894                                             : ":"
70895                                     ) + v);
70896                                 }
70897                             }
70898                         }
70899                     }
70900
70901         // Join all of the member texts together, separated with commas,
70902         // and wrap them in braces.
70903
70904                     v = partial.length === 0
70905                         ? "{}"
70906                         : gap
70907                             ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
70908                             : "{" + partial.join(",") + "}";
70909                     gap = mind;
70910                     return v;
70911                 }
70912             }
70913
70914         // If the JSON object does not yet have a stringify method, give it one.
70915
70916             if (typeof JSON.stringify !== "function") {
70917                 meta = {    // table of character substitutions
70918                     "\b": "\\b",
70919                     "\t": "\\t",
70920                     "\n": "\\n",
70921                     "\f": "\\f",
70922                     "\r": "\\r",
70923                     "\"": "\\\"",
70924                     "\\": "\\\\"
70925                 };
70926                 JSON.stringify = function (value, replacer, space) {
70927
70928         // The stringify method takes a value and an optional replacer, and an optional
70929         // space parameter, and returns a JSON text. The replacer can be a function
70930         // that can replace values, or an array of strings that will select the keys.
70931         // A default replacer method can be provided. Use of the space parameter can
70932         // produce text that is more easily readable.
70933
70934                     var i;
70935                     gap = "";
70936                     indent = "";
70937
70938         // If the space parameter is a number, make an indent string containing that
70939         // many spaces.
70940
70941                     if (typeof space === "number") {
70942                         for (i = 0; i < space; i += 1) {
70943                             indent += " ";
70944                         }
70945
70946         // If the space parameter is a string, it will be used as the indent string.
70947
70948                     } else if (typeof space === "string") {
70949                         indent = space;
70950                     }
70951
70952         // If there is a replacer, it must be a function or an array.
70953         // Otherwise, throw an error.
70954
70955                     rep = replacer;
70956                     if (replacer && typeof replacer !== "function" &&
70957                             (typeof replacer !== "object" ||
70958                             typeof replacer.length !== "number")) {
70959                         throw new Error("JSON.stringify");
70960                     }
70961
70962         // Make a fake root object containing our value under the key of "".
70963         // Return the result of stringifying the value.
70964
70965                     return str("", {"": value});
70966                 };
70967             }
70968
70969
70970         // If the JSON object does not yet have a parse method, give it one.
70971
70972             if (typeof JSON.parse !== "function") {
70973                 JSON.parse = function (text, reviver) {
70974
70975         // The parse method takes a text and an optional reviver function, and returns
70976         // a JavaScript value if the text is a valid JSON text.
70977
70978                     var j;
70979
70980                     function walk(holder, key) {
70981
70982         // The walk method is used to recursively walk the resulting structure so
70983         // that modifications can be made.
70984
70985                         var k;
70986                         var v;
70987                         var value = holder[key];
70988                         if (value && typeof value === "object") {
70989                             for (k in value) {
70990                                 if (Object.prototype.hasOwnProperty.call(value, k)) {
70991                                     v = walk(value, k);
70992                                     if (v !== undefined) {
70993                                         value[k] = v;
70994                                     } else {
70995                                         delete value[k];
70996                                     }
70997                                 }
70998                             }
70999                         }
71000                         return reviver.call(holder, key, value);
71001                     }
71002
71003
71004         // Parsing happens in four stages. In the first stage, we replace certain
71005         // Unicode characters with escape sequences. JavaScript handles many characters
71006         // incorrectly, either silently deleting them, or treating them as line endings.
71007
71008                     text = String(text);
71009                     rx_dangerous.lastIndex = 0;
71010                     if (rx_dangerous.test(text)) {
71011                         text = text.replace(rx_dangerous, function (a) {
71012                             return "\\u" +
71013                                     ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
71014                         });
71015                     }
71016
71017         // In the second stage, we run the text against regular expressions that look
71018         // for non-JSON patterns. We are especially concerned with "()" and "new"
71019         // because they can cause invocation, and "=" because it can cause mutation.
71020         // But just to be safe, we want to reject all unexpected forms.
71021
71022         // We split the second stage into 4 regexp operations in order to work around
71023         // crippling inefficiencies in IE's and Safari's regexp engines. First we
71024         // replace the JSON backslash pairs with "@" (a non-JSON character). Second, we
71025         // replace all simple value tokens with "]" characters. Third, we delete all
71026         // open brackets that follow a colon or comma or that begin the text. Finally,
71027         // we look to see that the remaining characters are only whitespace or "]" or
71028         // "," or ":" or "{" or "}". If that is so, then the text is safe for eval.
71029
71030                     if (
71031                         rx_one.test(
71032                             text
71033                                 .replace(rx_two, "@")
71034                                 .replace(rx_three, "]")
71035                                 .replace(rx_four, "")
71036                         )
71037                     ) {
71038
71039         // In the third stage we use the eval function to compile the text into a
71040         // JavaScript structure. The "{" operator is subject to a syntactic ambiguity
71041         // in JavaScript: it can begin a block or an object literal. We wrap the text
71042         // in parens to eliminate the ambiguity.
71043
71044                         j = eval("(" + text + ")");
71045
71046         // In the optional fourth stage, we recursively walk the new structure, passing
71047         // each name/value pair to a reviver function for possible transformation.
71048
71049                         return (typeof reviver === "function")
71050                             ? walk({"": j}, "")
71051                             : j;
71052                     }
71053
71054         // If the text is not JSON parseable, then a SyntaxError is thrown.
71055
71056                     throw new SyntaxError("JSON.parse");
71057                 };
71058             }
71059         }());
71060
71061         var json2 = json2Plugin;
71062
71063         function json2Plugin() {
71064                 
71065                 return {}
71066         }
71067
71068         var plugins = [json2];
71069
71070         var store_legacy = storeEngine.createStore(all, plugins);
71071
71072         // # osm-auth
71073         //
71074         // This code is only compatible with IE10+ because the [XDomainRequest](http://bit.ly/LfO7xo)
71075         // object, IE<10's idea of [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing),
71076         // does not support custom headers, which this uses everywhere.
71077         var osmAuth = function(o) {
71078
71079             var oauth = {};
71080
71081             // authenticated users will also have a request token secret, but it's
71082             // not used in transactions with the server
71083             oauth.authenticated = function() {
71084                 return !!(token('oauth_token') && token('oauth_token_secret'));
71085             };
71086
71087             oauth.logout = function() {
71088                 token('oauth_token', '');
71089                 token('oauth_token_secret', '');
71090                 token('oauth_request_token_secret', '');
71091                 return oauth;
71092             };
71093
71094             // TODO: detect lack of click event
71095             oauth.authenticate = function(callback) {
71096                 if (oauth.authenticated()) { return callback(); }
71097
71098                 oauth.logout();
71099
71100                 // ## Getting a request token
71101                 var params = timenonce(getAuth(o)),
71102                     url = o.url + '/oauth/request_token';
71103
71104                 params.oauth_signature = ohauth_1.signature(
71105                     o.oauth_secret, '',
71106                     ohauth_1.baseString('POST', url, params));
71107
71108                 if (!o.singlepage) {
71109                     // Create a 600x550 popup window in the center of the screen
71110                     var w = 600, h = 550,
71111                         settings = [
71112                             ['width', w], ['height', h],
71113                             ['left', screen.width / 2 - w / 2],
71114                             ['top', screen.height / 2 - h / 2]].map(function(x) {
71115                                 return x.join('=');
71116                             }).join(','),
71117                         popup = window.open('about:blank', 'oauth_window', settings);
71118                 }
71119
71120                 // Request a request token. When this is complete, the popup
71121                 // window is redirected to OSM's authorization page.
71122                 ohauth_1.xhr('POST', url, params, null, {}, reqTokenDone);
71123                 o.loading();
71124
71125                 function reqTokenDone(err, xhr) {
71126                     o.done();
71127                     if (err) { return callback(err); }
71128                     var resp = ohauth_1.stringQs(xhr.response);
71129                     token('oauth_request_token_secret', resp.oauth_token_secret);
71130                     var authorize_url = o.url + '/oauth/authorize?' + ohauth_1.qsString({
71131                         oauth_token: resp.oauth_token,
71132                         oauth_callback: resolveUrl(o.landing)
71133                     });
71134
71135                     if (o.singlepage) {
71136                         location.href = authorize_url;
71137                     } else {
71138                         popup.location = authorize_url;
71139                     }
71140                 }
71141
71142                 // Called by a function in a landing page, in the popup window. The
71143                 // window closes itself.
71144                 window.authComplete = function(token) {
71145                     var oauth_token = ohauth_1.stringQs(token.split('?')[1]);
71146                     get_access_token(oauth_token.oauth_token);
71147                     delete window.authComplete;
71148                 };
71149
71150                 // ## Getting an request token
71151                 //
71152                 // At this point we have an `oauth_token`, brought in from a function
71153                 // call on a landing page popup.
71154                 function get_access_token(oauth_token) {
71155                     var url = o.url + '/oauth/access_token',
71156                         params = timenonce(getAuth(o)),
71157                         request_token_secret = token('oauth_request_token_secret');
71158                     params.oauth_token = oauth_token;
71159                     params.oauth_signature = ohauth_1.signature(
71160                         o.oauth_secret,
71161                         request_token_secret,
71162                         ohauth_1.baseString('POST', url, params));
71163
71164                     // ## Getting an access token
71165                     //
71166                     // The final token required for authentication. At this point
71167                     // we have a `request token secret`
71168                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
71169                     o.loading();
71170                 }
71171
71172                 function accessTokenDone(err, xhr) {
71173                     o.done();
71174                     if (err) { return callback(err); }
71175                     var access_token = ohauth_1.stringQs(xhr.response);
71176                     token('oauth_token', access_token.oauth_token);
71177                     token('oauth_token_secret', access_token.oauth_token_secret);
71178                     callback(null, oauth);
71179                 }
71180             };
71181
71182             oauth.bootstrapToken = function(oauth_token, callback) {
71183                 // ## Getting an request token
71184                 // At this point we have an `oauth_token`, brought in from a function
71185                 // call on a landing page popup.
71186                 function get_access_token(oauth_token) {
71187                     var url = o.url + '/oauth/access_token',
71188                         params = timenonce(getAuth(o)),
71189                         request_token_secret = token('oauth_request_token_secret');
71190                     params.oauth_token = oauth_token;
71191                     params.oauth_signature = ohauth_1.signature(
71192                         o.oauth_secret,
71193                         request_token_secret,
71194                         ohauth_1.baseString('POST', url, params));
71195
71196                     // ## Getting an access token
71197                     // The final token required for authentication. At this point
71198                     // we have a `request token secret`
71199                     ohauth_1.xhr('POST', url, params, null, {}, accessTokenDone);
71200                     o.loading();
71201                 }
71202
71203                 function accessTokenDone(err, xhr) {
71204                     o.done();
71205                     if (err) { return callback(err); }
71206                     var access_token = ohauth_1.stringQs(xhr.response);
71207                     token('oauth_token', access_token.oauth_token);
71208                     token('oauth_token_secret', access_token.oauth_token_secret);
71209                     callback(null, oauth);
71210                 }
71211
71212                 get_access_token(oauth_token);
71213             };
71214
71215             // # xhr
71216             //
71217             // A single XMLHttpRequest wrapper that does authenticated calls if the
71218             // user has logged in.
71219             oauth.xhr = function(options, callback) {
71220                 if (!oauth.authenticated()) {
71221                     if (o.auto) {
71222                         return oauth.authenticate(run);
71223                     } else {
71224                         callback('not authenticated', null);
71225                         return;
71226                     }
71227                 } else {
71228                     return run();
71229                 }
71230
71231                 function run() {
71232                     var params = timenonce(getAuth(o)),
71233                         oauth_token_secret = token('oauth_token_secret'),
71234                         url = (options.prefix !== false) ? o.url + options.path : options.path,
71235                         url_parts = url.replace(/#.*$/, '').split('?', 2),
71236                         base_url = url_parts[0],
71237                         query = (url_parts.length === 2) ? url_parts[1] : '';
71238
71239                     // https://tools.ietf.org/html/rfc5849#section-3.4.1.3.1
71240                     if ((!options.options || !options.options.header ||
71241                         options.options.header['Content-Type'] === 'application/x-www-form-urlencoded') &&
71242                         options.content) {
71243                         params = immutable(params, ohauth_1.stringQs(options.content));
71244                     }
71245
71246                     params.oauth_token = token('oauth_token');
71247                     params.oauth_signature = ohauth_1.signature(
71248                         o.oauth_secret,
71249                         oauth_token_secret,
71250                         ohauth_1.baseString(options.method, base_url, immutable(params, ohauth_1.stringQs(query)))
71251                     );
71252
71253                     return ohauth_1.xhr(options.method, url, params, options.content, options.options, done);
71254                 }
71255
71256                 function done(err, xhr) {
71257                     if (err) { return callback(err); }
71258                     else if (xhr.responseXML) { return callback(err, xhr.responseXML); }
71259                     else { return callback(err, xhr.response); }
71260                 }
71261             };
71262
71263             // pre-authorize this object, if we can just get a token and token_secret
71264             // from the start
71265             oauth.preauth = function(c) {
71266                 if (!c) { return; }
71267                 if (c.oauth_token) { token('oauth_token', c.oauth_token); }
71268                 if (c.oauth_token_secret) { token('oauth_token_secret', c.oauth_token_secret); }
71269                 return oauth;
71270             };
71271
71272             oauth.options = function(_) {
71273                 if (!arguments.length) { return o; }
71274
71275                 o = _;
71276                 o.url = o.url || 'https://www.openstreetmap.org';
71277                 o.landing = o.landing || 'land.html';
71278                 o.singlepage = o.singlepage || false;
71279
71280                 // Optional loading and loading-done functions for nice UI feedback.
71281                 // by default, no-ops
71282                 o.loading = o.loading || function() {};
71283                 o.done = o.done || function() {};
71284
71285                 return oauth.preauth(o);
71286             };
71287
71288             // 'stamp' an authentication object from `getAuth()`
71289             // with a [nonce](http://en.wikipedia.org/wiki/Cryptographic_nonce)
71290             // and timestamp
71291             function timenonce(o) {
71292                 o.oauth_timestamp = ohauth_1.timestamp();
71293                 o.oauth_nonce = ohauth_1.nonce();
71294                 return o;
71295             }
71296
71297             // get/set tokens. These are prefixed with the base URL so that `osm-auth`
71298             // can be used with multiple APIs and the keys in `localStorage`
71299             // will not clash
71300             var token;
71301
71302             if (store_legacy.enabled) {
71303                 token = function (x, y) {
71304                     if (arguments.length === 1) { return store_legacy.get(o.url + x); }
71305                     else if (arguments.length === 2) { return store_legacy.set(o.url + x, y); }
71306                 };
71307             } else {
71308                 var storage = {};
71309                 token = function (x, y) {
71310                     if (arguments.length === 1) { return storage[o.url + x]; }
71311                     else if (arguments.length === 2) { return storage[o.url + x] = y; }
71312                 };
71313             }
71314
71315             // Get an authentication object. If you just add and remove properties
71316             // from a single object, you'll need to use `delete` to make sure that
71317             // it doesn't contain undesired properties for authentication
71318             function getAuth(o) {
71319                 return {
71320                     oauth_consumer_key: o.oauth_consumer_key,
71321                     oauth_signature_method: 'HMAC-SHA1'
71322                 };
71323             }
71324
71325             // potentially pre-authorize
71326             oauth.options(o);
71327
71328             return oauth;
71329         };
71330
71331         var JXON = new (function () {
71332           var
71333             sValueProp = 'keyValue', sAttributesProp = 'keyAttributes', sAttrPref = '@', /* you can customize these values */
71334             aCache = [], rIsNull = /^\s*$/, rIsBool = /^(?:true|false)$/i;
71335
71336           function parseText (sValue) {
71337             if (rIsNull.test(sValue)) { return null; }
71338             if (rIsBool.test(sValue)) { return sValue.toLowerCase() === 'true'; }
71339             if (isFinite(sValue)) { return parseFloat(sValue); }
71340             if (isFinite(Date.parse(sValue))) { return new Date(sValue); }
71341             return sValue;
71342           }
71343
71344           function EmptyTree () { }
71345           EmptyTree.prototype.toString = function () { return 'null'; };
71346           EmptyTree.prototype.valueOf = function () { return null; };
71347
71348           function objectify (vValue) {
71349             return vValue === null ? new EmptyTree() : vValue instanceof Object ? vValue : new vValue.constructor(vValue);
71350           }
71351
71352           function createObjTree (oParentNode, nVerb, bFreeze, bNesteAttr) {
71353             var
71354               nLevelStart = aCache.length, bChildren = oParentNode.hasChildNodes(),
71355               bAttributes = oParentNode.hasAttributes(), bHighVerb = Boolean(nVerb & 2);
71356
71357             var
71358               sProp, vContent, nLength = 0, sCollectedTxt = '',
71359               vResult = bHighVerb ? {} : /* put here the default value for empty nodes: */ true;
71360
71361             if (bChildren) {
71362               for (var oNode, nItem = 0; nItem < oParentNode.childNodes.length; nItem++) {
71363                 oNode = oParentNode.childNodes.item(nItem);
71364                 if (oNode.nodeType === 4) { sCollectedTxt += oNode.nodeValue; } /* nodeType is 'CDATASection' (4) */
71365                 else if (oNode.nodeType === 3) { sCollectedTxt += oNode.nodeValue.trim(); } /* nodeType is 'Text' (3) */
71366                 else if (oNode.nodeType === 1 && !oNode.prefix) { aCache.push(oNode); } /* nodeType is 'Element' (1) */
71367               }
71368             }
71369
71370             var nLevelEnd = aCache.length, vBuiltVal = parseText(sCollectedTxt);
71371
71372             if (!bHighVerb && (bChildren || bAttributes)) { vResult = nVerb === 0 ? objectify(vBuiltVal) : {}; }
71373
71374             for (var nElId = nLevelStart; nElId < nLevelEnd; nElId++) {
71375               sProp = aCache[nElId].nodeName.toLowerCase();
71376               vContent = createObjTree(aCache[nElId], nVerb, bFreeze, bNesteAttr);
71377               if (vResult.hasOwnProperty(sProp)) {
71378                 if (vResult[sProp].constructor !== Array) { vResult[sProp] = [vResult[sProp]]; }
71379                 vResult[sProp].push(vContent);
71380               } else {
71381                 vResult[sProp] = vContent;
71382                 nLength++;
71383               }
71384             }
71385
71386             if (bAttributes) {
71387               var
71388                 nAttrLen = oParentNode.attributes.length,
71389                 sAPrefix = bNesteAttr ? '' : sAttrPref, oAttrParent = bNesteAttr ? {} : vResult;
71390
71391               for (var oAttrib, nAttrib = 0; nAttrib < nAttrLen; nLength++, nAttrib++) {
71392                 oAttrib = oParentNode.attributes.item(nAttrib);
71393                 oAttrParent[sAPrefix + oAttrib.name.toLowerCase()] = parseText(oAttrib.value.trim());
71394               }
71395
71396               if (bNesteAttr) {
71397                 if (bFreeze) { Object.freeze(oAttrParent); }
71398                 vResult[sAttributesProp] = oAttrParent;
71399                 nLength -= nAttrLen - 1;
71400               }
71401             }
71402
71403             if (nVerb === 3 || (nVerb === 2 || nVerb === 1 && nLength > 0) && sCollectedTxt) {
71404               vResult[sValueProp] = vBuiltVal;
71405             } else if (!bHighVerb && nLength === 0 && sCollectedTxt) {
71406               vResult = vBuiltVal;
71407             }
71408
71409             if (bFreeze && (bHighVerb || nLength > 0)) { Object.freeze(vResult); }
71410
71411             aCache.length = nLevelStart;
71412
71413             return vResult;
71414           }
71415
71416           function loadObjTree (oXMLDoc, oParentEl, oParentObj) {
71417             var vValue, oChild;
71418
71419             if (oParentObj instanceof String || oParentObj instanceof Number || oParentObj instanceof Boolean) {
71420               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toString())); /* verbosity level is 0 */
71421             } else if (oParentObj.constructor === Date) {
71422               oParentEl.appendChild(oXMLDoc.createTextNode(oParentObj.toGMTString()));    
71423             }
71424
71425             for (var sName in oParentObj) {
71426               vValue = oParentObj[sName];
71427               if (isFinite(sName) || vValue instanceof Function) { continue; } /* verbosity level is 0 */
71428               if (sName === sValueProp) {
71429                 if (vValue !== null && vValue !== true) { oParentEl.appendChild(oXMLDoc.createTextNode(vValue.constructor === Date ? vValue.toGMTString() : String(vValue))); }
71430               } else if (sName === sAttributesProp) { /* verbosity level is 3 */
71431                 for (var sAttrib in vValue) { oParentEl.setAttribute(sAttrib, vValue[sAttrib]); }
71432               } else if (sName.charAt(0) === sAttrPref) {
71433                 oParentEl.setAttribute(sName.slice(1), vValue);
71434               } else if (vValue.constructor === Array) {
71435                 for (var nItem = 0; nItem < vValue.length; nItem++) {
71436                   oChild = oXMLDoc.createElement(sName);
71437                   loadObjTree(oXMLDoc, oChild, vValue[nItem]);
71438                   oParentEl.appendChild(oChild);
71439                 }
71440               } else {
71441                 oChild = oXMLDoc.createElement(sName);
71442                 if (vValue instanceof Object) {
71443                   loadObjTree(oXMLDoc, oChild, vValue);
71444                 } else if (vValue !== null && vValue !== true) {
71445                   oChild.appendChild(oXMLDoc.createTextNode(vValue.toString()));
71446                 }
71447                 oParentEl.appendChild(oChild);
71448              }
71449            }
71450           }
71451
71452           this.build = function (oXMLParent, nVerbosity /* optional */, bFreeze /* optional */, bNesteAttributes /* optional */) {
71453             var _nVerb = arguments.length > 1 && typeof nVerbosity === 'number' ? nVerbosity & 3 : /* put here the default verbosity level: */ 1;
71454             return createObjTree(oXMLParent, _nVerb, bFreeze || false, arguments.length > 3 ? bNesteAttributes : _nVerb === 3);    
71455           };
71456
71457           this.unbuild = function (oObjTree) {    
71458             var oNewDoc = document.implementation.createDocument('', '', null);
71459             loadObjTree(oNewDoc, oNewDoc, oObjTree);
71460             return oNewDoc;
71461           };
71462
71463           this.stringify = function (oObjTree) {
71464             return (new XMLSerializer()).serializeToString(JXON.unbuild(oObjTree));
71465           };
71466         })();
71467
71468         // var myObject = JXON.build(doc);
71469         // we got our javascript object! try: alert(JSON.stringify(myObject));
71470
71471         // var newDoc = JXON.unbuild(myObject);
71472         // we got our Document instance! try: alert((new XMLSerializer()).serializeToString(newDoc));
71473
71474         var tiler$4 = utilTiler();
71475         var dispatch$5 = dispatch('apiStatusChange', 'authLoading', 'authDone', 'change', 'loading', 'loaded', 'loadedNotes');
71476         var urlroot = 'https://www.openstreetmap.org';
71477         var oauth = osmAuth({
71478             url: urlroot,
71479             oauth_consumer_key: '5A043yRSEugj4DJ5TljuapfnrflWDte8jTOcWLlT',
71480             oauth_secret: 'aB3jKq1TRsCOUrfOIZ6oQMEDmv2ptV76PA54NGLL',
71481             loading: authLoading,
71482             done: authDone
71483         });
71484
71485         var _blacklists = ['.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*'];
71486         var _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: new RBush() };
71487         var _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: new RBush() };
71488         var _userCache = { toLoad: {}, user: {} };
71489         var _cachedApiStatus;
71490         var _changeset = {};
71491
71492         var _deferred = new Set();
71493         var _connectionID = 1;
71494         var _tileZoom = 16;
71495         var _noteZoom = 12;
71496         var _rateLimitError;
71497         var _userChangesets;
71498         var _userDetails;
71499         var _off;
71500
71501
71502         function authLoading() {
71503             dispatch$5.call('authLoading');
71504         }
71505
71506
71507         function authDone() {
71508             dispatch$5.call('authDone');
71509         }
71510
71511
71512         function abortRequest$4(controllerOrXHR) {
71513             if (controllerOrXHR) {
71514                 controllerOrXHR.abort();
71515             }
71516         }
71517
71518
71519         function hasInflightRequests(cache) {
71520             return Object.keys(cache.inflight).length;
71521         }
71522
71523
71524         function abortUnwantedRequests$2(cache, visibleTiles) {
71525             Object.keys(cache.inflight).forEach(function(k) {
71526                 if (cache.toLoad[k]) { return; }
71527                 if (visibleTiles.find(function(tile) { return k === tile.id; })) { return; }
71528
71529                 abortRequest$4(cache.inflight[k]);
71530                 delete cache.inflight[k];
71531             });
71532         }
71533
71534
71535         function getLoc(attrs) {
71536             var lon = attrs.lon && attrs.lon.value;
71537             var lat = attrs.lat && attrs.lat.value;
71538             return [parseFloat(lon), parseFloat(lat)];
71539         }
71540
71541
71542         function getNodes(obj) {
71543             var elems = obj.getElementsByTagName('nd');
71544             var nodes = new Array(elems.length);
71545             for (var i = 0, l = elems.length; i < l; i++) {
71546                 nodes[i] = 'n' + elems[i].attributes.ref.value;
71547             }
71548             return nodes;
71549         }
71550
71551         function getTags(obj) {
71552             var elems = obj.getElementsByTagName('tag');
71553             var tags = {};
71554             for (var i = 0, l = elems.length; i < l; i++) {
71555                 var attrs = elems[i].attributes;
71556                 tags[attrs.k.value] = attrs.v.value;
71557             }
71558
71559             return tags;
71560         }
71561
71562
71563         function getMembers(obj) {
71564             var elems = obj.getElementsByTagName('member');
71565             var members = new Array(elems.length);
71566             for (var i = 0, l = elems.length; i < l; i++) {
71567                 var attrs = elems[i].attributes;
71568                 members[i] = {
71569                     id: attrs.type.value[0] + attrs.ref.value,
71570                     type: attrs.type.value,
71571                     role: attrs.role.value
71572                 };
71573             }
71574             return members;
71575         }
71576
71577         function getVisible(attrs) {
71578             return (!attrs.visible || attrs.visible.value !== 'false');
71579         }
71580
71581
71582         function parseComments(comments) {
71583             var parsedComments = [];
71584
71585             // for each comment
71586             for (var i = 0; i < comments.length; i++) {
71587                 var comment = comments[i];
71588                 if (comment.nodeName === 'comment') {
71589                     var childNodes = comment.childNodes;
71590                     var parsedComment = {};
71591
71592                     for (var j = 0; j < childNodes.length; j++) {
71593                         var node = childNodes[j];
71594                         var nodeName = node.nodeName;
71595                         if (nodeName === '#text') { continue; }
71596                         parsedComment[nodeName] = node.textContent;
71597
71598                         if (nodeName === 'uid') {
71599                             var uid = node.textContent;
71600                             if (uid && !_userCache.user[uid]) {
71601                                 _userCache.toLoad[uid] = true;
71602                             }
71603                         }
71604                     }
71605
71606                     if (parsedComment) {
71607                         parsedComments.push(parsedComment);
71608                     }
71609                 }
71610             }
71611             return parsedComments;
71612         }
71613
71614
71615         function encodeNoteRtree(note) {
71616             return {
71617                 minX: note.loc[0],
71618                 minY: note.loc[1],
71619                 maxX: note.loc[0],
71620                 maxY: note.loc[1],
71621                 data: note
71622             };
71623         }
71624
71625         var parsers = {
71626             node: function nodeData(obj, uid) {
71627                 var attrs = obj.attributes;
71628                 return new osmNode({
71629                     id: uid,
71630                     visible: getVisible(attrs),
71631                     version: attrs.version.value,
71632                     changeset: attrs.changeset && attrs.changeset.value,
71633                     timestamp: attrs.timestamp && attrs.timestamp.value,
71634                     user: attrs.user && attrs.user.value,
71635                     uid: attrs.uid && attrs.uid.value,
71636                     loc: getLoc(attrs),
71637                     tags: getTags(obj)
71638                 });
71639             },
71640
71641             way: function wayData(obj, uid) {
71642                 var attrs = obj.attributes;
71643                 return new osmWay({
71644                     id: uid,
71645                     visible: getVisible(attrs),
71646                     version: attrs.version.value,
71647                     changeset: attrs.changeset && attrs.changeset.value,
71648                     timestamp: attrs.timestamp && attrs.timestamp.value,
71649                     user: attrs.user && attrs.user.value,
71650                     uid: attrs.uid && attrs.uid.value,
71651                     tags: getTags(obj),
71652                     nodes: getNodes(obj),
71653                 });
71654             },
71655
71656             relation: function relationData(obj, uid) {
71657                 var attrs = obj.attributes;
71658                 return new osmRelation({
71659                     id: uid,
71660                     visible: getVisible(attrs),
71661                     version: attrs.version.value,
71662                     changeset: attrs.changeset && attrs.changeset.value,
71663                     timestamp: attrs.timestamp && attrs.timestamp.value,
71664                     user: attrs.user && attrs.user.value,
71665                     uid: attrs.uid && attrs.uid.value,
71666                     tags: getTags(obj),
71667                     members: getMembers(obj)
71668                 });
71669             },
71670
71671             note: function parseNote(obj, uid) {
71672                 var attrs = obj.attributes;
71673                 var childNodes = obj.childNodes;
71674                 var props = {};
71675
71676                 props.id = uid;
71677                 props.loc = getLoc(attrs);
71678
71679                 // if notes are coincident, move them apart slightly
71680                 var coincident = false;
71681                 var epsilon = 0.00001;
71682                 do {
71683                     if (coincident) {
71684                         props.loc = geoVecAdd(props.loc, [epsilon, epsilon]);
71685                     }
71686                     var bbox = geoExtent(props.loc).bbox();
71687                     coincident = _noteCache.rtree.search(bbox).length;
71688                 } while (coincident);
71689
71690                 // parse note contents
71691                 for (var i = 0; i < childNodes.length; i++) {
71692                     var node = childNodes[i];
71693                     var nodeName = node.nodeName;
71694                     if (nodeName === '#text') { continue; }
71695
71696                     // if the element is comments, parse the comments
71697                     if (nodeName === 'comments') {
71698                         props[nodeName] = parseComments(node.childNodes);
71699                     } else {
71700                         props[nodeName] = node.textContent;
71701                     }
71702                 }
71703
71704                 var note = new osmNote(props);
71705                 var item = encodeNoteRtree(note);
71706                 _noteCache.note[note.id] = note;
71707                 _noteCache.rtree.insert(item);
71708
71709                 return note;
71710             },
71711
71712             user: function parseUser(obj, uid) {
71713                 var attrs = obj.attributes;
71714                 var user = {
71715                     id: uid,
71716                     display_name: attrs.display_name && attrs.display_name.value,
71717                     account_created: attrs.account_created && attrs.account_created.value,
71718                     changesets_count: '0',
71719                     active_blocks: '0'
71720                 };
71721
71722                 var img = obj.getElementsByTagName('img');
71723                 if (img && img[0] && img[0].getAttribute('href')) {
71724                     user.image_url = img[0].getAttribute('href');
71725                 }
71726
71727                 var changesets = obj.getElementsByTagName('changesets');
71728                 if (changesets && changesets[0] && changesets[0].getAttribute('count')) {
71729                     user.changesets_count = changesets[0].getAttribute('count');
71730                 }
71731
71732                 var blocks = obj.getElementsByTagName('blocks');
71733                 if (blocks && blocks[0]) {
71734                     var received = blocks[0].getElementsByTagName('received');
71735                     if (received && received[0] && received[0].getAttribute('active')) {
71736                         user.active_blocks = received[0].getAttribute('active');
71737                     }
71738                 }
71739
71740                 _userCache.user[uid] = user;
71741                 delete _userCache.toLoad[uid];
71742                 return user;
71743             }
71744         };
71745
71746
71747         function parseXML(xml, callback, options) {
71748             options = Object.assign({ skipSeen: true }, options);
71749             if (!xml || !xml.childNodes) {
71750                 return callback({ message: 'No XML', status: -1 });
71751             }
71752
71753             var root = xml.childNodes[0];
71754             var children = root.childNodes;
71755
71756             var handle = window.requestIdleCallback(function() {
71757                 var results = [];
71758                 var result;
71759                 for (var i = 0; i < children.length; i++) {
71760                     result = parseChild(children[i]);
71761                     if (result) { results.push(result); }
71762                 }
71763                 callback(null, results);
71764             });
71765
71766             _deferred.add(handle);
71767
71768
71769             function parseChild(child) {
71770                 var parser = parsers[child.nodeName];
71771                 if (!parser) { return null; }
71772
71773                 var uid;
71774                 if (child.nodeName === 'user') {
71775                     uid = child.attributes.id.value;
71776                     if (options.skipSeen && _userCache.user[uid]) {
71777                         delete _userCache.toLoad[uid];
71778                         return null;
71779                     }
71780
71781                 } else if (child.nodeName === 'note') {
71782                     uid = child.getElementsByTagName('id')[0].textContent;
71783
71784                 } else {
71785                     uid = osmEntity.id.fromOSM(child.nodeName, child.attributes.id.value);
71786                     if (options.skipSeen) {
71787                         if (_tileCache.seen[uid]) { return null; }  // avoid reparsing a "seen" entity
71788                         _tileCache.seen[uid] = true;
71789                     }
71790                 }
71791
71792                 return parser(child, uid);
71793             }
71794         }
71795
71796
71797         // replace or remove note from rtree
71798         function updateRtree$2(item, replace) {
71799             _noteCache.rtree.remove(item, function isEql(a, b) { return a.data.id === b.data.id; });
71800
71801             if (replace) {
71802                 _noteCache.rtree.insert(item);
71803             }
71804         }
71805
71806
71807         function wrapcb(thisArg, callback, cid) {
71808             return function(err, result) {
71809                 if (err) {
71810                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
71811                     if (err.status === 400 || err.status === 401 || err.status === 403) {
71812                         thisArg.logout();
71813                     }
71814                     return callback.call(thisArg, err);
71815
71816                 } else if (thisArg.getConnectionId() !== cid) {
71817                     return callback.call(thisArg, { message: 'Connection Switched', status: -1 });
71818
71819                 } else {
71820                     return callback.call(thisArg, err, result);
71821                 }
71822             };
71823         }
71824
71825
71826         var serviceOsm = {
71827
71828             init: function() {
71829                 utilRebind(this, dispatch$5, 'on');
71830             },
71831
71832
71833             reset: function() {
71834                 Array.from(_deferred).forEach(function(handle) {
71835                     window.cancelIdleCallback(handle);
71836                     _deferred.delete(handle);
71837                 });
71838
71839                 _connectionID++;
71840                 _userChangesets = undefined;
71841                 _userDetails = undefined;
71842                 _rateLimitError = undefined;
71843
71844                 Object.values(_tileCache.inflight).forEach(abortRequest$4);
71845                 Object.values(_noteCache.inflight).forEach(abortRequest$4);
71846                 Object.values(_noteCache.inflightPost).forEach(abortRequest$4);
71847                 if (_changeset.inflight) { abortRequest$4(_changeset.inflight); }
71848
71849                 _tileCache = { toLoad: {}, loaded: {}, inflight: {}, seen: {}, rtree: new RBush() };
71850                 _noteCache = { toLoad: {}, loaded: {}, inflight: {}, inflightPost: {}, note: {}, closed: {}, rtree: new RBush() };
71851                 _userCache = { toLoad: {}, user: {} };
71852                 _cachedApiStatus = undefined;
71853                 _changeset = {};
71854
71855                 return this;
71856             },
71857
71858
71859             getConnectionId: function() {
71860                 return _connectionID;
71861             },
71862
71863
71864             changesetURL: function(changesetID) {
71865                 return urlroot + '/changeset/' + changesetID;
71866             },
71867
71868
71869             changesetsURL: function(center, zoom) {
71870                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
71871                 return urlroot + '/history#map=' +
71872                     Math.floor(zoom) + '/' +
71873                     center[1].toFixed(precision) + '/' +
71874                     center[0].toFixed(precision);
71875             },
71876
71877
71878             entityURL: function(entity) {
71879                 return urlroot + '/' + entity.type + '/' + entity.osmId();
71880             },
71881
71882
71883             historyURL: function(entity) {
71884                 return urlroot + '/' + entity.type + '/' + entity.osmId() + '/history';
71885             },
71886
71887
71888             userURL: function(username) {
71889                 return urlroot + '/user/' + username;
71890             },
71891
71892
71893             noteURL: function(note) {
71894                 return urlroot + '/note/' + note.id;
71895             },
71896
71897
71898             noteReportURL: function(note) {
71899                 return urlroot + '/reports/new?reportable_type=Note&reportable_id=' + note.id;
71900             },
71901
71902
71903             // Generic method to load data from the OSM API
71904             // Can handle either auth or unauth calls.
71905             loadFromAPI: function(path, callback, options) {
71906                 options = Object.assign({ skipSeen: true }, options);
71907                 var that = this;
71908                 var cid = _connectionID;
71909
71910                 function done(err, payload) {
71911                     if (that.getConnectionId() !== cid) {
71912                         if (callback) { callback({ message: 'Connection Switched', status: -1 }); }
71913                         return;
71914                     }
71915
71916                     var isAuthenticated = that.authenticated();
71917
71918                     // 400 Bad Request, 401 Unauthorized, 403 Forbidden
71919                     // Logout and retry the request..
71920                     if (isAuthenticated && err && err.status &&
71921                             (err.status === 400 || err.status === 401 || err.status === 403)) {
71922                         that.logout();
71923                         that.loadFromAPI(path, callback, options);
71924
71925                     // else, no retry..
71926                     } else {
71927                         // 509 Bandwidth Limit Exceeded, 429 Too Many Requests
71928                         // Set the rateLimitError flag and trigger a warning..
71929                         if (!isAuthenticated && !_rateLimitError && err && err.status &&
71930                                 (err.status === 509 || err.status === 429)) {
71931                             _rateLimitError = err;
71932                             dispatch$5.call('change');
71933                             that.reloadApiStatus();
71934
71935                         } else if ((err && _cachedApiStatus === 'online') ||
71936                             (!err && _cachedApiStatus !== 'online')) {
71937                             // If the response's error state doesn't match the status,
71938                             // it's likely we lost or gained the connection so reload the status
71939                             that.reloadApiStatus();
71940                         }
71941
71942                         if (callback) {
71943                             if (err) {
71944                                 return callback(err);
71945                             } else {
71946                                 return parseXML(payload, callback, options);
71947                             }
71948                         }
71949                     }
71950                 }
71951
71952                 if (this.authenticated()) {
71953                     return oauth.xhr({ method: 'GET', path: path }, done);
71954                 } else {
71955                     var url = urlroot + path;
71956                     var controller = new AbortController();
71957                     d3_xml(url, { signal: controller.signal })
71958                         .then(function(data) {
71959                             done(null, data);
71960                         })
71961                         .catch(function(err) {
71962                             if (err.name === 'AbortError') { return; }
71963                             // d3-fetch includes status in the error message,
71964                             // but we can't access the response itself
71965                             // https://github.com/d3/d3-fetch/issues/27
71966                             var match = err.message.match(/^\d{3}/);
71967                             if (match) {
71968                                 done({ status: +match[0], statusText: err.message });
71969                             } else {
71970                                 done(err.message);
71971                             }
71972                         });
71973                     return controller;
71974                 }
71975             },
71976
71977
71978             // Load a single entity by id (ways and relations use the `/full` call)
71979             // GET /api/0.6/node/#id
71980             // GET /api/0.6/[way|relation]/#id/full
71981             loadEntity: function(id, callback) {
71982                 var type = osmEntity.id.type(id);
71983                 var osmID = osmEntity.id.toOSM(id);
71984                 var options = { skipSeen: false };
71985
71986                 this.loadFromAPI(
71987                     '/api/0.6/' + type + '/' + osmID + (type !== 'node' ? '/full' : ''),
71988                     function(err, entities) {
71989                         if (callback) { callback(err, { data: entities }); }
71990                     },
71991                     options
71992                 );
71993             },
71994
71995
71996             // Load a single entity with a specific version
71997             // GET /api/0.6/[node|way|relation]/#id/#version
71998             loadEntityVersion: function(id, version, callback) {
71999                 var type = osmEntity.id.type(id);
72000                 var osmID = osmEntity.id.toOSM(id);
72001                 var options = { skipSeen: false };
72002
72003                 this.loadFromAPI(
72004                     '/api/0.6/' + type + '/' + osmID + '/' + version,
72005                     function(err, entities) {
72006                         if (callback) { callback(err, { data: entities }); }
72007                     },
72008                     options
72009                 );
72010             },
72011
72012
72013             // Load multiple entities in chunks
72014             // (note: callback may be called multiple times)
72015             // Unlike `loadEntity`, child nodes and members are not fetched
72016             // GET /api/0.6/[nodes|ways|relations]?#parameters
72017             loadMultiple: function(ids, callback) {
72018                 var that = this;
72019                 var groups = utilArrayGroupBy(utilArrayUniq(ids), osmEntity.id.type);
72020
72021                 Object.keys(groups).forEach(function(k) {
72022                     var type = k + 's';   // nodes, ways, relations
72023                     var osmIDs = groups[k].map(function(id) { return osmEntity.id.toOSM(id); });
72024                     var options = { skipSeen: false };
72025
72026                     utilArrayChunk(osmIDs, 150).forEach(function(arr) {
72027                         that.loadFromAPI(
72028                             '/api/0.6/' + type + '?' + type + '=' + arr.join(),
72029                             function(err, entities) {
72030                                 if (callback) { callback(err, { data: entities }); }
72031                             },
72032                             options
72033                         );
72034                     });
72035                 });
72036             },
72037
72038
72039             // Create, upload, and close a changeset
72040             // PUT /api/0.6/changeset/create
72041             // POST /api/0.6/changeset/#id/upload
72042             // PUT /api/0.6/changeset/#id/close
72043             putChangeset: function(changeset, changes, callback) {
72044                 var cid = _connectionID;
72045
72046                 if (_changeset.inflight) {
72047                     return callback({ message: 'Changeset already inflight', status: -2 }, changeset);
72048
72049                 } else if (_changeset.open) {   // reuse existing open changeset..
72050                     return createdChangeset.call(this, null, _changeset.open);
72051
72052                 } else {   // Open a new changeset..
72053                     var options = {
72054                         method: 'PUT',
72055                         path: '/api/0.6/changeset/create',
72056                         options: { header: { 'Content-Type': 'text/xml' } },
72057                         content: JXON.stringify(changeset.asJXON())
72058                     };
72059                     _changeset.inflight = oauth.xhr(
72060                         options,
72061                         wrapcb(this, createdChangeset, cid)
72062                     );
72063                 }
72064
72065
72066                 function createdChangeset(err, changesetID) {
72067                     _changeset.inflight = null;
72068                     if (err) { return callback(err, changeset); }
72069
72070                     _changeset.open = changesetID;
72071                     changeset = changeset.update({ id: changesetID });
72072
72073                     // Upload the changeset..
72074                     var options = {
72075                         method: 'POST',
72076                         path: '/api/0.6/changeset/' + changesetID + '/upload',
72077                         options: { header: { 'Content-Type': 'text/xml' } },
72078                         content: JXON.stringify(changeset.osmChangeJXON(changes))
72079                     };
72080                     _changeset.inflight = oauth.xhr(
72081                         options,
72082                         wrapcb(this, uploadedChangeset, cid)
72083                     );
72084                 }
72085
72086
72087                 function uploadedChangeset(err) {
72088                     _changeset.inflight = null;
72089                     if (err) { return callback(err, changeset); }
72090
72091                     // Upload was successful, safe to call the callback.
72092                     // Add delay to allow for postgres replication #1646 #2678
72093                     window.setTimeout(function() { callback(null, changeset); }, 2500);
72094                     _changeset.open = null;
72095
72096                     // At this point, we don't really care if the connection was switched..
72097                     // Only try to close the changeset if we're still talking to the same server.
72098                     if (this.getConnectionId() === cid) {
72099                         // Still attempt to close changeset, but ignore response because #2667
72100                         oauth.xhr({
72101                             method: 'PUT',
72102                             path: '/api/0.6/changeset/' + changeset.id + '/close',
72103                             options: { header: { 'Content-Type': 'text/xml' } }
72104                         }, function() { return true; });
72105                     }
72106                 }
72107             },
72108
72109
72110             // Load multiple users in chunks
72111             // (note: callback may be called multiple times)
72112             // GET /api/0.6/users?users=#id1,#id2,...,#idn
72113             loadUsers: function(uids, callback) {
72114                 var toLoad = [];
72115                 var cached = [];
72116
72117                 utilArrayUniq(uids).forEach(function(uid) {
72118                     if (_userCache.user[uid]) {
72119                         delete _userCache.toLoad[uid];
72120                         cached.push(_userCache.user[uid]);
72121                     } else {
72122                         toLoad.push(uid);
72123                     }
72124                 });
72125
72126                 if (cached.length || !this.authenticated()) {
72127                     callback(undefined, cached);
72128                     if (!this.authenticated()) { return; }  // require auth
72129                 }
72130
72131                 utilArrayChunk(toLoad, 150).forEach(function(arr) {
72132                     oauth.xhr(
72133                         { method: 'GET', path: '/api/0.6/users?users=' + arr.join() },
72134                         wrapcb(this, done, _connectionID)
72135                     );
72136                 }.bind(this));
72137
72138                 function done(err, xml) {
72139                     if (err) { return callback(err); }
72140
72141                     var options = { skipSeen: true };
72142                     return parseXML(xml, function(err, results) {
72143                         if (err) {
72144                             return callback(err);
72145                         } else {
72146                             return callback(undefined, results);
72147                         }
72148                     }, options);
72149                 }
72150             },
72151
72152
72153             // Load a given user by id
72154             // GET /api/0.6/user/#id
72155             loadUser: function(uid, callback) {
72156                 if (_userCache.user[uid] || !this.authenticated()) {   // require auth
72157                     delete _userCache.toLoad[uid];
72158                     return callback(undefined, _userCache.user[uid]);
72159                 }
72160
72161                 oauth.xhr(
72162                     { method: 'GET', path: '/api/0.6/user/' + uid },
72163                     wrapcb(this, done, _connectionID)
72164                 );
72165
72166                 function done(err, xml) {
72167                     if (err) { return callback(err); }
72168
72169                     var options = { skipSeen: true };
72170                     return parseXML(xml, function(err, results) {
72171                         if (err) {
72172                             return callback(err);
72173                         } else {
72174                             return callback(undefined, results[0]);
72175                         }
72176                     }, options);
72177                 }
72178             },
72179
72180
72181             // Load the details of the logged-in user
72182             // GET /api/0.6/user/details
72183             userDetails: function(callback) {
72184                 if (_userDetails) {    // retrieve cached
72185                     return callback(undefined, _userDetails);
72186                 }
72187
72188                 oauth.xhr(
72189                     { method: 'GET', path: '/api/0.6/user/details' },
72190                     wrapcb(this, done, _connectionID)
72191                 );
72192
72193                 function done(err, xml) {
72194                     if (err) { return callback(err); }
72195
72196                     var options = { skipSeen: false };
72197                     return parseXML(xml, function(err, results) {
72198                         if (err) {
72199                             return callback(err);
72200                         } else {
72201                             _userDetails = results[0];
72202                             return callback(undefined, _userDetails);
72203                         }
72204                     }, options);
72205                 }
72206             },
72207
72208
72209             // Load previous changesets for the logged in user
72210             // GET /api/0.6/changesets?user=#id
72211             userChangesets: function(callback) {
72212                 if (_userChangesets) {    // retrieve cached
72213                     return callback(undefined, _userChangesets);
72214                 }
72215
72216                 this.userDetails(
72217                     wrapcb(this, gotDetails, _connectionID)
72218                 );
72219
72220
72221                 function gotDetails(err, user) {
72222                     if (err) { return callback(err); }
72223
72224                     oauth.xhr(
72225                         { method: 'GET', path: '/api/0.6/changesets?user=' + user.id },
72226                         wrapcb(this, done, _connectionID)
72227                     );
72228                 }
72229
72230                 function done(err, xml) {
72231                     if (err) { return callback(err); }
72232
72233                     _userChangesets = Array.prototype.map.call(
72234                         xml.getElementsByTagName('changeset'),
72235                         function (changeset) { return { tags: getTags(changeset) }; }
72236                     ).filter(function (changeset) {
72237                         var comment = changeset.tags.comment;
72238                         return comment && comment !== '';
72239                     });
72240
72241                     return callback(undefined, _userChangesets);
72242                 }
72243             },
72244
72245
72246             // Fetch the status of the OSM API
72247             // GET /api/capabilities
72248             status: function(callback) {
72249                 var url = urlroot + '/api/capabilities';
72250                 var errback = wrapcb(this, done, _connectionID);
72251                 d3_xml(url)
72252                     .then(function(data) { errback(null, data); })
72253                     .catch(function(err) { errback(err.message); });
72254
72255                 function done(err, xml) {
72256                     if (err) {
72257                         // the status is null if no response could be retrieved
72258                         return callback(err, null);
72259                     }
72260
72261                     // update blacklists
72262                     var elements = xml.getElementsByTagName('blacklist');
72263                     var regexes = [];
72264                     for (var i = 0; i < elements.length; i++) {
72265                         var regex = elements[i].getAttribute('regex');  // needs unencode?
72266                         if (regex) {
72267                             regexes.push(regex);
72268                         }
72269                     }
72270                     if (regexes.length) {
72271                         _blacklists = regexes;
72272                     }
72273
72274                     if (_rateLimitError) {
72275                         return callback(_rateLimitError, 'rateLimited');
72276                     } else {
72277                         var apiStatus = xml.getElementsByTagName('status');
72278                         var val = apiStatus[0].getAttribute('api');
72279                         return callback(undefined, val);
72280                     }
72281                 }
72282             },
72283
72284             // Calls `status` and dispatches an `apiStatusChange` event if the returned
72285             // status differs from the cached status.
72286             reloadApiStatus: function() {
72287                 // throttle to avoid unncessary API calls
72288                 if (!this.throttledReloadApiStatus) {
72289                     var that = this;
72290                     this.throttledReloadApiStatus = throttle(function() {
72291                         that.status(function(err, status) {
72292                             if (status !== _cachedApiStatus) {
72293                                 _cachedApiStatus = status;
72294                                 dispatch$5.call('apiStatusChange', that, err, status);
72295                             }
72296                         });
72297                     }, 500);
72298                 }
72299                 this.throttledReloadApiStatus();
72300             },
72301
72302
72303             // Load data (entities) from the API in tiles
72304             // GET /api/0.6/map?bbox=
72305             loadTiles: function(projection, callback) {
72306                 if (_off) { return; }
72307
72308                 // determine the needed tiles to cover the view
72309                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
72310
72311                 // abort inflight requests that are no longer needed
72312                 var hadRequests = hasInflightRequests(_tileCache);
72313                 abortUnwantedRequests$2(_tileCache, tiles);
72314                 if (hadRequests && !hasInflightRequests(_tileCache)) {
72315                     dispatch$5.call('loaded');    // stop the spinner
72316                 }
72317
72318                 // issue new requests..
72319                 tiles.forEach(function(tile) {
72320                     this.loadTile(tile, callback);
72321                 }, this);
72322             },
72323
72324
72325             // Load a single data tile
72326             // GET /api/0.6/map?bbox=
72327             loadTile: function(tile, callback) {
72328                 if (_off) { return; }
72329                 if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) { return; }
72330
72331                 if (!hasInflightRequests(_tileCache)) {
72332                     dispatch$5.call('loading');   // start the spinner
72333                 }
72334
72335                 var path = '/api/0.6/map?bbox=';
72336                 var options = { skipSeen: true };
72337
72338                 _tileCache.inflight[tile.id] = this.loadFromAPI(
72339                     path + tile.extent.toParam(),
72340                     tileCallback,
72341                     options
72342                 );
72343
72344                 function tileCallback(err, parsed) {
72345                     delete _tileCache.inflight[tile.id];
72346                     if (!err) {
72347                         delete _tileCache.toLoad[tile.id];
72348                         _tileCache.loaded[tile.id] = true;
72349                         var bbox = tile.extent.bbox();
72350                         bbox.id = tile.id;
72351                         _tileCache.rtree.insert(bbox);
72352                     }
72353                     if (callback) {
72354                         callback(err, Object.assign({ data: parsed }, tile));
72355                     }
72356                     if (!hasInflightRequests(_tileCache)) {
72357                         dispatch$5.call('loaded');     // stop the spinner
72358                     }
72359                 }
72360             },
72361
72362
72363             isDataLoaded: function(loc) {
72364                 var bbox = { minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1] };
72365                 return _tileCache.rtree.collides(bbox);
72366             },
72367
72368
72369             // load the tile that covers the given `loc`
72370             loadTileAtLoc: function(loc, callback) {
72371                 // Back off if the toLoad queue is filling up.. re #6417
72372                 // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
72373                 // let users safely edit geometries which extend to unloaded tiles.  We can drop some.)
72374                 if (Object.keys(_tileCache.toLoad).length > 50) { return; }
72375
72376                 var k = geoZoomToScale(_tileZoom + 1);
72377                 var offset = geoRawMercator().scale(k)(loc);
72378                 var projection = geoRawMercator().transform({ k: k, x: -offset[0], y: -offset[1] });
72379                 var tiles = tiler$4.zoomExtent([_tileZoom, _tileZoom]).getTiles(projection);
72380
72381                 tiles.forEach(function(tile) {
72382                     if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) { return; }
72383
72384                     _tileCache.toLoad[tile.id] = true;
72385                     this.loadTile(tile, callback);
72386                 }, this);
72387             },
72388
72389
72390             // Load notes from the API in tiles
72391             // GET /api/0.6/notes?bbox=
72392             loadNotes: function(projection, noteOptions) {
72393                 noteOptions = Object.assign({ limit: 10000, closed: 7 }, noteOptions);
72394                 if (_off) { return; }
72395
72396                 var that = this;
72397                 var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
72398                 var throttleLoadUsers = throttle(function() {
72399                     var uids = Object.keys(_userCache.toLoad);
72400                     if (!uids.length) { return; }
72401                     that.loadUsers(uids, function() {});  // eagerly load user details
72402                 }, 750);
72403
72404                 // determine the needed tiles to cover the view
72405                 var tiles = tiler$4.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection);
72406
72407                 // abort inflight requests that are no longer needed
72408                 abortUnwantedRequests$2(_noteCache, tiles);
72409
72410                 // issue new requests..
72411                 tiles.forEach(function(tile) {
72412                     if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) { return; }
72413
72414                     var options = { skipSeen: false };
72415                     _noteCache.inflight[tile.id] = that.loadFromAPI(
72416                         path + tile.extent.toParam(),
72417                         function(err) {
72418                             delete _noteCache.inflight[tile.id];
72419                             if (!err) {
72420                                 _noteCache.loaded[tile.id] = true;
72421                             }
72422                             throttleLoadUsers();
72423                             dispatch$5.call('loadedNotes');
72424                         },
72425                         options
72426                     );
72427                 });
72428             },
72429
72430
72431             // Create a note
72432             // POST /api/0.6/notes?params
72433             postNoteCreate: function(note, callback) {
72434                 if (!this.authenticated()) {
72435                     return callback({ message: 'Not Authenticated', status: -3 }, note);
72436                 }
72437                 if (_noteCache.inflightPost[note.id]) {
72438                     return callback({ message: 'Note update already inflight', status: -2 }, note);
72439                 }
72440
72441                 if (!note.loc[0] || !note.loc[1] || !note.newComment) { return; } // location & description required
72442
72443                 var comment = note.newComment;
72444                 if (note.newCategory && note.newCategory !== 'None') { comment += ' #' + note.newCategory; }
72445
72446                 var path = '/api/0.6/notes?' + utilQsString({ lon: note.loc[0], lat: note.loc[1], text: comment });
72447
72448                 _noteCache.inflightPost[note.id] = oauth.xhr(
72449                     { method: 'POST', path: path },
72450                     wrapcb(this, done, _connectionID)
72451                 );
72452
72453
72454                 function done(err, xml) {
72455                     delete _noteCache.inflightPost[note.id];
72456                     if (err) { return callback(err); }
72457
72458                     // we get the updated note back, remove from caches and reparse..
72459                     this.removeNote(note);
72460
72461                     var options = { skipSeen: false };
72462                     return parseXML(xml, function(err, results) {
72463                         if (err) {
72464                             return callback(err);
72465                         } else {
72466                             return callback(undefined, results[0]);
72467                         }
72468                     }, options);
72469                 }
72470             },
72471
72472
72473             // Update a note
72474             // POST /api/0.6/notes/#id/comment?text=comment
72475             // POST /api/0.6/notes/#id/close?text=comment
72476             // POST /api/0.6/notes/#id/reopen?text=comment
72477             postNoteUpdate: function(note, newStatus, callback) {
72478                 if (!this.authenticated()) {
72479                     return callback({ message: 'Not Authenticated', status: -3 }, note);
72480                 }
72481                 if (_noteCache.inflightPost[note.id]) {
72482                     return callback({ message: 'Note update already inflight', status: -2 }, note);
72483                 }
72484
72485                 var action;
72486                 if (note.status !== 'closed' && newStatus === 'closed') {
72487                     action = 'close';
72488                 } else if (note.status !== 'open' && newStatus === 'open') {
72489                     action = 'reopen';
72490                 } else {
72491                     action = 'comment';
72492                     if (!note.newComment) { return; } // when commenting, comment required
72493                 }
72494
72495                 var path = '/api/0.6/notes/' + note.id + '/' + action;
72496                 if (note.newComment) {
72497                     path += '?' + utilQsString({ text: note.newComment });
72498                 }
72499
72500                 _noteCache.inflightPost[note.id] = oauth.xhr(
72501                     { method: 'POST', path: path },
72502                     wrapcb(this, done, _connectionID)
72503                 );
72504
72505
72506                 function done(err, xml) {
72507                     delete _noteCache.inflightPost[note.id];
72508                     if (err) { return callback(err); }
72509
72510                     // we get the updated note back, remove from caches and reparse..
72511                     this.removeNote(note);
72512
72513                     // update closed note cache - used to populate `closed:note` changeset tag
72514                     if (action === 'close') {
72515                         _noteCache.closed[note.id] = true;
72516                     } else if (action === 'reopen') {
72517                         delete _noteCache.closed[note.id];
72518                     }
72519
72520                     var options = { skipSeen: false };
72521                     return parseXML(xml, function(err, results) {
72522                         if (err) {
72523                             return callback(err);
72524                         } else {
72525                             return callback(undefined, results[0]);
72526                         }
72527                     }, options);
72528                 }
72529             },
72530
72531
72532             switch: function(options) {
72533                 urlroot = options.urlroot;
72534
72535                 oauth.options(Object.assign({
72536                     url: urlroot,
72537                     loading: authLoading,
72538                     done: authDone
72539                 }, options));
72540
72541                 this.reset();
72542                 this.userChangesets(function() {});  // eagerly load user details/changesets
72543                 dispatch$5.call('change');
72544                 return this;
72545             },
72546
72547
72548             toggle: function(val) {
72549                 _off = !val;
72550                 return this;
72551             },
72552
72553
72554             isChangesetInflight: function() {
72555                 return !!_changeset.inflight;
72556             },
72557
72558
72559             // get/set cached data
72560             // This is used to save/restore the state when entering/exiting the walkthrough
72561             // Also used for testing purposes.
72562             caches: function(obj) {
72563                 function cloneCache(source) {
72564                     var target = {};
72565                     Object.keys(source).forEach(function(k) {
72566                         if (k === 'rtree') {
72567                             target.rtree = new RBush().fromJSON(source.rtree.toJSON());  // clone rbush
72568                         } else if (k === 'note') {
72569                             target.note = {};
72570                             Object.keys(source.note).forEach(function(id) {
72571                                 target.note[id] = osmNote(source.note[id]);   // copy notes
72572                             });
72573                         } else {
72574                             target[k] = JSON.parse(JSON.stringify(source[k]));   // clone deep
72575                         }
72576                     });
72577                     return target;
72578                 }
72579
72580                 if (!arguments.length) {
72581                     return {
72582                         tile: cloneCache(_tileCache),
72583                         note: cloneCache(_noteCache),
72584                         user: cloneCache(_userCache)
72585                     };
72586                 }
72587
72588                 // access caches directly for testing (e.g., loading notes rtree)
72589                 if (obj === 'get') {
72590                     return {
72591                         tile: _tileCache,
72592                         note: _noteCache,
72593                         user: _userCache
72594                     };
72595                 }
72596
72597                 if (obj.tile) {
72598                     _tileCache = obj.tile;
72599                     _tileCache.inflight = {};
72600                 }
72601                 if (obj.note) {
72602                     _noteCache = obj.note;
72603                     _noteCache.inflight = {};
72604                     _noteCache.inflightPost = {};
72605                 }
72606                 if (obj.user) {
72607                     _userCache = obj.user;
72608                 }
72609
72610                 return this;
72611             },
72612
72613
72614             logout: function() {
72615                 _userChangesets = undefined;
72616                 _userDetails = undefined;
72617                 oauth.logout();
72618                 dispatch$5.call('change');
72619                 return this;
72620             },
72621
72622
72623             authenticated: function() {
72624                 return oauth.authenticated();
72625             },
72626
72627
72628             authenticate: function(callback) {
72629                 var that = this;
72630                 var cid = _connectionID;
72631                 _userChangesets = undefined;
72632                 _userDetails = undefined;
72633
72634                 function done(err, res) {
72635                     if (err) {
72636                         if (callback) { callback(err); }
72637                         return;
72638                     }
72639                     if (that.getConnectionId() !== cid) {
72640                         if (callback) { callback({ message: 'Connection Switched', status: -1 }); }
72641                         return;
72642                     }
72643                     _rateLimitError = undefined;
72644                     dispatch$5.call('change');
72645                     if (callback) { callback(err, res); }
72646                     that.userChangesets(function() {});  // eagerly load user details/changesets
72647                 }
72648
72649                 return oauth.authenticate(done);
72650             },
72651
72652
72653             imageryBlacklists: function() {
72654                 return _blacklists;
72655             },
72656
72657
72658             tileZoom: function(val) {
72659                 if (!arguments.length) { return _tileZoom; }
72660                 _tileZoom = val;
72661                 return this;
72662             },
72663
72664
72665             // get all cached notes covering the viewport
72666             notes: function(projection) {
72667                 var viewport = projection.clipExtent();
72668                 var min = [viewport[0][0], viewport[1][1]];
72669                 var max = [viewport[1][0], viewport[0][1]];
72670                 var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
72671
72672                 return _noteCache.rtree.search(bbox)
72673                     .map(function(d) { return d.data; });
72674             },
72675
72676
72677             // get a single note from the cache
72678             getNote: function(id) {
72679                 return _noteCache.note[id];
72680             },
72681
72682
72683             // remove a single note from the cache
72684             removeNote: function(note) {
72685                 if (!(note instanceof osmNote) || !note.id) { return; }
72686
72687                 delete _noteCache.note[note.id];
72688                 updateRtree$2(encodeNoteRtree(note), false);  // false = remove
72689             },
72690
72691
72692             // replace a single note in the cache
72693             replaceNote: function(note) {
72694                 if (!(note instanceof osmNote) || !note.id) { return; }
72695
72696                 _noteCache.note[note.id] = note;
72697                 updateRtree$2(encodeNoteRtree(note), true);  // true = replace
72698                 return note;
72699             },
72700
72701
72702             // Get an array of note IDs closed during this session.
72703             // Used to populate `closed:note` changeset tag
72704             getClosedIDs: function() {
72705                 return Object.keys(_noteCache.closed).sort();
72706             }
72707
72708         };
72709
72710         var apibase$3 = 'https://wiki.openstreetmap.org/w/api.php';
72711         var _inflight$1 = {};
72712         var _wikibaseCache = {};
72713         var _localeIDs = { en: false };
72714
72715
72716         var debouncedRequest = debounce(request, 500, { leading: false });
72717
72718         function request(url, callback) {
72719             if (_inflight$1[url]) { return; }
72720             var controller = new AbortController();
72721             _inflight$1[url] = controller;
72722
72723             d3_json(url, { signal: controller.signal })
72724                 .then(function(result) {
72725                     delete _inflight$1[url];
72726                     if (callback) { callback(null, result); }
72727                 })
72728                 .catch(function(err) {
72729                     delete _inflight$1[url];
72730                     if (err.name === 'AbortError') { return; }
72731                     if (callback) { callback(err.message); }
72732                 });
72733         }
72734
72735
72736         /**
72737          * Get the best string value from the descriptions/labels result
72738          * Note that if mediawiki doesn't recognize language code, it will return all values.
72739          * In that case, fallback to use English.
72740          * @param values object - either descriptions or labels
72741          * @param langCode String
72742          * @returns localized string
72743          */
72744         function localizedToString(values, langCode) {
72745             if (values) {
72746                 values = values[langCode] || values.en;
72747             }
72748             return values ? values.value : '';
72749         }
72750
72751
72752         var serviceOsmWikibase = {
72753
72754             init: function() {
72755                 _inflight$1 = {};
72756                 _wikibaseCache = {};
72757                 _localeIDs = {};
72758             },
72759
72760
72761             reset: function() {
72762                 Object.values(_inflight$1).forEach(function(controller) { controller.abort(); });
72763                 _inflight$1 = {};
72764             },
72765
72766
72767             /**
72768              * Get the best value for the property, or undefined if not found
72769              * @param entity object from wikibase
72770              * @param property string e.g. 'P4' for image
72771              * @param langCode string e.g. 'fr' for French
72772              */
72773             claimToValue: function(entity, property, langCode) {
72774                 if (!entity.claims[property]) { return undefined; }
72775                 var locale = _localeIDs[langCode];
72776                 var preferredPick, localePick;
72777
72778                 entity.claims[property].forEach(function(stmt) {
72779                     // If exists, use value limited to the needed language (has a qualifier P26 = locale)
72780                     // Or if not found, use the first value with the "preferred" rank
72781                     if (!preferredPick && stmt.rank === 'preferred') {
72782                         preferredPick = stmt;
72783                     }
72784                     if (locale && stmt.qualifiers && stmt.qualifiers.P26 &&
72785                         stmt.qualifiers.P26[0].datavalue.value.id === locale
72786                     ) {
72787                         localePick = stmt;
72788                     }
72789                 });
72790
72791                 var result = localePick || preferredPick;
72792                 if (result) {
72793                     var datavalue = result.mainsnak.datavalue;
72794                     return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
72795                 } else {
72796                     return undefined;
72797                 }
72798             },
72799
72800
72801             /**
72802              * Convert monolingual property into a key-value object (language -> value)
72803              * @param entity object from wikibase
72804              * @param property string e.g. 'P31' for monolingual wiki page title
72805              */
72806             monolingualClaimToValueObj: function(entity, property) {
72807                 if (!entity || !entity.claims[property]) { return undefined; }
72808
72809                 return entity.claims[property].reduce(function(acc, obj) {
72810                     var value = obj.mainsnak.datavalue.value;
72811                     acc[value.language] = value.text;
72812                     return acc;
72813                 }, {});
72814             },
72815
72816
72817             toSitelink: function(key, value) {
72818                 var result = value ? ('Tag:' + key + '=' + value) : 'Key:' + key;
72819                 return result.replace(/_/g, ' ').trim();
72820             },
72821
72822
72823             //
72824             // Pass params object of the form:
72825             // {
72826             //   key: 'string',
72827             //   value: 'string',
72828             //   rtype: 'string',
72829             //   langCode: 'string'
72830             // }
72831             //
72832             getEntity: function(params, callback) {
72833                 var doRequest = params.debounce ? debouncedRequest : request;
72834                 var that = this;
72835                 var titles = [];
72836                 var result = {};
72837                 var rtypeSitelink = params.rtype ? ('Relation:' + params.rtype).replace(/_/g, ' ').trim() : false;
72838                 var keySitelink = params.key ? this.toSitelink(params.key) : false;
72839                 var tagSitelink = (params.key && params.value) ? this.toSitelink(params.key, params.value) : false;
72840                 var localeSitelink;
72841
72842                 if (params.langCode && _localeIDs[params.langCode] === undefined) {
72843                     // If this is the first time we are asking about this locale,
72844                     // fetch corresponding entity (if it exists), and cache it.
72845                     // If there is no such entry, cache `false` value to avoid re-requesting it.
72846                     localeSitelink = ('Locale:' + params.langCode).replace(/_/g, ' ').trim();
72847                     titles.push(localeSitelink);
72848                 }
72849
72850                 if (rtypeSitelink) {
72851                     if (_wikibaseCache[rtypeSitelink]) {
72852                         result.rtype = _wikibaseCache[rtypeSitelink];
72853                     } else {
72854                         titles.push(rtypeSitelink);
72855                     }
72856                 }
72857
72858                 if (keySitelink) {
72859                     if (_wikibaseCache[keySitelink]) {
72860                         result.key = _wikibaseCache[keySitelink];
72861                     } else {
72862                         titles.push(keySitelink);
72863                     }
72864                 }
72865
72866                 if (tagSitelink) {
72867                     if (_wikibaseCache[tagSitelink]) {
72868                         result.tag = _wikibaseCache[tagSitelink];
72869                     } else {
72870                         titles.push(tagSitelink);
72871                     }
72872                 }
72873
72874                 if (!titles.length) {
72875                     // Nothing to do, we already had everything in the cache
72876                     return callback(null, result);
72877                 }
72878
72879                 // Requesting just the user language code
72880                 // If backend recognizes the code, it will perform proper fallbacks,
72881                 // and the result will contain the requested code. If not, all values are returned:
72882                 // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
72883                 // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
72884                 var obj = {
72885                     action: 'wbgetentities',
72886                     sites: 'wiki',
72887                     titles: titles.join('|'),
72888                     languages: params.langCode,
72889                     languagefallback: 1,
72890                     origin: '*',
72891                     format: 'json',
72892                     // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
72893                     // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
72894                     // formatversion: 2,
72895                 };
72896
72897                 var url = apibase$3 + '?' + utilQsString(obj);
72898                 doRequest(url, function(err, d) {
72899                     if (err) {
72900                         callback(err);
72901                     } else if (!d.success || d.error) {
72902                         callback(d.error.messages.map(function(v) { return v.html['*']; }).join('<br>'));
72903                     } else {
72904                         var localeID = false;
72905                         Object.values(d.entities).forEach(function(res) {
72906                             if (res.missing !== '') {
72907                                 // Simplify access to the localized values
72908                                 res.description = localizedToString(res.descriptions, params.langCode);
72909                                 res.label = localizedToString(res.labels, params.langCode);
72910
72911                                 var title = res.sitelinks.wiki.title;
72912                                 if (title === rtypeSitelink) {
72913                                     _wikibaseCache[rtypeSitelink] = res;
72914                                     result.rtype = res;
72915                                 } else if (title === keySitelink) {
72916                                     _wikibaseCache[keySitelink] = res;
72917                                     result.key = res;
72918                                 } else if (title === tagSitelink) {
72919                                     _wikibaseCache[tagSitelink] = res;
72920                                     result.tag = res;
72921                                 } else if (title === localeSitelink) {
72922                                     localeID = res.id;
72923                                 } else {
72924                                     console.log('Unexpected title ' + title);  // eslint-disable-line no-console
72925                                 }
72926                             }
72927                         });
72928
72929                         if (localeSitelink) {
72930                             // If locale ID is not found, store false to prevent repeated queries
72931                             that.addLocale(params.langCode, localeID);
72932                         }
72933
72934                         callback(null, result);
72935                     }
72936                 });
72937             },
72938
72939
72940             //
72941             // Pass params object of the form:
72942             // {
72943             //   key: 'string',     // required
72944             //   value: 'string'    // optional
72945             // }
72946             //   -or-
72947             // {
72948             //   rtype: 'rtype'     // relation type  (e.g. 'multipolygon')
72949             // }
72950             //
72951             // Get an result object used to display tag documentation
72952             // {
72953             //   title:        'string',
72954             //   description:  'string',
72955             //   editURL:      'string',
72956             //   imageURL:     'string',
72957             //   wiki:         { title: 'string', text: 'string', url: 'string' }
72958             // }
72959             //
72960             getDocs: function(params, callback) {
72961                 var that = this;
72962                 var langCode = utilDetect().locale.toLowerCase();
72963                 params.langCode = langCode;
72964
72965                 this.getEntity(params, function(err, data) {
72966                     if (err) {
72967                         callback(err);
72968                         return;
72969                     }
72970
72971                     var entity = data.rtype || data.tag || data.key;
72972                     if (!entity) {
72973                         callback('No entity');
72974                         return;
72975                     }
72976
72977                     // prepare result
72978                     var result = {
72979                         title: entity.title,
72980                         description: entity.description,
72981                         editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
72982                     };
72983
72984                     // add image
72985                     if (entity.claims) {
72986                         var imageroot;
72987                         var image = that.claimToValue(entity, 'P4', langCode);
72988                         if (image) {
72989                             imageroot = 'https://commons.wikimedia.org/w/index.php';
72990                         } else {
72991                             image = that.claimToValue(entity, 'P28', langCode);
72992                             if (image) {
72993                                 imageroot = 'https://wiki.openstreetmap.org/w/index.php';
72994                             }
72995                         }
72996                         if (imageroot && image) {
72997                             result.imageURL = imageroot + '?' + utilQsString({
72998                                 title: 'Special:Redirect/file/' + image,
72999                                 width: 400
73000                             });
73001                         }
73002                     }
73003
73004                     // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
73005                     // If neither tag nor key data item contain a wiki page in the needed language nor English,
73006                     // get the first found wiki page from either the tag or the key item.
73007                     var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
73008                     var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
73009                     var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
73010
73011                     // If exact language code does not exist, try to find the first part before the '-'
73012                     // BUG: in some cases, a more elaborate fallback logic might be needed
73013                     var langPrefix = langCode.split('-', 2)[0];
73014
73015                     // use the first acceptable wiki page
73016                     result.wiki =
73017                         getWikiInfo(rtypeWiki, langCode, 'inspector.wiki_reference') ||
73018                         getWikiInfo(rtypeWiki, langPrefix, 'inspector.wiki_reference') ||
73019                         getWikiInfo(rtypeWiki, 'en', 'inspector.wiki_en_reference') ||
73020                         getWikiInfo(tagWiki, langCode, 'inspector.wiki_reference') ||
73021                         getWikiInfo(tagWiki, langPrefix, 'inspector.wiki_reference') ||
73022                         getWikiInfo(tagWiki, 'en', 'inspector.wiki_en_reference') ||
73023                         getWikiInfo(keyWiki, langCode, 'inspector.wiki_reference') ||
73024                         getWikiInfo(keyWiki, langPrefix, 'inspector.wiki_reference') ||
73025                         getWikiInfo(keyWiki, 'en', 'inspector.wiki_en_reference');
73026
73027                     callback(null, result);
73028
73029
73030                     // Helper method to get wiki info if a given language exists
73031                     function getWikiInfo(wiki, langCode, tKey) {
73032                         if (wiki && wiki[langCode]) {
73033                             return {
73034                                 title: wiki[langCode],
73035                                 text: tKey,
73036                                 url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
73037                             };
73038                         }
73039                     }
73040                 });
73041             },
73042
73043
73044             addLocale: function(langCode, qid) {
73045                 // Makes it easier to unit test
73046                 _localeIDs[langCode] = qid;
73047             },
73048
73049
73050             apibase: function(val) {
73051                 if (!arguments.length) { return apibase$3; }
73052                 apibase$3 = val;
73053                 return this;
73054             }
73055
73056         };
73057
73058         var jsonpCache = {};
73059         window.jsonpCache = jsonpCache;
73060
73061         function jsonpRequest(url, callback) {
73062             var request = {
73063                 abort: function() {}
73064             };
73065
73066             if (window.JSONP_FIX) {
73067                 if (window.JSONP_DELAY === 0) {
73068                     callback(window.JSONP_FIX);
73069                 } else {
73070                     var t = window.setTimeout(function() {
73071                         callback(window.JSONP_FIX);
73072                     }, window.JSONP_DELAY || 0);
73073
73074                     request.abort = function() { window.clearTimeout(t); };
73075                 }
73076
73077                 return request;
73078             }
73079
73080             function rand() {
73081                 var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
73082                 var c = '';
73083                 var i = -1;
73084                 while (++i < 15) { c += chars.charAt(Math.floor(Math.random() * 52)); }
73085                 return c;
73086             }
73087
73088             function create(url) {
73089                 var e = url.match(/callback=(\w+)/);
73090                 var c = e ? e[1] : rand();
73091
73092                 jsonpCache[c] = function(data) {
73093                     if (jsonpCache[c]) {
73094                         callback(data);
73095                     }
73096                     finalize();
73097                 };
73098
73099                 function finalize() {
73100                     delete jsonpCache[c];
73101                     script.remove();
73102                 }
73103
73104                 request.abort = finalize;
73105                 return 'jsonpCache.' + c;
73106             }
73107
73108             var cb = create(url);
73109
73110             var script = d3_select('head')
73111                 .append('script')
73112                 .attr('type', 'text/javascript')
73113                 .attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
73114
73115             return request;
73116         }
73117
73118         var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
73119         var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
73120         var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
73121         var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
73122         var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
73123         var maxResults$2 = 2000;
73124         var tileZoom$2 = 16.5;
73125         var tiler$5 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
73126         var dispatch$6 = dispatch('loadedBubbles', 'viewerChanged');
73127         var minHfov = 10;         // zoom in degrees:  20, 10, 5
73128         var maxHfov = 90;         // zoom out degrees
73129         var defaultHfov = 45;
73130
73131         var _hires = false;
73132         var _resolution = 512;    // higher numbers are slower - 512, 1024, 2048, 4096
73133         var _currScene = 0;
73134         var _ssCache;
73135         var _pannellumViewer;
73136         var _sceneOptions;
73137         var _dataUrlArray = [];
73138
73139
73140         /**
73141          * abortRequest().
73142          */
73143         function abortRequest$5(i) {
73144           i.abort();
73145         }
73146
73147
73148         /**
73149          * localeTimeStamp().
73150          */
73151         function localeTimestamp(s) {
73152           if (!s) { return null; }
73153           var detected = utilDetect();
73154           var options = { day: 'numeric', month: 'short', year: 'numeric' };
73155           var d = new Date(s);
73156           if (isNaN(d.getTime())) { return null; }
73157           return d.toLocaleString(detected.locale, options);
73158         }
73159
73160
73161         /**
73162          * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
73163          */
73164         function loadTiles$2(which, url, projection, margin) {
73165           var tiles = tiler$5.margin(margin).getTiles(projection);
73166
73167           // abort inflight requests that are no longer needed
73168           var cache = _ssCache[which];
73169           Object.keys(cache.inflight).forEach(function (k) {
73170             var wanted = tiles.find(function (tile) { return k.indexOf(tile.id + ',') === 0; });
73171             if (!wanted) {
73172               abortRequest$5(cache.inflight[k]);
73173               delete cache.inflight[k];
73174             }
73175           });
73176
73177           tiles.forEach(function (tile) { return loadNextTilePage$2(which, url, tile); });
73178         }
73179
73180
73181         /**
73182          * loadNextTilePage() load data for the next tile page in line.
73183          */
73184         function loadNextTilePage$2(which, url, tile) {
73185           var cache = _ssCache[which];
73186           var nextPage = cache.nextPage[tile.id] || 0;
73187           var id = tile.id + ',' + String(nextPage);
73188           if (cache.loaded[id] || cache.inflight[id]) { return; }
73189
73190           cache.inflight[id] = getBubbles(url, tile, function (bubbles) {
73191             cache.loaded[id] = true;
73192             delete cache.inflight[id];
73193             if (!bubbles) { return; }
73194
73195             // [].shift() removes the first element, some statistics info, not a bubble point
73196             bubbles.shift();
73197
73198             var features = bubbles.map(function (bubble) {
73199               if (cache.points[bubble.id]) { return null; }  // skip duplicates
73200
73201               var loc = [bubble.lo, bubble.la];
73202               var d = {
73203                 loc: loc,
73204                 key: bubble.id,
73205                 ca: bubble.he,
73206                 captured_at: bubble.cd,
73207                 captured_by: 'microsoft',
73208                 // nbn: bubble.nbn,
73209                 // pbn: bubble.pbn,
73210                 // ad: bubble.ad,
73211                 // rn: bubble.rn,
73212                 pr: bubble.pr,  // previous
73213                 ne: bubble.ne,  // next
73214                 pano: true,
73215                 sequenceKey: null
73216               };
73217
73218               cache.points[bubble.id] = d;
73219
73220               // a sequence starts here
73221               if (bubble.pr === undefined) {
73222                 cache.leaders.push(bubble.id);
73223               }
73224
73225               return {
73226                 minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d
73227               };
73228
73229             }).filter(Boolean);
73230
73231             cache.rtree.load(features);
73232
73233             connectSequences();
73234
73235             if (which === 'bubbles') {
73236               dispatch$6.call('loadedBubbles');
73237             }
73238           });
73239         }
73240
73241
73242         // call this sometimes to connect the bubbles into sequences
73243         function connectSequences() {
73244           var cache = _ssCache.bubbles;
73245           var keepLeaders = [];
73246
73247           for (var i = 0; i < cache.leaders.length; i++) {
73248             var bubble = cache.points[cache.leaders[i]];
73249             var seen = {};
73250
73251             // try to make a sequence.. use the key of the leader bubble.
73252             var sequence = { key: bubble.key, bubbles: [] };
73253             var complete = false;
73254
73255             do {
73256               sequence.bubbles.push(bubble);
73257               seen[bubble.key] = true;
73258
73259               if (bubble.ne === undefined) {
73260                 complete = true;
73261               } else {
73262                 bubble = cache.points[bubble.ne];  // advance to next
73263               }
73264             } while (bubble && !seen[bubble.key] && !complete);
73265
73266
73267             if (complete) {
73268               _ssCache.sequences[sequence.key] = sequence;
73269
73270               // assign bubbles to the sequence
73271               for (var j = 0; j < sequence.bubbles.length; j++) {
73272                 sequence.bubbles[j].sequenceKey = sequence.key;
73273               }
73274
73275               // create a GeoJSON LineString
73276               sequence.geojson = {
73277                 type: 'LineString',
73278                 properties: { key: sequence.key },
73279                 coordinates: sequence.bubbles.map(function (d) { return d.loc; })
73280               };
73281
73282             } else {
73283               keepLeaders.push(cache.leaders[i]);
73284             }
73285           }
73286
73287           // couldn't complete these, save for later
73288           cache.leaders = keepLeaders;
73289         }
73290
73291
73292         /**
73293          * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
73294          */
73295         function getBubbles(url, tile, callback) {
73296           var rect = tile.extent.rectangle();
73297           var urlForRequest = url + utilQsString({
73298             n: rect[3],
73299             s: rect[1],
73300             e: rect[2],
73301             w: rect[0],
73302             c: maxResults$2,
73303             appkey: bubbleAppKey,
73304             jsCallback: '{callback}'
73305           });
73306
73307           return jsonpRequest(urlForRequest, function (data) {
73308             if (!data || data.error) {
73309               callback(null);
73310             } else {
73311               callback(data);
73312             }
73313           });
73314         }
73315
73316
73317         // partition viewport into higher zoom tiles
73318         function partitionViewport$2(projection) {
73319           var z = geoScaleToZoom(projection.scale());
73320           var z2 = (Math.ceil(z * 2) / 2) + 2.5;   // round to next 0.5 and add 2.5
73321           var tiler = utilTiler().zoomExtent([z2, z2]);
73322
73323           return tiler.getTiles(projection)
73324             .map(function (tile) { return tile.extent; });
73325         }
73326
73327
73328         // no more than `limit` results per partition.
73329         function searchLimited$2(limit, projection, rtree) {
73330           limit = limit || 5;
73331
73332           return partitionViewport$2(projection)
73333             .reduce(function (result, extent) {
73334               var found = rtree.search(extent.bbox())
73335                 .slice(0, limit)
73336                 .map(function (d) { return d.data; });
73337
73338               return (found.length ? result.concat(found) : result);
73339             }, []);
73340         }
73341
73342
73343         /**
73344          * loadImage()
73345          */
73346         function loadImage(imgInfo) {
73347           return new Promise(function (resolve) {
73348             var img = new Image();
73349             img.onload = function () {
73350               var canvas = document.getElementById('canvas' + imgInfo.face);
73351               var ctx = canvas.getContext('2d');
73352               ctx.drawImage(img, imgInfo.x, imgInfo.y);
73353               resolve({ imgInfo: imgInfo, status: 'ok' });
73354             };
73355             img.onerror = function () {
73356               resolve({ data: imgInfo, status: 'error' });
73357             };
73358             img.setAttribute('crossorigin', '');
73359             img.src = imgInfo.url;
73360           });
73361         }
73362
73363
73364         /**
73365          * loadCanvas()
73366          */
73367         function loadCanvas(imageGroup) {
73368           return Promise.all(imageGroup.map(loadImage))
73369             .then(function (data) {
73370               var canvas = document.getElementById('canvas' + data[0].imgInfo.face);
73371               var which = { '01': 0, '02': 1, '03': 2, '10': 3, '11': 4, '12': 5 };
73372               var face = data[0].imgInfo.face;
73373               _dataUrlArray[which[face]] = canvas.toDataURL('image/jpeg', 1.0);
73374               return { status: 'loadCanvas for face ' + data[0].imgInfo.face + 'ok'};
73375             });
73376         }
73377
73378
73379         /**
73380          * loadFaces()
73381          */
73382         function loadFaces(faceGroup) {
73383           return Promise.all(faceGroup.map(loadCanvas))
73384             .then(function () { return { status: 'loadFaces done' }; });
73385         }
73386
73387
73388         function setupCanvas(selection, reset) {
73389           if (reset) {
73390             selection.selectAll('#divForCanvasWork')
73391               .remove();
73392           }
73393
73394           // Add the Streetside working canvases. These are used for 'stitching', or combining,
73395           // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
73396           selection.selectAll('#divForCanvasWork')
73397             .data([0])
73398             .enter()
73399             .append('div')
73400             .attr('id', 'divForCanvasWork')
73401             .attr('display', 'none')
73402             .selectAll('canvas')
73403             .data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12'])
73404             .enter()
73405             .append('canvas')
73406             .attr('id', function (d) { return d; })
73407             .attr('width', _resolution)
73408             .attr('height', _resolution);
73409         }
73410
73411
73412         function qkToXY(qk) {
73413           var x = 0;
73414           var y = 0;
73415           var scale = 256;
73416           for (var i = qk.length; i > 0; i--) {
73417             var key = qk[i-1];
73418             x += (+(key === '1' || key === '3')) * scale;
73419             y += (+(key === '2' || key === '3')) * scale;
73420             scale *= 2;
73421           }
73422           return [x, y];
73423         }
73424
73425
73426         function getQuadKeys() {
73427           var dim = _resolution / 256;
73428           var quadKeys;
73429
73430           if (dim === 16) {
73431             quadKeys = [
73432               '0000','0001','0010','0011','0100','0101','0110','0111',  '1000','1001','1010','1011','1100','1101','1110','1111',
73433               '0002','0003','0012','0013','0102','0103','0112','0113',  '1002','1003','1012','1013','1102','1103','1112','1113',
73434               '0020','0021','0030','0031','0120','0121','0130','0131',  '1020','1021','1030','1031','1120','1121','1130','1131',
73435               '0022','0023','0032','0033','0122','0123','0132','0133',  '1022','1023','1032','1033','1122','1123','1132','1133',
73436               '0200','0201','0210','0211','0300','0301','0310','0311',  '1200','1201','1210','1211','1300','1301','1310','1311',
73437               '0202','0203','0212','0213','0302','0303','0312','0313',  '1202','1203','1212','1213','1302','1303','1312','1313',
73438               '0220','0221','0230','0231','0320','0321','0330','0331',  '1220','1221','1230','1231','1320','1321','1330','1331',
73439               '0222','0223','0232','0233','0322','0323','0332','0333',  '1222','1223','1232','1233','1322','1323','1332','1333',
73440
73441               '2000','2001','2010','2011','2100','2101','2110','2111',  '3000','3001','3010','3011','3100','3101','3110','3111',
73442               '2002','2003','2012','2013','2102','2103','2112','2113',  '3002','3003','3012','3013','3102','3103','3112','3113',
73443               '2020','2021','2030','2031','2120','2121','2130','2131',  '3020','3021','3030','3031','3120','3121','3130','3131',
73444               '2022','2023','2032','2033','2122','2123','2132','2133',  '3022','3023','3032','3033','3122','3123','3132','3133',
73445               '2200','2201','2210','2211','2300','2301','2310','2311',  '3200','3201','3210','3211','3300','3301','3310','3311',
73446               '2202','2203','2212','2213','2302','2303','2312','2313',  '3202','3203','3212','3213','3302','3303','3312','3313',
73447               '2220','2221','2230','2231','2320','2321','2330','2331',  '3220','3221','3230','3231','3320','3321','3330','3331',
73448               '2222','2223','2232','2233','2322','2323','2332','2333',  '3222','3223','3232','3233','3322','3323','3332','3333'
73449             ];
73450
73451           } else if (dim === 8) {
73452             quadKeys = [
73453               '000','001','010','011',  '100','101','110','111',
73454               '002','003','012','013',  '102','103','112','113',
73455               '020','021','030','031',  '120','121','130','131',
73456               '022','023','032','033',  '122','123','132','133',
73457
73458               '200','201','210','211',  '300','301','310','311',
73459               '202','203','212','213',  '302','303','312','313',
73460               '220','221','230','231',  '320','321','330','331',
73461               '222','223','232','233',  '322','323','332','333'
73462             ];
73463
73464           } else if (dim === 4) {
73465             quadKeys = [
73466               '00','01',  '10','11',
73467               '02','03',  '12','13',
73468
73469               '20','21',  '30','31',
73470               '22','23',  '32','33'
73471             ];
73472
73473           } else {  // dim === 2
73474             quadKeys = [
73475               '0', '1',
73476               '2', '3'
73477             ];
73478           }
73479
73480           return quadKeys;
73481         }
73482
73483
73484
73485         var serviceStreetside = {
73486           /**
73487            * init() initialize streetside.
73488            */
73489           init: function() {
73490             if (!_ssCache) {
73491               this.reset();
73492             }
73493
73494             this.event = utilRebind(this, dispatch$6, 'on');
73495           },
73496
73497           /**
73498            * reset() reset the cache.
73499            */
73500           reset: function() {
73501             if (_ssCache) {
73502               Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$5);
73503             }
73504
73505             _ssCache = {
73506               bubbles: { inflight: {}, loaded: {}, nextPage: {}, rtree: new RBush(), points: {}, leaders: [] },
73507               sequences: {}
73508             };
73509           },
73510
73511           /**
73512            * bubbles()
73513            */
73514           bubbles: function(projection) {
73515             var limit = 5;
73516             return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
73517           },
73518
73519
73520           sequences: function(projection) {
73521             var viewport = projection.clipExtent();
73522             var min = [viewport[0][0], viewport[1][1]];
73523             var max = [viewport[1][0], viewport[0][1]];
73524             var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
73525             var seen = {};
73526             var results = [];
73527
73528             // all sequences for bubbles in viewport
73529             _ssCache.bubbles.rtree.search(bbox)
73530               .forEach(function (d) {
73531                 var key = d.data.sequenceKey;
73532                 if (key && !seen[key]) {
73533                     seen[key] = true;
73534                     results.push(_ssCache.sequences[key].geojson);
73535                 }
73536               });
73537
73538             return results;
73539           },
73540
73541
73542           /**
73543            * loadBubbles()
73544            */
73545           loadBubbles: function(projection, margin) {
73546             // by default: request 2 nearby tiles so we can connect sequences.
73547             if (margin === undefined) { margin = 2; }
73548
73549             loadTiles$2('bubbles', bubbleApi, projection, margin);
73550           },
73551
73552
73553           viewer: function() {
73554             return _pannellumViewer;
73555           },
73556
73557
73558           initViewer: function () {
73559             if (!window.pannellum) { return; }
73560             if (_pannellumViewer) { return; }
73561
73562             var sceneID = ++_currScene + '';
73563             var options = {
73564               'default': { firstScene: sceneID },
73565               scenes: {}
73566             };
73567             options.scenes[sceneID] = _sceneOptions;
73568
73569             _pannellumViewer = window.pannellum.viewer('viewer-streetside', options);
73570
73571             _pannellumViewer
73572               .on('mousedown', function () {
73573                 d3_select(window)
73574                   .on('mousemove.pannellum', function () { dispatch$6.call('viewerChanged'); });
73575               })
73576               .on('mouseup', function () {
73577                 d3_select(window)
73578                   .on('mousemove.pannellum', null);
73579
73580                 // continue dispatching events for a few seconds, in case viewer has inertia.
73581                 var t = timer(function (elapsed) {
73582                   dispatch$6.call('viewerChanged');
73583                   if (elapsed > 2000) {
73584                     t.stop();
73585                   }
73586                 });
73587               });
73588           },
73589
73590
73591           /**
73592            * loadViewer() create the streeside viewer.
73593            */
73594           loadViewer: function(context) {
73595             var that = this;
73596
73597             // create ms-wrapper, a photo wrapper class
73598             var wrap = d3_select('#photoviewer').selectAll('.ms-wrapper')
73599               .data([0]);
73600
73601             // inject ms-wrapper into the photoviewer div
73602             // (used by all to house each custom photo viewer)
73603             var wrapEnter = wrap.enter()
73604               .append('div')
73605               .attr('id', 'ms')
73606               .attr('class', 'photo-wrapper ms-wrapper')
73607               .classed('hide', true);
73608
73609             // inject div to support streetside viewer (pannellum) and attribution line
73610             wrapEnter
73611               .append('div')
73612               .attr('id', 'viewer-streetside')
73613               .append('div')
73614               .attr('class', 'photo-attribution fillD');
73615
73616             var controlsEnter = wrapEnter
73617               .append('div')
73618               .attr('class', 'photo-controls-wrap')
73619               .append('div')
73620               .attr('class', 'photo-controls');
73621
73622             controlsEnter
73623               .append('button')
73624               .on('click.back', step(-1))
73625               .text('◄');
73626
73627             controlsEnter
73628               .append('button')
73629               .on('click.forward', step(1))
73630               .text('►');
73631
73632
73633             // create working canvas for stitching together images
73634             wrap = wrap
73635               .merge(wrapEnter)
73636               .call(setupCanvas, true);
73637
73638             // load streetside pannellum viewer css
73639             d3_select('head').selectAll('#streetside-viewercss')
73640               .data([0])
73641               .enter()
73642               .append('link')
73643               .attr('id', 'streetside-viewercss')
73644               .attr('rel', 'stylesheet')
73645               .attr('href', context.asset(pannellumViewerCSS));
73646
73647             // load streetside pannellum viewer js
73648             d3_select('head').selectAll('#streetside-viewerjs')
73649               .data([0])
73650               .enter()
73651               .append('script')
73652               .attr('id', 'streetside-viewerjs')
73653               .attr('src', context.asset(pannellumViewerJS));
73654
73655
73656             // Register viewer resize handler
73657             context.ui().photoviewer.on('resize.streetside', function () {
73658               if (_pannellumViewer) {
73659                 _pannellumViewer.resize();
73660               }
73661             });
73662
73663
73664             function step(stepBy) {
73665               return function () {
73666                 var viewer = d3_select('#photoviewer');
73667                 var selected = viewer.empty() ? undefined : viewer.datum();
73668                 if (!selected) { return; }
73669
73670                 var nextID = (stepBy === 1 ? selected.ne : selected.pr);
73671                 var yaw = _pannellumViewer.getYaw();
73672                 var ca = selected.ca + yaw;
73673                 var origin = selected.loc;
73674
73675                 // construct a search trapezoid pointing out from current bubble
73676                 var meters = 35;
73677                 var p1 = [
73678                   origin[0] + geoMetersToLon(meters / 5, origin[1]),
73679                   origin[1]
73680                 ];
73681                 var p2 = [
73682                   origin[0] + geoMetersToLon(meters / 2, origin[1]),
73683                   origin[1] + geoMetersToLat(meters)
73684                 ];
73685                 var p3 = [
73686                   origin[0] - geoMetersToLon(meters / 2, origin[1]),
73687                   origin[1] + geoMetersToLat(meters)
73688                 ];
73689                 var p4 = [
73690                   origin[0] - geoMetersToLon(meters / 5, origin[1]),
73691                   origin[1]
73692                 ];
73693
73694                 var poly = [p1, p2, p3, p4, p1];
73695
73696                 // rotate it to face forward/backward
73697                 var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
73698                 poly = geoRotate(poly, -angle, origin);
73699
73700                 var extent = poly.reduce(function (extent, point) {
73701                   return extent.extend(geoExtent(point));
73702                 }, geoExtent());
73703
73704                 // find nearest other bubble in the search polygon
73705                 var minDist = Infinity;
73706                 _ssCache.bubbles.rtree.search(extent.bbox())
73707                   .forEach(function (d) {
73708                     if (d.data.key === selected.key) { return; }
73709                     if (!geoPointInPolygon(d.data.loc, poly)) { return; }
73710
73711                     var dist = geoVecLength(d.data.loc, selected.loc);
73712                     var theta = selected.ca - d.data.ca;
73713                     var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
73714                     if (minTheta > 20) {
73715                       dist += 5;  // penalize distance if camera angles don't match
73716                     }
73717
73718                     if (dist < minDist) {
73719                       nextID = d.data.key;
73720                       minDist = dist;
73721                     }
73722                   });
73723
73724                 var nextBubble = nextID && _ssCache.bubbles.points[nextID];
73725                 if (!nextBubble) { return; }
73726
73727                 context.map().centerEase(nextBubble.loc);
73728
73729                 that.selectImage(nextBubble)
73730                   .then(function (response) {
73731                     if (response.status === 'ok') {
73732                       _sceneOptions.yaw = yaw;
73733                       that.showViewer();
73734                     }
73735                   });
73736               };
73737             }
73738           },
73739
73740
73741           /**
73742            * showViewer()
73743            */
73744           showViewer: function(yaw) {
73745             if (!_sceneOptions) { return; }
73746
73747             if (yaw !== undefined) {
73748               _sceneOptions.yaw = yaw;
73749             }
73750
73751             if (!_pannellumViewer) {
73752               this.initViewer();
73753             } else {
73754               // make a new scene
73755               var sceneID = ++_currScene + '';
73756               _pannellumViewer
73757                 .addScene(sceneID, _sceneOptions)
73758                 .loadScene(sceneID);
73759
73760               // remove previous scene
73761               if (_currScene > 2) {
73762                 sceneID = (_currScene - 1) + '';
73763                 _pannellumViewer
73764                   .removeScene(sceneID);
73765               }
73766             }
73767
73768             var wrap = d3_select('#photoviewer')
73769               .classed('hide', false);
73770
73771             var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
73772
73773             if (isHidden) {
73774               wrap
73775                 .selectAll('.photo-wrapper:not(.ms-wrapper)')
73776                 .classed('hide', true);
73777
73778               wrap
73779                 .selectAll('.photo-wrapper.ms-wrapper')
73780                 .classed('hide', false);
73781             }
73782
73783             return this;
73784           },
73785
73786
73787           /**
73788            * hideViewer()
73789            */
73790           hideViewer: function () {
73791             var viewer = d3_select('#photoviewer');
73792             if (!viewer.empty()) { viewer.datum(null); }
73793
73794             viewer
73795               .classed('hide', true)
73796               .selectAll('.photo-wrapper')
73797               .classed('hide', true);
73798
73799             d3_selectAll('.viewfield-group, .sequence, .icon-sign')
73800               .classed('currentView', false);
73801
73802             return this.setStyles(null, true);
73803           },
73804
73805
73806           /**
73807            * selectImage().
73808            */
73809           selectImage: function (d) {
73810             var that = this;
73811             var viewer = d3_select('#photoviewer');
73812             if (!viewer.empty()) { viewer.datum(d); }
73813
73814             this.setStyles(null, true);
73815
73816             var wrap = d3_select('#photoviewer .ms-wrapper');
73817             var attribution = wrap.selectAll('.photo-attribution').html('');
73818
73819             wrap.selectAll('.pnlm-load-box')   // display "loading.."
73820               .style('display', 'block');
73821
73822             if (!d) {
73823               return Promise.resolve({ status: 'ok' });
73824             }
73825
73826             var line1 = attribution
73827               .append('div')
73828               .attr('class', 'attribution-row');
73829
73830             // Add hires checkbox
73831             var label = line1
73832               .append('label')
73833               .attr('class', 'streetside-hires');
73834
73835             label
73836               .append('input')
73837               .attr('type', 'checkbox')
73838               .attr('id', 'streetside-hires-input')
73839               .property('checked', _hires)
73840               .on('click', function () {
73841                 event.stopPropagation();
73842
73843                 _hires = !_hires;
73844                 _resolution = _hires ? 1024 : 512;
73845                 wrap.call(setupCanvas, true);
73846
73847                 var viewstate = {
73848                   yaw: _pannellumViewer.getYaw(),
73849                   pitch: _pannellumViewer.getPitch(),
73850                   hfov: _pannellumViewer.getHfov()
73851                 };
73852
73853                 that.selectImage(d)
73854                   .then(function (response) {
73855                     if (response.status === 'ok') {
73856                       _sceneOptions = Object.assign(_sceneOptions, viewstate);
73857                       that.showViewer();
73858                     }
73859                   });
73860               });
73861
73862             label
73863               .append('span')
73864               .text(t('streetside.hires'));
73865
73866
73867             var captureInfo = line1
73868               .append('div')
73869               .attr('class', 'attribution-capture-info');
73870
73871             // Add capture date
73872             if (d.captured_by) {
73873               var yyyy = (new Date()).getFullYear();
73874
73875               captureInfo
73876                 .append('a')
73877                 .attr('class', 'captured_by')
73878                 .attr('target', '_blank')
73879                 .attr('href', 'https://www.microsoft.com/en-us/maps/streetside')
73880                 .text('©' + yyyy + ' Microsoft');
73881
73882               captureInfo
73883                 .append('span')
73884                 .text('|');
73885             }
73886
73887             if (d.captured_at) {
73888               captureInfo
73889                 .append('span')
73890                 .attr('class', 'captured_at')
73891                 .text(localeTimestamp(d.captured_at));
73892             }
73893
73894             // Add image links
73895             var line2 = attribution
73896               .append('div')
73897               .attr('class', 'attribution-row');
73898
73899             line2
73900               .append('a')
73901               .attr('class', 'image-view-link')
73902               .attr('target', '_blank')
73903               .attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] +
73904                 '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1')
73905               .text(t('streetside.view_on_bing'));
73906
73907             line2
73908               .append('a')
73909               .attr('class', 'image-report-link')
73910               .attr('target', '_blank')
73911               .attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' +
73912                 encodeURIComponent(d.key) + '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17')
73913               .text(t('streetside.report'));
73914
73915
73916             var bubbleIdQuadKey = d.key.toString(4);
73917             var paddingNeeded = 16 - bubbleIdQuadKey.length;
73918             for (var i = 0; i < paddingNeeded; i++) {
73919               bubbleIdQuadKey = '0' + bubbleIdQuadKey;
73920             }
73921             var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
73922             var imgUrlSuffix = '.jpg?g=6338&n=z';
73923
73924             // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
73925             var faceKeys = ['01','02','03','10','11','12'];
73926
73927             // Map images to cube faces
73928             var quadKeys = getQuadKeys();
73929             var faces = faceKeys.map(function (faceKey) {
73930               return quadKeys.map(function (quadKey) {
73931                 var xy = qkToXY(quadKey);
73932                 return {
73933                   face: faceKey,
73934                   url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
73935                   x: xy[0],
73936                   y: xy[1]
73937                 };
73938               });
73939             });
73940
73941             return loadFaces(faces)
73942               .then(function () {
73943                 _sceneOptions = {
73944                   showFullscreenCtrl: false,
73945                   autoLoad: true,
73946                   compass: true,
73947                   northOffset: d.ca,
73948                   yaw: 0,
73949                   minHfov: minHfov,
73950                   maxHfov: maxHfov,
73951                   hfov: defaultHfov,
73952                   type: 'cubemap',
73953                   cubeMap: [
73954                     _dataUrlArray[0],
73955                     _dataUrlArray[1],
73956                     _dataUrlArray[2],
73957                     _dataUrlArray[3],
73958                     _dataUrlArray[4],
73959                     _dataUrlArray[5]
73960                   ]
73961                 };
73962                 return { status: 'ok' };
73963               });
73964           },
73965
73966
73967           getSequenceKeyForBubble: function(d) {
73968             return d && d.sequenceKey;
73969           },
73970
73971
73972           // Updates the currently highlighted sequence and selected bubble.
73973           // Reset is only necessary when interacting with the viewport because
73974           // this implicitly changes the currently selected bubble/sequence
73975           setStyles: function (hovered, reset) {
73976             if (reset) {  // reset all layers
73977               d3_selectAll('.viewfield-group')
73978                 .classed('highlighted', false)
73979                 .classed('hovered', false)
73980                 .classed('currentView', false);
73981
73982               d3_selectAll('.sequence')
73983                 .classed('highlighted', false)
73984                 .classed('currentView', false);
73985             }
73986
73987             var hoveredBubbleKey = hovered && hovered.key;
73988             var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
73989             var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
73990             var hoveredBubbleKeys =  (hoveredSequence && hoveredSequence.bubbles.map(function (d) { return d.key; })) || [];
73991
73992             var viewer = d3_select('#photoviewer');
73993             var selected = viewer.empty() ? undefined : viewer.datum();
73994             var selectedBubbleKey = selected && selected.key;
73995             var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
73996             var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
73997             var selectedBubbleKeys = (selectedSequence && selectedSequence.bubbles.map(function (d) { return d.key; })) || [];
73998
73999             // highlight sibling viewfields on either the selected or the hovered sequences
74000             var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
74001
74002             d3_selectAll('.layer-streetside-images .viewfield-group')
74003               .classed('highlighted', function (d) { return highlightedBubbleKeys.indexOf(d.key) !== -1; })
74004               .classed('hovered',     function (d) { return d.key === hoveredBubbleKey; })
74005               .classed('currentView', function (d) { return d.key === selectedBubbleKey; });
74006
74007             d3_selectAll('.layer-streetside-images .sequence')
74008               .classed('highlighted', function (d) { return d.properties.key === hoveredSequenceKey; })
74009               .classed('currentView', function (d) { return d.properties.key === selectedSequenceKey; });
74010
74011             // update viewfields if needed
74012             d3_selectAll('.viewfield-group .viewfield')
74013               .attr('d', viewfieldPath);
74014
74015             function viewfieldPath() {
74016               var d = this.parentNode.__data__;
74017               if (d.pano && d.key !== selectedBubbleKey) {
74018                 return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
74019               } else {
74020                 return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
74021               }
74022             }
74023
74024             return this;
74025           },
74026
74027
74028           /**
74029            * cache().
74030            */
74031           cache: function () {
74032             return _ssCache;
74033           }
74034         };
74035
74036         var apibase$4 = 'https://taginfo.openstreetmap.org/api/4/';
74037         var _inflight$2 = {};
74038         var _popularKeys = {};
74039         var _taginfoCache = {};
74040
74041         var tag_sorts = {
74042             point: 'count_nodes',
74043             vertex: 'count_nodes',
74044             area: 'count_ways',
74045             line: 'count_ways'
74046         };
74047         var tag_sort_members = {
74048             point: 'count_node_members',
74049             vertex: 'count_node_members',
74050             area: 'count_way_members',
74051             line: 'count_way_members',
74052             relation: 'count_relation_members'
74053         };
74054         var tag_filters = {
74055             point: 'nodes',
74056             vertex: 'nodes',
74057             area: 'ways',
74058             line: 'ways'
74059         };
74060         var tag_members_fractions = {
74061             point: 'count_node_members_fraction',
74062             vertex: 'count_node_members_fraction',
74063             area: 'count_way_members_fraction',
74064             line: 'count_way_members_fraction',
74065             relation: 'count_relation_members_fraction'
74066         };
74067
74068
74069         function sets(params, n, o) {
74070             if (params.geometry && o[params.geometry]) {
74071                 params[n] = o[params.geometry];
74072             }
74073             return params;
74074         }
74075
74076
74077         function setFilter(params) {
74078             return sets(params, 'filter', tag_filters);
74079         }
74080
74081
74082         function setSort(params) {
74083             return sets(params, 'sortname', tag_sorts);
74084         }
74085
74086
74087         function setSortMembers(params) {
74088             return sets(params, 'sortname', tag_sort_members);
74089         }
74090
74091
74092         function clean(params) {
74093             return utilObjectOmit(params, ['geometry', 'debounce']);
74094         }
74095
74096
74097         function filterKeys(type) {
74098             var count_type = type ? 'count_' + type : 'count_all';
74099             return function(d) {
74100                 return parseFloat(d[count_type]) > 2500 || d.in_wiki;
74101             };
74102         }
74103
74104
74105         function filterMultikeys(prefix) {
74106             return function(d) {
74107                 // d.key begins with prefix, and d.key contains no additional ':'s
74108                 var re = new RegExp('^' + prefix + '(.*)$');
74109                 var matches = d.key.match(re) || [];
74110                 return (matches.length === 2 && matches[1].indexOf(':') === -1);
74111             };
74112         }
74113
74114
74115         function filterValues(allowUpperCase) {
74116             return function(d) {
74117                 if (d.value.match(/[;,]/) !== null) { return false; }  // exclude some punctuation
74118                 if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) { return false; }  // exclude uppercase letters
74119                 return parseFloat(d.fraction) > 0.0;
74120             };
74121         }
74122
74123
74124         function filterRoles(geometry) {
74125             return function(d) {
74126                 if (d.role === '') { return false; } // exclude empty role
74127                 if (d.role.match(/[A-Z*;,]/) !== null) { return false; }  // exclude uppercase letters and some punctuation
74128                 return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
74129             };
74130         }
74131
74132
74133         function valKey(d) {
74134             return {
74135                 value: d.key,
74136                 title: d.key
74137             };
74138         }
74139
74140
74141         function valKeyDescription(d) {
74142             var obj = {
74143                 value: d.value,
74144                 title: d.description || d.value
74145             };
74146             if (d.count) {
74147                 obj.count = d.count;
74148             }
74149             return obj;
74150         }
74151
74152
74153         function roleKey(d) {
74154             return {
74155                 value: d.role,
74156                 title: d.role
74157             };
74158         }
74159
74160
74161         // sort keys with ':' lower than keys without ':'
74162         function sortKeys(a, b) {
74163             return (a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1) ? -1
74164                 : (a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1) ? 1
74165                 : 0;
74166         }
74167
74168
74169         var debouncedRequest$1 = debounce(request$1, 300, { leading: false });
74170
74171         function request$1(url, params, exactMatch, callback, loaded) {
74172             if (_inflight$2[url]) { return; }
74173
74174             if (checkCache(url, params, exactMatch, callback)) { return; }
74175
74176             var controller = new AbortController();
74177             _inflight$2[url] = controller;
74178
74179             d3_json(url, { signal: controller.signal })
74180                 .then(function(result) {
74181                     delete _inflight$2[url];
74182                     if (loaded) { loaded(null, result); }
74183                 })
74184                 .catch(function(err) {
74185                     delete _inflight$2[url];
74186                     if (err.name === 'AbortError') { return; }
74187                     if (loaded) { loaded(err.message); }
74188                 });
74189         }
74190
74191
74192         function checkCache(url, params, exactMatch, callback) {
74193             var rp = params.rp || 25;
74194             var testQuery = params.query || '';
74195             var testUrl = url;
74196
74197             do {
74198                 var hit = _taginfoCache[testUrl];
74199
74200                 // exact match, or shorter match yielding fewer than max results (rp)
74201                 if (hit && (url === testUrl || hit.length < rp)) {
74202                     callback(null, hit);
74203                     return true;
74204                 }
74205
74206                 // don't try to shorten the query
74207                 if (exactMatch || !testQuery.length) { return false; }
74208
74209                 // do shorten the query to see if we already have a cached result
74210                 // that has returned fewer than max results (rp)
74211                 testQuery = testQuery.slice(0, -1);
74212                 testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
74213             } while (testQuery.length >= 0);
74214
74215             return false;
74216         }
74217
74218
74219         var serviceTaginfo = {
74220
74221             init: function() {
74222                 _inflight$2 = {};
74223                 _taginfoCache = {};
74224                 _popularKeys = {
74225                     postal_code: true   // #5377
74226                 };
74227
74228                 // Fetch popular keys.  We'll exclude these from `values`
74229                 // lookups because they stress taginfo, and they aren't likely
74230                 // to yield meaningful autocomplete results.. see #3955
74231                 var params = {
74232                     rp: 100,
74233                     sortname: 'values_all',
74234                     sortorder: 'desc',
74235                     page: 1,
74236                     debounce: false,
74237                     lang: currentLocale
74238                 };
74239                 this.keys(params, function(err, data) {
74240                     if (err) { return; }
74241                     data.forEach(function(d) {
74242                         if (d.value === 'opening_hours') { return; }  // exception
74243                         _popularKeys[d.value] = true;
74244                     });
74245                 });
74246             },
74247
74248
74249             reset: function() {
74250                 Object.values(_inflight$2).forEach(function(controller) { controller.abort(); });
74251                 _inflight$2 = {};
74252             },
74253
74254
74255             keys: function(params, callback) {
74256                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
74257                 params = clean(setSort(params));
74258                 params = Object.assign({
74259                     rp: 10,
74260                     sortname: 'count_all',
74261                     sortorder: 'desc',
74262                     page: 1,
74263                     lang: currentLocale
74264                 }, params);
74265
74266                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
74267                 doRequest(url, params, false, callback, function(err, d) {
74268                     if (err) {
74269                         callback(err);
74270                     } else {
74271                         var f = filterKeys(params.filter);
74272                         var result = d.data.filter(f).sort(sortKeys).map(valKey);
74273                         _taginfoCache[url] = result;
74274                         callback(null, result);
74275                     }
74276                 });
74277             },
74278
74279
74280             multikeys: function(params, callback) {
74281                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
74282                 params = clean(setSort(params));
74283                 params = Object.assign({
74284                     rp: 25,
74285                     sortname: 'count_all',
74286                     sortorder: 'desc',
74287                     page: 1,
74288                     lang: currentLocale
74289                 }, params);
74290
74291                 var prefix = params.query;
74292                 var url = apibase$4 + 'keys/all?' + utilQsString(params);
74293                 doRequest(url, params, true, callback, function(err, d) {
74294                     if (err) {
74295                         callback(err);
74296                     } else {
74297                         var f = filterMultikeys(prefix);
74298                         var result = d.data.filter(f).map(valKey);
74299                         _taginfoCache[url] = result;
74300                         callback(null, result);
74301                     }
74302                 });
74303             },
74304
74305
74306             values: function(params, callback) {
74307                 // Exclude popular keys from values lookups.. see #3955
74308                 var key = params.key;
74309                 if (key && _popularKeys[key]) {
74310                     callback(null, []);
74311                     return;
74312                 }
74313
74314                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
74315                 params = clean(setSort(setFilter(params)));
74316                 params = Object.assign({
74317                     rp: 25,
74318                     sortname: 'count_all',
74319                     sortorder: 'desc',
74320                     page: 1,
74321                     lang: currentLocale
74322                 }, params);
74323
74324                 var url = apibase$4 + 'key/values?' + utilQsString(params);
74325                 doRequest(url, params, false, callback, function(err, d) {
74326                     if (err) {
74327                         callback(err);
74328                     } else {
74329                         // In most cases we prefer taginfo value results with lowercase letters.
74330                         // A few OSM keys expect values to contain uppercase values (see #3377).
74331                         // This is not an exhaustive list (e.g. `name` also has uppercase values)
74332                         // but these are the fields where taginfo value lookup is most useful.
74333                         var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery/;
74334                         var allowUpperCase = re.test(params.key);
74335                         var f = filterValues(allowUpperCase);
74336
74337                         var result = d.data.filter(f).map(valKeyDescription);
74338                         _taginfoCache[url] = result;
74339                         callback(null, result);
74340                     }
74341                 });
74342             },
74343
74344
74345             roles: function(params, callback) {
74346                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
74347                 var geometry = params.geometry;
74348                 params = clean(setSortMembers(params));
74349                 params = Object.assign({
74350                     rp: 25,
74351                     sortname: 'count_all_members',
74352                     sortorder: 'desc',
74353                     page: 1,
74354                     lang: currentLocale
74355                 }, params);
74356
74357                 var url = apibase$4 + 'relation/roles?' + utilQsString(params);
74358                 doRequest(url, params, true, callback, function(err, d) {
74359                     if (err) {
74360                         callback(err);
74361                     } else {
74362                         var f = filterRoles(geometry);
74363                         var result = d.data.filter(f).map(roleKey);
74364                         _taginfoCache[url] = result;
74365                         callback(null, result);
74366                     }
74367                 });
74368             },
74369
74370
74371             docs: function(params, callback) {
74372                 var doRequest = params.debounce ? debouncedRequest$1 : request$1;
74373                 params = clean(setSort(params));
74374
74375                 var path = 'key/wiki_pages?';
74376                 if (params.value) {
74377                     path = 'tag/wiki_pages?';
74378                 } else if (params.rtype) {
74379                     path = 'relation/wiki_pages?';
74380                 }
74381
74382                 var url = apibase$4 + path + utilQsString(params);
74383                 doRequest(url, params, true, callback, function(err, d) {
74384                     if (err) {
74385                         callback(err);
74386                     } else {
74387                         _taginfoCache[url] = d.data;
74388                         callback(null, d.data);
74389                     }
74390                 });
74391             },
74392
74393
74394             apibase: function(_) {
74395                 if (!arguments.length) { return apibase$4; }
74396                 apibase$4 = _;
74397                 return this;
74398             }
74399
74400         };
74401
74402         var helpers = createCommonjsModule(function (module, exports) {
74403         Object.defineProperty(exports, "__esModule", { value: true });
74404         /**
74405          * @module helpers
74406          */
74407         /**
74408          * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
74409          *
74410          * @memberof helpers
74411          * @type {number}
74412          */
74413         exports.earthRadius = 6371008.8;
74414         /**
74415          * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
74416          *
74417          * @memberof helpers
74418          * @type {Object}
74419          */
74420         exports.factors = {
74421             centimeters: exports.earthRadius * 100,
74422             centimetres: exports.earthRadius * 100,
74423             degrees: exports.earthRadius / 111325,
74424             feet: exports.earthRadius * 3.28084,
74425             inches: exports.earthRadius * 39.370,
74426             kilometers: exports.earthRadius / 1000,
74427             kilometres: exports.earthRadius / 1000,
74428             meters: exports.earthRadius,
74429             metres: exports.earthRadius,
74430             miles: exports.earthRadius / 1609.344,
74431             millimeters: exports.earthRadius * 1000,
74432             millimetres: exports.earthRadius * 1000,
74433             nauticalmiles: exports.earthRadius / 1852,
74434             radians: 1,
74435             yards: exports.earthRadius / 1.0936,
74436         };
74437         /**
74438          * Units of measurement factors based on 1 meter.
74439          *
74440          * @memberof helpers
74441          * @type {Object}
74442          */
74443         exports.unitsFactors = {
74444             centimeters: 100,
74445             centimetres: 100,
74446             degrees: 1 / 111325,
74447             feet: 3.28084,
74448             inches: 39.370,
74449             kilometers: 1 / 1000,
74450             kilometres: 1 / 1000,
74451             meters: 1,
74452             metres: 1,
74453             miles: 1 / 1609.344,
74454             millimeters: 1000,
74455             millimetres: 1000,
74456             nauticalmiles: 1 / 1852,
74457             radians: 1 / exports.earthRadius,
74458             yards: 1 / 1.0936,
74459         };
74460         /**
74461          * Area of measurement factors based on 1 square meter.
74462          *
74463          * @memberof helpers
74464          * @type {Object}
74465          */
74466         exports.areaFactors = {
74467             acres: 0.000247105,
74468             centimeters: 10000,
74469             centimetres: 10000,
74470             feet: 10.763910417,
74471             inches: 1550.003100006,
74472             kilometers: 0.000001,
74473             kilometres: 0.000001,
74474             meters: 1,
74475             metres: 1,
74476             miles: 3.86e-7,
74477             millimeters: 1000000,
74478             millimetres: 1000000,
74479             yards: 1.195990046,
74480         };
74481         /**
74482          * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
74483          *
74484          * @name feature
74485          * @param {Geometry} geometry input geometry
74486          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74487          * @param {Object} [options={}] Optional Parameters
74488          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74489          * @param {string|number} [options.id] Identifier associated with the Feature
74490          * @returns {Feature} a GeoJSON Feature
74491          * @example
74492          * var geometry = {
74493          *   "type": "Point",
74494          *   "coordinates": [110, 50]
74495          * };
74496          *
74497          * var feature = turf.feature(geometry);
74498          *
74499          * //=feature
74500          */
74501         function feature(geom, properties, options) {
74502             if (options === void 0) { options = {}; }
74503             var feat = { type: "Feature" };
74504             if (options.id === 0 || options.id) {
74505                 feat.id = options.id;
74506             }
74507             if (options.bbox) {
74508                 feat.bbox = options.bbox;
74509             }
74510             feat.properties = properties || {};
74511             feat.geometry = geom;
74512             return feat;
74513         }
74514         exports.feature = feature;
74515         /**
74516          * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
74517          * For GeometryCollection type use `helpers.geometryCollection`
74518          *
74519          * @name geometry
74520          * @param {string} type Geometry Type
74521          * @param {Array<any>} coordinates Coordinates
74522          * @param {Object} [options={}] Optional Parameters
74523          * @returns {Geometry} a GeoJSON Geometry
74524          * @example
74525          * var type = "Point";
74526          * var coordinates = [110, 50];
74527          * var geometry = turf.geometry(type, coordinates);
74528          * // => geometry
74529          */
74530         function geometry(type, coordinates, options) {
74531             switch (type) {
74532                 case "Point": return point(coordinates).geometry;
74533                 case "LineString": return lineString(coordinates).geometry;
74534                 case "Polygon": return polygon(coordinates).geometry;
74535                 case "MultiPoint": return multiPoint(coordinates).geometry;
74536                 case "MultiLineString": return multiLineString(coordinates).geometry;
74537                 case "MultiPolygon": return multiPolygon(coordinates).geometry;
74538                 default: throw new Error(type + " is invalid");
74539             }
74540         }
74541         exports.geometry = geometry;
74542         /**
74543          * Creates a {@link Point} {@link Feature} from a Position.
74544          *
74545          * @name point
74546          * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
74547          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74548          * @param {Object} [options={}] Optional Parameters
74549          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74550          * @param {string|number} [options.id] Identifier associated with the Feature
74551          * @returns {Feature<Point>} a Point feature
74552          * @example
74553          * var point = turf.point([-75.343, 39.984]);
74554          *
74555          * //=point
74556          */
74557         function point(coordinates, properties, options) {
74558             if (options === void 0) { options = {}; }
74559             var geom = {
74560                 type: "Point",
74561                 coordinates: coordinates,
74562             };
74563             return feature(geom, properties, options);
74564         }
74565         exports.point = point;
74566         /**
74567          * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
74568          *
74569          * @name points
74570          * @param {Array<Array<number>>} coordinates an array of Points
74571          * @param {Object} [properties={}] Translate these properties to each Feature
74572          * @param {Object} [options={}] Optional Parameters
74573          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
74574          * associated with the FeatureCollection
74575          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
74576          * @returns {FeatureCollection<Point>} Point Feature
74577          * @example
74578          * var points = turf.points([
74579          *   [-75, 39],
74580          *   [-80, 45],
74581          *   [-78, 50]
74582          * ]);
74583          *
74584          * //=points
74585          */
74586         function points(coordinates, properties, options) {
74587             if (options === void 0) { options = {}; }
74588             return featureCollection(coordinates.map(function (coords) {
74589                 return point(coords, properties);
74590             }), options);
74591         }
74592         exports.points = points;
74593         /**
74594          * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
74595          *
74596          * @name polygon
74597          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
74598          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74599          * @param {Object} [options={}] Optional Parameters
74600          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74601          * @param {string|number} [options.id] Identifier associated with the Feature
74602          * @returns {Feature<Polygon>} Polygon Feature
74603          * @example
74604          * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
74605          *
74606          * //=polygon
74607          */
74608         function polygon(coordinates, properties, options) {
74609             if (options === void 0) { options = {}; }
74610             for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
74611                 var ring = coordinates_1[_i];
74612                 if (ring.length < 4) {
74613                     throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
74614                 }
74615                 for (var j = 0; j < ring[ring.length - 1].length; j++) {
74616                     // Check if first point of Polygon contains two numbers
74617                     if (ring[ring.length - 1][j] !== ring[0][j]) {
74618                         throw new Error("First and last Position are not equivalent.");
74619                     }
74620                 }
74621             }
74622             var geom = {
74623                 type: "Polygon",
74624                 coordinates: coordinates,
74625             };
74626             return feature(geom, properties, options);
74627         }
74628         exports.polygon = polygon;
74629         /**
74630          * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
74631          *
74632          * @name polygons
74633          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
74634          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74635          * @param {Object} [options={}] Optional Parameters
74636          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74637          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
74638          * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
74639          * @example
74640          * var polygons = turf.polygons([
74641          *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
74642          *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
74643          * ]);
74644          *
74645          * //=polygons
74646          */
74647         function polygons(coordinates, properties, options) {
74648             if (options === void 0) { options = {}; }
74649             return featureCollection(coordinates.map(function (coords) {
74650                 return polygon(coords, properties);
74651             }), options);
74652         }
74653         exports.polygons = polygons;
74654         /**
74655          * Creates a {@link LineString} {@link Feature} from an Array of Positions.
74656          *
74657          * @name lineString
74658          * @param {Array<Array<number>>} coordinates an array of Positions
74659          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74660          * @param {Object} [options={}] Optional Parameters
74661          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74662          * @param {string|number} [options.id] Identifier associated with the Feature
74663          * @returns {Feature<LineString>} LineString Feature
74664          * @example
74665          * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
74666          * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
74667          *
74668          * //=linestring1
74669          * //=linestring2
74670          */
74671         function lineString(coordinates, properties, options) {
74672             if (options === void 0) { options = {}; }
74673             if (coordinates.length < 2) {
74674                 throw new Error("coordinates must be an array of two or more positions");
74675             }
74676             var geom = {
74677                 type: "LineString",
74678                 coordinates: coordinates,
74679             };
74680             return feature(geom, properties, options);
74681         }
74682         exports.lineString = lineString;
74683         /**
74684          * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
74685          *
74686          * @name lineStrings
74687          * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
74688          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74689          * @param {Object} [options={}] Optional Parameters
74690          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
74691          * associated with the FeatureCollection
74692          * @param {string|number} [options.id] Identifier associated with the FeatureCollection
74693          * @returns {FeatureCollection<LineString>} LineString FeatureCollection
74694          * @example
74695          * var linestrings = turf.lineStrings([
74696          *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
74697          *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
74698          * ]);
74699          *
74700          * //=linestrings
74701          */
74702         function lineStrings(coordinates, properties, options) {
74703             if (options === void 0) { options = {}; }
74704             return featureCollection(coordinates.map(function (coords) {
74705                 return lineString(coords, properties);
74706             }), options);
74707         }
74708         exports.lineStrings = lineStrings;
74709         /**
74710          * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
74711          *
74712          * @name featureCollection
74713          * @param {Feature[]} features input features
74714          * @param {Object} [options={}] Optional Parameters
74715          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74716          * @param {string|number} [options.id] Identifier associated with the Feature
74717          * @returns {FeatureCollection} FeatureCollection of Features
74718          * @example
74719          * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
74720          * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
74721          * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
74722          *
74723          * var collection = turf.featureCollection([
74724          *   locationA,
74725          *   locationB,
74726          *   locationC
74727          * ]);
74728          *
74729          * //=collection
74730          */
74731         function featureCollection(features, options) {
74732             if (options === void 0) { options = {}; }
74733             var fc = { type: "FeatureCollection" };
74734             if (options.id) {
74735                 fc.id = options.id;
74736             }
74737             if (options.bbox) {
74738                 fc.bbox = options.bbox;
74739             }
74740             fc.features = features;
74741             return fc;
74742         }
74743         exports.featureCollection = featureCollection;
74744         /**
74745          * Creates a {@link Feature<MultiLineString>} based on a
74746          * coordinate array. Properties can be added optionally.
74747          *
74748          * @name multiLineString
74749          * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
74750          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74751          * @param {Object} [options={}] Optional Parameters
74752          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74753          * @param {string|number} [options.id] Identifier associated with the Feature
74754          * @returns {Feature<MultiLineString>} a MultiLineString feature
74755          * @throws {Error} if no coordinates are passed
74756          * @example
74757          * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
74758          *
74759          * //=multiLine
74760          */
74761         function multiLineString(coordinates, properties, options) {
74762             if (options === void 0) { options = {}; }
74763             var geom = {
74764                 type: "MultiLineString",
74765                 coordinates: coordinates,
74766             };
74767             return feature(geom, properties, options);
74768         }
74769         exports.multiLineString = multiLineString;
74770         /**
74771          * Creates a {@link Feature<MultiPoint>} based on a
74772          * coordinate array. Properties can be added optionally.
74773          *
74774          * @name multiPoint
74775          * @param {Array<Array<number>>} coordinates an array of Positions
74776          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74777          * @param {Object} [options={}] Optional Parameters
74778          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74779          * @param {string|number} [options.id] Identifier associated with the Feature
74780          * @returns {Feature<MultiPoint>} a MultiPoint feature
74781          * @throws {Error} if no coordinates are passed
74782          * @example
74783          * var multiPt = turf.multiPoint([[0,0],[10,10]]);
74784          *
74785          * //=multiPt
74786          */
74787         function multiPoint(coordinates, properties, options) {
74788             if (options === void 0) { options = {}; }
74789             var geom = {
74790                 type: "MultiPoint",
74791                 coordinates: coordinates,
74792             };
74793             return feature(geom, properties, options);
74794         }
74795         exports.multiPoint = multiPoint;
74796         /**
74797          * Creates a {@link Feature<MultiPolygon>} based on a
74798          * coordinate array. Properties can be added optionally.
74799          *
74800          * @name multiPolygon
74801          * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
74802          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74803          * @param {Object} [options={}] Optional Parameters
74804          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74805          * @param {string|number} [options.id] Identifier associated with the Feature
74806          * @returns {Feature<MultiPolygon>} a multipolygon feature
74807          * @throws {Error} if no coordinates are passed
74808          * @example
74809          * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
74810          *
74811          * //=multiPoly
74812          *
74813          */
74814         function multiPolygon(coordinates, properties, options) {
74815             if (options === void 0) { options = {}; }
74816             var geom = {
74817                 type: "MultiPolygon",
74818                 coordinates: coordinates,
74819             };
74820             return feature(geom, properties, options);
74821         }
74822         exports.multiPolygon = multiPolygon;
74823         /**
74824          * Creates a {@link Feature<GeometryCollection>} based on a
74825          * coordinate array. Properties can be added optionally.
74826          *
74827          * @name geometryCollection
74828          * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
74829          * @param {Object} [properties={}] an Object of key-value pairs to add as properties
74830          * @param {Object} [options={}] Optional Parameters
74831          * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
74832          * @param {string|number} [options.id] Identifier associated with the Feature
74833          * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
74834          * @example
74835          * var pt = turf.geometry("Point", [100, 0]);
74836          * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
74837          * var collection = turf.geometryCollection([pt, line]);
74838          *
74839          * // => collection
74840          */
74841         function geometryCollection(geometries, properties, options) {
74842             if (options === void 0) { options = {}; }
74843             var geom = {
74844                 type: "GeometryCollection",
74845                 geometries: geometries,
74846             };
74847             return feature(geom, properties, options);
74848         }
74849         exports.geometryCollection = geometryCollection;
74850         /**
74851          * Round number to precision
74852          *
74853          * @param {number} num Number
74854          * @param {number} [precision=0] Precision
74855          * @returns {number} rounded number
74856          * @example
74857          * turf.round(120.4321)
74858          * //=120
74859          *
74860          * turf.round(120.4321, 2)
74861          * //=120.43
74862          */
74863         function round(num, precision) {
74864             if (precision === void 0) { precision = 0; }
74865             if (precision && !(precision >= 0)) {
74866                 throw new Error("precision must be a positive number");
74867             }
74868             var multiplier = Math.pow(10, precision || 0);
74869             return Math.round(num * multiplier) / multiplier;
74870         }
74871         exports.round = round;
74872         /**
74873          * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
74874          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
74875          *
74876          * @name radiansToLength
74877          * @param {number} radians in radians across the sphere
74878          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
74879          * meters, kilometres, kilometers.
74880          * @returns {number} distance
74881          */
74882         function radiansToLength(radians, units) {
74883             if (units === void 0) { units = "kilometers"; }
74884             var factor = exports.factors[units];
74885             if (!factor) {
74886                 throw new Error(units + " units is invalid");
74887             }
74888             return radians * factor;
74889         }
74890         exports.radiansToLength = radiansToLength;
74891         /**
74892          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
74893          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
74894          *
74895          * @name lengthToRadians
74896          * @param {number} distance in real units
74897          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
74898          * meters, kilometres, kilometers.
74899          * @returns {number} radians
74900          */
74901         function lengthToRadians(distance, units) {
74902             if (units === void 0) { units = "kilometers"; }
74903             var factor = exports.factors[units];
74904             if (!factor) {
74905                 throw new Error(units + " units is invalid");
74906             }
74907             return distance / factor;
74908         }
74909         exports.lengthToRadians = lengthToRadians;
74910         /**
74911          * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
74912          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
74913          *
74914          * @name lengthToDegrees
74915          * @param {number} distance in real units
74916          * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
74917          * meters, kilometres, kilometers.
74918          * @returns {number} degrees
74919          */
74920         function lengthToDegrees(distance, units) {
74921             return radiansToDegrees(lengthToRadians(distance, units));
74922         }
74923         exports.lengthToDegrees = lengthToDegrees;
74924         /**
74925          * Converts any bearing angle from the north line direction (positive clockwise)
74926          * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
74927          *
74928          * @name bearingToAzimuth
74929          * @param {number} bearing angle, between -180 and +180 degrees
74930          * @returns {number} angle between 0 and 360 degrees
74931          */
74932         function bearingToAzimuth(bearing) {
74933             var angle = bearing % 360;
74934             if (angle < 0) {
74935                 angle += 360;
74936             }
74937             return angle;
74938         }
74939         exports.bearingToAzimuth = bearingToAzimuth;
74940         /**
74941          * Converts an angle in radians to degrees
74942          *
74943          * @name radiansToDegrees
74944          * @param {number} radians angle in radians
74945          * @returns {number} degrees between 0 and 360 degrees
74946          */
74947         function radiansToDegrees(radians) {
74948             var degrees = radians % (2 * Math.PI);
74949             return degrees * 180 / Math.PI;
74950         }
74951         exports.radiansToDegrees = radiansToDegrees;
74952         /**
74953          * Converts an angle in degrees to radians
74954          *
74955          * @name degreesToRadians
74956          * @param {number} degrees angle between 0 and 360 degrees
74957          * @returns {number} angle in radians
74958          */
74959         function degreesToRadians(degrees) {
74960             var radians = degrees % 360;
74961             return radians * Math.PI / 180;
74962         }
74963         exports.degreesToRadians = degreesToRadians;
74964         /**
74965          * Converts a length to the requested unit.
74966          * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
74967          *
74968          * @param {number} length to be converted
74969          * @param {Units} [originalUnit="kilometers"] of the length
74970          * @param {Units} [finalUnit="kilometers"] returned unit
74971          * @returns {number} the converted length
74972          */
74973         function convertLength(length, originalUnit, finalUnit) {
74974             if (originalUnit === void 0) { originalUnit = "kilometers"; }
74975             if (finalUnit === void 0) { finalUnit = "kilometers"; }
74976             if (!(length >= 0)) {
74977                 throw new Error("length must be a positive number");
74978             }
74979             return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
74980         }
74981         exports.convertLength = convertLength;
74982         /**
74983          * Converts a area to the requested unit.
74984          * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
74985          * @param {number} area to be converted
74986          * @param {Units} [originalUnit="meters"] of the distance
74987          * @param {Units} [finalUnit="kilometers"] returned unit
74988          * @returns {number} the converted distance
74989          */
74990         function convertArea(area, originalUnit, finalUnit) {
74991             if (originalUnit === void 0) { originalUnit = "meters"; }
74992             if (finalUnit === void 0) { finalUnit = "kilometers"; }
74993             if (!(area >= 0)) {
74994                 throw new Error("area must be a positive number");
74995             }
74996             var startFactor = exports.areaFactors[originalUnit];
74997             if (!startFactor) {
74998                 throw new Error("invalid original units");
74999             }
75000             var finalFactor = exports.areaFactors[finalUnit];
75001             if (!finalFactor) {
75002                 throw new Error("invalid final units");
75003             }
75004             return (area / startFactor) * finalFactor;
75005         }
75006         exports.convertArea = convertArea;
75007         /**
75008          * isNumber
75009          *
75010          * @param {*} num Number to validate
75011          * @returns {boolean} true/false
75012          * @example
75013          * turf.isNumber(123)
75014          * //=true
75015          * turf.isNumber('foo')
75016          * //=false
75017          */
75018         function isNumber(num) {
75019             return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
75020         }
75021         exports.isNumber = isNumber;
75022         /**
75023          * isObject
75024          *
75025          * @param {*} input variable to validate
75026          * @returns {boolean} true/false
75027          * @example
75028          * turf.isObject({elevation: 10})
75029          * //=true
75030          * turf.isObject('foo')
75031          * //=false
75032          */
75033         function isObject(input) {
75034             return (!!input) && (input.constructor === Object);
75035         }
75036         exports.isObject = isObject;
75037         /**
75038          * Validate BBox
75039          *
75040          * @private
75041          * @param {Array<number>} bbox BBox to validate
75042          * @returns {void}
75043          * @throws Error if BBox is not valid
75044          * @example
75045          * validateBBox([-180, -40, 110, 50])
75046          * //=OK
75047          * validateBBox([-180, -40])
75048          * //=Error
75049          * validateBBox('Foo')
75050          * //=Error
75051          * validateBBox(5)
75052          * //=Error
75053          * validateBBox(null)
75054          * //=Error
75055          * validateBBox(undefined)
75056          * //=Error
75057          */
75058         function validateBBox(bbox) {
75059             if (!bbox) {
75060                 throw new Error("bbox is required");
75061             }
75062             if (!Array.isArray(bbox)) {
75063                 throw new Error("bbox must be an Array");
75064             }
75065             if (bbox.length !== 4 && bbox.length !== 6) {
75066                 throw new Error("bbox must be an Array of 4 or 6 numbers");
75067             }
75068             bbox.forEach(function (num) {
75069                 if (!isNumber(num)) {
75070                     throw new Error("bbox must only contain numbers");
75071                 }
75072             });
75073         }
75074         exports.validateBBox = validateBBox;
75075         /**
75076          * Validate Id
75077          *
75078          * @private
75079          * @param {string|number} id Id to validate
75080          * @returns {void}
75081          * @throws Error if Id is not valid
75082          * @example
75083          * validateId([-180, -40, 110, 50])
75084          * //=Error
75085          * validateId([-180, -40])
75086          * //=Error
75087          * validateId('Foo')
75088          * //=OK
75089          * validateId(5)
75090          * //=OK
75091          * validateId(null)
75092          * //=Error
75093          * validateId(undefined)
75094          * //=Error
75095          */
75096         function validateId(id) {
75097             if (!id) {
75098                 throw new Error("id is required");
75099             }
75100             if (["string", "number"].indexOf(typeof id) === -1) {
75101                 throw new Error("id must be a number or a string");
75102             }
75103         }
75104         exports.validateId = validateId;
75105         // Deprecated methods
75106         function radians2degrees() {
75107             throw new Error("method has been renamed to `radiansToDegrees`");
75108         }
75109         exports.radians2degrees = radians2degrees;
75110         function degrees2radians() {
75111             throw new Error("method has been renamed to `degreesToRadians`");
75112         }
75113         exports.degrees2radians = degrees2radians;
75114         function distanceToDegrees() {
75115             throw new Error("method has been renamed to `lengthToDegrees`");
75116         }
75117         exports.distanceToDegrees = distanceToDegrees;
75118         function distanceToRadians() {
75119             throw new Error("method has been renamed to `lengthToRadians`");
75120         }
75121         exports.distanceToRadians = distanceToRadians;
75122         function radiansToDistance() {
75123             throw new Error("method has been renamed to `radiansToLength`");
75124         }
75125         exports.radiansToDistance = radiansToDistance;
75126         function bearingToAngle() {
75127             throw new Error("method has been renamed to `bearingToAzimuth`");
75128         }
75129         exports.bearingToAngle = bearingToAngle;
75130         function convertDistance() {
75131             throw new Error("method has been renamed to `convertLength`");
75132         }
75133         exports.convertDistance = convertDistance;
75134         });
75135
75136         unwrapExports(helpers);
75137         var helpers_1 = helpers.earthRadius;
75138         var helpers_2 = helpers.factors;
75139         var helpers_3 = helpers.unitsFactors;
75140         var helpers_4 = helpers.areaFactors;
75141         var helpers_5 = helpers.feature;
75142         var helpers_6 = helpers.geometry;
75143         var helpers_7 = helpers.point;
75144         var helpers_8 = helpers.points;
75145         var helpers_9 = helpers.polygon;
75146         var helpers_10 = helpers.polygons;
75147         var helpers_11 = helpers.lineString;
75148         var helpers_12 = helpers.lineStrings;
75149         var helpers_13 = helpers.featureCollection;
75150         var helpers_14 = helpers.multiLineString;
75151         var helpers_15 = helpers.multiPoint;
75152         var helpers_16 = helpers.multiPolygon;
75153         var helpers_17 = helpers.geometryCollection;
75154         var helpers_18 = helpers.round;
75155         var helpers_19 = helpers.radiansToLength;
75156         var helpers_20 = helpers.lengthToRadians;
75157         var helpers_21 = helpers.lengthToDegrees;
75158         var helpers_22 = helpers.bearingToAzimuth;
75159         var helpers_23 = helpers.radiansToDegrees;
75160         var helpers_24 = helpers.degreesToRadians;
75161         var helpers_25 = helpers.convertLength;
75162         var helpers_26 = helpers.convertArea;
75163         var helpers_27 = helpers.isNumber;
75164         var helpers_28 = helpers.isObject;
75165         var helpers_29 = helpers.validateBBox;
75166         var helpers_30 = helpers.validateId;
75167         var helpers_31 = helpers.radians2degrees;
75168         var helpers_32 = helpers.degrees2radians;
75169         var helpers_33 = helpers.distanceToDegrees;
75170         var helpers_34 = helpers.distanceToRadians;
75171         var helpers_35 = helpers.radiansToDistance;
75172         var helpers_36 = helpers.bearingToAngle;
75173         var helpers_37 = helpers.convertDistance;
75174
75175         var invariant = createCommonjsModule(function (module, exports) {
75176         Object.defineProperty(exports, "__esModule", { value: true });
75177
75178         /**
75179          * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
75180          *
75181          * @name getCoord
75182          * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
75183          * @returns {Array<number>} coordinates
75184          * @example
75185          * var pt = turf.point([10, 10]);
75186          *
75187          * var coord = turf.getCoord(pt);
75188          * //= [10, 10]
75189          */
75190         function getCoord(coord) {
75191             if (!coord) {
75192                 throw new Error("coord is required");
75193             }
75194             if (!Array.isArray(coord)) {
75195                 if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
75196                     return coord.geometry.coordinates;
75197                 }
75198                 if (coord.type === "Point") {
75199                     return coord.coordinates;
75200                 }
75201             }
75202             if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
75203                 return coord;
75204             }
75205             throw new Error("coord must be GeoJSON Point or an Array of numbers");
75206         }
75207         exports.getCoord = getCoord;
75208         /**
75209          * Unwrap coordinates from a Feature, Geometry Object or an Array
75210          *
75211          * @name getCoords
75212          * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
75213          * @returns {Array<any>} coordinates
75214          * @example
75215          * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
75216          *
75217          * var coords = turf.getCoords(poly);
75218          * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
75219          */
75220         function getCoords(coords) {
75221             if (Array.isArray(coords)) {
75222                 return coords;
75223             }
75224             // Feature
75225             if (coords.type === "Feature") {
75226                 if (coords.geometry !== null) {
75227                     return coords.geometry.coordinates;
75228                 }
75229             }
75230             else {
75231                 // Geometry
75232                 if (coords.coordinates) {
75233                     return coords.coordinates;
75234                 }
75235             }
75236             throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
75237         }
75238         exports.getCoords = getCoords;
75239         /**
75240          * Checks if coordinates contains a number
75241          *
75242          * @name containsNumber
75243          * @param {Array<any>} coordinates GeoJSON Coordinates
75244          * @returns {boolean} true if Array contains a number
75245          */
75246         function containsNumber(coordinates) {
75247             if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
75248                 return true;
75249             }
75250             if (Array.isArray(coordinates[0]) && coordinates[0].length) {
75251                 return containsNumber(coordinates[0]);
75252             }
75253             throw new Error("coordinates must only contain numbers");
75254         }
75255         exports.containsNumber = containsNumber;
75256         /**
75257          * Enforce expectations about types of GeoJSON objects for Turf.
75258          *
75259          * @name geojsonType
75260          * @param {GeoJSON} value any GeoJSON object
75261          * @param {string} type expected GeoJSON type
75262          * @param {string} name name of calling function
75263          * @throws {Error} if value is not the expected type.
75264          */
75265         function geojsonType(value, type, name) {
75266             if (!type || !name) {
75267                 throw new Error("type and name required");
75268             }
75269             if (!value || value.type !== type) {
75270                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
75271             }
75272         }
75273         exports.geojsonType = geojsonType;
75274         /**
75275          * Enforce expectations about types of {@link Feature} inputs for Turf.
75276          * Internally this uses {@link geojsonType} to judge geometry types.
75277          *
75278          * @name featureOf
75279          * @param {Feature} feature a feature with an expected geometry type
75280          * @param {string} type expected GeoJSON type
75281          * @param {string} name name of calling function
75282          * @throws {Error} error if value is not the expected type.
75283          */
75284         function featureOf(feature, type, name) {
75285             if (!feature) {
75286                 throw new Error("No feature passed");
75287             }
75288             if (!name) {
75289                 throw new Error(".featureOf() requires a name");
75290             }
75291             if (!feature || feature.type !== "Feature" || !feature.geometry) {
75292                 throw new Error("Invalid input to " + name + ", Feature with geometry required");
75293             }
75294             if (!feature.geometry || feature.geometry.type !== type) {
75295                 throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
75296             }
75297         }
75298         exports.featureOf = featureOf;
75299         /**
75300          * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
75301          * Internally this uses {@link geojsonType} to judge geometry types.
75302          *
75303          * @name collectionOf
75304          * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
75305          * @param {string} type expected GeoJSON type
75306          * @param {string} name name of calling function
75307          * @throws {Error} if value is not the expected type.
75308          */
75309         function collectionOf(featureCollection, type, name) {
75310             if (!featureCollection) {
75311                 throw new Error("No featureCollection passed");
75312             }
75313             if (!name) {
75314                 throw new Error(".collectionOf() requires a name");
75315             }
75316             if (!featureCollection || featureCollection.type !== "FeatureCollection") {
75317                 throw new Error("Invalid input to " + name + ", FeatureCollection required");
75318             }
75319             for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
75320                 var feature = _a[_i];
75321                 if (!feature || feature.type !== "Feature" || !feature.geometry) {
75322                     throw new Error("Invalid input to " + name + ", Feature with geometry required");
75323                 }
75324                 if (!feature.geometry || feature.geometry.type !== type) {
75325                     throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
75326                 }
75327             }
75328         }
75329         exports.collectionOf = collectionOf;
75330         /**
75331          * Get Geometry from Feature or Geometry Object
75332          *
75333          * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
75334          * @returns {Geometry|null} GeoJSON Geometry Object
75335          * @throws {Error} if geojson is not a Feature or Geometry Object
75336          * @example
75337          * var point = {
75338          *   "type": "Feature",
75339          *   "properties": {},
75340          *   "geometry": {
75341          *     "type": "Point",
75342          *     "coordinates": [110, 40]
75343          *   }
75344          * }
75345          * var geom = turf.getGeom(point)
75346          * //={"type": "Point", "coordinates": [110, 40]}
75347          */
75348         function getGeom(geojson) {
75349             if (geojson.type === "Feature") {
75350                 return geojson.geometry;
75351             }
75352             return geojson;
75353         }
75354         exports.getGeom = getGeom;
75355         /**
75356          * Get GeoJSON object's type, Geometry type is prioritize.
75357          *
75358          * @param {GeoJSON} geojson GeoJSON object
75359          * @param {string} [name="geojson"] name of the variable to display in error message
75360          * @returns {string} GeoJSON type
75361          * @example
75362          * var point = {
75363          *   "type": "Feature",
75364          *   "properties": {},
75365          *   "geometry": {
75366          *     "type": "Point",
75367          *     "coordinates": [110, 40]
75368          *   }
75369          * }
75370          * var geom = turf.getType(point)
75371          * //="Point"
75372          */
75373         function getType(geojson, name) {
75374             if (geojson.type === "FeatureCollection") {
75375                 return "FeatureCollection";
75376             }
75377             if (geojson.type === "GeometryCollection") {
75378                 return "GeometryCollection";
75379             }
75380             if (geojson.type === "Feature" && geojson.geometry !== null) {
75381                 return geojson.geometry.type;
75382             }
75383             return geojson.type;
75384         }
75385         exports.getType = getType;
75386         });
75387
75388         unwrapExports(invariant);
75389         var invariant_1 = invariant.getCoord;
75390         var invariant_2 = invariant.getCoords;
75391         var invariant_3 = invariant.containsNumber;
75392         var invariant_4 = invariant.geojsonType;
75393         var invariant_5 = invariant.featureOf;
75394         var invariant_6 = invariant.collectionOf;
75395         var invariant_7 = invariant.getGeom;
75396         var invariant_8 = invariant.getType;
75397
75398         var lineclip_1$1 = lineclip$1;
75399         var default_1$1 = lineclip$1;
75400
75401         lineclip$1.polyline = lineclip$1;
75402         lineclip$1.polygon = polygonclip$1;
75403
75404
75405         // Cohen-Sutherland line clippign algorithm, adapted to efficiently
75406         // handle polylines rather than just segments
75407
75408         function lineclip$1(points, bbox, result) {
75409
75410             var len = points.length,
75411                 codeA = bitCode$1(points[0], bbox),
75412                 part = [],
75413                 i, a, b, codeB, lastCode;
75414
75415             if (!result) { result = []; }
75416
75417             for (i = 1; i < len; i++) {
75418                 a = points[i - 1];
75419                 b = points[i];
75420                 codeB = lastCode = bitCode$1(b, bbox);
75421
75422                 while (true) {
75423
75424                     if (!(codeA | codeB)) { // accept
75425                         part.push(a);
75426
75427                         if (codeB !== lastCode) { // segment went outside
75428                             part.push(b);
75429
75430                             if (i < len - 1) { // start a new line
75431                                 result.push(part);
75432                                 part = [];
75433                             }
75434                         } else if (i === len - 1) {
75435                             part.push(b);
75436                         }
75437                         break;
75438
75439                     } else if (codeA & codeB) { // trivial reject
75440                         break;
75441
75442                     } else if (codeA) { // a outside, intersect with clip edge
75443                         a = intersect$2(a, b, codeA, bbox);
75444                         codeA = bitCode$1(a, bbox);
75445
75446                     } else { // b outside
75447                         b = intersect$2(a, b, codeB, bbox);
75448                         codeB = bitCode$1(b, bbox);
75449                     }
75450                 }
75451
75452                 codeA = lastCode;
75453             }
75454
75455             if (part.length) { result.push(part); }
75456
75457             return result;
75458         }
75459
75460         // Sutherland-Hodgeman polygon clipping algorithm
75461
75462         function polygonclip$1(points, bbox) {
75463
75464             var result, edge, prev, prevInside, i, p, inside;
75465
75466             // clip against each side of the clip rectangle
75467             for (edge = 1; edge <= 8; edge *= 2) {
75468                 result = [];
75469                 prev = points[points.length - 1];
75470                 prevInside = !(bitCode$1(prev, bbox) & edge);
75471
75472                 for (i = 0; i < points.length; i++) {
75473                     p = points[i];
75474                     inside = !(bitCode$1(p, bbox) & edge);
75475
75476                     // if segment goes through the clip window, add an intersection
75477                     if (inside !== prevInside) { result.push(intersect$2(prev, p, edge, bbox)); }
75478
75479                     if (inside) { result.push(p); } // add a point if it's inside
75480
75481                     prev = p;
75482                     prevInside = inside;
75483                 }
75484
75485                 points = result;
75486
75487                 if (!points.length) { break; }
75488             }
75489
75490             return result;
75491         }
75492
75493         // intersect a segment against one of the 4 lines that make up the bbox
75494
75495         function intersect$2(a, b, edge, bbox) {
75496             return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
75497                    edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
75498                    edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
75499                    edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
75500                    null;
75501         }
75502
75503         // bit code reflects the point position relative to the bbox:
75504
75505         //         left  mid  right
75506         //    top  1001  1000  1010
75507         //    mid  0001  0000  0010
75508         // bottom  0101  0100  0110
75509
75510         function bitCode$1(p, bbox) {
75511             var code = 0;
75512
75513             if (p[0] < bbox[0]) { code |= 1; } // left
75514             else if (p[0] > bbox[2]) { code |= 2; } // right
75515
75516             if (p[1] < bbox[1]) { code |= 4; } // bottom
75517             else if (p[1] > bbox[3]) { code |= 8; } // top
75518
75519             return code;
75520         }
75521         lineclip_1$1.default = default_1$1;
75522
75523         var bboxClip_1 = createCommonjsModule(function (module, exports) {
75524         var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) {
75525             if (mod && mod.__esModule) { return mod; }
75526             var result = {};
75527             if (mod != null) { for (var k in mod) { if (Object.hasOwnProperty.call(mod, k)) { result[k] = mod[k]; } } }
75528             result["default"] = mod;
75529             return result;
75530         };
75531         Object.defineProperty(exports, "__esModule", { value: true });
75532
75533
75534         var lineclip = __importStar(lineclip_1$1);
75535         /**
75536          * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
75537          * [lineclip](https://github.com/mapbox/lineclip).
75538          * May result in degenerate edges when clipping Polygons.
75539          *
75540          * @name bboxClip
75541          * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
75542          * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
75543          * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
75544          * @example
75545          * var bbox = [0, 0, 10, 10];
75546          * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
75547          *
75548          * var clipped = turf.bboxClip(poly, bbox);
75549          *
75550          * //addToMap
75551          * var addToMap = [bbox, poly, clipped]
75552          */
75553         function bboxClip(feature, bbox) {
75554             var geom = invariant.getGeom(feature);
75555             var type = geom.type;
75556             var properties = feature.type === "Feature" ? feature.properties : {};
75557             var coords = geom.coordinates;
75558             switch (type) {
75559                 case "LineString":
75560                 case "MultiLineString":
75561                     var lines_1 = [];
75562                     if (type === "LineString") {
75563                         coords = [coords];
75564                     }
75565                     coords.forEach(function (line) {
75566                         lineclip.polyline(line, bbox, lines_1);
75567                     });
75568                     if (lines_1.length === 1) {
75569                         return helpers.lineString(lines_1[0], properties);
75570                     }
75571                     return helpers.multiLineString(lines_1, properties);
75572                 case "Polygon":
75573                     return helpers.polygon(clipPolygon(coords, bbox), properties);
75574                 case "MultiPolygon":
75575                     return helpers.multiPolygon(coords.map(function (poly) {
75576                         return clipPolygon(poly, bbox);
75577                     }), properties);
75578                 default:
75579                     throw new Error("geometry " + type + " not supported");
75580             }
75581         }
75582         exports.default = bboxClip;
75583         function clipPolygon(rings, bbox) {
75584             var outRings = [];
75585             for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
75586                 var ring = rings_1[_i];
75587                 var clipped = lineclip.polygon(ring, bbox);
75588                 if (clipped.length > 0) {
75589                     if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
75590                         clipped.push(clipped[0]);
75591                     }
75592                     if (clipped.length >= 4) {
75593                         outRings.push(clipped);
75594                     }
75595                 }
75596             }
75597             return outRings;
75598         }
75599         });
75600
75601         var turf_bboxClip = unwrapExports(bboxClip_1);
75602
75603         var fastJsonStableStringify = function (data, opts) {
75604             if (!opts) { opts = {}; }
75605             if (typeof opts === 'function') { opts = { cmp: opts }; }
75606             var cycles = (typeof opts.cycles === 'boolean') ? opts.cycles : false;
75607
75608             var cmp = opts.cmp && (function (f) {
75609                 return function (node) {
75610                     return function (a, b) {
75611                         var aobj = { key: a, value: node[a] };
75612                         var bobj = { key: b, value: node[b] };
75613                         return f(aobj, bobj);
75614                     };
75615                 };
75616             })(opts.cmp);
75617
75618             var seen = [];
75619             return (function stringify (node) {
75620                 if (node && node.toJSON && typeof node.toJSON === 'function') {
75621                     node = node.toJSON();
75622                 }
75623
75624                 if (node === undefined) { return; }
75625                 if (typeof node == 'number') { return isFinite(node) ? '' + node : 'null'; }
75626                 if (typeof node !== 'object') { return JSON.stringify(node); }
75627
75628                 var i, out;
75629                 if (Array.isArray(node)) {
75630                     out = '[';
75631                     for (i = 0; i < node.length; i++) {
75632                         if (i) { out += ','; }
75633                         out += stringify(node[i]) || 'null';
75634                     }
75635                     return out + ']';
75636                 }
75637
75638                 if (node === null) { return 'null'; }
75639
75640                 if (seen.indexOf(node) !== -1) {
75641                     if (cycles) { return JSON.stringify('__cycle__'); }
75642                     throw new TypeError('Converting circular structure to JSON');
75643                 }
75644
75645                 var seenIndex = seen.push(node) - 1;
75646                 var keys = Object.keys(node).sort(cmp && cmp(node));
75647                 out = '';
75648                 for (i = 0; i < keys.length; i++) {
75649                     var key = keys[i];
75650                     var value = stringify(node[key]);
75651
75652                     if (!value) { continue; }
75653                     if (out) { out += ','; }
75654                     out += JSON.stringify(key) + ':' + value;
75655                 }
75656                 seen.splice(seenIndex, 1);
75657                 return '{' + out + '}';
75658             })(data);
75659         };
75660
75661         var martinez_umd = createCommonjsModule(function (module, exports) {
75662         /**
75663          * martinez v0.5.0
75664          * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor
75665          *
75666          * @author Alex Milevski <info@w8r.name>
75667          * @license MIT
75668          * @preserve
75669          */
75670
75671         (function (global, factory) {
75672            factory(exports) ;
75673         }(commonjsGlobal, (function (exports) {
75674           function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; }
75675
75676           var SplayTree = function SplayTree(compare, noDuplicates) {
75677             if ( compare === void 0 ) { compare = DEFAULT_COMPARE; }
75678             if ( noDuplicates === void 0 ) { noDuplicates = false; }
75679
75680             this._compare = compare;
75681             this._root = null;
75682             this._size = 0;
75683             this._noDuplicates = !!noDuplicates;
75684           };
75685
75686           var prototypeAccessors = { size: { configurable: true } };
75687
75688
75689           SplayTree.prototype.rotateLeft = function rotateLeft (x) {
75690             var y = x.right;
75691             if (y) {
75692               x.right = y.left;
75693               if (y.left) { y.left.parent = x; }
75694               y.parent = x.parent;
75695             }
75696
75697             if (!x.parent)              { this._root = y; }
75698             else if (x === x.parent.left) { x.parent.left = y; }
75699             else                        { x.parent.right = y; }
75700             if (y) { y.left = x; }
75701             x.parent = y;
75702           };
75703
75704
75705           SplayTree.prototype.rotateRight = function rotateRight (x) {
75706             var y = x.left;
75707             if (y) {
75708               x.left = y.right;
75709               if (y.right) { y.right.parent = x; }
75710               y.parent = x.parent;
75711             }
75712
75713             if (!x.parent)             { this._root = y; }
75714             else if(x === x.parent.left) { x.parent.left = y; }
75715             else                       { x.parent.right = y; }
75716             if (y) { y.right = x; }
75717             x.parent = y;
75718           };
75719
75720
75721           SplayTree.prototype._splay = function _splay (x) {
75722               var this$1 = this;
75723
75724             while (x.parent) {
75725               var p = x.parent;
75726               if (!p.parent) {
75727                 if (p.left === x) { this$1.rotateRight(p); }
75728                 else            { this$1.rotateLeft(p); }
75729               } else if (p.left === x && p.parent.left === p) {
75730                 this$1.rotateRight(p.parent);
75731                 this$1.rotateRight(p);
75732               } else if (p.right === x && p.parent.right === p) {
75733                 this$1.rotateLeft(p.parent);
75734                 this$1.rotateLeft(p);
75735               } else if (p.left === x && p.parent.right === p) {
75736                 this$1.rotateRight(p);
75737                 this$1.rotateLeft(p);
75738               } else {
75739                 this$1.rotateLeft(p);
75740                 this$1.rotateRight(p);
75741               }
75742             }
75743           };
75744
75745
75746           SplayTree.prototype.splay = function splay (x) {
75747               var this$1 = this;
75748
75749             var p, gp, ggp, l, r;
75750
75751             while (x.parent) {
75752               p = x.parent;
75753               gp = p.parent;
75754
75755               if (gp && gp.parent) {
75756                 ggp = gp.parent;
75757                 if (ggp.left === gp) { ggp.left= x; }
75758                 else               { ggp.right = x; }
75759                 x.parent = ggp;
75760               } else {
75761                 x.parent = null;
75762                 this$1._root = x;
75763               }
75764
75765               l = x.left; r = x.right;
75766
75767               if (x === p.left) { // left
75768                 if (gp) {
75769                   if (gp.left === p) {
75770                     /* zig-zig */
75771                     if (p.right) {
75772                       gp.left = p.right;
75773                       gp.left.parent = gp;
75774                     } else { gp.left = null; }
75775
75776                     p.right = gp;
75777                     gp.parent = p;
75778                   } else {
75779                     /* zig-zag */
75780                     if (l) {
75781                       gp.right = l;
75782                       l.parent = gp;
75783                     } else { gp.right = null; }
75784
75785                     x.left  = gp;
75786                     gp.parent = x;
75787                   }
75788                 }
75789                 if (r) {
75790                   p.left = r;
75791                   r.parent = p;
75792                 } else { p.left = null; }
75793
75794                 x.right= p;
75795                 p.parent = x;
75796               } else { // right
75797                 if (gp) {
75798                   if (gp.right === p) {
75799                     /* zig-zig */
75800                     if (p.left) {
75801                       gp.right = p.left;
75802                       gp.right.parent = gp;
75803                     } else { gp.right = null; }
75804
75805                     p.left = gp;
75806                     gp.parent = p;
75807                   } else {
75808                     /* zig-zag */
75809                     if (r) {
75810                       gp.left = r;
75811                       r.parent = gp;
75812                     } else { gp.left = null; }
75813
75814                     x.right = gp;
75815                     gp.parent = x;
75816                   }
75817                 }
75818                 if (l) {
75819                   p.right = l;
75820                   l.parent = p;
75821                 } else { p.right = null; }
75822
75823                 x.left = p;
75824                 p.parent = x;
75825               }
75826             }
75827           };
75828
75829
75830           SplayTree.prototype.replace = function replace (u, v) {
75831             if (!u.parent) { this._root = v; }
75832             else if (u === u.parent.left) { u.parent.left = v; }
75833             else { u.parent.right = v; }
75834             if (v) { v.parent = u.parent; }
75835           };
75836
75837
75838           SplayTree.prototype.minNode = function minNode (u) {
75839               if ( u === void 0 ) { u = this._root; }
75840
75841             if (u) { while (u.left) { u = u.left; } }
75842             return u;
75843           };
75844
75845
75846           SplayTree.prototype.maxNode = function maxNode (u) {
75847               if ( u === void 0 ) { u = this._root; }
75848
75849             if (u) { while (u.right) { u = u.right; } }
75850             return u;
75851           };
75852
75853
75854           SplayTree.prototype.insert = function insert (key, data) {
75855             var z = this._root;
75856             var p = null;
75857             var comp = this._compare;
75858             var cmp;
75859
75860             if (this._noDuplicates) {
75861               while (z) {
75862                 p = z;
75863                 cmp = comp(z.key, key);
75864                 if (cmp === 0) { return; }
75865                 else if (comp(z.key, key) < 0) { z = z.right; }
75866                 else { z = z.left; }
75867               }
75868             } else {
75869               while (z) {
75870                 p = z;
75871                 if (comp(z.key, key) < 0) { z = z.right; }
75872                 else { z = z.left; }
75873               }
75874             }
75875
75876             z = { key: key, data: data, left: null, right: null, parent: p };
75877
75878             if (!p)                        { this._root = z; }
75879             else if (comp(p.key, z.key) < 0) { p.right = z; }
75880             else                           { p.left= z; }
75881
75882             this.splay(z);
75883             this._size++;
75884             return z;
75885           };
75886
75887
75888           SplayTree.prototype.find = function find (key) {
75889             var z  = this._root;
75890             var comp = this._compare;
75891             while (z) {
75892               var cmp = comp(z.key, key);
75893               if    (cmp < 0) { z = z.right; }
75894               else if (cmp > 0) { z = z.left; }
75895               else            { return z; }
75896             }
75897             return null;
75898           };
75899
75900           /**
75901            * Whether the tree contains a node with the given key
75902            * @param{Key} key
75903            * @return {boolean} true/false
75904            */
75905           SplayTree.prototype.contains = function contains (key) {
75906             var node     = this._root;
75907             var comparator = this._compare;
75908             while (node){
75909               var cmp = comparator(key, node.key);
75910               if    (cmp === 0) { return true; }
75911               else if (cmp < 0) { node = node.left; }
75912               else              { node = node.right; }
75913             }
75914
75915             return false;
75916           };
75917
75918
75919           SplayTree.prototype.remove = function remove (key) {
75920             var z = this.find(key);
75921
75922             if (!z) { return false; }
75923
75924             this.splay(z);
75925
75926             if (!z.left) { this.replace(z, z.right); }
75927             else if (!z.right) { this.replace(z, z.left); }
75928             else {
75929               var y = this.minNode(z.right);
75930               if (y.parent !== z) {
75931                 this.replace(y, y.right);
75932                 y.right = z.right;
75933                 y.right.parent = y;
75934               }
75935               this.replace(z, y);
75936               y.left = z.left;
75937               y.left.parent = y;
75938             }
75939
75940             this._size--;
75941             return true;
75942           };
75943
75944
75945           SplayTree.prototype.removeNode = function removeNode (z) {
75946             if (!z) { return false; }
75947
75948             this.splay(z);
75949
75950             if (!z.left) { this.replace(z, z.right); }
75951             else if (!z.right) { this.replace(z, z.left); }
75952             else {
75953               var y = this.minNode(z.right);
75954               if (y.parent !== z) {
75955                 this.replace(y, y.right);
75956                 y.right = z.right;
75957                 y.right.parent = y;
75958               }
75959               this.replace(z, y);
75960               y.left = z.left;
75961               y.left.parent = y;
75962             }
75963
75964             this._size--;
75965             return true;
75966           };
75967
75968
75969           SplayTree.prototype.erase = function erase (key) {
75970             var z = this.find(key);
75971             if (!z) { return; }
75972
75973             this.splay(z);
75974
75975             var s = z.left;
75976             var t = z.right;
75977
75978             var sMax = null;
75979             if (s) {
75980               s.parent = null;
75981               sMax = this.maxNode(s);
75982               this.splay(sMax);
75983               this._root = sMax;
75984             }
75985             if (t) {
75986               if (s) { sMax.right = t; }
75987               else { this._root = t; }
75988               t.parent = sMax;
75989             }
75990
75991             this._size--;
75992           };
75993
75994           /**
75995            * Removes and returns the node with smallest key
75996            * @return {?Node}
75997            */
75998           SplayTree.prototype.pop = function pop () {
75999             var node = this._root, returnValue = null;
76000             if (node) {
76001               while (node.left) { node = node.left; }
76002               returnValue = { key: node.key, data: node.data };
76003               this.remove(node.key);
76004             }
76005             return returnValue;
76006           };
76007
76008
76009           /* eslint-disable class-methods-use-this */
76010
76011           /**
76012            * Successor node
76013            * @param{Node} node
76014            * @return {?Node}
76015            */
76016           SplayTree.prototype.next = function next (node) {
76017             var successor = node;
76018             if (successor) {
76019               if (successor.right) {
76020                 successor = successor.right;
76021                 while (successor && successor.left) { successor = successor.left; }
76022               } else {
76023                 successor = node.parent;
76024                 while (successor && successor.right === node) {
76025                   node = successor; successor = successor.parent;
76026                 }
76027               }
76028             }
76029             return successor;
76030           };
76031
76032
76033           /**
76034            * Predecessor node
76035            * @param{Node} node
76036            * @return {?Node}
76037            */
76038           SplayTree.prototype.prev = function prev (node) {
76039             var predecessor = node;
76040             if (predecessor) {
76041               if (predecessor.left) {
76042                 predecessor = predecessor.left;
76043                 while (predecessor && predecessor.right) { predecessor = predecessor.right; }
76044               } else {
76045                 predecessor = node.parent;
76046                 while (predecessor && predecessor.left === node) {
76047                   node = predecessor;
76048                   predecessor = predecessor.parent;
76049                 }
76050               }
76051             }
76052             return predecessor;
76053           };
76054           /* eslint-enable class-methods-use-this */
76055
76056
76057           /**
76058            * @param{forEachCallback} callback
76059            * @return {SplayTree}
76060            */
76061           SplayTree.prototype.forEach = function forEach (callback) {
76062             var current = this._root;
76063             var s = [], done = false, i = 0;
76064
76065             while (!done) {
76066               // Reach the left most Node of the current Node
76067               if (current) {
76068                 // Place pointer to a tree node on the stack
76069                 // before traversing the node's left subtree
76070                 s.push(current);
76071                 current = current.left;
76072               } else {
76073                 // BackTrack from the empty subtree and visit the Node
76074                 // at the top of the stack; however, if the stack is
76075                 // empty you are done
76076                 if (s.length > 0) {
76077                   current = s.pop();
76078                   callback(current, i++);
76079
76080                   // We have visited the node and its left
76081                   // subtree. Now, it's right subtree's turn
76082                   current = current.right;
76083                 } else { done = true; }
76084               }
76085             }
76086             return this;
76087           };
76088
76089
76090           /**
76091            * Walk key range from `low` to `high`. Stops if `fn` returns a value.
76092            * @param{Key}    low
76093            * @param{Key}    high
76094            * @param{Function} fn
76095            * @param{*?}     ctx
76096            * @return {SplayTree}
76097            */
76098           SplayTree.prototype.range = function range (low, high, fn, ctx) {
76099               var this$1 = this;
76100
76101             var Q = [];
76102             var compare = this._compare;
76103             var node = this._root, cmp;
76104
76105             while (Q.length !== 0 || node) {
76106               if (node) {
76107                 Q.push(node);
76108                 node = node.left;
76109               } else {
76110                 node = Q.pop();
76111                 cmp = compare(node.key, high);
76112                 if (cmp > 0) {
76113                   break;
76114                 } else if (compare(node.key, low) >= 0) {
76115                   if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned
76116                 }
76117                 node = node.right;
76118               }
76119             }
76120             return this;
76121           };
76122
76123           /**
76124            * Returns all keys in order
76125            * @return {Array<Key>}
76126            */
76127           SplayTree.prototype.keys = function keys () {
76128             var current = this._root;
76129             var s = [], r = [], done = false;
76130
76131             while (!done) {
76132               if (current) {
76133                 s.push(current);
76134                 current = current.left;
76135               } else {
76136                 if (s.length > 0) {
76137                   current = s.pop();
76138                   r.push(current.key);
76139                   current = current.right;
76140                 } else { done = true; }
76141               }
76142             }
76143             return r;
76144           };
76145
76146
76147           /**
76148            * Returns `data` fields of all nodes in order.
76149            * @return {Array<Value>}
76150            */
76151           SplayTree.prototype.values = function values () {
76152             var current = this._root;
76153             var s = [], r = [], done = false;
76154
76155             while (!done) {
76156               if (current) {
76157                 s.push(current);
76158                 current = current.left;
76159               } else {
76160                 if (s.length > 0) {
76161                   current = s.pop();
76162                   r.push(current.data);
76163                   current = current.right;
76164                 } else { done = true; }
76165               }
76166             }
76167             return r;
76168           };
76169
76170
76171           /**
76172            * Returns node at given index
76173            * @param{number} index
76174            * @return {?Node}
76175            */
76176           SplayTree.prototype.at = function at (index) {
76177             // removed after a consideration, more misleading than useful
76178             // index = index % this.size;
76179             // if (index < 0) index = this.size - index;
76180
76181             var current = this._root;
76182             var s = [], done = false, i = 0;
76183
76184             while (!done) {
76185               if (current) {
76186                 s.push(current);
76187                 current = current.left;
76188               } else {
76189                 if (s.length > 0) {
76190                   current = s.pop();
76191                   if (i === index) { return current; }
76192                   i++;
76193                   current = current.right;
76194                 } else { done = true; }
76195               }
76196             }
76197             return null;
76198           };
76199
76200           /**
76201            * Bulk-load items. Both array have to be same size
76202            * @param{Array<Key>}  keys
76203            * @param{Array<Value>}[values]
76204            * @param{Boolean}     [presort=false] Pre-sort keys and values, using
76205            *                                       tree's comparator. Sorting is done
76206            *                                       in-place
76207            * @return {AVLTree}
76208            */
76209           SplayTree.prototype.load = function load (keys, values, presort) {
76210               if ( keys === void 0 ) { keys = []; }
76211               if ( values === void 0 ) { values = []; }
76212               if ( presort === void 0 ) { presort = false; }
76213
76214             if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); }
76215             var size = keys.length;
76216             if (presort) { sort(keys, values, 0, size - 1, this._compare); }
76217             this._root = loadRecursive(null, keys, values, 0, size);
76218             this._size = size;
76219             return this;
76220           };
76221
76222
76223           SplayTree.prototype.min = function min () {
76224             var node = this.minNode(this._root);
76225             if (node) { return node.key; }
76226             else    { return null; }
76227           };
76228
76229
76230           SplayTree.prototype.max = function max () {
76231             var node = this.maxNode(this._root);
76232             if (node) { return node.key; }
76233             else    { return null; }
76234           };
76235
76236           SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; };
76237           prototypeAccessors.size.get = function () { return this._size; };
76238
76239
76240           /**
76241            * Create a tree and load it with items
76242            * @param{Array<Key>}        keys
76243            * @param{Array<Value>?}      [values]
76244
76245            * @param{Function?}          [comparator]
76246            * @param{Boolean?}           [presort=false] Pre-sort keys and values, using
76247            *                                             tree's comparator. Sorting is done
76248            *                                             in-place
76249            * @param{Boolean?}           [noDuplicates=false] Allow duplicates
76250            * @return {SplayTree}
76251            */
76252           SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) {
76253             return new SplayTree(comparator, noDuplicates).load(keys, values, presort);
76254           };
76255
76256           Object.defineProperties( SplayTree.prototype, prototypeAccessors );
76257
76258
76259           function loadRecursive (parent, keys, values, start, end) {
76260             var size = end - start;
76261             if (size > 0) {
76262               var middle = start + Math.floor(size / 2);
76263               var key    = keys[middle];
76264               var data   = values[middle];
76265               var node   = { key: key, data: data, parent: parent };
76266               node.left    = loadRecursive(node, keys, values, start, middle);
76267               node.right   = loadRecursive(node, keys, values, middle + 1, end);
76268               return node;
76269             }
76270             return null;
76271           }
76272
76273
76274           function sort(keys, values, left, right, compare) {
76275             if (left >= right) { return; }
76276
76277             var pivot = keys[(left + right) >> 1];
76278             var i = left - 1;
76279             var j = right + 1;
76280
76281             while (true) {
76282               do { i++; } while (compare(keys[i], pivot) < 0);
76283               do { j--; } while (compare(keys[j], pivot) > 0);
76284               if (i >= j) { break; }
76285
76286               var tmp = keys[i];
76287               keys[i] = keys[j];
76288               keys[j] = tmp;
76289
76290               tmp = values[i];
76291               values[i] = values[j];
76292               values[j] = tmp;
76293             }
76294
76295             sort(keys, values,  left,     j, compare);
76296             sort(keys, values, j + 1, right, compare);
76297           }
76298
76299           var NORMAL               = 0;
76300           var NON_CONTRIBUTING     = 1;
76301           var SAME_TRANSITION      = 2;
76302           var DIFFERENT_TRANSITION = 3;
76303
76304           var INTERSECTION = 0;
76305           var UNION        = 1;
76306           var DIFFERENCE   = 2;
76307           var XOR          = 3;
76308
76309           /**
76310            * @param  {SweepEvent} event
76311            * @param  {SweepEvent} prev
76312            * @param  {Operation} operation
76313            */
76314           function computeFields (event, prev, operation) {
76315             // compute inOut and otherInOut fields
76316             if (prev === null) {
76317               event.inOut      = false;
76318               event.otherInOut = true;
76319
76320             // previous line segment in sweepline belongs to the same polygon
76321             } else {
76322               if (event.isSubject === prev.isSubject) {
76323                 event.inOut      = !prev.inOut;
76324                 event.otherInOut = prev.otherInOut;
76325
76326               // previous line segment in sweepline belongs to the clipping polygon
76327               } else {
76328                 event.inOut      = !prev.otherInOut;
76329                 event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut;
76330               }
76331
76332               // compute prevInResult field
76333               if (prev) {
76334                 event.prevInResult = (!inResult(prev, operation) || prev.isVertical())
76335                   ? prev.prevInResult : prev;
76336               }
76337             }
76338
76339             // check if the line segment belongs to the Boolean operation
76340             event.inResult = inResult(event, operation);
76341           }
76342
76343
76344           /* eslint-disable indent */
76345           function inResult(event, operation) {
76346             switch (event.type) {
76347               case NORMAL:
76348                 switch (operation) {
76349                   case INTERSECTION:
76350                     return !event.otherInOut;
76351                   case UNION:
76352                     return event.otherInOut;
76353                   case DIFFERENCE:
76354                     // return (event.isSubject && !event.otherInOut) ||
76355                     //         (!event.isSubject && event.otherInOut);
76356                     return (event.isSubject && event.otherInOut) ||
76357                             (!event.isSubject && !event.otherInOut);
76358                   case XOR:
76359                     return true;
76360                 }
76361                 break;
76362               case SAME_TRANSITION:
76363                 return operation === INTERSECTION || operation === UNION;
76364               case DIFFERENT_TRANSITION:
76365                 return operation === DIFFERENCE;
76366               case NON_CONTRIBUTING:
76367                 return false;
76368             }
76369             return false;
76370           }
76371           /* eslint-enable indent */
76372
76373           var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) {
76374
76375             /**
76376              * Is left endpoint?
76377              * @type {Boolean}
76378              */
76379             this.left = left;
76380
76381             /**
76382              * @type {Array.<Number>}
76383              */
76384             this.point = point;
76385
76386             /**
76387              * Other edge reference
76388              * @type {SweepEvent}
76389              */
76390             this.otherEvent = otherEvent;
76391
76392             /**
76393              * Belongs to source or clipping polygon
76394              * @type {Boolean}
76395              */
76396             this.isSubject = isSubject;
76397
76398             /**
76399              * Edge contribution type
76400              * @type {Number}
76401              */
76402             this.type = edgeType || NORMAL;
76403
76404
76405             /**
76406              * In-out transition for the sweepline crossing polygon
76407              * @type {Boolean}
76408              */
76409             this.inOut = false;
76410
76411
76412             /**
76413              * @type {Boolean}
76414              */
76415             this.otherInOut = false;
76416
76417             /**
76418              * Previous event in result?
76419              * @type {SweepEvent}
76420              */
76421             this.prevInResult = null;
76422
76423             /**
76424              * Does event belong to result?
76425              * @type {Boolean}
76426              */
76427             this.inResult = false;
76428
76429
76430             // connection step
76431
76432             /**
76433              * @type {Boolean}
76434              */
76435             this.resultInOut = false;
76436
76437             this.isExteriorRing = true;
76438           };
76439
76440
76441           /**
76442            * @param{Array.<Number>}p
76443            * @return {Boolean}
76444            */
76445           SweepEvent.prototype.isBelow = function isBelow (p) {
76446             var p0 = this.point, p1 = this.otherEvent.point;
76447             return this.left
76448               ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0
76449               // signedArea(this.point, this.otherEvent.point, p) > 0 :
76450               : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0;
76451               //signedArea(this.otherEvent.point, this.point, p) > 0;
76452           };
76453
76454
76455           /**
76456            * @param{Array.<Number>}p
76457            * @return {Boolean}
76458            */
76459           SweepEvent.prototype.isAbove = function isAbove (p) {
76460             return !this.isBelow(p);
76461           };
76462
76463
76464           /**
76465            * @return {Boolean}
76466            */
76467           SweepEvent.prototype.isVertical = function isVertical () {
76468             return this.point[0] === this.otherEvent.point[0];
76469           };
76470
76471
76472           SweepEvent.prototype.clone = function clone () {
76473             var copy = new SweepEvent(
76474               this.point, this.left, this.otherEvent, this.isSubject, this.type);
76475
76476             copy.inResult     = this.inResult;
76477             copy.prevInResult = this.prevInResult;
76478             copy.isExteriorRing = this.isExteriorRing;
76479             copy.inOut        = this.inOut;
76480             copy.otherInOut   = this.otherInOut;
76481
76482             return copy;
76483           };
76484
76485           function equals(p1, p2) {
76486             if (p1[0] === p2[0]) {
76487               if (p1[1] === p2[1]) {
76488                 return true;
76489               } else {
76490                 return false;
76491               }
76492             }
76493             return false;
76494           }
76495
76496           // const EPSILON = 1e-9;
76497           // const abs = Math.abs;
76498           // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164
76499           // Precision problem.
76500           //
76501           // module.exports = function equals(p1, p2) {
76502           //   return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON;
76503           // };
76504
76505           /**
76506            * Signed area of the triangle (p0, p1, p2)
76507            * @param  {Array.<Number>} p0
76508            * @param  {Array.<Number>} p1
76509            * @param  {Array.<Number>} p2
76510            * @return {Number}
76511            */
76512           function signedArea(p0, p1, p2) {
76513             return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]);
76514           }
76515
76516           /**
76517            * @param  {SweepEvent} e1
76518            * @param  {SweepEvent} e2
76519            * @return {Number}
76520            */
76521           function compareEvents(e1, e2) {
76522             var p1 = e1.point;
76523             var p2 = e2.point;
76524
76525             // Different x-coordinate
76526             if (p1[0] > p2[0]) { return 1; }
76527             if (p1[0] < p2[0]) { return -1; }
76528
76529             // Different points, but same x-coordinate
76530             // Event with lower y-coordinate is processed first
76531             if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; }
76532
76533             return specialCases(e1, e2, p1);
76534           }
76535
76536
76537           /* eslint-disable no-unused-vars */
76538           function specialCases(e1, e2, p1, p2) {
76539             // Same coordinates, but one is a left endpoint and the other is
76540             // a right endpoint. The right endpoint is processed first
76541             if (e1.left !== e2.left)
76542               { return e1.left ? 1 : -1; }
76543
76544             // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point;
76545             // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1])
76546             // Same coordinates, both events
76547             // are left endpoints or right endpoints.
76548             // not collinear
76549             if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) {
76550               // the event associate to the bottom segment is processed first
76551               return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1;
76552             }
76553
76554             return (!e1.isSubject && e2.isSubject) ? 1 : -1;
76555           }
76556           /* eslint-enable no-unused-vars */
76557
76558           /**
76559            * @param  {SweepEvent} se
76560            * @param  {Array.<Number>} p
76561            * @param  {Queue} queue
76562            * @return {Queue}
76563            */
76564           function divideSegment(se, p, queue)  {
76565             var r = new SweepEvent(p, false, se,            se.isSubject);
76566             var l = new SweepEvent(p, true,  se.otherEvent, se.isSubject);
76567
76568             /* eslint-disable no-console */
76569             if (equals(se.point, se.otherEvent.point)) {
76570
76571               console.warn('what is that, a collapsed segment?', se);
76572             }
76573             /* eslint-enable no-console */
76574
76575             r.contourId = l.contourId = se.contourId;
76576
76577             // avoid a rounding error. The left event would be processed after the right event
76578             if (compareEvents(l, se.otherEvent) > 0) {
76579               se.otherEvent.left = true;
76580               l.left = false;
76581             }
76582
76583             // avoid a rounding error. The left event would be processed after the right event
76584             // if (compareEvents(se, r) > 0) {}
76585
76586             se.otherEvent.otherEvent = l;
76587             se.otherEvent = r;
76588
76589             queue.push(l);
76590             queue.push(r);
76591
76592             return queue;
76593           }
76594
76595           //const EPS = 1e-9;
76596
76597           /**
76598            * Finds the magnitude of the cross product of two vectors (if we pretend
76599            * they're in three dimensions)
76600            *
76601            * @param {Object} a First vector
76602            * @param {Object} b Second vector
76603            * @private
76604            * @returns {Number} The magnitude of the cross product
76605            */
76606           function crossProduct(a, b) {
76607             return (a[0] * b[1]) - (a[1] * b[0]);
76608           }
76609
76610           /**
76611            * Finds the dot product of two vectors.
76612            *
76613            * @param {Object} a First vector
76614            * @param {Object} b Second vector
76615            * @private
76616            * @returns {Number} The dot product
76617            */
76618           function dotProduct(a, b) {
76619             return (a[0] * b[0]) + (a[1] * b[1]);
76620           }
76621
76622           /**
76623            * Finds the intersection (if any) between two line segments a and b, given the
76624            * line segments' end points a1, a2 and b1, b2.
76625            *
76626            * This algorithm is based on Schneider and Eberly.
76627            * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf
76628            * Page 244.
76629            *
76630            * @param {Array.<Number>} a1 point of first line
76631            * @param {Array.<Number>} a2 point of first line
76632            * @param {Array.<Number>} b1 point of second line
76633            * @param {Array.<Number>} b2 point of second line
76634            * @param {Boolean=}       noEndpointTouch whether to skip single touchpoints
76635            *                                         (meaning connected segments) as
76636            *                                         intersections
76637            * @returns {Array.<Array.<Number>>|Null} If the lines intersect, the point of
76638            * intersection. If they overlap, the two end points of the overlapping segment.
76639            * Otherwise, null.
76640            */
76641           function intersection (a1, a2, b1, b2, noEndpointTouch) {
76642             // The algorithm expects our lines in the form P + sd, where P is a point,
76643             // s is on the interval [0, 1], and d is a vector.
76644             // We are passed two points. P can be the first point of each pair. The
76645             // vector, then, could be thought of as the distance (in x and y components)
76646             // from the first point to the second point.
76647             // So first, let's make our vectors:
76648             var va = [a2[0] - a1[0], a2[1] - a1[1]];
76649             var vb = [b2[0] - b1[0], b2[1] - b1[1]];
76650             // We also define a function to convert back to regular point form:
76651
76652             /* eslint-disable arrow-body-style */
76653
76654             function toPoint(p, s, d) {
76655               return [
76656                 p[0] + s * d[0],
76657                 p[1] + s * d[1]
76658               ];
76659             }
76660
76661             /* eslint-enable arrow-body-style */
76662
76663             // The rest is pretty much a straight port of the algorithm.
76664             var e = [b1[0] - a1[0], b1[1] - a1[1]];
76665             var kross    = crossProduct(va, vb);
76666             var sqrKross = kross * kross;
76667             var sqrLenA  = dotProduct(va, va);
76668             //const sqrLenB  = dotProduct(vb, vb);
76669
76670             // Check for line intersection. This works because of the properties of the
76671             // cross product -- specifically, two vectors are parallel if and only if the
76672             // cross product is the 0 vector. The full calculation involves relative error
76673             // to account for possible very small line segments. See Schneider & Eberly
76674             // for details.
76675             if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) {
76676               // If they're not parallel, then (because these are line segments) they
76677               // still might not actually intersect. This code checks that the
76678               // intersection point of the lines is actually on both line segments.
76679               var s = crossProduct(e, vb) / kross;
76680               if (s < 0 || s > 1) {
76681                 // not on line segment a
76682                 return null;
76683               }
76684               var t = crossProduct(e, va) / kross;
76685               if (t < 0 || t > 1) {
76686                 // not on line segment b
76687                 return null;
76688               }
76689               if (s === 0 || s === 1) {
76690                 // on an endpoint of line segment a
76691                 return noEndpointTouch ? null : [toPoint(a1, s, va)];
76692               }
76693               if (t === 0 || t === 1) {
76694                 // on an endpoint of line segment b
76695                 return noEndpointTouch ? null : [toPoint(b1, t, vb)];
76696               }
76697               return [toPoint(a1, s, va)];
76698             }
76699
76700             // If we've reached this point, then the lines are either parallel or the
76701             // same, but the segments could overlap partially or fully, or not at all.
76702             // So we need to find the overlap, if any. To do that, we can use e, which is
76703             // the (vector) difference between the two initial points. If this is parallel
76704             // with the line itself, then the two lines are the same line, and there will
76705             // be overlap.
76706             //const sqrLenE = dotProduct(e, e);
76707             kross = crossProduct(e, va);
76708             sqrKross = kross * kross;
76709
76710             if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) {
76711             // Lines are just parallel, not the same. No overlap.
76712               return null;
76713             }
76714
76715             var sa = dotProduct(va, e) / sqrLenA;
76716             var sb = sa + dotProduct(va, vb) / sqrLenA;
76717             var smin = Math.min(sa, sb);
76718             var smax = Math.max(sa, sb);
76719
76720             // this is, essentially, the FindIntersection acting on floats from
76721             // Schneider & Eberly, just inlined into this function.
76722             if (smin <= 1 && smax >= 0) {
76723
76724               // overlap on an end point
76725               if (smin === 1) {
76726                 return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)];
76727               }
76728
76729               if (smax === 0) {
76730                 return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)];
76731               }
76732
76733               if (noEndpointTouch && smin === 0 && smax === 1) { return null; }
76734
76735               // There's overlap on a segment -- two points of intersection. Return both.
76736               return [
76737                 toPoint(a1, smin > 0 ? smin : 0, va),
76738                 toPoint(a1, smax < 1 ? smax : 1, va)
76739               ];
76740             }
76741
76742             return null;
76743           }
76744
76745           /**
76746            * @param  {SweepEvent} se1
76747            * @param  {SweepEvent} se2
76748            * @param  {Queue}      queue
76749            * @return {Number}
76750            */
76751           function possibleIntersection (se1, se2, queue) {
76752             // that disallows self-intersecting polygons,
76753             // did cost us half a day, so I'll leave it
76754             // out of respect
76755             // if (se1.isSubject === se2.isSubject) return;
76756             var inter = intersection(
76757               se1.point, se1.otherEvent.point,
76758               se2.point, se2.otherEvent.point
76759             );
76760
76761             var nintersections = inter ? inter.length : 0;
76762             if (nintersections === 0) { return 0; } // no intersection
76763
76764             // the line segments intersect at an endpoint of both line segments
76765             if ((nintersections === 1) &&
76766                 (equals(se1.point, se2.point) ||
76767                  equals(se1.otherEvent.point, se2.otherEvent.point))) {
76768               return 0;
76769             }
76770
76771             if (nintersections === 2 && se1.isSubject === se2.isSubject) {
76772               // if(se1.contourId === se2.contourId){
76773               // console.warn('Edges of the same polygon overlap',
76774               //   se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point);
76775               // }
76776               //throw new Error('Edges of the same polygon overlap');
76777               return 0;
76778             }
76779
76780             // The line segments associated to se1 and se2 intersect
76781             if (nintersections === 1) {
76782
76783               // if the intersection point is not an endpoint of se1
76784               if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) {
76785                 divideSegment(se1, inter[0], queue);
76786               }
76787
76788               // if the intersection point is not an endpoint of se2
76789               if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) {
76790                 divideSegment(se2, inter[0], queue);
76791               }
76792               return 1;
76793             }
76794
76795             // The line segments associated to se1 and se2 overlap
76796             var events        = [];
76797             var leftCoincide  = false;
76798             var rightCoincide = false;
76799
76800             if (equals(se1.point, se2.point)) {
76801               leftCoincide = true; // linked
76802             } else if (compareEvents(se1, se2) === 1) {
76803               events.push(se2, se1);
76804             } else {
76805               events.push(se1, se2);
76806             }
76807
76808             if (equals(se1.otherEvent.point, se2.otherEvent.point)) {
76809               rightCoincide = true;
76810             } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) {
76811               events.push(se2.otherEvent, se1.otherEvent);
76812             } else {
76813               events.push(se1.otherEvent, se2.otherEvent);
76814             }
76815
76816             if ((leftCoincide && rightCoincide) || leftCoincide) {
76817               // both line segments are equal or share the left endpoint
76818               se2.type = NON_CONTRIBUTING;
76819               se1.type = (se2.inOut === se1.inOut)
76820                 ? SAME_TRANSITION : DIFFERENT_TRANSITION;
76821
76822               if (leftCoincide && !rightCoincide) {
76823                 // honestly no idea, but changing events selection from [2, 1]
76824                 // to [0, 1] fixes the overlapping self-intersecting polygons issue
76825                 divideSegment(events[1].otherEvent, events[0].point, queue);
76826               }
76827               return 2;
76828             }
76829
76830             // the line segments share the right endpoint
76831             if (rightCoincide) {
76832               divideSegment(events[0], events[1].point, queue);
76833               return 3;
76834             }
76835
76836             // no line segment includes totally the other one
76837             if (events[0] !== events[3].otherEvent) {
76838               divideSegment(events[0], events[1].point, queue);
76839               divideSegment(events[1], events[2].point, queue);
76840               return 3;
76841             }
76842
76843             // one line segment includes the other one
76844             divideSegment(events[0], events[1].point, queue);
76845             divideSegment(events[3].otherEvent, events[2].point, queue);
76846
76847             return 3;
76848           }
76849
76850           /**
76851            * @param  {SweepEvent} le1
76852            * @param  {SweepEvent} le2
76853            * @return {Number}
76854            */
76855           function compareSegments(le1, le2) {
76856             if (le1 === le2) { return 0; }
76857
76858             // Segments are not collinear
76859             if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 ||
76860               signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) {
76861
76862               // If they share their left endpoint use the right endpoint to sort
76863               if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; }
76864
76865               // Different left endpoint: use the left endpoint to sort
76866               if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; }
76867
76868               // has the line segment associated to e1 been inserted
76869               // into S after the line segment associated to e2 ?
76870               if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; }
76871
76872               // The line segment associated to e2 has been inserted
76873               // into S after the line segment associated to e1
76874               return le1.isBelow(le2.point) ? -1 : 1;
76875             }
76876
76877             if (le1.isSubject === le2.isSubject) { // same polygon
76878               var p1 = le1.point, p2 = le2.point;
76879               if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) {
76880                 p1 = le1.otherEvent.point; p2 = le2.otherEvent.point;
76881                 if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; }
76882                 else { return le1.contourId > le2.contourId ? 1 : -1; }
76883               }
76884             } else { // Segments are collinear, but belong to separate polygons
76885               return le1.isSubject ? -1 : 1;
76886             }
76887
76888             return compareEvents(le1, le2) === 1 ? 1 : -1;
76889           }
76890
76891           function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) {
76892             var sweepLine = new SplayTree(compareSegments);
76893             var sortedEvents = [];
76894
76895             var rightbound = Math.min(sbbox[2], cbbox[2]);
76896
76897             var prev, next, begin;
76898
76899             while (eventQueue.length !== 0) {
76900               var event = eventQueue.pop();
76901               sortedEvents.push(event);
76902
76903               // optimization by bboxes for intersection and difference goes here
76904               if ((operation === INTERSECTION && event.point[0] > rightbound) ||
76905                   (operation === DIFFERENCE   && event.point[0] > sbbox[2])) {
76906                 break;
76907               }
76908
76909               if (event.left) {
76910                 next  = prev = sweepLine.insert(event);
76911                 begin = sweepLine.minNode();
76912
76913                 if (prev !== begin) { prev = sweepLine.prev(prev); }
76914                 else                { prev = null; }
76915
76916                 next = sweepLine.next(next);
76917
76918                 var prevEvent = prev ? prev.key : null;
76919                 var prevprevEvent = (void 0);
76920                 computeFields(event, prevEvent, operation);
76921                 if (next) {
76922                   if (possibleIntersection(event, next.key, eventQueue) === 2) {
76923                     computeFields(event, prevEvent, operation);
76924                     computeFields(event, next.key, operation);
76925                   }
76926                 }
76927
76928                 if (prev) {
76929                   if (possibleIntersection(prev.key, event, eventQueue) === 2) {
76930                     var prevprev = prev;
76931                     if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); }
76932                     else                    { prevprev = null; }
76933
76934                     prevprevEvent = prevprev ? prevprev.key : null;
76935                     computeFields(prevEvent, prevprevEvent, operation);
76936                     computeFields(event,     prevEvent,     operation);
76937                   }
76938                 }
76939               } else {
76940                 event = event.otherEvent;
76941                 next = prev = sweepLine.find(event);
76942
76943                 if (prev && next) {
76944
76945                   if (prev !== begin) { prev = sweepLine.prev(prev); }
76946                   else                { prev = null; }
76947
76948                   next = sweepLine.next(next);
76949                   sweepLine.remove(event);
76950
76951                   if (next && prev) {
76952                     possibleIntersection(prev.key, next.key, eventQueue);
76953                   }
76954                 }
76955               }
76956             }
76957             return sortedEvents;
76958           }
76959
76960           /**
76961            * @param  {Array.<SweepEvent>} sortedEvents
76962            * @return {Array.<SweepEvent>}
76963            */
76964           function orderEvents(sortedEvents) {
76965             var event, i, len, tmp;
76966             var resultEvents = [];
76967             for (i = 0, len = sortedEvents.length; i < len; i++) {
76968               event = sortedEvents[i];
76969               if ((event.left && event.inResult) ||
76970                 (!event.left && event.otherEvent.inResult)) {
76971                 resultEvents.push(event);
76972               }
76973             }
76974             // Due to overlapping edges the resultEvents array can be not wholly sorted
76975             var sorted = false;
76976             while (!sorted) {
76977               sorted = true;
76978               for (i = 0, len = resultEvents.length; i < len; i++) {
76979                 if ((i + 1) < len &&
76980                   compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) {
76981                   tmp = resultEvents[i];
76982                   resultEvents[i] = resultEvents[i + 1];
76983                   resultEvents[i + 1] = tmp;
76984                   sorted = false;
76985                 }
76986               }
76987             }
76988
76989
76990             for (i = 0, len = resultEvents.length; i < len; i++) {
76991               event = resultEvents[i];
76992               event.pos = i;
76993             }
76994
76995             // imagine, the right event is found in the beginning of the queue,
76996             // when his left counterpart is not marked yet
76997             for (i = 0, len = resultEvents.length; i < len; i++) {
76998               event = resultEvents[i];
76999               if (!event.left) {
77000                 tmp = event.pos;
77001                 event.pos = event.otherEvent.pos;
77002                 event.otherEvent.pos = tmp;
77003               }
77004             }
77005
77006             return resultEvents;
77007           }
77008
77009
77010           /**
77011            * @param  {Number} pos
77012            * @param  {Array.<SweepEvent>} resultEvents
77013            * @param  {Object>}    processed
77014            * @return {Number}
77015            */
77016           function nextPos(pos, resultEvents, processed, origIndex) {
77017             var p, p1;
77018             var newPos = pos + 1;
77019             var length = resultEvents.length;
77020
77021             p  = resultEvents[pos].point;
77022
77023             if (newPos < length)
77024               { p1 = resultEvents[newPos].point; }
77025
77026
77027             // while in range and not the current one by value
77028             while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) {
77029               if (!processed[newPos]) {
77030                 return newPos;
77031               } else   {
77032                 newPos++;
77033               }
77034               p1 = resultEvents[newPos].point;
77035             }
77036
77037             newPos = pos - 1;
77038
77039             while (processed[newPos] && newPos >= origIndex) {
77040               newPos--;
77041             }
77042             return newPos;
77043           }
77044
77045
77046           /**
77047            * @param  {Array.<SweepEvent>} sortedEvents
77048            * @return {Array.<*>} polygons
77049            */
77050           function connectEdges(sortedEvents, operation) {
77051             var i, len;
77052             var resultEvents = orderEvents(sortedEvents);
77053
77054             // "false"-filled array
77055             var processed = {};
77056             var result = [];
77057             var event;
77058
77059             for (i = 0, len = resultEvents.length; i < len; i++) {
77060               if (processed[i]) { continue; }
77061               var contour = [[]];
77062
77063               if (!resultEvents[i].isExteriorRing) {
77064                 if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) {
77065                   result.push(contour);
77066                 } else if (result.length === 0) {
77067                   result.push([[contour]]);
77068                 } else {
77069                   result[result.length - 1].push(contour[0]);
77070                 }
77071               } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) {
77072                 result[result.length - 1].push(contour[0]);
77073               } else {
77074                 result.push(contour);
77075               }
77076
77077               var ringId = result.length - 1;
77078               var pos = i;
77079
77080               var initial = resultEvents[i].point;
77081               contour[0].push(initial);
77082
77083               while (pos >= i) {
77084                 event = resultEvents[pos];
77085                 processed[pos] = true;
77086
77087                 if (event.left) {
77088                   event.resultInOut = false;
77089                   event.contourId   = ringId;
77090                 } else {
77091                   event.otherEvent.resultInOut = true;
77092                   event.otherEvent.contourId   = ringId;
77093                 }
77094
77095                 pos = event.pos;
77096                 processed[pos] = true;
77097                 contour[0].push(resultEvents[pos].point);
77098                 pos = nextPos(pos, resultEvents, processed, i);
77099               }
77100
77101               pos = pos === -1 ? i : pos;
77102
77103               event = resultEvents[pos];
77104               processed[pos] = processed[event.pos] = true;
77105               event.otherEvent.resultInOut = true;
77106               event.otherEvent.contourId   = ringId;
77107             }
77108
77109             // Handle if the result is a polygon (eg not multipoly)
77110             // Commented it again, let's see what do we mean by that
77111             // if (result.length === 1) result = result[0];
77112             return result;
77113           }
77114
77115           var tinyqueue = TinyQueue;
77116           var default_1 = TinyQueue;
77117
77118           function TinyQueue(data, compare) {
77119               var this$1 = this;
77120
77121               if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); }
77122
77123               this.data = data || [];
77124               this.length = this.data.length;
77125               this.compare = compare || defaultCompare;
77126
77127               if (this.length > 0) {
77128                   for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); }
77129               }
77130           }
77131
77132           function defaultCompare(a, b) {
77133               return a < b ? -1 : a > b ? 1 : 0;
77134           }
77135
77136           TinyQueue.prototype = {
77137
77138               push: function (item) {
77139                   this.data.push(item);
77140                   this.length++;
77141                   this._up(this.length - 1);
77142               },
77143
77144               pop: function () {
77145                   if (this.length === 0) { return undefined; }
77146
77147                   var top = this.data[0];
77148                   this.length--;
77149
77150                   if (this.length > 0) {
77151                       this.data[0] = this.data[this.length];
77152                       this._down(0);
77153                   }
77154                   this.data.pop();
77155
77156                   return top;
77157               },
77158
77159               peek: function () {
77160                   return this.data[0];
77161               },
77162
77163               _up: function (pos) {
77164                   var data = this.data;
77165                   var compare = this.compare;
77166                   var item = data[pos];
77167
77168                   while (pos > 0) {
77169                       var parent = (pos - 1) >> 1;
77170                       var current = data[parent];
77171                       if (compare(item, current) >= 0) { break; }
77172                       data[pos] = current;
77173                       pos = parent;
77174                   }
77175
77176                   data[pos] = item;
77177               },
77178
77179               _down: function (pos) {
77180                   var this$1 = this;
77181
77182                   var data = this.data;
77183                   var compare = this.compare;
77184                   var halfLength = this.length >> 1;
77185                   var item = data[pos];
77186
77187                   while (pos < halfLength) {
77188                       var left = (pos << 1) + 1;
77189                       var right = left + 1;
77190                       var best = data[left];
77191
77192                       if (right < this$1.length && compare(data[right], best) < 0) {
77193                           left = right;
77194                           best = data[right];
77195                       }
77196                       if (compare(best, item) >= 0) { break; }
77197
77198                       data[pos] = best;
77199                       pos = left;
77200                   }
77201
77202                   data[pos] = item;
77203               }
77204           };
77205           tinyqueue.default = default_1;
77206
77207           var max = Math.max;
77208           var min = Math.min;
77209
77210           var contourId = 0;
77211
77212
77213           function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
77214             var i, len, s1, s2, e1, e2;
77215             for (i = 0, len = contourOrHole.length - 1; i < len; i++) {
77216               s1 = contourOrHole[i];
77217               s2 = contourOrHole[i + 1];
77218               e1 = new SweepEvent(s1, false, undefined, isSubject);
77219               e2 = new SweepEvent(s2, false, e1,        isSubject);
77220               e1.otherEvent = e2;
77221
77222               if (s1[0] === s2[0] && s1[1] === s2[1]) {
77223                 continue; // skip collapsed edges, or it breaks
77224               }
77225
77226               e1.contourId = e2.contourId = depth;
77227               if (!isExteriorRing) {
77228                 e1.isExteriorRing = false;
77229                 e2.isExteriorRing = false;
77230               }
77231               if (compareEvents(e1, e2) > 0) {
77232                 e2.left = true;
77233               } else {
77234                 e1.left = true;
77235               }
77236
77237               var x = s1[0], y = s1[1];
77238               bbox[0] = min(bbox[0], x);
77239               bbox[1] = min(bbox[1], y);
77240               bbox[2] = max(bbox[2], x);
77241               bbox[3] = max(bbox[3], y);
77242
77243               // Pushing it so the queue is sorted from left to right,
77244               // with object on the left having the highest priority.
77245               Q.push(e1);
77246               Q.push(e2);
77247             }
77248           }
77249
77250
77251           function fillQueue(subject, clipping, sbbox, cbbox, operation) {
77252             var eventQueue = new tinyqueue(null, compareEvents);
77253             var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk;
77254
77255             for (i = 0, ii = subject.length; i < ii; i++) {
77256               polygonSet = subject[i];
77257               for (j = 0, jj = polygonSet.length; j < jj; j++) {
77258                 isExteriorRing = j === 0;
77259                 if (isExteriorRing) { contourId++; }
77260                 processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing);
77261               }
77262             }
77263
77264             for (i = 0, ii = clipping.length; i < ii; i++) {
77265               polygonSet = clipping[i];
77266               for (j = 0, jj = polygonSet.length; j < jj; j++) {
77267                 isExteriorRing = j === 0;
77268                 if (operation === DIFFERENCE) { isExteriorRing = false; }
77269                 if (isExteriorRing) { contourId++; }
77270                 processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing);
77271               }
77272             }
77273
77274             return eventQueue;
77275           }
77276
77277           var EMPTY = [];
77278
77279
77280           function trivialOperation(subject, clipping, operation) {
77281             var result = null;
77282             if (subject.length * clipping.length === 0) {
77283               if        (operation === INTERSECTION) {
77284                 result = EMPTY;
77285               } else if (operation === DIFFERENCE) {
77286                 result = subject;
77287               } else if (operation === UNION ||
77288                          operation === XOR) {
77289                 result = (subject.length === 0) ? clipping : subject;
77290               }
77291             }
77292             return result;
77293           }
77294
77295
77296           function compareBBoxes(subject, clipping, sbbox, cbbox, operation) {
77297             var result = null;
77298             if (sbbox[0] > cbbox[2] ||
77299                 cbbox[0] > sbbox[2] ||
77300                 sbbox[1] > cbbox[3] ||
77301                 cbbox[1] > sbbox[3]) {
77302               if        (operation === INTERSECTION) {
77303                 result = EMPTY;
77304               } else if (operation === DIFFERENCE) {
77305                 result = subject;
77306               } else if (operation === UNION ||
77307                          operation === XOR) {
77308                 result = subject.concat(clipping);
77309               }
77310             }
77311             return result;
77312           }
77313
77314
77315           function boolean(subject, clipping, operation) {
77316             if (typeof subject[0][0][0] === 'number') {
77317               subject = [subject];
77318             }
77319             if (typeof clipping[0][0][0] === 'number') {
77320               clipping = [clipping];
77321             }
77322             var trivial = trivialOperation(subject, clipping, operation);
77323             if (trivial) {
77324               return trivial === EMPTY ? null : trivial;
77325             }
77326             var sbbox = [Infinity, Infinity, -Infinity, -Infinity];
77327             var cbbox = [Infinity, Infinity, -Infinity, -Infinity];
77328
77329             //console.time('fill queue');
77330             var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation);
77331             //console.timeEnd('fill queue');
77332
77333             trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation);
77334             if (trivial) {
77335               return trivial === EMPTY ? null : trivial;
77336             }
77337             //console.time('subdivide edges');
77338             var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation);
77339             //console.timeEnd('subdivide edges');
77340
77341             //console.time('connect vertices');
77342             var result = connectEdges(sortedEvents, operation);
77343             //console.timeEnd('connect vertices');
77344             return result;
77345           }
77346
77347           function union (subject, clipping) {
77348             return boolean(subject, clipping, UNION);
77349           }
77350
77351           function diff (subject, clipping) {
77352             return boolean(subject, clipping, DIFFERENCE);
77353           }
77354
77355           function xor (subject, clipping){
77356             return boolean(subject, clipping, XOR);
77357           }
77358
77359           function intersection$1 (subject, clipping) {
77360             return boolean(subject, clipping, INTERSECTION);
77361           }
77362
77363           /**
77364            * @enum {Number}
77365            */
77366           var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR };
77367
77368           exports.union = union;
77369           exports.diff = diff;
77370           exports.xor = xor;
77371           exports.intersection = intersection$1;
77372           exports.operations = operations;
77373
77374           Object.defineProperty(exports, '__esModule', { value: true });
77375
77376         })));
77377
77378         });
77379
77380         var martinez = unwrapExports(martinez_umd);
77381
77382         var read$6 = function (buffer, offset, isLE, mLen, nBytes) {
77383           var e, m;
77384           var eLen = (nBytes * 8) - mLen - 1;
77385           var eMax = (1 << eLen) - 1;
77386           var eBias = eMax >> 1;
77387           var nBits = -7;
77388           var i = isLE ? (nBytes - 1) : 0;
77389           var d = isLE ? -1 : 1;
77390           var s = buffer[offset + i];
77391
77392           i += d;
77393
77394           e = s & ((1 << (-nBits)) - 1);
77395           s >>= (-nBits);
77396           nBits += eLen;
77397           for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
77398
77399           m = e & ((1 << (-nBits)) - 1);
77400           e >>= (-nBits);
77401           nBits += mLen;
77402           for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
77403
77404           if (e === 0) {
77405             e = 1 - eBias;
77406           } else if (e === eMax) {
77407             return m ? NaN : ((s ? -1 : 1) * Infinity)
77408           } else {
77409             m = m + Math.pow(2, mLen);
77410             e = e - eBias;
77411           }
77412           return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
77413         };
77414
77415         var write$6 = function (buffer, value, offset, isLE, mLen, nBytes) {
77416           var e, m, c;
77417           var eLen = (nBytes * 8) - mLen - 1;
77418           var eMax = (1 << eLen) - 1;
77419           var eBias = eMax >> 1;
77420           var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);
77421           var i = isLE ? 0 : (nBytes - 1);
77422           var d = isLE ? 1 : -1;
77423           var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;
77424
77425           value = Math.abs(value);
77426
77427           if (isNaN(value) || value === Infinity) {
77428             m = isNaN(value) ? 1 : 0;
77429             e = eMax;
77430           } else {
77431             e = Math.floor(Math.log(value) / Math.LN2);
77432             if (value * (c = Math.pow(2, -e)) < 1) {
77433               e--;
77434               c *= 2;
77435             }
77436             if (e + eBias >= 1) {
77437               value += rt / c;
77438             } else {
77439               value += rt * Math.pow(2, 1 - eBias);
77440             }
77441             if (value * c >= 2) {
77442               e++;
77443               c /= 2;
77444             }
77445
77446             if (e + eBias >= eMax) {
77447               m = 0;
77448               e = eMax;
77449             } else if (e + eBias >= 1) {
77450               m = ((value * c) - 1) * Math.pow(2, mLen);
77451               e = e + eBias;
77452             } else {
77453               m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);
77454               e = 0;
77455             }
77456           }
77457
77458           for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
77459
77460           e = (e << mLen) | m;
77461           eLen += mLen;
77462           for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
77463
77464           buffer[offset + i - d] |= s * 128;
77465         };
77466
77467         var ieee754 = {
77468                 read: read$6,
77469                 write: write$6
77470         };
77471
77472         var pbf = Pbf;
77473
77474
77475
77476         function Pbf(buf) {
77477             this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
77478             this.pos = 0;
77479             this.type = 0;
77480             this.length = this.buf.length;
77481         }
77482
77483         Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
77484         Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
77485         Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
77486         Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
77487
77488         var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
77489             SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
77490
77491         // Threshold chosen based on both benchmarking and knowledge about browser string
77492         // data structures (which currently switch structure types at 12 bytes or more)
77493         var TEXT_DECODER_MIN_LENGTH = 12;
77494         var utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8');
77495
77496         Pbf.prototype = {
77497
77498             destroy: function() {
77499                 this.buf = null;
77500             },
77501
77502             // === READING =================================================================
77503
77504             readFields: function(readField, result, end) {
77505                 end = end || this.length;
77506
77507                 while (this.pos < end) {
77508                     var val = this.readVarint(),
77509                         tag = val >> 3,
77510                         startPos = this.pos;
77511
77512                     this.type = val & 0x7;
77513                     readField(tag, result, this);
77514
77515                     if (this.pos === startPos) { this.skip(val); }
77516                 }
77517                 return result;
77518             },
77519
77520             readMessage: function(readField, result) {
77521                 return this.readFields(readField, result, this.readVarint() + this.pos);
77522             },
77523
77524             readFixed32: function() {
77525                 var val = readUInt32(this.buf, this.pos);
77526                 this.pos += 4;
77527                 return val;
77528             },
77529
77530             readSFixed32: function() {
77531                 var val = readInt32(this.buf, this.pos);
77532                 this.pos += 4;
77533                 return val;
77534             },
77535
77536             // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
77537
77538             readFixed64: function() {
77539                 var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
77540                 this.pos += 8;
77541                 return val;
77542             },
77543
77544             readSFixed64: function() {
77545                 var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
77546                 this.pos += 8;
77547                 return val;
77548             },
77549
77550             readFloat: function() {
77551                 var val = ieee754.read(this.buf, this.pos, true, 23, 4);
77552                 this.pos += 4;
77553                 return val;
77554             },
77555
77556             readDouble: function() {
77557                 var val = ieee754.read(this.buf, this.pos, true, 52, 8);
77558                 this.pos += 8;
77559                 return val;
77560             },
77561
77562             readVarint: function(isSigned) {
77563                 var buf = this.buf,
77564                     val, b;
77565
77566                 b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) { return val; }
77567                 b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) { return val; }
77568                 b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) { return val; }
77569                 b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) { return val; }
77570                 b = buf[this.pos];   val |= (b & 0x0f) << 28;
77571
77572                 return readVarintRemainder(val, isSigned, this);
77573             },
77574
77575             readVarint64: function() { // for compatibility with v2.0.1
77576                 return this.readVarint(true);
77577             },
77578
77579             readSVarint: function() {
77580                 var num = this.readVarint();
77581                 return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
77582             },
77583
77584             readBoolean: function() {
77585                 return Boolean(this.readVarint());
77586             },
77587
77588             readString: function() {
77589                 var end = this.readVarint() + this.pos;
77590                 var pos = this.pos;
77591                 this.pos = end;
77592
77593                 if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) {
77594                     // longer strings are fast with the built-in browser TextDecoder API
77595                     return readUtf8TextDecoder(this.buf, pos, end);
77596                 }
77597                 // short strings are fast with our custom implementation
77598                 return readUtf8(this.buf, pos, end);
77599             },
77600
77601             readBytes: function() {
77602                 var end = this.readVarint() + this.pos,
77603                     buffer = this.buf.subarray(this.pos, end);
77604                 this.pos = end;
77605                 return buffer;
77606             },
77607
77608             // verbose for performance reasons; doesn't affect gzipped size
77609
77610             readPackedVarint: function(arr, isSigned) {
77611                 if (this.type !== Pbf.Bytes) { return arr.push(this.readVarint(isSigned)); }
77612                 var end = readPackedEnd(this);
77613                 arr = arr || [];
77614                 while (this.pos < end) { arr.push(this.readVarint(isSigned)); }
77615                 return arr;
77616             },
77617             readPackedSVarint: function(arr) {
77618                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSVarint()); }
77619                 var end = readPackedEnd(this);
77620                 arr = arr || [];
77621                 while (this.pos < end) { arr.push(this.readSVarint()); }
77622                 return arr;
77623             },
77624             readPackedBoolean: function(arr) {
77625                 if (this.type !== Pbf.Bytes) { return arr.push(this.readBoolean()); }
77626                 var end = readPackedEnd(this);
77627                 arr = arr || [];
77628                 while (this.pos < end) { arr.push(this.readBoolean()); }
77629                 return arr;
77630             },
77631             readPackedFloat: function(arr) {
77632                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFloat()); }
77633                 var end = readPackedEnd(this);
77634                 arr = arr || [];
77635                 while (this.pos < end) { arr.push(this.readFloat()); }
77636                 return arr;
77637             },
77638             readPackedDouble: function(arr) {
77639                 if (this.type !== Pbf.Bytes) { return arr.push(this.readDouble()); }
77640                 var end = readPackedEnd(this);
77641                 arr = arr || [];
77642                 while (this.pos < end) { arr.push(this.readDouble()); }
77643                 return arr;
77644             },
77645             readPackedFixed32: function(arr) {
77646                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed32()); }
77647                 var end = readPackedEnd(this);
77648                 arr = arr || [];
77649                 while (this.pos < end) { arr.push(this.readFixed32()); }
77650                 return arr;
77651             },
77652             readPackedSFixed32: function(arr) {
77653                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed32()); }
77654                 var end = readPackedEnd(this);
77655                 arr = arr || [];
77656                 while (this.pos < end) { arr.push(this.readSFixed32()); }
77657                 return arr;
77658             },
77659             readPackedFixed64: function(arr) {
77660                 if (this.type !== Pbf.Bytes) { return arr.push(this.readFixed64()); }
77661                 var end = readPackedEnd(this);
77662                 arr = arr || [];
77663                 while (this.pos < end) { arr.push(this.readFixed64()); }
77664                 return arr;
77665             },
77666             readPackedSFixed64: function(arr) {
77667                 if (this.type !== Pbf.Bytes) { return arr.push(this.readSFixed64()); }
77668                 var end = readPackedEnd(this);
77669                 arr = arr || [];
77670                 while (this.pos < end) { arr.push(this.readSFixed64()); }
77671                 return arr;
77672             },
77673
77674             skip: function(val) {
77675                 var type = val & 0x7;
77676                 if (type === Pbf.Varint) { while (this.buf[this.pos++] > 0x7f) {} }
77677                 else if (type === Pbf.Bytes) { this.pos = this.readVarint() + this.pos; }
77678                 else if (type === Pbf.Fixed32) { this.pos += 4; }
77679                 else if (type === Pbf.Fixed64) { this.pos += 8; }
77680                 else { throw new Error('Unimplemented type: ' + type); }
77681             },
77682
77683             // === WRITING =================================================================
77684
77685             writeTag: function(tag, type) {
77686                 this.writeVarint((tag << 3) | type);
77687             },
77688
77689             realloc: function(min) {
77690                 var length = this.length || 16;
77691
77692                 while (length < this.pos + min) { length *= 2; }
77693
77694                 if (length !== this.length) {
77695                     var buf = new Uint8Array(length);
77696                     buf.set(this.buf);
77697                     this.buf = buf;
77698                     this.length = length;
77699                 }
77700             },
77701
77702             finish: function() {
77703                 this.length = this.pos;
77704                 this.pos = 0;
77705                 return this.buf.subarray(0, this.length);
77706             },
77707
77708             writeFixed32: function(val) {
77709                 this.realloc(4);
77710                 writeInt32(this.buf, val, this.pos);
77711                 this.pos += 4;
77712             },
77713
77714             writeSFixed32: function(val) {
77715                 this.realloc(4);
77716                 writeInt32(this.buf, val, this.pos);
77717                 this.pos += 4;
77718             },
77719
77720             writeFixed64: function(val) {
77721                 this.realloc(8);
77722                 writeInt32(this.buf, val & -1, this.pos);
77723                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
77724                 this.pos += 8;
77725             },
77726
77727             writeSFixed64: function(val) {
77728                 this.realloc(8);
77729                 writeInt32(this.buf, val & -1, this.pos);
77730                 writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
77731                 this.pos += 8;
77732             },
77733
77734             writeVarint: function(val) {
77735                 val = +val || 0;
77736
77737                 if (val > 0xfffffff || val < 0) {
77738                     writeBigVarint(val, this);
77739                     return;
77740                 }
77741
77742                 this.realloc(4);
77743
77744                 this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
77745                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
77746                 this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) { return; }
77747                 this.buf[this.pos++] =   (val >>> 7) & 0x7f;
77748             },
77749
77750             writeSVarint: function(val) {
77751                 this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
77752             },
77753
77754             writeBoolean: function(val) {
77755                 this.writeVarint(Boolean(val));
77756             },
77757
77758             writeString: function(str) {
77759                 str = String(str);
77760                 this.realloc(str.length * 4);
77761
77762                 this.pos++; // reserve 1 byte for short string length
77763
77764                 var startPos = this.pos;
77765                 // write the string directly to the buffer and see how much was written
77766                 this.pos = writeUtf8(this.buf, str, this.pos);
77767                 var len = this.pos - startPos;
77768
77769                 if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); }
77770
77771                 // finally, write the message length in the reserved place and restore the position
77772                 this.pos = startPos - 1;
77773                 this.writeVarint(len);
77774                 this.pos += len;
77775             },
77776
77777             writeFloat: function(val) {
77778                 this.realloc(4);
77779                 ieee754.write(this.buf, val, this.pos, true, 23, 4);
77780                 this.pos += 4;
77781             },
77782
77783             writeDouble: function(val) {
77784                 this.realloc(8);
77785                 ieee754.write(this.buf, val, this.pos, true, 52, 8);
77786                 this.pos += 8;
77787             },
77788
77789             writeBytes: function(buffer) {
77790                 var len = buffer.length;
77791                 this.writeVarint(len);
77792                 this.realloc(len);
77793                 for (var i = 0; i < len; i++) { this.buf[this.pos++] = buffer[i]; }
77794             },
77795
77796             writeRawMessage: function(fn, obj) {
77797                 this.pos++; // reserve 1 byte for short message length
77798
77799                 // write the message directly to the buffer and see how much was written
77800                 var startPos = this.pos;
77801                 fn(obj, this);
77802                 var len = this.pos - startPos;
77803
77804                 if (len >= 0x80) { makeRoomForExtraLength(startPos, len, this); }
77805
77806                 // finally, write the message length in the reserved place and restore the position
77807                 this.pos = startPos - 1;
77808                 this.writeVarint(len);
77809                 this.pos += len;
77810             },
77811
77812             writeMessage: function(tag, fn, obj) {
77813                 this.writeTag(tag, Pbf.Bytes);
77814                 this.writeRawMessage(fn, obj);
77815             },
77816
77817             writePackedVarint:   function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedVarint, arr); }   },
77818             writePackedSVarint:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSVarint, arr); }  },
77819             writePackedBoolean:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedBoolean, arr); }  },
77820             writePackedFloat:    function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFloat, arr); }    },
77821             writePackedDouble:   function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedDouble, arr); }   },
77822             writePackedFixed32:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed32, arr); }  },
77823             writePackedSFixed32: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed32, arr); } },
77824             writePackedFixed64:  function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedFixed64, arr); }  },
77825             writePackedSFixed64: function(tag, arr) { if (arr.length) { this.writeMessage(tag, writePackedSFixed64, arr); } },
77826
77827             writeBytesField: function(tag, buffer) {
77828                 this.writeTag(tag, Pbf.Bytes);
77829                 this.writeBytes(buffer);
77830             },
77831             writeFixed32Field: function(tag, val) {
77832                 this.writeTag(tag, Pbf.Fixed32);
77833                 this.writeFixed32(val);
77834             },
77835             writeSFixed32Field: function(tag, val) {
77836                 this.writeTag(tag, Pbf.Fixed32);
77837                 this.writeSFixed32(val);
77838             },
77839             writeFixed64Field: function(tag, val) {
77840                 this.writeTag(tag, Pbf.Fixed64);
77841                 this.writeFixed64(val);
77842             },
77843             writeSFixed64Field: function(tag, val) {
77844                 this.writeTag(tag, Pbf.Fixed64);
77845                 this.writeSFixed64(val);
77846             },
77847             writeVarintField: function(tag, val) {
77848                 this.writeTag(tag, Pbf.Varint);
77849                 this.writeVarint(val);
77850             },
77851             writeSVarintField: function(tag, val) {
77852                 this.writeTag(tag, Pbf.Varint);
77853                 this.writeSVarint(val);
77854             },
77855             writeStringField: function(tag, str) {
77856                 this.writeTag(tag, Pbf.Bytes);
77857                 this.writeString(str);
77858             },
77859             writeFloatField: function(tag, val) {
77860                 this.writeTag(tag, Pbf.Fixed32);
77861                 this.writeFloat(val);
77862             },
77863             writeDoubleField: function(tag, val) {
77864                 this.writeTag(tag, Pbf.Fixed64);
77865                 this.writeDouble(val);
77866             },
77867             writeBooleanField: function(tag, val) {
77868                 this.writeVarintField(tag, Boolean(val));
77869             }
77870         };
77871
77872         function readVarintRemainder(l, s, p) {
77873             var buf = p.buf,
77874                 h, b;
77875
77876             b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) { return toNum(l, h, s); }
77877             b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) { return toNum(l, h, s); }
77878             b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) { return toNum(l, h, s); }
77879             b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) { return toNum(l, h, s); }
77880             b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) { return toNum(l, h, s); }
77881             b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) { return toNum(l, h, s); }
77882
77883             throw new Error('Expected varint not more than 10 bytes');
77884         }
77885
77886         function readPackedEnd(pbf) {
77887             return pbf.type === Pbf.Bytes ?
77888                 pbf.readVarint() + pbf.pos : pbf.pos + 1;
77889         }
77890
77891         function toNum(low, high, isSigned) {
77892             if (isSigned) {
77893                 return high * 0x100000000 + (low >>> 0);
77894             }
77895
77896             return ((high >>> 0) * 0x100000000) + (low >>> 0);
77897         }
77898
77899         function writeBigVarint(val, pbf) {
77900             var low, high;
77901
77902             if (val >= 0) {
77903                 low  = (val % 0x100000000) | 0;
77904                 high = (val / 0x100000000) | 0;
77905             } else {
77906                 low  = ~(-val % 0x100000000);
77907                 high = ~(-val / 0x100000000);
77908
77909                 if (low ^ 0xffffffff) {
77910                     low = (low + 1) | 0;
77911                 } else {
77912                     low = 0;
77913                     high = (high + 1) | 0;
77914                 }
77915             }
77916
77917             if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
77918                 throw new Error('Given varint doesn\'t fit into 10 bytes');
77919             }
77920
77921             pbf.realloc(10);
77922
77923             writeBigVarintLow(low, high, pbf);
77924             writeBigVarintHigh(high, pbf);
77925         }
77926
77927         function writeBigVarintLow(low, high, pbf) {
77928             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
77929             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
77930             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
77931             pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
77932             pbf.buf[pbf.pos]   = low & 0x7f;
77933         }
77934
77935         function writeBigVarintHigh(high, pbf) {
77936             var lsb = (high & 0x07) << 4;
77937
77938             pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) { return; }
77939             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
77940             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
77941             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
77942             pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) { return; }
77943             pbf.buf[pbf.pos++]  = high & 0x7f;
77944         }
77945
77946         function makeRoomForExtraLength(startPos, len, pbf) {
77947             var extraLen =
77948                 len <= 0x3fff ? 1 :
77949                 len <= 0x1fffff ? 2 :
77950                 len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7));
77951
77952             // if 1 byte isn't enough for encoding message length, shift the data to the right
77953             pbf.realloc(extraLen);
77954             for (var i = pbf.pos - 1; i >= startPos; i--) { pbf.buf[i + extraLen] = pbf.buf[i]; }
77955         }
77956
77957         function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) { pbf.writeVarint(arr[i]); }   }
77958         function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeSVarint(arr[i]); }  }
77959         function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) { pbf.writeFloat(arr[i]); }    }
77960         function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) { pbf.writeDouble(arr[i]); }   }
77961         function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeBoolean(arr[i]); }  }
77962         function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeFixed32(arr[i]); }  }
77963         function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed32(arr[i]); } }
77964         function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) { pbf.writeFixed64(arr[i]); }  }
77965         function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) { pbf.writeSFixed64(arr[i]); } }
77966
77967         // Buffer code below from https://github.com/feross/buffer, MIT-licensed
77968
77969         function readUInt32(buf, pos) {
77970             return ((buf[pos]) |
77971                 (buf[pos + 1] << 8) |
77972                 (buf[pos + 2] << 16)) +
77973                 (buf[pos + 3] * 0x1000000);
77974         }
77975
77976         function writeInt32(buf, val, pos) {
77977             buf[pos] = val;
77978             buf[pos + 1] = (val >>> 8);
77979             buf[pos + 2] = (val >>> 16);
77980             buf[pos + 3] = (val >>> 24);
77981         }
77982
77983         function readInt32(buf, pos) {
77984             return ((buf[pos]) |
77985                 (buf[pos + 1] << 8) |
77986                 (buf[pos + 2] << 16)) +
77987                 (buf[pos + 3] << 24);
77988         }
77989
77990         function readUtf8(buf, pos, end) {
77991             var str = '';
77992             var i = pos;
77993
77994             while (i < end) {
77995                 var b0 = buf[i];
77996                 var c = null; // codepoint
77997                 var bytesPerSequence =
77998                     b0 > 0xEF ? 4 :
77999                     b0 > 0xDF ? 3 :
78000                     b0 > 0xBF ? 2 : 1;
78001
78002                 if (i + bytesPerSequence > end) { break; }
78003
78004                 var b1, b2, b3;
78005
78006                 if (bytesPerSequence === 1) {
78007                     if (b0 < 0x80) {
78008                         c = b0;
78009                     }
78010                 } else if (bytesPerSequence === 2) {
78011                     b1 = buf[i + 1];
78012                     if ((b1 & 0xC0) === 0x80) {
78013                         c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
78014                         if (c <= 0x7F) {
78015                             c = null;
78016                         }
78017                     }
78018                 } else if (bytesPerSequence === 3) {
78019                     b1 = buf[i + 1];
78020                     b2 = buf[i + 2];
78021                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
78022                         c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
78023                         if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
78024                             c = null;
78025                         }
78026                     }
78027                 } else if (bytesPerSequence === 4) {
78028                     b1 = buf[i + 1];
78029                     b2 = buf[i + 2];
78030                     b3 = buf[i + 3];
78031                     if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
78032                         c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
78033                         if (c <= 0xFFFF || c >= 0x110000) {
78034                             c = null;
78035                         }
78036                     }
78037                 }
78038
78039                 if (c === null) {
78040                     c = 0xFFFD;
78041                     bytesPerSequence = 1;
78042
78043                 } else if (c > 0xFFFF) {
78044                     c -= 0x10000;
78045                     str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
78046                     c = 0xDC00 | c & 0x3FF;
78047                 }
78048
78049                 str += String.fromCharCode(c);
78050                 i += bytesPerSequence;
78051             }
78052
78053             return str;
78054         }
78055
78056         function readUtf8TextDecoder(buf, pos, end) {
78057             return utf8TextDecoder.decode(buf.subarray(pos, end));
78058         }
78059
78060         function writeUtf8(buf, str, pos) {
78061             for (var i = 0, c, lead; i < str.length; i++) {
78062                 c = str.charCodeAt(i); // code point
78063
78064                 if (c > 0xD7FF && c < 0xE000) {
78065                     if (lead) {
78066                         if (c < 0xDC00) {
78067                             buf[pos++] = 0xEF;
78068                             buf[pos++] = 0xBF;
78069                             buf[pos++] = 0xBD;
78070                             lead = c;
78071                             continue;
78072                         } else {
78073                             c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
78074                             lead = null;
78075                         }
78076                     } else {
78077                         if (c > 0xDBFF || (i + 1 === str.length)) {
78078                             buf[pos++] = 0xEF;
78079                             buf[pos++] = 0xBF;
78080                             buf[pos++] = 0xBD;
78081                         } else {
78082                             lead = c;
78083                         }
78084                         continue;
78085                     }
78086                 } else if (lead) {
78087                     buf[pos++] = 0xEF;
78088                     buf[pos++] = 0xBF;
78089                     buf[pos++] = 0xBD;
78090                     lead = null;
78091                 }
78092
78093                 if (c < 0x80) {
78094                     buf[pos++] = c;
78095                 } else {
78096                     if (c < 0x800) {
78097                         buf[pos++] = c >> 0x6 | 0xC0;
78098                     } else {
78099                         if (c < 0x10000) {
78100                             buf[pos++] = c >> 0xC | 0xE0;
78101                         } else {
78102                             buf[pos++] = c >> 0x12 | 0xF0;
78103                             buf[pos++] = c >> 0xC & 0x3F | 0x80;
78104                         }
78105                         buf[pos++] = c >> 0x6 & 0x3F | 0x80;
78106                     }
78107                     buf[pos++] = c & 0x3F | 0x80;
78108                 }
78109             }
78110             return pos;
78111         }
78112
78113         var pointGeometry = Point$1;
78114
78115         /**
78116          * A standalone point geometry with useful accessor, comparison, and
78117          * modification methods.
78118          *
78119          * @class Point
78120          * @param {Number} x the x-coordinate. this could be longitude or screen
78121          * pixels, or any other sort of unit.
78122          * @param {Number} y the y-coordinate. this could be latitude or screen
78123          * pixels, or any other sort of unit.
78124          * @example
78125          * var point = new Point(-77, 38);
78126          */
78127         function Point$1(x, y) {
78128             this.x = x;
78129             this.y = y;
78130         }
78131
78132         Point$1.prototype = {
78133
78134             /**
78135              * Clone this point, returning a new point that can be modified
78136              * without affecting the old one.
78137              * @return {Point} the clone
78138              */
78139             clone: function() { return new Point$1(this.x, this.y); },
78140
78141             /**
78142              * Add this point's x & y coordinates to another point,
78143              * yielding a new point.
78144              * @param {Point} p the other point
78145              * @return {Point} output point
78146              */
78147             add:     function(p) { return this.clone()._add(p); },
78148
78149             /**
78150              * Subtract this point's x & y coordinates to from point,
78151              * yielding a new point.
78152              * @param {Point} p the other point
78153              * @return {Point} output point
78154              */
78155             sub:     function(p) { return this.clone()._sub(p); },
78156
78157             /**
78158              * Multiply this point's x & y coordinates by point,
78159              * yielding a new point.
78160              * @param {Point} p the other point
78161              * @return {Point} output point
78162              */
78163             multByPoint:    function(p) { return this.clone()._multByPoint(p); },
78164
78165             /**
78166              * Divide this point's x & y coordinates by point,
78167              * yielding a new point.
78168              * @param {Point} p the other point
78169              * @return {Point} output point
78170              */
78171             divByPoint:     function(p) { return this.clone()._divByPoint(p); },
78172
78173             /**
78174              * Multiply this point's x & y coordinates by a factor,
78175              * yielding a new point.
78176              * @param {Point} k factor
78177              * @return {Point} output point
78178              */
78179             mult:    function(k) { return this.clone()._mult(k); },
78180
78181             /**
78182              * Divide this point's x & y coordinates by a factor,
78183              * yielding a new point.
78184              * @param {Point} k factor
78185              * @return {Point} output point
78186              */
78187             div:     function(k) { return this.clone()._div(k); },
78188
78189             /**
78190              * Rotate this point around the 0, 0 origin by an angle a,
78191              * given in radians
78192              * @param {Number} a angle to rotate around, in radians
78193              * @return {Point} output point
78194              */
78195             rotate:  function(a) { return this.clone()._rotate(a); },
78196
78197             /**
78198              * Rotate this point around p point by an angle a,
78199              * given in radians
78200              * @param {Number} a angle to rotate around, in radians
78201              * @param {Point} p Point to rotate around
78202              * @return {Point} output point
78203              */
78204             rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },
78205
78206             /**
78207              * Multiply this point by a 4x1 transformation matrix
78208              * @param {Array<Number>} m transformation matrix
78209              * @return {Point} output point
78210              */
78211             matMult: function(m) { return this.clone()._matMult(m); },
78212
78213             /**
78214              * Calculate this point but as a unit vector from 0, 0, meaning
78215              * that the distance from the resulting point to the 0, 0
78216              * coordinate will be equal to 1 and the angle from the resulting
78217              * point to the 0, 0 coordinate will be the same as before.
78218              * @return {Point} unit vector point
78219              */
78220             unit:    function() { return this.clone()._unit(); },
78221
78222             /**
78223              * Compute a perpendicular point, where the new y coordinate
78224              * is the old x coordinate and the new x coordinate is the old y
78225              * coordinate multiplied by -1
78226              * @return {Point} perpendicular point
78227              */
78228             perp:    function() { return this.clone()._perp(); },
78229
78230             /**
78231              * Return a version of this point with the x & y coordinates
78232              * rounded to integers.
78233              * @return {Point} rounded point
78234              */
78235             round:   function() { return this.clone()._round(); },
78236
78237             /**
78238              * Return the magitude of this point: this is the Euclidean
78239              * distance from the 0, 0 coordinate to this point's x and y
78240              * coordinates.
78241              * @return {Number} magnitude
78242              */
78243             mag: function() {
78244                 return Math.sqrt(this.x * this.x + this.y * this.y);
78245             },
78246
78247             /**
78248              * Judge whether this point is equal to another point, returning
78249              * true or false.
78250              * @param {Point} other the other point
78251              * @return {boolean} whether the points are equal
78252              */
78253             equals: function(other) {
78254                 return this.x === other.x &&
78255                        this.y === other.y;
78256             },
78257
78258             /**
78259              * Calculate the distance from this point to another point
78260              * @param {Point} p the other point
78261              * @return {Number} distance
78262              */
78263             dist: function(p) {
78264                 return Math.sqrt(this.distSqr(p));
78265             },
78266
78267             /**
78268              * Calculate the distance from this point to another point,
78269              * without the square root step. Useful if you're comparing
78270              * relative distances.
78271              * @param {Point} p the other point
78272              * @return {Number} distance
78273              */
78274             distSqr: function(p) {
78275                 var dx = p.x - this.x,
78276                     dy = p.y - this.y;
78277                 return dx * dx + dy * dy;
78278             },
78279
78280             /**
78281              * Get the angle from the 0, 0 coordinate to this point, in radians
78282              * coordinates.
78283              * @return {Number} angle
78284              */
78285             angle: function() {
78286                 return Math.atan2(this.y, this.x);
78287             },
78288
78289             /**
78290              * Get the angle from this point to another point, in radians
78291              * @param {Point} b the other point
78292              * @return {Number} angle
78293              */
78294             angleTo: function(b) {
78295                 return Math.atan2(this.y - b.y, this.x - b.x);
78296             },
78297
78298             /**
78299              * Get the angle between this point and another point, in radians
78300              * @param {Point} b the other point
78301              * @return {Number} angle
78302              */
78303             angleWith: function(b) {
78304                 return this.angleWithSep(b.x, b.y);
78305             },
78306
78307             /*
78308              * Find the angle of the two vectors, solving the formula for
78309              * the cross product a x b = |a||b|sin(θ) for θ.
78310              * @param {Number} x the x-coordinate
78311              * @param {Number} y the y-coordinate
78312              * @return {Number} the angle in radians
78313              */
78314             angleWithSep: function(x, y) {
78315                 return Math.atan2(
78316                     this.x * y - this.y * x,
78317                     this.x * x + this.y * y);
78318             },
78319
78320             _matMult: function(m) {
78321                 var x = m[0] * this.x + m[1] * this.y,
78322                     y = m[2] * this.x + m[3] * this.y;
78323                 this.x = x;
78324                 this.y = y;
78325                 return this;
78326             },
78327
78328             _add: function(p) {
78329                 this.x += p.x;
78330                 this.y += p.y;
78331                 return this;
78332             },
78333
78334             _sub: function(p) {
78335                 this.x -= p.x;
78336                 this.y -= p.y;
78337                 return this;
78338             },
78339
78340             _mult: function(k) {
78341                 this.x *= k;
78342                 this.y *= k;
78343                 return this;
78344             },
78345
78346             _div: function(k) {
78347                 this.x /= k;
78348                 this.y /= k;
78349                 return this;
78350             },
78351
78352             _multByPoint: function(p) {
78353                 this.x *= p.x;
78354                 this.y *= p.y;
78355                 return this;
78356             },
78357
78358             _divByPoint: function(p) {
78359                 this.x /= p.x;
78360                 this.y /= p.y;
78361                 return this;
78362             },
78363
78364             _unit: function() {
78365                 this._div(this.mag());
78366                 return this;
78367             },
78368
78369             _perp: function() {
78370                 var y = this.y;
78371                 this.y = this.x;
78372                 this.x = -y;
78373                 return this;
78374             },
78375
78376             _rotate: function(angle) {
78377                 var cos = Math.cos(angle),
78378                     sin = Math.sin(angle),
78379                     x = cos * this.x - sin * this.y,
78380                     y = sin * this.x + cos * this.y;
78381                 this.x = x;
78382                 this.y = y;
78383                 return this;
78384             },
78385
78386             _rotateAround: function(angle, p) {
78387                 var cos = Math.cos(angle),
78388                     sin = Math.sin(angle),
78389                     x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),
78390                     y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);
78391                 this.x = x;
78392                 this.y = y;
78393                 return this;
78394             },
78395
78396             _round: function() {
78397                 this.x = Math.round(this.x);
78398                 this.y = Math.round(this.y);
78399                 return this;
78400             }
78401         };
78402
78403         /**
78404          * Construct a point from an array if necessary, otherwise if the input
78405          * is already a Point, or an unknown type, return it unchanged
78406          * @param {Array<Number>|Point|*} a any kind of input value
78407          * @return {Point} constructed point, or passed-through value.
78408          * @example
78409          * // this
78410          * var point = Point.convert([0, 1]);
78411          * // is equivalent to
78412          * var point = new Point(0, 1);
78413          */
78414         Point$1.convert = function (a) {
78415             if (a instanceof Point$1) {
78416                 return a;
78417             }
78418             if (Array.isArray(a)) {
78419                 return new Point$1(a[0], a[1]);
78420             }
78421             return a;
78422         };
78423
78424         var vectortilefeature = VectorTileFeature;
78425
78426         function VectorTileFeature(pbf, end, extent, keys, values) {
78427             // Public
78428             this.properties = {};
78429             this.extent = extent;
78430             this.type = 0;
78431
78432             // Private
78433             this._pbf = pbf;
78434             this._geometry = -1;
78435             this._keys = keys;
78436             this._values = values;
78437
78438             pbf.readFields(readFeature, this, end);
78439         }
78440
78441         function readFeature(tag, feature, pbf) {
78442             if (tag == 1) { feature.id = pbf.readVarint(); }
78443             else if (tag == 2) { readTag(pbf, feature); }
78444             else if (tag == 3) { feature.type = pbf.readVarint(); }
78445             else if (tag == 4) { feature._geometry = pbf.pos; }
78446         }
78447
78448         function readTag(pbf, feature) {
78449             var end = pbf.readVarint() + pbf.pos;
78450
78451             while (pbf.pos < end) {
78452                 var key = feature._keys[pbf.readVarint()],
78453                     value = feature._values[pbf.readVarint()];
78454                 feature.properties[key] = value;
78455             }
78456         }
78457
78458         VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
78459
78460         VectorTileFeature.prototype.loadGeometry = function() {
78461             var pbf = this._pbf;
78462             pbf.pos = this._geometry;
78463
78464             var end = pbf.readVarint() + pbf.pos,
78465                 cmd = 1,
78466                 length = 0,
78467                 x = 0,
78468                 y = 0,
78469                 lines = [],
78470                 line;
78471
78472             while (pbf.pos < end) {
78473                 if (length <= 0) {
78474                     var cmdLen = pbf.readVarint();
78475                     cmd = cmdLen & 0x7;
78476                     length = cmdLen >> 3;
78477                 }
78478
78479                 length--;
78480
78481                 if (cmd === 1 || cmd === 2) {
78482                     x += pbf.readSVarint();
78483                     y += pbf.readSVarint();
78484
78485                     if (cmd === 1) { // moveTo
78486                         if (line) { lines.push(line); }
78487                         line = [];
78488                     }
78489
78490                     line.push(new pointGeometry(x, y));
78491
78492                 } else if (cmd === 7) {
78493
78494                     // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
78495                     if (line) {
78496                         line.push(line[0].clone()); // closePolygon
78497                     }
78498
78499                 } else {
78500                     throw new Error('unknown command ' + cmd);
78501                 }
78502             }
78503
78504             if (line) { lines.push(line); }
78505
78506             return lines;
78507         };
78508
78509         VectorTileFeature.prototype.bbox = function() {
78510             var pbf = this._pbf;
78511             pbf.pos = this._geometry;
78512
78513             var end = pbf.readVarint() + pbf.pos,
78514                 cmd = 1,
78515                 length = 0,
78516                 x = 0,
78517                 y = 0,
78518                 x1 = Infinity,
78519                 x2 = -Infinity,
78520                 y1 = Infinity,
78521                 y2 = -Infinity;
78522
78523             while (pbf.pos < end) {
78524                 if (length <= 0) {
78525                     var cmdLen = pbf.readVarint();
78526                     cmd = cmdLen & 0x7;
78527                     length = cmdLen >> 3;
78528                 }
78529
78530                 length--;
78531
78532                 if (cmd === 1 || cmd === 2) {
78533                     x += pbf.readSVarint();
78534                     y += pbf.readSVarint();
78535                     if (x < x1) { x1 = x; }
78536                     if (x > x2) { x2 = x; }
78537                     if (y < y1) { y1 = y; }
78538                     if (y > y2) { y2 = y; }
78539
78540                 } else if (cmd !== 7) {
78541                     throw new Error('unknown command ' + cmd);
78542                 }
78543             }
78544
78545             return [x1, y1, x2, y2];
78546         };
78547
78548         VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
78549             var size = this.extent * Math.pow(2, z),
78550                 x0 = this.extent * x,
78551                 y0 = this.extent * y,
78552                 coords = this.loadGeometry(),
78553                 type = VectorTileFeature.types[this.type],
78554                 i, j;
78555
78556             function project(line) {
78557                 for (var j = 0; j < line.length; j++) {
78558                     var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
78559                     line[j] = [
78560                         (p.x + x0) * 360 / size - 180,
78561                         360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
78562                     ];
78563                 }
78564             }
78565
78566             switch (this.type) {
78567             case 1:
78568                 var points = [];
78569                 for (i = 0; i < coords.length; i++) {
78570                     points[i] = coords[i][0];
78571                 }
78572                 coords = points;
78573                 project(coords);
78574                 break;
78575
78576             case 2:
78577                 for (i = 0; i < coords.length; i++) {
78578                     project(coords[i]);
78579                 }
78580                 break;
78581
78582             case 3:
78583                 coords = classifyRings(coords);
78584                 for (i = 0; i < coords.length; i++) {
78585                     for (j = 0; j < coords[i].length; j++) {
78586                         project(coords[i][j]);
78587                     }
78588                 }
78589                 break;
78590             }
78591
78592             if (coords.length === 1) {
78593                 coords = coords[0];
78594             } else {
78595                 type = 'Multi' + type;
78596             }
78597
78598             var result = {
78599                 type: "Feature",
78600                 geometry: {
78601                     type: type,
78602                     coordinates: coords
78603                 },
78604                 properties: this.properties
78605             };
78606
78607             if ('id' in this) {
78608                 result.id = this.id;
78609             }
78610
78611             return result;
78612         };
78613
78614         // classifies an array of rings into polygons with outer rings and holes
78615
78616         function classifyRings(rings) {
78617             var len = rings.length;
78618
78619             if (len <= 1) { return [rings]; }
78620
78621             var polygons = [],
78622                 polygon,
78623                 ccw;
78624
78625             for (var i = 0; i < len; i++) {
78626                 var area = signedArea(rings[i]);
78627                 if (area === 0) { continue; }
78628
78629                 if (ccw === undefined) { ccw = area < 0; }
78630
78631                 if (ccw === area < 0) {
78632                     if (polygon) { polygons.push(polygon); }
78633                     polygon = [rings[i]];
78634
78635                 } else {
78636                     polygon.push(rings[i]);
78637                 }
78638             }
78639             if (polygon) { polygons.push(polygon); }
78640
78641             return polygons;
78642         }
78643
78644         function signedArea(ring) {
78645             var sum = 0;
78646             for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
78647                 p1 = ring[i];
78648                 p2 = ring[j];
78649                 sum += (p2.x - p1.x) * (p1.y + p2.y);
78650             }
78651             return sum;
78652         }
78653
78654         var vectortilelayer = VectorTileLayer;
78655
78656         function VectorTileLayer(pbf, end) {
78657             // Public
78658             this.version = 1;
78659             this.name = null;
78660             this.extent = 4096;
78661             this.length = 0;
78662
78663             // Private
78664             this._pbf = pbf;
78665             this._keys = [];
78666             this._values = [];
78667             this._features = [];
78668
78669             pbf.readFields(readLayer, this, end);
78670
78671             this.length = this._features.length;
78672         }
78673
78674         function readLayer(tag, layer, pbf) {
78675             if (tag === 15) { layer.version = pbf.readVarint(); }
78676             else if (tag === 1) { layer.name = pbf.readString(); }
78677             else if (tag === 5) { layer.extent = pbf.readVarint(); }
78678             else if (tag === 2) { layer._features.push(pbf.pos); }
78679             else if (tag === 3) { layer._keys.push(pbf.readString()); }
78680             else if (tag === 4) { layer._values.push(readValueMessage(pbf)); }
78681         }
78682
78683         function readValueMessage(pbf) {
78684             var value = null,
78685                 end = pbf.readVarint() + pbf.pos;
78686
78687             while (pbf.pos < end) {
78688                 var tag = pbf.readVarint() >> 3;
78689
78690                 value = tag === 1 ? pbf.readString() :
78691                     tag === 2 ? pbf.readFloat() :
78692                     tag === 3 ? pbf.readDouble() :
78693                     tag === 4 ? pbf.readVarint64() :
78694                     tag === 5 ? pbf.readVarint() :
78695                     tag === 6 ? pbf.readSVarint() :
78696                     tag === 7 ? pbf.readBoolean() : null;
78697             }
78698
78699             return value;
78700         }
78701
78702         // return feature `i` from this layer as a `VectorTileFeature`
78703         VectorTileLayer.prototype.feature = function(i) {
78704             if (i < 0 || i >= this._features.length) { throw new Error('feature index out of bounds'); }
78705
78706             this._pbf.pos = this._features[i];
78707
78708             var end = this._pbf.readVarint() + this._pbf.pos;
78709             return new vectortilefeature(this._pbf, end, this.extent, this._keys, this._values);
78710         };
78711
78712         var vectortile = VectorTile;
78713
78714         function VectorTile(pbf, end) {
78715             this.layers = pbf.readFields(readTile, {}, end);
78716         }
78717
78718         function readTile(tag, layers, pbf) {
78719             if (tag === 3) {
78720                 var layer = new vectortilelayer(pbf, pbf.readVarint() + pbf.pos);
78721                 if (layer.length) { layers[layer.name] = layer; }
78722             }
78723         }
78724
78725         var VectorTile$1 = vectortile;
78726         var VectorTileFeature$1 = vectortilefeature;
78727         var VectorTileLayer$1 = vectortilelayer;
78728
78729         var vectorTile = {
78730                 VectorTile: VectorTile$1,
78731                 VectorTileFeature: VectorTileFeature$1,
78732                 VectorTileLayer: VectorTileLayer$1
78733         };
78734
78735         var tiler$6 = utilTiler().tileSize(512).margin(1);
78736         var dispatch$7 = dispatch('loadedData');
78737         var _vtCache;
78738
78739
78740         function abortRequest$6(controller) {
78741             controller.abort();
78742         }
78743
78744
78745         function vtToGeoJSON(data, tile, mergeCache) {
78746             var vectorTile$1 = new vectorTile.VectorTile(new pbf(data));
78747             var layers = Object.keys(vectorTile$1.layers);
78748             if (!Array.isArray(layers)) { layers = [layers]; }
78749
78750             var features = [];
78751             layers.forEach(function(layerID) {
78752                 var layer = vectorTile$1.layers[layerID];
78753                 if (layer) {
78754                     for (var i = 0; i < layer.length; i++) {
78755                         var feature = layer.feature(i).toGeoJSON(tile.xyz[0], tile.xyz[1], tile.xyz[2]);
78756                         var geometry = feature.geometry;
78757
78758                         // Treat all Polygons as MultiPolygons
78759                         if (geometry.type === 'Polygon') {
78760                             geometry.type = 'MultiPolygon';
78761                             geometry.coordinates = [geometry.coordinates];
78762                         }
78763
78764                         // Clip to tile bounds
78765                         if (geometry.type === 'MultiPolygon') {
78766                             var isClipped = false;
78767                             var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
78768                             if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
78769                                 // feature = featureClip;
78770                                 isClipped = true;
78771                             }
78772                             if (!feature.geometry.coordinates.length) { continue; }   // not actually on this tile
78773                             if (!feature.geometry.coordinates[0].length) { continue; }   // not actually on this tile
78774                         }
78775
78776                         // Generate some unique IDs and add some metadata
78777                         var featurehash = utilHashcode(fastJsonStableStringify(feature));
78778                         var propertyhash = utilHashcode(fastJsonStableStringify(feature.properties || {}));
78779                         feature.__layerID__ = layerID.replace(/[^_a-zA-Z0-9\-]/g, '_');
78780                         feature.__featurehash__ = featurehash;
78781                         feature.__propertyhash__ = propertyhash;
78782                         features.push(feature);
78783
78784                         // Clipped Polygons at same zoom with identical properties can get merged
78785                         if (isClipped && geometry.type === 'MultiPolygon') {
78786                             var merged = mergeCache[propertyhash];
78787                             if (merged && merged.length) {
78788                                 var other = merged[0];
78789                                 var coords = martinez.union(
78790                                     feature.geometry.coordinates, other.geometry.coordinates
78791                                 );
78792
78793                                 if (!coords || !coords.length) {
78794                                     continue;  // something failed in martinez union
78795                                 }
78796
78797                                 merged.push(feature);
78798                                 for (var j = 0; j < merged.length; j++) {      // all these features get...
78799                                     merged[j].geometry.coordinates = coords;   // same coords
78800                                     merged[j].__featurehash__ = featurehash;   // same hash, so deduplication works
78801                                 }
78802                             } else {
78803                                 mergeCache[propertyhash] = [feature];
78804                             }
78805                         }
78806                     }
78807                 }
78808             });
78809
78810             return features;
78811         }
78812
78813
78814         function loadTile(source, tile) {
78815             if (source.loaded[tile.id] || source.inflight[tile.id]) { return; }
78816
78817             var url = source.template
78818                 .replace('{x}', tile.xyz[0])
78819                 .replace('{y}', tile.xyz[1])
78820                 // TMS-flipped y coordinate
78821                 .replace(/\{[t-]y\}/, Math.pow(2, tile.xyz[2]) - tile.xyz[1] - 1)
78822                 .replace(/\{z(oom)?\}/, tile.xyz[2])
78823                 .replace(/\{switch:([^}]+)\}/, function(s, r) {
78824                     var subdomains = r.split(',');
78825                     return subdomains[(tile.xyz[0] + tile.xyz[1]) % subdomains.length];
78826                 });
78827
78828
78829             var controller = new AbortController();
78830             source.inflight[tile.id] = controller;
78831
78832             fetch(url, { signal: controller.signal })
78833                 .then(function(response) {
78834                     if (!response.ok) {
78835                         throw new Error(response.status + ' ' + response.statusText);
78836                     }
78837                     source.loaded[tile.id] = [];
78838                     delete source.inflight[tile.id];
78839                     return response.arrayBuffer();
78840                 })
78841                 .then(function(data) {
78842                     if (!data) {
78843                         throw new Error('No Data');
78844                     }
78845
78846                     var z = tile.xyz[2];
78847                     if (!source.canMerge[z]) {
78848                         source.canMerge[z] = {};  // initialize mergeCache
78849                     }
78850
78851                     source.loaded[tile.id] = vtToGeoJSON(data, tile, source.canMerge[z]);
78852                     dispatch$7.call('loadedData');
78853                 })
78854                 .catch(function() {
78855                     source.loaded[tile.id] = [];
78856                     delete source.inflight[tile.id];
78857                 });
78858         }
78859
78860
78861         var serviceVectorTile = {
78862
78863             init: function() {
78864                 if (!_vtCache) {
78865                     this.reset();
78866                 }
78867
78868                 this.event = utilRebind(this, dispatch$7, 'on');
78869             },
78870
78871
78872             reset: function() {
78873                 for (var sourceID in _vtCache) {
78874                     var source = _vtCache[sourceID];
78875                     if (source && source.inflight) {
78876                         Object.values(source.inflight).forEach(abortRequest$6);
78877                     }
78878                 }
78879
78880                 _vtCache = {};
78881             },
78882
78883
78884             addSource: function(sourceID, template) {
78885                 _vtCache[sourceID] = { template: template, inflight: {}, loaded: {}, canMerge: {} };
78886                 return _vtCache[sourceID];
78887             },
78888
78889
78890             data: function(sourceID, projection) {
78891                 var source = _vtCache[sourceID];
78892                 if (!source) { return []; }
78893
78894                 var tiles = tiler$6.getTiles(projection);
78895                 var seen = {};
78896                 var results = [];
78897
78898                 for (var i = 0; i < tiles.length; i++) {
78899                     var features = source.loaded[tiles[i].id];
78900                     if (!features || !features.length) { continue; }
78901
78902                     for (var j = 0; j < features.length; j++) {
78903                         var feature = features[j];
78904                         var hash = feature.__featurehash__;
78905                         if (seen[hash]) { continue; }
78906                         seen[hash] = true;
78907
78908                         // return a shallow copy, because the hash may change
78909                         // later if this feature gets merged with another
78910                         results.push(Object.assign({}, feature));  // shallow copy
78911                     }
78912                 }
78913
78914                 return results;
78915             },
78916
78917
78918             loadTiles: function(sourceID, template, projection) {
78919                 var source = _vtCache[sourceID];
78920                 if (!source) {
78921                     source = this.addSource(sourceID, template);
78922                 }
78923
78924                 var tiles = tiler$6.getTiles(projection);
78925
78926                 // abort inflight requests that are no longer needed
78927                 Object.keys(source.inflight).forEach(function(k) {
78928                     var wanted = tiles.find(function(tile) { return k === tile.id; });
78929                     if (!wanted) {
78930                         abortRequest$6(source.inflight[k]);
78931                         delete source.inflight[k];
78932                     }
78933                 });
78934
78935                 tiles.forEach(function(tile) {
78936                     loadTile(source, tile);
78937                 });
78938             },
78939
78940
78941             cache: function() {
78942                 return _vtCache;
78943             }
78944
78945         };
78946
78947         var apibase$5 = 'https://www.wikidata.org/w/api.php?';
78948         var _wikidataCache = {};
78949
78950
78951         var serviceWikidata = {
78952
78953             init: function() {},
78954
78955             reset: function() {
78956                 _wikidataCache = {};
78957             },
78958
78959
78960             // Search for Wikidata items matching the query
78961             itemsForSearchQuery: function(query, callback) {
78962                 if (!query) {
78963                     if (callback) { callback('No query', {}); }
78964                     return;
78965                 }
78966
78967                 var url = apibase$5 + utilQsString({
78968                     action: 'wbsearchentities',
78969                     format: 'json',
78970                     formatversion: 2,
78971                     search: query,
78972                     type: 'item',
78973                     language: this.languagesToQuery()[0],
78974                     limit: 10,
78975                     origin: '*'
78976                 });
78977
78978                 d3_json(url)
78979                     .then(function(result) {
78980                         if (result && result.error) {
78981                             throw new Error(result.error);
78982                         }
78983                         if (callback) { callback(null, result.search || {}); }
78984                     })
78985                     .catch(function(err) {
78986                         if (callback) { callback(err.message, {}); }
78987                     });
78988             },
78989
78990
78991             // Given a Wikipedia language and article title,
78992             // return an array of corresponding Wikidata entities.
78993             itemsByTitle: function(lang, title, callback) {
78994                 if (!title) {
78995                     if (callback) { callback('No title', {}); }
78996                     return;
78997                 }
78998
78999                 lang = lang || 'en';
79000                 var url = apibase$5 + utilQsString({
79001                     action: 'wbgetentities',
79002                     format: 'json',
79003                     formatversion: 2,
79004                     sites: lang.replace(/-/g, '_') + 'wiki',
79005                     titles: title,
79006                     languages: 'en', // shrink response by filtering to one language
79007                     origin: '*'
79008                 });
79009
79010                 d3_json(url)
79011                     .then(function(result) {
79012                         if (result && result.error) {
79013                             throw new Error(result.error);
79014                         }
79015                         if (callback) { callback(null, result.entities || {}); }
79016                     })
79017                     .catch(function(err) {
79018                         if (callback) { callback(err.message, {}); }
79019                     });
79020             },
79021
79022
79023             languagesToQuery: function() {
79024                 return utilArrayUniq([
79025                     currentLocale.toLowerCase(),
79026                     currentLocale.split('-', 2)[0].toLowerCase(),
79027                     'en'
79028                 ]);
79029             },
79030
79031
79032             entityByQID: function(qid, callback) {
79033                 if (!qid) {
79034                     callback('No qid', {});
79035                     return;
79036                 }
79037                 if (_wikidataCache[qid]) {
79038                     if (callback) { callback(null, _wikidataCache[qid]); }
79039                     return;
79040                 }
79041
79042                 var langs = this.languagesToQuery();
79043                 var url = apibase$5 + utilQsString({
79044                     action: 'wbgetentities',
79045                     format: 'json',
79046                     formatversion: 2,
79047                     ids: qid,
79048                     props: 'labels|descriptions|claims|sitelinks',
79049                     sitefilter: langs.map(function(d) { return d + 'wiki'; }).join('|'),
79050                     languages: langs.join('|'),
79051                     languagefallback: 1,
79052                     origin: '*'
79053                 });
79054
79055                 d3_json(url)
79056                     .then(function(result) {
79057                         if (result && result.error) {
79058                             throw new Error(result.error);
79059                         }
79060                         if (callback) { callback(null, result.entities[qid] || {}); }
79061                     })
79062                     .catch(function(err) {
79063                         if (callback) { callback(err.message, {}); }
79064                     });
79065             },
79066
79067
79068             // Pass `params` object of the form:
79069             // {
79070             //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
79071             // }
79072             //
79073             // Get an result object used to display tag documentation
79074             // {
79075             //   title:        'string',
79076             //   description:  'string',
79077             //   editURL:      'string',
79078             //   imageURL:     'string',
79079             //   wiki:         { title: 'string', text: 'string', url: 'string' }
79080             // }
79081             //
79082             getDocs: function(params, callback) {
79083                 var langs = this.languagesToQuery();
79084                 this.entityByQID(params.qid, function(err, entity) {
79085                     if (err || !entity) {
79086                         callback(err || 'No entity');
79087                         return;
79088                     }
79089
79090                     var i;
79091                     var description;
79092                     if (entity.descriptions && Object.keys(entity.descriptions).length > 0) {
79093                         description = entity.descriptions[Object.keys(entity.descriptions)[0]].value;
79094                     }
79095
79096                     // prepare result
79097                     var result = {
79098                         title: entity.id,
79099                         description: description,
79100                         editURL: 'https://www.wikidata.org/wiki/' + entity.id
79101                     };
79102
79103                     // add image
79104                     if (entity.claims) {
79105                         var imageroot = 'https://commons.wikimedia.org/w/index.php';
79106                         var props = ['P154','P18'];  // logo image, image
79107                         var prop, image;
79108                         for (i = 0; i < props.length; i++) {
79109                             prop = entity.claims[props[i]];
79110                             if (prop && Object.keys(prop).length > 0) {
79111                                 image = prop[Object.keys(prop)[0]].mainsnak.datavalue.value;
79112                                 if (image) {
79113                                     result.imageURL = imageroot + '?' + utilQsString({
79114                                         title: 'Special:Redirect/file/' + image,
79115                                         width: 400
79116                                     });
79117                                     break;
79118                                 }
79119                             }
79120                         }
79121                     }
79122
79123                     if (entity.sitelinks) {
79124                         var englishLocale = (currentLocale.split('-', 2)[0].toLowerCase() === 'en');
79125
79126                         // must be one of these that we requested..
79127                         for (i = 0; i < langs.length; i++) {   // check each, in order of preference
79128                             var w = langs[i] + 'wiki';
79129                             if (entity.sitelinks[w]) {
79130                                 var title = entity.sitelinks[w].title;
79131                                 var tKey = 'inspector.wiki_reference';
79132                                 if (!englishLocale && langs[i] === 'en') {   // user's currentLocale isn't English but
79133                                     tKey = 'inspector.wiki_en_reference';    // we are sending them to enwiki anyway..
79134                                 }
79135
79136                                 result.wiki = {
79137                                     title: title,
79138                                     text: tKey,
79139                                     url: 'https://' + langs[i] + '.wikipedia.org/wiki/' + title.replace(/ /g, '_')
79140                                 };
79141                                 break;
79142                             }
79143                         }
79144                     }
79145
79146                     callback(null, result);
79147                 });
79148             }
79149
79150         };
79151
79152         var endpoint = 'https://en.wikipedia.org/w/api.php?';
79153
79154         var serviceWikipedia = {
79155
79156             init: function() {},
79157             reset: function() {},
79158
79159
79160             search: function(lang, query, callback) {
79161                 if (!query) {
79162                     if (callback) { callback('No Query', []); }
79163                     return;
79164                 }
79165
79166                 lang = lang || 'en';
79167                 var url = endpoint.replace('en', lang) +
79168                     utilQsString({
79169                         action: 'query',
79170                         list: 'search',
79171                         srlimit: '10',
79172                         srinfo: 'suggestion',
79173                         format: 'json',
79174                         origin: '*',
79175                         srsearch: query
79176                     });
79177
79178                 d3_json(url)
79179                     .then(function(result) {
79180                         if (result && result.error) {
79181                             throw new Error(result.error);
79182                         } else if (!result || !result.query || !result.query.search) {
79183                             throw new Error('No Results');
79184                         }
79185                         if (callback) {
79186                             var titles = result.query.search.map(function(d) { return d.title; });
79187                             callback(null, titles);
79188                         }
79189                     })
79190                     .catch(function(err) {
79191                         if (callback) { callback(err, []); }
79192                     });
79193             },
79194
79195
79196             suggestions: function(lang, query, callback) {
79197                 if (!query) {
79198                     if (callback) { callback('', []); }
79199                     return;
79200                 }
79201
79202                 lang = lang || 'en';
79203                 var url = endpoint.replace('en', lang) +
79204                     utilQsString({
79205                         action: 'opensearch',
79206                         namespace: 0,
79207                         suggest: '',
79208                         format: 'json',
79209                         origin: '*',
79210                         search: query
79211                     });
79212
79213                 d3_json(url)
79214                     .then(function(result) {
79215                         if (result && result.error) {
79216                             throw new Error(result.error);
79217                         } else if (!result || result.length < 2) {
79218                             throw new Error('No Results');
79219                         }
79220                         if (callback) { callback(null, result[1] || []); }
79221                     })
79222                     .catch(function(err) {
79223                         if (callback) { callback(err.message, []); }
79224                     });
79225             },
79226
79227
79228             translations: function(lang, title, callback) {
79229                 if (!title) {
79230                     if (callback) { callback('No Title'); }
79231                     return;
79232                 }
79233
79234                 var url = endpoint.replace('en', lang) +
79235                     utilQsString({
79236                         action: 'query',
79237                         prop: 'langlinks',
79238                         format: 'json',
79239                         origin: '*',
79240                         lllimit: 500,
79241                         titles: title
79242                     });
79243
79244                 d3_json(url)
79245                     .then(function(result) {
79246                         if (result && result.error) {
79247                             throw new Error(result.error);
79248                         } else if (!result || !result.query || !result.query.pages) {
79249                             throw new Error('No Results');
79250                         }
79251                         if (callback) {
79252                             var list = result.query.pages[Object.keys(result.query.pages)[0]];
79253                             var translations = {};
79254                             if (list && list.langlinks) {
79255                                 list.langlinks.forEach(function(d) { translations[d.lang] = d['*']; });
79256                             }
79257                             callback(null, translations);
79258                         }
79259                     })
79260                     .catch(function(err) {
79261                         if (callback) { callback(err.message); }
79262                     });
79263             }
79264
79265         };
79266
79267         var services$1 = {
79268             geocoder: serviceNominatim,
79269             keepRight: serviceKeepRight,
79270             improveOSM: serviceImproveOSM,
79271             mapillary: serviceMapillary,
79272             openstreetcam: serviceOpenstreetcam,
79273             osm: serviceOsm,
79274             osmWikibase: serviceOsmWikibase,
79275             maprules: serviceMapRules,
79276             streetside: serviceStreetside,
79277             taginfo: serviceTaginfo,
79278             vectorTile: serviceVectorTile,
79279             wikidata: serviceWikidata,
79280             wikipedia: serviceWikipedia
79281         };
79282
79283         function svgIcon(name, svgklass, useklass) {
79284             return function drawIcon(selection) {
79285                 selection.selectAll('svg.icon' + (svgklass ? '.' + svgklass.split(' ')[0] : ''))
79286                     .data([0])
79287                     .enter()
79288                     .append('svg')
79289                     .attr('class', 'icon ' + (svgklass || ''))
79290                     .append('use')
79291                     .attr('xlink:href', name)
79292                     .attr('class', useklass);
79293             };
79294         }
79295
79296         function uiNoteComments(context) {
79297             var _note;
79298
79299
79300             function noteComments(selection) {
79301                 if (_note.isNew()) { return; } // don't draw .comments-container
79302
79303                 var comments = selection.selectAll('.comments-container')
79304                     .data([0]);
79305
79306                 comments = comments.enter()
79307                     .append('div')
79308                     .attr('class', 'comments-container')
79309                     .merge(comments);
79310
79311                 var commentEnter = comments.selectAll('.comment')
79312                     .data(_note.comments)
79313                     .enter()
79314                     .append('div')
79315                     .attr('class', 'comment');
79316
79317                 commentEnter
79318                     .append('div')
79319                     .attr('class', function(d) { return 'comment-avatar user-' + d.uid; })
79320                     .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
79321
79322                 var mainEnter = commentEnter
79323                     .append('div')
79324                     .attr('class', 'comment-main');
79325
79326                 var metadataEnter = mainEnter
79327                     .append('div')
79328                     .attr('class', 'comment-metadata');
79329
79330                 metadataEnter
79331                     .append('div')
79332                     .attr('class', 'comment-author')
79333                     .each(function(d) {
79334                         var selection = d3_select(this);
79335                         var osm = services$1.osm;
79336                         if (osm && d.user) {
79337                             selection = selection
79338                                 .append('a')
79339                                 .attr('class', 'comment-author-link')
79340                                 .attr('href', osm.userURL(d.user))
79341                                 .attr('tabindex', -1)
79342                                 .attr('target', '_blank');
79343                         }
79344                         selection
79345                             .text(function(d) { return d.user || t('note.anonymous'); });
79346                     });
79347
79348                 metadataEnter
79349                     .append('div')
79350                     .attr('class', 'comment-date')
79351                     .text(function(d) {
79352                         return t('note.status.' + d.action, { when: localeDateString(d.date) });
79353                     });
79354
79355                 mainEnter
79356                     .append('div')
79357                     .attr('class', 'comment-text')
79358                     .html(function(d) { return d.html; });
79359
79360                 comments
79361                     .call(replaceAvatars);
79362             }
79363
79364
79365             function replaceAvatars(selection) {
79366                 var showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
79367                 var osm = services$1.osm;
79368                 if (showThirdPartyIcons !== 'true' || !osm) { return; }
79369
79370                 var uids = {};  // gather uids in the comment thread
79371                 _note.comments.forEach(function(d) {
79372                     if (d.uid) { uids[d.uid] = true; }
79373                 });
79374
79375                 Object.keys(uids).forEach(function(uid) {
79376                     osm.loadUser(uid, function(err, user) {
79377                         if (!user || !user.image_url) { return; }
79378
79379                         selection.selectAll('.comment-avatar.user-' + uid)
79380                             .html('')
79381                             .append('img')
79382                             .attr('class', 'icon comment-avatar-icon')
79383                             .attr('src', user.image_url)
79384                             .attr('alt', user.display_name);
79385                     });
79386                 });
79387             }
79388
79389
79390             function localeDateString(s) {
79391                 if (!s) { return null; }
79392                 var detected = utilDetect();
79393                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
79394                 s = s.replace(/-/g, '/'); // fix browser-specific Date() issues
79395                 var d = new Date(s);
79396                 if (isNaN(d.getTime())) { return null; }
79397                 return d.toLocaleDateString(detected.locale, options);
79398             }
79399
79400
79401             noteComments.note = function(val) {
79402                 if (!arguments.length) { return _note; }
79403                 _note = val;
79404                 return noteComments;
79405             };
79406
79407
79408             return noteComments;
79409         }
79410
79411         function uiNoteHeader() {
79412             var _note;
79413
79414
79415             function noteHeader(selection) {
79416                 var header = selection.selectAll('.note-header')
79417                     .data(
79418                         (_note ? [_note] : []),
79419                         function(d) { return d.status + d.id; }
79420                     );
79421
79422                 header.exit()
79423                     .remove();
79424
79425                 var headerEnter = header.enter()
79426                     .append('div')
79427                     .attr('class', 'note-header');
79428
79429                 var iconEnter = headerEnter
79430                     .append('div')
79431                     .attr('class', function(d) { return 'note-header-icon ' + d.status; })
79432                     .classed('new', function(d) { return d.id < 0; });
79433
79434                 iconEnter
79435                     .append('div')
79436                     .attr('class', 'preset-icon-28')
79437                     .call(svgIcon('#iD-icon-note', 'note-fill'));
79438
79439                 iconEnter.each(function(d) {
79440                     var statusIcon = '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
79441                     iconEnter
79442                         .append('div')
79443                         .attr('class', 'note-icon-annotation')
79444                         .call(svgIcon(statusIcon, 'icon-annotation'));
79445                 });
79446
79447                 headerEnter
79448                     .append('div')
79449                     .attr('class', 'note-header-label')
79450                     .text(function(d) {
79451                         if (_note.isNew()) { return t('note.new'); }
79452                         return t('note.note') + ' ' + d.id + ' ' +
79453                             (d.status === 'closed' ? t('note.closed') : '');
79454                     });
79455             }
79456
79457
79458             noteHeader.note = function(val) {
79459                 if (!arguments.length) { return _note; }
79460                 _note = val;
79461                 return noteHeader;
79462             };
79463
79464
79465             return noteHeader;
79466         }
79467
79468         function uiNoteReport() {
79469             var _note;
79470
79471             function noteReport(selection) {
79472                 var url;
79473                 if (services$1.osm && (_note instanceof osmNote) && (!_note.isNew())) {
79474                     url = services$1.osm.noteReportURL(_note);
79475                 }
79476
79477                 var link = selection.selectAll('.note-report')
79478                     .data(url ? [url] : []);
79479
79480                 // exit
79481                 link.exit()
79482                     .remove();
79483
79484                 // enter
79485                 var linkEnter = link.enter()
79486                     .append('a')
79487                     .attr('class', 'note-report')
79488                     .attr('target', '_blank')
79489                     .attr('href', function(d) { return d; })
79490                     .call(svgIcon('#iD-icon-out-link', 'inline'));
79491
79492                 linkEnter
79493                     .append('span')
79494                     .text(t('note.report'));
79495             }
79496
79497
79498             noteReport.note = function(val) {
79499                 if (!arguments.length) { return _note; }
79500                 _note = val;
79501                 return noteReport;
79502             };
79503
79504             return noteReport;
79505         }
79506
79507         var _popoverID = 0;
79508
79509         function popover(klass) {
79510             var _id = _popoverID++;
79511             var _anchorSelection = d3_select(null);
79512             var popover = function(selection) {
79513                 _anchorSelection = selection;
79514                 selection.each(setup);
79515             };
79516             var _animation = utilFunctor(false);
79517             var _placement = utilFunctor('top'); // top, bottom, left, right
79518             var _alignment = utilFunctor('center');  // leading, center, trailing
79519             var _scrollContainer = utilFunctor(d3_select(null));
79520             var _content;
79521             var _displayType = utilFunctor('');
79522             var _hasArrow = utilFunctor(true);
79523
79524             popover.displayType = function(val) {
79525                 if (arguments.length) {
79526                     _displayType = utilFunctor(val);
79527                     return popover;
79528                 } else {
79529                     return _displayType;
79530                 }
79531             };
79532
79533             popover.hasArrow = function(val) {
79534                 if (arguments.length) {
79535                     _hasArrow = utilFunctor(val);
79536                     return popover;
79537                 } else {
79538                     return _hasArrow;
79539                 }
79540             };
79541
79542             popover.placement = function(val) {
79543                 if (arguments.length) {
79544                     _placement = utilFunctor(val);
79545                     return popover;
79546                 } else {
79547                     return _placement;
79548                 }
79549             };
79550
79551             popover.alignment = function(val) {
79552                 if (arguments.length) {
79553                     _alignment = utilFunctor(val);
79554                     return popover;
79555                 } else {
79556                     return _alignment;
79557                 }
79558             };
79559
79560             popover.scrollContainer = function(val) {
79561                 if (arguments.length) {
79562                     _scrollContainer = utilFunctor(val);
79563                     return popover;
79564                 } else {
79565                     return _scrollContainer;
79566                 }
79567             };
79568
79569             popover.content = function(val) {
79570                 if (arguments.length) {
79571                     _content = val;
79572                     return popover;
79573                 } else {
79574                     return _content;
79575                 }
79576             };
79577
79578             popover.isShown = function() {
79579                 var popoverSelection = d3_select('.popover-' + _id);
79580                 return !popoverSelection.empty() && popoverSelection.classed('in');
79581             };
79582
79583             popover.show = function() {
79584                 _anchorSelection.each(show);
79585             };
79586
79587             popover.updateContent = function() {
79588                 _anchorSelection.each(updateContent);
79589             };
79590
79591             popover.hide = function() {
79592                 _anchorSelection.each(hide);
79593             };
79594
79595             popover.toggle = function() {
79596                 _anchorSelection.each(toggle);
79597             };
79598
79599             popover.destroy = function(selection, selector) {
79600                 // by default, just destroy the current popover
79601                 selector = selector || '.popover-' + _id;
79602
79603                 selection
79604                     .on('mouseenter.popover', null)
79605                     .on('mouseleave.popover', null)
79606                     .on('mouseup.popover', null)
79607                     .on('mousedown.popover', null)
79608                     .on('click.popover', null)
79609                     .attr('title', function() {
79610                         return this.getAttribute('data-original-title') || this.getAttribute('title');
79611                     })
79612                     .attr('data-original-title', null)
79613                     .selectAll(selector)
79614                     .remove();
79615             };
79616
79617
79618             popover.destroyAny = function(selection) {
79619                 selection.call(popover.destroy, '.popover');
79620             };
79621
79622             var isTouchEvent = false;
79623
79624             function setup() {
79625                 var anchor = d3_select(this);
79626                 var animate = _animation.apply(this, arguments);
79627                 var popoverSelection = anchor.selectAll('.popover-' + _id)
79628                     .data([0]);
79629
79630
79631                 var enter = popoverSelection.enter()
79632                     .append('div')
79633                     .attr('class', 'popover popover-' + _id + ' ' + (klass ? klass : ''))
79634                     .classed('arrowed', _hasArrow.apply(this, arguments));
79635
79636                 enter
79637                     .append('div')
79638                     .attr('class', 'popover-arrow');
79639
79640                 enter
79641                     .append('div')
79642                     .attr('class', 'popover-inner');
79643
79644                 popoverSelection = enter
79645                     .merge(popoverSelection);
79646
79647                 if (animate) {
79648                     popoverSelection.classed('fade', true);
79649                 }
79650
79651                 var placement = _placement.apply(this, arguments);
79652                 popoverSelection.classed(placement, true);
79653
79654                 var display = _displayType.apply(this, arguments);
79655
79656                 if (display === 'hover') {
79657                     anchor.on('touchstart.popover', function() {
79658                         // hack to avoid showing popovers upon touch input
79659                         isTouchEvent = true;
79660                     });
79661                     anchor.on('mouseenter.popover', show);
79662                     anchor.on('mouseleave.popover', hide);
79663
79664                 } else if (display === 'clickFocus') {
79665                     anchor
79666                         .on('mousedown.popover', function() {
79667                             event.preventDefault();
79668                             event.stopPropagation();
79669                         })
79670                         .on('mouseup.popover', function() {
79671                             event.preventDefault();
79672                             event.stopPropagation();
79673                         })
79674                         .on('click.popover', toggle);
79675
79676                     popoverSelection
79677                         .attr('tabindex', 0)
79678                         .on('blur.popover', function() {
79679                             anchor.each(function() {
79680                                 hide.apply(this, arguments);
79681                             });
79682                         });
79683                 }
79684             }
79685
79686
79687             function show() {
79688                 if (isTouchEvent) {
79689                     isTouchEvent = false;
79690                     return;
79691                 }
79692                 var anchor = d3_select(this);
79693                 var popoverSelection = anchor.selectAll('.popover-' + _id);
79694
79695                 if (popoverSelection.empty()) {   // popover was removed somehow, put it back
79696                     anchor.call(popover.destroy);
79697                     anchor.each(setup);
79698                     popoverSelection = anchor.selectAll('.popover-' + _id);
79699                 }
79700
79701                 popoverSelection.classed('in', true);
79702
79703                 if (_displayType.apply(this, arguments) === 'clickFocus') {
79704                     anchor.classed('active', true);
79705                     popoverSelection.node().focus();
79706                 }
79707
79708                 anchor.each(updateContent);
79709             }
79710
79711             function updateContent() {
79712                 var anchor = d3_select(this);
79713                 var popoverSelection = anchor.selectAll('.popover-' + _id);
79714
79715                 if (_content) { popoverSelection.selectAll('.popover-inner').call(_content.apply(this, arguments)); }
79716
79717                 updatePosition.apply(this, arguments);
79718                 // hack: update twice to fix instances where the absolute offset is
79719                 // set before the dynamic popover size is calculated by the browser
79720                 updatePosition.apply(this, arguments);
79721             }
79722
79723
79724             function updatePosition() {
79725
79726                 var anchor = d3_select(this);
79727                 var popoverSelection = anchor.selectAll('.popover-' + _id);
79728
79729                 var scrollContainer = _scrollContainer && _scrollContainer.apply(this, arguments);
79730                 var scrollNode = scrollContainer && !scrollContainer.empty() && scrollContainer.node();
79731                 var scrollLeft = scrollNode ? scrollNode.scrollLeft : 0;
79732                 var scrollTop = scrollNode ? scrollNode.scrollTop : 0;
79733
79734                 var placement = _placement.apply(this, arguments);
79735                 var alignment = _alignment.apply(this, arguments);
79736                 var alignFactor = 0.5;
79737                 if (alignment === 'leading') {
79738                     alignFactor = 0;
79739                 } else if (alignment === 'trailing') {
79740                     alignFactor = 1;
79741                 }
79742                 var anchorFrame = getFrame(anchor.node());
79743                 var popoverFrame = getFrame(popoverSelection.node());
79744                 var position;
79745
79746                 switch (placement) {
79747                     case 'top':
79748                     position = {
79749                         x: anchorFrame.x + (anchorFrame.w - popoverFrame.w) * alignFactor,
79750                         y: anchorFrame.y - popoverFrame.h
79751                     };
79752                     break;
79753                     case 'bottom':
79754                     position = {
79755                         x: anchorFrame.x + (anchorFrame.w - popoverFrame.w) * alignFactor,
79756                         y: anchorFrame.y + anchorFrame.h
79757                     };
79758                     break;
79759                     case 'left':
79760                     position = {
79761                         x: anchorFrame.x - popoverFrame.w,
79762                         y: anchorFrame.y + (anchorFrame.h - popoverFrame.h) * alignFactor
79763                     };
79764                     break;
79765                     case 'right':
79766                     position = {
79767                         x: anchorFrame.x + anchorFrame.w,
79768                         y: anchorFrame.y + (anchorFrame.h - popoverFrame.h) * alignFactor
79769                     };
79770                     break;
79771                 }
79772
79773                 if (position) {
79774
79775                     if (scrollNode && (placement === 'top' || placement === 'bottom')) {
79776
79777                         var initialPosX = position.x;
79778
79779                         if (position.x + popoverFrame.w > scrollNode.offsetWidth - 10) {
79780                             position.x = scrollNode.offsetWidth - 10 - popoverFrame.w;
79781                         } else if (position.x < 10) {
79782                             position.x = 10;
79783                         }
79784
79785                         var arrow = popoverSelection.selectAll('.popover-arrow');
79786                         // keep the arrow centered on the button, or as close as possible
79787                         var arrowPosX = Math.min(Math.max(popoverFrame.w / 2 - (position.x - initialPosX), 10), popoverFrame.w - 10);
79788                         arrow.style('left', ~~arrowPosX + 'px');
79789                     }
79790
79791                     popoverSelection.style('left', ~~position.x + 'px').style('top', ~~position.y + 'px');
79792                 } else {
79793                     popoverSelection.style('left', null).style('top', null);
79794                 }
79795
79796                 function getFrame(node) {
79797                     var positionStyle = d3_select(node).style('position');
79798                     if (positionStyle === 'absolute' || positionStyle === 'static') {
79799                         return {
79800                             x: node.offsetLeft - scrollLeft,
79801                             y: node.offsetTop - scrollTop,
79802                             w: node.offsetWidth,
79803                             h: node.offsetHeight
79804                         };
79805                     } else {
79806                         return {
79807                             x: 0,
79808                             y: 0,
79809                             w: node.offsetWidth,
79810                             h: node.offsetHeight
79811                         };
79812                     }
79813                 }
79814             }
79815
79816
79817             function hide() {
79818                 var anchor = d3_select(this);
79819                 if (_displayType.apply(this, arguments) === 'clickFocus') {
79820                     anchor.classed('active', false);
79821                 }
79822                 anchor.selectAll('.popover-' + _id).classed('in', false);
79823             }
79824
79825
79826             function toggle() {
79827                 if (d3_select(this).select('.popover-' + _id).classed('in')) {
79828                     hide.apply(this, arguments);
79829                 } else {
79830                     show.apply(this, arguments);
79831                 }
79832             }
79833
79834
79835             return popover;
79836         }
79837
79838         function tooltip(klass) {
79839
79840             var tooltip = popover((klass || '') + ' tooltip')
79841                 .displayType('hover');
79842
79843             var _title = function() {
79844                 var title = this.getAttribute('data-original-title');
79845                 if (title) {
79846                     return title;
79847                 } else {
79848                     title = this.getAttribute('title');
79849                     this.removeAttribute('title');
79850                     this.setAttribute('data-original-title', title);
79851                 }
79852                 return title;
79853             };
79854             var _html = utilFunctor(false);
79855
79856
79857             tooltip.title = function(val) {
79858                 if (arguments.length) {
79859                     _title = utilFunctor(val);
79860                     return tooltip;
79861                 } else {
79862                     return _title;
79863                 }
79864             };
79865
79866
79867             tooltip.html = function(val) {
79868                 if (arguments.length) {
79869                     _html = utilFunctor(val);
79870                     return tooltip;
79871                 } else {
79872                     return _html;
79873                 }
79874             };
79875
79876             tooltip.content(function() {
79877                 var content = _title.apply(this, arguments);
79878                 var markup = _html.apply(this, arguments);
79879
79880                 return function(selection) {
79881                     selection[markup ? 'html' : 'text'](content);
79882                 };
79883             });
79884
79885             return tooltip;
79886         }
79887
79888         function uiQuickLinks() {
79889             var _choices = [];
79890
79891
79892             function quickLinks(selection) {
79893                 var container = selection.selectAll('.quick-links')
79894                     .data([0]);
79895
79896                 container = container.enter()
79897                     .append('div')
79898                     .attr('class', 'quick-links')
79899                     .merge(container);
79900
79901                 var items = container.selectAll('.quick-link')
79902                     .data(_choices, function(d) { return d.id; });
79903
79904                 items.exit()
79905                     .remove();
79906
79907                 items.enter()
79908                     .append('a')
79909                     .attr('class', function(d) { return 'quick-link quick-link-' + d.id; })
79910                     .attr('href', '#')
79911                     .text(function(d) { return t(d.label); })
79912                     .each(function(d) {
79913                         if (typeof d.tooltip !== 'function') { return; }
79914                         d3_select(this)
79915                             .call(tooltip().html(true).title(d.tooltip).placement('bottom'));
79916                     })
79917                     .on('click', function(d) {
79918                         if (typeof d.click !== 'function') { return; }
79919                         event.preventDefault();
79920                         d.click(d);
79921                     });
79922             }
79923
79924
79925             //  val should be an array of choices like:
79926             //    [{
79927             //       id: 'link-id',
79928             //       label: 'translation.key',
79929             //       tooltip: function(d),
79930             //       click: function(d)
79931             //    }, ..]
79932             quickLinks.choices = function(val) {
79933                 if (!arguments.length) { return _choices; }
79934                 _choices = val;
79935                 return quickLinks;
79936             };
79937
79938
79939             return quickLinks;
79940         }
79941
79942         function uiTooltipHtml(text, keys, heading) {
79943             var s = '';
79944
79945             if (heading) {
79946                 s += '<div class="tooltip-heading"><span>' + heading + '</span></div>';
79947             }
79948             if (text) {
79949                 s += '<div class="tooltip-text"><span>' + text + '</span></div>';
79950             }
79951             if (keys) {
79952                 if (!Array.isArray(keys)) { keys = [keys]; }
79953                 s += '<div class="keyhint-wrap"><span>' + t('tooltip_keyhint') + '</span>';
79954                 keys.forEach(function(key) {
79955                     s += '<kbd class="shortcut">' + key + '</kbd>';
79956                 });
79957                 s += '</div>';
79958             }
79959
79960             return s;
79961         }
79962
79963         function uiViewOnOSM(context) {
79964             var _what;   // an osmEntity or osmNote
79965
79966
79967             function viewOnOSM(selection) {
79968                 var url;
79969                 if (_what instanceof osmEntity) {
79970                     url = context.connection().entityURL(_what);
79971                 } else if (_what instanceof osmNote) {
79972                     url = context.connection().noteURL(_what);
79973                 }
79974
79975                 var data = ((!_what || _what.isNew()) ? [] : [_what]);
79976                 var link = selection.selectAll('.view-on-osm')
79977                     .data(data, function(d) { return d.id; });
79978
79979                 // exit
79980                 link.exit()
79981                     .remove();
79982
79983                 // enter
79984                 var linkEnter = link.enter()
79985                     .append('a')
79986                     .attr('class', 'view-on-osm')
79987                     .attr('target', '_blank')
79988                     .attr('href', url)
79989                     .call(svgIcon('#iD-icon-out-link', 'inline'));
79990
79991                 linkEnter
79992                     .append('span')
79993                     .text(t('inspector.view_on_osm'));
79994             }
79995
79996
79997             viewOnOSM.what = function(_) {
79998                 if (!arguments.length) { return _what; }
79999                 _what = _;
80000                 return viewOnOSM;
80001             };
80002
80003             return viewOnOSM;
80004         }
80005
80006         function uiNoteEditor(context) {
80007             var dispatch$1 = dispatch('change');
80008             var quickLinks = uiQuickLinks();
80009             var noteComments = uiNoteComments(context);
80010             var noteHeader = uiNoteHeader();
80011
80012             // var formFields = uiFormFields(context);
80013
80014             var _note;
80015             // var _fieldsArr;
80016
80017
80018             function noteEditor(selection) {
80019                 // quick links
80020                 var choices = [{
80021                     id: 'zoom_to',
80022                     label: 'inspector.zoom_to.title',
80023                     tooltip: function() {
80024                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_note'), t('inspector.zoom_to.key'));
80025                     },
80026                     click: function zoomTo() {
80027                         context.mode().zoomToSelected();
80028                     }
80029                 }];
80030
80031
80032                 var header = selection.selectAll('.header')
80033                     .data([0]);
80034
80035                 var headerEnter = header.enter()
80036                     .append('div')
80037                     .attr('class', 'header fillL');
80038
80039                 headerEnter
80040                     .append('button')
80041                     .attr('class', 'fr note-editor-close')
80042                     .on('click', function() {
80043                         context.enter(modeBrowse(context));
80044                     })
80045                     .call(svgIcon('#iD-icon-close'));
80046
80047                 headerEnter
80048                     .append('h3')
80049                     .text(t('note.title'));
80050
80051
80052                 var body = selection.selectAll('.body')
80053                     .data([0]);
80054
80055                 body = body.enter()
80056                     .append('div')
80057                     .attr('class', 'body')
80058                     .merge(body);
80059
80060                 var editor = body.selectAll('.note-editor')
80061                     .data([0]);
80062
80063                 editor.enter()
80064                     .append('div')
80065                     .attr('class', 'modal-section note-editor')
80066                     .merge(editor)
80067                     .call(noteHeader.note(_note))
80068                     .call(quickLinks.choices(choices))
80069                     .call(noteComments.note(_note))
80070                     .call(noteSaveSection);
80071
80072
80073                 var footer = selection.selectAll('.footer')
80074                     .data([0]);
80075
80076                 footer.enter()
80077                     .append('div')
80078                     .attr('class', 'footer')
80079                     .merge(footer)
80080                     .call(uiViewOnOSM(context).what(_note))
80081                     .call(uiNoteReport().note(_note));
80082
80083
80084                 // rerender the note editor on any auth change
80085                 var osm = services$1.osm;
80086                 if (osm) {
80087                     osm.on('change.note-save', function() {
80088                         selection.call(noteEditor);
80089                     });
80090                 }
80091             }
80092
80093
80094             function noteSaveSection(selection) {
80095                 var isSelected = (_note && _note.id === context.selectedNoteID());
80096                 var noteSave = selection.selectAll('.note-save')
80097                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
80098
80099                 // exit
80100                 noteSave.exit()
80101                     .remove();
80102
80103                 // enter
80104                 var noteSaveEnter = noteSave.enter()
80105                     .append('div')
80106                     .attr('class', 'note-save save-section cf');
80107
80108                 // // if new note, show categories to pick from
80109                 // if (_note.isNew()) {
80110                 //     var presets = context.presets();
80111
80112                 //     // NOTE: this key isn't a age and therefore there is no documentation (yet)
80113                 //     _fieldsArr = [
80114                 //         uiField(context, presets.field('category'), null, { show: true, revert: false }),
80115                 //     ];
80116
80117                 //     _fieldsArr.forEach(function(field) {
80118                 //         field
80119                 //             .on('change', changeCategory);
80120                 //     });
80121
80122                 //     noteSaveEnter
80123                 //         .append('div')
80124                 //         .attr('class', 'note-category')
80125                 //         .call(formFields.fieldsArr(_fieldsArr));
80126                 // }
80127
80128                 // function changeCategory() {
80129                 //     // NOTE: perhaps there is a better way to get value
80130                 //     var val = d3_select('input[name=\'category\']:checked').property('__data__') || undefined;
80131
80132                 //     // store the unsaved category with the note itself
80133                 //     _note = _note.update({ newCategory: val });
80134                 //     var osm = services.osm;
80135                 //     if (osm) {
80136                 //         osm.replaceNote(_note);  // update note cache
80137                 //     }
80138                 //     noteSave
80139                 //         .call(noteSaveButtons);
80140                 // }
80141
80142                 noteSaveEnter
80143                     .append('h4')
80144                     .attr('class', '.note-save-header')
80145                     .text(function() {
80146                         return _note.isNew() ? t('note.newDescription') : t('note.newComment');
80147                     });
80148
80149                 noteSaveEnter
80150                     .append('textarea')
80151                     .attr('class', 'new-comment-input')
80152                     .attr('placeholder', t('note.inputPlaceholder'))
80153                     .attr('maxlength', 1000)
80154                     .property('value', function(d) { return d.newComment; })
80155                     .call(utilNoAuto)
80156                     .on('keydown.note-input', keydown)
80157                     .on('input.note-input', changeInput)
80158                     .on('blur.note-input', changeInput);
80159
80160                 // update
80161                 noteSave = noteSaveEnter
80162                     .merge(noteSave)
80163                     .call(userDetails)
80164                     .call(noteSaveButtons);
80165
80166
80167                 // fast submit if user presses cmd+enter
80168                 function keydown() {
80169                     if (!(event.keyCode === 13 && event.metaKey)) { return; }
80170
80171                     var osm = services$1.osm;
80172                     if (!osm) { return; }
80173
80174                     var hasAuth = osm.authenticated();
80175                     if (!hasAuth) { return; }
80176
80177                     if (!_note.newComment) { return; }
80178
80179                     event.preventDefault();
80180
80181                     d3_select(this)
80182                         .on('keydown.note-input', null);
80183
80184                     // focus on button and submit
80185                     window.setTimeout(function() {
80186                         if (_note.isNew()) {
80187                             noteSave.selectAll('.save-button').node().focus();
80188                             clickSave(_note);
80189                         } else  {
80190                             noteSave.selectAll('.comment-button').node().focus();
80191                             clickComment(_note);
80192                         }
80193                     }, 10);
80194                 }
80195
80196
80197                 function changeInput() {
80198                     var input = d3_select(this);
80199                     var val = input.property('value').trim() || undefined;
80200
80201                     // store the unsaved comment with the note itself
80202                     _note = _note.update({ newComment: val });
80203
80204                     var osm = services$1.osm;
80205                     if (osm) {
80206                         osm.replaceNote(_note);  // update note cache
80207                     }
80208
80209                     noteSave
80210                         .call(noteSaveButtons);
80211                 }
80212             }
80213
80214
80215             function userDetails(selection) {
80216                 var detailSection = selection.selectAll('.detail-section')
80217                     .data([0]);
80218
80219                 detailSection = detailSection.enter()
80220                     .append('div')
80221                     .attr('class', 'detail-section')
80222                     .merge(detailSection);
80223
80224                 var osm = services$1.osm;
80225                 if (!osm) { return; }
80226
80227                 // Add warning if user is not logged in
80228                 var hasAuth = osm.authenticated();
80229                 var authWarning = detailSection.selectAll('.auth-warning')
80230                     .data(hasAuth ? [] : [0]);
80231
80232                 authWarning.exit()
80233                     .transition()
80234                     .duration(200)
80235                     .style('opacity', 0)
80236                     .remove();
80237
80238                 var authEnter = authWarning.enter()
80239                     .insert('div', '.tag-reference-body')
80240                     .attr('class', 'field-warning auth-warning')
80241                     .style('opacity', 0);
80242
80243                 authEnter
80244                     .call(svgIcon('#iD-icon-alert', 'inline'));
80245
80246                 authEnter
80247                     .append('span')
80248                     .text(t('note.login'));
80249
80250                 authEnter
80251                     .append('a')
80252                     .attr('target', '_blank')
80253                     .call(svgIcon('#iD-icon-out-link', 'inline'))
80254                     .append('span')
80255                     .text(t('login'))
80256                     .on('click.note-login', function() {
80257                         event.preventDefault();
80258                         osm.authenticate();
80259                     });
80260
80261                 authEnter
80262                     .transition()
80263                     .duration(200)
80264                     .style('opacity', 1);
80265
80266
80267                 var prose = detailSection.selectAll('.note-save-prose')
80268                     .data(hasAuth ? [0] : []);
80269
80270                 prose.exit()
80271                     .remove();
80272
80273                 prose = prose.enter()
80274                     .append('p')
80275                     .attr('class', 'note-save-prose')
80276                     .text(t('note.upload_explanation'))
80277                     .merge(prose);
80278
80279                 osm.userDetails(function(err, user) {
80280                     if (err) { return; }
80281
80282                     var userLink = d3_select(document.createElement('div'));
80283
80284                     if (user.image_url) {
80285                         userLink
80286                             .append('img')
80287                             .attr('src', user.image_url)
80288                             .attr('class', 'icon pre-text user-icon');
80289                     }
80290
80291                     userLink
80292                         .append('a')
80293                         .attr('class', 'user-info')
80294                         .text(user.display_name)
80295                         .attr('href', osm.userURL(user.display_name))
80296                         .attr('tabindex', -1)
80297                         .attr('target', '_blank');
80298
80299                     prose
80300                         .html(t('note.upload_explanation_with_user', { user: userLink.html() }));
80301                 });
80302             }
80303
80304
80305             function noteSaveButtons(selection) {
80306                 var osm = services$1.osm;
80307                 var hasAuth = osm && osm.authenticated();
80308
80309                 var isSelected = (_note && _note.id === context.selectedNoteID());
80310                 var buttonSection = selection.selectAll('.buttons')
80311                     .data((isSelected ? [_note] : []), function(d) { return d.status + d.id; });
80312
80313                 // exit
80314                 buttonSection.exit()
80315                     .remove();
80316
80317                 // enter
80318                 var buttonEnter = buttonSection.enter()
80319                     .append('div')
80320                     .attr('class', 'buttons');
80321
80322                 if (_note.isNew()) {
80323                     buttonEnter
80324                         .append('button')
80325                         .attr('class', 'button cancel-button secondary-action')
80326                         .text(t('confirm.cancel'));
80327
80328                     buttonEnter
80329                         .append('button')
80330                         .attr('class', 'button save-button action')
80331                         .text(t('note.save'));
80332
80333                 } else {
80334                     buttonEnter
80335                         .append('button')
80336                         .attr('class', 'button status-button action');
80337
80338                     buttonEnter
80339                         .append('button')
80340                         .attr('class', 'button comment-button action')
80341                         .text(t('note.comment'));
80342                 }
80343
80344
80345                 // update
80346                 buttonSection = buttonSection
80347                     .merge(buttonEnter);
80348
80349                 buttonSection.select('.cancel-button')   // select and propagate data
80350                     .on('click.cancel', clickCancel);
80351
80352                 buttonSection.select('.save-button')     // select and propagate data
80353                     .attr('disabled', isSaveDisabled)
80354                     .on('click.save', clickSave);
80355
80356                 buttonSection.select('.status-button')   // select and propagate data
80357                     .attr('disabled', (hasAuth ? null : true))
80358                     .text(function(d) {
80359                         var action = (d.status === 'open' ? 'close' : 'open');
80360                         var andComment = (d.newComment ? '_comment' : '');
80361                         return t('note.' + action + andComment);
80362                     })
80363                     .on('click.status', clickStatus);
80364
80365                 buttonSection.select('.comment-button')   // select and propagate data
80366                     .attr('disabled', isSaveDisabled)
80367                     .on('click.comment', clickComment);
80368
80369
80370                 function isSaveDisabled(d) {
80371                     return (hasAuth && d.status === 'open' && d.newComment) ? null : true;
80372                 }
80373             }
80374
80375
80376
80377             function clickCancel(d) {
80378                 this.blur();    // avoid keeping focus on the button - #4641
80379                 var osm = services$1.osm;
80380                 if (osm) {
80381                     osm.removeNote(d);
80382                 }
80383                 context.enter(modeBrowse(context));
80384                 dispatch$1.call('change');
80385             }
80386
80387
80388             function clickSave(d) {
80389                 this.blur();    // avoid keeping focus on the button - #4641
80390                 var osm = services$1.osm;
80391                 if (osm) {
80392                     osm.postNoteCreate(d, function(err, note) {
80393                         dispatch$1.call('change', note);
80394                     });
80395                 }
80396             }
80397
80398
80399             function clickStatus(d) {
80400                 this.blur();    // avoid keeping focus on the button - #4641
80401                 var osm = services$1.osm;
80402                 if (osm) {
80403                     var setStatus = (d.status === 'open' ? 'closed' : 'open');
80404                     osm.postNoteUpdate(d, setStatus, function(err, note) {
80405                         dispatch$1.call('change', note);
80406                     });
80407                 }
80408             }
80409
80410             function clickComment(d) {
80411                 this.blur();    // avoid keeping focus on the button - #4641
80412                 var osm = services$1.osm;
80413                 if (osm) {
80414                     osm.postNoteUpdate(d, d.status, function(err, note) {
80415                         dispatch$1.call('change', note);
80416                     });
80417                 }
80418             }
80419
80420
80421             noteEditor.note = function(val) {
80422                 if (!arguments.length) { return _note; }
80423                 _note = val;
80424                 return noteEditor;
80425             };
80426
80427
80428             return utilRebind(noteEditor, dispatch$1, 'on');
80429         }
80430
80431         function modeSelectNote(context, selectedNoteID) {
80432             var mode = {
80433                 id: 'select-note',
80434                 button: 'browse'
80435             };
80436
80437             var osm = services$1.osm;
80438             var keybinding = utilKeybinding('select-note');
80439             var noteEditor = uiNoteEditor(context)
80440                 .on('change', function() {
80441                     context.map().pan([0,0]);  // trigger a redraw
80442                     var note = checkSelectedID();
80443                     if (!note) { return; }
80444                     context.ui().sidebar
80445                         .show(noteEditor.note(note));
80446                 });
80447
80448             var behaviors = [
80449                 behaviorBreathe(),
80450                 behaviorHover(context),
80451                 behaviorSelect(context),
80452                 behaviorLasso(context),
80453                 modeDragNode(context).behavior,
80454                 modeDragNote(context).behavior
80455             ];
80456
80457             var newFeature = false;
80458
80459
80460             function checkSelectedID() {
80461                 if (!osm) { return; }
80462                 var note = osm.getNote(selectedNoteID);
80463                 if (!note) {
80464                     context.enter(modeBrowse(context));
80465                 }
80466                 return note;
80467             }
80468
80469
80470             // class the note as selected, or return to browse mode if the note is gone
80471             function selectNote(drawn) {
80472                 if (!checkSelectedID()) { return; }
80473
80474                 var selection = context.surface().selectAll('.layer-notes .note-' + selectedNoteID);
80475
80476                 if (selection.empty()) {
80477                     // Return to browse mode if selected DOM elements have
80478                     // disappeared because the user moved them out of view..
80479                     var source = event && event.type === 'zoom' && event.sourceEvent;
80480                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
80481                         context.enter(modeBrowse(context));
80482                     }
80483
80484                 } else {
80485                     selection
80486                         .classed('selected', true);
80487
80488                     context.selectedNoteID(selectedNoteID);
80489                 }
80490             }
80491
80492
80493             function esc() {
80494                 if (d3_select('.combobox').size()) { return; }
80495                 context.enter(modeBrowse(context));
80496             }
80497
80498
80499             mode.zoomToSelected = function() {
80500                 if (!osm) { return; }
80501                 var note = osm.getNote(selectedNoteID);
80502                 if (note) {
80503                     context.map().centerZoomEase(note.loc, 20);
80504                 }
80505             };
80506
80507
80508             mode.newFeature = function(val) {
80509                 if (!arguments.length) { return newFeature; }
80510                 newFeature = val;
80511                 return mode;
80512             };
80513
80514
80515             mode.enter = function() {
80516                 var note = checkSelectedID();
80517                 if (!note) { return; }
80518
80519                 behaviors.forEach(context.install);
80520
80521                 keybinding
80522                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
80523                     .on('⎋', esc, true);
80524
80525                 d3_select(document)
80526                     .call(keybinding);
80527
80528                 selectNote();
80529
80530                 var sidebar = context.ui().sidebar;
80531                 sidebar.show(noteEditor.note(note));
80532
80533                 // expand the sidebar, avoid obscuring the note if needed
80534                 sidebar.expand(sidebar.intersects(note.extent()));
80535
80536                 context.map()
80537                     .on('drawn.select', selectNote);
80538             };
80539
80540
80541             mode.exit = function() {
80542                 behaviors.forEach(context.uninstall);
80543
80544                 d3_select(document)
80545                     .call(keybinding.unbind);
80546
80547                 context.surface()
80548                     .selectAll('.layer-notes .selected')
80549                     .classed('selected hover', false);
80550
80551                 context.map()
80552                     .on('drawn.select', null);
80553
80554                 context.ui().sidebar
80555                     .hide();
80556
80557                 context.selectedNoteID(null);
80558             };
80559
80560
80561             return mode;
80562         }
80563
80564         function modeDragNote(context) {
80565             var mode = {
80566                 id: 'drag-note',
80567                 button: 'browse'
80568             };
80569
80570             var edit = behaviorEdit(context);
80571
80572             var _nudgeInterval;
80573             var _lastLoc;
80574             var _note;    // most current note.. dragged note may have stale datum.
80575
80576
80577             function startNudge(nudge) {
80578                 if (_nudgeInterval) { window.clearInterval(_nudgeInterval); }
80579                 _nudgeInterval = window.setInterval(function() {
80580                     context.pan(nudge);
80581                     doMove(nudge);
80582                 }, 50);
80583             }
80584
80585
80586             function stopNudge() {
80587                 if (_nudgeInterval) {
80588                     window.clearInterval(_nudgeInterval);
80589                     _nudgeInterval = null;
80590                 }
80591             }
80592
80593
80594             function origin(note) {
80595                 return context.projection(note.loc);
80596             }
80597
80598
80599             function start(note) {
80600                 _note = note;
80601                 var osm = services$1.osm;
80602                 if (osm) {
80603                     // Get latest note from cache.. The marker may have a stale datum bound to it
80604                     // and dragging it around can sometimes delete the users note comment.
80605                     _note = osm.getNote(_note.id);
80606                 }
80607
80608                 context.surface().selectAll('.note-' + _note.id)
80609                     .classed('active', true);
80610
80611                 context.perform(actionNoop());
80612                 context.enter(mode);
80613                 context.selectedNoteID(_note.id);
80614             }
80615
80616
80617             function move() {
80618                 event.sourceEvent.stopPropagation();
80619                 _lastLoc = context.projection.invert(event.point);
80620
80621                 doMove();
80622                 var nudge = geoViewportEdge(event.point, context.map().dimensions());
80623                 if (nudge) {
80624                     startNudge(nudge);
80625                 } else {
80626                     stopNudge();
80627                 }
80628             }
80629
80630
80631             function doMove(nudge) {
80632                 nudge = nudge || [0, 0];
80633
80634                 var currPoint = (event && event.point) || context.projection(_lastLoc);
80635                 var currMouse = geoVecSubtract(currPoint, nudge);
80636                 var loc = context.projection.invert(currMouse);
80637
80638                 _note = _note.move(loc);
80639
80640                 var osm = services$1.osm;
80641                 if (osm) {
80642                     osm.replaceNote(_note);  // update note cache
80643                 }
80644
80645                 context.replace(actionNoop());   // trigger redraw
80646             }
80647
80648
80649             function end() {
80650                 context.replace(actionNoop());   // trigger redraw
80651
80652                 context
80653                     .selectedNoteID(_note.id)
80654                     .enter(modeSelectNote(context, _note.id));
80655             }
80656
80657
80658             var drag = behaviorDrag()
80659                 .selector('.layer-touch.markers .target.note.new')
80660                 .surface(d3_select('#map').node())
80661                 .origin(origin)
80662                 .on('start', start)
80663                 .on('move', move)
80664                 .on('end', end);
80665
80666
80667             mode.enter = function() {
80668                 context.install(edit);
80669             };
80670
80671
80672             mode.exit = function() {
80673                 context.ui().sidebar.hover.cancel();
80674                 context.uninstall(edit);
80675
80676                 context.surface()
80677                     .selectAll('.active')
80678                     .classed('active', false);
80679
80680                 stopNudge();
80681             };
80682
80683             mode.behavior = drag;
80684
80685             return mode;
80686         }
80687
80688         function uiDataHeader() {
80689             var _datum;
80690
80691
80692             function dataHeader(selection) {
80693                 var header = selection.selectAll('.data-header')
80694                     .data(
80695                         (_datum ? [_datum] : []),
80696                         function(d) { return d.__featurehash__; }
80697                     );
80698
80699                 header.exit()
80700                     .remove();
80701
80702                 var headerEnter = header.enter()
80703                     .append('div')
80704                     .attr('class', 'data-header');
80705
80706                 var iconEnter = headerEnter
80707                     .append('div')
80708                     .attr('class', 'data-header-icon');
80709
80710                 iconEnter
80711                     .append('div')
80712                     .attr('class', 'preset-icon-28')
80713                     .call(svgIcon('#iD-icon-data', 'note-fill'));
80714
80715                 headerEnter
80716                     .append('div')
80717                     .attr('class', 'data-header-label')
80718                     .text(t('map_data.layers.custom.title'));
80719             }
80720
80721
80722             dataHeader.datum = function(val) {
80723                 if (!arguments.length) { return _datum; }
80724                 _datum = val;
80725                 return this;
80726             };
80727
80728
80729             return dataHeader;
80730         }
80731
80732         // This code assumes that the combobox values will not have duplicate entries.
80733         // It is keyed on the `value` of the entry. Data should be an array of objects like:
80734         //   [{
80735         //       value:  'display text',  // required
80736         //       title:  'hover text'     // optional
80737         //   }, ...]
80738
80739         var _comboHideTimerID;
80740
80741         function uiCombobox(context, klass) {
80742             var dispatch$1 = dispatch('accept', 'cancel');
80743
80744             var _suggestions = [];
80745             var _data = [];
80746             var _fetched = {};
80747             var _selected = null;
80748             var _canAutocomplete = true;
80749             var _caseSensitive = false;
80750             var _cancelFetch = false;
80751             var _minItems = 2;
80752             var _tDown = 0;
80753             var _mouseEnterHandler, _mouseLeaveHandler;
80754
80755             var _fetcher = function(val, cb) {
80756                 cb(_data.filter(function(d) {
80757                     var terms = d.terms || [];
80758                     terms.push(d.value);
80759                     return terms.some(function(term) {
80760                         return term
80761                             .toString()
80762                             .toLowerCase()
80763                             .indexOf(val.toLowerCase()) !== -1;
80764                     });
80765                 }));
80766             };
80767
80768             var combobox = function(input, attachTo) {
80769                 if (!input || input.empty()) { return; }
80770
80771                 input
80772                     .classed('combobox-input', true)
80773                     .on('focus.combo-input', focus)
80774                     .on('blur.combo-input', blur)
80775                     .on('keydown.combo-input', keydown)
80776                     .on('keyup.combo-input', keyup)
80777                     .on('input.combo-input', change)
80778                     .on('mousedown.combo-input', mousedown)
80779                     .each(function() {
80780                         var parent = this.parentNode;
80781                         var sibling = this.nextSibling;
80782
80783                         d3_select(parent).selectAll('.combobox-caret')
80784                             .filter(function(d) { return d === input.node(); })
80785                             .data([input.node()])
80786                             .enter()
80787                             .insert('div', function() { return sibling; })
80788                             .attr('class', 'combobox-caret')
80789                             .on('mousedown.combo-caret', function() {
80790                                 event.preventDefault(); // don't steal focus from input
80791                                 input.node().focus(); // focus the input as if it was clicked
80792                                 mousedown();
80793                             })
80794                             .on('mouseup.combo-caret', function() {
80795                                 event.preventDefault(); // don't steal focus from input
80796                                 mouseup();
80797                             });
80798                     });
80799
80800
80801                 function mousedown() {
80802                     if (event.button !== 0) { return; }    // left click only
80803                     _tDown = +new Date();
80804
80805                     // clear selection
80806                     var start = input.property('selectionStart');
80807                     var end = input.property('selectionEnd');
80808                     if (start !== end) {
80809                         var val = utilGetSetValue(input);
80810                         input.node().setSelectionRange(val.length, val.length);
80811                         return;
80812                     }
80813
80814                     input.on('mouseup.combo-input', mouseup);
80815                 }
80816
80817
80818                 function mouseup() {
80819                     input.on('mouseup.combo-input', null);
80820                     if (event.button !== 0) { return; }    // left click only
80821                     if (input.node() !== document.activeElement) { return; }   // exit if this input is not focused
80822
80823                     var start = input.property('selectionStart');
80824                     var end = input.property('selectionEnd');
80825                     if (start !== end) { return; }  // exit if user is selecting
80826
80827                     // not showing or showing for a different field - try to show it.
80828                     var combo = context.container().selectAll('.combobox');
80829                     if (combo.empty() || combo.datum() !== input.node()) {
80830                         var tOrig = _tDown;
80831                         window.setTimeout(function() {
80832                             if (tOrig !== _tDown) { return; }   // exit if user double clicked
80833                             fetchComboData('', function() {
80834                                 show();
80835                                 render();
80836                             });
80837                         }, 250);
80838
80839                     } else {
80840                         hide();
80841                     }
80842                 }
80843
80844
80845                 function focus() {
80846                     fetchComboData('');   // prefetch values (may warm taginfo cache)
80847                 }
80848
80849
80850                 function blur() {
80851                     _comboHideTimerID = window.setTimeout(hide, 75);
80852                 }
80853
80854
80855                 function show() {
80856                     hide();   // remove any existing
80857
80858                     context.container()
80859                         .insert('div', ':first-child')
80860                         .datum(input.node())
80861                         .attr('class', 'combobox' + (klass ? ' combobox-' + klass : ''))
80862                         .style('position', 'absolute')
80863                         .style('display', 'block')
80864                         .style('left', '0px')
80865                         .on('mousedown.combo-container', function () {
80866                             // prevent moving focus out of the input field
80867                             event.preventDefault();
80868                         });
80869
80870                     d3_select('body')
80871                         .on('scroll.combo-scroll', render, true);
80872                 }
80873
80874
80875                 function hide() {
80876                     if (_comboHideTimerID) {
80877                         window.clearTimeout(_comboHideTimerID);
80878                         _comboHideTimerID = undefined;
80879                     }
80880
80881                     context.container().selectAll('.combobox')
80882                         .remove();
80883
80884                     d3_select('body')
80885                         .on('scroll.combo-scroll', null);
80886                 }
80887
80888
80889                 function keydown() {
80890                     var shown = !context.container().selectAll('.combobox').empty();
80891                     var tagName = input.node() ? input.node().tagName.toLowerCase() : '';
80892
80893                     switch (event.keyCode) {
80894                         case 8:   // ⌫ Backspace
80895                         case 46:  // ⌦ Delete
80896                             event.stopPropagation();
80897                             _selected = null;
80898                             render();
80899                             input.on('input.combo-input', function() {
80900                                 var start = input.property('selectionStart');
80901                                 input.node().setSelectionRange(start, start);
80902                                 input.on('input.combo-input', change);
80903                             });
80904                             break;
80905
80906                         case 9:   // ⇥ Tab
80907                             accept();
80908                             break;
80909
80910                         case 13:  // ↩ Return
80911                             event.preventDefault();
80912                             event.stopPropagation();
80913                             break;
80914
80915                         case 38:  // ↑ Up arrow
80916                             if (tagName === 'textarea' && !shown) { return; }
80917                             event.preventDefault();
80918                             if (tagName === 'input' && !shown) {
80919                                 show();
80920                             }
80921                             nav(-1);
80922                             break;
80923
80924                         case 40:  // ↓ Down arrow
80925                             if (tagName === 'textarea' && !shown) { return; }
80926                             event.preventDefault();
80927                             if (tagName === 'input' && !shown) {
80928                                 show();
80929                             }
80930                             nav(+1);
80931                             break;
80932                     }
80933                 }
80934
80935
80936                 function keyup() {
80937                     switch (event.keyCode) {
80938                         case 27:  // ⎋ Escape
80939                             cancel();
80940                             break;
80941
80942                         case 13:  // ↩ Return
80943                             accept();
80944                             break;
80945                     }
80946                 }
80947
80948
80949                 // Called whenever the input value is changed (e.g. on typing)
80950                 function change() {
80951                     fetchComboData(value(), function() {
80952                         _selected = null;
80953                         var val = input.property('value');
80954
80955                         if (_suggestions.length) {
80956                             if (input.property('selectionEnd') === val.length) {
80957                                 _selected = tryAutocomplete();
80958                             }
80959
80960                             if (!_selected) {
80961                                 _selected = val;
80962                             }
80963                         }
80964
80965                         if (val.length) {
80966                             var combo = context.container().selectAll('.combobox');
80967                             if (combo.empty()) {
80968                                 show();
80969                             }
80970                         } else {
80971                             hide();
80972                         }
80973
80974                         render();
80975                     });
80976                 }
80977
80978
80979                 // Called when the user presses up/down arrows to navigate the list
80980                 function nav(dir) {
80981                     if (_suggestions.length) {
80982                         // try to determine previously selected index..
80983                         var index = -1;
80984                         for (var i = 0; i < _suggestions.length; i++) {
80985                             if (_selected && _suggestions[i].value === _selected) {
80986                                 index = i;
80987                                 break;
80988                             }
80989                         }
80990
80991                         // pick new _selected
80992                         index = Math.max(Math.min(index + dir, _suggestions.length - 1), 0);
80993                         _selected = _suggestions[index].value;
80994                         input.property('value', _selected);
80995                     }
80996
80997                     render();
80998                     ensureVisible();
80999                 }
81000
81001
81002                 function ensureVisible() {
81003                     var combo = context.container().selectAll('.combobox');
81004                     if (combo.empty()) { return; }
81005
81006                     var containerRect = context.container().node().getBoundingClientRect();
81007                     var comboRect = combo.node().getBoundingClientRect();
81008
81009                     if (comboRect.bottom > containerRect.bottom) {
81010                         var node = attachTo ? attachTo.node() : input.node();
81011                         node.scrollIntoView({ behavior: 'instant', block: 'center' });
81012                         render();
81013                     }
81014
81015                     // https://stackoverflow.com/questions/11039885/scrollintoview-causing-the-whole-page-to-move
81016                     var selected = combo.selectAll('.combobox-option.selected').node();
81017                     if (selected) {
81018                         selected.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
81019                     }
81020                 }
81021
81022
81023                 function value() {
81024                     var value = input.property('value');
81025                     var start = input.property('selectionStart');
81026                     var end = input.property('selectionEnd');
81027
81028                     if (start && end) {
81029                         value = value.substring(0, start);
81030                     }
81031
81032                     return value;
81033                 }
81034
81035
81036                 function fetchComboData(v, cb) {
81037                     _cancelFetch = false;
81038
81039                     _fetcher.call(input, v, function(results) {
81040                         // already chose a value, don't overwrite or autocomplete it
81041                         if (_cancelFetch) { return; }
81042
81043                         _suggestions = results;
81044                         results.forEach(function(d) { _fetched[d.value] = d; });
81045
81046                         if (cb) {
81047                             cb();
81048                         }
81049                     });
81050                 }
81051
81052
81053                 function tryAutocomplete() {
81054                     if (!_canAutocomplete) { return; }
81055
81056                     var val = _caseSensitive ? value() : value().toLowerCase();
81057                     if (!val) { return; }
81058
81059                     // Don't autocomplete if user is typing a number - #4935
81060                     if (!isNaN(parseFloat(val)) && isFinite(val)) { return; }
81061
81062                     var bestIndex = -1;
81063                     for (var i = 0; i < _suggestions.length; i++) {
81064                         var suggestion = _suggestions[i].value;
81065                         var compare = _caseSensitive ? suggestion : suggestion.toLowerCase();
81066
81067                         // if search string matches suggestion exactly, pick it..
81068                         if (compare === val) {
81069                             bestIndex = i;
81070                             break;
81071
81072                         // otherwise lock in the first result that starts with the search string..
81073                         } else if (bestIndex === -1 && compare.indexOf(val) === 0) {
81074                             bestIndex = i;
81075                         }
81076                     }
81077
81078                     if (bestIndex !== -1) {
81079                         var bestVal = _suggestions[bestIndex].value;
81080                         input.property('value', bestVal);
81081                         input.node().setSelectionRange(val.length, bestVal.length);
81082                         return bestVal;
81083                     }
81084                 }
81085
81086
81087                 function render() {
81088                     if (_suggestions.length < _minItems || document.activeElement !== input.node()) {
81089                         hide();
81090                         return;
81091                     }
81092
81093                     var shown = !context.container().selectAll('.combobox').empty();
81094                     if (!shown) { return; }
81095
81096                     var combo = context.container().selectAll('.combobox');
81097                     var options = combo.selectAll('.combobox-option')
81098                         .data(_suggestions, function(d) { return d.value; });
81099
81100                     options.exit()
81101                         .remove();
81102
81103                     // enter/update
81104                     options.enter()
81105                         .append('a')
81106                         .attr('class', 'combobox-option')
81107                         .attr('title', function(d) { return d.title; })
81108                         .text(function(d) { return d.display || d.value; })
81109                         .on('mouseenter', _mouseEnterHandler)
81110                         .on('mouseleave', _mouseLeaveHandler)
81111                         .merge(options)
81112                         .classed('selected', function(d) { return d.value === _selected; })
81113                         .on('click.combo-option', accept)
81114                         .order();
81115
81116                     var node = attachTo ? attachTo.node() : input.node();
81117                     var containerRect = context.container().node().getBoundingClientRect();
81118                     var rect = node.getBoundingClientRect();
81119
81120                     combo
81121                         .style('left', (rect.left + 5 - containerRect.left) + 'px')
81122                         .style('width', (rect.width - 10) + 'px')
81123                         .style('top', (rect.height + rect.top - containerRect.top) + 'px');
81124                 }
81125
81126
81127                 // Dispatches an 'accept' event
81128                 // Then hides the combobox.
81129                 function accept(d) {
81130                     _cancelFetch = true;
81131                     var thiz = input.node();
81132
81133                     if (d) {   // user clicked on a suggestion
81134                         utilGetSetValue(input, d.value);    // replace field contents
81135                         utilTriggerEvent(input, 'change');
81136                     }
81137
81138                     // clear (and keep) selection
81139                     var val = utilGetSetValue(input);
81140                     thiz.setSelectionRange(val.length, val.length);
81141
81142                     d = _fetched[val];
81143                     dispatch$1.call('accept', thiz, d, val);
81144                     hide();
81145                 }
81146
81147
81148                 // Dispatches an 'cancel' event
81149                 // Then hides the combobox.
81150                 function cancel() {
81151                     _cancelFetch = true;
81152                     var thiz = input.node();
81153
81154                     // clear (and remove) selection, and replace field contents
81155                     var val = utilGetSetValue(input);
81156                     var start = input.property('selectionStart');
81157                     var end = input.property('selectionEnd');
81158                     val = val.slice(0, start) + val.slice(end);
81159                     utilGetSetValue(input, val);
81160                     thiz.setSelectionRange(val.length, val.length);
81161
81162                     dispatch$1.call('cancel', thiz);
81163                     hide();
81164                 }
81165
81166             };
81167
81168
81169             combobox.canAutocomplete = function(val) {
81170                 if (!arguments.length) { return _canAutocomplete; }
81171                 _canAutocomplete = val;
81172                 return combobox;
81173             };
81174
81175             combobox.caseSensitive = function(val) {
81176                 if (!arguments.length) { return _caseSensitive; }
81177                 _caseSensitive = val;
81178                 return combobox;
81179             };
81180
81181             combobox.data = function(val) {
81182                 if (!arguments.length) { return _data; }
81183                 _data = val;
81184                 return combobox;
81185             };
81186
81187             combobox.fetcher = function(val) {
81188                 if (!arguments.length) { return _fetcher; }
81189                 _fetcher = val;
81190                 return combobox;
81191             };
81192
81193             combobox.minItems = function(val) {
81194                 if (!arguments.length) { return _minItems; }
81195                 _minItems = val;
81196                 return combobox;
81197             };
81198
81199             combobox.itemsMouseEnter = function(val) {
81200                 if (!arguments.length) { return _mouseEnterHandler; }
81201                 _mouseEnterHandler = val;
81202                 return combobox;
81203             };
81204
81205             combobox.itemsMouseLeave = function(val) {
81206                 if (!arguments.length) { return _mouseLeaveHandler; }
81207                 _mouseLeaveHandler = val;
81208                 return combobox;
81209             };
81210
81211             return utilRebind(combobox, dispatch$1, 'on');
81212         }
81213
81214
81215         uiCombobox.off = function(input) {
81216             input
81217                 .on('focus.combo-input', null)
81218                 .on('blur.combo-input', null)
81219                 .on('keydown.combo-input', null)
81220                 .on('keyup.combo-input', null)
81221                 .on('input.combo-input', null)
81222                 .on('mousedown.combo-input', null)
81223                 .on('mouseup.combo-input', null);
81224
81225
81226             d3_select('body')
81227                 .on('scroll.combo-scroll', null);
81228         };
81229
81230         // toggles the visibility of ui elements, using a combination of the
81231         // hide class, which sets display=none, and a d3 transition for opacity.
81232         // this will cause blinking when called repeatedly, so check that the
81233         // value actually changes between calls.
81234         function uiToggle(show, callback) {
81235             return function(selection) {
81236                 selection
81237                     .style('opacity', show ? 0 : 1)
81238                     .classed('hide', false)
81239                     .transition()
81240                     .style('opacity', show ? 1 : 0)
81241                     .on('end', function() {
81242                         d3_select(this)
81243                             .classed('hide', !show)
81244                             .style('opacity', null);
81245                         if (callback) { callback.apply(this); }
81246                     });
81247             };
81248         }
81249
81250         function uiDisclosure(context, key, expandedDefault) {
81251             var dispatch$1 = dispatch('toggled');
81252             var _preference = (context.storage('disclosure.' + key + '.expanded'));
81253             var _expanded = (_preference === null ? !!expandedDefault : (_preference === 'true'));
81254             var _title;
81255             var _updatePreference = true;
81256             var _content = function () {};
81257
81258
81259             var disclosure = function(selection) {
81260                 var hideToggle = selection.selectAll('.hide-toggle-' + key)
81261                     .data([0]);
81262
81263                 // enter
81264                 var hideToggleEnter = hideToggle.enter()
81265                     .append('a')
81266                     .attr('href', '#')
81267                     .attr('class', 'hide-toggle hide-toggle-' + key)
81268                     .call(svgIcon('', 'pre-text', 'hide-toggle-icon'));
81269
81270                 hideToggleEnter
81271                     .append('span')
81272                     .attr('class', 'hide-toggle-text');
81273
81274                 // update
81275                 hideToggle = hideToggleEnter
81276                     .merge(hideToggle);
81277
81278                 hideToggle
81279                     .on('click', toggle)
81280                     .classed('expanded', _expanded);
81281
81282                 hideToggle.selectAll('.hide-toggle-text')
81283                     .text(_title);
81284
81285                 hideToggle.selectAll('.hide-toggle-icon')
81286                     .attr('xlink:href', _expanded ? '#iD-icon-down'
81287                         : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
81288                     );
81289
81290
81291                 var wrap = selection.selectAll('.disclosure-wrap')
81292                     .data([0]);
81293
81294                 // enter/update
81295                 wrap = wrap.enter()
81296                     .append('div')
81297                     .attr('class', 'disclosure-wrap disclosure-wrap-' + key)
81298                     .merge(wrap)
81299                     .classed('hide', !_expanded);
81300
81301                 if (_expanded) {
81302                     wrap
81303                         .call(_content);
81304                 }
81305
81306
81307                 function toggle() {
81308                     event.preventDefault();
81309
81310                     _expanded = !_expanded;
81311
81312                     if (_updatePreference) {
81313                         context.storage('disclosure.' + key + '.expanded', _expanded);
81314                     }
81315
81316                     hideToggle
81317                         .classed('expanded', _expanded);
81318
81319                     hideToggle.selectAll('.hide-toggle-icon')
81320                         .attr('xlink:href', _expanded ? '#iD-icon-down'
81321                             : (textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'
81322                         );
81323
81324                     wrap
81325                         .call(uiToggle(_expanded));
81326
81327                     if (_expanded) {
81328                         wrap
81329                             .call(_content);
81330                     }
81331
81332                     dispatch$1.call('toggled', this, _expanded);
81333                 }
81334             };
81335
81336
81337             disclosure.title = function(val) {
81338                 if (!arguments.length) { return _title; }
81339                 _title = val;
81340                 return disclosure;
81341             };
81342
81343
81344             disclosure.expanded = function(val) {
81345                 if (!arguments.length) { return _expanded; }
81346                 _expanded = val;
81347                 return disclosure;
81348             };
81349
81350
81351             disclosure.updatePreference = function(val) {
81352                 if (!arguments.length) { return _updatePreference; }
81353                 _updatePreference = val;
81354                 return disclosure;
81355             };
81356
81357
81358             disclosure.content = function(val) {
81359                 if (!arguments.length) { return _content; }
81360                 _content = val;
81361                 return disclosure;
81362             };
81363
81364
81365             return utilRebind(disclosure, dispatch$1, 'on');
81366         }
81367
81368         // Pass `which` object of the form:
81369         // {
81370         //   key: 'string',     // required
81371         //   value: 'string'    // optional
81372         // }
81373         //   -or-
81374         // {
81375         //   rtype: 'string'    // relation type  (e.g. 'multipolygon')
81376         // }
81377         //   -or-
81378         // {
81379         //   qid: 'string'      // brand wikidata  (e.g. 'Q37158')
81380         // }
81381         //
81382         function uiTagReference(what) {
81383             var wikibase = what.qid ? services$1.wikidata : services$1.osmWikibase;
81384             var tagReference = {};
81385
81386             var _button = d3_select(null);
81387             var _body = d3_select(null);
81388             var _loaded;
81389             var _showing;
81390
81391
81392             function load() {
81393                 if (!wikibase) { return; }
81394
81395                 _button
81396                     .classed('tag-reference-loading', true);
81397
81398                 wikibase.getDocs(what, gotDocs);
81399             }
81400
81401
81402             function gotDocs(err, docs) {
81403                 _body.html('');
81404
81405                 if (!docs || !docs.title) {
81406                     _body
81407                         .append('p')
81408                         .attr('class', 'tag-reference-description')
81409                         .text(t('inspector.no_documentation_key'));
81410                     done();
81411                     return;
81412                 }
81413
81414                 if (docs.imageURL) {
81415                     _body
81416                         .append('img')
81417                         .attr('class', 'tag-reference-wiki-image')
81418                         .attr('src', docs.imageURL)
81419                         .on('load', function() { done(); })
81420                         .on('error', function() { d3_select(this).remove(); done(); });
81421                 } else {
81422                     done();
81423                 }
81424
81425                 _body
81426                     .append('p')
81427                     .attr('class', 'tag-reference-description')
81428                     .text(docs.description || t('inspector.no_documentation_key'))
81429                     .append('a')
81430                     .attr('class', 'tag-reference-edit')
81431                     .attr('target', '_blank')
81432                     .attr('tabindex', -1)
81433                     .attr('title', t('inspector.edit_reference'))
81434                     .attr('href', docs.editURL)
81435                     .call(svgIcon('#iD-icon-edit', 'inline'));
81436
81437                 if (docs.wiki) {
81438                     _body
81439                       .append('a')
81440                       .attr('class', 'tag-reference-link')
81441                       .attr('target', '_blank')
81442                       .attr('tabindex', -1)
81443                       .attr('href', docs.wiki.url)
81444                       .call(svgIcon('#iD-icon-out-link', 'inline'))
81445                       .append('span')
81446                       .text(t(docs.wiki.text));
81447                 }
81448
81449                 // Add link to info about "good changeset comments" - #2923
81450                 if (what.key === 'comment') {
81451                     _body
81452                         .append('a')
81453                         .attr('class', 'tag-reference-comment-link')
81454                         .attr('target', '_blank')
81455                         .attr('tabindex', -1)
81456                         .call(svgIcon('#iD-icon-out-link', 'inline'))
81457                         .attr('href', t('commit.about_changeset_comments_link'))
81458                         .append('span')
81459                         .text(t('commit.about_changeset_comments'));
81460                 }
81461             }
81462
81463
81464             function done() {
81465                 _loaded = true;
81466
81467                 _button
81468                     .classed('tag-reference-loading', false);
81469
81470                 _body
81471                     .classed('expanded', true)
81472                     .transition()
81473                     .duration(200)
81474                     .style('max-height', '200px')
81475                     .style('opacity', '1');
81476
81477                 _showing = true;
81478
81479                 _button.selectAll('svg.icon use').each(function() {
81480                     var iconUse = d3_select(this);
81481                     if (iconUse.attr('href') === '#iD-icon-info') {
81482                         iconUse.attr('href', '#iD-icon-info-filled');
81483                     }
81484                 });
81485             }
81486
81487
81488             function hide() {
81489                 _body
81490                     .transition()
81491                     .duration(200)
81492                     .style('max-height', '0px')
81493                     .style('opacity', '0')
81494                     .on('end', function () {
81495                         _body.classed('expanded', false);
81496                     });
81497
81498                 _showing = false;
81499
81500                 _button.selectAll('svg.icon use').each(function() {
81501                     var iconUse = d3_select(this);
81502                     if (iconUse.attr('href') === '#iD-icon-info-filled') {
81503                         iconUse.attr('href', '#iD-icon-info');
81504                     }
81505                 });
81506
81507             }
81508
81509
81510             tagReference.button = function(selection, klass, iconName) {
81511                 _button = selection.selectAll('.tag-reference-button')
81512                     .data([0]);
81513
81514                 _button = _button.enter()
81515                     .append('button')
81516                     .attr('class', 'tag-reference-button ' + klass)
81517                     .attr('title', t('icons.information'))
81518                     .attr('tabindex', -1)
81519                     .call(svgIcon('#iD-icon-' + (iconName || 'inspect')))
81520                     .merge(_button);
81521
81522                 _button
81523                     .on('click', function () {
81524                         event.stopPropagation();
81525                         event.preventDefault();
81526                         this.blur();    // avoid keeping focus on the button - #4641
81527                         if (_showing) {
81528                             hide();
81529                         } else if (_loaded) {
81530                             done();
81531                         } else {
81532                             load();
81533                         }
81534                     });
81535             };
81536
81537
81538             tagReference.body = function(selection) {
81539                 var itemID = what.qid || what.rtype || (what.key + '-' + what.value);
81540                 _body = selection.selectAll('.tag-reference-body')
81541                     .data([itemID], function(d) { return d; });
81542
81543                 _body.exit()
81544                     .remove();
81545
81546                 _body = _body.enter()
81547                     .append('div')
81548                     .attr('class', 'tag-reference-body')
81549                     .style('max-height', '0')
81550                     .style('opacity', '0')
81551                     .merge(_body);
81552
81553                 if (_showing === false) {
81554                     hide();
81555                 }
81556             };
81557
81558
81559             tagReference.showing = function(val) {
81560                 if (!arguments.length) { return _showing; }
81561                 _showing = val;
81562                 return tagReference;
81563             };
81564
81565
81566             return tagReference;
81567         }
81568
81569         function uiRawTagEditor(context) {
81570             var taginfo = services$1.taginfo;
81571             var dispatch$1 = dispatch('change');
81572             var availableViews = [
81573                 { id: 'text', icon: '#fas-i-cursor' },
81574                 { id: 'list', icon: '#fas-th-list' }
81575             ];
81576
81577             var _tagView = (context.storage('raw-tag-editor-view') || 'list');   // 'list, 'text'
81578             var _readOnlyTags = [];
81579             // the keys in the order we want them to display
81580             var _orderedKeys = [];
81581             var _showBlank = false;
81582             var _updatePreference = true;
81583             var _expanded = false;
81584             var _pendingChange = null;
81585             var _state;
81586             var _preset;
81587             var _tags;
81588             var _entityID;
81589
81590
81591             function rawTagEditor(selection) {
81592                 var count = Object.keys(_tags).filter(function(d) { return d; }).length;
81593
81594                 var disclosure = uiDisclosure(context, 'raw_tag_editor', false)
81595                     .title(t('inspector.tags_count', { count: count }))
81596                     .on('toggled', toggled)
81597                     .updatePreference(_updatePreference)
81598                     .content(content);
81599
81600                 // Sometimes we want to force the raw_tag_editor to be opened/closed..
81601                 // When undefined, uiDisclosure will use the user's stored preference.
81602                 if (_expanded !== undefined) {
81603                     disclosure.expanded(_expanded);
81604                 }
81605
81606                 selection.call(disclosure);
81607
81608                 function toggled(expanded) {
81609                     _expanded = expanded;
81610                     if (expanded) {
81611                         selection.node().parentNode.scrollTop += 200;
81612                     }
81613                 }
81614             }
81615
81616
81617             function content(wrap) {
81618
81619                 // remove deleted keys
81620                 _orderedKeys = _orderedKeys.filter(function(key) {
81621                     return _tags[key] !== undefined;
81622                 });
81623
81624                 // When switching to a different entity or changing the state (hover/select)
81625                 // reorder the keys alphabetically.
81626                 // We trigger this by emptying the `_orderedKeys` array, then it will be rebuilt here.
81627                 // Otherwise leave their order alone - #5857, #5927
81628                 var all = Object.keys(_tags).sort();
81629                 var missingKeys = utilArrayDifference(all, _orderedKeys);
81630                 for (var i in missingKeys) {
81631                     _orderedKeys.push(missingKeys[i]);
81632                 }
81633
81634                 // assemble row data
81635                 var rowData = _orderedKeys.map(function(key, i) {
81636                     return { index: i, key: key, value: _tags[key] };
81637                 });
81638
81639                 // append blank row last, if necessary
81640                 if (!rowData.length || _showBlank) {
81641                     _showBlank = false;
81642                     rowData.push({ index: rowData.length, key: '', value: '' });
81643                 }
81644
81645
81646                 // View Options
81647                 var options = wrap.selectAll('.raw-tag-options')
81648                     .data([0]);
81649
81650                 var optionsEnter = options.enter()
81651                     .append('div')
81652                     .attr('class', 'raw-tag-options');
81653
81654                 var optionEnter = optionsEnter.selectAll('.raw-tag-option')
81655                     .data(availableViews, function(d) { return d.id; })
81656                     .enter();
81657
81658                 optionEnter
81659                     .append('button')
81660                     .attr('class', function(d) {
81661                         return 'raw-tag-option raw-tag-option-' + d.id + (_tagView === d.id ? ' selected' : '');
81662                     })
81663                     .attr('title', function(d) { return d.id; })
81664                     .on('click', function(d) {
81665                         _tagView = d.id;
81666                         context.storage('raw-tag-editor-view', d.id);
81667
81668                         wrap.selectAll('.raw-tag-option')
81669                             .classed('selected', function(datum) { return datum === d; });
81670
81671                         wrap.selectAll('.tag-text')
81672                             .classed('hide', (d.id !== 'text'))
81673                             .each(setTextareaHeight);
81674
81675                         wrap.selectAll('.tag-list, .add-row')
81676                             .classed('hide', (d.id !== 'list'));
81677                     })
81678                     .each(function(d) {
81679                         d3_select(this)
81680                             .call(svgIcon(d.icon));
81681                     });
81682
81683
81684                 // View as Text
81685                 var textData = rowsToText(rowData);
81686                 var textarea = wrap.selectAll('.tag-text')
81687                     .data([0]);
81688
81689                 textarea = textarea.enter()
81690                     .append('textarea')
81691                     .attr('class', 'tag-text' + (_tagView !== 'text' ? ' hide' : ''))
81692                     .call(utilNoAuto)
81693                     .attr('spellcheck', 'false')
81694                     .merge(textarea);
81695
81696                 textarea
81697                     .call(utilGetSetValue, textData)
81698                     .each(setTextareaHeight)
81699                     .on('input', setTextareaHeight)
81700                     .on('blur', textChanged)
81701                     .on('change', textChanged);
81702
81703
81704                 // View as List
81705                 var list = wrap.selectAll('.tag-list')
81706                     .data([0]);
81707
81708                 list = list.enter()
81709                     .append('ul')
81710                     .attr('class', 'tag-list' + (_tagView !== 'list' ? ' hide' : ''))
81711                     .merge(list);
81712
81713
81714                 // Container for the Add button
81715                 var addRowEnter = wrap.selectAll('.add-row')
81716                     .data([0])
81717                     .enter()
81718                     .append('div')
81719                     .attr('class', 'add-row' + (_tagView !== 'list' ? ' hide' : ''));
81720
81721                 addRowEnter
81722                     .append('button')
81723                     .attr('class', 'add-tag')
81724                     .call(svgIcon('#iD-icon-plus', 'light'))
81725                     .on('click', addTag);
81726
81727                 addRowEnter
81728                     .append('div')
81729                     .attr('class', 'space-value');   // preserve space
81730
81731                 addRowEnter
81732                     .append('div')
81733                     .attr('class', 'space-buttons');  // preserve space
81734
81735
81736                 // Tag list items
81737                 var items = list.selectAll('.tag-row')
81738                     .data(rowData, function(d) { return d.key; });
81739
81740                 items.exit()
81741                     .each(unbind)
81742                     .remove();
81743
81744
81745                 // Enter
81746                 var itemsEnter = items.enter()
81747                     .append('li')
81748                     .attr('class', 'tag-row')
81749                     .classed('readonly', isReadOnly);
81750
81751                 var innerWrap = itemsEnter.append('div')
81752                     .attr('class', 'inner-wrap');
81753
81754                 innerWrap
81755                     .append('div')
81756                     .attr('class', 'key-wrap')
81757                     .append('input')
81758                     .property('type', 'text')
81759                     .attr('class', 'key')
81760                     .attr('maxlength', 255)
81761                     .call(utilNoAuto)
81762                     .on('blur', keyChange)
81763                     .on('change', keyChange);
81764
81765                 innerWrap
81766                     .append('div')
81767                     .attr('class', 'value-wrap')
81768                     .append('input')
81769                     .property('type', 'text')
81770                     .attr('class', 'value')
81771                     .attr('maxlength', 255)
81772                     .call(utilNoAuto)
81773                     .on('blur', valueChange)
81774                     .on('change', valueChange)
81775                     .on('keydown.push-more', pushMore);
81776
81777                 innerWrap
81778                     .append('button')
81779                     .attr('tabindex', -1)
81780                     .attr('class', 'form-field-button remove')
81781                     .attr('title', t('icons.remove'))
81782                     .call(svgIcon('#iD-operation-delete'));
81783
81784
81785                 // Update
81786                 items = items
81787                     .merge(itemsEnter)
81788                     .sort(function(a, b) { return a.index - b.index; });
81789
81790                 items
81791                     .each(function(d) {
81792                         var row = d3_select(this);
81793                         var key = row.select('input.key');      // propagate bound data
81794                         var value = row.select('input.value');  // propagate bound data
81795
81796                         if (_entityID && taginfo && _state !== 'hover') {
81797                             bindTypeahead(key, value);
81798                         }
81799
81800                         var isRelation = (_entityID && context.entity(_entityID).type === 'relation');
81801                         var reference;
81802
81803                         if (isRelation && d.key === 'type') {
81804                             reference = uiTagReference({ rtype: d.value });
81805                         } else {
81806                             reference = uiTagReference({ key: d.key, value: d.value });
81807                         }
81808
81809                         if (_state === 'hover') {
81810                             reference.showing(false);
81811                         }
81812
81813                         row.select('.inner-wrap')      // propagate bound data
81814                             .call(reference.button);
81815
81816                         row.call(reference.body);
81817
81818                         row.select('button.remove');   // propagate bound data
81819                     });
81820
81821                 items.selectAll('input.key')
81822                     .attr('title', function(d) { return d.key; })
81823                     .call(utilGetSetValue, function(d) { return d.key; })
81824                     .attr('readonly', function(d) {
81825                         return isReadOnly(d) || null;
81826                     });
81827
81828                 items.selectAll('input.value')
81829                     .attr('title', function(d) { return d.value; })
81830                     .call(utilGetSetValue, function(d) { return d.value; })
81831                     .attr('readonly', function(d) {
81832                         return isReadOnly(d) || null;
81833                     });
81834
81835                 items.selectAll('button.remove')
81836                     .on('mousedown', removeTag);  // 'click' fires too late - #5878
81837
81838
81839
81840                 function isReadOnly(d) {
81841                     for (var i = 0; i < _readOnlyTags.length; i++) {
81842                         if (d.key.match(_readOnlyTags[i]) !== null) {
81843                             return true;
81844                         }
81845                     }
81846                     return false;
81847                 }
81848
81849
81850                 function setTextareaHeight() {
81851                     if (_tagView !== 'text') { return; }
81852
81853                     var selection = d3_select(this);
81854                     selection.style('height', null);
81855                     selection.style('height', selection.node().scrollHeight + 5 + 'px');
81856                 }
81857
81858
81859                 function stringify(s) {
81860                     return JSON.stringify(s).slice(1, -1);   // without leading/trailing "
81861                 }
81862
81863                 function unstringify(s) {
81864                     var leading = '';
81865                     var trailing = '';
81866                     if (s.length < 1 || s.charAt(0) !== '"') {
81867                         leading = '"';
81868                     }
81869                     if (s.length < 2 || s.charAt(s.length - 1) !== '"' ||
81870                         (s.charAt(s.length - 1) === '"' && s.charAt(s.length - 2) === '\\')
81871                     ) {
81872                         trailing = '"';
81873                     }
81874                     return JSON.parse(leading + s + trailing);
81875                 }
81876
81877
81878                 function rowsToText(rows) {
81879                     var str = rows
81880                         .filter(function(row) { return row.key && row.key.trim() !== ''; })
81881                         .map(function(row) {
81882                             var val = row.value ? stringify(row.value) : '';
81883                             return stringify(row.key) + '=' + val;
81884                         })
81885                         .join('\n');
81886
81887                     return _state === 'hover' ? str : str + '\n';
81888                 }
81889
81890
81891                 function textChanged() {
81892                     var newText = this.value.trim();
81893                     var newTags = {};
81894                     newText.split('\n').forEach(function(row) {
81895                         var m = row.match(/^\s*([^=]+)=(.*)$/);
81896                         if (m !== null) {
81897                             var k = unstringify(m[1].trim());
81898                             var v = unstringify(m[2].trim());
81899                             newTags[k] = v;
81900                         }
81901                     });
81902
81903                     var tagDiff = utilTagDiff(_tags, newTags);
81904                     if (!tagDiff.length) { return; }
81905
81906                     _pendingChange  = _pendingChange || {};
81907
81908                     tagDiff.forEach(function(change) {
81909                         if (isReadOnly({ key: change.key })) { return; }
81910
81911                         if (change.type === '-') {
81912                             _pendingChange[change.key] = undefined;
81913                         } else if (change.type === '+') {
81914                             _pendingChange[change.key] = change.newVal || '';
81915                         }
81916                     });
81917
81918                     scheduleChange();
81919                 }
81920
81921
81922                 function pushMore() {
81923                     // if pressing Tab on the last value field with content, add a blank row
81924                     if (event.keyCode === 9 && !event.shiftKey &&
81925                         list.selectAll('li:last-child input.value').node() === this &&
81926                         utilGetSetValue(d3_select(this))) {
81927                         addTag();
81928                     }
81929                 }
81930
81931
81932                 function bindTypeahead(key, value) {
81933                     if (isReadOnly(key.datum())) { return; }
81934
81935                     var geometry = context.geometry(_entityID);
81936
81937                     key.call(uiCombobox(context, 'tag-key')
81938                         .fetcher(function(value, callback) {
81939                             taginfo.keys({
81940                                 debounce: true,
81941                                 geometry: geometry,
81942                                 query: value
81943                             }, function(err, data) {
81944                                 if (!err) {
81945                                     var filtered = data.filter(function(d) { return _tags[d.value] === undefined; });
81946                                     callback(sort(value, filtered));
81947                                 }
81948                             });
81949                         }));
81950
81951                     value.call(uiCombobox(context, 'tag-value')
81952                         .fetcher(function(value, callback) {
81953                             taginfo.values({
81954                                 debounce: true,
81955                                 key: utilGetSetValue(key),
81956                                 geometry: geometry,
81957                                 query: value
81958                             }, function(err, data) {
81959                                 if (!err) { callback(sort(value, data)); }
81960                             });
81961                         }));
81962
81963
81964                     function sort(value, data) {
81965                         var sameletter = [];
81966                         var other = [];
81967                         for (var i = 0; i < data.length; i++) {
81968                             if (data[i].value.substring(0, value.length) === value) {
81969                                 sameletter.push(data[i]);
81970                             } else {
81971                                 other.push(data[i]);
81972                             }
81973                         }
81974                         return sameletter.concat(other);
81975                     }
81976                 }
81977
81978
81979                 function unbind() {
81980                     var row = d3_select(this);
81981
81982                     row.selectAll('input.key')
81983                         .call(uiCombobox.off);
81984
81985                     row.selectAll('input.value')
81986                         .call(uiCombobox.off);
81987                 }
81988
81989
81990                 function keyChange(d) {
81991                     var kOld = d.key;
81992                     var kNew = this.value.trim();
81993                     var row = this.parentNode.parentNode;
81994                     var inputVal = d3_select(row).selectAll('input.value');
81995                     var vNew = utilGetSetValue(inputVal);
81996
81997                     // allow no change if the key should be readonly
81998                     if (isReadOnly({ key: kNew })) {
81999                         this.value = kOld;
82000                         return;
82001                     }
82002
82003                     // switch focus if key is already in use
82004                     if (kNew && kNew !== kOld) {
82005                         if (_tags[kNew] !== undefined) {      // new key is already in use
82006                             this.value = kOld;                // reset the key
82007                             list.selectAll('input.value')
82008                                 .each(function(d) {
82009                                     if (d.key === kNew) {     // send focus to that other value combo instead
82010                                         var input = d3_select(this).node();
82011                                         input.focus();
82012                                         input.select();
82013                                     }
82014                                 });
82015                             return;
82016                         }
82017                     }
82018
82019                     _pendingChange  = _pendingChange || {};
82020
82021                     // exit if we are currently about to delete this row anyway - #6366
82022                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) { return; }
82023
82024                     if (kOld) {
82025                         _pendingChange[kOld] = undefined;
82026                     }
82027
82028                     _pendingChange[kNew] = vNew;
82029
82030                     // update the ordered key index so this row doesn't change position
82031                     var existingKeyIndex = _orderedKeys.indexOf(kOld);
82032                     if (existingKeyIndex !== -1) { _orderedKeys[existingKeyIndex] = kNew; }
82033
82034                     d.key = kNew;    // update datum to avoid exit/enter on tag update
82035                     d.value = vNew;
82036
82037                     this.value = kNew;
82038                     utilGetSetValue(inputVal, vNew);
82039                     scheduleChange();
82040                 }
82041
82042
82043                 function valueChange(d) {
82044                     if (isReadOnly(d)) { return; }
82045
82046                     _pendingChange  = _pendingChange || {};
82047
82048                     // exit if we are currently about to delete this row anyway - #6366
82049                     if (_pendingChange.hasOwnProperty(d.key) && _pendingChange[d.key] === undefined) { return; }
82050
82051                     _pendingChange[d.key] = this.value;
82052                     scheduleChange();
82053                 }
82054
82055
82056                 function removeTag(d) {
82057                     if (isReadOnly(d)) { return; }
82058
82059                     if (d.key === '') {    // removing the blank row
82060                         _showBlank = false;
82061                         content(wrap);
82062
82063                     } else {
82064                         // remove the key from the ordered key index
82065                         _orderedKeys = _orderedKeys.filter(function(key) { return key !== d.key; });
82066
82067                         _pendingChange  = _pendingChange || {};
82068                         _pendingChange[d.key] = undefined;
82069                         scheduleChange();
82070                     }
82071                 }
82072
82073
82074                 function addTag() {
82075                     // Delay render in case this click is blurring an edited combo.
82076                     // Without the setTimeout, the `content` render would wipe out the pending tag change.
82077                     window.setTimeout(function() {
82078                         _showBlank = true;
82079                         content(wrap);
82080                         list.selectAll('li:last-child input.key').node().focus();
82081                     }, 20);
82082                 }
82083
82084
82085                 function scheduleChange() {
82086                     // Delay change in case this change is blurring an edited combo. - #5878
82087                     window.setTimeout(function() {
82088                         dispatch$1.call('change', this, _pendingChange);
82089                         _pendingChange = null;
82090                     }, 10);
82091                 }
82092
82093             }
82094
82095
82096             rawTagEditor.state = function(val) {
82097                 if (!arguments.length) { return _state; }
82098                 if (_state !== val) {
82099                     _orderedKeys = [];
82100                     _state = val;
82101                 }
82102                 return rawTagEditor;
82103             };
82104
82105
82106             rawTagEditor.preset = function(val) {
82107                 if (!arguments.length) { return _preset; }
82108                 _preset = val;
82109                 if (_preset.isFallback()) {
82110                     _expanded = true;
82111                     _updatePreference = false;
82112                 } else {
82113                     _expanded = undefined;
82114                     _updatePreference = true;
82115                 }
82116                 return rawTagEditor;
82117             };
82118
82119
82120             rawTagEditor.tags = function(val) {
82121                 if (!arguments.length) { return _tags; }
82122                 _tags = val;
82123                 return rawTagEditor;
82124             };
82125
82126
82127             rawTagEditor.entityID = function(val) {
82128                 if (!arguments.length) { return _entityID; }
82129                 if (_entityID !== val) {
82130                     _orderedKeys = [];
82131                     _entityID = val;
82132                 }
82133                 return rawTagEditor;
82134             };
82135
82136
82137             rawTagEditor.expanded = function(val) {
82138                 if (!arguments.length) { return _expanded; }
82139                 _expanded = val;
82140                 _updatePreference = false;
82141                 return rawTagEditor;
82142             };
82143
82144
82145             // pass an array of regular expressions to test against the tag key
82146             rawTagEditor.readOnlyTags = function(val) {
82147                 if (!arguments.length) { return _readOnlyTags; }
82148                 _readOnlyTags = val;
82149                 return rawTagEditor;
82150             };
82151
82152
82153             return utilRebind(rawTagEditor, dispatch$1, 'on');
82154         }
82155
82156         function uiDataEditor(context) {
82157             var dataHeader = uiDataHeader();
82158             var quickLinks = uiQuickLinks();
82159             var rawTagEditor = uiRawTagEditor(context);
82160             var _datum;
82161
82162
82163             function dataEditor(selection) {
82164                 // quick links
82165                 var choices = [{
82166                     id: 'zoom_to',
82167                     label: 'inspector.zoom_to.title',
82168                     tooltip: function() {
82169                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_data'), t('inspector.zoom_to.key'));
82170                     },
82171                     click: function zoomTo() {
82172                         context.mode().zoomToSelected();
82173                     }
82174                 }];
82175
82176
82177                 var header = selection.selectAll('.header')
82178                     .data([0]);
82179
82180                 var headerEnter = header.enter()
82181                     .append('div')
82182                     .attr('class', 'header fillL');
82183
82184                 headerEnter
82185                     .append('button')
82186                     .attr('class', 'fr data-editor-close')
82187                     .on('click', function() {
82188                         context.enter(modeBrowse(context));
82189                     })
82190                     .call(svgIcon('#iD-icon-close'));
82191
82192                 headerEnter
82193                     .append('h3')
82194                     .text(t('map_data.title'));
82195
82196
82197                 var body = selection.selectAll('.body')
82198                     .data([0]);
82199
82200                 body = body.enter()
82201                     .append('div')
82202                     .attr('class', 'body')
82203                     .merge(body);
82204
82205                 var editor = body.selectAll('.data-editor')
82206                     .data([0]);
82207
82208                 // enter/update
82209                 editor.enter()
82210                     .append('div')
82211                     .attr('class', 'modal-section data-editor')
82212                     .merge(editor)
82213                     .call(dataHeader.datum(_datum))
82214                     .call(quickLinks.choices(choices));
82215
82216                 var rte = body.selectAll('.raw-tag-editor')
82217                     .data([0]);
82218
82219                 // enter/update
82220                 rte.enter()
82221                     .append('div')
82222                     .attr('class', 'raw-tag-editor inspector-inner data-editor')
82223                     .merge(rte)
82224                     .call(rawTagEditor
82225                         .expanded(true)
82226                         .readOnlyTags([/./])
82227                         .tags((_datum && _datum.properties) || {})
82228                         .state('hover')
82229                     )
82230                     .selectAll('textarea.tag-text')
82231                     .attr('readonly', true)
82232                     .classed('readonly', true);
82233             }
82234
82235
82236             dataEditor.datum = function(val) {
82237                 if (!arguments.length) { return _datum; }
82238                 _datum = val;
82239                 return this;
82240             };
82241
82242
82243             return dataEditor;
82244         }
82245
82246         function modeSelectData(context, selectedDatum) {
82247             var mode = {
82248                 id: 'select-data',
82249                 button: 'browse'
82250             };
82251
82252             var keybinding = utilKeybinding('select-data');
82253             var dataEditor = uiDataEditor(context);
82254
82255             var behaviors = [
82256                 behaviorBreathe(),
82257                 behaviorHover(context),
82258                 behaviorSelect(context),
82259                 behaviorLasso(context),
82260                 modeDragNode(context).behavior,
82261                 modeDragNote(context).behavior
82262             ];
82263
82264
82265             // class the data as selected, or return to browse mode if the data is gone
82266             function selectData(drawn) {
82267                 var selection = context.surface().selectAll('.layer-mapdata .data' + selectedDatum.__featurehash__);
82268
82269                 if (selection.empty()) {
82270                     // Return to browse mode if selected DOM elements have
82271                     // disappeared because the user moved them out of view..
82272                     var source = event && event.type === 'zoom' && event.sourceEvent;
82273                     if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
82274                         context.enter(modeBrowse(context));
82275                     }
82276                 } else {
82277                     selection.classed('selected', true);
82278                 }
82279             }
82280
82281
82282             function esc() {
82283                 if (d3_select('.combobox').size()) { return; }
82284                 context.enter(modeBrowse(context));
82285             }
82286
82287
82288             mode.zoomToSelected = function() {
82289                 var extent = geoExtent(d3_geoBounds(selectedDatum));
82290                 context.map().centerZoomEase(extent.center(), context.map().trimmedExtentZoom(extent));
82291             };
82292
82293
82294             mode.enter = function() {
82295                 behaviors.forEach(context.install);
82296
82297                 keybinding
82298                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
82299                     .on('⎋', esc, true);
82300
82301                 d3_select(document)
82302                     .call(keybinding);
82303
82304                 selectData();
82305
82306                 var sidebar = context.ui().sidebar;
82307                 sidebar.show(dataEditor.datum(selectedDatum));
82308
82309                 // expand the sidebar, avoid obscuring the data if needed
82310                 var extent = geoExtent(d3_geoBounds(selectedDatum));
82311                 sidebar.expand(sidebar.intersects(extent));
82312
82313                 context.map()
82314                     .on('drawn.select-data', selectData);
82315             };
82316
82317
82318             mode.exit = function() {
82319                 behaviors.forEach(context.uninstall);
82320
82321                 d3_select(document)
82322                     .call(keybinding.unbind);
82323
82324                 context.surface()
82325                     .selectAll('.layer-mapdata .selected')
82326                     .classed('selected hover', false);
82327
82328                 context.map()
82329                     .on('drawn.select-data', null);
82330
82331                 context.ui().sidebar
82332                     .hide();
82333             };
82334
82335
82336             return mode;
82337         }
82338
82339         function uiImproveOsmComments() {
82340             var _error;
82341
82342
82343             function errorComments(selection) {
82344                 // make the div immediately so it appears above the buttons
82345                 var comments = selection.selectAll('.comments-container')
82346                     .data([0]);
82347
82348                 comments = comments.enter()
82349                     .append('div')
82350                     .attr('class', 'comments-container')
82351                     .merge(comments);
82352
82353                 // must retrieve comments from API before they can be displayed
82354                 services$1.improveOSM.getComments(_error, function(err, d) {
82355                     if (!d.comments) { return; } // nothing to do here
82356
82357                     var commentEnter = comments.selectAll('.comment')
82358                         .data(d.comments)
82359                         .enter()
82360                         .append('div')
82361                         .attr('class', 'comment');
82362
82363                     commentEnter
82364                         .append('div')
82365                         .attr('class', 'comment-avatar')
82366                         .call(svgIcon('#iD-icon-avatar', 'comment-avatar-icon'));
82367
82368                     var mainEnter = commentEnter
82369                         .append('div')
82370                         .attr('class', 'comment-main');
82371
82372                     var metadataEnter = mainEnter
82373                         .append('div')
82374                         .attr('class', 'comment-metadata');
82375
82376                     metadataEnter
82377                         .append('div')
82378                         .attr('class', 'comment-author')
82379                         .each(function(d) {
82380                             var selection = d3_select(this);
82381                             var osm = services$1.osm;
82382                             if (osm && d.username) {
82383                                 selection = selection
82384                                     .append('a')
82385                                     .attr('class', 'comment-author-link')
82386                                     .attr('href', osm.userURL(d.username))
82387                                     .attr('tabindex', -1)
82388                                     .attr('target', '_blank');
82389                             }
82390                             selection
82391                                 .text(function(d) { return d.username; });
82392                         });
82393
82394                     metadataEnter
82395                         .append('div')
82396                         .attr('class', 'comment-date')
82397                         .text(function(d) {
82398                             return t('note.status.commented', { when: localeDateString(d.timestamp) });
82399                         });
82400
82401                     mainEnter
82402                         .append('div')
82403                         .attr('class', 'comment-text')
82404                         .append('p')
82405                         .text(function(d) { return d.text; });
82406                 });
82407             }
82408
82409             function localeDateString(s) {
82410                 if (!s) { return null; }
82411                 var detected = utilDetect();
82412                 var options = { day: 'numeric', month: 'short', year: 'numeric' };
82413                 var d = new Date(s * 1000); // timestamp is served in seconds, date takes ms
82414                 if (isNaN(d.getTime())) { return null; }
82415                 return d.toLocaleDateString(detected.locale, options);
82416             }
82417
82418             errorComments.error = function(val) {
82419                 if (!arguments.length) { return _error; }
82420                 _error = val;
82421                 return errorComments;
82422             };
82423
82424             return errorComments;
82425         }
82426
82427         function uiImproveOsmDetails(context) {
82428             var _error;
82429
82430
82431             function errorDetail(d) {
82432                 var unknown = t('inspector.unknown');
82433
82434                 if (!d) { return unknown; }
82435
82436                 if (d.desc) { return d.desc; }
82437
82438                 var errorType = d.error_key;
82439                 var et = en.QA.improveOSM.error_types[errorType];
82440
82441                 var detail;
82442                 if (et && et.description) {
82443                     detail = t('QA.improveOSM.error_types.' + errorType + '.description', d.replacements);
82444                 } else {
82445                     detail = unknown;
82446                 }
82447
82448                 return detail;
82449             }
82450
82451
82452             function improveOsmDetails(selection) {
82453                 var details = selection.selectAll('.error-details')
82454                     .data(
82455                         (_error ? [_error] : []),
82456                         function(d) { return d.id + '-' + (d.status || 0); }
82457                     );
82458
82459                 details.exit()
82460                     .remove();
82461
82462                 var detailsEnter = details.enter()
82463                     .append('div')
82464                     .attr('class', 'error-details error-details-container');
82465
82466
82467                 // description
82468                 var descriptionEnter = detailsEnter
82469                     .append('div')
82470                     .attr('class', 'error-details-description');
82471
82472                 descriptionEnter
82473                     .append('h4')
82474                     .text(function() { return t('QA.keepRight.detail_description'); });
82475
82476                 descriptionEnter
82477                     .append('div')
82478                     .attr('class', 'error-details-description-text')
82479                     .html(errorDetail);
82480
82481                 // If there are entity links in the error message..
82482                 var relatedEntities = [];
82483                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
82484                     .each(function() {
82485                         var link = d3_select(this);
82486                         var isObjectLink = link.classed('error_object_link');
82487                         var entityID = isObjectLink ?
82488                             (utilEntityRoot(_error.object_type) + _error.object_id)
82489                             : this.textContent;
82490                         var entity = context.hasEntity(entityID);
82491
82492                         relatedEntities.push(entityID);
82493
82494                         // Add click handler
82495                         link
82496                             .on('mouseover', function() {
82497                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
82498                                     .classed('hover', true);
82499                             })
82500                             .on('mouseout', function() {
82501                                 context.surface().selectAll('.hover')
82502                                     .classed('hover', false);
82503                             })
82504                             .on('click', function() {
82505                                 event.preventDefault();
82506                                 var osmlayer = context.layers().layer('osm');
82507                                 if (!osmlayer.enabled()) {
82508                                     osmlayer.enabled(true);
82509                                 }
82510
82511                                 context.map().centerZoom(_error.loc, 20);
82512
82513                                 if (entity) {
82514                                     context.enter(modeSelect(context, [entityID]));
82515                                 } else {
82516                                     context.loadEntity(entityID, function() {
82517                                         context.enter(modeSelect(context, [entityID]));
82518                                     });
82519                                 }
82520                             });
82521
82522                         // Replace with friendly name if possible
82523                         // (The entity may not yet be loaded into the graph)
82524                         if (entity) {
82525                             var name = utilDisplayName(entity);  // try to use common name
82526
82527                             if (!name && !isObjectLink) {
82528                                 var preset = context.presets().match(entity, context.graph());
82529                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
82530                             }
82531
82532                             if (name) {
82533                                 this.innerText = name;
82534                             }
82535                         }
82536                     });
82537
82538                 // Don't hide entities related to this error - #5880
82539                 context.features().forceVisible(relatedEntities);
82540             }
82541
82542
82543             improveOsmDetails.error = function(val) {
82544                 if (!arguments.length) { return _error; }
82545                 _error = val;
82546                 return improveOsmDetails;
82547             };
82548
82549
82550             return improveOsmDetails;
82551         }
82552
82553         function uiImproveOsmHeader() {
82554             var _error;
82555
82556
82557             function errorTitle(d) {
82558                 var unknown = t('inspector.unknown');
82559
82560                 if (!d) { return unknown; }
82561                 var errorType = d.error_key;
82562                 var et = en.QA.improveOSM.error_types[errorType];
82563
82564                 if (et && et.title) {
82565                     return t('QA.improveOSM.error_types.' + errorType + '.title');
82566                 } else {
82567                     return unknown;
82568                 }
82569             }
82570
82571
82572             function improveOsmHeader(selection) {
82573                 var header = selection.selectAll('.error-header')
82574                     .data(
82575                         (_error ? [_error] : []),
82576                         function(d) { return d.id + '-' + (d.status || 0); }
82577                     );
82578
82579                 header.exit()
82580                     .remove();
82581
82582                 var headerEnter = header.enter()
82583                     .append('div')
82584                     .attr('class', 'error-header');
82585
82586                 var iconEnter = headerEnter
82587                     .append('div')
82588                     .attr('class', 'error-header-icon')
82589                     .classed('new', function(d) { return d.id < 0; });
82590
82591                 var svgEnter = iconEnter
82592                     .append('svg')
82593                     .attr('width', '20px')
82594                     .attr('height', '30px')
82595                     .attr('viewbox', '0 0 20 30')
82596                     .attr('class', function(d) {
82597                         return [
82598                             'preset-icon-28',
82599                             'qa_error',
82600                             d.service,
82601                             'error_id-' + d.id,
82602                             'error_type-' + d.error_type,
82603                             'category-' + d.category
82604                         ].join(' ');
82605                     });
82606
82607                 svgEnter
82608                     .append('polygon')
82609                     .attr('fill', 'currentColor')
82610                     .attr('class', 'qa_error-fill')
82611                     .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');
82612
82613                 svgEnter
82614                     .append('use')
82615                     .attr('class', 'icon-annotation')
82616                     .attr('width', '11px')
82617                     .attr('height', '11px')
82618                     .attr('transform', 'translate(4.5, 7)')
82619                     .attr('xlink:href', function(d) {
82620                         var picon = d.icon;
82621
82622                         if (!picon) {
82623                             return '';
82624                         } else {
82625                             var isMaki = /^maki-/.test(picon);
82626                             return '#' + picon + (isMaki ? '-11' : '');
82627                         }
82628                     });
82629
82630                 headerEnter
82631                     .append('div')
82632                     .attr('class', 'error-header-label')
82633                     .text(errorTitle);
82634             }
82635
82636
82637             improveOsmHeader.error = function(val) {
82638                 if (!arguments.length) { return _error; }
82639                 _error = val;
82640                 return improveOsmHeader;
82641             };
82642
82643
82644             return improveOsmHeader;
82645         }
82646
82647         function uiImproveOsmEditor(context) {
82648             var dispatch$1 = dispatch('change');
82649             var errorDetails = uiImproveOsmDetails(context);
82650             var errorComments = uiImproveOsmComments();
82651             var errorHeader = uiImproveOsmHeader();
82652             var quickLinks = uiQuickLinks();
82653
82654             var _error;
82655
82656
82657             function improveOsmEditor(selection) {
82658                 // quick links
82659                 var choices = [{
82660                     id: 'zoom_to',
82661                     label: 'inspector.zoom_to.title',
82662                     tooltip: function() {
82663                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
82664                     },
82665                     click: function zoomTo() {
82666                         context.mode().zoomToSelected();
82667                     }
82668                 }];
82669
82670
82671                 var header = selection.selectAll('.header')
82672                     .data([0]);
82673
82674                 var headerEnter = header.enter()
82675                     .append('div')
82676                     .attr('class', 'header fillL');
82677
82678                 headerEnter
82679                     .append('button')
82680                     .attr('class', 'fr error-editor-close')
82681                     .on('click', function() {
82682                         context.enter(modeBrowse(context));
82683                     })
82684                     .call(svgIcon('#iD-icon-close'));
82685
82686                 headerEnter
82687                     .append('h3')
82688                     .text(t('QA.improveOSM.title'));
82689
82690
82691                 var body = selection.selectAll('.body')
82692                     .data([0]);
82693
82694                 body = body.enter()
82695                     .append('div')
82696                     .attr('class', 'body')
82697                     .merge(body);
82698
82699                 var editor = body.selectAll('.error-editor')
82700                     .data([0]);
82701
82702                 editor.enter()
82703                     .append('div')
82704                     .attr('class', 'modal-section error-editor')
82705                     .merge(editor)
82706                     .call(errorHeader.error(_error))
82707                     .call(quickLinks.choices(choices))
82708                     .call(errorDetails.error(_error))
82709                     .call(errorComments.error(_error))
82710                     .call(improveOsmSaveSection);
82711             }
82712
82713             function improveOsmSaveSection(selection) {
82714                 var isSelected = (_error && _error.id === context.selectedErrorID());
82715                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
82716                 var saveSection = selection.selectAll('.error-save')
82717                     .data(
82718                         (isShown ? [_error] : []),
82719                         function(d) { return d.id + '-' + (d.status || 0); }
82720                     );
82721
82722                 // exit
82723                 saveSection.exit()
82724                     .remove();
82725
82726                 // enter
82727                 var saveSectionEnter = saveSection.enter()
82728                     .append('div')
82729                     .attr('class', 'error-save save-section cf');
82730
82731                 saveSectionEnter
82732                     .append('h4')
82733                     .attr('class', '.error-save-header')
82734                     .text(t('note.newComment'));
82735
82736                 saveSectionEnter
82737                     .append('textarea')
82738                     .attr('class', 'new-comment-input')
82739                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
82740                     .attr('maxlength', 1000)
82741                     .property('value', function(d) { return d.newComment; })
82742                     .call(utilNoAuto)
82743                     .on('input', changeInput)
82744                     .on('blur', changeInput);
82745
82746                 // update
82747                 saveSection = saveSectionEnter
82748                     .merge(saveSection)
82749                     .call(errorSaveButtons);
82750
82751                 function changeInput() {
82752                     var input = d3_select(this);
82753                     var val = input.property('value').trim();
82754
82755                     if (val === '') {
82756                         val = undefined;
82757                     }
82758
82759                     // store the unsaved comment with the error itself
82760                     _error = _error.update({ newComment: val });
82761
82762                     var errorService = services$1.improveOSM;
82763                     if (errorService) {
82764                         errorService.replaceError(_error);
82765                     }
82766
82767                     saveSection
82768                         .call(errorSaveButtons);
82769                 }
82770             }
82771
82772             function errorSaveButtons(selection) {
82773                 var isSelected = (_error && _error.id === context.selectedErrorID());
82774                 var buttonSection = selection.selectAll('.buttons')
82775                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
82776
82777                 // exit
82778                 buttonSection.exit()
82779                     .remove();
82780
82781                 // enter
82782                 var buttonEnter = buttonSection.enter()
82783                     .append('div')
82784                     .attr('class', 'buttons');
82785
82786                 buttonEnter
82787                     .append('button')
82788                     .attr('class', 'button comment-button action')
82789                     .text(t('QA.keepRight.save_comment'));
82790
82791                 buttonEnter
82792                     .append('button')
82793                     .attr('class', 'button close-button action');
82794
82795                 buttonEnter
82796                     .append('button')
82797                     .attr('class', 'button ignore-button action');
82798
82799
82800                 // update
82801                 buttonSection = buttonSection
82802                     .merge(buttonEnter);
82803
82804                 buttonSection.select('.comment-button')
82805                     .attr('disabled', function(d) {
82806                         return d.newComment === undefined ? true : null;
82807                     })
82808                     .on('click.comment', function(d) {
82809                         this.blur();    // avoid keeping focus on the button - #4641
82810                         var errorService = services$1.improveOSM;
82811                         if (errorService) {
82812                             errorService.postUpdate(d, function(err, error) {
82813                                 dispatch$1.call('change', error);
82814                             });
82815                         }
82816                     });
82817
82818                 buttonSection.select('.close-button')
82819                     .text(function(d) {
82820                         var andComment = (d.newComment !== undefined ? '_comment' : '');
82821                         return t('QA.keepRight.close' + andComment);
82822                     })
82823                     .on('click.close', function(d) {
82824                         this.blur();    // avoid keeping focus on the button - #4641
82825                         var errorService = services$1.improveOSM;
82826                         if (errorService) {
82827                             d.newStatus = 'SOLVED';
82828                             errorService.postUpdate(d, function(err, error) {
82829                                 dispatch$1.call('change', error);
82830                             });
82831                         }
82832                     });
82833
82834                 buttonSection.select('.ignore-button')
82835                     .text(function(d) {
82836                         var andComment = (d.newComment !== undefined ? '_comment' : '');
82837                         return t('QA.keepRight.ignore' + andComment);
82838                     })
82839                     .on('click.ignore', function(d) {
82840                         this.blur();    // avoid keeping focus on the button - #4641
82841                         var errorService = services$1.improveOSM;
82842                         if (errorService) {
82843                             d.newStatus = 'INVALID';
82844                             errorService.postUpdate(d, function(err, error) {
82845                                 dispatch$1.call('change', error);
82846                             });
82847                         }
82848                     });
82849             }
82850
82851             improveOsmEditor.error = function(val) {
82852                 if (!arguments.length) { return _error; }
82853                 _error = val;
82854                 return improveOsmEditor;
82855             };
82856
82857
82858             return utilRebind(improveOsmEditor, dispatch$1, 'on');
82859         }
82860
82861         function uiKeepRightDetails(context) {
82862             var _error;
82863
82864
82865             function errorDetail(d) {
82866                 var unknown = t('inspector.unknown');
82867
82868                 if (!d) { return unknown; }
82869                 var errorType = d.error_type;
82870                 var parentErrorType = d.parent_error_type;
82871
82872                 var et = en.QA.keepRight.errorTypes[errorType];
82873                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
82874
82875                 var detail;
82876                 if (et && et.description) {
82877                     detail = t('QA.keepRight.errorTypes.' + errorType + '.description', d.replacements);
82878                 } else if (pt && pt.description) {
82879                     detail = t('QA.keepRight.errorTypes.' + parentErrorType + '.description', d.replacements);
82880                 } else {
82881                     detail = unknown;
82882                 }
82883
82884                 return detail;
82885             }
82886
82887
82888             function keepRightDetails(selection) {
82889                 var details = selection.selectAll('.error-details')
82890                     .data(
82891                         (_error ? [_error] : []),
82892                         function(d) { return d.id + '-' + (d.status || 0); }
82893                     );
82894
82895                 details.exit()
82896                     .remove();
82897
82898                 var detailsEnter = details.enter()
82899                     .append('div')
82900                     .attr('class', 'error-details error-details-container');
82901
82902
82903                 // description
82904                 var descriptionEnter = detailsEnter
82905                     .append('div')
82906                     .attr('class', 'error-details-description');
82907
82908                 descriptionEnter
82909                     .append('h4')
82910                     .text(function() { return t('QA.keepRight.detail_description'); });
82911
82912                 descriptionEnter
82913                     .append('div')
82914                     .attr('class', 'error-details-description-text')
82915                     .html(errorDetail);
82916
82917                 // If there are entity links in the error message..
82918                 var relatedEntities = [];
82919                 descriptionEnter.selectAll('.error_entity_link, .error_object_link')
82920                     .each(function() {
82921                         var link = d3_select(this);
82922                         var isObjectLink = link.classed('error_object_link');
82923                         var entityID = isObjectLink ?
82924                             (utilEntityRoot(_error.object_type) + _error.object_id)
82925                             : this.textContent;
82926                         var entity = context.hasEntity(entityID);
82927
82928                         relatedEntities.push(entityID);
82929
82930                         // Add click handler
82931                         link
82932                             .on('mouseover', function() {
82933                                 context.surface().selectAll(utilEntityOrMemberSelector([entityID], context.graph()))
82934                                     .classed('hover', true);
82935                             })
82936                             .on('mouseout', function() {
82937                                 context.surface().selectAll('.hover')
82938                                     .classed('hover', false);
82939                             })
82940                             .on('click', function() {
82941                                 event.preventDefault();
82942                                 var osmlayer = context.layers().layer('osm');
82943                                 if (!osmlayer.enabled()) {
82944                                     osmlayer.enabled(true);
82945                                 }
82946
82947                                 context.map().centerZoomEase(_error.loc, 20);
82948
82949                                 if (entity) {
82950                                     context.enter(modeSelect(context, [entityID]));
82951                                 } else {
82952                                     context.loadEntity(entityID, function() {
82953                                         context.enter(modeSelect(context, [entityID]));
82954                                     });
82955                                 }
82956                             });
82957
82958                         // Replace with friendly name if possible
82959                         // (The entity may not yet be loaded into the graph)
82960                         if (entity) {
82961                             var name = utilDisplayName(entity);  // try to use common name
82962
82963                             if (!name && !isObjectLink) {
82964                                 var preset = context.presets().match(entity, context.graph());
82965                                 name = preset && !preset.isFallback() && preset.name();  // fallback to preset name
82966                             }
82967
82968                             if (name) {
82969                                 this.innerText = name;
82970                             }
82971                         }
82972                     });
82973
82974                 // Don't hide entities related to this error - #5880
82975                 context.features().forceVisible(relatedEntities);
82976             }
82977
82978
82979             keepRightDetails.error = function(val) {
82980                 if (!arguments.length) { return _error; }
82981                 _error = val;
82982                 return keepRightDetails;
82983             };
82984
82985
82986             return keepRightDetails;
82987         }
82988
82989         function uiKeepRightHeader() {
82990             var _error;
82991
82992
82993             function errorTitle(d) {
82994                 var unknown = t('inspector.unknown');
82995
82996                 if (!d) { return unknown; }
82997                 var errorType = d.error_type;
82998                 var parentErrorType = d.parent_error_type;
82999
83000                 var et = en.QA.keepRight.errorTypes[errorType];
83001                 var pt = en.QA.keepRight.errorTypes[parentErrorType];
83002
83003                 if (et && et.title) {
83004                     return t('QA.keepRight.errorTypes.' + errorType + '.title');
83005                 } else if (pt && pt.title) {
83006                     return t('QA.keepRight.errorTypes.' + parentErrorType + '.title');
83007                 } else {
83008                     return unknown;
83009                 }
83010             }
83011
83012
83013             function keepRightHeader(selection) {
83014                 var header = selection.selectAll('.error-header')
83015                     .data(
83016                         (_error ? [_error] : []),
83017                         function(d) { return d.id + '-' + (d.status || 0); }
83018                     );
83019
83020                 header.exit()
83021                     .remove();
83022
83023                 var headerEnter = header.enter()
83024                     .append('div')
83025                     .attr('class', 'error-header');
83026
83027                 var iconEnter = headerEnter
83028                     .append('div')
83029                     .attr('class', 'error-header-icon')
83030                     .classed('new', function(d) { return d.id < 0; });
83031
83032                 iconEnter
83033                     .append('div')
83034                     .attr('class', function(d) {
83035                         return 'preset-icon-28 qa_error ' + d.service + ' error_id-' + d.id + ' error_type-' + d.parent_error_type;
83036                     })
83037                     .call(svgIcon('#iD-icon-bolt', 'qa_error-fill'));
83038
83039                 headerEnter
83040                     .append('div')
83041                     .attr('class', 'error-header-label')
83042                     .text(errorTitle);
83043             }
83044
83045
83046             keepRightHeader.error = function(val) {
83047                 if (!arguments.length) { return _error; }
83048                 _error = val;
83049                 return keepRightHeader;
83050             };
83051
83052
83053             return keepRightHeader;
83054         }
83055
83056         function uiViewOnKeepRight() {
83057             var _error;   // a keepright error
83058
83059
83060             function viewOnKeepRight(selection) {
83061                 var url;
83062                 if (services$1.keepRight && (_error instanceof qaError)) {
83063                     url = services$1.keepRight.errorURL(_error);
83064                 }
83065
83066                 var link = selection.selectAll('.view-on-keepRight')
83067                     .data(url ? [url] : []);
83068
83069                 // exit
83070                 link.exit()
83071                     .remove();
83072
83073                 // enter
83074                 var linkEnter = link.enter()
83075                     .append('a')
83076                     .attr('class', 'view-on-keepRight')
83077                     .attr('target', '_blank')
83078                     .attr('href', function(d) { return d; })
83079                     .call(svgIcon('#iD-icon-out-link', 'inline'));
83080
83081                 linkEnter
83082                     .append('span')
83083                     .text(t('inspector.view_on_keepRight'));
83084             }
83085
83086
83087             viewOnKeepRight.what = function(val) {
83088                 if (!arguments.length) { return _error; }
83089                 _error = val;
83090                 return viewOnKeepRight;
83091             };
83092
83093             return viewOnKeepRight;
83094         }
83095
83096         function uiKeepRightEditor(context) {
83097             var dispatch$1 = dispatch('change');
83098             var keepRightDetails = uiKeepRightDetails(context);
83099             var keepRightHeader = uiKeepRightHeader();
83100             var quickLinks = uiQuickLinks();
83101
83102             var _error;
83103
83104
83105             function keepRightEditor(selection) {
83106                 // quick links
83107                 var choices = [{
83108                     id: 'zoom_to',
83109                     label: 'inspector.zoom_to.title',
83110                     tooltip: function() {
83111                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_issue'), t('inspector.zoom_to.key'));
83112                     },
83113                     click: function zoomTo() {
83114                         context.mode().zoomToSelected();
83115                     }
83116                 }];
83117
83118
83119                 var header = selection.selectAll('.header')
83120                     .data([0]);
83121
83122                 var headerEnter = header.enter()
83123                     .append('div')
83124                     .attr('class', 'header fillL');
83125
83126                 headerEnter
83127                     .append('button')
83128                     .attr('class', 'fr error-editor-close')
83129                     .on('click', function() {
83130                         context.enter(modeBrowse(context));
83131                     })
83132                     .call(svgIcon('#iD-icon-close'));
83133
83134                 headerEnter
83135                     .append('h3')
83136                     .text(t('QA.keepRight.title'));
83137
83138
83139                 var body = selection.selectAll('.body')
83140                     .data([0]);
83141
83142                 body = body.enter()
83143                     .append('div')
83144                     .attr('class', 'body')
83145                     .merge(body);
83146
83147                 var editor = body.selectAll('.error-editor')
83148                     .data([0]);
83149
83150                 editor.enter()
83151                     .append('div')
83152                     .attr('class', 'modal-section error-editor')
83153                     .merge(editor)
83154                     .call(keepRightHeader.error(_error))
83155                     .call(quickLinks.choices(choices))
83156                     .call(keepRightDetails.error(_error))
83157                     .call(keepRightSaveSection);
83158
83159
83160                 var footer = selection.selectAll('.footer')
83161                     .data([0]);
83162
83163                 footer.enter()
83164                     .append('div')
83165                     .attr('class', 'footer')
83166                     .merge(footer)
83167                     .call(uiViewOnKeepRight().what(_error));
83168             }
83169
83170
83171             function keepRightSaveSection(selection) {
83172                 var isSelected = (_error && _error.id === context.selectedErrorID());
83173                 var isShown = (_error && (isSelected || _error.newComment || _error.comment));
83174                 var saveSection = selection.selectAll('.error-save')
83175                     .data(
83176                         (isShown ? [_error] : []),
83177                         function(d) { return d.id + '-' + (d.status || 0); }
83178                     );
83179
83180                 // exit
83181                 saveSection.exit()
83182                     .remove();
83183
83184                 // enter
83185                 var saveSectionEnter = saveSection.enter()
83186                     .append('div')
83187                     .attr('class', 'error-save save-section cf');
83188
83189                 saveSectionEnter
83190                     .append('h4')
83191                     .attr('class', '.error-save-header')
83192                     .text(t('QA.keepRight.comment'));
83193
83194                 saveSectionEnter
83195                     .append('textarea')
83196                     .attr('class', 'new-comment-input')
83197                     .attr('placeholder', t('QA.keepRight.comment_placeholder'))
83198                     .attr('maxlength', 1000)
83199                     .property('value', function(d) { return d.newComment || d.comment; })
83200                     .call(utilNoAuto)
83201                     .on('input', changeInput)
83202                     .on('blur', changeInput);
83203
83204                 // update
83205                 saveSection = saveSectionEnter
83206                     .merge(saveSection)
83207                     .call(keepRightSaveButtons);
83208
83209
83210                 function changeInput() {
83211                     var input = d3_select(this);
83212                     var val = input.property('value').trim();
83213
83214                     if (val === _error.comment) {
83215                         val = undefined;
83216                     }
83217
83218                     // store the unsaved comment with the error itself
83219                     _error = _error.update({ newComment: val });
83220
83221                     var keepRight = services$1.keepRight;
83222                     if (keepRight) {
83223                         keepRight.replaceError(_error);  // update keepright cache
83224                     }
83225
83226                     saveSection
83227                         .call(keepRightSaveButtons);
83228                 }
83229             }
83230
83231
83232             function keepRightSaveButtons(selection) {
83233                 var isSelected = (_error && _error.id === context.selectedErrorID());
83234                 var buttonSection = selection.selectAll('.buttons')
83235                     .data((isSelected ? [_error] : []), function(d) { return d.status + d.id; });
83236
83237                 // exit
83238                 buttonSection.exit()
83239                     .remove();
83240
83241                 // enter
83242                 var buttonEnter = buttonSection.enter()
83243                     .append('div')
83244                     .attr('class', 'buttons');
83245
83246                 buttonEnter
83247                     .append('button')
83248                     .attr('class', 'button comment-button action')
83249                     .text(t('QA.keepRight.save_comment'));
83250
83251                 buttonEnter
83252                     .append('button')
83253                     .attr('class', 'button close-button action');
83254
83255                 buttonEnter
83256                     .append('button')
83257                     .attr('class', 'button ignore-button action');
83258
83259
83260                 // update
83261                 buttonSection = buttonSection
83262                     .merge(buttonEnter);
83263
83264                 buttonSection.select('.comment-button')   // select and propagate data
83265                     .attr('disabled', function(d) {
83266                         return d.newComment === undefined ? true : null;
83267                     })
83268                     .on('click.comment', function(d) {
83269                         this.blur();    // avoid keeping focus on the button - #4641
83270                         var keepRight = services$1.keepRight;
83271                         if (keepRight) {
83272                             keepRight.postKeepRightUpdate(d, function(err, error) {
83273                                 dispatch$1.call('change', error);
83274                             });
83275                         }
83276                     });
83277
83278                 buttonSection.select('.close-button')   // select and propagate data
83279                     .text(function(d) {
83280                         var andComment = (d.newComment !== undefined ? '_comment' : '');
83281                         return t('QA.keepRight.close' + andComment);
83282                     })
83283                     .on('click.close', function(d) {
83284                         this.blur();    // avoid keeping focus on the button - #4641
83285                         var keepRight = services$1.keepRight;
83286                         if (keepRight) {
83287                             d.state = 'ignore_t';   // ignore temporarily (error fixed)
83288                             keepRight.postKeepRightUpdate(d, function(err, error) {
83289                                 dispatch$1.call('change', error);
83290                             });
83291                         }
83292                     });
83293
83294                 buttonSection.select('.ignore-button')   // select and propagate data
83295                     .text(function(d) {
83296                         var andComment = (d.newComment !== undefined ? '_comment' : '');
83297                         return t('QA.keepRight.ignore' + andComment);
83298                     })
83299                     .on('click.ignore', function(d) {
83300                         this.blur();    // avoid keeping focus on the button - #4641
83301                         var keepRight = services$1.keepRight;
83302                         if (keepRight) {
83303                             d.state = 'ignore';   // ignore permanently (false positive)
83304                             keepRight.postKeepRightUpdate(d, function(err, error) {
83305                                 dispatch$1.call('change', error);
83306                             });
83307                         }
83308                     });
83309             }
83310
83311
83312             keepRightEditor.error = function(val) {
83313                 if (!arguments.length) { return _error; }
83314                 _error = val;
83315                 return keepRightEditor;
83316             };
83317
83318
83319             return utilRebind(keepRightEditor, dispatch$1, 'on');
83320         }
83321
83322         function modeSelectError(context, selectedErrorID, selectedErrorService) {
83323             var mode = {
83324                 id: 'select-error',
83325                 button: 'browse'
83326             };
83327
83328             var keybinding = utilKeybinding('select-error');
83329
83330             var errorService = services$1[selectedErrorService];
83331             var errorEditor;
83332             switch (selectedErrorService) {
83333                 case 'improveOSM':
83334                     errorEditor = uiImproveOsmEditor(context)
83335                     .on('change', function() {
83336                         context.map().pan([0,0]);  // trigger a redraw
83337                         var error = checkSelectedID();
83338                         if (!error) { return; }
83339                         context.ui().sidebar
83340                             .show(errorEditor.error(error));
83341                     });
83342                     break;
83343                 case 'keepRight':
83344                     errorEditor = uiKeepRightEditor(context)
83345                     .on('change', function() {
83346                         context.map().pan([0,0]);  // trigger a redraw
83347                         var error = checkSelectedID();
83348                         if (!error) { return; }
83349                         context.ui().sidebar
83350                             .show(errorEditor.error(error));
83351                     });
83352                     break;
83353             }
83354
83355
83356             var behaviors = [
83357                 behaviorBreathe(),
83358                 behaviorHover(context),
83359                 behaviorSelect(context),
83360                 behaviorLasso(context),
83361                 modeDragNode(context).behavior,
83362                 modeDragNote(context).behavior
83363             ];
83364
83365
83366             function checkSelectedID() {
83367                 if (!errorService) { return; }
83368                 var error = errorService.getError(selectedErrorID);
83369                 if (!error) {
83370                     context.enter(modeBrowse(context));
83371                 }
83372                 return error;
83373             }
83374
83375
83376             mode.zoomToSelected = function() {
83377                 if (!errorService) { return; }
83378                 var error = errorService.getError(selectedErrorID);
83379                 if (error) {
83380                     context.map().centerZoomEase(error.loc, 20);
83381                 }
83382             };
83383
83384
83385             mode.enter = function() {
83386                 var error = checkSelectedID();
83387                 if (!error) { return; }
83388
83389                 behaviors.forEach(context.install);
83390                 keybinding
83391                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
83392                     .on('⎋', esc, true);
83393
83394                 d3_select(document)
83395                     .call(keybinding);
83396
83397                 selectError();
83398
83399                 var sidebar = context.ui().sidebar;
83400                 sidebar.show(errorEditor.error(error));
83401
83402                 context.map()
83403                     .on('drawn.select-error', selectError);
83404
83405
83406                 // class the error as selected, or return to browse mode if the error is gone
83407                 function selectError(drawn) {
83408                     if (!checkSelectedID()) { return; }
83409
83410                     var selection = context.surface()
83411                         .selectAll('.error_id-' + selectedErrorID + '.' + selectedErrorService);
83412
83413                     if (selection.empty()) {
83414                         // Return to browse mode if selected DOM elements have
83415                         // disappeared because the user moved them out of view..
83416                         var source = event && event.type === 'zoom' && event.sourceEvent;
83417                         if (drawn && source && (source.type === 'mousemove' || source.type === 'touchmove')) {
83418                             context.enter(modeBrowse(context));
83419                         }
83420
83421                     } else {
83422                         selection
83423                             .classed('selected', true);
83424
83425                         context.selectedErrorID(selectedErrorID);
83426                     }
83427                 }
83428
83429                 function esc() {
83430                     if (d3_select('.combobox').size()) { return; }
83431                     context.enter(modeBrowse(context));
83432                 }
83433             };
83434
83435
83436             mode.exit = function() {
83437                 behaviors.forEach(context.uninstall);
83438
83439                 d3_select(document)
83440                     .call(keybinding.unbind);
83441
83442                 context.surface()
83443                     .selectAll('.qa_error.selected')
83444                     .classed('selected hover', false);
83445
83446                 context.map()
83447                     .on('drawn.select-error', null);
83448
83449                 context.ui().sidebar
83450                     .hide();
83451
83452                 context.selectedErrorID(null);
83453                 context.features().forceVisible([]);
83454             };
83455
83456
83457             return mode;
83458         }
83459
83460         function behaviorSelect(context) {
83461             // legacy option to show menu on every click
83462             var isShowAlways = +context.storage('edit-menu-show-always') === 1;
83463             var tolerance = 4;
83464             var _lastMouse = null;
83465             var _suppressMenu = true;
83466             var _p1 = null;
83467
83468
83469             function point() {
83470                 return d3_mouse(context.container().node());
83471             }
83472
83473
83474             function keydown() {
83475                 var e = event;
83476                 if (e && e.shiftKey) {
83477                     context.surface()
83478                         .classed('behavior-multiselect', true);
83479                 }
83480
83481                 if (e && e.keyCode === 93) {  // context menu
83482                     e.preventDefault();
83483                     e.stopPropagation();
83484                 }
83485             }
83486
83487
83488             function keyup() {
83489                 var e = event;
83490                 if (!e || !e.shiftKey) {
83491                     context.surface()
83492                         .classed('behavior-multiselect', false);
83493                 }
83494
83495
83496                 if (e && e.keyCode === 93) {  // context menu
83497                     e.preventDefault();
83498                     e.stopPropagation();
83499                     contextmenu();
83500                 }
83501             }
83502
83503
83504             function mousedown() {
83505                 if (!_p1) {
83506                     _p1 = point();
83507                 }
83508                 d3_select(window)
83509                     .on('mouseup.select', mouseup, true);
83510
83511                 _suppressMenu = !isShowAlways;
83512             }
83513
83514
83515             function mousemove() {
83516                 if (event) {
83517                     _lastMouse = event;
83518                 }
83519             }
83520
83521
83522             function mouseup() {
83523                 click();
83524             }
83525
83526
83527             function contextmenu() {
83528                 var e = event;
83529                 e.preventDefault();
83530                 e.stopPropagation();
83531
83532                 if (!+e.clientX && !+e.clientY) {
83533                     if (_lastMouse) {
83534                         e.sourceEvent = _lastMouse;
83535                     } else {
83536                         return;
83537                     }
83538                 }
83539
83540                 if (!_p1) {
83541                     _p1 = point();
83542                 }
83543                 _suppressMenu = false;
83544                 click();
83545             }
83546
83547
83548             function click() {
83549                 d3_select(window)
83550                     .on('mouseup.select', null, true);
83551
83552                 if (!_p1) { return; }
83553                 var p2 = point();
83554                 var dist = geoVecLength(_p1, p2);
83555                 _p1 = null;
83556                 if (dist > tolerance) { return; }
83557
83558                 // Defer processing the click,
83559                 // because this click may trigger a blur event,
83560                 // and the blur event may trigger a tag change,
83561                 // and we really want that tag change to go to the already selected entity
83562                 // and not the one that we are about to select with the click  #6028, #5878
83563                 // (Be very careful entering modeSelect anywhere that might also blur a field!)
83564                 var datum = event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
83565                 var isMultiselect = event.shiftKey || d3_select('#surface .lasso').node();
83566                 window.setTimeout(function() {
83567                     processClick(datum, isMultiselect);
83568                 }, 20);  // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
83569             }
83570
83571
83572             function processClick(datum, isMultiselect) {
83573                 var mode = context.mode();
83574
83575                 var entity = datum && datum.properties && datum.properties.entity;
83576                 if (entity) { datum = entity; }
83577
83578                 if (datum && datum.type === 'midpoint') {
83579                     datum = datum.parents[0];
83580                 }
83581
83582                 if (datum instanceof osmEntity) {    // clicked an entity..
83583                     var selectedIDs = context.selectedIDs();
83584                     context.selectedNoteID(null);
83585                     context.selectedErrorID(null);
83586
83587                     if (!isMultiselect) {
83588                         if (selectedIDs.length > 1 && (!_suppressMenu && !isShowAlways)) {
83589                             // multiple things already selected, just show the menu...
83590                             mode.suppressMenu(false).reselect();
83591                         } else {
83592                             // select a single thing..
83593                             context.enter(modeSelect(context, [datum.id]).suppressMenu(_suppressMenu));
83594                         }
83595
83596                     } else {
83597                         if (selectedIDs.indexOf(datum.id) !== -1) {
83598                             // clicked entity is already in the selectedIDs list..
83599                             if (!_suppressMenu && !isShowAlways) {
83600                                 // don't deselect clicked entity, just show the menu.
83601                                 mode.suppressMenu(false).reselect();
83602                             } else {
83603                                 // deselect clicked entity, then reenter select mode or return to browse mode..
83604                                 selectedIDs = selectedIDs.filter(function(id) { return id !== datum.id; });
83605                                 context.enter(selectedIDs.length ? modeSelect(context, selectedIDs) : modeBrowse(context));
83606                             }
83607                         } else {
83608                             // clicked entity is not in the selected list, add it..
83609                             selectedIDs = selectedIDs.concat([datum.id]);
83610                             context.enter(modeSelect(context, selectedIDs).suppressMenu(_suppressMenu));
83611                         }
83612                     }
83613
83614                 } else if (datum && datum.__featurehash__ && !isMultiselect) {    // clicked Data..
83615                     context
83616                         .selectedNoteID(null)
83617                         .enter(modeSelectData(context, datum));
83618
83619                 } else if (datum instanceof osmNote && !isMultiselect) {    // clicked a Note..
83620                     context
83621                         .selectedNoteID(datum.id)
83622                         .enter(modeSelectNote(context, datum.id));
83623
83624                 } else if (datum instanceof qaError & !isMultiselect) {  // clicked an external QA error
83625                     context
83626                         .selectedErrorID(datum.id)
83627                         .enter(modeSelectError(context, datum.id, datum.service));
83628
83629                 } else {    // clicked nothing..
83630                     context.selectedNoteID(null);
83631                     context.selectedErrorID(null);
83632                     if (!isMultiselect && mode.id !== 'browse') {
83633                         context.enter(modeBrowse(context));
83634                     }
83635                 }
83636
83637                 // reset for next time..
83638                 _suppressMenu = true;
83639             }
83640
83641
83642             function behavior(selection) {
83643                 _lastMouse = null;
83644                 _suppressMenu = true;
83645                 _p1 = null;
83646
83647                 d3_select(window)
83648                     .on('keydown.select', keydown)
83649                     .on('keyup.select', keyup)
83650                     .on('contextmenu.select-window', function() {
83651                         // Edge and IE really like to show the contextmenu on the
83652                         // menubar when user presses a keyboard menu button
83653                         // even after we've already preventdefaulted the key event.
83654                         var e = event;
83655                         if (+e.clientX === 0 && +e.clientY === 0) {
83656                             event.preventDefault();
83657                             event.stopPropagation();
83658                         }
83659                     });
83660
83661                 selection
83662                     .on('mousedown.select', mousedown)
83663                     .on('mousemove.select', mousemove)
83664                     .on('contextmenu.select', contextmenu);
83665
83666                 if (event && event.shiftKey) {
83667                     context.surface()
83668                         .classed('behavior-multiselect', true);
83669                 }
83670             }
83671
83672
83673             behavior.off = function(selection) {
83674                 d3_select(window)
83675                     .on('keydown.select', null)
83676                     .on('keyup.select', null)
83677                     .on('contextmenu.select-window', null)
83678                     .on('mouseup.select', null, true);
83679
83680                 selection
83681                     .on('mousedown.select', null)
83682                     .on('mousemove.select', null)
83683                     .on('contextmenu.select', null);
83684
83685                 context.surface()
83686                     .classed('behavior-multiselect', false);
83687             };
83688
83689
83690             return behavior;
83691         }
83692
83693         function behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph) {
83694
83695             var origWay = context.entity(wayID);
83696
83697             var annotation = t((origWay.isDegenerate() ?
83698                 'operations.start.annotation.' :
83699                 'operations.continue.annotation.') + context.geometry(wayID)
83700             );
83701
83702             var behavior = behaviorDraw(context);
83703             behavior.hover().initialNodeID(index ? origWay.nodes[index] :
83704                 (origWay.isClosed() ? origWay.nodes[origWay.nodes.length - 2] : origWay.nodes[origWay.nodes.length - 1]));
83705
83706             var _tempEdits = 0;
83707
83708             var end = osmNode({ loc: context.map().mouseCoordinates() });
83709
83710             // Push an annotated state for undo to return back to.
83711             // We must make sure to remove this edit later.
83712             context.pauseChangeDispatch();
83713             context.perform(actionNoop(), annotation);
83714             _tempEdits++;
83715
83716             // Add the drawing node to the graph.
83717             // We must make sure to remove this edit later.
83718             context.perform(_actionAddDrawNode());
83719             _tempEdits++;
83720             context.resumeChangeDispatch();
83721
83722
83723             function keydown() {
83724                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
83725                     if (context.surface().classed('nope')) {
83726                         context.surface()
83727                             .classed('nope-suppressed', true);
83728                     }
83729                     context.surface()
83730                         .classed('nope', false)
83731                         .classed('nope-disabled', true);
83732                 }
83733             }
83734
83735
83736             function keyup() {
83737                 if (event.keyCode === utilKeybinding.modifierCodes.alt) {
83738                     if (context.surface().classed('nope-suppressed')) {
83739                         context.surface()
83740                             .classed('nope', true);
83741                     }
83742                     context.surface()
83743                         .classed('nope-suppressed', false)
83744                         .classed('nope-disabled', false);
83745                 }
83746             }
83747
83748
83749             function allowsVertex(d) {
83750                 return d.geometry(context.graph()) === 'vertex' || context.presets().allowsVertex(d, context.graph());
83751             }
83752
83753
83754             // related code
83755             // - `mode/drag_node.js`     `doMode()`
83756             // - `behavior/draw.js`      `click()`
83757             // - `behavior/draw_way.js`  `move()`
83758             function move(datum) {
83759                 context.surface().classed('nope-disabled', event.altKey);
83760
83761                 var targetLoc = datum && datum.properties && datum.properties.entity && allowsVertex(datum.properties.entity) && datum.properties.entity.loc;
83762                 var targetNodes = datum && datum.properties && datum.properties.nodes;
83763                 var loc = context.map().mouseCoordinates();
83764
83765                 if (targetLoc) {   // snap to node/vertex - a point target with `.loc`
83766                     loc = targetLoc;
83767
83768                 } else if (targetNodes) {   // snap to way - a line target with `.nodes`
83769                     var choice = geoChooseEdge(targetNodes, context.mouse(), context.projection, end.id);
83770                     if (choice) {
83771                         loc = choice.loc;
83772                     }
83773                 }
83774
83775                 context.replace(actionMoveNode(end.id, loc));
83776                 end = context.entity(end.id);
83777                 checkGeometry(false);
83778             }
83779
83780
83781             // Check whether this edit causes the geometry to break.
83782             // If so, class the surface with a nope cursor.
83783             // `finishDraw` - Only checks the relevant line segments if finishing drawing
83784             function checkGeometry(finishDraw) {
83785                 var nopeDisabled = context.surface().classed('nope-disabled');
83786                 var isInvalid = isInvalidGeometry(end, context.graph(), finishDraw);
83787
83788                 if (nopeDisabled) {
83789                     context.surface()
83790                         .classed('nope', false)
83791                         .classed('nope-suppressed', isInvalid);
83792                 } else {
83793                     context.surface()
83794                         .classed('nope', isInvalid)
83795                         .classed('nope-suppressed', false);
83796                 }
83797             }
83798
83799
83800             function isInvalidGeometry(entity, graph, finishDraw) {
83801                 var parents = graph.parentWays(entity);
83802
83803                 for (var i = 0; i < parents.length; i++) {
83804                     var parent = parents[i];
83805                     var nodes = graph.childNodes(parent).slice();  // shallow copy
83806
83807                     if (origWay.isClosed()) { // Check if Area
83808                         if (finishDraw) {
83809                             if (nodes.length < 3) { return false; }
83810                             nodes.splice(-2, 1);
83811                             entity = nodes[nodes.length-2];
83812                         } else {
83813                             nodes.pop();
83814                         }
83815                     } else { // Line
83816                         if (finishDraw) {
83817                             nodes.pop();
83818                         }
83819                     }
83820
83821                     if (geoHasSelfIntersections(nodes, entity.id)) {
83822                         return true;
83823                     }
83824                 }
83825
83826                 return false;
83827             }
83828
83829
83830             function undone() {
83831                 context.pauseChangeDispatch();
83832                 // Undo popped the history back to the initial annotated no-op edit.
83833                 _tempEdits = 0;     // We will deal with the temp edits here
83834                 context.pop(1);     // Remove initial no-op edit
83835
83836                 if (context.graph() === baselineGraph) {    // We've undone back to the beginning
83837                     // baselineGraph may be behind startGraph if this way was added rather than continued
83838                     resetToStartGraph();
83839                     context.resumeChangeDispatch();
83840                     context.enter(modeSelect(context, [wayID]));
83841                 } else {
83842                     // Remove whatever segment was drawn previously and continue drawing
83843                     context.pop(1);
83844                     context.resumeChangeDispatch();
83845                     context.enter(mode);
83846                 }
83847             }
83848
83849
83850             function setActiveElements() {
83851                 context.surface().selectAll('.' + end.id)
83852                     .classed('active', true);
83853             }
83854
83855
83856             function resetToStartGraph() {
83857                 while (context.graph() !== startGraph) {
83858                     context.pop();
83859                 }
83860             }
83861
83862
83863             var drawWay = function(surface) {
83864                 behavior
83865                     .on('move', move)
83866                     .on('click', drawWay.add)
83867                     .on('clickWay', drawWay.addWay)
83868                     .on('clickNode', drawWay.addNode)
83869                     .on('undo', context.undo)
83870                     .on('cancel', drawWay.cancel)
83871                     .on('finish', drawWay.finish);
83872
83873                 d3_select(window)
83874                     .on('keydown.drawWay', keydown)
83875                     .on('keyup.drawWay', keyup);
83876
83877                 context.map()
83878                     .dblclickEnable(false)
83879                     .on('drawn.draw', setActiveElements);
83880
83881                 setActiveElements();
83882
83883                 surface.call(behavior);
83884
83885                 context.history()
83886                     .on('undone.draw', undone);
83887             };
83888
83889
83890             drawWay.off = function(surface) {
83891                 // Drawing was interrupted unexpectedly.
83892                 // This can happen if the user changes modes,
83893                 // clicks geolocate button, a hashchange event occurs, etc.
83894                 if (_tempEdits) {
83895                     context.pauseChangeDispatch();
83896                     context.pop(_tempEdits);
83897                     resetToStartGraph();
83898                     context.resumeChangeDispatch();
83899                 }
83900
83901                 context.map()
83902                     .on('drawn.draw', null);
83903
83904                 surface.call(behavior.off)
83905                     .selectAll('.active')
83906                     .classed('active', false);
83907
83908                 surface
83909                     .classed('nope', false)
83910                     .classed('nope-suppressed', false)
83911                     .classed('nope-disabled', false);
83912
83913                 d3_select(window)
83914                     .on('keydown.hover', null)
83915                     .on('keyup.hover', null);
83916
83917                 context.history()
83918                     .on('undone.draw', null);
83919             };
83920
83921
83922             function _actionAddDrawNode() {
83923                 return function(graph) {
83924                     return graph
83925                         .replace(end)
83926                         .replace(origWay.addNode(end.id, index));
83927                 };
83928             }
83929
83930
83931             function _actionReplaceDrawNode(newNode) {
83932                 return function(graph) {
83933                     return graph
83934                         .replace(origWay.addNode(newNode.id, index))
83935                         .remove(end);
83936                 };
83937             }
83938
83939
83940             // Accept the current position of the drawing node and continue drawing.
83941             drawWay.add = function(loc, d) {
83942                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
83943                     return;   // can't click here
83944                 }
83945
83946                 context.pauseChangeDispatch();
83947                 context.pop(_tempEdits);
83948                 _tempEdits = 0;
83949
83950                 context.perform(
83951                     _actionAddDrawNode(),
83952                     annotation
83953                 );
83954
83955                 context.resumeChangeDispatch();
83956                 checkGeometry(false);   // finishDraw = false
83957                 context.enter(mode);
83958             };
83959
83960
83961             // Connect the way to an existing way.
83962             drawWay.addWay = function(loc, edge, d) {
83963                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
83964                     return;   // can't click here
83965                 }
83966
83967                 context.pauseChangeDispatch();
83968                 context.pop(_tempEdits);
83969                 _tempEdits = 0;
83970
83971                 context.perform(
83972                     _actionAddDrawNode(),
83973                     actionAddMidpoint({ loc: loc, edge: edge }, end),
83974                     annotation
83975                 );
83976
83977                 context.resumeChangeDispatch();
83978                 checkGeometry(false);   // finishDraw = false
83979                 context.enter(mode);
83980             };
83981
83982
83983             // Connect the way to an existing node and continue drawing.
83984             drawWay.addNode = function(node, d) {
83985                 if ((d && d.properties && d.properties.nope) || context.surface().classed('nope')) {
83986                     return;   // can't click here
83987                 }
83988
83989                 context.pauseChangeDispatch();
83990                 context.pop(_tempEdits);
83991                 _tempEdits = 0;
83992
83993                 context.perform(
83994                     _actionReplaceDrawNode(node),
83995                     annotation
83996                 );
83997
83998                 context.resumeChangeDispatch();
83999                 checkGeometry(false);   // finishDraw = false
84000                 context.enter(mode);
84001             };
84002
84003
84004             // Finish the draw operation, removing the temporary edits.
84005             // If the way has enough nodes to be valid, it's selected.
84006             // Otherwise, delete everything and return to browse mode.
84007             drawWay.finish = function() {
84008                 checkGeometry(true);   // finishDraw = true
84009                 if (context.surface().classed('nope')) {
84010                     return;   // can't click here
84011                 }
84012
84013                 context.pauseChangeDispatch();
84014                 context.pop(_tempEdits);
84015                 _tempEdits = 0;
84016
84017                 var way = context.hasEntity(wayID);
84018                 if (!way || way.isDegenerate()) {
84019                     drawWay.cancel();
84020                     return;
84021                 }
84022
84023                 context.resumeChangeDispatch();
84024
84025                 window.setTimeout(function() {
84026                     context.map().dblclickEnable(true);
84027                 }, 1000);
84028
84029                 var isNewFeature = !mode.isContinuing;
84030                 context.enter(modeSelect(context, [wayID]).newFeature(isNewFeature));
84031             };
84032
84033
84034             // Cancel the draw operation, delete everything, and return to browse mode.
84035             drawWay.cancel = function() {
84036                 context.pauseChangeDispatch();
84037                 context.pop(_tempEdits);
84038                 _tempEdits = 0;
84039
84040                 resetToStartGraph();
84041                 context.resumeChangeDispatch();
84042
84043                 window.setTimeout(function() {
84044                     context.map().dblclickEnable(true);
84045                 }, 1000);
84046
84047                 context.surface()
84048                     .classed('nope', false)
84049                     .classed('nope-disabled', false)
84050                     .classed('nope-suppressed', false);
84051
84052                 context.enter(modeBrowse(context));
84053             };
84054
84055
84056             drawWay.activeID = function() {
84057                 if (!arguments.length) { return end.id; }
84058                 // no assign
84059                 return drawWay;
84060             };
84061
84062
84063             drawWay.tail = function(text) {
84064                 behavior.tail(text);
84065                 return drawWay;
84066             };
84067
84068
84069             return drawWay;
84070         }
84071
84072         function modeDrawLine(context, wayID, startGraph, baselineGraph, button, affix, continuing) {
84073             var mode = {
84074                 button: button,
84075                 id: 'draw-line'
84076             };
84077
84078             var behavior;
84079
84080             mode.wayID = wayID;
84081
84082             mode.isContinuing = continuing;
84083
84084             mode.enter = function() {
84085                 var way = context.entity(wayID);
84086                 var index = (affix === 'prefix') ? 0 : undefined;
84087                 var headID = (affix === 'prefix') ? way.first() : way.last();
84088
84089                 behavior = behaviorDrawWay(context, wayID, index, mode, startGraph, baselineGraph)
84090                     .tail(t('modes.draw_line.tail'));
84091
84092                 var addNode = behavior.addNode;
84093                 behavior.addNode = function(node, d) {
84094                     if (node.id === headID) {
84095                         behavior.finish();
84096                     } else {
84097                         addNode(node, d);
84098                     }
84099                 };
84100
84101                 context.install(behavior);
84102             };
84103
84104
84105             mode.exit = function() {
84106                 context.uninstall(behavior);
84107             };
84108
84109
84110             mode.selectedIDs = function() {
84111                 return [wayID];
84112             };
84113
84114
84115             mode.activeID = function() {
84116                 return (behavior && behavior.activeID()) || [];
84117             };
84118
84119             return mode;
84120         }
84121
84122         function operationContinue(selectedIDs, context) {
84123             var graph = context.graph();
84124             var entities = selectedIDs.map(function(id) { return graph.entity(id); });
84125             var geometries = Object.assign(
84126                 { line: [], vertex: [] },
84127                 utilArrayGroupBy(entities, function(entity) { return entity.geometry(graph); })
84128             );
84129             var vertex = geometries.vertex[0];
84130
84131
84132             function candidateWays() {
84133                 return graph.parentWays(vertex).filter(function(parent) {
84134                     return parent.geometry(graph) === 'line' &&
84135                         !parent.isClosed() &&
84136                         parent.affix(vertex.id) &&
84137                         (geometries.line.length === 0 || geometries.line[0] === parent);
84138                 });
84139             }
84140
84141
84142             var operation = function() {
84143                 var candidate = candidateWays()[0];
84144                 context.enter(
84145                     modeDrawLine(context, candidate.id, context.graph(), context.graph(), 'line', candidate.affix(vertex.id), true)
84146                 );
84147             };
84148
84149
84150             operation.available = function() {
84151                 return geometries.vertex.length === 1 &&
84152                     geometries.line.length <= 1 &&
84153                     !context.features().hasHiddenConnections(vertex, context.graph());
84154             };
84155
84156
84157             operation.disabled = function() {
84158                 var candidates = candidateWays();
84159                 if (candidates.length === 0) {
84160                     return 'not_eligible';
84161                 } else if (candidates.length > 1) {
84162                     return 'multiple';
84163                 }
84164
84165                 return false;
84166             };
84167
84168
84169             operation.tooltip = function() {
84170                 var disable = operation.disabled();
84171                 return disable ?
84172                     t('operations.continue.' + disable) :
84173                     t('operations.continue.description');
84174             };
84175
84176
84177             operation.annotation = function() {
84178                 return t('operations.continue.annotation.line');
84179             };
84180
84181
84182             operation.id = 'continue';
84183             operation.keys = [t('operations.continue.key')];
84184             operation.title = t('operations.continue.title');
84185             operation.behavior = behaviorOperation(context).which(operation);
84186
84187             return operation;
84188         }
84189
84190         function operationDisconnect(selectedIDs, context) {
84191             var vertexIDs = [];
84192             var wayIDs = [];
84193             var otherIDs = [];
84194             var actions = [];
84195
84196             selectedIDs.forEach(function(id) {
84197                 if (context.geometry(id) === 'vertex') {
84198                     vertexIDs.push(id);
84199                 } else if (context.entity(id).type === 'way'){
84200                     wayIDs.push(id);
84201                 } else {
84202                     otherIDs.push(id);
84203                 }
84204             });
84205
84206             var disconnectingWayID = (vertexIDs.length === 0 && wayIDs.length === 1 && wayIDs[0]);
84207             var extent, nodes, coords;
84208
84209             if (disconnectingWayID) {   // disconnecting a way
84210                 var way = context.entity(disconnectingWayID);
84211                 extent = way.extent(context.graph());
84212                 nodes = utilGetAllNodes([disconnectingWayID], context.graph());
84213                 coords = nodes.map(function(n) { return n.loc; });
84214
84215                 way.nodes.forEach(function(vertexID) {
84216                     var action = actionDisconnect(vertexID).limitWays(wayIDs);
84217                     if (action.disabled(context.graph()) !== 'not_connected') {
84218                         actions.push(action);
84219                     }
84220                 });
84221
84222             } else {    // disconnecting a vertex
84223                 vertexIDs.forEach(function(vertexID) {
84224                     var action = actionDisconnect(vertexID);
84225
84226                     if (wayIDs.length > 0) {
84227                         var waysIDsForVertex = wayIDs.filter(function(wayID) {
84228                             var way = context.entity(wayID);
84229                             return way.nodes.indexOf(vertexID) !== -1;
84230                         });
84231                         action.limitWays(waysIDsForVertex);
84232                     }
84233                     actions.push(action);
84234                 });
84235             }
84236
84237
84238             var operation = function() {
84239                 context.perform(function(graph) {
84240                     return actions.reduce(function(graph, action) { return action(graph); }, graph);
84241                 }, operation.annotation());
84242
84243                 context.validator().validate();
84244             };
84245
84246
84247             operation.available = function() {
84248                 if (actions.length === 0) { return false; }
84249                 if (otherIDs.length !== 0) { return false; }
84250
84251                 if (vertexIDs.length !== 0 && wayIDs.length !== 0 && !wayIDs.every(function(wayID) {
84252                     return vertexIDs.some(function(vertexID) {
84253                         var way = context.entity(wayID);
84254                         return way.nodes.indexOf(vertexID) !== -1;
84255                     });
84256                 })) { return false; }
84257
84258                 return true;
84259             };
84260
84261
84262             operation.disabled = function() {
84263                 var reason;
84264                 for (var actionIndex in actions) {
84265                     reason = actions[actionIndex].disabled(context.graph());
84266                     if (reason) { return reason; }
84267                 }
84268
84269                 if (disconnectingWayID && extent.percentContainedIn(context.extent()) < 0.8) {
84270                     return 'too_large.single';
84271                 } else if (disconnectingWayID && someMissing()) {
84272                     return 'not_downloaded';
84273                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
84274                     return 'connected_to_hidden';
84275                 }
84276
84277                 return false;
84278
84279
84280                 function someMissing() {
84281                     if (context.inIntro()) { return false; }
84282                     var osm = context.connection();
84283                     if (osm) {
84284                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
84285                         if (missing.length) {
84286                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
84287                             return true;
84288                         }
84289                     }
84290                     return false;
84291                 }
84292             };
84293
84294
84295             operation.tooltip = function() {
84296                 var disable = operation.disabled();
84297                 if (disable) {
84298                     return t('operations.disconnect.' + disable);
84299                 }
84300                 if (disconnectingWayID) {
84301                     return t('operations.disconnect.' + context.geometry(disconnectingWayID) + '.description');
84302                 }
84303                 return t('operations.disconnect.description');
84304             };
84305
84306
84307             operation.annotation = function() {
84308                 return t('operations.disconnect.annotation');
84309             };
84310
84311
84312             operation.id = 'disconnect';
84313             operation.keys = [t('operations.disconnect.key')];
84314             operation.title = t('operations.disconnect.title');
84315             operation.behavior = behaviorOperation(context).which(operation);
84316
84317             return operation;
84318         }
84319
84320         function operationDowngrade(selectedIDs, context) {
84321             var affectedFeatureCount = 0;
84322             var downgradeType;
84323
84324             setDowngradeTypeForEntityIDs();
84325
84326             var multi = affectedFeatureCount === 1 ? 'single' : 'multiple';
84327
84328             function setDowngradeTypeForEntityIDs() {
84329                 for (var i in selectedIDs) {
84330                     var entityID = selectedIDs[i];
84331                     var type = downgradeTypeForEntityID(entityID);
84332                     if (type) {
84333                         affectedFeatureCount += 1;
84334                         if (downgradeType && type !== downgradeType) {
84335                             downgradeType = 'building_address';
84336                         } else {
84337                             downgradeType = type;
84338                         }
84339                     }
84340                 }
84341             }
84342
84343             function downgradeTypeForEntityID(entityID) {
84344                 var graph = context.graph();
84345                 var entity = graph.entity(entityID);
84346                 var preset = context.presets().match(entity, graph);
84347
84348                 if (preset.isFallback()) { return null; }
84349
84350                 if (entity.type === 'node' &&
84351                     preset.id !== 'address' &&
84352                     Object.keys(entity.tags).some(function(key) {
84353                         return key.match(/^addr:.{1,}/);
84354                     })) {
84355
84356                     return 'address';
84357                 }
84358                 if (entity.geometry(graph) === 'area' &&
84359                     entity.tags.building &&
84360                     !preset.tags.building) {
84361
84362                     return 'building';
84363                 }
84364
84365                 return null;
84366             }
84367
84368             var buildingKeysToKeep = ['architect', 'building', 'height', 'layer', 'source', 'type', 'wheelchair'];
84369             var addressKeysToKeep = ['source'];
84370
84371             var operation = function () {
84372                 context.perform(function(graph) {
84373
84374                     for (var i in selectedIDs) {
84375                         var entityID = selectedIDs[i];
84376                         var type = downgradeTypeForEntityID(entityID);
84377                         if (!type) { continue; }
84378
84379                         var tags = Object.assign({}, graph.entity(entityID).tags);  // shallow copy
84380                         for (var key in tags) {
84381                             if (type === 'address' && addressKeysToKeep.indexOf(key) !== -1) { continue; }
84382                             if (type === 'building') {
84383                                 if (buildingKeysToKeep.indexOf(key) !== -1 ||
84384                                     key.match(/^building:.{1,}/) ||
84385                                     key.match(/^roof:.{1,}/)) { continue; }
84386                             }
84387                             // keep address tags for buildings too
84388                             if (key.match(/^addr:.{1,}/)) { continue; }
84389
84390                             delete tags[key];
84391                         }
84392                         graph = actionChangeTags(entityID, tags)(graph);
84393                     }
84394                     return graph;
84395                 }, operation.annotation());
84396
84397                 context.validator().validate();
84398
84399                 // refresh the select mode to enable the delete operation
84400                 context.enter(modeSelect(context, selectedIDs));
84401             };
84402
84403
84404             operation.available = function () {
84405                 return downgradeType;
84406             };
84407
84408
84409             operation.disabled = function () {
84410                 if (selectedIDs.some(hasWikidataTag)) {
84411                     return 'has_wikidata_tag';
84412                 }
84413                 return false;
84414
84415                 function hasWikidataTag(id) {
84416                     var entity = context.entity(id);
84417                     return entity.tags.wikidata && entity.tags.wikidata.trim().length > 0;
84418                 }
84419             };
84420
84421
84422             operation.tooltip = function () {
84423                 var disable = operation.disabled();
84424                 return disable ?
84425                     t('operations.downgrade.' + disable + '.' + multi) :
84426                     t('operations.downgrade.description.' + downgradeType);
84427             };
84428
84429
84430             operation.annotation = function () {
84431                 var suffix;
84432                 if (downgradeType === 'building_address') {
84433                     suffix = 'multiple';
84434                 } else {
84435                     suffix = downgradeType + '.' + multi;
84436                 }
84437                 return t('operations.downgrade.annotation.' + suffix, { n: affectedFeatureCount});
84438             };
84439
84440
84441             operation.id = 'downgrade';
84442             operation.keys = [uiCmd('⌘⌫'), uiCmd('⌘⌦'), uiCmd('⌦')];
84443             operation.title = t('operations.downgrade.title');
84444             operation.behavior = behaviorOperation(context).which(operation);
84445
84446
84447             return operation;
84448         }
84449
84450         function operationExtract(selectedIDs, context) {
84451             var entityID = selectedIDs.length && selectedIDs[0];
84452             var action = actionExtract(entityID, context.projection);
84453
84454             var geometry = entityID && context.geometry(entityID);
84455             var extent = geometry === 'area' && context.entity(entityID).extent(context.graph());
84456
84457
84458             var operation = function () {
84459                 context.perform(action);  // do the extract
84460                 context.validator().validate();
84461
84462                 var extractedNodeID = action.getExtractedNodeID();
84463
84464                 var mouse = context.map().mouseCoordinates();
84465                 if (mouse.some(isNaN)) {
84466                     enterMoveMode();
84467
84468                 } else {
84469                     // move detached node to the mouse location (transitioned)
84470                     context.perform(actionMoveNode(extractedNodeID, mouse));
84471
84472                     // after transition completes, put at final mouse location and enter move mode.
84473                     window.setTimeout(function() {
84474                         mouse = context.map().mouseCoordinates();
84475                         context.replace(actionMoveNode(extractedNodeID, mouse));
84476                         enterMoveMode();
84477                     }, 150);
84478                 }
84479
84480                 function enterMoveMode() {
84481                     var baseGraph = context.graph();
84482                     context.enter(modeMove(context, [extractedNodeID], baseGraph));
84483                 }
84484             };
84485
84486
84487             operation.available = function () {
84488                 if (selectedIDs.length !== 1) { return false; }
84489
84490                 var graph = context.graph();
84491                 var entity = graph.hasEntity(entityID);
84492                 if (!entity) { return false; }
84493
84494                 if (!entity.hasInterestingTags()) { return false; }
84495
84496                 if (geometry === 'area') {
84497                     var preset = context.presets().match(entity, graph);
84498                     return preset.geometry.indexOf('point') !== -1;
84499                 }
84500
84501                 return entity.type === 'node' && graph.parentWays(entity).length > 0;
84502             };
84503
84504
84505             operation.disabled = function () {
84506                 var reason = action.disabled(context.graph());
84507                 if (reason) {
84508                     return reason;
84509                 } else if (geometry === 'vertex' && selectedIDs.some(context.hasHiddenConnections)) {
84510                     return 'connected_to_hidden';
84511                 } else if (extent && extent.area() && extent.percentContainedIn(context.extent()) < 0.8) {
84512                     return 'too_large';
84513                 }
84514
84515                 return false;
84516             };
84517
84518
84519             operation.tooltip = function () {
84520                 var disableReason = operation.disabled();
84521                 if (disableReason) {
84522                     return t('operations.extract.' + disableReason + '.' + geometry + '.single',
84523                         { relation: context.presets().item('type/restriction').name() });
84524                 } else {
84525                     return t('operations.extract.description.' + geometry + '.single');
84526                 }
84527             };
84528
84529
84530             operation.annotation = function () {
84531                 return t('operations.extract.annotation.single');
84532             };
84533
84534
84535             operation.id = 'extract';
84536             operation.keys = [t('operations.extract.key')];
84537             operation.title = t('operations.extract.title');
84538             operation.behavior = behaviorOperation(context).which(operation);
84539
84540
84541             return operation;
84542         }
84543
84544         function operationMerge(selectedIDs, context) {
84545
84546             function updatePresetTags(newGraph, ids) {
84547                 var id = ids[0];
84548                 var newEntity = newGraph.hasEntity(id);
84549
84550                 if (!newEntity) { return; }
84551                 var newPreset = context.presets().match(newEntity, newGraph);
84552                 context.replace(actionChangePreset(id, null, newPreset), operation.annotation());
84553             }
84554
84555
84556             var join = actionJoin(selectedIDs);
84557             var merge = actionMerge(selectedIDs);
84558             var mergePolygon = actionMergePolygon(selectedIDs);
84559             var mergeNodes = actionMergeNodes(selectedIDs);
84560
84561
84562             var operation = function() {
84563                 var doUpdateTags;
84564                 var action;
84565
84566                 if (!join.disabled(context.graph())) {
84567                     doUpdateTags = false;
84568                     action = join;
84569                 } else if (!merge.disabled(context.graph())) {
84570                     doUpdateTags = true;
84571                     action = merge;
84572                 } else if (!mergePolygon.disabled(context.graph())) {
84573                     doUpdateTags = false;
84574                     action = mergePolygon;
84575                 } else {
84576                     doUpdateTags = true;
84577                     action = mergeNodes;
84578                 }
84579
84580                 context.perform(action, operation.annotation());
84581
84582                 var ids = selectedIDs.filter(function(id) {
84583                     var entity = context.hasEntity(id);
84584                     return entity && entity.type !== 'node';
84585                 });
84586
84587                 // if we merged tags, rematch preset to update tags if necessary (#3851)
84588                 if (doUpdateTags) {
84589                     updatePresetTags(context.graph(), ids);
84590                 }
84591
84592                 context.validator().validate();
84593                 context.enter(modeSelect(context, ids));
84594             };
84595
84596
84597             operation.available = function() {
84598                 return selectedIDs.length >= 2;
84599             };
84600
84601
84602             operation.disabled = function() {
84603                 return join.disabled(context.graph()) &&
84604                     merge.disabled(context.graph()) &&
84605                     mergePolygon.disabled(context.graph()) &&
84606                     mergeNodes.disabled(context.graph());
84607             };
84608
84609
84610             operation.tooltip = function() {
84611                 var j = join.disabled(context.graph());          // 'not_eligible', 'not_adjacent', 'restriction', 'conflicting_tags'
84612                 var m = merge.disabled(context.graph());         // 'not_eligible'
84613                 var p = mergePolygon.disabled(context.graph());  // 'not_eligible', 'incomplete_relation'
84614                 var n = mergeNodes.disabled(context.graph());    // 'not_eligible', 'relation', 'restriction'
84615
84616                 // disabled for one of various reasons
84617                 if (j && m && p && n) {
84618                     if (j === 'restriction' || n === 'restriction') {
84619                         return t('operations.merge.restriction',
84620                             { relation: context.presets().item('type/restriction').name() });
84621
84622                     } else if (p === 'incomplete_relation') {
84623                         return t('operations.merge.incomplete_relation');
84624
84625                     } else if (n === 'relation') {
84626                         return t('operations.merge.relation');
84627
84628                     } else {
84629                         return t('operations.merge.' + j);
84630                     }
84631
84632                 } else {
84633                     return t('operations.merge.description');
84634                 }
84635             };
84636
84637
84638             operation.annotation = function() {
84639                 return t('operations.merge.annotation', { n: selectedIDs.length });
84640             };
84641
84642
84643             operation.id = 'merge';
84644             operation.keys = [t('operations.merge.key')];
84645             operation.title = t('operations.merge.title');
84646             operation.behavior = behaviorOperation(context).which(operation);
84647
84648             return operation;
84649         }
84650
84651         function operationReverse(selectedIDs, context) {
84652
84653             var operation = function() {
84654                 context.perform(function combinedReverseAction(graph) {
84655                     actions().forEach(function(action) {
84656                         graph = action(graph);
84657                     });
84658                     return graph;
84659                 }, operation.annotation());
84660                 context.validator().validate();
84661             };
84662
84663             function actions(situation) {
84664                 return selectedIDs.map(function(entityID) {
84665                     var entity = context.hasEntity(entityID);
84666                     if (!entity) { return; }
84667
84668                     if (situation === 'toolbar') {
84669                         if (entity.type === 'way' &&
84670                             (!entity.isOneWay() && !entity.isSided())) { return; }
84671                     }
84672
84673                     var geometry = entity.geometry(context.graph());
84674                     if (entity.type !== 'node' && geometry !== 'line') { return; }
84675
84676                     var action = actionReverse(entityID);
84677                     if (action.disabled(context.graph())) { return; }
84678
84679                     return action;
84680                 }).filter(Boolean);
84681             }
84682
84683             function reverseTypeID() {
84684                 var acts = actions();
84685                 var nodeActionCount = acts.filter(function(act) {
84686                     var entity = context.hasEntity(act.entityID());
84687                     return entity && entity.type === 'node';
84688                 }).length;
84689                 var typeID = nodeActionCount === 0 ? 'line' : (nodeActionCount === acts.length ? 'point' : 'features');
84690                 if (typeID !== 'features' && acts.length > 1) { typeID += 's'; }
84691                 return typeID;
84692             }
84693
84694
84695             operation.available = function(situation) {
84696                 return actions(situation).length > 0;
84697             };
84698
84699
84700             operation.disabled = function() {
84701                 return false;
84702             };
84703
84704
84705             operation.tooltip = function() {
84706                 return t('operations.reverse.description.' + reverseTypeID());
84707             };
84708
84709
84710             operation.annotation = function() {
84711                 return t('operations.reverse.annotation.' + reverseTypeID());
84712             };
84713
84714
84715             operation.id = 'reverse';
84716             operation.keys = [t('operations.reverse.key')];
84717             operation.title = t('operations.reverse.title');
84718             operation.behavior = behaviorOperation(context).which(operation);
84719
84720             return operation;
84721         }
84722
84723         function operationSplit(selectedIDs, context) {
84724             var vertices = selectedIDs
84725                 .filter(function(id) { return context.geometry(id) === 'vertex'; });
84726             var entityID = vertices[0];
84727             var action = actionSplit(entityID);
84728             var ways = [];
84729
84730             if (vertices.length === 1) {
84731                 if (entityID && selectedIDs.length > 1) {
84732                     var ids = selectedIDs.filter(function(id) { return id !== entityID; });
84733                     action.limitWays(ids);
84734                 }
84735                 ways = action.ways(context.graph());
84736             }
84737
84738
84739             var operation = function() {
84740                 var difference = context.perform(action, operation.annotation());
84741                 context.enter(modeSelect(context, difference.extantIDs()));
84742             };
84743
84744
84745             operation.available = function() {
84746                 return vertices.length === 1;
84747             };
84748
84749
84750             operation.disabled = function() {
84751                 var reason = action.disabled(context.graph());
84752                 if (reason) {
84753                     return reason;
84754                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
84755                     return 'connected_to_hidden';
84756                 }
84757
84758                 return false;
84759             };
84760
84761
84762             operation.tooltip = function() {
84763                 var disable = operation.disabled();
84764                 if (disable) {
84765                     return t('operations.split.' + disable);
84766                 } else if (ways.length === 1) {
84767                     return t('operations.split.description.' + context.geometry(ways[0].id));
84768                 } else {
84769                     return t('operations.split.description.multiple');
84770                 }
84771             };
84772
84773
84774             operation.annotation = function() {
84775                 return ways.length === 1 ?
84776                     t('operations.split.annotation.' + context.geometry(ways[0].id)) :
84777                     t('operations.split.annotation.multiple', { n: ways.length });
84778             };
84779
84780
84781             operation.id = 'split';
84782             operation.keys = [t('operations.split.key')];
84783             operation.title = t('operations.split.title');
84784             operation.behavior = behaviorOperation(context).which(operation);
84785
84786             return operation;
84787         }
84788
84789         function operationStraighten(selectedIDs, context) {
84790             var wayIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'w'; });
84791             var nodeIDs = selectedIDs.filter(function(id) { return id.charAt(0) === 'n'; });
84792
84793             var nodes = utilGetAllNodes(selectedIDs, context.graph());
84794             var coords = nodes.map(function(n) { return n.loc; });
84795             var action = chooseAction();
84796             var geometry;
84797
84798
84799             function chooseAction() {
84800                 // straighten selected nodes
84801                 if (wayIDs.length === 0 && nodeIDs.length > 2) {
84802                     geometry = 'points';
84803                     return actionStraightenNodes(nodeIDs, context.projection);
84804
84805                 // straighten selected ways (possibly between range of 2 selected nodes)
84806                 } else if (wayIDs.length > 0 && (nodeIDs.length === 0 || nodeIDs.length === 2)) {
84807                     var startNodeIDs = [];
84808                     var endNodeIDs = [];
84809
84810                     for (var i = 0; i < selectedIDs.length; i++) {
84811                         var entity = context.entity(selectedIDs[i]);
84812                         if (entity.type === 'node') {
84813                             continue;
84814                         } else if (entity.type !== 'way' || entity.isClosed()) {
84815                             return false;  // exit early, can't straighten these
84816                         }
84817
84818                         startNodeIDs.push(entity.first());
84819                         endNodeIDs.push(entity.last());
84820                     }
84821
84822                     // Remove duplicate end/startNodeIDs (duplicate nodes cannot be at the line end)
84823                     startNodeIDs = startNodeIDs.filter(function(n) {
84824                         return startNodeIDs.indexOf(n) === startNodeIDs.lastIndexOf(n);
84825                     });
84826                     endNodeIDs = endNodeIDs.filter(function(n) {
84827                         return endNodeIDs.indexOf(n) === endNodeIDs.lastIndexOf(n);
84828                     });
84829
84830                     // Ensure all ways are connected (i.e. only 2 unique endpoints/startpoints)
84831                     if (utilArrayDifference(startNodeIDs, endNodeIDs).length +
84832                         utilArrayDifference(endNodeIDs, startNodeIDs).length !== 2) { return false; }
84833
84834                     // Ensure path contains at least 3 unique nodes
84835                     var wayNodeIDs = utilGetAllNodes(wayIDs, context.graph())
84836                         .map(function(node) { return node.id; });
84837                     if (wayNodeIDs.length <= 2) { return false; }
84838
84839                     // If range of 2 selected nodes is supplied, ensure nodes lie on the selected path
84840                     if (nodeIDs.length === 2 && (
84841                         wayNodeIDs.indexOf(nodeIDs[0]) === -1 || wayNodeIDs.indexOf(nodeIDs[1]) === -1
84842                     )) { return false; }
84843
84844                     geometry = 'line';
84845                     return actionStraightenWay(selectedIDs, context.projection);
84846                 }
84847
84848                 return false;
84849             }
84850
84851
84852             function operation() {
84853                 if (!action) { return; }
84854
84855                 context.perform(action, operation.annotation());
84856
84857                 window.setTimeout(function() {
84858                     context.validator().validate();
84859                 }, 300);  // after any transition
84860             }
84861
84862
84863             operation.available = function() {
84864                 return Boolean(action);
84865             };
84866
84867
84868             operation.disabled = function() {
84869                 var reason = action.disabled(context.graph());
84870                 if (reason) {
84871                     return reason;
84872                 } else if (someMissing()) {
84873                     return 'not_downloaded';
84874                 } else if (selectedIDs.some(context.hasHiddenConnections)) {
84875                     return 'connected_to_hidden';
84876                 }
84877
84878                 return false;
84879
84880
84881                 function someMissing() {
84882                     if (context.inIntro()) { return false; }
84883                     var osm = context.connection();
84884                     if (osm) {
84885                         var missing = coords.filter(function(loc) { return !osm.isDataLoaded(loc); });
84886                         if (missing.length) {
84887                             missing.forEach(function(loc) { context.loadTileAtLoc(loc); });
84888                             return true;
84889                         }
84890                     }
84891                     return false;
84892                 }
84893             };
84894
84895
84896             operation.tooltip = function() {
84897                 var disable = operation.disabled();
84898                 return disable ?
84899                     t('operations.straighten.' + disable) :
84900                     t('operations.straighten.description.' + geometry);
84901             };
84902
84903
84904             operation.annotation = function() {
84905                 return t('operations.straighten.annotation.' + geometry);
84906             };
84907
84908
84909             operation.id = 'straighten';
84910             operation.keys = [t('operations.straighten.key')];
84911             operation.title = t('operations.straighten.title');
84912             operation.behavior = behaviorOperation(context).which(operation);
84913
84914             return operation;
84915         }
84916
84917
84918
84919         var Operations = /*#__PURE__*/Object.freeze({
84920                 __proto__: null,
84921                 operationCircularize: operationCircularize,
84922                 operationContinue: operationContinue,
84923                 operationDelete: operationDelete,
84924                 operationDisconnect: operationDisconnect,
84925                 operationDowngrade: operationDowngrade,
84926                 operationExtract: operationExtract,
84927                 operationMerge: operationMerge,
84928                 operationMove: operationMove,
84929                 operationOrthogonalize: operationOrthogonalize,
84930                 operationReflectShort: operationReflectShort,
84931                 operationReflectLong: operationReflectLong,
84932                 operationReverse: operationReverse,
84933                 operationRotate: operationRotate,
84934                 operationSplit: operationSplit,
84935                 operationStraighten: operationStraighten
84936         });
84937
84938         function uiEditMenu(context, operations) {
84939             var menu;
84940             var center = [0, 0];
84941             var offset = [0, 0];
84942             var tooltip;
84943
84944             var p = 8;               // top padding
84945             var m = 4;               // top margin
84946             var h = 15;              // height of icon
84947             var vpBottomMargin = 45; // viewport bottom margin
84948             var vpSideMargin = 35;   // viewport side margin
84949             var buttonWidth = 44;
84950             var buttonHeight = (2 * p + h);
84951             var menuWidth = buttonWidth;
84952             var menuHeight = (2 * m) + operations.length * buttonHeight;
84953             var menuSideMargin = 10;
84954             var tooltipWidth = 200;
84955             var tooltipHeight = 200;  // a reasonable guess, real height depends on tooltip contents
84956
84957
84958             var editMenu = function (selection) {
84959                 if (!operations.length) { return; }
84960
84961                 selection.node().parentNode.focus();
84962
84963                 var isRTL = textDirection === 'rtl';
84964                 var viewport = context.surfaceRect();
84965
84966                 if (!isRTL && (center[0] + menuSideMargin + menuWidth) > (viewport.width - vpSideMargin)) {
84967                     // menu is going left-to-right and near right viewport edge, go left instead
84968                     isRTL = true;
84969                 } else if (isRTL && (center[0] - menuSideMargin - menuWidth) < vpSideMargin) {
84970                     // menu is going right-to-left and near left viewport edge, go right instead
84971                     isRTL = false;
84972                 }
84973
84974                 offset[0] = (isRTL ? -1 * (menuSideMargin + menuWidth) : menuSideMargin);
84975
84976                 if (center[1] + menuHeight > (viewport.height - vpBottomMargin)) {
84977                     // menu is near bottom viewport edge, shift upwards
84978                     offset[1] = -1 * (center[1] + menuHeight - viewport.height + vpBottomMargin);
84979                 }
84980
84981                 var origin = geoVecAdd(center, offset);
84982
84983                 menu = selection
84984                     .append('g')
84985                     .attr('class', 'edit-menu')
84986                     .attr('transform', 'translate(' + origin + ')')
84987                     .attr('opacity', 0);
84988
84989                 menu
84990                     .transition()
84991                     .attr('opacity', 1);
84992
84993                 menu
84994                     .append('rect')
84995                     .attr('class', 'edit-menu-background')
84996                     .attr('x', 4)
84997                     .attr('rx', 4)
84998                     .attr('ry', 4)
84999                     .attr('width', menuWidth)
85000                     .attr('height', menuHeight)
85001                     .attr('stroke-linecap', 'round');
85002
85003
85004                 var buttons = menu.selectAll('.edit-menu-item')
85005                     .data(operations);
85006
85007                 // enter
85008                 var buttonsEnter = buttons.enter()
85009                     .append('g')
85010                     .attr('class', function (d) { return 'edit-menu-item edit-menu-item-' + d.id; })
85011                     .attr('transform', function(d, i) {
85012                         return 'translate(' + geoVecFloor([0, m + i * buttonHeight]).join(',') + ')';
85013                     });
85014
85015                 buttonsEnter
85016                     .append('rect')
85017                     .attr('x', 4)
85018                     .attr('width', buttonWidth)
85019                     .attr('height', buttonHeight)
85020                     .on('click', click)
85021                     .on('mousedown', mousedown)
85022                     .on('mouseover', mouseover)
85023                     .on('mouseout', mouseout);
85024
85025                 buttonsEnter
85026                     .append('use')
85027                     .attr('class', 'operation-icon')
85028                     .attr('width', '20')
85029                     .attr('height', '20')
85030                     .attr('transform', function () { return 'translate(' + [2 * p, 5] + ')'; })
85031                     .attr('xlink:href', function (d) { return '#iD-operation-' + d.id; });
85032
85033                 // update
85034                 buttons = buttonsEnter
85035                     .merge(buttons)
85036                     .classed('disabled', function(d) { return d.disabled(); });
85037
85038
85039                 tooltip = d3_select('.ideditor')
85040                     .append('div')
85041                     .attr('class', 'popover tooltip edit-menu-tooltip');
85042
85043                 tooltip
85044                     .append('div')
85045                     .attr('class', 'popover-inner');
85046
85047
85048                 function click(operation) {
85049                     event.stopPropagation();
85050                     if (operation.disabled()) { return; }
85051                     operation();
85052                     editMenu.close();
85053                 }
85054
85055                 function mousedown() {
85056                     event.stopPropagation();  // https://github.com/openstreetmap/iD/issues/1869
85057                 }
85058
85059                 function mouseover(d, i) {
85060                     var tipX, tipY;
85061
85062                     if (!isRTL) {
85063                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
85064                     } else {
85065                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
85066                     }
85067
85068                     if (tipX + tooltipWidth > viewport.right) {
85069                         // tip is going left-to-right and near right viewport edge, go left instead
85070                         tipX = viewport.left + origin[0] - 4 - tooltipWidth;
85071                     } else if (tipX < viewport.left) {
85072                         // tip is going right-to-left and near left viewport edge, go right instead
85073                         tipX = viewport.left + origin[0] + menuSideMargin + menuWidth;
85074                     }
85075
85076                     tipY = viewport.top + origin[1] + (i * buttonHeight);
85077                     if (tipY + tooltipHeight > viewport.bottom) {
85078                         // tip is near bottom viewport edge, shift upwards
85079                         tipY -= tipY + tooltipHeight - viewport.bottom;
85080                     }
85081
85082                     tooltip
85083                         .style('left', tipX + 'px')
85084                         .style('top', tipY + 'px')
85085                         .style('display', 'block')
85086                         .selectAll('.popover-inner')
85087                         .html(uiTooltipHtml(d.tooltip(), d.keys[0], d.title));
85088
85089                     // update disabled again, just in case tooltip and disabled state disagree
85090                     // https://github.com/openstreetmap/iD/issues/6296#issuecomment-489259027
85091                     d3_select(this.parentNode)
85092                         .classed('disabled', d.disabled());
85093
85094                 }
85095
85096                 function mouseout() {
85097                     tooltip.style('display', 'none');
85098                 }
85099             };
85100
85101
85102             editMenu.close = function () {
85103                 if (menu) {
85104                     menu
85105                         .style('pointer-events', 'none')
85106                         .transition()
85107                         .attr('opacity', 0)
85108                         .remove();
85109                 }
85110
85111                 if (tooltip) {
85112                     tooltip.remove();
85113                 }
85114             };
85115
85116
85117             editMenu.center = function(val) {
85118                 if (!arguments.length) { return center; }
85119                 center = val;
85120                 return editMenu;
85121             };
85122
85123
85124             return editMenu;
85125         }
85126
85127         function uiSelectionList(context, selectedIDs) {
85128
85129             function selectEntity(entity) {
85130                 context.enter(modeSelect(context, [entity.id]));
85131             }
85132
85133
85134             function deselectEntity(entity) {
85135                 event.stopPropagation();
85136                 var index = selectedIDs.indexOf(entity.id);
85137                 if (index > -1) {
85138                     selectedIDs.splice(index, 1);
85139                 }
85140                 context.enter(modeSelect(context, selectedIDs));
85141             }
85142
85143
85144             function selectionList(selection) {
85145                 selection.classed('selection-list-pane', true);
85146
85147                 var header = selection
85148                     .append('div')
85149                     .attr('class', 'header fillL cf');
85150
85151                 header
85152                     .append('h3')
85153                     .text(t('inspector.edit_features'));
85154
85155                 var listWrap = selection
85156                     .append('div')
85157                     .attr('class', 'inspector-body');
85158
85159                 var list = listWrap
85160                     .append('div')
85161                     .attr('class', 'feature-list cf');
85162
85163
85164                 context.history()
85165                     .on('change.selectionList', function(difference) {
85166                         if (difference) { drawList(); }
85167                     });
85168
85169                 drawList();
85170
85171
85172                 function drawList() {
85173                     var entities = selectedIDs
85174                         .map(function(id) { return context.hasEntity(id); })
85175                         .filter(function(entity) { return entity; });
85176
85177                     var items = list.selectAll('.feature-list-item')
85178                         .data(entities, osmEntity.key);
85179
85180                     items.exit()
85181                         .remove();
85182
85183                     // Enter
85184                     var enter = items.enter()
85185                         .append('div')
85186                         .attr('class', 'feature-list-item')
85187                         .on('click', selectEntity);
85188
85189                     enter
85190                         .each(function(d) {
85191                             d3_select(this).on('mouseover', function() {
85192                                 utilHighlightEntities([d.id], true, context);
85193                             });
85194                             d3_select(this).on('mouseout', function() {
85195                                 utilHighlightEntities([d.id], false, context);
85196                             });
85197                         });
85198
85199                     var label = enter
85200                         .append('button')
85201                         .attr('class', 'label');
85202
85203                     enter
85204                         .append('button')
85205                         .attr('class', 'close')
85206                         .on('click', deselectEntity)
85207                         .call(svgIcon('#iD-icon-close'));
85208
85209                     label
85210                         .append('span')
85211                         .attr('class', 'entity-geom-icon')
85212                         .call(svgIcon('', 'pre-text'));
85213
85214                     label
85215                         .append('span')
85216                         .attr('class', 'entity-type');
85217
85218                     label
85219                         .append('span')
85220                         .attr('class', 'entity-name');
85221
85222                     // Update
85223                     items = items.merge(enter);
85224
85225                     items.selectAll('.entity-geom-icon use')
85226                         .attr('href', function() {
85227                             var entity = this.parentNode.parentNode.__data__;
85228                             return '#iD-icon-' + context.geometry(entity.id);
85229                         });
85230
85231                     items.selectAll('.entity-type')
85232                         .text(function(entity) { return context.presets().match(entity, context.graph()).name(); });
85233
85234                     items.selectAll('.entity-name')
85235                         .text(function(entity) { return utilDisplayName(entity); });
85236                 }
85237             }
85238
85239             return selectionList;
85240         }
85241
85242         function uiRadialMenu(context, operations) {
85243             var menu;
85244             var center = [0, 0];
85245             var tooltip;
85246
85247
85248             var radialMenu = function(selection) {
85249                 if (!operations.length) { return; }
85250
85251                 selection.node().parentNode.focus();
85252
85253                 function click(operation) {
85254                     event.stopPropagation();
85255                     if (operation.disabled()) { return; }
85256                     operation();
85257                     radialMenu.close();
85258                 }
85259
85260                 menu = selection
85261                     .append('g')
85262                     .attr('class', 'radial-menu')
85263                     .attr('transform', 'translate(' + center + ')')
85264                     .attr('opacity', 0);
85265
85266                 menu
85267                     .transition()
85268                     .attr('opacity', 1);
85269
85270                 var r = 50;
85271                 var a = Math.PI / 4;
85272                 var a0 = -Math.PI / 4;
85273                 var a1 = a0 + (operations.length - 1) * a;
85274
85275                 menu
85276                     .append('path')
85277                     .attr('class', 'radial-menu-background')
85278                     .attr('d', 'M' + r * Math.sin(a0) + ',' +
85279                                      r * Math.cos(a0) +
85280                               ' A' + r + ',' + r + ' 0 ' + (operations.length > 5 ? '1' : '0') + ',0 ' +
85281                                      (r * Math.sin(a1) + 1e-3) + ',' +
85282                                      (r * Math.cos(a1) + 1e-3)) // Force positive-length path (#1305)
85283                     .attr('stroke-width', 50)
85284                     .attr('stroke-linecap', 'round');
85285
85286                 var button = menu.selectAll()
85287                     .data(operations)
85288                     .enter()
85289                     .append('g')
85290                     .attr('class', function(d) { return 'radial-menu-item radial-menu-item-' + d.id; })
85291                     .classed('disabled', function(d) { return d.disabled(); })
85292                     .attr('transform', function(d, i) {
85293                         return 'translate(' + geoVecFloor([
85294                                 r * Math.sin(a0 + i * a),
85295                                 r * Math.cos(a0 + i * a)]).join(',') + ')';
85296                     });
85297
85298                 button
85299                     .append('circle')
85300                     .attr('r', 15)
85301                     .on('click', click)
85302                     .on('mousedown', mousedown)
85303                     .on('mouseover', mouseover)
85304                     .on('mouseout', mouseout);
85305
85306                 button
85307                     .append('use')
85308                     .attr('transform', 'translate(-10,-10)')
85309                     .attr('width', '20')
85310                     .attr('height', '20')
85311                     .attr('xlink:href', function(d) { return '#iD-operation-' + d.id; });
85312
85313                 tooltip = d3_select(document.body)
85314                     .append('div')
85315                     .attr('class', 'popover-inner radial-menu-tooltip');
85316
85317                 function mousedown() {
85318                     event.stopPropagation(); // https://github.com/openstreetmap/iD/issues/1869
85319                 }
85320
85321                 function mouseover(d, i) {
85322                     var rect = context.surfaceRect();
85323                     var angle = a0 + i * a;
85324                     var top = rect.top + (r + 25) * Math.cos(angle) + center[1] + 'px';
85325                     var left = rect.left + (r + 25) * Math.sin(angle) + center[0] + 'px';
85326                     var bottom = rect.height - (r + 25) * Math.cos(angle) - center[1] + 'px';
85327                     var right = rect.width - (r + 25) * Math.sin(angle) - center[0] + 'px';
85328
85329                     tooltip
85330                         .style('top', null)
85331                         .style('left', null)
85332                         .style('bottom', null)
85333                         .style('right', null)
85334                         .style('display', 'block')
85335                         .html(uiTooltipHtml(d.tooltip(), d.keys[0]));
85336
85337                     if (i === 0) {
85338                         tooltip
85339                             .style('right', right)
85340                             .style('top', top);
85341                     } else if (i >= 4) {
85342                         tooltip
85343                             .style('left', left)
85344                             .style('bottom', bottom);
85345                     } else {
85346                         tooltip
85347                             .style('left', left)
85348                             .style('top', top);
85349                     }
85350                 }
85351
85352                 function mouseout() {
85353                     tooltip.style('display', 'none');
85354                 }
85355             };
85356
85357
85358             radialMenu.close = function() {
85359                 if (menu) {
85360                     menu
85361                         .style('pointer-events', 'none')
85362                         .transition()
85363                         .attr('opacity', 0)
85364                         .remove();
85365                 }
85366
85367                 if (tooltip) {
85368                     tooltip.remove();
85369                 }
85370             };
85371
85372
85373             radialMenu.center = function(_) {
85374                 if (!arguments.length) { return center; }
85375                 center = _;
85376                 return radialMenu;
85377             };
85378
85379
85380             return radialMenu;
85381         }
85382
85383         var _relatedParent;
85384
85385
85386         function modeSelect(context, selectedIDs) {
85387             var mode = {
85388                 id: 'select',
85389                 button: 'browse'
85390             };
85391
85392             var keybinding = utilKeybinding('select');
85393             var breatheBehavior = behaviorBreathe();
85394             var behaviors = [
85395                 behaviorCopy(context),
85396                 behaviorPaste(context),
85397                 breatheBehavior,
85398                 behaviorHover(context),
85399                 behaviorSelect(context),
85400                 behaviorLasso(context),
85401                 modeDragNode(context).restoreSelectedIDs(selectedIDs).behavior,
85402                 modeDragNote(context).behavior
85403             ];
85404             var editMenu;
85405             var _timeout = null;
85406             var _newFeature = false;
85407             var _suppressMenu = true;
85408             var _follow = false;
85409
85410
85411             var wrap = context.container()
85412                 .select('.inspector-wrap');
85413
85414
85415             function singular() {
85416                 if (selectedIDs && selectedIDs.length === 1) {
85417                     return context.hasEntity(selectedIDs[0]);
85418                 }
85419             }
85420
85421             function selectedEntities() {
85422                 return selectedIDs.map(function(id) {
85423                     return context.hasEntity(id);
85424                 }).filter(Boolean);
85425             }
85426
85427
85428             function checkSelectedIDs() {
85429                 var ids = [];
85430                 if (Array.isArray(selectedIDs)) {
85431                     ids = selectedIDs.filter(function(id) {
85432                         return context.hasEntity(id);
85433                     });
85434                 }
85435
85436                 if (!ids.length) {
85437                     context.enter(modeBrowse(context));
85438                     return false;
85439                 } else if ((selectedIDs.length > 1 && ids.length === 1) ||
85440                     (selectedIDs.length === 1 && ids.length > 1)) {
85441                     // switch between single- and multi-select UI
85442                     context.enter(modeSelect(context, ids));
85443                     return false;
85444                 }
85445
85446                 selectedIDs = ids;
85447                 return true;
85448             }
85449
85450
85451             // find the common parent ways for nextVertex, previousVertex
85452             function commonParents() {
85453                 var graph = context.graph();
85454                 var commonParents = [];
85455
85456                 for (var i = 0; i < selectedIDs.length; i++) {
85457                     var entity = context.hasEntity(selectedIDs[i]);
85458                     if (!entity || entity.geometry(graph) !== 'vertex') {
85459                         return [];  // selection includes some not vertexes
85460                     }
85461
85462                     var currParents = graph.parentWays(entity).map(function(w) { return w.id; });
85463                     if (!commonParents.length) {
85464                         commonParents = currParents;
85465                         continue;
85466                     }
85467
85468                     commonParents = utilArrayIntersection(commonParents, currParents);
85469                     if (!commonParents.length) {
85470                         return [];
85471                     }
85472                 }
85473
85474                 return commonParents;
85475             }
85476
85477
85478             function singularParent() {
85479                 var parents = commonParents();
85480                 if (!parents || parents.length === 0) {
85481                     _relatedParent = null;
85482                     return null;
85483                 }
85484
85485                 // relatedParent is used when we visit a vertex with multiple
85486                 // parents, and we want to remember which parent line we started on.
85487
85488                 if (parents.length === 1) {
85489                     _relatedParent = parents[0];  // remember this parent for later
85490                     return _relatedParent;
85491                 }
85492
85493                 if (parents.indexOf(_relatedParent) !== -1) {
85494                     return _relatedParent;   // prefer the previously seen parent
85495                 }
85496
85497                 return parents[0];
85498             }
85499
85500
85501             function closeMenu() {
85502                 if (editMenu) {
85503                     context.surface().call(editMenu.close);
85504                 }
85505             }
85506
85507
85508             function positionMenu() {
85509                 if (!editMenu) { return; }
85510
85511                 var entity = singular();
85512                 if (entity && context.geometry(entity.id) === 'relation') {
85513                     _suppressMenu = true;
85514                 } else {
85515                     var point = context.mouse();
85516                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
85517
85518                     if (point && geoPointInPolygon(point, viewport)) {
85519                         editMenu.center(point);
85520                     } else {
85521                         _suppressMenu = true;
85522                     }
85523                 }
85524             }
85525
85526
85527             function showMenu() {
85528                 closeMenu();
85529                 if (editMenu) {
85530
85531                     // disable menu if in wide selection, for example
85532                     if (!context.map().editableDataEnabled()) { return; }
85533
85534                     context.surface().call(editMenu);
85535                 }
85536             }
85537
85538
85539             function toggleMenu() {
85540                 // deprecation warning - Radial Menu to be removed in iD v3
85541                 if (d3_select('.edit-menu, .radial-menu').empty()) {
85542                     positionMenu();
85543                     showMenu();
85544                 } else {
85545                     closeMenu();
85546                 }
85547             }
85548
85549
85550             mode.selectedIDs = function() {
85551                 return selectedIDs;
85552             };
85553
85554
85555             mode.zoomToSelected = function() {
85556                 context.map().zoomToEase(selectedEntities());
85557             };
85558
85559
85560             mode.reselect = function() {
85561                 if (!checkSelectedIDs()) { return; }
85562
85563                 var surfaceNode = context.surface().node();
85564                 if (surfaceNode.focus) {   // FF doesn't support it
85565                     surfaceNode.focus();
85566                 }
85567
85568                 positionMenu();
85569                 if (!_suppressMenu) {
85570                     showMenu();
85571                 }
85572             };
85573
85574
85575             mode.newFeature = function(val) {
85576                 if (!arguments.length) { return _newFeature; }
85577                 _newFeature = val;
85578                 return mode;
85579             };
85580
85581
85582             mode.suppressMenu = function(val) {
85583                 if (!arguments.length) { return _suppressMenu; }
85584                 _suppressMenu = val;
85585                 return mode;
85586             };
85587
85588
85589             mode.follow = function(val) {
85590                 if (!arguments.length) { return _follow; }
85591                 _follow = val;
85592                 return mode;
85593             };
85594
85595             var operations = [];
85596
85597             function loadOperations() {
85598
85599                 operations.forEach(function(operation) {
85600                     if (operation.behavior) {
85601                         context.uninstall(operation.behavior);
85602                     }
85603                 });
85604
85605                 operations = Object.values(Operations)
85606                     .map(function(o) { return o(selectedIDs, context); })
85607                     .filter(function(o) { return o.available() && o.id !== 'delete' && o.id !== 'downgrade'; });
85608
85609                 var downgradeOperation = operationDowngrade(selectedIDs, context);
85610                 // don't allow delete if downgrade is available
85611                 var lastOperation = !context.inIntro() && downgradeOperation.available() ? downgradeOperation : operationDelete(selectedIDs, context);
85612
85613                 // deprecation warning - Radial Menu to be removed in iD v3
85614                 var isRadialMenu = context.storage('edit-menu-style') === 'radial';
85615                 if (isRadialMenu) {
85616                     operations = operations.slice(0,7);
85617                     operations.unshift(lastOperation);
85618                 } else {
85619                     operations.push(lastOperation);
85620                 }
85621
85622                 operations.forEach(function(operation) {
85623                     if (operation.behavior) {
85624                         context.install(operation.behavior);
85625                     }
85626                 });
85627
85628                 // deprecation warning - Radial Menu to be removed in iD v3
85629                 editMenu = isRadialMenu
85630                     ? uiRadialMenu(context, operations)
85631                     : uiEditMenu(context, operations);
85632
85633             }
85634
85635
85636             mode.enter = function() {
85637                 if (!checkSelectedIDs()) { return; }
85638
85639                 context.features().forceVisible(selectedIDs);
85640
85641                 loadOperations();
85642
85643                 behaviors.forEach(context.install);
85644
85645                 keybinding
85646                     .on(t('inspector.zoom_to.key'), mode.zoomToSelected)
85647                     .on(['[', 'pgup'], previousVertex)
85648                     .on([']', 'pgdown'], nextVertex)
85649                     .on(['{', uiCmd('⌘['), 'home'], firstVertex)
85650                     .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
85651                     .on(['\\', 'pause'], nextParent)
85652                     .on('⎋', esc, true)
85653                     .on('space', toggleMenu);
85654
85655                 d3_select(document)
85656                     .call(keybinding);
85657
85658                 context.ui().sidebar
85659                     .select(singular() ? singular().id : null, _newFeature);
85660
85661                 context.history()
85662                     .on('change.select', function() {
85663                         loadOperations();
85664                         // reselect after change in case relation members were removed or added
85665                         selectElements();
85666                     })
85667                     .on('undone.select', update)
85668                     .on('redone.select', update);
85669
85670                 context.map()
85671                     .on('move.select', closeMenu)
85672                     .on('drawn.select', selectElements)
85673                     .on('crossEditableZoom.select', function() {
85674                         selectElements();
85675                         breatheBehavior.restartIfNeeded(context.surface());
85676                     });
85677
85678                 context.surface()
85679                     .on('dblclick.select', dblclick);
85680
85681
85682                 selectElements();
85683
85684                 if (selectedIDs.length > 1) {
85685                     var entities = uiSelectionList(context, selectedIDs);
85686                     context.ui().sidebar.show(entities);
85687                 }
85688
85689                 if (_follow) {
85690                     var extent = geoExtent();
85691                     var graph = context.graph();
85692                     selectedIDs.forEach(function(id) {
85693                         var entity = context.entity(id);
85694                         extent._extend(entity.extent(graph));
85695                     });
85696
85697                     var loc = extent.center();
85698                     context.map().centerEase(loc);
85699                 } else if (singular() && singular().type === 'way') {
85700                     context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
85701                 }
85702
85703                 _timeout = window.setTimeout(function() {
85704                     positionMenu();
85705                     if (!_suppressMenu) {
85706                         showMenu();
85707                     }
85708                 }, 270);  /* after any centerEase completes */
85709
85710
85711                 function update() {
85712                     closeMenu();
85713                     checkSelectedIDs();
85714                 }
85715
85716
85717                 function dblclick() {
85718                     if (!context.map().withinEditableZoom()) { return; }
85719
85720                     var target = d3_select(event.target);
85721
85722                     var datum = target.datum();
85723                     var entity = datum && datum.properties && datum.properties.entity;
85724                     if (!entity) { return; }
85725
85726                     if (entity instanceof osmWay && target.classed('target')) {
85727                         var choice = geoChooseEdge(context.childNodes(entity), context.mouse(), context.projection);
85728                         var prev = entity.nodes[choice.index - 1];
85729                         var next = entity.nodes[choice.index];
85730
85731                         context.perform(
85732                             actionAddMidpoint({ loc: choice.loc, edge: [prev, next] }, osmNode()),
85733                             t('operations.add.annotation.vertex')
85734                         );
85735
85736                         event.preventDefault();
85737                         event.stopPropagation();
85738
85739                     } else if (entity.type === 'midpoint') {
85740                         context.perform(
85741                             actionAddMidpoint({ loc: entity.loc, edge: entity.edge }, osmNode()),
85742                             t('operations.add.annotation.vertex'));
85743
85744                         event.preventDefault();
85745                         event.stopPropagation();
85746                     }
85747                 }
85748
85749
85750                 function selectElements() {
85751                     if (!checkSelectedIDs()) { return; }
85752
85753                     var surface = context.surface();
85754                     var entity = singular();
85755
85756                     if (entity && context.geometry(entity.id) === 'relation') {
85757                         _suppressMenu = true;
85758                     }
85759
85760                     surface.selectAll('.selected-member')
85761                         .classed('selected-member', false);
85762
85763                     surface.selectAll('.selected')
85764                         .classed('selected', false);
85765
85766                     surface.selectAll('.related')
85767                         .classed('related', false);
85768
85769                     singularParent();
85770                     if (_relatedParent) {
85771                         surface.selectAll(utilEntitySelector([_relatedParent]))
85772                             .classed('related', true);
85773                     }
85774
85775                     if (context.map().withinEditableZoom()) {
85776                         // Apply selection styling if not in wide selection
85777
85778                         surface
85779                             .selectAll(utilDeepMemberSelector(selectedIDs, context.graph(), true /* skipMultipolgonMembers */))
85780                             .classed('selected-member', true);
85781                         surface
85782                             .selectAll(utilEntityOrDeepMemberSelector(selectedIDs, context.graph()))
85783                             .classed('selected', true);
85784                     }
85785
85786                 }
85787
85788
85789                 function esc() {
85790                     if (d3_select('.combobox').size()) { return; }
85791                     context.enter(modeBrowse(context));
85792                 }
85793
85794
85795                 function firstVertex() {
85796                     event.preventDefault();
85797                     var entity = singular();
85798                     var parent = singularParent();
85799                     var way;
85800
85801                     if (entity && entity.type === 'way') {
85802                         way = entity;
85803                     } else if (parent) {
85804                         way = context.entity(parent);
85805                     }
85806
85807                     if (way) {
85808                         context.enter(
85809                             modeSelect(context, [way.first()]).follow(true)
85810                         );
85811                     }
85812                 }
85813
85814
85815                 function lastVertex() {
85816                     event.preventDefault();
85817                     var entity = singular();
85818                     var parent = singularParent();
85819                     var way;
85820
85821                     if (entity && entity.type === 'way') {
85822                         way = entity;
85823                     } else if (parent) {
85824                         way = context.entity(parent);
85825                     }
85826
85827                     if (way) {
85828                         context.enter(
85829                             modeSelect(context, [way.last()]).follow(true)
85830                         );
85831                     }
85832                 }
85833
85834
85835                 function previousVertex() {
85836                     event.preventDefault();
85837                     var parent = singularParent();
85838                     if (!parent) { return; }
85839
85840                     var way = context.entity(parent);
85841                     var length = way.nodes.length;
85842                     var curr = way.nodes.indexOf(selectedIDs[0]);
85843                     var index = -1;
85844
85845                     if (curr > 0) {
85846                         index = curr - 1;
85847                     } else if (way.isClosed()) {
85848                         index = length - 2;
85849                     }
85850
85851                     if (index !== -1) {
85852                         context.enter(
85853                             modeSelect(context, [way.nodes[index]]).follow(true)
85854                         );
85855                     }
85856                 }
85857
85858
85859                 function nextVertex() {
85860                     event.preventDefault();
85861                     var parent = singularParent();
85862                     if (!parent) { return; }
85863
85864                     var way = context.entity(parent);
85865                     var length = way.nodes.length;
85866                     var curr = way.nodes.indexOf(selectedIDs[0]);
85867                     var index = -1;
85868
85869                     if (curr < length - 1) {
85870                         index = curr + 1;
85871                     } else if (way.isClosed()) {
85872                         index = 0;
85873                     }
85874
85875                     if (index !== -1) {
85876                         context.enter(
85877                             modeSelect(context, [way.nodes[index]]).follow(true)
85878                         );
85879                     }
85880                 }
85881
85882
85883                 function nextParent() {
85884                     event.preventDefault();
85885                     var parents = commonParents();
85886                     if (!parents || parents.length < 2) { return; }
85887
85888                     var index = parents.indexOf(_relatedParent);
85889                     if (index < 0 || index > parents.length - 2) {
85890                         _relatedParent = parents[0];
85891                     } else {
85892                         _relatedParent = parents[index + 1];
85893                     }
85894
85895                     var surface = context.surface();
85896                     surface.selectAll('.related')
85897                         .classed('related', false);
85898
85899                     if (_relatedParent) {
85900                         surface.selectAll(utilEntitySelector([_relatedParent]))
85901                             .classed('related', true);
85902                     }
85903                 }
85904             };
85905
85906
85907             mode.exit = function() {
85908                 if (_timeout) { window.clearTimeout(_timeout); }
85909
85910                 operations.forEach(function(operation) {
85911                     if (operation.behavior) {
85912                         context.uninstall(operation.behavior);
85913                     }
85914                 });
85915
85916                 behaviors.forEach(context.uninstall);
85917
85918                 d3_select(document)
85919                     .call(keybinding.unbind);
85920
85921                 closeMenu();
85922                 editMenu = undefined;
85923
85924                 context.history()
85925                     .on('change.select', null)
85926                     .on('undone.select', null)
85927                     .on('redone.select', null);
85928
85929                 var surface = context.surface();
85930
85931                 surface
85932                     .on('dblclick.select', null);
85933
85934                 surface
85935                     .selectAll('.selected-member')
85936                     .classed('selected-member', false);
85937
85938                 surface
85939                     .selectAll('.selected')
85940                     .classed('selected', false);
85941
85942                 surface
85943                     .selectAll('.highlighted')
85944                     .classed('highlighted', false);
85945
85946                 surface
85947                     .selectAll('.related')
85948                     .classed('related', false);
85949
85950                 context.map().on('drawn.select', null);
85951                 context.ui().sidebar.hide();
85952                 context.features().forceVisible([]);
85953
85954                 var entity = singular();
85955                 if (_newFeature && entity && entity.type === 'relation' &&
85956                     // no tags
85957                     Object.keys(entity.tags).length === 0 &&
85958                     // no parent relations
85959                     context.graph().parentRelations(entity).length === 0 &&
85960                     // no members or one member with no role
85961                     (entity.members.length === 0 || (entity.members.length === 1 && !entity.members[0].role))
85962                 ) {
85963                     // the user added this relation but didn't edit it at all, so just delete it
85964                     var deleteAction = actionDeleteRelation(entity.id, true /* don't delete untagged members */);
85965                     context.perform(deleteAction, t('operations.delete.annotation.relation'));
85966                 }
85967             };
85968
85969
85970             return mode;
85971         }
85972
85973         function uiLasso(context) {
85974             var group, polygon;
85975
85976             lasso.coordinates = [];
85977
85978             function lasso(selection) {
85979                 context.container()
85980                     .classed('lasso', true);
85981
85982                 group = selection
85983                     .append('g')
85984                     .attr('class', 'lasso hide');
85985
85986                 polygon = group
85987                     .append('path')
85988                     .attr('class', 'lasso-path');
85989
85990                 group
85991                     .call(uiToggle(true));
85992             }
85993
85994
85995             function draw() {
85996                 if (polygon) {
85997                     polygon.data([lasso.coordinates])
85998                         .attr('d', function(d) { return 'M' + d.join(' L') + ' Z'; });
85999                 }
86000             }
86001
86002
86003             lasso.extent = function () {
86004                 return lasso.coordinates.reduce(function(extent, point) {
86005                     return extent.extend(geoExtent(point));
86006                 }, geoExtent());
86007             };
86008
86009
86010             lasso.p = function(_) {
86011                 if (!arguments.length) { return lasso; }
86012                 lasso.coordinates.push(_);
86013                 draw();
86014                 return lasso;
86015             };
86016
86017
86018             lasso.close = function() {
86019                 if (group) {
86020                     group.call(uiToggle(false, function() {
86021                         d3_select(this).remove();
86022                     }));
86023                 }
86024                 context.container().classed('lasso', false);
86025             };
86026
86027
86028             return lasso;
86029         }
86030
86031         function behaviorLasso(context) {
86032
86033             var behavior = function(selection) {
86034                 var lasso;
86035
86036
86037                 function mousedown() {
86038                     var button = 0;  // left
86039                     if (event.button === button && event.shiftKey === true) {
86040                         lasso = null;
86041
86042                         d3_select(window)
86043                             .on('mousemove.lasso', mousemove)
86044                             .on('mouseup.lasso', mouseup);
86045
86046                         event.stopPropagation();
86047                     }
86048                 }
86049
86050
86051                 function mousemove() {
86052                     if (!lasso) {
86053                         lasso = uiLasso(context);
86054                         context.surface().call(lasso);
86055                     }
86056
86057                     lasso.p(context.mouse());
86058                 }
86059
86060
86061                 function normalize(a, b) {
86062                     return [
86063                         [Math.min(a[0], b[0]), Math.min(a[1], b[1])],
86064                         [Math.max(a[0], b[0]), Math.max(a[1], b[1])]
86065                     ];
86066                 }
86067
86068
86069                 function lassoed() {
86070                     if (!lasso) { return []; }
86071
86072                     var graph = context.graph();
86073                     var bounds = lasso.extent().map(context.projection.invert);
86074                     var extent = geoExtent(normalize(bounds[0], bounds[1]));
86075
86076                     var intersects = context.intersects(extent).filter(function(entity) {
86077                         return entity.type === 'node' &&
86078                             geoPointInPolygon(context.projection(entity.loc), lasso.coordinates) &&
86079                             !context.features().isHidden(entity, graph, entity.geometry(graph));
86080                     });
86081
86082                     return intersects.map(function(entity) { return entity.id; });
86083                 }
86084
86085
86086                 function mouseup() {
86087                     d3_select(window)
86088                         .on('mousemove.lasso', null)
86089                         .on('mouseup.lasso', null);
86090
86091                     if (!lasso) { return; }
86092
86093                     var ids = lassoed();
86094                     lasso.close();
86095
86096                     if (ids.length) {
86097                         context.enter(modeSelect(context, ids));
86098                     }
86099                 }
86100
86101                 selection
86102                     .on('mousedown.lasso', mousedown);
86103             };
86104
86105
86106             behavior.off = function(selection) {
86107                 selection.on('mousedown.lasso', null);
86108             };
86109
86110
86111             return behavior;
86112         }
86113
86114         function modeBrowse(context) {
86115             var mode = {
86116                 button: 'browse',
86117                 id: 'browse',
86118                 title: t('modes.browse.title'),
86119                 description: t('modes.browse.description')
86120             }, sidebar;
86121
86122             var behaviors = [
86123                 behaviorPaste(context),
86124                 behaviorHover(context).on('hover', context.ui().sidebar.hover),
86125                 behaviorSelect(context),
86126                 behaviorLasso(context),
86127                 modeDragNode(context).behavior,
86128                 modeDragNote(context).behavior
86129             ];
86130
86131
86132             mode.enter = function() {
86133                 behaviors.forEach(context.install);
86134
86135                 // Get focus on the body.
86136                 if (document.activeElement && document.activeElement.blur) {
86137                     document.activeElement.blur();
86138                 }
86139
86140                 if (sidebar) {
86141                     context.ui().sidebar.show(sidebar);
86142                 } else {
86143                     context.ui().sidebar.select(null);
86144                 }
86145             };
86146
86147
86148             mode.exit = function() {
86149                 context.ui().sidebar.hover.cancel();
86150                 behaviors.forEach(context.uninstall);
86151
86152                 if (sidebar) {
86153                     context.ui().sidebar.hide();
86154                 }
86155             };
86156
86157
86158             mode.sidebar = function(_) {
86159                 if (!arguments.length) { return sidebar; }
86160                 sidebar = _;
86161                 return mode;
86162             };
86163
86164
86165             return mode;
86166         }
86167
86168         function behaviorAddWay(context) {
86169             var dispatch$1 = dispatch('start', 'startFromWay', 'startFromNode');
86170             var draw = behaviorDraw(context);
86171
86172             function behavior(surface) {
86173                 draw.on('click', function() { dispatch$1.apply('start', this, arguments); })
86174                     .on('clickWay', function() { dispatch$1.apply('startFromWay', this, arguments); })
86175                     .on('clickNode', function() { dispatch$1.apply('startFromNode', this, arguments); })
86176                     .on('cancel', behavior.cancel)
86177                     .on('finish', behavior.cancel);
86178
86179                 context.map()
86180                     .dblclickEnable(false);
86181
86182                 surface.call(draw);
86183             }
86184
86185
86186             behavior.off = function(surface) {
86187                 surface.call(draw.off);
86188             };
86189
86190
86191             behavior.cancel = function() {
86192                 window.setTimeout(function() {
86193                     context.map().dblclickEnable(true);
86194                 }, 1000);
86195
86196                 context.enter(modeBrowse(context));
86197             };
86198
86199
86200             behavior.tail = function(text) {
86201                 draw.tail(text);
86202                 return behavior;
86203             };
86204
86205
86206             return utilRebind(behavior, dispatch$1, 'on');
86207         }
86208
86209         function behaviorHash(context) {
86210             var s0 = null; // cached window.location.hash
86211             var lat = 90 - 1e-8; // allowable latitude range
86212
86213
86214             var parser = function(map, s) {
86215                 var q = utilStringQs(s);
86216                 var args = (q.map || '').split('/').map(Number);
86217
86218                 if (args.length < 3 || args.some(isNaN)) {
86219                     return true; // replace bogus hash
86220
86221                 } else if (s !== formatter(map).slice(1)) {   // hash has changed
86222                     var mode = context.mode();
86223                     var dist = geoSphericalDistance(map.center(), [args[2], args[1]]);
86224                     var maxdist = 500;
86225
86226                     // Don't allow the hash location to change too much while drawing
86227                     // This can happen if the user accidently hit the back button.  #3996
86228                     if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
86229                         context.enter(modeBrowse(context));
86230                     }
86231
86232                     map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
86233                 }
86234             };
86235
86236
86237             var formatter = function(map) {
86238                 var center = map.center();
86239                 var zoom = map.zoom();
86240                 var precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2));
86241                 var q = utilObjectOmit(utilStringQs(window.location.hash.substring(1)),
86242                     ['comment', 'source', 'hashtags', 'walkthrough']
86243                 );
86244                 var newParams = {};
86245
86246                 delete q.id;
86247                 var selected = context.selectedIDs().filter(function(id) {
86248                     return !context.entity(id).isNew();
86249                 });
86250                 if (selected.length) {
86251                     newParams.id = selected.join(',');
86252                 }
86253
86254                 newParams.map = zoom.toFixed(2) +
86255                     '/' + center[1].toFixed(precision) +
86256                     '/' + center[0].toFixed(precision);
86257
86258                 return '#' + utilQsString(Object.assign(q, newParams), true);
86259             };
86260
86261
86262             function update() {
86263                 if (context.inIntro()) { return; }
86264                 var s1 = formatter(context.map());
86265                 if (s0 !== s1) {
86266                     window.location.replace(s0 = s1);  // don't recenter the map!
86267                 }
86268             }
86269
86270
86271             var throttledUpdate = throttle(update, 500);
86272
86273
86274             function hashchange() {
86275                 if (window.location.hash === s0) { return; }  // ignore spurious hashchange events
86276                 if (parser(context.map(), (s0 = window.location.hash).substring(1))) {
86277                     update(); // replace bogus hash
86278                 }
86279             }
86280
86281
86282             function behavior() {
86283                 context.map()
86284                     .on('move.hash', throttledUpdate);
86285
86286                 context
86287                     .on('enter.hash', throttledUpdate);
86288
86289                 d3_select(window)
86290                     .on('hashchange.hash', hashchange);
86291
86292                 if (window.location.hash) {
86293                     var q = utilStringQs(window.location.hash.substring(1));
86294
86295                     if (q.id) {
86296                         context.zoomToEntity(q.id.split(',')[0], !q.map);
86297                     }
86298
86299                     if (q.walkthrough === 'true') {
86300                         behavior.startWalkthrough = true;
86301                     }
86302
86303                     hashchange();
86304
86305                     if (q.map) {
86306                         behavior.hadHash = true;
86307                     }
86308                 }
86309             }
86310
86311
86312             behavior.off = function() {
86313                 throttledUpdate.cancel();
86314
86315                 context.map()
86316                     .on('move.hash', null);
86317
86318                 context
86319                     .on('enter.hash', null);
86320
86321                 d3_select(window)
86322                     .on('hashchange.hash', null);
86323
86324                 window.location.hash = '';
86325             };
86326
86327
86328             return behavior;
86329         }
86330
86331         /*
86332             iD.coreDifference represents the difference between two graphs.
86333             It knows how to calculate the set of entities that were
86334             created, modified, or deleted, and also contains the logic
86335             for recursively extending a difference to the complete set
86336             of entities that will require a redraw, taking into account
86337             child and parent relationships.
86338          */
86339         function coreDifference(base, head) {
86340             var _changes = {};
86341             var _didChange = {};  // 'addition', 'deletion', 'geometry', 'properties'
86342             var _diff = {};
86343
86344             function checkEntityID(id) {
86345                 var h = head.entities[id];
86346                 var b = base.entities[id];
86347
86348                 if (h === b) { return; }
86349                 if (_changes[id]) { return; }
86350
86351                 if (!h && b) {
86352                     _changes[id] = { base: b, head: h };
86353                     _didChange.deletion = true;
86354                     return;
86355                 }
86356                 if (h && !b) {
86357                     _changes[id] = { base: b, head: h };
86358                     _didChange.addition = true;
86359                     return;
86360                 }
86361
86362                 if (h && b) {
86363                     if (h.members && b.members && !fastDeepEqual(h.members, b.members)) {
86364                         _changes[id] = { base: b, head: h };
86365                         _didChange.geometry = true;
86366                         _didChange.properties = true;
86367                         return;
86368                     }
86369                     if (h.loc && b.loc && !geoVecEqual(h.loc, b.loc)) {
86370                         _changes[id] = { base: b, head: h };
86371                         _didChange.geometry = true;
86372                     }
86373                     if (h.nodes && b.nodes && !fastDeepEqual(h.nodes, b.nodes)) {
86374                         _changes[id] = { base: b, head: h };
86375                         _didChange.geometry = true;
86376                     }
86377                     if (h.tags && b.tags && !fastDeepEqual(h.tags, b.tags)) {
86378                         _changes[id] = { base: b, head: h };
86379                         _didChange.properties = true;
86380                     }
86381                 }
86382             }
86383
86384             Object.keys(head.entities).forEach(checkEntityID);
86385             Object.keys(base.entities).forEach(checkEntityID);
86386
86387
86388             _diff.length = function length() {
86389                 return Object.keys(_changes).length;
86390             };
86391
86392
86393             _diff.changes = function changes() {
86394                 return _changes;
86395             };
86396
86397             _diff.didChange = _didChange;
86398
86399
86400             // pass true to include affected relation members
86401             _diff.extantIDs = function extantIDs(includeRelMembers) {
86402                 var result = new Set();
86403                 Object.keys(_changes).forEach(function(id) {
86404                     if (_changes[id].head) {
86405                         result.add(id);
86406                     }
86407
86408                     var h = _changes[id].head;
86409                     var b = _changes[id].base;
86410                     var entity = h || b;
86411
86412                     if (includeRelMembers && entity.type === 'relation') {
86413                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
86414                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
86415                         utilArrayUnion(mh, mb).forEach(function(memberID) {
86416                             if (head.hasEntity(memberID)) {
86417                                 result.add(memberID);
86418                             }
86419                         });
86420                     }
86421                 });
86422
86423                 return Array.from(result);
86424             };
86425
86426
86427             _diff.modified = function modified() {
86428                 var result = [];
86429                 Object.values(_changes).forEach(function(change) {
86430                     if (change.base && change.head) {
86431                         result.push(change.head);
86432                     }
86433                 });
86434                 return result;
86435             };
86436
86437
86438             _diff.created = function created() {
86439                 var result = [];
86440                 Object.values(_changes).forEach(function(change) {
86441                     if (!change.base && change.head) {
86442                         result.push(change.head);
86443                     }
86444                 });
86445                 return result;
86446             };
86447
86448
86449             _diff.deleted = function deleted() {
86450                 var result = [];
86451                 Object.values(_changes).forEach(function(change) {
86452                     if (change.base && !change.head) {
86453                         result.push(change.base);
86454                     }
86455                 });
86456                 return result;
86457             };
86458
86459
86460             _diff.summary = function summary() {
86461                 var relevant = {};
86462
86463                 var keys = Object.keys(_changes);
86464                 for (var i = 0; i < keys.length; i++) {
86465                     var change = _changes[keys[i]];
86466
86467                     if (change.head && change.head.geometry(head) !== 'vertex') {
86468                         addEntity(change.head, head, change.base ? 'modified' : 'created');
86469
86470                     } else if (change.base && change.base.geometry(base) !== 'vertex') {
86471                         addEntity(change.base, base, 'deleted');
86472
86473                     } else if (change.base && change.head) { // modified vertex
86474                         var moved    = !fastDeepEqual(change.base.loc,  change.head.loc);
86475                         var retagged = !fastDeepEqual(change.base.tags, change.head.tags);
86476
86477                         if (moved) {
86478                             addParents(change.head);
86479                         }
86480
86481                         if (retagged || (moved && change.head.hasInterestingTags())) {
86482                             addEntity(change.head, head, 'modified');
86483                         }
86484
86485                     } else if (change.head && change.head.hasInterestingTags()) { // created vertex
86486                         addEntity(change.head, head, 'created');
86487
86488                     } else if (change.base && change.base.hasInterestingTags()) { // deleted vertex
86489                         addEntity(change.base, base, 'deleted');
86490                     }
86491                 }
86492
86493                 return Object.values(relevant);
86494
86495
86496                 function addEntity(entity, graph, changeType) {
86497                     relevant[entity.id] = {
86498                         entity: entity,
86499                         graph: graph,
86500                         changeType: changeType
86501                     };
86502                 }
86503
86504                 function addParents(entity) {
86505                     var parents = head.parentWays(entity);
86506                     for (var j = parents.length - 1; j >= 0; j--) {
86507                         var parent = parents[j];
86508                         if (!(parent.id in relevant)) {
86509                             addEntity(parent, head, 'modified');
86510                         }
86511                     }
86512                 }
86513             };
86514
86515
86516             // returns complete set of entities that require a redraw
86517             //  (optionally within given `extent`)
86518             _diff.complete = function complete(extent) {
86519                 var result = {};
86520                 var id, change;
86521
86522                 for (id in _changes) {
86523                     change = _changes[id];
86524
86525                     var h = change.head;
86526                     var b = change.base;
86527                     var entity = h || b;
86528                     var i;
86529
86530                     if (extent &&
86531                         (!h || !h.intersects(extent, head)) &&
86532                         (!b || !b.intersects(extent, base)))
86533                         { continue; }
86534
86535                     result[id] = h;
86536
86537                     if (entity.type === 'way') {
86538                         var nh = h ? h.nodes : [];
86539                         var nb = b ? b.nodes : [];
86540                         var diff;
86541
86542                         diff = utilArrayDifference(nh, nb);
86543                         for (i = 0; i < diff.length; i++) {
86544                             result[diff[i]] = head.hasEntity(diff[i]);
86545                         }
86546
86547                         diff = utilArrayDifference(nb, nh);
86548                         for (i = 0; i < diff.length; i++) {
86549                             result[diff[i]] = head.hasEntity(diff[i]);
86550                         }
86551                     }
86552
86553                     if (entity.type === 'relation' && entity.isMultipolygon()) {
86554                         var mh = h ? h.members.map(function(m) { return m.id; }) : [];
86555                         var mb = b ? b.members.map(function(m) { return m.id; }) : [];
86556                         var ids = utilArrayUnion(mh, mb);
86557                         for (i = 0; i < ids.length; i++) {
86558                             var member = head.hasEntity(ids[i]);
86559                             if (!member) { continue; }   // not downloaded
86560                             if (extent && !member.intersects(extent, head)) { continue; }   // not visible
86561                             result[ids[i]] = member;
86562                         }
86563                     }
86564
86565                     addParents(head.parentWays(entity), result);
86566                     addParents(head.parentRelations(entity), result);
86567                 }
86568
86569                 return result;
86570
86571
86572                 function addParents(parents, result) {
86573                     for (var i = 0; i < parents.length; i++) {
86574                         var parent = parents[i];
86575                         if (parent.id in result) { continue; }
86576
86577                         result[parent.id] = parent;
86578                         addParents(head.parentRelations(parent), result);
86579                     }
86580                 }
86581             };
86582
86583
86584             return _diff;
86585         }
86586
86587         function coreTree(head) {
86588             var rtree = new RBush();
86589             var bboxes = {};
86590             var tree = {};
86591
86592
86593             function entityBBox(entity) {
86594                 var bbox = entity.extent(head).bbox();
86595                 bbox.id = entity.id;
86596                 bboxes[entity.id] = bbox;
86597                 return bbox;
86598             }
86599
86600
86601             function updateParents(entity, insertions, memo) {
86602                 head.parentWays(entity).forEach(function(way) {
86603                     if (bboxes[way.id]) {
86604                         rtree.remove(bboxes[way.id]);
86605                         insertions[way.id] = way;
86606                     }
86607                     updateParents(way, insertions, memo);
86608                 });
86609
86610                 head.parentRelations(entity).forEach(function(relation) {
86611                     if (memo[entity.id]) { return; }
86612                     memo[entity.id] = true;
86613                     if (bboxes[relation.id]) {
86614                         rtree.remove(bboxes[relation.id]);
86615                         insertions[relation.id] = relation;
86616                     }
86617                     updateParents(relation, insertions, memo);
86618                 });
86619             }
86620
86621
86622             tree.rebase = function(entities, force) {
86623                 var insertions = {};
86624
86625                 for (var i = 0; i < entities.length; i++) {
86626                     var entity = entities[i];
86627                     if (!entity.visible) { continue; }
86628
86629                     if (head.entities.hasOwnProperty(entity.id) || bboxes[entity.id]) {
86630                         if (!force) {
86631                             continue;
86632                         } else if (bboxes[entity.id]) {
86633                             rtree.remove(bboxes[entity.id]);
86634                         }
86635                     }
86636
86637                     insertions[entity.id] = entity;
86638                     updateParents(entity, insertions, {});
86639                 }
86640
86641                 rtree.load(Object.values(insertions).map(entityBBox));
86642
86643                 return tree;
86644             };
86645
86646
86647             tree.intersects = function(extent, graph) {
86648                 if (graph !== head) {
86649                     var diff = coreDifference(head, graph);
86650                     var changed = diff.didChange;
86651
86652                     if (changed.addition || changed.deletion || changed.geometry) {
86653                         var insertions = {};
86654                         head = graph;
86655
86656                         if (changed.deletion) {
86657                             diff.deleted().forEach(function(entity) {
86658                                 rtree.remove(bboxes[entity.id]);
86659                                 delete bboxes[entity.id];
86660                             });
86661                         }
86662
86663                         if (changed.geometry) {
86664                             diff.modified().forEach(function(entity) {
86665                                 rtree.remove(bboxes[entity.id]);
86666                                 insertions[entity.id] = entity;
86667                                 updateParents(entity, insertions, {});
86668                             });
86669                         }
86670
86671                         if (changed.addition) {
86672                             diff.created().forEach(function(entity) {
86673                                 insertions[entity.id] = entity;
86674                             });
86675                         }
86676
86677                         rtree.load(Object.values(insertions).map(entityBBox));
86678                     }
86679                 }
86680
86681                 return rtree.search(extent.bbox())
86682                     .map(function(bbox) { return graph.entity(bbox.id); });
86683             };
86684
86685
86686             return tree;
86687         }
86688
86689         function uiModal(selection, blocking) {
86690           var this$1 = this;
86691
86692           var keybinding = utilKeybinding('modal');
86693           var previous = selection.select('div.modal');
86694           var animate = previous.empty();
86695
86696           previous.transition()
86697             .duration(200)
86698             .style('opacity', 0)
86699             .remove();
86700
86701           var shaded = selection
86702             .append('div')
86703             .attr('class', 'shaded')
86704             .style('opacity', 0);
86705
86706           shaded.close = function () {
86707             shaded
86708               .transition()
86709               .duration(200)
86710               .style('opacity',0)
86711               .remove();
86712
86713             modal
86714               .transition()
86715               .duration(200)
86716               .style('top','0px');
86717
86718             d3_select(document)
86719               .call(keybinding.unbind);
86720           };
86721
86722
86723           var modal = shaded
86724             .append('div')
86725             .attr('class', 'modal fillL');
86726
86727           if (!blocking) {
86728             shaded.on('click.remove-modal', function () {
86729               if (event.target === this$1) {
86730                 shaded.close();
86731               }
86732             });
86733
86734             modal
86735               .append('button')
86736               .attr('class', 'close')
86737               .on('click', shaded.close)
86738               .call(svgIcon('#iD-icon-close'));
86739
86740             keybinding
86741               .on('⌫', shaded.close)
86742               .on('⎋', shaded.close);
86743
86744             d3_select(document)
86745               .call(keybinding);
86746           }
86747
86748           modal
86749             .append('div')
86750             .attr('class', 'content');
86751
86752           if (animate) {
86753             shaded.transition().style('opacity', 1);
86754           } else {
86755             shaded.style('opacity', 1);
86756           }
86757
86758           return shaded;
86759         }
86760
86761         function uiLoading(context) {
86762           var arguments$1 = arguments;
86763
86764           var _modalSelection = d3_select(null);
86765           var _message = '';
86766           var _blocking = false;
86767
86768
86769           var loading = function (selection) {
86770             _modalSelection = uiModal(selection, _blocking);
86771
86772             var loadertext = _modalSelection.select('.content')
86773               .classed('loading-modal', true)
86774               .append('div')
86775               .attr('class', 'modal-section fillL');
86776
86777             loadertext
86778               .append('img')
86779               .attr('class', 'loader')
86780               .attr('src', context.imagePath('loader-white.gif'));
86781
86782             loadertext
86783               .append('h3')
86784               .text(_message);
86785
86786             _modalSelection.select('button.close')
86787               .attr('class', 'hide');
86788
86789             return loading;
86790           };
86791
86792
86793           loading.message = function (val) {
86794             if (!arguments$1.length) { return _message; }
86795             _message = val;
86796             return loading;
86797           };
86798
86799
86800           loading.blocking = function (val) {
86801             if (!arguments$1.length) { return _blocking; }
86802             _blocking = val;
86803             return loading;
86804           };
86805
86806
86807           loading.close = function () {
86808             _modalSelection.remove();
86809           };
86810
86811
86812           return loading;
86813         }
86814
86815         function coreHistory(context) {
86816             var dispatch$1 = dispatch('change', 'merge', 'restore', 'undone', 'redone');
86817             var lock = utilSessionMutex('lock');
86818
86819             // restorable if iD not open in another window/tab and a saved history exists in localStorage
86820             var _hasUnresolvedRestorableChanges = lock.lock() && !!context.storage(getKey('saved_history'));
86821
86822             var duration = 150;
86823             var _imageryUsed = [];
86824             var _photoOverlaysUsed = [];
86825             var _checkpoints = {};
86826             var _pausedGraph;
86827             var _stack;
86828             var _index;
86829             var _tree;
86830
86831
86832             // internal _act, accepts list of actions and eased time
86833             function _act(actions, t) {
86834                 actions = Array.prototype.slice.call(actions);
86835
86836                 var annotation;
86837                 if (typeof actions[actions.length - 1] !== 'function') {
86838                     annotation = actions.pop();
86839                 }
86840
86841                 var graph = _stack[_index].graph;
86842                 for (var i = 0; i < actions.length; i++) {
86843                     graph = actions[i](graph, t);
86844                 }
86845
86846                 return {
86847                     graph: graph,
86848                     annotation: annotation,
86849                     imageryUsed: _imageryUsed,
86850                     photoOverlaysUsed: _photoOverlaysUsed,
86851                     transform: context.projection.transform(),
86852                     selectedIDs: context.selectedIDs()
86853                 };
86854             }
86855
86856
86857             // internal _perform with eased time
86858             function _perform(args, t) {
86859                 var previous = _stack[_index].graph;
86860                 _stack = _stack.slice(0, _index + 1);
86861                 var actionResult = _act(args, t);
86862                 _stack.push(actionResult);
86863                 _index++;
86864                 return change(previous);
86865             }
86866
86867
86868             // internal _replace with eased time
86869             function _replace(args, t) {
86870                 var previous = _stack[_index].graph;
86871                 // assert(_index == _stack.length - 1)
86872                 var actionResult = _act(args, t);
86873                 _stack[_index] = actionResult;
86874                 return change(previous);
86875             }
86876
86877
86878             // internal _overwrite with eased time
86879             function _overwrite(args, t) {
86880                 var previous = _stack[_index].graph;
86881                 if (_index > 0) {
86882                     _index--;
86883                     _stack.pop();
86884                 }
86885                 _stack = _stack.slice(0, _index + 1);
86886                 var actionResult = _act(args, t);
86887                 _stack.push(actionResult);
86888                 _index++;
86889                 return change(previous);
86890             }
86891
86892
86893             // determine difference and dispatch a change event
86894             function change(previous) {
86895                 var difference = coreDifference(previous, history.graph());
86896                 if (!_pausedGraph) {
86897                     dispatch$1.call('change', this, difference);
86898                 }
86899                 return difference;
86900             }
86901
86902
86903             // iD uses namespaced keys so multiple installations do not conflict
86904             function getKey(n) {
86905                 return 'iD_' + window.location.origin + '_' + n;
86906             }
86907
86908
86909             var history = {
86910
86911                 graph: function() {
86912                     return _stack[_index].graph;
86913                 },
86914
86915
86916                 tree: function() {
86917                     return _tree;
86918                 },
86919
86920
86921                 base: function() {
86922                     return _stack[0].graph;
86923                 },
86924
86925
86926                 merge: function(entities, extent) {
86927                     var stack = _stack.map(function(state) { return state.graph; });
86928                     _stack[0].graph.rebase(entities, stack, false);
86929                     _tree.rebase(entities, false);
86930
86931                     dispatch$1.call('merge', this, entities);
86932                 },
86933
86934
86935                 perform: function() {
86936                     // complete any transition already in progress
86937                     d3_select(document).interrupt('history.perform');
86938
86939                     var transitionable = false;
86940                     var action0 = arguments[0];
86941
86942                     if (arguments.length === 1 ||
86943                         (arguments.length === 2 && (typeof arguments[1] !== 'function'))) {
86944                         transitionable = !!action0.transitionable;
86945                     }
86946
86947                     if (transitionable) {
86948                         var origArguments = arguments;
86949                         d3_select(document)
86950                             .transition('history.perform')
86951                             .duration(duration)
86952                             .ease(linear$1)
86953                             .tween('history.tween', function() {
86954                                 return function(t) {
86955                                     if (t < 1) { _overwrite([action0], t); }
86956                                 };
86957                             })
86958                             .on('start', function() {
86959                                 _perform([action0], 0);
86960                             })
86961                             .on('end interrupt', function() {
86962                                 _overwrite(origArguments, 1);
86963                             });
86964
86965                     } else {
86966                         return _perform(arguments);
86967                     }
86968                 },
86969
86970
86971                 replace: function() {
86972                     d3_select(document).interrupt('history.perform');
86973                     return _replace(arguments, 1);
86974                 },
86975
86976
86977                 // Same as calling pop and then perform
86978                 overwrite: function() {
86979                     d3_select(document).interrupt('history.perform');
86980                     return _overwrite(arguments, 1);
86981                 },
86982
86983
86984                 pop: function(n) {
86985                     d3_select(document).interrupt('history.perform');
86986
86987                     var previous = _stack[_index].graph;
86988                     if (isNaN(+n) || +n < 0) {
86989                         n = 1;
86990                     }
86991                     while (n-- > 0 && _index > 0) {
86992                         _index--;
86993                         _stack.pop();
86994                     }
86995                     return change(previous);
86996                 },
86997
86998
86999                 // Back to the previous annotated state or _index = 0.
87000                 undo: function() {
87001                     d3_select(document).interrupt('history.perform');
87002
87003                     var previousStack = _stack[_index];
87004                     var previous = previousStack.graph;
87005                     while (_index > 0) {
87006                         _index--;
87007                         if (_stack[_index].annotation) { break; }
87008                     }
87009
87010                     dispatch$1.call('undone', this, _stack[_index], previousStack);
87011                     return change(previous);
87012                 },
87013
87014
87015                 // Forward to the next annotated state.
87016                 redo: function() {
87017                     d3_select(document).interrupt('history.perform');
87018
87019                     var previousStack = _stack[_index];
87020                     var previous = previousStack.graph;
87021                     var tryIndex = _index;
87022                     while (tryIndex < _stack.length - 1) {
87023                         tryIndex++;
87024                         if (_stack[tryIndex].annotation) {
87025                             _index = tryIndex;
87026                             dispatch$1.call('redone', this, _stack[_index], previousStack);
87027                             break;
87028                         }
87029                     }
87030
87031                     return change(previous);
87032                 },
87033
87034
87035                 pauseChangeDispatch: function() {
87036                     if (!_pausedGraph) {
87037                         _pausedGraph = _stack[_index].graph;
87038                     }
87039                 },
87040
87041
87042                 resumeChangeDispatch: function() {
87043                     if (_pausedGraph) {
87044                         var previous = _pausedGraph;
87045                         _pausedGraph = null;
87046                         return change(previous);
87047                     }
87048                 },
87049
87050
87051                 undoAnnotation: function() {
87052                     var i = _index;
87053                     while (i >= 0) {
87054                         if (_stack[i].annotation) { return _stack[i].annotation; }
87055                         i--;
87056                     }
87057                 },
87058
87059
87060                 redoAnnotation: function() {
87061                     var i = _index + 1;
87062                     while (i <= _stack.length - 1) {
87063                         if (_stack[i].annotation) { return _stack[i].annotation; }
87064                         i++;
87065                     }
87066                 },
87067
87068
87069                 intersects: function(extent) {
87070                     return _tree.intersects(extent, _stack[_index].graph);
87071                 },
87072
87073
87074                 difference: function() {
87075                     var base = _stack[0].graph;
87076                     var head = _stack[_index].graph;
87077                     return coreDifference(base, head);
87078                 },
87079
87080
87081                 changes: function(action) {
87082                     var base = _stack[0].graph;
87083                     var head = _stack[_index].graph;
87084
87085                     if (action) {
87086                         head = action(head);
87087                     }
87088
87089                     var difference = coreDifference(base, head);
87090
87091                     return {
87092                         modified: difference.modified(),
87093                         created: difference.created(),
87094                         deleted: difference.deleted()
87095                     };
87096                 },
87097
87098
87099                 hasChanges: function() {
87100                     return this.difference().length() > 0;
87101                 },
87102
87103
87104                 imageryUsed: function(sources) {
87105                     if (sources) {
87106                         _imageryUsed = sources;
87107                         return history;
87108                     } else {
87109                         var s = new Set();
87110                         _stack.slice(1, _index + 1).forEach(function(state) {
87111                             state.imageryUsed.forEach(function(source) {
87112                                 if (source !== 'Custom') {
87113                                     s.add(source);
87114                                 }
87115                             });
87116                         });
87117                         return Array.from(s);
87118                     }
87119                 },
87120
87121
87122                 photoOverlaysUsed: function(sources) {
87123                     if (sources) {
87124                         _photoOverlaysUsed = sources;
87125                         return history;
87126                     } else {
87127                         var s = new Set();
87128                         _stack.slice(1, _index + 1).forEach(function(state) {
87129                             if (state.photoOverlaysUsed && Array.isArray(state.photoOverlaysUsed)) {
87130                                 state.photoOverlaysUsed.forEach(function(photoOverlay) {
87131                                     s.add(photoOverlay);
87132                                 });
87133                             }
87134                         });
87135                         return Array.from(s);
87136                     }
87137                 },
87138
87139
87140                 // save the current history state
87141                 checkpoint: function(key) {
87142                     _checkpoints[key] = {
87143                         stack: _stack,
87144                         index: _index
87145                     };
87146                     return history;
87147                 },
87148
87149
87150                 // restore history state to a given checkpoint or reset completely
87151                 reset: function(key) {
87152                     if (key !== undefined && _checkpoints.hasOwnProperty(key)) {
87153                         _stack = _checkpoints[key].stack;
87154                         _index = _checkpoints[key].index;
87155                     } else {
87156                         _stack = [{graph: coreGraph()}];
87157                         _index = 0;
87158                         _tree = coreTree(_stack[0].graph);
87159                         _checkpoints = {};
87160                     }
87161                     dispatch$1.call('change');
87162                     return history;
87163                 },
87164
87165
87166                 // `toIntroGraph()` is used to export the intro graph used by the walkthrough.
87167                 //
87168                 // To use it:
87169                 //  1. Start the walkthrough.
87170                 //  2. Get to a "free editing" tutorial step
87171                 //  3. Make your edits to the walkthrough map
87172                 //  4. In your browser dev console run:
87173                 //        `id.history().toIntroGraph()`
87174                 //  5. This outputs stringified JSON to the browser console
87175                 //  6. Copy it to `data/intro_graph.json` and prettify it in your code editor
87176                 toIntroGraph: function() {
87177                     var nextID = { n: 0, r: 0, w: 0 };
87178                     var permIDs = {};
87179                     var graph = this.graph();
87180                     var baseEntities = {};
87181
87182                     // clone base entities..
87183                     Object.values(graph.base().entities).forEach(function(entity) {
87184                         var copy = copyIntroEntity(entity);
87185                         baseEntities[copy.id] = copy;
87186                     });
87187
87188                     // replace base entities with head entities..
87189                     Object.keys(graph.entities).forEach(function(id) {
87190                         var entity = graph.entities[id];
87191                         if (entity) {
87192                             var copy = copyIntroEntity(entity);
87193                             baseEntities[copy.id] = copy;
87194                         } else {
87195                             delete baseEntities[id];
87196                         }
87197                     });
87198
87199                     // swap temporary for permanent ids..
87200                     Object.values(baseEntities).forEach(function(entity) {
87201                         if (Array.isArray(entity.nodes)) {
87202                             entity.nodes = entity.nodes.map(function(node) {
87203                                 return permIDs[node] || node;
87204                             });
87205                         }
87206                         if (Array.isArray(entity.members)) {
87207                             entity.members = entity.members.map(function(member) {
87208                                 member.id = permIDs[member.id] || member.id;
87209                                 return member;
87210                             });
87211                         }
87212                     });
87213
87214                     return JSON.stringify({ dataIntroGraph: baseEntities });
87215
87216
87217                     function copyIntroEntity(source) {
87218                         var copy = utilObjectOmit(source, ['type', 'user', 'v', 'version', 'visible']);
87219
87220                         // Note: the copy is no longer an osmEntity, so it might not have `tags`
87221                         if (copy.tags && !Object.keys(copy.tags)) {
87222                             delete copy.tags;
87223                         }
87224
87225                         if (Array.isArray(copy.loc)) {
87226                             copy.loc[0] = +copy.loc[0].toFixed(6);
87227                             copy.loc[1] = +copy.loc[1].toFixed(6);
87228                         }
87229
87230                         var match = source.id.match(/([nrw])-\d*/);  // temporary id
87231                         if (match !== null) {
87232                             var nrw = match[1];
87233                             var permID;
87234                             do { permID = nrw + (++nextID[nrw]); }
87235                             while (baseEntities.hasOwnProperty(permID));
87236
87237                             copy.id = permIDs[source.id] = permID;
87238                         }
87239                         return copy;
87240                     }
87241                 },
87242
87243
87244                 toJSON: function() {
87245                     if (!this.hasChanges()) { return; }
87246
87247                     var allEntities = {};
87248                     var baseEntities = {};
87249                     var base = _stack[0];
87250
87251                     var s = _stack.map(function(i) {
87252                         var modified = [];
87253                         var deleted = [];
87254
87255                         Object.keys(i.graph.entities).forEach(function(id) {
87256                             var entity = i.graph.entities[id];
87257                             if (entity) {
87258                                 var key = osmEntity.key(entity);
87259                                 allEntities[key] = entity;
87260                                 modified.push(key);
87261                             } else {
87262                                 deleted.push(id);
87263                             }
87264
87265                             // make sure that the originals of changed or deleted entities get merged
87266                             // into the base of the _stack after restoring the data from JSON.
87267                             if (id in base.graph.entities) {
87268                                 baseEntities[id] = base.graph.entities[id];
87269                             }
87270                             if (entity && entity.nodes) {
87271                                 // get originals of pre-existing child nodes
87272                                 entity.nodes.forEach(function(nodeID) {
87273                                     if (nodeID in base.graph.entities) {
87274                                         baseEntities[nodeID] = base.graph.entities[nodeID];
87275                                     }
87276                                 });
87277                             }
87278                             // get originals of parent entities too
87279                             var baseParents = base.graph._parentWays[id];
87280                             if (baseParents) {
87281                                 baseParents.forEach(function(parentID) {
87282                                     if (parentID in base.graph.entities) {
87283                                         baseEntities[parentID] = base.graph.entities[parentID];
87284                                     }
87285                                 });
87286                             }
87287                         });
87288
87289                         var x = {};
87290
87291                         if (modified.length) { x.modified = modified; }
87292                         if (deleted.length) { x.deleted = deleted; }
87293                         if (i.imageryUsed) { x.imageryUsed = i.imageryUsed; }
87294                         if (i.photoOverlaysUsed) { x.photoOverlaysUsed = i.photoOverlaysUsed; }
87295                         if (i.annotation) { x.annotation = i.annotation; }
87296                         if (i.transform) { x.transform = i.transform; }
87297                         if (i.selectedIDs) { x.selectedIDs = i.selectedIDs; }
87298
87299                         return x;
87300                     });
87301
87302                     return JSON.stringify({
87303                         version: 3,
87304                         entities: Object.values(allEntities),
87305                         baseEntities: Object.values(baseEntities),
87306                         stack: s,
87307                         nextIDs: osmEntity.id.next,
87308                         index: _index,
87309                         // note the time the changes were saved
87310                         timestamp: (new Date()).getTime()
87311                     });
87312                 },
87313
87314
87315                 fromJSON: function(json, loadChildNodes) {
87316                     var h = JSON.parse(json);
87317                     var loadComplete = true;
87318
87319                     osmEntity.id.next = h.nextIDs;
87320                     _index = h.index;
87321
87322                     if (h.version === 2 || h.version === 3) {
87323                         var allEntities = {};
87324
87325                         h.entities.forEach(function(entity) {
87326                             allEntities[osmEntity.key(entity)] = osmEntity(entity);
87327                         });
87328
87329                         if (h.version === 3) {
87330                             // This merges originals for changed entities into the base of
87331                             // the _stack even if the current _stack doesn't have them (for
87332                             // example when iD has been restarted in a different region)
87333                             var baseEntities = h.baseEntities.map(function(d) { return osmEntity(d); });
87334                             var stack = _stack.map(function(state) { return state.graph; });
87335                             _stack[0].graph.rebase(baseEntities, stack, true);
87336                             _tree.rebase(baseEntities, true);
87337
87338                             // When we restore a modified way, we also need to fetch any missing
87339                             // childnodes that would normally have been downloaded with it.. #2142
87340                             if (loadChildNodes) {
87341                                 var osm = context.connection();
87342                                 var baseWays = baseEntities
87343                                     .filter(function(e) { return e.type === 'way'; });
87344                                 var nodeIDs = baseWays
87345                                     .reduce(function(acc, way) { return utilArrayUnion(acc, way.nodes); }, []);
87346                                 var missing = nodeIDs
87347                                     .filter(function(n) { return !_stack[0].graph.hasEntity(n); });
87348
87349                                 if (missing.length && osm) {
87350                                     loadComplete = false;
87351                                     context.redrawEnable(false);
87352
87353                                     var loading = uiLoading(context).blocking(true);
87354                                     context.container().call(loading);
87355
87356                                     var childNodesLoaded = function(err, result) {
87357                                         if (!err) {
87358                                             var visibleGroups = utilArrayGroupBy(result.data, 'visible');
87359                                             var visibles = visibleGroups.true || [];      // alive nodes
87360                                             var invisibles = visibleGroups.false || [];   // deleted nodes
87361
87362                                             if (visibles.length) {
87363                                                 var visibleIDs = visibles.map(function(entity) { return entity.id; });
87364                                                 var stack = _stack.map(function(state) { return state.graph; });
87365                                                 missing = utilArrayDifference(missing, visibleIDs);
87366                                                 _stack[0].graph.rebase(visibles, stack, true);
87367                                                 _tree.rebase(visibles, true);
87368                                             }
87369
87370                                             // fetch older versions of nodes that were deleted..
87371                                             invisibles.forEach(function(entity) {
87372                                                 osm.loadEntityVersion(entity.id, +entity.version - 1, childNodesLoaded);
87373                                             });
87374                                         }
87375
87376                                         if (err || !missing.length) {
87377                                             loading.close();
87378                                             context.redrawEnable(true);
87379                                             dispatch$1.call('change');
87380                                             dispatch$1.call('restore', this);
87381                                         }
87382                                     };
87383
87384                                     osm.loadMultiple(missing, childNodesLoaded);
87385                                 }
87386                             }
87387                         }
87388
87389                         _stack = h.stack.map(function(d) {
87390                             var entities = {}, entity;
87391
87392                             if (d.modified) {
87393                                 d.modified.forEach(function(key) {
87394                                     entity = allEntities[key];
87395                                     entities[entity.id] = entity;
87396                                 });
87397                             }
87398
87399                             if (d.deleted) {
87400                                 d.deleted.forEach(function(id) {
87401                                     entities[id] = undefined;
87402                                 });
87403                             }
87404
87405                             return {
87406                                 graph: coreGraph(_stack[0].graph).load(entities),
87407                                 annotation: d.annotation,
87408                                 imageryUsed: d.imageryUsed,
87409                                 photoOverlaysUsed: d.photoOverlaysUsed,
87410                                 transform: d.transform,
87411                                 selectedIDs: d.selectedIDs
87412                             };
87413                         });
87414
87415                     } else { // original version
87416                         _stack = h.stack.map(function(d) {
87417                             var entities = {};
87418
87419                             for (var i in d.entities) {
87420                                 var entity = d.entities[i];
87421                                 entities[i] = entity === 'undefined' ? undefined : osmEntity(entity);
87422                             }
87423
87424                             d.graph = coreGraph(_stack[0].graph).load(entities);
87425                             return d;
87426                         });
87427                     }
87428
87429                     var transform = _stack[_index].transform;
87430                     if (transform) {
87431                         context.map().transformEase(transform, 0);   // 0 = immediate, no easing
87432                     }
87433
87434                     if (loadComplete) {
87435                         dispatch$1.call('change');
87436                         dispatch$1.call('restore', this);
87437                     }
87438
87439                     return history;
87440                 },
87441
87442
87443                 lock: function() {
87444                     return lock.lock();
87445                 },
87446
87447
87448                 unlock: function() {
87449                     lock.unlock();
87450                 },
87451
87452
87453                 save: function() {
87454                     if (lock.locked() &&
87455                         // don't overwrite existing, unresolved changes
87456                         !_hasUnresolvedRestorableChanges) {
87457
87458                         context.storage(getKey('saved_history'), history.toJSON() || null);
87459                     }
87460                     return history;
87461                 },
87462
87463
87464                 // delete the history version saved in localStorage
87465                 clearSaved: function() {
87466                     context.debouncedSave.cancel();
87467                     if (lock.locked()) {
87468                         _hasUnresolvedRestorableChanges = false;
87469                         context.storage(getKey('saved_history'), null);
87470
87471                         // clear the changeset metadata associated with the saved history
87472                         context.storage('comment', null);
87473                         context.storage('hashtags', null);
87474                         context.storage('source', null);
87475                     }
87476                     return history;
87477                 },
87478
87479
87480                 savedHistoryJSON: function() {
87481                     return context.storage(getKey('saved_history'));
87482                 },
87483
87484
87485                 hasRestorableChanges: function() {
87486                     return _hasUnresolvedRestorableChanges;
87487                 },
87488
87489
87490                 // load history from a version stored in localStorage
87491                 restore: function() {
87492                     if (lock.locked()) {
87493                         _hasUnresolvedRestorableChanges = false;
87494                         var json = this.savedHistoryJSON();
87495                         if (json) { history.fromJSON(json, true); }
87496                     }
87497                 },
87498
87499
87500                 _getKey: getKey
87501
87502             };
87503
87504
87505             history.reset();
87506
87507             return utilRebind(history, dispatch$1, 'on');
87508         }
87509
87510         /**
87511          * Look for roads that can be connected to other roads with a short extension
87512          */
87513         function validationAlmostJunction(context) {
87514             var type = 'almost_junction';
87515
87516
87517             function isHighway(entity) {
87518                 return entity.type === 'way' &&
87519                     osmRoutableHighwayTagValues[entity.tags.highway];
87520             }
87521
87522             function isTaggedAsNotContinuing(node) {
87523                 return node.tags.noexit === 'yes' ||
87524                     node.tags.amenity === 'parking_entrance' ||
87525                     (node.tags.entrance && node.tags.entrance !== 'no');
87526             }
87527
87528
87529             var validation = function checkAlmostJunction(entity, graph) {
87530                 if (!isHighway(entity)) { return []; }
87531                 if (entity.isDegenerate()) { return []; }
87532
87533                 var tree = context.history().tree();
87534                 var issues = [];
87535
87536                 var extendableNodeInfos = findConnectableEndNodesByExtension(entity);
87537                 extendableNodeInfos.forEach(function(extendableNodeInfo) {
87538                     issues.push(new validationIssue({
87539                         type: type,
87540                         subtype: 'highway-highway',
87541                         severity: 'warning',
87542                         message: function(context) {
87543                             var entity1 = context.hasEntity(this.entityIds[0]);
87544                             if (this.entityIds[0] === this.entityIds[2]) {
87545                                 return entity1 ? t('issues.almost_junction.self.message', {
87546                                     feature: utilDisplayLabel(entity1, context)
87547                                 }) : '';
87548                             } else {
87549                                 var entity2 = context.hasEntity(this.entityIds[2]);
87550                                 return (entity1 && entity2) ? t('issues.almost_junction.message', {
87551                                     feature: utilDisplayLabel(entity1, context),
87552                                     feature2: utilDisplayLabel(entity2, context)
87553                                 }) : '';
87554                             }
87555                         },
87556                         reference: showReference,
87557                         entityIds: [entity.id, extendableNodeInfo.node.id, extendableNodeInfo.wid],
87558                         loc: extendableNodeInfo.node.loc,
87559                         hash: JSON.stringify(extendableNodeInfo.node.loc),
87560                         data: {
87561                             edge: extendableNodeInfo.edge,
87562                             cross_loc: extendableNodeInfo.cross_loc
87563                         },
87564                         dynamicFixes: makeFixes
87565                     }));
87566                 });
87567
87568                 return issues;
87569
87570
87571                 function makeFixes(context) {
87572                     var fixes = [new validationIssueFix({
87573                         icon: 'iD-icon-abutment',
87574                         title: t('issues.fix.connect_features.title'),
87575                         onClick: function(context) {
87576                             var endNodeId = this.issue.entityIds[1];
87577                             var endNode = context.entity(endNodeId);
87578                             var targetEdge = this.issue.data.edge;
87579                             var crossLoc = this.issue.data.cross_loc;
87580                             var edgeNodes = [context.entity(targetEdge[0]), context.entity(targetEdge[1])];
87581                             var closestNodeInfo = geoSphericalClosestNode(edgeNodes, crossLoc);
87582
87583                             var annotation = t('issues.fix.connect_almost_junction.annotation');
87584                             // already a point nearby, just connect to that
87585                             if (closestNodeInfo.distance < 0.75) {
87586                                 context.perform(
87587                                     actionMergeNodes([closestNodeInfo.node.id, endNode.id], closestNodeInfo.node.loc),
87588                                     annotation
87589                                 );
87590                             // else add the end node to the edge way
87591                             } else {
87592                                 context.perform(
87593                                     actionAddMidpoint({loc: crossLoc, edge: targetEdge}, endNode),
87594                                     annotation
87595                                 );
87596                             }
87597                         }
87598                     })];
87599
87600                     var node = context.hasEntity(this.entityIds[1]);
87601                     if (node && !node.hasInterestingTags()) {
87602                         // node has no descriptive tags, suggest noexit fix
87603                         fixes.push(new validationIssueFix({
87604                             icon: 'maki-barrier',
87605                             title: t('issues.fix.tag_as_disconnected.title'),
87606                             onClick: function(context) {
87607                                 var nodeID = this.issue.entityIds[1];
87608                                 var tags = Object.assign({}, context.entity(nodeID).tags);
87609                                 tags.noexit = 'yes';
87610                                 context.perform(
87611                                     actionChangeTags(nodeID, tags),
87612                                     t('issues.fix.tag_as_disconnected.annotation')
87613                                 );
87614                             }
87615                         }));
87616                     }
87617
87618                     return fixes;
87619                 }
87620
87621
87622                 function showReference(selection) {
87623                     selection.selectAll('.issue-reference')
87624                         .data([0])
87625                         .enter()
87626                         .append('div')
87627                         .attr('class', 'issue-reference')
87628                         .text(t('issues.almost_junction.highway-highway.reference'));
87629                 }
87630
87631
87632                 function isExtendableCandidate(node, way) {
87633                     // can not accurately test vertices on tiles not downloaded from osm - #5938
87634                     var osm = services$1.osm;
87635                     if (osm && !osm.isDataLoaded(node.loc)) {
87636                         return false;
87637                     }
87638                     if (isTaggedAsNotContinuing(node) || graph.parentWays(node).length !== 1) {
87639                         return false;
87640                     }
87641
87642                     var occurences = 0;
87643                     for (var index in way.nodes) {
87644                         if (way.nodes[index] === node.id) {
87645                             occurences += 1;
87646                             if (occurences > 1) {
87647                                 return false;
87648                             }
87649                         }
87650                     }
87651                     return true;
87652                 }
87653
87654
87655                 function findConnectableEndNodesByExtension(way) {
87656                     var results = [];
87657                     if (way.isClosed()) { return results; }
87658
87659                     var testNodes;
87660                     var indices = [0, way.nodes.length - 1];
87661                     indices.forEach(function(nodeIndex) {
87662                         var nodeID = way.nodes[nodeIndex];
87663                         var node = graph.entity(nodeID);
87664
87665                         if (!isExtendableCandidate(node, way)) { return; }
87666
87667                         var connectionInfo = canConnectByExtend(way, nodeIndex);
87668                         if (!connectionInfo) { return; }
87669
87670                         testNodes = graph.childNodes(way).slice();   // shallow copy
87671                         testNodes[nodeIndex] = testNodes[nodeIndex].move(connectionInfo.cross_loc);
87672
87673                         // don't flag issue if connecting the ways would cause self-intersection
87674                         if (geoHasSelfIntersections(testNodes, nodeID)) { return; }
87675
87676                         results.push(connectionInfo);
87677                     });
87678
87679                     return results;
87680                 }
87681
87682                 function hasTag(tags, key) {
87683                     return tags[key] !== undefined && tags[key] !== 'no';
87684                 }
87685
87686                 function canConnectWays(way, way2) {
87687
87688                     // allow self-connections
87689                     if (way.id === way2.id) { return true; }
87690
87691                     // if one is bridge or tunnel, both must be bridge or tunnel
87692                     if ((hasTag(way.tags, 'bridge') || hasTag(way2.tags, 'bridge')) &&
87693                         !(hasTag(way.tags, 'bridge') && hasTag(way2.tags, 'bridge'))) { return false; }
87694                     if ((hasTag(way.tags, 'tunnel') || hasTag(way2.tags, 'tunnel')) &&
87695                         !(hasTag(way.tags, 'tunnel') && hasTag(way2.tags, 'tunnel'))) { return false; }
87696
87697                     // must have equivalent layers and levels
87698                     var layer1 = way.tags.layer || '0',
87699                         layer2 = way2.tags.layer || '0';
87700                     if (layer1 !== layer2) { return false; }
87701
87702                     var level1 = way.tags.level || '0',
87703                         level2 = way2.tags.level || '0';
87704                     if (level1 !== level2) { return false; }
87705
87706                     return true;
87707                 }
87708
87709
87710                 function canConnectByExtend(way, endNodeIdx) {
87711                     var EXTEND_TH_METERS = 5;
87712                     var tipNid = way.nodes[endNodeIdx];  // the 'tip' node for extension point
87713                     var midNid = endNodeIdx === 0 ? way.nodes[1] : way.nodes[way.nodes.length - 2];  // the other node of the edge
87714                     var tipNode = graph.entity(tipNid);
87715                     var midNode = graph.entity(midNid);
87716                     var lon = tipNode.loc[0];
87717                     var lat = tipNode.loc[1];
87718                     var lon_range = geoMetersToLon(EXTEND_TH_METERS, lat) / 2;
87719                     var lat_range = geoMetersToLat(EXTEND_TH_METERS) / 2;
87720                     var queryExtent = geoExtent([
87721                         [lon - lon_range, lat - lat_range],
87722                         [lon + lon_range, lat + lat_range]
87723                     ]);
87724
87725                     // first, extend the edge of [midNode -> tipNode] by EXTEND_TH_METERS and find the "extended tip" location
87726                     var edgeLen = geoSphericalDistance(midNode.loc, tipNode.loc);
87727                     var t = EXTEND_TH_METERS / edgeLen + 1.0;
87728                     var extTipLoc = geoVecInterp(midNode.loc, tipNode.loc, t);
87729
87730                     // then, check if the extension part [tipNode.loc -> extTipLoc] intersects any other ways
87731                     var intersected = tree.intersects(queryExtent, graph);
87732                     for (var i = 0; i < intersected.length; i++) {
87733                         var way2 = intersected[i];
87734
87735                         if (!isHighway(way2)) { continue; }
87736
87737                         if (!canConnectWays(way, way2)) { continue; }
87738
87739                         for (var j = 0; j < way2.nodes.length - 1; j++) {
87740                             var nAid = way2.nodes[j],
87741                                 nBid = way2.nodes[j + 1];
87742
87743                             if (nAid === tipNid || nBid === tipNid) { continue; }
87744
87745                             var nA = graph.entity(nAid),
87746                                 nB = graph.entity(nBid);
87747                             var crossLoc = geoLineIntersection([tipNode.loc, extTipLoc], [nA.loc, nB.loc]);
87748                             if (crossLoc) {
87749                                 return {
87750                                     node: tipNode,
87751                                     wid: way2.id,
87752                                     edge: [nA.id, nB.id],
87753                                     cross_loc: crossLoc
87754                                 };
87755                             }
87756                         }
87757                     }
87758                     return null;
87759                 }
87760             };
87761
87762             validation.type = type;
87763
87764             return validation;
87765         }
87766
87767         function validationCloseNodes(context) {
87768             var type = 'close_nodes';
87769
87770             var pointThresholdMeters = 0.2;
87771
87772             var defaultWayThresholdMeters = 0.2;
87773             // expect some features to be mapped with higher levels of detail
87774             var indoorThresholdMeters = 0.01;
87775             var buildingThresholdMeters = 0.05;
87776             var pathThresholdMeters = 0.1;
87777
87778             var validation = function(entity, graph) {
87779                 if (entity.type === 'node') {
87780                     return getIssuesForNode(entity);
87781                 } else if (entity.type === 'way') {
87782                     return getIssuesForWay(entity);
87783                 }
87784                 return [];
87785
87786                 function featureTypeForWay(way) {
87787
87788                     if (way.tags.boundary && way.tags.boundary !== 'no') { return 'boundary'; }
87789                     if (way.tags.indoor && way.tags.indoor !== 'no') { return 'indoor'; }
87790                     if ((way.tags.building && way.tags.building !== 'no') ||
87791                         (way.tags['building:part'] && way.tags['building:part'] !== 'no')) { return 'building'; }
87792                     if (osmPathHighwayTagValues[way.tags.highway]) { return 'path'; }
87793
87794                     var parentRelations = graph.parentRelations(way);
87795                     for (var i in parentRelations) {
87796                         var relation = parentRelations[i];
87797
87798                         if (relation.tags.type === 'boundary') { return 'boundary'; }
87799
87800                         if (relation.isMultipolygon()) {
87801                             if (relation.tags.indoor && relation.tags.indoor !== 'no') { return 'indoor'; }
87802                             if ((relation.tags.building && relation.tags.building !== 'no') ||
87803                                 (relation.tags['building:part'] && relation.tags['building:part'] !== 'no')) { return 'building'; }
87804                         }
87805                     }
87806
87807                     return 'other';
87808                 }
87809
87810                 function shouldCheckWay(way) {
87811
87812                     // don't flag issues where merging would create degenerate ways
87813                     if (way.nodes.length <= 2 ||
87814                         (way.isClosed() && way.nodes.length <= 4)) { return false; }
87815
87816                     var featureType = featureTypeForWay(way);
87817                     // don't flag boundaries since they might be highly detailed and can't be easily verified
87818                     if (featureType === 'boundary') { return false; }
87819
87820                     var bbox = way.extent(graph).bbox();
87821                     var hypotenuseMeters = geoSphericalDistance([bbox.minX, bbox.minY], [bbox.maxX, bbox.maxY]);
87822                     // don't flag close nodes in very small ways
87823                     if (hypotenuseMeters < 1.5) { return false; }
87824
87825                     return true;
87826                 }
87827
87828                 function getIssuesForWay(way) {
87829                     if (!shouldCheckWay(way)) { return []; }
87830
87831                     var issues = [],
87832                         nodes = graph.childNodes(way);
87833                     for (var i = 0; i < nodes.length - 1; i++) {
87834                         var node1 = nodes[i];
87835                         var node2 = nodes[i+1];
87836
87837                         var issue = getWayIssueIfAny(node1, node2, way);
87838                         if (issue) { issues.push(issue); }
87839                     }
87840                     return issues;
87841                 }
87842
87843                 function getIssuesForVertex(node, parentWays) {
87844                     var issues = [];
87845
87846                     function checkForCloseness(node1, node2, way) {
87847                         var issue = getWayIssueIfAny(node1, node2, way);
87848                         if (issue) { issues.push(issue); }
87849                     }
87850
87851                     for (var i = 0; i < parentWays.length; i++) {
87852                         var parentWay = parentWays[i];
87853
87854                         if (!shouldCheckWay(parentWay)) { continue; }
87855
87856                         var lastIndex = parentWay.nodes.length - 1;
87857                         for (var j = 0; j < parentWay.nodes.length; j++) {
87858                             if (j !== 0) {
87859                                 if (parentWay.nodes[j-1] === node.id) {
87860                                     checkForCloseness(node, graph.entity(parentWay.nodes[j]), parentWay);
87861                                 }
87862                             }
87863                             if (j !== lastIndex) {
87864                                 if (parentWay.nodes[j+1] === node.id) {
87865                                     checkForCloseness(graph.entity(parentWay.nodes[j]), node, parentWay);
87866                                 }
87867                             }
87868                         }
87869                     }
87870                     return issues;
87871                 }
87872
87873                 function getIssuesForDetachedPoint(node) {
87874
87875                     var issues = [];
87876
87877                     var lon = node.loc[0];
87878                     var lat = node.loc[1];
87879                     var lon_range = geoMetersToLon(pointThresholdMeters, lat) / 2;
87880                     var lat_range = geoMetersToLat(pointThresholdMeters) / 2;
87881                     var queryExtent = geoExtent([
87882                         [lon - lon_range, lat - lat_range],
87883                         [lon + lon_range, lat + lat_range]
87884                     ]);
87885
87886                     var intersected = context.history().tree().intersects(queryExtent, graph);
87887                     for (var j = 0; j < intersected.length; j++) {
87888                         var nearby = intersected[j];
87889
87890                         if (nearby.id === node.id) { continue; }
87891                         if (nearby.type !== 'node' || nearby.geometry(graph) !== 'point') { continue; }
87892
87893                         if (nearby.loc === node.loc ||
87894                             geoSphericalDistance(node.loc, nearby.loc) < pointThresholdMeters) {
87895
87896                             // allow very close points if tags indicate the z-axis might vary
87897                             var zAxisKeys = { layer: true, level: true, 'addr:housenumber': true, 'addr:unit': true };
87898                             var zAxisDifferentiates = false;
87899                             for (var key in zAxisKeys) {
87900                                 var nodeValue = node.tags[key] || '0';
87901                                 var nearbyValue = nearby.tags[key] || '0';
87902                                 if (nodeValue !== nearbyValue) {
87903                                     zAxisDifferentiates = true;
87904                                     break;
87905                                 }
87906                             }
87907                             if (zAxisDifferentiates) { continue; }
87908
87909                             issues.push(new validationIssue({
87910                                 type: type,
87911                                 subtype: 'detached',
87912                                 severity: 'warning',
87913                                 message: function(context) {
87914                                     var entity = context.hasEntity(this.entityIds[0]),
87915                                         entity2 = context.hasEntity(this.entityIds[1]);
87916                                     return (entity && entity2) ? t('issues.close_nodes.detached.message', {
87917                                         feature: utilDisplayLabel(entity, context),
87918                                         feature2: utilDisplayLabel(entity2, context)
87919                                     }) : '';
87920                                 },
87921                                 reference: showReference,
87922                                 entityIds: [node.id, nearby.id],
87923                                 dynamicFixes: function() {
87924                                     return [
87925                                         new validationIssueFix({
87926                                             icon: 'iD-operation-disconnect',
87927                                             title: t('issues.fix.move_points_apart.title')
87928                                         }),
87929                                         new validationIssueFix({
87930                                             icon: 'iD-icon-layers',
87931                                             title: t('issues.fix.use_different_layers_or_levels.title')
87932                                         })
87933                                     ];
87934                                 }
87935                             }));
87936                         }
87937                     }
87938
87939                     return issues;
87940
87941                     function showReference(selection) {
87942                         var referenceText = t('issues.close_nodes.detached.reference');
87943                         selection.selectAll('.issue-reference')
87944                             .data([0])
87945                             .enter()
87946                             .append('div')
87947                             .attr('class', 'issue-reference')
87948                             .text(referenceText);
87949                     }
87950                 }
87951
87952                 function getIssuesForNode(node) {
87953                     var parentWays = graph.parentWays(node);
87954                     if (parentWays.length) {
87955                         return getIssuesForVertex(node, parentWays);
87956                     } else {
87957                         return getIssuesForDetachedPoint(node);
87958                     }
87959                 }
87960
87961                 function getWayIssueIfAny(node1, node2, way) {
87962                     if (node1.id === node2.id ||
87963                         (node1.hasInterestingTags() && node2.hasInterestingTags())) {
87964                         return null;
87965                     }
87966
87967                     if (node1.loc !== node2.loc) {
87968
87969                         var featureType = featureTypeForWay(way);
87970                         var threshold = defaultWayThresholdMeters;
87971                         if (featureType === 'indoor') { threshold = indoorThresholdMeters; }
87972                         else if (featureType === 'building') { threshold = buildingThresholdMeters; }
87973                         else if (featureType === 'path') { threshold = pathThresholdMeters; }
87974
87975                         var distance = geoSphericalDistance(node1.loc, node2.loc);
87976                         if (distance > threshold) { return null; }
87977                     }
87978
87979                     return new validationIssue({
87980                         type: type,
87981                         subtype: 'vertices',
87982                         severity: 'warning',
87983                         message: function(context) {
87984                             var entity = context.hasEntity(this.entityIds[0]);
87985                             return entity ? t('issues.close_nodes.message', { way: utilDisplayLabel(entity, context) }) : '';
87986                         },
87987                         reference: showReference,
87988                         entityIds: [way.id, node1.id, node2.id],
87989                         loc: node1.loc,
87990                         dynamicFixes: function() {
87991                             return [
87992                                 new validationIssueFix({
87993                                     icon: 'iD-icon-plus',
87994                                     title: t('issues.fix.merge_points.title'),
87995                                     onClick: function(context) {
87996                                         var entityIds = this.issue.entityIds;
87997                                         var action = actionMergeNodes([entityIds[1], entityIds[2]]);
87998                                         context.perform(action, t('issues.fix.merge_close_vertices.annotation'));
87999                                     }
88000                                 }),
88001                                 new validationIssueFix({
88002                                     icon: 'iD-operation-disconnect',
88003                                     title: t('issues.fix.move_points_apart.title')
88004                                 })
88005                             ];
88006                         }
88007                     });
88008
88009                     function showReference(selection) {
88010                         var referenceText = t('issues.close_nodes.reference');
88011                         selection.selectAll('.issue-reference')
88012                             .data([0])
88013                             .enter()
88014                             .append('div')
88015                             .attr('class', 'issue-reference')
88016                             .text(referenceText);
88017                     }
88018                 }
88019
88020             };
88021
88022
88023             validation.type = type;
88024
88025             return validation;
88026         }
88027
88028         function validationCrossingWays(context) {
88029             var type = 'crossing_ways';
88030
88031             // returns the way or its parent relation, whichever has a useful feature type
88032             function getFeatureWithFeatureTypeTagsForWay(way, graph) {
88033                 if (getFeatureType(way, graph) === null) {
88034                     // if the way doesn't match a feature type, check its parent relations
88035                     var parentRels = graph.parentRelations(way);
88036                     for (var i = 0; i < parentRels.length; i++) {
88037                         var rel = parentRels[i];
88038                         if (getFeatureType(rel, graph) !== null) {
88039                             return rel;
88040                         }
88041                     }
88042                 }
88043                 return way;
88044             }
88045
88046
88047             function hasTag(tags, key) {
88048                 return tags[key] !== undefined && tags[key] !== 'no';
88049             }
88050
88051             function taggedAsIndoor(tags) {
88052                 return hasTag(tags, 'indoor') ||
88053                     hasTag(tags, 'level') ||
88054                     tags.highway === 'corridor';
88055             }
88056
88057             function allowsBridge(featureType) {
88058                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
88059             }
88060             function allowsTunnel(featureType) {
88061                 return featureType === 'highway' || featureType === 'railway' || featureType === 'waterway';
88062             }
88063
88064
88065             function getFeatureTypeForCrossingCheck(way, graph) {
88066                 var feature = getFeatureWithFeatureTypeTagsForWay(way, graph);
88067                 return getFeatureType(feature, graph);
88068             }
88069
88070             // discard
88071             var ignoredBuildings = {
88072                 demolished: true, dismantled: true, proposed: true, razed: true
88073             };
88074
88075
88076             function getFeatureType(entity, graph) {
88077
88078                 var geometry = entity.geometry(graph);
88079                 if (geometry !== 'line' && geometry !== 'area') { return null; }
88080
88081                 var tags = entity.tags;
88082
88083                 if (hasTag(tags, 'building') && !ignoredBuildings[tags.building]) { return 'building'; }
88084                 if (hasTag(tags, 'highway') && osmRoutableHighwayTagValues[tags.highway]) { return 'highway'; }
88085
88086                 // don't check railway or waterway areas
88087                 if (geometry !== 'line') { return null; }
88088
88089                 if (hasTag(tags, 'railway') && osmRailwayTrackTagValues[tags.railway]) { return 'railway'; }
88090                 if (hasTag(tags, 'waterway') && osmFlowingWaterwayTagValues[tags.waterway]) { return 'waterway'; }
88091
88092                 return null;
88093             }
88094
88095
88096             function isLegitCrossing(way1, featureType1, way2, featureType2) {
88097                 var tags1 = way1.tags;
88098                 var tags2 = way2.tags;
88099
88100                 // assume 0 by default
88101                 var level1 = tags1.level || '0';
88102                 var level2 = tags2.level || '0';
88103
88104                 if (taggedAsIndoor(tags1) && taggedAsIndoor(tags2) && level1 !== level2) {
88105                     // assume features don't interact if they're indoor on different levels
88106                     return true;
88107                 }
88108
88109                 // assume 0 by default; don't use way.layer() since we account for structures here
88110                 var layer1 = tags1.layer || '0';
88111                 var layer2 = tags2.layer || '0';
88112
88113                 if (allowsBridge(featureType1) && allowsBridge(featureType2)) {
88114                     if (hasTag(tags1, 'bridge') && !hasTag(tags2, 'bridge')) { return true; }
88115                     if (!hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge')) { return true; }
88116                     // crossing bridges must use different layers
88117                     if (hasTag(tags1, 'bridge') && hasTag(tags2, 'bridge') && layer1 !== layer2) { return true; }
88118                 } else if (allowsBridge(featureType1) && hasTag(tags1, 'bridge')) { return true; }
88119                 else if (allowsBridge(featureType2) && hasTag(tags2, 'bridge')) { return true; }
88120
88121                 if (allowsTunnel(featureType1) && allowsTunnel(featureType2)) {
88122                     if (hasTag(tags1, 'tunnel') && !hasTag(tags2, 'tunnel')) { return true; }
88123                     if (!hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel')) { return true; }
88124                     // crossing tunnels must use different layers
88125                     if (hasTag(tags1, 'tunnel') && hasTag(tags2, 'tunnel') && layer1 !== layer2) { return true; }
88126                 } else if (allowsTunnel(featureType1) && hasTag(tags1, 'tunnel')) { return true; }
88127                 else if (allowsTunnel(featureType2) && hasTag(tags2, 'tunnel')) { return true; }
88128
88129                 // don't flag crossing waterways and pier/highways
88130                 if (featureType1 === 'waterway' && featureType2 === 'highway' && tags2.man_made === 'pier') { return true; }
88131                 if (featureType2 === 'waterway' && featureType1 === 'highway' && tags1.man_made === 'pier') { return true; }
88132
88133                 if (featureType1 === 'building' || featureType2 === 'building') {
88134                     // for building crossings, different layers are enough
88135                     if (layer1 !== layer2) { return true; }
88136                 }
88137                 return false;
88138             }
88139
88140
88141             // highway values for which we shouldn't recommend connecting to waterways
88142             var highwaysDisallowingFords = {
88143                 motorway: true, motorway_link: true, trunk: true, trunk_link: true,
88144                 primary: true, primary_link: true, secondary: true, secondary_link: true
88145             };
88146             var nonCrossingHighways = { track: true };
88147
88148             function tagsForConnectionNodeIfAllowed(entity1, entity2, graph) {
88149                 var featureType1 = getFeatureType(entity1, graph);
88150                 var featureType2 = getFeatureType(entity2, graph);
88151
88152                 var geometry1 = entity1.geometry(graph);
88153                 var geometry2 = entity2.geometry(graph);
88154                 var bothLines = geometry1 === 'line' && geometry2 === 'line';
88155
88156                 if (featureType1 === featureType2) {
88157                     if (featureType1 === 'highway') {
88158                         var entity1IsPath = osmPathHighwayTagValues[entity1.tags.highway];
88159                         var entity2IsPath = osmPathHighwayTagValues[entity2.tags.highway];
88160                         if ((entity1IsPath || entity2IsPath) && entity1IsPath !== entity2IsPath) {
88161                             // one feature is a path but not both
88162
88163                             var roadFeature = entity1IsPath ? entity2 : entity1;
88164                             if (nonCrossingHighways[roadFeature.tags.highway]) {
88165                                 // don't mark path connections with certain roads as crossings
88166                                 return {};
88167                             }
88168                             var pathFeature = entity1IsPath ? entity1 : entity2;
88169                             if (['marked', 'unmarked'].indexOf(pathFeature.tags.crossing) !== -1) {
88170                                 // if the path is a crossing, match the crossing type
88171                                 return bothLines ? { highway: 'crossing', crossing: pathFeature.tags.crossing } : {};
88172                             }
88173                             // don't add a `crossing` subtag to ambiguous crossings
88174                             return bothLines ? { highway: 'crossing' } : {};
88175                         }
88176                         return {};
88177                     }
88178                     if (featureType1 === 'waterway') { return {}; }
88179                     if (featureType1 === 'railway') { return {}; }
88180
88181                 } else {
88182                     var featureTypes = [featureType1, featureType2];
88183                     if (featureTypes.indexOf('highway') !== -1) {
88184                         if (featureTypes.indexOf('railway') !== -1) {
88185                             if (osmPathHighwayTagValues[entity1.tags.highway] ||
88186                                 osmPathHighwayTagValues[entity2.tags.highway]) {
88187                                 // path-rail connections use this tag
88188                                 return bothLines ? { railway: 'crossing' } : {};
88189                             } else {
88190                                 // road-rail connections use this tag
88191                                 return bothLines ? { railway: 'level_crossing' } : {};
88192                             }
88193                         }
88194
88195                         if (featureTypes.indexOf('waterway') !== -1) {
88196                             // do not allow fords on structures
88197                             if (hasTag(entity1.tags, 'tunnel') && hasTag(entity2.tags, 'tunnel')) { return null; }
88198                             if (hasTag(entity1.tags, 'bridge') && hasTag(entity2.tags, 'bridge')) { return null; }
88199
88200                             if (highwaysDisallowingFords[entity1.tags.highway] ||
88201                                 highwaysDisallowingFords[entity2.tags.highway]) {
88202                                 // do not allow fords on major highways
88203                                 return null;
88204                             }
88205                             return bothLines ? { ford: 'yes' } : {};
88206                         }
88207                     }
88208                 }
88209                 return null;
88210             }
88211
88212
88213             function findCrossingsByWay(way1, graph, tree) {
88214                 var edgeCrossInfos = [];
88215                 if (way1.type !== 'way') { return edgeCrossInfos; }
88216
88217                 var way1FeatureType = getFeatureTypeForCrossingCheck(way1, graph);
88218                 if (way1FeatureType === null) { return edgeCrossInfos; }
88219
88220                 var checkedSingleCrossingWays = {};
88221
88222                 // declare vars ahead of time to reduce garbage collection
88223                 var i, j, nodeIndex;
88224                 var extent;
88225                 var n1, n2, nA, nB;
88226                 var segment1, segment2;
88227                 var oneOnly;
88228                 var intersected, way2, way2FeatureType, way2Nodes;
88229                 var way1Nodes = graph.childNodes(way1);
88230                 var comparedWays = {};
88231                 for (i = 0; i < way1Nodes.length - 1; i++) {
88232                     n1 = way1Nodes[i];
88233                     n2 = way1Nodes[i + 1];
88234                     extent = geoExtent([
88235                         [
88236                             Math.min(n1.loc[0], n2.loc[0]),
88237                             Math.min(n1.loc[1], n2.loc[1])
88238                         ],
88239                         [
88240                             Math.max(n1.loc[0], n2.loc[0]),
88241                             Math.max(n1.loc[1], n2.loc[1])
88242                         ]
88243                     ]);
88244
88245                     intersected = tree.intersects(extent, graph);
88246                     for (j = 0; j < intersected.length; j++) {
88247                         way2 = intersected[j];
88248
88249                         if (way2.type !== 'way') { continue; }
88250
88251                         // don't check for self-intersection in this validation
88252                         if (way2.id === way1.id) { continue; }
88253
88254                         // skip if this way was already checked and only one issue is needed
88255                         if (checkedSingleCrossingWays[way2.id]) { continue; }
88256
88257                         // mark this way as checked even if there are no crossings
88258                         comparedWays[way2.id] = true;
88259
88260                         // only check crossing highway, waterway, building, and railway
88261                         way2FeatureType = getFeatureTypeForCrossingCheck(way2, graph);
88262                         if (way2FeatureType === null ||
88263                             isLegitCrossing(way1, way1FeatureType, way2, way2FeatureType)) {
88264                             continue;
88265                         }
88266
88267                         // create only one issue for building crossings
88268                         oneOnly = way1FeatureType === 'building' || way2FeatureType === 'building';
88269                         segment1 = [n1.loc, n2.loc];
88270
88271                         way2Nodes = graph.childNodes(way2);
88272                         for (nodeIndex = 0; nodeIndex < way2Nodes.length - 1; nodeIndex++) {
88273                             nA = way2Nodes[nodeIndex];
88274                             nB = way2Nodes[nodeIndex + 1];
88275                             if (nA.id === n1.id || nA.id === n2.id ||
88276                                 nB.id === n1.id || nB.id === n2.id) {
88277                                 // n1 or n2 is a connection node; skip
88278                                 continue;
88279                             }
88280                             segment2 = [nA.loc, nB.loc];
88281                             var point = geoLineIntersection(segment1, segment2);
88282                             if (point) {
88283                                 edgeCrossInfos.push({
88284                                     wayInfos: [
88285                                         {
88286                                             way: way1,
88287                                             featureType: way1FeatureType,
88288                                             edge: [n1.id, n2.id]
88289                                         },
88290                                         {
88291                                             way: way2,
88292                                             featureType: way2FeatureType,
88293                                             edge: [nA.id, nB.id]
88294                                         }
88295                                     ],
88296                                     crossPoint: point
88297                                 });
88298                                 if (oneOnly) {
88299                                     checkedSingleCrossingWays[way2.id] = true;
88300                                     break;
88301                                 }
88302                             }
88303                         }
88304                     }
88305                 }
88306                 return edgeCrossInfos;
88307             }
88308
88309
88310             function waysToCheck(entity, graph) {
88311                 var featureType = getFeatureType(entity, graph);
88312                 if (!featureType) { return []; }
88313
88314                 if (entity.type === 'way') {
88315                     return [entity];
88316                 } else if (entity.type === 'relation') {
88317                     return entity.members.reduce(function(array, member) {
88318                         if (member.type === 'way' &&
88319                             // only look at geometry ways
88320                             (!member.role || member.role === 'outer' || member.role === 'inner')) {
88321                             var entity = graph.hasEntity(member.id);
88322                             // don't add duplicates
88323                             if (entity && array.indexOf(entity) === -1) {
88324                                 array.push(entity);
88325                             }
88326                         }
88327                         return array;
88328                     }, []);
88329                 }
88330                 return [];
88331             }
88332
88333
88334             var validation = function checkCrossingWays(entity, graph) {
88335
88336                 var tree = context.history().tree();
88337
88338                 var ways = waysToCheck(entity, graph);
88339
88340                 var issues = [];
88341                 // declare these here to reduce garbage collection
88342                 var wayIndex, crossingIndex, crossings;
88343                 for (wayIndex in ways) {
88344                     crossings = findCrossingsByWay(ways[wayIndex], graph, tree);
88345                     for (crossingIndex in crossings) {
88346                         issues.push(createIssue(crossings[crossingIndex], graph));
88347                     }
88348                 }
88349                 return issues;
88350             };
88351
88352
88353             function createIssue(crossing, graph) {
88354
88355                 // use the entities with the tags that define the feature type
88356                 crossing.wayInfos.sort(function(way1Info, way2Info) {
88357                     var type1 = way1Info.featureType;
88358                     var type2 = way2Info.featureType;
88359                     if (type1 === type2) {
88360                         return utilDisplayLabel(way1Info.way, context) > utilDisplayLabel(way2Info.way, context);
88361                     } else if (type1 === 'waterway') {
88362                         return true;
88363                     } else if (type2 === 'waterway') {
88364                         return false;
88365                     }
88366                     return type1 < type2;
88367                 });
88368                 var entities = crossing.wayInfos.map(function(wayInfo) {
88369                     return getFeatureWithFeatureTypeTagsForWay(wayInfo.way, graph);
88370                 });
88371                 var edges = [crossing.wayInfos[0].edge, crossing.wayInfos[1].edge];
88372                 var featureTypes = [crossing.wayInfos[0].featureType, crossing.wayInfos[1].featureType];
88373
88374                 var connectionTags = tagsForConnectionNodeIfAllowed(entities[0], entities[1], graph);
88375
88376                 var featureType1 = crossing.wayInfos[0].featureType;
88377                 var featureType2 = crossing.wayInfos[1].featureType;
88378
88379                 var isCrossingIndoors = taggedAsIndoor(entities[0].tags) && taggedAsIndoor(entities[1].tags);
88380                 var isCrossingTunnels = allowsTunnel(featureType1) && hasTag(entities[0].tags, 'tunnel') &&
88381                                         allowsTunnel(featureType2) && hasTag(entities[1].tags, 'tunnel');
88382                 var isCrossingBridges = allowsBridge(featureType1) && hasTag(entities[0].tags, 'bridge') &&
88383                                         allowsBridge(featureType2) && hasTag(entities[1].tags, 'bridge');
88384
88385                 var subtype = [featureType1, featureType2].sort().join('-');
88386
88387                 var crossingTypeID = subtype;
88388
88389                 if (isCrossingIndoors) {
88390                     crossingTypeID = 'indoor-indoor';
88391                 } else if (isCrossingTunnels) {
88392                     crossingTypeID = 'tunnel-tunnel';
88393                 } else if (isCrossingBridges) {
88394                     crossingTypeID = 'bridge-bridge';
88395                 }
88396                 if (connectionTags && (isCrossingIndoors || isCrossingTunnels || isCrossingBridges)) {
88397                     crossingTypeID += '_connectable';
88398                 }
88399
88400                 return new validationIssue({
88401                     type: type,
88402                     subtype: subtype,
88403                     severity: 'warning',
88404                     message: function(context) {
88405                         var graph = context.graph();
88406                         var entity1 = graph.hasEntity(this.entityIds[0]),
88407                             entity2 = graph.hasEntity(this.entityIds[1]);
88408                         return (entity1 && entity2) ? t('issues.crossing_ways.message', {
88409                             feature: utilDisplayLabel(entity1, context),
88410                             feature2: utilDisplayLabel(entity2, context)
88411                         }) : '';
88412                     },
88413                     reference: showReference,
88414                     entityIds: entities.map(function(entity) {
88415                         return entity.id;
88416                     }),
88417                     data: {
88418                         edges: edges,
88419                         featureTypes: featureTypes,
88420                         connectionTags: connectionTags
88421                     },
88422                     // differentiate based on the loc since two ways can cross multiple times
88423                     hash: crossing.crossPoint.toString() +
88424                         // if the edges change then so does the fix
88425                         edges.slice().sort(function(edge1, edge2) {
88426                             // order to assure hash is deterministic
88427                             return edge1[0] < edge2[0] ? -1 : 1;
88428                         }).toString() +
88429                         // ensure the correct connection tags are added in the fix
88430                         JSON.stringify(connectionTags),
88431                     loc: crossing.crossPoint,
88432                     dynamicFixes: function(context) {
88433                         var mode = context.mode();
88434                         if (!mode || mode.id !== 'select' || mode.selectedIDs().length !== 1) { return []; }
88435
88436                         var selectedIndex = this.entityIds[0] === mode.selectedIDs()[0] ? 0 : 1;
88437                         var selectedFeatureType = this.data.featureTypes[selectedIndex];
88438                         var otherFeatureType = this.data.featureTypes[selectedIndex === 0 ? 1 : 0];
88439
88440                         var fixes = [];
88441
88442                         if (connectionTags) {
88443                             fixes.push(makeConnectWaysFix(this.data.connectionTags));
88444                         }
88445
88446                         if (isCrossingIndoors) {
88447                             fixes.push(new validationIssueFix({
88448                                 icon: 'iD-icon-layers',
88449                                 title: t('issues.fix.use_different_levels.title')
88450                             }));
88451                         } else if (isCrossingTunnels ||
88452                             isCrossingBridges ||
88453                             featureType1 === 'building' ||
88454                             featureType2 === 'building')  {
88455
88456                             fixes.push(makeChangeLayerFix('higher'));
88457                             fixes.push(makeChangeLayerFix('lower'));
88458
88459                         // can only add bridge/tunnel if both features are lines
88460                         } else if (context.geometry(this.entityIds[0]) === 'line' &&
88461                             context.geometry(this.entityIds[1]) === 'line') {
88462
88463                             // don't recommend adding bridges to waterways since they're uncommmon
88464                             if (allowsBridge(selectedFeatureType) && selectedFeatureType !== 'waterway') {
88465                                 fixes.push(makeAddBridgeOrTunnelFix('add_a_bridge', 'temaki-bridge', 'bridge'));
88466                             }
88467
88468                             // don't recommend adding tunnels under waterways since they're uncommmon
88469                             var skipTunnelFix = otherFeatureType === 'waterway' && selectedFeatureType !== 'waterway';
88470                             if (allowsTunnel(selectedFeatureType) && !skipTunnelFix) {
88471                                 fixes.push(makeAddBridgeOrTunnelFix('add_a_tunnel', 'temaki-tunnel', 'tunnel'));
88472                             }
88473                         }
88474
88475                         // repositioning the features is always an option
88476                         fixes.push(new validationIssueFix({
88477                             icon: 'iD-operation-move',
88478                             title: t('issues.fix.reposition_features.title')
88479                         }));
88480
88481                         return fixes;
88482                     }
88483                 });
88484
88485                 function showReference(selection) {
88486                     selection.selectAll('.issue-reference')
88487                         .data([0])
88488                         .enter()
88489                         .append('div')
88490                         .attr('class', 'issue-reference')
88491                         .text(t('issues.crossing_ways.' + crossingTypeID + '.reference'));
88492                 }
88493             }
88494
88495             function makeAddBridgeOrTunnelFix(fixTitleID, iconName, bridgeOrTunnel){
88496                 return new validationIssueFix({
88497                     icon: iconName,
88498                     title: t('issues.fix.' + fixTitleID + '.title'),
88499                     onClick: function(context) {
88500                         var mode = context.mode();
88501                         if (!mode || mode.id !== 'select') { return; }
88502
88503                         var selectedIDs = mode.selectedIDs();
88504                         if (selectedIDs.length !== 1) { return; }
88505
88506                         var selectedWayID = selectedIDs[0];
88507                         if (!context.hasEntity(selectedWayID)) { return; }
88508
88509                         var resultWayIDs = [selectedWayID];
88510
88511                         var edge, crossedEdge, crossedWayID;
88512                         if (this.issue.entityIds[0] === selectedWayID) {
88513                             edge = this.issue.data.edges[0];
88514                             crossedEdge = this.issue.data.edges[1];
88515                             crossedWayID = this.issue.entityIds[1];
88516                         } else {
88517                             edge = this.issue.data.edges[1];
88518                             crossedEdge = this.issue.data.edges[0];
88519                             crossedWayID = this.issue.entityIds[0];
88520                         }
88521
88522                         var crossingLoc = this.issue.loc;
88523
88524                         var projection = context.projection;
88525
88526                         var action = function actionAddStructure(graph) {
88527
88528                             var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
88529
88530                             var crossedWay = graph.hasEntity(crossedWayID);
88531                             // use the explicit width of the crossed feature as the structure length, if available
88532                             var structLengthMeters = crossedWay && crossedWay.tags.width && parseFloat(crossedWay.tags.width);
88533                             if (!structLengthMeters) {
88534                                 // if no explicit width is set, approximate the width based on the tags
88535                                 structLengthMeters = crossedWay && crossedWay.impliedLineWidthMeters();
88536                             }
88537                             if (structLengthMeters) {
88538                                 if (getFeatureType(crossedWay, graph) === 'railway') {
88539                                     // bridges over railways are generally much longer than the rail bed itself, compensate
88540                                     structLengthMeters *= 2;
88541                                 }
88542                             } else {
88543                                 // should ideally never land here since all rail/water/road tags should have an implied width
88544                                 structLengthMeters = 8;
88545                             }
88546
88547                             var a1 = geoAngle(edgeNodes[0], edgeNodes[1], projection) + Math.PI;
88548                             var a2 = geoAngle(graph.entity(crossedEdge[0]), graph.entity(crossedEdge[1]), projection) + Math.PI;
88549                             var crossingAngle = Math.max(a1, a2) - Math.min(a1, a2);
88550                             if (crossingAngle > Math.PI) { crossingAngle -= Math.PI; }
88551                             // lengthen the structure to account for the angle of the crossing
88552                             structLengthMeters = ((structLengthMeters / 2) / Math.sin(crossingAngle)) * 2;
88553
88554                             // add padding since the structure must extend past the edges of the crossed feature
88555                             structLengthMeters += 4;
88556
88557                             // clamp the length to a reasonable range
88558                             structLengthMeters = Math.min(Math.max(structLengthMeters, 4), 50);
88559
88560                             function geomToProj(geoPoint) {
88561                                 return [
88562                                     geoLonToMeters(geoPoint[0], geoPoint[1]),
88563                                     geoLatToMeters(geoPoint[1])
88564                                 ];
88565                             }
88566                             function projToGeom(projPoint) {
88567                                 var lat = geoMetersToLat(projPoint[1]);
88568                                 return [
88569                                     geoMetersToLon(projPoint[0], lat),
88570                                     lat
88571                                 ];
88572                             }
88573
88574                             var projEdgeNode1 = geomToProj(edgeNodes[0].loc);
88575                             var projEdgeNode2 = geomToProj(edgeNodes[1].loc);
88576
88577                             var projectedAngle = geoVecAngle(projEdgeNode1, projEdgeNode2);
88578
88579                             var projectedCrossingLoc = geomToProj(crossingLoc);
88580                             var linearToSphericalMetersRatio = geoVecLength(projEdgeNode1, projEdgeNode2) /
88581                                 geoSphericalDistance(edgeNodes[0].loc, edgeNodes[1].loc);
88582
88583                             function locSphericalDistanceFromCrossingLoc(angle, distanceMeters) {
88584                                 var lengthSphericalMeters = distanceMeters * linearToSphericalMetersRatio;
88585                                 return projToGeom([
88586                                     projectedCrossingLoc[0] + Math.cos(angle) * lengthSphericalMeters,
88587                                     projectedCrossingLoc[1] + Math.sin(angle) * lengthSphericalMeters
88588                                 ]);
88589                             }
88590
88591                             var endpointLocGetter1 = function(lengthMeters) {
88592                                 return locSphericalDistanceFromCrossingLoc(projectedAngle, lengthMeters);
88593                             };
88594                             var endpointLocGetter2 = function(lengthMeters) {
88595                                 return locSphericalDistanceFromCrossingLoc(projectedAngle + Math.PI, lengthMeters);
88596                             };
88597
88598                             // avoid creating very short edges from splitting too close to another node
88599                             var minEdgeLengthMeters = 0.55;
88600
88601                             // decide where to bound the structure along the way, splitting as necessary
88602                             function determineEndpoint(edge, endNode, locGetter) {
88603                                 var newNode;
88604
88605                                 var idealLengthMeters = structLengthMeters / 2;
88606
88607                                 // distance between the crossing location and the end of the edge,
88608                                 // the maximum length of this side of the structure
88609                                 var crossingToEdgeEndDistance = geoSphericalDistance(crossingLoc, endNode.loc);
88610
88611                                 if (crossingToEdgeEndDistance - idealLengthMeters > minEdgeLengthMeters) {
88612                                     // the edge is long enough to insert a new node
88613
88614                                     // the loc that would result in the full expected length
88615                                     var idealNodeLoc = locGetter(idealLengthMeters);
88616
88617                                     newNode = osmNode();
88618                                     graph = actionAddMidpoint({ loc: idealNodeLoc, edge: edge }, newNode)(graph);
88619
88620                                 } else {
88621                                     var edgeCount = 0;
88622                                     endNode.parentIntersectionWays(graph).forEach(function(way) {
88623                                         way.nodes.forEach(function(nodeID) {
88624                                             if (nodeID === endNode.id) {
88625                                                 if ((endNode.id === way.first() && endNode.id !== way.last()) ||
88626                                                     (endNode.id === way.last() && endNode.id !== way.first())) {
88627                                                     edgeCount += 1;
88628                                                 } else {
88629                                                     edgeCount += 2;
88630                                                 }
88631                                             }
88632                                         });
88633                                     });
88634
88635                                     if (edgeCount >= 3) {
88636                                         // the end node is a junction, try to leave a segment
88637                                         // between it and the structure - #7202
88638
88639                                         var insetLength = crossingToEdgeEndDistance - minEdgeLengthMeters;
88640                                         if (insetLength > minEdgeLengthMeters) {
88641                                             var insetNodeLoc = locGetter(insetLength);
88642                                             newNode = osmNode();
88643                                             graph = actionAddMidpoint({ loc: insetNodeLoc, edge: edge }, newNode)(graph);
88644                                         }
88645                                     }
88646                                 }
88647
88648                                 // if the edge is too short to subdivide as desired, then
88649                                 // just bound the structure at the existing end node
88650                                 if (!newNode) { newNode = endNode; }
88651
88652                                 var splitAction = actionSplit(newNode.id)
88653                                     .limitWays(resultWayIDs); // only split selected or created ways
88654
88655                                 // do the split
88656                                 graph = splitAction(graph);
88657                                 if (splitAction.getCreatedWayIDs().length) {
88658                                     resultWayIDs.push(splitAction.getCreatedWayIDs()[0]);
88659                                 }
88660
88661                                 return newNode;
88662                             }
88663
88664                             var structEndNode1 = determineEndpoint(edge, edgeNodes[1], endpointLocGetter1);
88665                             var structEndNode2 = determineEndpoint([edgeNodes[0].id, structEndNode1.id], edgeNodes[0], endpointLocGetter2);
88666
88667                             var structureWay = resultWayIDs.map(function(id) {
88668                                 return graph.entity(id);
88669                             }).find(function(way) {
88670                                 return way.nodes.indexOf(structEndNode1.id) !== -1 &&
88671                                     way.nodes.indexOf(structEndNode2.id) !== -1;
88672                             });
88673
88674                             var tags = Object.assign({}, structureWay.tags); // copy tags
88675                             if (bridgeOrTunnel === 'bridge'){
88676                                 tags.bridge = 'yes';
88677                                 tags.layer = '1';
88678                             } else {
88679                                 var tunnelValue = 'yes';
88680                                 if (getFeatureType(structureWay, graph) === 'waterway') {
88681                                     // use `tunnel=culvert` for waterways by default
88682                                     tunnelValue = 'culvert';
88683                                 }
88684                                 tags.tunnel = tunnelValue;
88685                                 tags.layer = '-1';
88686                             }
88687                             // apply the structure tags to the way
88688                             graph = actionChangeTags(structureWay.id, tags)(graph);
88689                             return graph;
88690                         };
88691
88692                         context.perform(action, t('issues.fix.' + fixTitleID + '.annotation'));
88693                         context.enter(modeSelect(context, resultWayIDs));
88694                     }
88695                 });
88696             }
88697
88698             function makeConnectWaysFix(connectionTags) {
88699
88700                 var fixTitleID = 'connect_features';
88701                 if (connectionTags.ford) {
88702                     fixTitleID = 'connect_using_ford';
88703                 }
88704
88705                 return new validationIssueFix({
88706                     icon: 'iD-icon-crossing',
88707                     title: t('issues.fix.' + fixTitleID + '.title'),
88708                     onClick: function(context) {
88709                         var loc = this.issue.loc;
88710                         var connectionTags = this.issue.data.connectionTags;
88711                         var edges = this.issue.data.edges;
88712
88713                         context.perform(
88714                             function actionConnectCrossingWays(graph) {
88715                                 // create the new node for the points
88716                                 var node = osmNode({ loc: loc, tags: connectionTags });
88717                                 graph = graph.replace(node);
88718
88719                                 var nodesToMerge = [node.id];
88720                                 var mergeThresholdInMeters = 0.75;
88721
88722                                 edges.forEach(function(edge) {
88723                                     var edgeNodes = [graph.entity(edge[0]), graph.entity(edge[1])];
88724                                     var closestNodeInfo = geoSphericalClosestNode(edgeNodes, loc);
88725                                     // if there is already a point nearby, use that
88726                                     if (closestNodeInfo.distance < mergeThresholdInMeters) {
88727                                         nodesToMerge.push(closestNodeInfo.node.id);
88728                                     // else add the new node to the way
88729                                     } else {
88730                                         graph = actionAddMidpoint({loc: loc, edge: edge}, node)(graph);
88731                                     }
88732                                 });
88733
88734                                 if (nodesToMerge.length > 1) {
88735                                     // if we're using nearby nodes, merge them with the new node
88736                                     graph = actionMergeNodes(nodesToMerge, loc)(graph);
88737                                 }
88738
88739                                 return graph;
88740                             },
88741                             t('issues.fix.connect_crossing_features.annotation')
88742                         );
88743                     }
88744                 });
88745             }
88746
88747             function makeChangeLayerFix(higherOrLower) {
88748                 return new validationIssueFix({
88749                     icon: 'iD-icon-' + (higherOrLower === 'higher' ? 'up' : 'down'),
88750                     title: t('issues.fix.tag_this_as_' + higherOrLower + '.title'),
88751                     onClick: function(context) {
88752
88753                         var mode = context.mode();
88754                         if (!mode || mode.id !== 'select') { return; }
88755
88756                         var selectedIDs = mode.selectedIDs();
88757                         if (selectedIDs.length !== 1) { return; }
88758
88759                         var selectedID = selectedIDs[0];
88760                         if (!this.issue.entityIds.some(function(entityId) {
88761                             return entityId === selectedID;
88762                         })) { return; }
88763
88764                         var entity = context.hasEntity(selectedID);
88765                         if (!entity) { return; }
88766
88767                         var tags = Object.assign({}, entity.tags);   // shallow copy
88768                         var layer = tags.layer && Number(tags.layer);
88769                         if (layer && !isNaN(layer)) {
88770                             if (higherOrLower === 'higher') {
88771                                 layer += 1;
88772                             } else {
88773                                 layer -= 1;
88774                             }
88775                         } else {
88776                             if (higherOrLower === 'higher') {
88777                                 layer = 1;
88778                             } else {
88779                                 layer = -1;
88780                             }
88781                         }
88782                         tags.layer = layer.toString();
88783                         context.perform(
88784                             actionChangeTags(entity.id, tags),
88785                             t('operations.change_tags.annotation')
88786                         );
88787                     }
88788                 });
88789             }
88790
88791             validation.type = type;
88792
88793             return validation;
88794         }
88795
88796         function validationDisconnectedWay() {
88797             var type = 'disconnected_way';
88798
88799             function isTaggedAsHighway(entity) {
88800                 return osmRoutableHighwayTagValues[entity.tags.highway];
88801             }
88802
88803             var validation = function checkDisconnectedWay(entity, graph) {
88804
88805                 var routingIslandWays = routingIslandForEntity(entity);
88806                 if (!routingIslandWays) { return []; }
88807
88808                 return [new validationIssue({
88809                     type: type,
88810                     subtype: 'highway',
88811                     severity: 'warning',
88812                     message: function(context) {
88813                         if (this.entityIds.length === 1) {
88814                             var entity = context.hasEntity(this.entityIds[0]);
88815                             return entity ? t('issues.disconnected_way.highway.message', { highway: utilDisplayLabel(entity, context) }) : '';
88816                         }
88817                         return t('issues.disconnected_way.routable.message.multiple', { count: this.entityIds.length.toString() });
88818                     },
88819                     reference: showReference,
88820                     entityIds: Array.from(routingIslandWays).map(function(way) { return way.id; }),
88821                     dynamicFixes: makeFixes
88822                 })];
88823
88824
88825                 function makeFixes(context) {
88826
88827                     var fixes = [];
88828
88829                     var singleEntity = this.entityIds.length === 1 && context.hasEntity(this.entityIds[0]);
88830
88831                     if (singleEntity) {
88832
88833                         if (singleEntity.type === 'way' && !singleEntity.isClosed()) {
88834
88835                             var startFix = makeContinueDrawingFixIfAllowed(singleEntity.first(), 'start');
88836                             if (startFix) { fixes.push(startFix); }
88837
88838                             var endFix = makeContinueDrawingFixIfAllowed(singleEntity.last(), 'end');
88839                             if (endFix) { fixes.push(endFix); }
88840                         }
88841                         if (!fixes.length) {
88842                             fixes.push(new validationIssueFix({
88843                                 title: t('issues.fix.connect_feature.title')
88844                             }));
88845                         }
88846
88847                         fixes.push(new validationIssueFix({
88848                             icon: 'iD-operation-delete',
88849                             title: t('issues.fix.delete_feature.title'),
88850                             entityIds: [singleEntity.id],
88851                             onClick: function(context) {
88852                                 var id = this.issue.entityIds[0];
88853                                 var operation = operationDelete([id], context);
88854                                 if (!operation.disabled()) {
88855                                     operation();
88856                                 }
88857                             }
88858                         }));
88859                     } else {
88860                         fixes.push(new validationIssueFix({
88861                             title: t('issues.fix.connect_features.title')
88862                         }));
88863                     }
88864
88865                     return fixes;
88866                 }
88867
88868
88869                 function showReference(selection) {
88870                     selection.selectAll('.issue-reference')
88871                         .data([0])
88872                         .enter()
88873                         .append('div')
88874                         .attr('class', 'issue-reference')
88875                         .text(t('issues.disconnected_way.routable.reference'));
88876                 }
88877
88878                 function routingIslandForEntity(entity) {
88879
88880                     var routingIsland = new Set();  // the interconnected routable features
88881                     var waysToCheck = [];           // the queue of remaining routable ways to traverse
88882
88883                     function queueParentWays(node) {
88884                         graph.parentWays(node).forEach(function(parentWay) {
88885                             if (!routingIsland.has(parentWay) &&    // only check each feature once
88886                                 isRoutableWay(parentWay, false)) {  // only check routable features
88887                                 routingIsland.add(parentWay);
88888                                 waysToCheck.push(parentWay);
88889                             }
88890                         });
88891                     }
88892
88893                     if (entity.type === 'way' && isRoutableWay(entity, true)) {
88894
88895                         routingIsland.add(entity);
88896                         waysToCheck.push(entity);
88897
88898                     } else if (entity.type === 'node' && isRoutableNode(entity)) {
88899
88900                         routingIsland.add(entity);
88901                         queueParentWays(entity);
88902
88903                     } else {
88904                         // this feature isn't routable, cannot be a routing island
88905                         return null;
88906                     }
88907
88908                     while (waysToCheck.length) {
88909                         var wayToCheck = waysToCheck.pop();
88910                         var childNodes = graph.childNodes(wayToCheck);
88911                         for (var i in childNodes) {
88912                             var vertex = childNodes[i];
88913
88914                             if (isConnectedVertex(vertex)) {
88915                                 // found a link to the wider network, not a routing island
88916                                 return null;
88917                             }
88918
88919                             if (isRoutableNode(vertex)) {
88920                                 routingIsland.add(vertex);
88921                             }
88922
88923                             queueParentWays(vertex);
88924                         }
88925                     }
88926
88927                     // no network link found, this is a routing island, return its members
88928                     return routingIsland;
88929                 }
88930
88931                 function isConnectedVertex(vertex) {
88932                     // assume ways overlapping unloaded tiles are connected to the wider road network  - #5938
88933                     var osm = services$1.osm;
88934                     if (osm && !osm.isDataLoaded(vertex.loc)) { return true; }
88935
88936                     // entrances are considered connected
88937                     if (vertex.tags.entrance &&
88938                         vertex.tags.entrance !== 'no') { return true; }
88939                     if (vertex.tags.amenity === 'parking_entrance') { return true; }
88940
88941                     return false;
88942                 }
88943
88944                 function isRoutableNode(node) {
88945                     // treat elevators as distinct features in the highway network
88946                     if (node.tags.highway === 'elevator') { return true; }
88947                     return false;
88948                 }
88949
88950                 function isRoutableWay(way, ignoreInnerWays) {
88951                     if (isTaggedAsHighway(way) || way.tags.route === 'ferry') { return true; }
88952
88953                     return graph.parentRelations(way).some(function(parentRelation) {
88954                         if (parentRelation.tags.type === 'route' &&
88955                             parentRelation.tags.route === 'ferry') { return true; }
88956
88957                         if (parentRelation.isMultipolygon() &&
88958                             isTaggedAsHighway(parentRelation) &&
88959                             (!ignoreInnerWays || parentRelation.memberById(way.id).role !== 'inner')) { return true; }
88960                     });
88961                 }
88962
88963                 function makeContinueDrawingFixIfAllowed(vertexID, whichEnd) {
88964                     var vertex = graph.hasEntity(vertexID);
88965                     if (!vertex || vertex.tags.noexit === 'yes') { return null; }
88966
88967                     var useLeftContinue = (whichEnd === 'start' && textDirection === 'ltr') ||
88968                         (whichEnd === 'end' && textDirection === 'rtl');
88969
88970                     return new validationIssueFix({
88971                         icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
88972                         title: t('issues.fix.continue_from_' + whichEnd + '.title'),
88973                         entityIds: [vertexID],
88974                         onClick: function(context) {
88975                             var wayId = this.issue.entityIds[0];
88976                             var way = context.hasEntity(wayId);
88977                             var vertexId = this.entityIds[0];
88978                             var vertex = context.hasEntity(vertexId);
88979
88980                             if (!way || !vertex) { return; }
88981
88982                             // make sure the vertex is actually visible and editable
88983                             var map = context.map();
88984                             if (!context.editable() || !map.trimmedExtent().contains(vertex.loc)) {
88985                                 map.zoomToEase(vertex);
88986                             }
88987
88988                             context.enter(
88989                                 modeDrawLine(context, wayId, context.graph(), context.graph(), 'line', way.affix(vertexId), true)
88990                             );
88991                         }
88992                     });
88993                 }
88994
88995             };
88996
88997             validation.type = type;
88998
88999             return validation;
89000         }
89001
89002         function validationFormatting() {
89003             var type = 'invalid_format';
89004
89005             var validation = function(entity) {
89006                 var issues = [];
89007
89008                 function isValidEmail(email) {
89009                     // Emails in OSM are going to be official so they should be pretty simple
89010                     // Using negated lists to better support all possible unicode characters (#6494)
89011                     var valid_email = /^[^\(\)\\,":;<>@\[\]]+@[^\(\)\\,":;<>@\[\]\.]+(?:\.[a-z0-9-]+)*$/i;
89012
89013                     // An empty value is also acceptable
89014                     return (!email || valid_email.test(email));
89015                 }
89016                 /*
89017                 function isSchemePresent(url) {
89018                     var valid_scheme = /^https?:\/\//i;
89019                     return (!url || valid_scheme.test(url));
89020                 }
89021                 */
89022                 function showReferenceEmail(selection) {
89023                     selection.selectAll('.issue-reference')
89024                         .data([0])
89025                         .enter()
89026                         .append('div')
89027                         .attr('class', 'issue-reference')
89028                         .text(t('issues.invalid_format.email.reference'));
89029                 }
89030                 /*
89031                 function showReferenceWebsite(selection) {
89032                     selection.selectAll('.issue-reference')
89033                         .data([0])
89034                         .enter()
89035                         .append('div')
89036                         .attr('class', 'issue-reference')
89037                         .text(t('issues.invalid_format.website.reference'));
89038                 }
89039
89040                 if (entity.tags.website) {
89041                     // Multiple websites are possible
89042                     // If ever we support ES6, arrow functions make this nicer
89043                     var websites = entity.tags.website
89044                         .split(';')
89045                         .map(function(s) { return s.trim(); })
89046                         .filter(function(x) { return !isSchemePresent(x); });
89047
89048                     if (websites.length) {
89049                         issues.push(new validationIssue({
89050                             type: type,
89051                             subtype: 'website',
89052                             severity: 'warning',
89053                             message: function(context) {
89054                                 var entity = context.hasEntity(this.entityIds[0]);
89055                                 return entity ? t('issues.invalid_format.website.message' + this.data,
89056                                     { feature: utilDisplayLabel(entity, context), site: websites.join(', ') }) : '';
89057                             },
89058                             reference: showReferenceWebsite,
89059                             entityIds: [entity.id],
89060                             hash: websites.join(),
89061                             data: (websites.length > 1) ? '_multi' : ''
89062                         }));
89063                     }
89064                 }
89065                 */
89066                 if (entity.tags.email) {
89067                     // Multiple emails are possible
89068                     var emails = entity.tags.email
89069                         .split(';')
89070                         .map(function(s) { return s.trim(); })
89071                         .filter(function(x) { return !isValidEmail(x); });
89072
89073                     if (emails.length) {
89074                         issues.push(new validationIssue({
89075                             type: type,
89076                             subtype: 'email',
89077                             severity: 'warning',
89078                             message: function(context) {
89079                                 var entity = context.hasEntity(this.entityIds[0]);
89080                                 return entity ? t('issues.invalid_format.email.message' + this.data,
89081                                     { feature: utilDisplayLabel(entity, context), email: emails.join(', ') }) : '';
89082                             },
89083                             reference: showReferenceEmail,
89084                             entityIds: [entity.id],
89085                             hash: emails.join(),
89086                             data: (emails.length > 1) ? '_multi' : ''
89087                         }));
89088                     }
89089                 }
89090
89091                 return issues;
89092             };
89093
89094             validation.type = type;
89095
89096             return validation;
89097         }
89098
89099         function validationHelpRequest(context) {
89100             var type = 'help_request';
89101
89102             var validation = function checkFixmeTag(entity) {
89103
89104                 if (!entity.tags.fixme) { return []; }
89105
89106                 // don't flag fixmes on features added by the user
89107                 if (entity.version === undefined) { return []; }
89108
89109                 if (entity.v !== undefined) {
89110                     var baseEntity = context.history().base().hasEntity(entity.id);
89111                     // don't flag fixmes added by the user on existing features
89112                     if (!baseEntity || !baseEntity.tags.fixme) { return []; }
89113                 }
89114
89115                 return [new validationIssue({
89116                     type: type,
89117                     subtype: 'fixme_tag',
89118                     severity: 'warning',
89119                     message: function(context) {
89120                         var entity = context.hasEntity(this.entityIds[0]);
89121                         return entity ? t('issues.fixme_tag.message', { feature: utilDisplayLabel(entity, context) }) : '';
89122                     },
89123                     dynamicFixes: function() {
89124                         return [
89125                             new validationIssueFix({
89126                                 title: t('issues.fix.address_the_concern.title')
89127                             })
89128                         ];
89129                     },
89130                     reference: showReference,
89131                     entityIds: [entity.id]
89132                 })];
89133
89134                 function showReference(selection) {
89135                     selection.selectAll('.issue-reference')
89136                         .data([0])
89137                         .enter()
89138                         .append('div')
89139                         .attr('class', 'issue-reference')
89140                         .text(t('issues.fixme_tag.reference'));
89141                 }
89142             };
89143
89144             validation.type = type;
89145
89146             return validation;
89147         }
89148
89149         function validationImpossibleOneway() {
89150             var type = 'impossible_oneway';
89151
89152             var validation = function checkImpossibleOneway(entity, graph) {
89153
89154                 if (entity.type !== 'way' || entity.geometry(graph) !== 'line') { return []; }
89155
89156                 if (entity.isClosed()) { return []; }
89157
89158                 if (!typeForWay(entity)) { return []; }
89159
89160                 if (!isOneway(entity)) { return []; }
89161
89162                 var firstIssues = issuesForNode(entity, entity.first());
89163                 var lastIssues = issuesForNode(entity, entity.last());
89164
89165                 return firstIssues.concat(lastIssues);
89166
89167                 function typeForWay(way) {
89168                     if (way.geometry(graph) !== 'line') { return null; }
89169
89170                     if (osmRoutableHighwayTagValues[way.tags.highway]) { return 'highway'; }
89171                     if (osmFlowingWaterwayTagValues[way.tags.waterway]) { return 'waterway'; }
89172                     return null;
89173                 }
89174
89175                 function isOneway(way) {
89176                     if (way.tags.oneway === 'yes') { return true; }
89177                     if (way.tags.oneway) { return false; }
89178
89179                     for (var key in way.tags) {
89180                         if (osmOneWayTags[key] && osmOneWayTags[key][way.tags[key]]) {
89181                             return true;
89182                         }
89183                     }
89184                     return false;
89185                 }
89186
89187                 function nodeOccursMoreThanOnce(way, nodeID) {
89188                     var occurences = 0;
89189                     for (var index in way.nodes) {
89190                         if (way.nodes[index] === nodeID) {
89191                             occurences += 1;
89192                             if (occurences > 1) { return true; }
89193                         }
89194                     }
89195                     return false;
89196                 }
89197
89198                 function isConnectedViaOtherTypes(way, node) {
89199
89200                     var wayType = typeForWay(way);
89201
89202                     if (wayType === 'highway') {
89203                         // entrances are considered connected
89204                         if (node.tags.entrance && node.tags.entrance !== 'no') { return true; }
89205                         if (node.tags.amenity === 'parking_entrance') { return true; }
89206                     } else if (wayType === 'waterway') {
89207                         if (node.id === way.first()) {
89208                             // multiple waterways may start at the same spring
89209                             if (node.tags.natural === 'spring') { return true; }
89210                         } else {
89211                             // multiple waterways may end at the same drain
89212                             if (node.tags.manhole === 'drain') { return true; }
89213                         }
89214                     }
89215
89216                     return graph.parentWays(node).some(function(parentWay) {
89217                         if (parentWay.id === way.id) { return false; }
89218
89219                         if (wayType === 'highway') {
89220
89221                             // allow connections to highway areas
89222                             if (parentWay.geometry(graph) === 'area' &&
89223                                 osmRoutableHighwayTagValues[parentWay.tags.highway]) { return true; }
89224
89225                             // count connections to ferry routes as connected
89226                             if (parentWay.tags.route === 'ferry') { return true; }
89227
89228                             return graph.parentRelations(parentWay).some(function(parentRelation) {
89229                                 if (parentRelation.tags.type === 'route' &&
89230                                     parentRelation.tags.route === 'ferry') { return true; }
89231
89232                                 // allow connections to highway multipolygons
89233                                 return parentRelation.isMultipolygon() && osmRoutableHighwayTagValues[parentRelation.tags.highway];
89234                             });
89235                         } else if (wayType === 'waterway') {
89236                             // multiple waterways may start or end at a water body at the same node
89237                             if (parentWay.tags.natural === 'water' ||
89238                                 parentWay.tags.natural === 'coastline') { return true; }
89239                         }
89240                         return false;
89241                     });
89242                 }
89243
89244                 function issuesForNode(way, nodeID) {
89245
89246                     var isFirst = nodeID === way.first();
89247
89248                     var wayType = typeForWay(way);
89249
89250                     // ignore if this way is self-connected at this node
89251                     if (nodeOccursMoreThanOnce(way, nodeID)) { return []; }
89252
89253                     var osm = services$1.osm;
89254                     if (!osm) { return []; }
89255
89256                     var node = graph.hasEntity(nodeID);
89257
89258                     // ignore if this node or its tile are unloaded
89259                     if (!node || !osm.isDataLoaded(node.loc)) { return []; }
89260
89261                     if (isConnectedViaOtherTypes(way, node)) { return []; }
89262
89263                     var attachedWaysOfSameType = graph.parentWays(node).filter(function(parentWay) {
89264                         if (parentWay.id === way.id) { return false; }
89265                         return typeForWay(parentWay) === wayType;
89266                     });
89267
89268                     // assume it's okay for waterways to start or end disconnected for now
89269                     if (wayType === 'waterway' && attachedWaysOfSameType.length === 0) { return []; }
89270
89271                     var attachedOneways = attachedWaysOfSameType.filter(function(attachedWay) {
89272                         return isOneway(attachedWay);
89273                     });
89274
89275                     // ignore if the way is connected to some non-oneway features
89276                     if (attachedOneways.length < attachedWaysOfSameType.length) { return []; }
89277
89278                     if (attachedOneways.length) {
89279                         var connectedEndpointsOkay = attachedOneways.some(function(attachedOneway) {
89280                             if ((isFirst ? attachedOneway.first() : attachedOneway.last()) !== nodeID) { return true; }
89281                             if (nodeOccursMoreThanOnce(attachedOneway, nodeID)) { return true; }
89282                             return false;
89283                         });
89284                         if (connectedEndpointsOkay) { return []; }
89285                     }
89286
89287                     var placement = isFirst ? 'start' : 'end',
89288                         messageID = wayType + '.',
89289                         referenceID = wayType + '.';
89290
89291                     if (wayType === 'waterway') {
89292                         messageID += 'connected.' + placement;
89293                         referenceID += 'connected';
89294                     } else {
89295                         messageID += placement;
89296                         referenceID += placement;
89297                     }
89298
89299                     return [new validationIssue({
89300                         type: type,
89301                         subtype: wayType,
89302                         severity: 'warning',
89303                         message: function(context) {
89304                             var entity = context.hasEntity(this.entityIds[0]);
89305                             return entity ? t('issues.impossible_oneway.' + messageID + '.message', {
89306                                 feature: utilDisplayLabel(entity, context)
89307                             }) : '';
89308                         },
89309                         reference: getReference(referenceID),
89310                         entityIds: [way.id, node.id],
89311                         dynamicFixes: function() {
89312
89313                             var fixes = [];
89314
89315                             if (attachedOneways.length) {
89316                                 fixes.push(new validationIssueFix({
89317                                     icon: 'iD-operation-reverse',
89318                                     title: t('issues.fix.reverse_feature.title'),
89319                                     entityIds: [way.id],
89320                                     onClick: function(context) {
89321                                         var id = this.issue.entityIds[0];
89322                                         context.perform(actionReverse(id), t('operations.reverse.annotation'));
89323                                     }
89324                                 }));
89325                             }
89326                             if (node.tags.noexit !== 'yes') {
89327                                 var useLeftContinue = (isFirst && textDirection === 'ltr') ||
89328                                     (!isFirst && textDirection === 'rtl');
89329                                 fixes.push(new validationIssueFix({
89330                                     icon: 'iD-operation-continue' + (useLeftContinue ? '-left' : ''),
89331                                     title: t('issues.fix.continue_from_' + (isFirst ? 'start' : 'end') + '.title'),
89332                                     onClick: function(context) {
89333                                         var entityID = this.issue.entityIds[0];
89334                                         var vertexID = this.issue.entityIds[1];
89335                                         var way = context.entity(entityID);
89336                                         var vertex = context.entity(vertexID);
89337                                         continueDrawing(way, vertex, context);
89338                                     }
89339                                 }));
89340                             }
89341
89342                             return fixes;
89343                         },
89344                         loc: node.loc
89345                     })];
89346
89347                     function getReference(referenceID) {
89348                         return function showReference(selection) {
89349                             selection.selectAll('.issue-reference')
89350                                 .data([0])
89351                                 .enter()
89352                                 .append('div')
89353                                 .attr('class', 'issue-reference')
89354                                 .text(t('issues.impossible_oneway.' + referenceID + '.reference'));
89355                         };
89356                     }
89357                 }
89358             };
89359
89360             function continueDrawing(way, vertex, context) {
89361                 // make sure the vertex is actually visible and editable
89362                 var map = context.map();
89363                 if (!context.editable() || !map.trimmedExtent().contains(vertex.loc)) {
89364                     map.zoomToEase(vertex);
89365                 }
89366
89367                 context.enter(
89368                     modeDrawLine(context, way.id, context.graph(), context.graph(), 'line', way.affix(vertex.id), true)
89369                 );
89370             }
89371
89372             validation.type = type;
89373
89374             return validation;
89375         }
89376
89377         function validationIncompatibleSource() {
89378             var type = 'incompatible_source';
89379             var invalidSources = [
89380                 {
89381                     id:'google', regex:'google', exceptRegex: 'books.google|Google Books'
89382                 }
89383             ];
89384
89385             var validation = function checkIncompatibleSource(entity) {
89386
89387                 var entitySources = entity.tags && entity.tags.source && entity.tags.source.split(';');
89388
89389                 if (!entitySources) { return []; }
89390
89391                 var issues = [];
89392
89393                 invalidSources.forEach(function(invalidSource) {
89394
89395                     var hasInvalidSource = entitySources.some(function(source) {
89396                         if (!source.match(new RegExp(invalidSource.regex, 'i'))) { return false; }
89397                         if (invalidSource.exceptRegex && source.match(new RegExp(invalidSource.exceptRegex, 'i'))) { return false; }
89398                         return true;
89399                     });
89400
89401                     if (!hasInvalidSource) { return; }
89402
89403                     issues.push(new validationIssue({
89404                         type: type,
89405                         severity: 'warning',
89406                         message: function(context) {
89407                             var entity = context.hasEntity(this.entityIds[0]);
89408                             return entity ? t('issues.incompatible_source.' + invalidSource.id + '.feature.message', {
89409                                 feature: utilDisplayLabel(entity, context)
89410                             }) : '';
89411                         },
89412                         reference: getReference(invalidSource.id),
89413                         entityIds: [entity.id],
89414                         dynamicFixes: function() {
89415                             return [
89416                                 new validationIssueFix({
89417                                     title: t('issues.fix.remove_proprietary_data.title')
89418                                 })
89419                             ];
89420                         }
89421                     }));
89422                 });
89423
89424                 return issues;
89425
89426
89427                 function getReference(id) {
89428                     return function showReference(selection) {
89429                         selection.selectAll('.issue-reference')
89430                             .data([0])
89431                             .enter()
89432                             .append('div')
89433                             .attr('class', 'issue-reference')
89434                             .text(t('issues.incompatible_source.' + id + '.reference'));
89435                     };
89436                 }
89437             };
89438
89439             validation.type = type;
89440
89441             return validation;
89442         }
89443
89444         function validationMaprules() {
89445             var type = 'maprules';
89446
89447             var validation = function checkMaprules(entity, graph) {
89448                 if (!services$1.maprules) { return []; }
89449
89450                 var rules = services$1.maprules.validationRules();
89451                 var issues = [];
89452
89453                 for (var i = 0; i < rules.length; i++) {
89454                     var rule = rules[i];
89455                     rule.findIssues(entity, graph, issues);
89456                 }
89457
89458                 return issues;
89459             };
89460
89461
89462             validation.type = type;
89463
89464             return validation;
89465         }
89466
89467         function validationMismatchedGeometry(context) {
89468             var type = 'mismatched_geometry';
89469
89470             function tagSuggestingLineIsArea(entity) {
89471                 if (entity.type !== 'way' || entity.isClosed()) { return null; }
89472
89473                 var tagSuggestingArea = entity.tagSuggestingArea();
89474                 if (!tagSuggestingArea) {
89475                     return null;
89476                 }
89477
89478                 if (context.presets().matchTags(tagSuggestingArea, 'line') ===
89479                     context.presets().matchTags(tagSuggestingArea, 'area')) {
89480                     // these tags also allow lines and making this an area wouldn't matter
89481                     return null;
89482                 }
89483
89484                 return tagSuggestingArea;
89485             }
89486
89487             function makeConnectEndpointsFixOnClick(way, graph) {
89488                 // must have at least three nodes to close this automatically
89489                 if (way.nodes.length < 3) { return null; }
89490
89491                 var nodes = graph.childNodes(way), testNodes;
89492                 var firstToLastDistanceMeters = geoSphericalDistance(nodes[0].loc, nodes[nodes.length-1].loc);
89493
89494                 // if the distance is very small, attempt to merge the endpoints
89495                 if (firstToLastDistanceMeters < 0.75) {
89496                     testNodes = nodes.slice();   // shallow copy
89497                     testNodes.pop();
89498                     testNodes.push(testNodes[0]);
89499                     // make sure this will not create a self-intersection
89500                     if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
89501                         return function(context) {
89502                             var way = context.entity(this.issue.entityIds[0]);
89503                             context.perform(
89504                                 actionMergeNodes([way.nodes[0], way.nodes[way.nodes.length-1]], nodes[0].loc),
89505                                 t('issues.fix.connect_endpoints.annotation')
89506                             );
89507                         };
89508                     }
89509                 }
89510
89511                 // if the points were not merged, attempt to close the way
89512                 testNodes = nodes.slice();   // shallow copy
89513                 testNodes.push(testNodes[0]);
89514                 // make sure this will not create a self-intersection
89515                 if (!geoHasSelfIntersections(testNodes, testNodes[0].id)) {
89516                     return function(context) {
89517                         var wayId = this.issue.entityIds[0];
89518                         var way = context.entity(wayId);
89519                         var nodeId = way.nodes[0];
89520                         var index = way.nodes.length;
89521                         context.perform(
89522                             actionAddVertex(wayId, nodeId, index),
89523                             t('issues.fix.connect_endpoints.annotation')
89524                         );
89525                     };
89526                 }
89527             }
89528
89529             function lineTaggedAsAreaIssue(entity) {
89530
89531                 var tagSuggestingArea = tagSuggestingLineIsArea(entity);
89532                 if (!tagSuggestingArea) { return null; }
89533
89534                 return new validationIssue({
89535                     type: type,
89536                     subtype: 'area_as_line',
89537                     severity: 'warning',
89538                     message: function(context) {
89539                         var entity = context.hasEntity(this.entityIds[0]);
89540                         return entity ? t('issues.tag_suggests_area.message', {
89541                             feature: utilDisplayLabel(entity, context),
89542                             tag: utilTagText({ tags: tagSuggestingArea })
89543                         }) : '';
89544                     },
89545                     reference: showReference,
89546                     entityIds: [entity.id],
89547                     hash: JSON.stringify(tagSuggestingArea),
89548                     dynamicFixes: function(context) {
89549
89550                         var fixes = [];
89551
89552                         var entity = context.entity(this.entityIds[0]);
89553                         var connectEndsOnClick = makeConnectEndpointsFixOnClick(entity, context.graph());
89554
89555                         fixes.push(new validationIssueFix({
89556                             title: t('issues.fix.connect_endpoints.title'),
89557                             onClick: connectEndsOnClick
89558                         }));
89559
89560                         fixes.push(new validationIssueFix({
89561                             icon: 'iD-operation-delete',
89562                             title: t('issues.fix.remove_tag.title'),
89563                             onClick: function(context) {
89564                                 var entityId = this.issue.entityIds[0];
89565                                 var entity = context.entity(entityId);
89566                                 var tags = Object.assign({}, entity.tags);  // shallow copy
89567                                 for (var key in tagSuggestingArea) {
89568                                     delete tags[key];
89569                                 }
89570                                 context.perform(
89571                                     actionChangeTags(entityId, tags),
89572                                     t('issues.fix.remove_tag.annotation')
89573                                 );
89574                             }
89575                         }));
89576
89577                         return fixes;
89578                     }
89579                 });
89580
89581
89582                 function showReference(selection) {
89583                     selection.selectAll('.issue-reference')
89584                         .data([0])
89585                         .enter()
89586                         .append('div')
89587                         .attr('class', 'issue-reference')
89588                         .text(t('issues.tag_suggests_area.reference'));
89589                 }
89590             }
89591
89592             function vertexTaggedAsPointIssue(entity, graph) {
89593                 // we only care about nodes
89594                 if (entity.type !== 'node') { return null; }
89595
89596                 // ignore tagless points
89597                 if (Object.keys(entity.tags).length === 0) { return null; }
89598
89599                 // address lines are special so just ignore them
89600                 if (entity.isOnAddressLine(graph)) { return null; }
89601
89602                 var geometry = entity.geometry(graph);
89603                 var allowedGeometries = osmNodeGeometriesForTags(entity.tags);
89604
89605                 if (geometry === 'point' && !allowedGeometries.point && allowedGeometries.vertex) {
89606
89607                     return new validationIssue({
89608                         type: type,
89609                         subtype: 'vertex_as_point',
89610                         severity: 'warning',
89611                         message: function(context) {
89612                             var entity = context.hasEntity(this.entityIds[0]);
89613                             return entity ? t('issues.vertex_as_point.message', {
89614                                 feature: utilDisplayLabel(entity, context)
89615                             }) : '';
89616                         },
89617                         reference: function showReference(selection) {
89618                             selection.selectAll('.issue-reference')
89619                                 .data([0])
89620                                 .enter()
89621                                 .append('div')
89622                                 .attr('class', 'issue-reference')
89623                                 .text(t('issues.vertex_as_point.reference'));
89624                         },
89625                         entityIds: [entity.id]
89626                     });
89627
89628                 } else if (geometry === 'vertex' && !allowedGeometries.vertex && allowedGeometries.point) {
89629
89630                     return new validationIssue({
89631                         type: type,
89632                         subtype: 'point_as_vertex',
89633                         severity: 'warning',
89634                         message: function(context) {
89635                             var entity = context.hasEntity(this.entityIds[0]);
89636                             return entity ? t('issues.point_as_vertex.message', {
89637                                 feature: utilDisplayLabel(entity, context)
89638                             }) : '';
89639                         },
89640                         reference: function showReference(selection) {
89641                             selection.selectAll('.issue-reference')
89642                                 .data([0])
89643                                 .enter()
89644                                 .append('div')
89645                                 .attr('class', 'issue-reference')
89646                                 .text(t('issues.point_as_vertex.reference'));
89647                         },
89648                         entityIds: [entity.id],
89649                         dynamicFixes: function(context) {
89650
89651                             var entityId = this.entityIds[0];
89652
89653                             var extractOnClick = null;
89654                             if (!context.hasHiddenConnections(entityId) &&
89655                                 !actionExtract(entityId, context.projection).disabled(context.graph())) {
89656
89657                                 extractOnClick = function(context) {
89658                                     var entityId = this.issue.entityIds[0];
89659                                     var action = actionExtract(entityId, context.projection);
89660                                     context.perform(
89661                                         action,
89662                                         t('operations.extract.annotation.single')
89663                                     );
89664                                     // re-enter mode to trigger updates
89665                                     context.enter(modeSelect(context, [action.getExtractedNodeID()]));
89666                                 };
89667                             }
89668
89669                             return [
89670                                 new validationIssueFix({
89671                                     icon: 'iD-operation-extract',
89672                                     title: t('issues.fix.extract_point.title'),
89673                                     onClick: extractOnClick
89674                                 })
89675                             ];
89676                         }
89677                     });
89678                 }
89679
89680                 return null;
89681             }
89682
89683             function unclosedMultipolygonPartIssues(entity, graph) {
89684
89685                 if (entity.type !== 'relation' ||
89686                     !entity.isMultipolygon() ||
89687                     entity.isDegenerate() ||
89688                     // cannot determine issues for incompletely-downloaded relations
89689                     !entity.isComplete(graph)) { return null; }
89690
89691                 var sequences = osmJoinWays(entity.members, graph);
89692
89693                 var issues = [];
89694
89695                 for (var i in sequences) {
89696                     var sequence = sequences[i];
89697
89698                     if (!sequence.nodes) { continue; }
89699
89700                     var firstNode = sequence.nodes[0];
89701                     var lastNode = sequence.nodes[sequence.nodes.length - 1];
89702
89703                     // part is closed if the first and last nodes are the same
89704                     if (firstNode === lastNode) { continue; }
89705
89706                     var issue = new validationIssue({
89707                         type: type,
89708                         subtype: 'unclosed_multipolygon_part',
89709                         severity: 'warning',
89710                         message: function(context) {
89711                             var entity = context.hasEntity(this.entityIds[0]);
89712                             return entity ? t('issues.unclosed_multipolygon_part.message', {
89713                                 feature: utilDisplayLabel(entity, context)
89714                             }) : '';
89715                         },
89716                         reference: showReference,
89717                         loc: sequence.nodes[0].loc,
89718                         entityIds: [entity.id],
89719                         hash: sequence.map(function(way) {
89720                             return way.id;
89721                         }).join()
89722                     });
89723                     issues.push(issue);
89724                 }
89725
89726                 return issues;
89727
89728                 function showReference(selection) {
89729                     selection.selectAll('.issue-reference')
89730                         .data([0])
89731                         .enter()
89732                         .append('div')
89733                         .attr('class', 'issue-reference')
89734                         .text(t('issues.unclosed_multipolygon_part.reference'));
89735                 }
89736             }
89737
89738             var validation = function checkMismatchedGeometry(entity, graph) {
89739                 var issues = [
89740                     vertexTaggedAsPointIssue(entity, graph),
89741                     lineTaggedAsAreaIssue(entity)
89742                 ];
89743                 issues = issues.concat(unclosedMultipolygonPartIssues(entity, graph));
89744                 return issues.filter(Boolean);
89745             };
89746
89747             validation.type = type;
89748
89749             return validation;
89750         }
89751
89752         function validationMissingRole() {
89753             var type = 'missing_role';
89754
89755             var validation = function checkMissingRole(entity, graph) {
89756                 var issues = [];
89757                 if (entity.type === 'way') {
89758                     graph.parentRelations(entity).forEach(function(relation) {
89759                         if (!relation.isMultipolygon()) { return; }
89760
89761                         var member = relation.memberById(entity.id);
89762                         if (member && isMissingRole(member)) {
89763                             issues.push(makeIssue(entity, relation, member));
89764                         }
89765                     });
89766                 } else if (entity.type === 'relation' && entity.isMultipolygon()) {
89767                     entity.indexedMembers().forEach(function(member) {
89768                         var way = graph.hasEntity(member.id);
89769                         if (way && isMissingRole(member)) {
89770                             issues.push(makeIssue(way, entity, member));
89771                         }
89772                     });
89773                 }
89774
89775                 return issues;
89776             };
89777
89778
89779             function isMissingRole(member) {
89780                 return !member.role || !member.role.trim().length;
89781             }
89782
89783
89784             function makeIssue(way, relation, member) {
89785                 return new validationIssue({
89786                     type: type,
89787                     severity: 'warning',
89788                     message: function(context) {
89789                         var member = context.hasEntity(this.entityIds[1]),
89790                             relation = context.hasEntity(this.entityIds[0]);
89791                         return (member && relation) ? t('issues.missing_role.message', {
89792                             member: utilDisplayLabel(member, context),
89793                             relation: utilDisplayLabel(relation, context)
89794                         }) : '';
89795                     },
89796                     reference: showReference,
89797                     entityIds: [relation.id, way.id],
89798                     data: {
89799                         member: member
89800                     },
89801                     hash: member.index.toString(),
89802                     dynamicFixes: function() {
89803                         return [
89804                             makeAddRoleFix('inner'),
89805                             makeAddRoleFix('outer'),
89806                             new validationIssueFix({
89807                                 icon: 'iD-operation-delete',
89808                                 title: t('issues.fix.remove_from_relation.title'),
89809                                 onClick: function(context) {
89810                                     context.perform(
89811                                         actionDeleteMember(this.issue.entityIds[0], this.issue.data.member.index),
89812                                         t('operations.delete_member.annotation')
89813                                     );
89814                                 }
89815                             })
89816                         ];
89817                     }
89818                 });
89819
89820
89821                 function showReference(selection) {
89822                     selection.selectAll('.issue-reference')
89823                         .data([0])
89824                         .enter()
89825                         .append('div')
89826                         .attr('class', 'issue-reference')
89827                         .text(t('issues.missing_role.multipolygon.reference'));
89828                 }
89829             }
89830
89831
89832             function makeAddRoleFix(role) {
89833                 return new validationIssueFix({
89834                     title: t('issues.fix.set_as_' + role + '.title'),
89835                     onClick: function(context) {
89836                         var oldMember = this.issue.data.member;
89837                         var member = { id: this.issue.entityIds[1], type: oldMember.type, role: role };
89838                         context.perform(
89839                             actionChangeMember(this.issue.entityIds[0], member, oldMember.index),
89840                             t('operations.change_role.annotation')
89841                         );
89842                     }
89843                 });
89844             }
89845
89846             validation.type = type;
89847
89848             return validation;
89849         }
89850
89851         function validationMissingTag(context) {
89852             var type = 'missing_tag';
89853
89854             function hasDescriptiveTags(entity, graph) {
89855                 var keys = Object.keys(entity.tags)
89856                     .filter(function(k) {
89857                         if (k === 'area' || k === 'name') {
89858                             return false;
89859                         } else {
89860                             return osmIsInterestingTag(k);
89861                         }
89862                     });
89863
89864                 if (entity.type === 'relation' &&
89865                     keys.length === 1 &&
89866                     entity.tags.type === 'multipolygon') {
89867                     // this relation's only interesting tag just says its a multipolygon,
89868                     // which is not descriptive enough
89869
89870                     // It's okay for a simple multipolygon to have no descriptive tags
89871                     // if its outer way has them (old model, see `outdated_tags.js`)
89872                     return osmOldMultipolygonOuterMemberOfRelation(entity, graph);
89873                 }
89874
89875                 return keys.length > 0;
89876             }
89877
89878             function isUnknownRoad(entity) {
89879                 return entity.type === 'way' && entity.tags.highway === 'road';
89880             }
89881
89882             function isUntypedRelation(entity) {
89883                 return entity.type === 'relation' && !entity.tags.type;
89884             }
89885
89886             var validation = function checkMissingTag(entity, graph) {
89887
89888                 var subtype;
89889
89890                 var osm = context.connection();
89891                 var isUnloadedNode = entity.type === 'node' && osm && !osm.isDataLoaded(entity.loc);
89892
89893                 // we can't know if the node is a vertex if the tile is undownloaded
89894                 if (!isUnloadedNode &&
89895                     // allow untagged nodes that are part of ways
89896                     entity.geometry(graph) !== 'vertex' &&
89897                     // allow untagged entities that are part of relations
89898                     !entity.hasParentRelations(graph)) {
89899
89900                     if (Object.keys(entity.tags).length === 0) {
89901                         subtype = 'any';
89902                     } else if (!hasDescriptiveTags(entity, graph)) {
89903                         subtype = 'descriptive';
89904                     } else if (isUntypedRelation(entity)) {
89905                         subtype = 'relation_type';
89906                     }
89907                 }
89908
89909                 // flag an unknown road even if it's a member of a relation
89910                 if (!subtype && isUnknownRoad(entity)) {
89911                     subtype = 'highway_classification';
89912                 }
89913
89914                 if (!subtype) { return []; }
89915
89916                 var messageID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag.' + subtype;
89917                 var referenceID = subtype === 'highway_classification' ? 'unknown_road' : 'missing_tag';
89918
89919                 // can always delete if the user created it in the first place..
89920                 var canDelete = (entity.version === undefined || entity.v !== undefined);
89921                 var severity = (canDelete && subtype !== 'highway_classification') ? 'error' : 'warning';
89922
89923                 return [new validationIssue({
89924                     type: type,
89925                     subtype: subtype,
89926                     severity: severity,
89927                     message: function(context) {
89928                         var entity = context.hasEntity(this.entityIds[0]);
89929                         return entity ? t('issues.' + messageID + '.message', {
89930                             feature: utilDisplayLabel(entity, context)
89931                         }) : '';
89932                     },
89933                     reference: showReference,
89934                     entityIds: [entity.id],
89935                     dynamicFixes: function(context) {
89936
89937                         var fixes = [];
89938
89939                         var selectFixType = subtype === 'highway_classification' ? 'select_road_type' : 'select_preset';
89940
89941                         fixes.push(new validationIssueFix({
89942                             icon: 'iD-icon-search',
89943                             title: t('issues.fix.' + selectFixType + '.title'),
89944                             onClick: function(context) {
89945                                 context.ui().sidebar.showPresetList();
89946                             }
89947                         }));
89948
89949                         var deleteOnClick;
89950
89951                         var id = this.entityIds[0];
89952                         var operation = operationDelete([id], context);
89953                         var disabledReasonID = operation.disabled();
89954                         if (!disabledReasonID) {
89955                             deleteOnClick = function(context) {
89956                                 var id = this.issue.entityIds[0];
89957                                 var operation = operationDelete([id], context);
89958                                 if (!operation.disabled()) {
89959                                     operation();
89960                                 }
89961                             };
89962                         }
89963
89964                         fixes.push(
89965                             new validationIssueFix({
89966                                 icon: 'iD-operation-delete',
89967                                 title: t('issues.fix.delete_feature.title'),
89968                                 disabledReason: disabledReasonID ? t('operations.delete.' + disabledReasonID + '.single') : undefined,
89969                                 onClick: deleteOnClick
89970                             })
89971                         );
89972
89973                         return fixes;
89974                     }
89975                 })];
89976
89977                 function showReference(selection) {
89978                     selection.selectAll('.issue-reference')
89979                         .data([0])
89980                         .enter()
89981                         .append('div')
89982                         .attr('class', 'issue-reference')
89983                         .text(t('issues.' + referenceID + '.reference'));
89984                 }
89985             };
89986
89987             validation.type = type;
89988
89989             return validation;
89990         }
89991
89992         // remove spaces, punctuation, diacritics
89993         var simplify = function (str) {
89994           return diacritics.remove(
89995             str
89996               .replace(/&/g, 'and')
89997               .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,'')
89998               .toLowerCase()
89999           );
90000         };
90001
90002         // toParts - split a name-suggestion-index key into parts
90003         // {
90004         //   kvnd:        "amenity/fast_food|Thaï Express~(North America)",
90005         //   kvn:         "amenity/fast_food|Thaï Express",
90006         //   kv:          "amenity/fast_food",
90007         //   k:           "amenity",
90008         //   v:           "fast_food",
90009         //   n:           "Thaï Express",
90010         //   d:           "(North America)",
90011         //   nsimple:     "thaiexpress",
90012         //   kvnnsimple:  "amenity/fast_food|thaiexpress"
90013         // }
90014         var to_parts = function (kvnd) {
90015           var parts = {};
90016           parts.kvnd = kvnd;
90017
90018           var kvndparts = kvnd.split('~', 2);
90019           if (kvndparts.length > 1) { parts.d = kvndparts[1]; }
90020
90021           parts.kvn = kvndparts[0];
90022           var kvnparts = parts.kvn.split('|', 2);
90023           if (kvnparts.length > 1) { parts.n = kvnparts[1]; }
90024
90025           parts.kv = kvnparts[0];
90026           var kvparts = parts.kv.split('/', 2);
90027           parts.k = kvparts[0];
90028           parts.v = kvparts[1];
90029
90030           parts.nsimple = simplify(parts.n);
90031           parts.kvnsimple = parts.kv + '|' + parts.nsimple;
90032           return parts;
90033         };
90034
90035         var matchGroups = {adult_gaming_centre:["amenity/casino","amenity/gambling","leisure/adult_gaming_centre"],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","shop/newsagent"],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"]};
90036         var match_groups = {
90037         matchGroups: matchGroups
90038         };
90039
90040         var match_groups$1 = /*#__PURE__*/Object.freeze({
90041                 __proto__: null,
90042                 matchGroups: matchGroups,
90043                 'default': match_groups
90044         });
90045
90046         var require$$0 = getCjsExportFromNamespace(match_groups$1);
90047
90048         var matchGroups$1 = require$$0.matchGroups;
90049
90050
90051         var matcher$1 = function () {
90052           var _warnings = [];  // array of match conflict pairs
90053           var _ambiguous = {};
90054           var _matchIndex = {};
90055           var matcher = {};
90056
90057
90058           // Create an index of all the keys/simplenames for fast matching
90059           matcher.buildMatchIndex = function (brands) {
90060             // two passes - once for primary names, once for secondary/alternate names
90061             Object.keys(brands).forEach(function (kvnd) { return insertNames(kvnd, 'primary'); });
90062             Object.keys(brands).forEach(function (kvnd) { return insertNames(kvnd, 'secondary'); });
90063
90064
90065             function insertNames(kvnd, which) {
90066               var obj = brands[kvnd];
90067               var parts = to_parts(kvnd);
90068
90069               // Exit early for ambiguous names in the second pass.
90070               // They were collected in the first pass and we don't gather alt names for them.
90071               if (which === 'secondary' && parts.d) { return; }
90072
90073
90074               if (obj.countryCodes) {
90075                 parts.countryCodes = obj.countryCodes.slice();  // copy
90076               }
90077
90078               var nomatches = (obj.nomatch || []);
90079               if (nomatches.some(function (s) { return s === kvnd; })) {
90080                 console.log(("WARNING match/nomatch conflict for " + kvnd));
90081                 return;
90082               }
90083
90084               var match_kv = [parts.kv]
90085                 .concat(obj.matchTags || [])
90086                 .concat([((parts.k) + "/yes"), "building/yes"])   // #3454 - match some generic tags
90087                 .map(function (s) { return s.toLowerCase(); });
90088
90089               var match_nsimple = [];
90090               if (which === 'primary') {
90091                 match_nsimple = [parts.n]
90092                   .concat(obj.matchNames || [])
90093                   .concat(obj.tags.official_name || [])   // #2732 - match alternate names
90094                   .map(simplify);
90095
90096               } else if (which === 'secondary') {
90097                 match_nsimple = []
90098                   .concat(obj.tags.alt_name || [])        // #2732 - match alternate names
90099                   .concat(obj.tags.short_name || [])      // #2732 - match alternate names
90100                   .map(simplify);
90101               }
90102
90103               if (!match_nsimple.length) { return; }  // nothing to do
90104
90105               match_kv.forEach(function (kv) {
90106                 match_nsimple.forEach(function (nsimple) {
90107                   if (parts.d) {
90108                     // Known ambiguous names with disambiguation string ~(USA) / ~(Canada)
90109                     // FIXME: Name collisions will overwrite the initial entry (ok for now)
90110                     if (!_ambiguous[kv]) { _ambiguous[kv] = {}; }
90111                     _ambiguous[kv][nsimple] = parts;
90112
90113                   } else {
90114                     // Names we mostly expect to be unique..
90115                     if (!_matchIndex[kv]) { _matchIndex[kv] = {}; }
90116
90117                     var m = _matchIndex[kv][nsimple];
90118                     if (m) {  // There already is a match for this name, skip it
90119                       // Warn if we detect collisions in a primary name.
90120                       // Skip warning if a secondary name or a generic `*=yes` tag - #2972 / #3454
90121                       if (which === 'primary' && !/\/yes$/.test(kv)) {
90122                         _warnings.push([m.kvnd, (kvnd + " (" + kv + "/" + nsimple + ")")]);
90123                       }
90124                     } else {
90125                       _matchIndex[kv][nsimple] = parts;   // insert
90126                     }
90127                   }
90128                 });
90129               });
90130
90131             }
90132           };
90133
90134
90135           // pass a `key`, `value`, `name` and return the best match,
90136           // `countryCode` optional (if supplied, must match that too)
90137           matcher.matchKVN = function (key, value, name, countryCode) {
90138             return matcher.matchParts(to_parts((key + "/" + value + "|" + name)), countryCode);
90139           };
90140
90141
90142           // pass a parts object and return the best match,
90143           // `countryCode` optional (if supplied, must match that too)
90144           matcher.matchParts = function (parts, countryCode) {
90145             var match = null;
90146             var inGroup = false;
90147
90148             // fixme: we currently return a single match for ambiguous
90149             match = _ambiguous[parts.kv] && _ambiguous[parts.kv][parts.nsimple];
90150             if (match && matchesCountryCode(match)) { return match; }
90151
90152             // try to return an exact match
90153             match = _matchIndex[parts.kv] && _matchIndex[parts.kv][parts.nsimple];
90154             if (match && matchesCountryCode(match)) { return match; }
90155
90156             // look in match groups
90157             for (var mg in matchGroups$1) {
90158               var matchGroup = matchGroups$1[mg];
90159               match = null;
90160               inGroup = false;
90161
90162               for (var i = 0; i < matchGroup.length; i++) {
90163                 var otherkv = matchGroup[i].toLowerCase();
90164                 if (!inGroup) {
90165                   inGroup = otherkv === parts.kv;
90166                 }
90167                 if (!match) {
90168                   // fixme: we currently return a single match for ambiguous
90169                   match = _ambiguous[otherkv] && _ambiguous[otherkv][parts.nsimple];
90170                 }
90171                 if (!match) {
90172                   match = _matchIndex[otherkv] && _matchIndex[otherkv][parts.nsimple];
90173                 }
90174
90175                 if (match && !matchesCountryCode(match)) {
90176                   match = null;
90177                 }
90178
90179                 if (inGroup && match) {
90180                   return match;
90181                 }
90182               }
90183             }
90184
90185             return null;
90186
90187             function matchesCountryCode(match) {
90188               if (!countryCode) { return true; }
90189               if (!match.countryCodes) { return true; }
90190               return match.countryCodes.indexOf(countryCode) !== -1;
90191             }
90192           };
90193
90194
90195           matcher.getWarnings = function () { return _warnings; };
90196
90197           return matcher;
90198         };
90199
90200         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|ACBA":{countryCodes:["am"],tags:{amenity:"bank",brand:"ACBA","brand:wikidata":"Q55602923","brand:wikipedia":"hy:ԱԿԲԱ-Կրեդիտ Ագրիկոլ բանկ",name:"ACBA"}},"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"],matchNames:["banco de crédito","bcp"],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"}},"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 BISA":{countryCodes:["bo"],matchNames:["bisa"],tags:{amenity:"bank",brand:"Banco BISA","brand:wikidata":"Q21044225","brand:wikipedia":"es:Banco BISA",name:"Banco BISA"}},"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 Económico":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Económico","brand:wikidata":"Q4854087","brand:wikipedia":"es:Banco Económico",name:"Banco Económico"}},"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:wikidata":"Q62118592",name:"Banco Fassil"}},"amenity/bank|Banco Fie":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Fie","brand:wikidata":"Q81782924",name:"Banco Fie",official_name:"Banco para el Fomento a Iniciativas Económicas"}},"amenity/bank|Banco Fortaleza":{countryCodes:["bo"],tags:{amenity:"bank",brand:"Banco Fortaleza","brand:wikidata":"Q81787643",name:"Banco Fortaleza"}},"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 Ganadero":{countryCodes:["bo"],matchNames:["bg"],tags:{amenity:"bank",brand:"Banco Ganadero","brand:wikidata":"Q81788241",name:"Banco Ganadero",short_name:"BG"}},"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 Mercantil":{countryCodes:["bo"],matchNames:["bmsc"],nomatch:["amenity/bank|Mercantil"],tags:{amenity:"bank",brand:"Banco Mercantil Santa Cruz","brand:wikidata":"Q26250269","brand:wikipedia":"es:Banco Mercantil Santa Cruz",name:"Banco Mercantil Santa Cruz",short_name:"BMSC"}},"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 Nacional de Bolivia":{countryCodes:["bo"],matchNames:["bnb"],tags:{amenity:"bank",brand:"Banco Nacional de Bolivia","brand:wikidata":"Q21044226","brand:wikipedia":"es:Banco Nacional de Bolivia",name:"Banco Nacional de Bolivia",short_name:"BNB"}},"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":{countryCodes:["co","ec","pe"],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:wikidata":"Q62118746",name:"Banco Sol",official_name:"Banco Solidario"}},"amenity/bank|Banco Unión":{countryCodes:["bo"],nomatch:["amenity/bank|UnionBank","amenity/money_transfer|Express Union"],tags:{amenity:"bank",brand:"Banco Unión","brand:wikidata":"Q72315494",name:"Banco Unión",official_name:"Banco de la 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","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","brand:wikidata":"Q3633842","brand:wikipedia":"it: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 Simpanan Nasional":{countryCodes:["my"],tags:{amenity:"bank",brand:"Bank Simpanan Nasional","brand:wikidata":"Q4855972","brand:wikipedia":"ms:Bank Simpanan Nasional",name:"Bank Simpanan Nasional"}},"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|BankWest~(USA)":{countryCodes:["us"],nomatch:["amenity/bank|Bankwest~(Australia)"],tags:{amenity:"bank",brand:"BankWest","brand:wikidata":"Q90386673",name:"BankWest"}},"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~(Australia)":{countryCodes:["au"],nomatch:["amenity/bank|Bankwest~(USA)"],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 Dupuy de Parseval":{countryCodes:["fr"],tags:{amenity:"bank",brand:"Banque Dupuy de Parseval","brand:wikidata":"Q2882897","brand:wikipedia":"fr:Banque Dupuy de Parseval",name:"Banque Dupuy de Parseval"}},"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)":{countryCodes:["fr"],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","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":{countryCodes:["fr"],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|Beobank":{countryCodes:["be"],tags:{amenity:"bank",brand:"Beobank","brand:wikidata":"Q14911971","brand:wikipedia":"nl:Beobank",name:"Beobank"}},"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":{countryCodes:["hu"],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|Centennial Bank":{tags:{amenity:"bank",brand:"Centennial Bank",name:"Centennial 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|Chemical Bank":{countryCodes:["us"],tags:{amenity:"bank",brand:"Chemical Bank","brand:wikidata":"Q86815846",name:"Chemical Bank"}},"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|City National Bank~(West Virginia)":{countryCodes:["us"],tags:{amenity:"bank",brand:"City National Bank","brand:wikidata":"Q90937436",name:"City National Bank"}},"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|Degussa":{countryCodes:["de"],tags:{amenity:"bank",brand:"Degussa","brand:wikidata":"Q1182932","brand:wikipedia":"de:Degussa Bank",name:"Degussa"}},"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|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|Fio banka":{countryCodes:["cz","sk"],tags:{amenity:"bank",brand:"Fio banka","brand:wikidata":"Q12016657","brand:wikipedia":"cs:Fio banka",name:"Fio banka"}},"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 Nebraska":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Ohio)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87646525",name:"First State Bank"}},"amenity/bank|First State Bank~(Florida)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Ohio)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647395",name:"First State Bank"}},"amenity/bank|First State Bank~(Illinois)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Ohio)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647340",name:"First State Bank"}},"amenity/bank|First State Bank~(Michigan)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Ohio)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647479",name:"First State Bank"}},"amenity/bank|First State Bank~(Mississippi)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Ohio)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647452",name:"First State Bank"}},"amenity/bank|First State Bank~(Nebraska)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Ohio)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q5453817",name:"First State Bank"}},"amenity/bank|First State Bank~(Ohio)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Texas)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647374",name:"First State Bank"}},"amenity/bank|First State Bank~(Texas)":{countryCodes:["us"],nomatch:["amenity/bank|First State Bank Nebraska","amenity/bank|First State Bank~(Florida)","amenity/bank|First State Bank~(Illinois)","amenity/bank|First State Bank~(Michigan)","amenity/bank|First State Bank~(Mississippi)","amenity/bank|First State Bank~(Nebraska)","amenity/bank|First State Bank~(Ohio)"],tags:{amenity:"bank",brand:"First State Bank","brand:wikidata":"Q87647065",name:"First State Bank"}},"amenity/bank|First Tech Credit Union":{countryCodes:["us"],matchNames:["1st tech","1st tech credit union","first tech"],tags:{amenity:"bank",brand:"First Tech Credit Union","brand:wikidata":"Q5453865","brand:wikipedia":"en:First Tech Credit Union",name:"First Tech Credit Union"}},"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":{countryCodes:["ci","gb","gh","gm","ke","lr","ng","rw","tz","ug"],tags:{amenity:"bank",brand:"GT Bank","brand:wikidata":"Q579747","brand:wikipedia":"en:Guaranty Trust Bank",name:"GT Bank",official_name:"Guaranty Trust 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|J&T Banka":{countryCodes:["cz","sk"],tags:{amenity:"bank",brand:"J&T Banka","brand:wikidata":"Q12022160","brand:wikipedia":"sk:J & T BANKA",name:"J&T Banka"}},"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|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":{countryCodes:["ie"],tags:{amenity:"bank",brand:"Permanent TSB","brand:wikidata":"Q3154461","brand:wikipedia":"en: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|Privatbanka":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Privatbanka","brand:wikidata":"Q12774628","brand:wikipedia":"sk:Privatbanka",name:"Privatbanka"}},"amenity/bank|Prosperity Bank":{tags:{amenity:"bank",brand:"Prosperity Bank",name:"Prosperity Bank"}},"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|Prvá stavebná sporiteľňa":{countryCodes:["sk"],tags:{amenity:"bank",brand:"Prvá stavebná sporiteľňa","brand:wikidata":"Q29054618","brand:wikipedia":"sk:Prvá stavebná sporiteľňa",name:"Prvá stavebná sporiteľňa"}},"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|RHB Bank":{countryCodes:["bn","my","sg","th","vn"],tags:{amenity:"bank",brand:"RHB Bank","brand:wikipedia":"ms:RHB Bank",name:"RHB Bank"}},"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|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:["bg"],tags:{amenity:"bank",brand:"УниКредит Булбанк","brand:wikidata":"Q7884635","brand:wikipedia":"bg:УниКредит Булбанк",name:"УниКредит Булбанк","name:en":"UniCredit Bulbank"}},"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|Уральский банк реконструкции и развития":{countryCodes:["ru"],matchNames:["убрир","убрр"],tags:{amenity:"bank",brand:"Уральский банк реконструкции и развития","brand:en":"Ural Bank for Reconstruction and Development","brand:ru":"Уральский банк реконструкции и развития","brand:wikidata":"Q4476745","brand:wikipedia":"ru:Уральский банк реконструкции и развития",name:"Уральский банк реконструкции и развития","name:en":"Ural Bank for Reconstruction and Development","name:ru":"Уральский банк реконструкции и развития",short_name:"УБРиР","short_name:ru":"УБРиР"}},"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|الصندوق الوطني للتوفير والاحتياط":{tags:{amenity:"bank",brand:"الصندوق الوطني للتوفير والاحتياط",name:"الصندوق الوطني للتوفير والاحتياط"}},"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"],matchNames:["7銀行"],tags:{amenity:"bank",brand:"セブン銀行","brand:en":"Seven Bank","brand:ja":"セブン銀行","brand:wikidata":"Q7457182","brand:wikipedia":"ja:セブン銀行",name:"セブン銀行","name:en":"Seven 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:{"alt_name:en":"αBANK",amenity:"bank",brand:"京葉銀行","brand:en":"Keiyo Bank","brand:ja":"京葉銀行","brand:wikidata":"Q11374734","brand:wikipedia":"ja:京葉銀行",name:"京葉銀行","name:en":"Keiyo Bank","name:ja":"京葉銀行"}},"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":"Chiba Kogyo Bank","brand:ja":"千葉興業銀行","brand:wikidata":"Q11406742","brand:wikipedia":"ja:千葉興業銀行",name:"千葉興業銀行","name:en":"Chiba Kogyo Bank","name:ja":"千葉興業銀行"}},"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:["jp"],tags:{amenity:"bank",brand:"商工中金","brand:en":"Shoko Chukin Bank","brand:ja":"商工中金","brand:wikidata":"Q11418759","brand:wikipedia":"ja:商工中金",name:"商工中金","name:en":"Shoko Chukin Bank","name:ja":"商工中金"}},"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:["jp"],tags:{alt_name:"たましん","alt_name:en":"Tamashin",amenity:"bank",brand:"多摩信用金庫","brand:en":"Tama Shinkin Bank","brand:ja":"多摩信用金庫","brand:wikidata":"Q11430719","brand:wikipedia":"ja:多摩信用金庫",name:"多摩信用金庫","name:en":"Tama Shinkin 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:"宁波银行","brand:en":"Bank of Ningbo","brand:wikidata":"Q4856166","brand:wikipedia":"zh:宁波银行","brand:zh":"宁波银行",name:"宁波银行","name:en":"Bank of Ningbo","name:zh":"宁波银行"}},"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":"Tokyo Bay Shinkin Bank","brand:ja":"東京ベイ信金","brand:wikidata":"Q11524392","brand:wikipedia":"ja:東京ベイ信金",name:"東京ベイ信金","name:en":"Tokyo Bay Shinkin Bank","name:ja":"東京ベイ信金"}},"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":{countryCodes:["us"],tags:{amenity:"bicycle_rental",brand:"Explore Bike Share","brand:wikidata":"Q86706492",name:"Explore Bike Share"}},"amenity/bicycle_rental|Grid":{countryCodes:["us"],tags:{amenity:"bicycle_rental",brand:"Grid","brand:wikidata":"Q62104168",name:"Grid"}},"amenity/bicycle_rental|HELLO CYCLING":{countryCodes:["jp"],tags:{amenity:"bicycle_rental",brand:"HELLO CYCLING","brand:en":"HELLO CYCLING","brand:ja":"ハローサイクリング","brand:wikidata":"Q91231927",fee:"yes",name:"HELLO CYCLING","name:en":"HELLO CYCLING","name:ja":"ハローサイクリング"}},"amenity/bicycle_rental|MiBici":{countryCodes:["mx"],tags:{amenity:"bicycle_rental",brand:"MiBici","brand:wikidata":"Q60966987","brand:wikipedia":"es:MiBici",name:"MiBici"}},"amenity/bicycle_rental|OV-fiets":{countryCodes:["nl"],tags:{amenity:"bicycle_rental",brand:"OV-fiets","brand:wikidata":"Q2629982","brand:wikipedia":"en:OV-fiets",name:"OV-fiets"}},"amenity/bicycle_rental|SZ-Bike":{tags:{amenity:"bicycle_rental",brand:"SZ-Bike",name:"SZ-Bike"}},"amenity/bicycle_rental|Swapfiets":{countryCodes:["be","de","dk","nl"],tags:{amenity:"bicycle_rental",brand:"Swapfiets","brand:wikidata":"Q62104374",name:"Swapfiets"}},"amenity/bicycle_rental|baybike":{countryCodes:["jp"],tags:{amenity:"bicycle_rental",brand:"baybike","brand:en":"baybike","brand:ja":"ベイバイク","brand:wikidata":"Q91499435",fee:"yes",name:"baybike","name:en":"baybike","name:ja":"ベイバイク",official_name:"横浜コミュニティサイクル","official_name:en":"Yokohama Bike Share","official_name:ja":"横浜コミュニティサイクル"}},"amenity/bicycle_rental|metropolradruhr":{countryCodes:["de"],tags:{amenity:"bicycle_rental",brand:"metropolradruhr","brand:wikidata":"Q62104274",name:"metropolradruhr"}},"amenity/bicycle_rental|ちよくる":{countryCodes:["jp"],tags:{amenity:"bicycle_rental",brand:"ちよくる","brand:en":"Chiyocle","brand:ja":"ちよくる","brand:wikidata":"Q91498542",fee:"yes",name:"ちよくる","name:en":"Chiyocle","name:ja":"ちよくる",official_name:"千代田区コミュニティサイクル","official_name:en":"Chiyoda City Bike Share","official_name:ja":"千代田区コミュニティサイクル"}},"amenity/bicycle_rental|ドコモ・バイクシェア":{countryCodes:["jp"],tags:{amenity:"bicycle_rental",brand:"ドコモ・バイクシェア","brand:en":"Docomo Bike Share","brand:ja":"ドコモ・バイクシェア","brand:wikidata":"Q55533296","brand:wikipedia":"ja:ドコモ・バイクシェア",fee:"yes",name:"ドコモ・バイクシェア","name:en":"Docomo Bike Share","name:ja":"ドコモ・バイクシェア"}},"amenity/bureau_de_change|CADECA":{countryCodes:["cu"],tags:{amenity:"bureau_de_change",brand:"CADECA","brand:wikidata":"Q62122716",name:"CADECA"}},"amenity/bureau_de_change|Eurochange":{countryCodes:["gb"],tags:{amenity:"bureau_de_change",brand:"Eurochange","brand:wikidata":"Q86525249",name:"Eurochange"}},"amenity/bureau_de_change|NM Money":{countryCodes:["gb"],nomatch:["office/financial_advisor|NM Money"],tags:{amenity:"bureau_de_change",brand:"NM Money","brand:wikidata":"Q86529747",name:"NM Money"}},"amenity/bureau_de_change|No1 Currency":{countryCodes:["gb","ie"],tags:{amenity:"bureau_de_change",brand:"No1 Currency","brand:wikidata":"Q87139463",name:"No1 Currency"}},"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":{nomatch:["amenity/cafe|Aroma Espresso Bar"],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|Baggins Coffee":{tags:{amenity:"cafe",brand:"Baggins Coffee",cuisine:"coffee_shop",name:"Baggins Coffee",takeaway:"yes"}},"amenity/cafe|Bakers + Baristas":{countryCodes:["gb","ie"],tags:{amenity:"cafe",brand:"Bakers + Baristas","brand:wikidata":"Q85199581",cuisine:"coffee_shop",name:"Bakers + Baristas",takeaway:"yes"}},"amenity/cafe|Bambu":{countryCodes:["us"],tags:{amenity:"cafe",brand:"Bambu","brand:wikidata":"Q83437245",cuisine:"vietnamese;bubble_tea",name:"Bambu",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|Coffeeshop Company":{tags:{amenity:"cafe",brand:"Coffeeshop Company","brand:wikidata":"Q873767","brand:wikipedia":"en:Coffeeshop Company",cuisine:"coffee_shop",name:"Coffeeshop Company",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|Columbus Café & Co":{countryCodes:["be","bh","fr","ma","qa","us"],matchNames:["colombus","colombus café","colombus café & co","columbus","columbus café"],tags:{amenity:"cafe",brand:"Columbus Café & Co","brand:wikidata":"Q2984582",cuisine:"coffee_shop",name:"Columbus Café & Co",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":{countryCodes:["sg"],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|Виктория":{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|Транзит":{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|Хуторок":{tags:{amenity:"cafe",brand:"Хуторок",cuisine:"coffee_shop",name:"Хуторок",takeaway:"yes"}},"amenity/cafe|Цех 85":{tags:{amenity:"cafe",brand:"Цех 85",cuisine:"coffee_shop",name:"Цех 85",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:["jp"],tags:{amenity:"cafe",brand:"星乃珈琲店","brand:en":"Hoshino Coffee","brand:ja":"星乃珈琲店","brand:wikidata":"Q88396880",cuisine:"coffee_shop",name:"星乃珈琲店","name:en":"Hoshino Coffee","name:ja":"星乃珈琲店",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:["jp"],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|路易莎咖啡":{tags:{amenity:"cafe",brand:"路易莎咖啡","brand:en":"Louisa Coffee","brand:wikidata":"Q67933328","brand:wikipedia":"zh:路易莎咖啡","brand:zh":"路易莎咖啡",cuisine:"coffee_shop",name:"路易莎咖啡","name:en":"Louisa Coffee","name:zh":"路易莎咖啡",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":{countryCodes:["at","de"],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/car_wash|IMO Car Wash":{tags:{amenity:"car_wash",brand:"IMO Car Wash","brand:wikidata":"Q81802686",name:"IMO Car Wash"}},"amenity/car_wash|Waves":{countryCodes:["gb"],tags:{amenity:"car_wash",brand:"Waves","brand:wikidata":"Q81802122",name:"Waves"}},"amenity/casino|Codere":{countryCodes:["ar","co","es","it","mx","pa","uy"],tags:{amenity:"casino",brand:"Codere","brand:wikidata":"Q2918415","brand:wikipedia":"es:Codere",name:"Codere"}},"amenity/casino|Luckia":{tags:{amenity:"casino",brand:"Luckia","brand:wikidata":"Q42304308","brand:wikipedia":"es:Luckia",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|Gogoro 電池交換站":{tags:{amenity:"charging_station",brand:"Gogoro 電池交換站",name:"Gogoro 電池交換站"}},"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/charging_station|東光高岳":{countryCodes:["jp"],tags:{amenity:"charging_station",brand:"東光高岳","brand:en":"Takaoka Toko","brand:ja":"東光高岳","brand:wikidata":"Q17220263","brand:wikipedia":"ja:東光高岳",name:"東光高岳","name:en":"Takaoka Toko","name:ja":"東光高岳"}},"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|Cine Center":{countryCodes:["bo"],tags:{amenity:"cinema",brand:"Cine Center","brand:wikidata":"Q81962395",name:"Cine Center"}},"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|MultiCine":{countryCodes:["bo"],tags:{amenity:"cinema",brand:"MultiCine","brand:wikidata":"Q81963200",name:"MultiCine"}},"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/college|Akademie Deutsche POP":{tags:{amenity:"college",brand:"Akademie Deutsche POP","brand:wikidata":"Q413887","brand:wikipedia":"de:Akademie Deutsche POP",name:"Akademie Deutsche POP"}},"amenity/college|SAE Institute":{tags:{amenity:"college",brand:"SAE Institute","brand:wikidata":"Q201438","brand:wikipedia":"en:SAE Institute",name:"SAE Institute"}},"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/dentist|Zahnarztpraxis":{tags:{amenity:"dentist",brand:"Zahnarztpraxis",name:"Zahnarztpraxis"}},"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":{countryCodes:["de"],tags:{amenity:"fast_food",brand:"Asia-Imbiss",cuisine:"asian",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|Buona":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Buona","brand:wikidata":"Q23461372","brand:wikipedia":"en:Buona",cuisine:"italian",name:"Buona",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 Garden":{tags:{amenity:"fast_food",brand:"China Garden",cuisine:"chinese",name:"China Garden",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|Dixy Chicken":{countryCodes:["bn","gb","in","no","nz","pk","sa","sy","us"],tags:{amenity:"fast_food",brand:"Dixy Chicken","brand:wikidata":"Q5285003","brand:wikipedia":"en:Dixy Chicken",cuisine:"chicken","diet:halal":"yes",name:"Dixy Chicken",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|East of Chicago Pizza":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"East of Chicago Pizza","brand:wikidata":"Q5329751","brand:wikipedia":"en:East of Chicago Pizza",cuisine:"pizza",name:"East of Chicago Pizza",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|Freshëns":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Freshëns","brand:wikidata":"Q88353412",cuisine:"juice;salad",name:"Freshëns",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~(Canada)":{countryCodes:["ca"],tags:{amenity:"fast_food",brand:"Gino's Pizza","brand:wikidata":"Q84029134",cuisine:"pizza",name:"Gino's Pizza",takeaway:"yes"}},"amenity/fast_food|Gino's Pizza~(West Virginia)":{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",official_name:"Gino's Pizza & Spaghetti House",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|Hungry Lion":{tags:{amenity:"fast_food",brand:"Hungry Lion",cuisine:"chicken",name:"Hungry Lion",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|Jack's":{countryCodes:["us"],nomatch:["shop/supermarket|Jack's"],tags:{amenity:"fast_food",brand:"Jack's","brand:wikidata":"Q6110826","brand:wikipedia":"en:Jack's",cuisine:"burger",name:"Jack's",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",cuisine:"burger;sandwich",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","brand:wikidata":"Q17021875","brand:wikipedia":"en: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 Paï":{countryCodes:["fr"],nomatch:["amenity/restaurant|Pizza Paï"],tags:{amenity:"fast_food",brand:"Pizza Paï","brand:wikidata":"Q3389501","brand:wikipedia":"fr:PizzaPai",cuisine:"pizza",name:"Pizza Paï",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",cuisine:"pizza",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 Feliz":{tags:{amenity:"fast_food",brand:"Pollo Feliz",cuisine:"chicken",name:"Pollo Feliz",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|Taziki's Mediterranean Cafe":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Taziki's Mediterranean Cafe","brand:wikidata":"Q19849840","brand:wikipedia":"en:Taziki's Mediterranean Café",cuisine:"mediterranean",name:"Taziki's Mediterranean Cafe",short_name:"Taziki's",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|Tudor's Biscuit World":{countryCodes:["us"],tags:{amenity:"fast_food",brand:"Tudor's Biscuit World","brand:wikidata":"Q7851262","brand:wikipedia":"en:Tudor's Biscuit World",cuisine:"american",name:"Tudor's Biscuit World",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|Додо Пицца":{tags:{amenity:"fast_food",brand:"Додо Пицца","brand:en":"Dodo Pizza","brand:ru":"Додо Пицца","brand:wikidata":"Q61949318","brand:wikipedia":"ru:Додо Пицца",cuisine:"pizza",name:"Додо Пицца","name:en":"Dodo Pizza","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"],matchNames:["ケンタッキー"],tags:{"alt_name:en":"Kentucky Fried Chicken",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:"friture",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:["jp"],matchNames:["かまどや"],tags:{alt_name:"かまどや",amenity:"fast_food",brand:"本家かまどや","brand:en":"Honke Kamadoya","brand:ja":"本家かまどや","brand:wikidata":"Q11520140","brand:wikipedia":"ja:本家かまどや",cuisine:"japanese",name:"本家かまどや","name:en":"Honke Kamadoya","name:ja":"本家かまどや",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|Alexela":{countryCodes:["ee"],tags:{amenity:"fuel",brand:"Alexela","brand:wikidata":"Q20529782","brand:wikipedia":"et:Alexela Oil",name:"Alexela"}},"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","brand:wikidata":"Q3639256","brand:wikipedia":"it: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":{countryCodes:["fr"],nomatch:["shop/convenience|Casino Shop","shop/convenience|Le Petit Casino","shop/supermarket|Casino","shop/supermarket|Géant Casino"],tags:{amenity:"fuel",brand:"Casino","brand:wikidata":"Q89029184",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"],nomatch:["shop/convenience|Conoco"],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":{tags:{amenity:"fuel",brand:"Cosmo",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|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|Fred Meyer":{nomatch:["amenity/pharmacy|Fred Meyer","shop/jewelry|Fred Meyer","shop/supermarket|Fred Meyer"],tags:{amenity:"fuel",brand:"Fred Meyer","brand:wikidata":"Q5495932","brand:wikipedia":"en:Fred Meyer",name:"Fred Meyer"}},"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|Green Oil":{countryCodes:["ma"],tags:{amenity:"fuel",brand:"Green Oil","brand:wikidata":"Q88393926",name:"Green Oil"}},"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|IPT":{tags:{amenity:"fuel",brand:"IPT",name:"IPT"}},"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 Shop":{countryCodes:["us"],nomatch:["shop/convenience|Kwik Shop"],tags:{amenity:"fuel",brand:"Kwik Shop","brand:wikidata":"Q6450417","brand:wikipedia":"en:Kwik Shop",name:"Kwik Shop"}},"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"],nomatch:["shop/convenience|Love's"],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|Maes":{tags:{amenity:"fuel",brand:"Maes",name:"Maes"}},"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|Metan":{tags:{amenity:"fuel",brand:"Metan",name:"Metan"}},"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|Rotten Robbie":{countryCodes:["us"],nomatch:["shop/convenience|Rotten Robbie"],tags:{amenity:"fuel",brand:"Rotten Robbie","brand:wikidata":"Q87378070",name:"Rotten Robbie"}},"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":{countryCodes:["ao"],tags:{amenity:"fuel",brand:"Sonangol","brand:wikidata":"Q677832","brand:wikipedia":"pt: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|Winxo":{countryCodes:["ma"],tags:{amenity:"fuel",brand:"Winxo","brand:wikidata":"Q88389320",name:"Winxo"}},"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|Ziz":{countryCodes:["ma"],tags:{amenity:"fuel",brand:"Ziz","brand:wikidata":"Q88393228",name:"Ziz"}},"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","brand:wikidata":"Q56325139","brand:wikipedia":"pl: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|АГНКС Метан":{tags:{amenity:"fuel",brand:"АГНКС Метан",name:"АГНКС Метан"}},"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|Сибнефть":{tags:{amenity:"fuel",brand:"Сибнефть",name:"Сибнефть"}},"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:"اينوك","brand:ar":"اينوك","brand:en":"ENOC","brand:wikidata":"Q3045998","brand:wikipedia":"ar:اينوك",name:"اينوك","name:ar":"اينوك","name:en":"ENOC"}},"amenity/fuel|توتال":{tags:{amenity:"fuel",brand:"توتال","brand:ar":"توتال","brand:en":"Total","brand:wikidata":"Q154037","brand:wikipedia":"fr:Total (entreprise)",name:"توتال","name:ar":"توتال","name:en":"Total"}},"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"],matchNames:["eneos"],tags:{amenity:"fuel",brand:"エネオス","brand:en":"ENEOS","brand:ja":"エネオス","brand:wikidata":"Q1640290","brand:wikipedia":"en:JXTG Nippon Oil & Energy",name:"エネオス","name:en":"ENEOS","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"],nomatch:["amenity/restaurant|Cosmo"],tags:{amenity:"fuel",brand:"コスモ","brand:en":"Cosmo","brand:ja":"コスモ","brand:wikidata":"Q2498318","brand:wikipedia":"en:Cosmo Oil Company",name:"コスモ","name:en":"Cosmo","name:ja":"コスモ",official_name:"コスモ石油"}},"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:"台塑石油","brand:en":"Formosa Petrochemical Corporation","brand:wikidata":"Q1437742","brand:wikipedia":"zh:台塑石油","brand:zh":"台塑石油",name:"台塑石油","name:en":"Formosa Petrochemical Corporation","name:zh":"台塑石油"}},"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"],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|Fortis Healthcare":{countryCodes:["in"],tags:{amenity:"hospital",brand:"Fortis Healthcare","brand:wikidata":"Q7810035","brand:wikipedia":"en:Fortis Healthcare",healthcare:"hospital",name:"Fortis Healthcare"}},"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|โรงพยาบาลส่งเสริมสุขภาพตำบล":{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"],matchNames:["31アイスクリーム","サーティーワン"],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/internet_cafe|アプレシオ":{countryCodes:["jp"],tags:{amenity:"internet_cafe",brand:"アプレシオ","brand:en":"Aprecio","brand:ja":"アプレシオ","brand:wikidata":"Q11284756","brand:wikipedia":"ja:アプレシオ","internet_access:fee":"yes",name:"アプレシオ","name:en":"Aprecio","name:ja":"アプレシオ"}},"amenity/internet_cafe|コミック・バスター":{countryCodes:["jp"],tags:{amenity:"internet_cafe",brand:"コミック・バスター","brand:en":"Comic Buster","brand:ja":"コミック・バスター","brand:wikidata":"Q90413129","internet_access:fee":"yes",name:"コミック・バスター","name:en":"Comic Buster","name:ja":"コミック・バスター"}},"amenity/internet_cafe|マンボー":{countryCodes:["jp"],matchNames:["manboo"],tags:{amenity:"internet_cafe",brand:"マンボー","brand:en":"Manboo","brand:ja":"マンボー","brand:wikidata":"Q11341637","brand:wikipedia":"ja:マンボー (インターネットカフェ)","internet_access:fee":"yes",name:"マンボー","name:en":"Manboo","name:ja":"マンボー"}},"amenity/internet_cafe|メディアカフェポパイ":{countryCodes:["jp"],tags:{amenity:"internet_cafe",brand:"メディアカフェポパイ","brand:en":"Media Cafe Popeye","brand:ja":"メディアカフェポパイ","brand:wikidata":"Q11343796","brand:wikipedia":"ja:メディアカフェポパイ","internet_access:fee":"yes",name:"メディアカフェポパイ","name:en":"Media Cafe Popeye","name:ja":"メディアカフェポパイ"}},"amenity/internet_cafe|快活CLUB":{countryCodes:["jp"],matchNames:["快活クラブ"],tags:{alt_name:"快活クラブ",amenity:"internet_cafe",brand:"快活CLUB","brand:en":"Kaikatsu Club","brand:ja":"快活CLUB","brand:wikidata":"Q88299591","internet_access:fee":"yes",name:"快活CLUB","name:en":"Kaikatsu Club","name:ja":"快活CLUB"}},"amenity/internet_cafe|自遊空間":{countryCodes:["jp"],tags:{"alt_name:en":"Jiyu Kukan",amenity:"internet_cafe",brand:"自遊空間","brand:en":"Space Create","brand:ja":"自遊空間","brand:wikidata":"Q88121843","internet_access:fee":"yes",name:"自遊空間","name:en":"Space Create","name:ja":"自遊空間"}},"amenity/karaoke_box|カラオケ まねきねこ":{countryCodes:["jp"],matchNames:["まねきねこ"],tags:{amenity:"karaoke_box",brand:"カラオケ まねきねこ","brand:en":"Karaoke Manekineko","brand:ja":"カラオケ まねきねこ","brand:wikidata":"Q88326334",fee:"yes",name:"カラオケ まねきねこ","name:en":"Karaoke Manekineko","name:ja":"カラオケ まねきねこ"}},"amenity/karaoke_box|カラオケバンバン":{countryCodes:["jp"],tags:{amenity:"karaoke_box",brand:"カラオケバンバン","brand:en":"Karaoke BanBan","brand:ja":"カラオケバンバン","brand:wikidata":"Q88485685",fee:"yes",name:"カラオケバンバン","name:en":"Karaoke BanBan","name:ja":"カラオケバンバン"}},"amenity/karaoke_box|カラオケ館":{countryCodes:["jp"],tags:{amenity:"karaoke_box",brand:"カラオケ館","brand:en":"Karaoke-kan","brand:ja":"カラオケ館","brand:wikidata":"Q11294889","brand:wikipedia":"ja:B&V",fee:"yes",name:"カラオケ館","name:en":"Karaoke-kan","name:ja":"カラオケ館"}},"amenity/karaoke_box|シダックス":{countryCodes:["jp"],tags:{amenity:"karaoke_box",brand:"シダックス","brand:en":"Shidax","brand:ja":"シダックス","brand:wikidata":"Q7496130","brand:wikipedia":"ja:シダックス",fee:"yes",name:"シダックス","name:en":"Shidax","name:ja":"シダックス"}},"amenity/karaoke_box|ジョイサウンド":{countryCodes:["jp"],tags:{amenity:"karaoke_box",brand:"ジョイサウンド","brand:en":"Joysound","brand:ja":"ジョイサウンド","brand:wikidata":"Q11226033","brand:wikipedia":"ja:JOYSOUND",fee:"yes",name:"ジョイサウンド","name:en":"Joysound","name:ja":"ジョイサウンド"}},"amenity/karaoke_box|ビッグエコー":{countryCodes:["jp"],tags:{amenity:"karaoke_box",brand:"ビッグエコー","brand:en":"Big Echo","brand:ja":"ビッグエコー","brand:wikidata":"Q88117761",fee:"yes",name:"ビッグエコー","name:en":"Big Echo","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/music_school|ヤマハ音楽教室":{countryCodes:["jp"],tags:{amenity:"music_school",brand:"ヤマハ音楽教室","brand:en":"Yamaha Music School","brand:ja":"ヤマハ音楽教室","brand:ja-Latn":"Yamaha Ongaku Kyōshitsu","brand:wikidata":"Q90327852",name:"ヤマハ音楽教室","name:en":"Yamaha Music School","name:ja":"ヤマハ音楽教室","name:ja-Latn":"Yamaha Ongaku Kyōshitsu"}},"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|Indigo":{tags:{amenity:"parking",brand:"Indigo","brand:wikidata":"Q3559970","brand:wikipedia":"fr:Indigo (entreprise)",fee:"yes",name:"Indigo"}},"amenity/parking|NPC24H":{countryCodes:["jp"],tags:{amenity:"parking",brand:"NPC","brand:wikidata":"Q11506782","brand:wikipedia":"ja:日本パーキング",fee:"yes",name:"NPC24H",official_name:"日本パーキング"}},"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"],tags:{amenity:"parking",brand:"アップルパーク","brand:en":"Apple Park","brand:ja":"アップルパーク","brand:wikidata":"Q30923801","brand:wikipedia":"ja:アップルパーク",fee:"yes",name:"アップルパーク","name:en":"Apple Park","name:ja":"アップルパーク"}},"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:"タイムズ","name:en":"Times","name:ja":"タイムズ"}},"amenity/parking|トラストパーク":{countryCodes:["jp"],tags:{amenity:"parking",brand:"トラストパーク","brand:en":"Trust Park","brand:ja":"トラストパーク","brand:wikidata":"Q11321776","brand:wikipedia":"ja:トラストホールディングス",fee:"yes",name:"トラストパーク","name:en":"Trust Park","name:ja":"トラストパーク"}},"amenity/parking|パラカ":{countryCodes:["jp"],tags:{amenity:"parking",brand:"パラカ","brand:en":"Paraca","brand:ja":"パラカ","brand:wikidata":"Q11329318","brand:wikipedia":"ja:パラカ",fee:"yes",name:"パラカ","name:en":"Paraca","name:ja":"パラカ"}},"amenity/parking|ル・パルク":{countryCodes:["jp"],matchNames:["nttル・パルク"],tags:{amenity:"parking",brand:"ル・パルク","brand:en":"LePerc","brand:ja":"ル・パルク","brand:wikidata":"Q11236111","brand:wikipedia":"ja:NTTル・パルク",fee:"yes",name:"ル・パルク","name:en":"LePerc","name:ja":"ル・パルク"}},"amenity/parking|三井のリパーク":{countryCodes:["jp"],tags:{amenity:"parking",brand:"三井のリパーク","brand:en":"Mitsui Repark","brand:ja":"三井のリパーク","brand:wikidata":"Q11415765","brand:wikipedia":"ja:名鉄協商",fee:"yes",name:"三井のリパーク","name:en":"Mitsui Repark","name:ja":"三井のリパーク"}},"amenity/parking|名鉄協商パーキング":{countryCodes:["jp"],tags:{amenity:"parking",brand:"名鉄協商パーキング","brand:en":"Meitetsu Kyosho","brand:ja":"名鉄協商パーキング","brand:wikidata":"Q11415765","brand:wikipedia":"ja:名鉄協商",fee:"yes",name:"名鉄協商パーキング","name:en":"Meitetsu Kyosho","name:ja":"名鉄協商パーキング"}},"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|Agafarma":{tags:{amenity:"pharmacy",brand:"Agafarma",healthcare:"pharmacy",name:"Agafarma"}},"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|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|FarmaElías":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"FarmaElías","brand:wikidata":"Q81969487",healthcare:"pharmacy",name:"FarmaElías"}},"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":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Farmacia",healthcare:"pharmacy",name:"Farmacia"}},"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 Chávez":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacia Chávez","brand:wikidata":"Q81969919",healthcare:"pharmacy",name:"Farmacia Chávez"}},"amenity/pharmacy|Farmacia Cruz Azul":{tags:{amenity:"pharmacy",brand:"Farmacia Cruz Azul",healthcare:"pharmacy",name:"Farmacia Cruz Azul"}},"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|Farmacia Hipermaxi":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacia Hipermaxi","brand:wikidata":"Q81970238",healthcare:"pharmacy",name:"Farmacia Hipermaxi"}},"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 Bolivia":{countryCodes:["bo"],tags:{amenity:"pharmacy",brand:"Farmacias Bolivia","brand:wikidata":"Q81970584",healthcare:"pharmacy",name:"Farmacias Bolivia"}},"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","brand:wikidata":"Q81968937",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 Popular":{tags:{amenity:"pharmacy",brand:"Farmácia Popular",healthcare:"pharmacy",name:"Farmácia Popular"}},"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|Gradska ljekarna Zagreb":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Gradska ljekarna Zagreb",healthcare:"pharmacy",name:"Gradska ljekarna Zagreb"}},"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|Ljekarna Jadran":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Ljekarna Jadran",healthcare:"pharmacy",name:"Ljekarna Jadran"}},"amenity/pharmacy|Ljekarna Joukhadar":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Ljekarna Joukhadar",healthcare:"pharmacy",name:"Ljekarna Joukhadar"}},"amenity/pharmacy|Ljekarna Pablo":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Ljekarna Pablo",healthcare:"pharmacy",name:"Ljekarna Pablo"}},"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|Mandis Pharm":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Mandis Pharm",healthcare:"pharmacy",name:"Mandis Pharm"}},"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|Prima Pharme":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Prima Pharme",healthcare:"pharmacy",name:"Prima Pharme"}},"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"],matchNames:["rowlands"],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|Vaše zdravlje":{countryCodes:["hr"],tags:{amenity:"pharmacy",brand:"Vaše zdravlje",healthcare:"pharmacy",name:"Vaše zdravlje"}},"amenity/pharmacy|V・ドラッグ":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"V・ドラッグ","brand:en":"V・Drug","brand:ja":"V・ドラッグ","brand:wikidata":"Q11367334","brand:wikipedia":"ja:中部薬品",healthcare:"pharmacy",name:"V・ドラッグ","name:en":"V・Drug","name:ja":"V・ドラッグ"}},"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|Медея":{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":"さくら薬局","brand:wikidata":"Q11299021","brand:wikipedia":"ja:クラフト (ドラッグストア)",healthcare:"pharmacy",name:"さくら薬局","name:en":"Sakura Pharmacy","name:ja":"さくら薬局"}},"amenity/pharmacy|アイン薬局":{countryCodes:["jp"],tags:{amenity:"pharmacy",brand:"アイン薬局","brand:ja":"アイン薬局","brand:wikidata":"Q11282518","brand:wikipedia":"ja:アインファーマシーズ",healthcare:"pharmacy",name:"アイン薬局","name:en":"Ain Pharmaciez","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"],matchNames:["osドラッグ"],tags:{alt_name:"OSドラッグ",amenity:"pharmacy",brand:"オーエスドラッグ","brand:en":"OS Drug","brand:ja":"オーエスドラッグ","brand:wikidata":"Q11407223","brand:wikipedia":"ja:協和商事",healthcare:"pharmacy",name:"オーエスドラッグ","name:en":"OS Drug","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":"Qol","brand:ja":"クオール","brand:wikidata":"Q88383318",healthcare:"pharmacy",name:"クオール","name:en":"Qol","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:ja":"ハックドラッグ",healthcare:"pharmacy",name:"ハックドラッグ","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|An Post":{countryCodes:["ie"],tags:{amenity:"post_office",brand:"An Post","brand:wikidata":"Q482490","brand:wikipedia":"en:An Post",name:"An Post"}},"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|Domesa":{tags:{amenity:"post_office",brand:"Domesa",name:"Domesa"}},"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|Zoom":{tags:{amenity:"post_office",brand:"Zoom",name:"Zoom"}},"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|Еконт":{tags:{amenity:"post_office",brand:"Еконт",name:"Еконт"}},"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|بريد الجزائر":{tags:{amenity:"post_office",brand:"بريد الجزائر",name:"بريد الجزائر"}},"amenity/post_office|ヤマト運輸":{countryCodes:["jp"],tags:{amenity:"post_office",brand:"ヤマト運輸","brand:en":"Yamato Transport","brand:ja":"ヤマト運輸","brand:wikidata":"Q6584353","brand:wikipedia":"ja:ヤマト運輸",name:"ヤマト運輸","name:en":"Yamato Transport","name:ja":"ヤマト運輸"}},"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/post_office|佐川急便":{countryCodes:["jp"],tags:{amenity:"post_office",brand:"佐川急便","brand:en":"Sagawa Express","brand:ja":"佐川急便","brand:wikidata":"Q7399082","brand:wikipedia":"ja:佐川急便",name:"佐川急便","name:en":"Sagawa Express","name:ja":"佐川急便"}},"amenity/post_office|日本郵便":{countryCodes:["jp"],tags:{amenity:"post_office",brand:"日本郵便","brand:en":"Japan Post","brand:ja":"日本郵便","brand:wikidata":"Q11509260","brand:wikipedia":"ja:日本郵便",name:"日本郵便","name:en":"Japan Post","name:ja":"日本郵便","short_name:en":"JP"}},"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|Schülerhilfe":{countryCodes:["at","de"],tags:{amenity:"prep_school",brand:"Schülerhilfe","brand:wikidata":"Q2259702","brand:wikipedia":"de:Schülerhilfe",name:"Schülerhilfe"}},"amenity/prep_school|Studienkreis":{countryCodes:["at","ch","de","lu"],tags:{amenity:"prep_school",brand:"Studienkreis","brand:wikidata":"Q2358555","brand:wikipedia":"de:Studienkreis",name:"Studienkreis"}},"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/pub|つぼ八":{countryCodes:["jp"],tags:{amenity:"pub",brand:"つぼ八","brand:en":"Tsubohachi","brand:ja":"つぼ八","brand:wikidata":"Q11272459","brand:wikipedia":"ja:つぼ八",name:"つぼ八","name:en":"Tsubohachi","name:ja":"つぼ八"}},"amenity/pub|はなの舞":{countryCodes:["jp"],tags:{amenity:"pub",brand:"はなの舞","brand:en":"Hananomai","brand:ja":"はなの舞","brand:wikidata":"Q88384850",name:"はなの舞","name:en":"Hananomai","name:ja":"はなの舞"}},"amenity/pub|白木屋":{countryCodes:["jp"],tags:{amenity:"pub",brand:"白木屋","brand:en":"Shirokiya","brand:ja":"白木屋","brand:wikidata":"Q489746","brand:wikipedia":"ja:白木屋 (居酒屋)",name:"白木屋","name:en":"Shirokiya","name:ja":"白木屋"}},"amenity/pub|笑笑":{countryCodes:["jp"],tags:{amenity:"pub",brand:"笑笑","brand:en":"Warawara","brand:ja":"笑笑","brand:wikidata":"Q87214327",name:"笑笑","name:en":"Warawara","name:ja":"笑笑"}},"amenity/pub|魚民":{countryCodes:["jp"],tags:{amenity:"pub",brand:"魚民","brand:en":"Uotami","brand:ja":"魚民","brand:wikidata":"Q11673981",name:"魚民","name:en":"Uotami","name:ja":"魚民"}},"amenity/pub|鳥貴族":{countryCodes:["jp"],tags:{amenity:"pub",brand:"鳥貴族","brand:en":"Torikizoku","brand:ja":"鳥貴族","brand:wikidata":"Q11675129","brand:wikipedia":"ja:鳥貴族",name:"鳥貴族","name:en":"Torikizoku","name:ja":"鳥貴族"}},"amenity/public_bookcase|Boîte à livres":{tags:{amenity:"public_bookcase",brand:"Boîte à livres",name:"Boîte à livres"}},"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",cuisine:"french;american;european",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",cuisine:"british",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|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|Country Waffles":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Country Waffles","brand:wikidata":"Q86151490",cuisine:"breakfast",name:"Country Waffles"}},"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|Fatz":{countryCodes:["us"],tags:{amenity:"restaurant",brand:"Fatz","brand:wikidata":"Q5424504","brand:wikipedia":"en:Fatz",cuisine:"american",name:"Fatz"}},"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","brand:wikipedia":"en:Handmade Burger Co",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|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|Maquis Restaurant":{tags:{amenity:"restaurant",brand:"Maquis Restaurant",name:"Maquis Restaurant"}},"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|Miller & Carter":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Miller & Carter","brand:wikidata":"Q87067401",cuisine:"steak",name:"Miller & Carter"}},"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|Pepper Lunch":{matchNames:["ペッパーランチ"],tags:{amenity:"restaurant",brand:"Pepper Lunch","brand:wikidata":"Q1016072","brand:wikipedia":"en:Pepper Lunch",cuisine:"steak",name:"Pepper Lunch"}},"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 Paï":{countryCodes:["fr"],nomatch:["amenity/fast_food|Pizza Paï"],tags:{amenity:"restaurant",brand:"Pizza Paï","brand:wikidata":"Q3389501","brand:wikipedia":"fr:PizzaPai",cuisine:"pizza",name:"Pizza Paï"}},"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|Ristorante Del Arte":{countryCodes:["fr"],tags:{amenity:"restaurant",brand:"Ristorante Del Arte","brand:wikidata":"Q89208262",cuisine:"italian",name:"restaurant"}},"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|Wildwood":{countryCodes:["gb"],tags:{amenity:"restaurant",brand:"Wildwood","brand:wikidata":"Q85300869",cuisine:"grill;pasta;pizza",name:"Wildwood"}},"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":"しゃぶ葉","brand:wikidata":"Q87724264",cuisine:"buffet",name:"しゃぶ葉","name:en":"Syabuyo","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":"ガスト","brand:wikidata":"Q87724117",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":"Machida Shouten","brand:jp":"町田商店","brand:wikidata":"Q88318612",cuisine:"noodle",name:"町田商店","name:en":"Machida Shouten","name:jp":"町田商店"}},"amenity/restaurant|三媽臭臭鍋":{countryCodes:["tw"],tags:{amenity:"restaurant",brand:"三媽臭臭鍋",cuisine:"taiwanese",name:"三媽臭臭鍋","name:zh":"三媽臭臭鍋"}},"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:["jp"],tags:{amenity:"restaurant",brand:"元気寿司","brand:en":"Genki Sushi","brand:ja":"元気寿司","brand:wikidata":"Q5533323","brand:wikipedia":"ja:元気寿司",cuisine:"sushi",name:"元気寿司","name:en":"Genki Sushi","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:["tw"],tags:{amenity:"restaurant",brand:"弘爺漢堡",cuisine:"american;breakfast",name:"弘爺漢堡","name:en":"Hong Ya Hambuger"}},"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|麥味登":{countryCodes:["tw"],tags:{amenity:"restaurant",brand:"麥味登",cuisine:"american;breakfast",name:"麥味登","name:en":"My Warn Day Care & Brunch"}},"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","gb","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|Amazonロッカー":{countryCodes:["jp"],matchNames:["アマゾン・ロッカー"],tags:{alt_name:"アマゾン・ロッカー",amenity:"vending_machine",brand:"Amazonロッカー","brand:en":"Amazon Locker","brand:ja":"Amazonロッカー","brand:wikidata":"Q16974764","brand:wikipedia":"ja:Amazonロッカー",name:"Amazonロッカー","name:en":"Amazon Locker","name:ja":"Amazonロッカー",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":{countryCodes:["hu"],tags:{amenity:"vending_machine",brand:"Foxpost",name:"Foxpost",vending:"parcel_pickup"}},"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|JT":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"JT","brand:wikidata":"Q898568","brand:wikipedia":"ja:日本たばこ産業",name:"JT",official_name:"日本たばこ産業","official_name:en":"Japan Tobacco",vending:"cigarettes"}},"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|PUDOステーション":{countryCodes:["jp"],matchNames:["プドー・ステーション"],matchTags:["amenity/post_box"],tags:{alt_name:"プドー・ステーション",amenity:"vending_machine",brand:"プドー","brand:en":"PUDO","brand:ja":"プドー","brand:wikidata":"Q86738066","brand:wikipedia":"ja:Packcity Japan",name:"PUDOステーション","name:en":"PUDO Station","name:ja":"PUDOステーション",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|UCC":{countryCodes:["jp"],matchNames:["ucc上島珈琲"],tags:{amenity:"vending_machine",brand:"UCC","brand:wikidata":"Q1185060","brand:wikipedia":"ja:UCC上島珈琲",name:"UCC",official_name:"上島珈琲","official_name:en":"Ueshima Coffee","official_name:ja":"上島珈琲",vending:"coffee"}},"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"],matchNames:["i・lohas"],tags:{"alt_name:en":"ILOHAS",amenity:"vending_machine",brand:"い・ろ・は・す","brand:en":"I Lohas","brand:ja":"い・ろ・は・す","brand:wikidata":"Q11260234","brand:wikipedia":"ja:い・ろ・は・す","drink:water":"yes",name:"い・ろ・は・す","name:en":"I Lohas","name:ja":"い・ろ・は・す",vending:"drinks"}},"amenity/vending_machine|だし道楽":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"だし道楽","brand:en":"Dashi Douraku","brand:ja":"だし道楽","brand:wikidata":"Q60989429","brand:wikipedia":"ja:だし道楽","drink:brewery":"yes",name:"だし道楽","name:en":"Dashi Douraku","name:ja":"だし道楽",vending:"food"}},"amenity/vending_machine|はこぽす":{countryCodes:["jp"],matchTags:["amenity/post_box"],tags:{amenity:"vending_machine",brand:"はこぽす","brand:en":"Hakopost","brand:ja":"はこぽす","brand:wikidata":"Q11509261","brand:wikipedia":"ja:日本郵便輸送",name:"はこぽす","name:en":"Hakopost","name:ja":"はこぽす",vending:"parcel_pickup"}},"amenity/vending_machine|アキュア":{countryCodes:["jp"],matchNames:["acureの自販機"],tags:{amenity:"vending_machine",brand:"アキュア","brand:en":"Acure","brand:ja":"アキュア","brand:wikidata":"Q11226260","brand:wikipedia":"ja:JR東日本ウォータービジネス",name:"アキュア","name:en":"Acure","name:ja":"アキュア"}},"amenity/vending_machine|アサヒビール":{countryCodes:["jp"],tags:{"alt_name:en":"Asahi Beer",amenity:"vending_machine",brand:"アサヒビール","brand:en":"Asahi Breweries","brand:ja":"アサヒビール","brand:wikidata":"Q720479","brand:wikipedia":"ja:アサヒビール","drink:brewery":"yes",name:"アサヒビール","name:en":"Asahi Breweries","name:ja":"アサヒビール",vending:"drinks"}},"amenity/vending_machine|アペックス":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"アペックス","brand:en":"Apex","brand:ja":"アペックス","brand:wikidata":"Q11284782","brand:wikipedia":"ja:アペックス (企業)",name:"アペックス","name:en":"Apex","name:ja":"アペックス",vending:"coffee"}},"amenity/vending_machine|カップヌードル":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"カップヌードル","brand:en":"Cup Noodle","brand:ja":"カップヌードル","brand:wikidata":"Q1143401","brand:wikipedia":"ja:カップヌードル",name:"カップヌードル","name:en":"Cup Noodle","name:ja":"カップヌードル",vending:"food"}},"amenity/vending_machine|カルピス":{countryCodes:["jp"],tags:{"alt_name:en":"Calpico",amenity:"vending_machine",brand:"カルピス","brand:en":"Calpis","brand:ja":"カルピス","brand:wikidata":"Q1027454","brand:wikipedia":"ja:カルピス",name:"カルピス","name:en":"Calpis","name:ja":"カルピス",vending:"drinks"}},"amenity/vending_machine|キリンビバレッジ":{countryCodes:["jp"],matchNames:["キリンbv"],tags:{alt_name:"キリンBV",amenity:"vending_machine",brand:"キリンビバレッジ","brand:en":"Kirin Beverage","brand:ja":"キリンビバレッジ","brand:wikidata":"Q1833953","brand:wikipedia":"ja:キリンビバレッジ","drink:tea":"yes",name:"キリンビバレッジ","name:en":"Kirin Beverage","name:ja":"キリンビバレッジ",vending:"drinks"}},"amenity/vending_machine|キリンビール":{countryCodes:["jp"],tags:{"alt_name:en":"Kirin Beer",amenity:"vending_machine",brand:"キリンビール","brand:en":"Kirin Brewery","brand:ja":"キリンビール","brand:wikidata":"Q13403399","brand:wikipedia":"ja:麒麟麦酒","drink:brewery":"yes",name:"キリンビール","name:en":"Kirin Brewery","name:ja":"キリンビール",official_name:"麒麟麦酒",vending:"drinks"}},"amenity/vending_machine|コカ・コーラ":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"コカ・コーラ","brand:en":"Coca-Cola","brand:ja":"コカ・コーラ","brand:wikidata":"Q2813","brand:wikipedia":"ja:コカ・コーラ","drink:cola":"yes",name:"コカ・コーラ","name:en":"Coca-Cola","name:ja":"コカ・コーラ",vending:"drinks"}},"amenity/vending_machine|サントリー":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"サントリー","brand:en":"Suntory","brand:ja":"サントリー","brand:wikidata":"Q1345267","brand:wikipedia":"ja:サントリー",name:"サントリー","name:en":"Suntory","name:ja":"サントリー",vending:"drinks"}},"amenity/vending_machine|ジョージア":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"ジョージア","brand:en":"Georgia","brand:ja":"ジョージア","brand:wikidata":"Q5547323","brand:wikipedia":"ja:ジョージア (缶コーヒー)",name:"ジョージア","name:en":"Georgia","name:ja":"ジョージア",vending:"coffee"}},"amenity/vending_machine|セブンティーンアイス":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"セブンティーンアイス","brand:en":"Seventeen Ice","brand:ja":"セブンティーンアイス","brand:wikidata":"Q11314427","brand:wikipedia":"ja:セブンティーンアイス",name:"セブンティーンアイス","name:en":"Seventeen Ice","name:ja":"セブンティーンアイス",vending:"ice_cream"}},"amenity/vending_machine|ダイドードリンコ":{countryCodes:["jp"],matchNames:["dydoドリンコ","ダイドー"],tags:{amenity:"vending_machine",brand:"ダイドー","brand:en":"DyDo","brand:ja":"ダイドー","brand:wikidata":"Q11316814","brand:wikipedia":"ja:ダイドードリンコ","drink:soft_drink":"yes",name:"ダイドードリンコ","name:en":"DyDo Drinco","name:ja":"ダイドードリンコ",vending:"drinks"}},"amenity/vending_machine|チェリオ":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"チェリオ","brand:en":"Cheerio","brand:ja":"チェリオ","brand:wikidata":"Q5089350","brand:wikipedia":"ja:チェリオ","drink:soft_drink":"yes",name:"チェリオ","name:en":"Cheerio","name:ja":"チェリオ",vending:"drinks"}},"amenity/vending_machine|ドール":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"ドール","brand:en":"Dole","brand:ja":"ドール","brand:wikidata":"Q492747","brand:wikipedia":"ja:ドール・フード・カンパニー",name:"ドール","name:en":"Dole","name:ja":"ドール",vending:"food"}},"amenity/vending_machine|ニチレイフーズ":{countryCodes:["jp"],tags:{"alt_name:en":"Nichirei 24 Hour Hot Menu Casual Frozen Foods",amenity:"vending_machine",brand:"ニチレイフーズ","brand:en":"Nichirei Foods","brand:ja":"ニチレイフーズ","brand:wikidata":"Q4921527","brand:wikipedia":"ja:ニチレイ",name:"ニチレイフーズ","name:en":"Nichirei Foods","name:ja":"ニチレイフーズ",vending:"food"}},"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/vending_machine|メトロの缶詰":{countryCodes:["jp"],tags:{"alt_name:en":"Metocan Shop",amenity:"vending_machine",brand:"メトロの缶詰","brand:en":"Metro Commerce","brand:ja":"メトロの缶詰","brand:wikidata":"Q11343895","brand:wikipedia":"ja:メトロコマース",name:"メトロの缶詰","name:en":"Metro Commerce","name:ja":"メトロの缶詰",vending:"gift"}},"amenity/vending_machine|ヤクルト":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"ヤクルト","brand:en":"Yakult","brand:ja":"ヤクルト","brand:wikidata":"Q16172223","brand:wikipedia":"ja:ヤクルト本社","drink:milk":"yes",name:"ヤクルト","name:en":"Yakult","name:ja":"ヤクルト",vending:"milk"}},"amenity/vending_machine|ロッテアイス":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"ロッテアイス","brand:en":"Lotte Ice Cream","brand:ja":"ロッテアイス","brand:wikidata":"Q24886018","brand:wikipedia":"ja:ロッテアイス",name:"ロッテアイス","name:en":"Lotte Ice Cream","name:ja":"ロッテアイス",vending:"ice_cream"}},"amenity/vending_machine|伊藤園":{countryCodes:["jp"],matchNames:["ito en"],tags:{"alt_name:en":"ITOEN",amenity:"vending_machine",brand:"伊藤園","brand:en":"Ito En","brand:ja":"伊藤園","brand:wikidata":"Q3079325","brand:wikipedia":"ja:伊藤園","drink:tea":"yes",name:"伊藤園","name:en":"Ito En","name:ja":"伊藤園",vending:"drinks"}},"amenity/vending_machine|大塚食品":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"大塚","brand:en":"Otsuka","brand:ja":"大塚","brand:wikidata":"Q11434124","brand:wikipedia":"ja:大塚食品",name:"大塚食品","name:en":"Otsuka Foods","name:ja":"大塚食品",vending:"food"}},"amenity/vending_machine|明治":{countryCodes:["jp"],tags:{amenity:"vending_machine",brand:"明治","brand:en":"Meiji","brand:ja":"明治","brand:wikidata":"Q11512281","brand:wikipedia":"ja:明治 (企業)",name:"明治","name:en":"Meiji","name:ja":"明治",vending:"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/audiologist|Imperial Hearing":{countryCodes:["gb"],tags:{brand:"Imperial Hearing","brand:wikidata":"Q86997819",healthcare:"audiologist",name:"Imperial Hearing"}},"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|San Diego Blood Bank":{countryCodes:["us"],tags:{brand:"San Diego Blood Bank","brand:wikidata":"Q87770169",healthcare:"blood_donation",name:"San Diego Blood Bank",short_name:"SDBB"}},"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/adult_gaming_centre|ガイア":{countryCodes:["jp"],tags:{brand:"ガイア","brand:en":"GAIA","brand:ja":"ガイア","brand:wikidata":"Q11295831","brand:wikipedia":"ja:ガイア (パチンコ)",gambling:"pachinko",leisure:"adult_gaming_centre",name:"ガイア","name:en":"GAIA","name:ja":"ガイア"}},"leisure/adult_gaming_centre|ダイナム":{countryCodes:["jp"],tags:{brand:"ダイナム","brand:en":"Dynam","brand:ja":"ダイナム","brand:wikidata":"Q10846977","brand:wikipedia":"ja:ダイナム",gambling:"pachinko",leisure:"adult_gaming_centre",name:"ダイナム","name:en":"Dynam","name:ja":"ダイナム"}},"leisure/adult_gaming_centre|マルハン":{countryCodes:["jp"],tags:{brand:"マルハン","brand:en":"Maruhan","brand:ja":"マルハン","brand:wikidata":"Q1905948","brand:wikipedia":"ja:マルハン",gambling:"pachinko",leisure:"adult_gaming_centre",name:"マルハン","name:en":"Maruhan","name:ja":"マルハン"}},"leisure/amusement_arcade|アドアーズ":{countryCodes:["jp"],tags:{brand:"アドアーズ","brand:en":"Adores","brand:ja":"アドアーズ","brand:wikidata":"Q54843532","brand:wikipedia":"ja:アドアーズ",leisure:"amusement_arcade",name:"アドアーズ","name:en":"Adores","name:ja":"アドアーズ"}},"leisure/amusement_arcade|アピナ":{countryCodes:["jp"],tags:{brand:"アピナ","brand:en":"Apina","brand:ja":"アピナ","brand:wikidata":"Q55385192","brand:wikipedia":"ja:共和コーポレーション",leisure:"amusement_arcade",name:"アピナ","name:en":"Apina","name:ja":"アピナ"}},"leisure/amusement_arcade|クラブセガ":{countryCodes:["jp"],matchNames:["クラブsega","セガ","セガワールド"],tags:{alt_name:"セガワールド","alt_name:en":"Sega World",brand:"クラブセガ","brand:en":"Club Sega","brand:ja":"クラブセガ","brand:wikidata":"Q7446141","brand:wikipedia":"ja:セガ エンタテインメント",leisure:"amusement_arcade",name:"クラブセガ","name:en":"Club Sega","name:ja":"クラブセガ"}},"leisure/amusement_arcade|タイトーステーション":{countryCodes:["jp"],matchNames:["タイトー"],tags:{brand:"タイトーステーション","brand:en":"Taito Station","brand:ja":"タイトーステーション","brand:wikidata":"Q1054844","brand:wikipedia":"ja:タイトー",leisure:"amusement_arcade",name:"タイトーステーション","name:en":"Taito Station","name:ja":"タイトーステーション"}},"leisure/amusement_arcade|ナムコ":{countryCodes:["jp"],tags:{brand:"ナムコ","brand:en":"NAMCO","brand:ja":"ナムコ","brand:wikidata":"Q309996","brand:wikipedia":"ja:バンダイナムコアミューズメント",leisure:"amusement_arcade",name:"ナムコ","name:en":"NAMCO","name:ja":"ナムコ"}},"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/bowling_alley|ラウンドワン":{countryCodes:["jp"],tags:{brand:"ラウンドワン","brand:en":"ROUND1","brand:ja":"ラウンドワン","brand:wikidata":"Q11346634","brand:wikipedia":"ja:ラウンドワン",leisure:"bowling_alley",name:"ラウンドワン","name:en":"ROUND1","name:ja":"ラウンドワン"}},"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|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|Pure Barre":{countryCodes:["ca","us"],tags:{brand:"Pure Barre","brand:wikidata":"Q86707084",leisure:"fitness_centre",name:"Pure Barre"}},"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|World Class":{tags:{brand:"World Class",leisure:"fitness_centre",name:"World Class"}},"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/fitness_centre|コナミスポーツクラブ":{countryCodes:["jp"],tags:{brand:"コナミスポーツクラブ","brand:en":"Konami Sports Club","brand:ja":"コナミスポーツクラブ","brand:wikidata":"Q11302286","brand:wikipedia":"ja:コナミスポーツ (企業)",leisure:"fitness_centre",name:"コナミスポーツクラブ","name:en":"Konami Sports Club","name:ja":"コナミスポーツクラブ"}},"leisure/fitness_centre|ジョイフィット":{countryCodes:["jp"],tags:{brand:"ジョイフィット","brand:en":"JOYFIT","brand:ja":"ジョイフィット","brand:wikidata":"Q11310515","brand:wikipedia":"ja:ジョイフィット",leisure:"fitness_centre",name:"ジョイフィット","name:en":"JOYFIT","name:ja":"ジョイフィット"}},"leisure/fitness_centre|ティップネス":{countryCodes:["jp"],tags:{brand:"ティップネス","brand:en":"Tipness","brand:ja":"ティップネス","brand:wikidata":"Q11318940","brand:wikipedia":"ja:ティップネス",leisure:"fitness_centre",name:"ティップネス","name:en":"Tipness","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"}},"leisure/trampoline_park|Flip Out":{countryCodes:["gb"],tags:{brand:"Flip Out","brand:wikidata":"Q87271194",leisure:"trampoline_park",name:"Flip Out"}},"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|Spaces":{tags:{brand:"Spaces","brand:wikidata":"Q87629680",name:"Spaces",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":{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|Cordant People":{countryCodes:["gb"],tags:{brand:"Cordant People","brand:wikidata":"Q85311605",name:"Cordant People",office:"employment_agency"}},"office/employment_agency|Driver Hire":{countryCodes:["gb"],tags:{brand:"Driver Hire","brand:wikidata":"Q89404688",name:"Driver Hire",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|Office Angels":{countryCodes:["gb"],tags:{brand:"Office Angels","brand:wikidata":"Q89403503",name:"Office Angels",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/employment_agency|ハローワーク":{countryCodes:["jp"],tags:{brand:"ハローワーク","brand:en":"Hello Work","brand:ja":"ハローワーク","brand:wikidata":"Q5016578","brand:wikipedia":"ja:公共職業安定所",name:"ハローワーク","name:en":"Hello Work","name:ja":"ハローワーク",office:"employment_agency",official_name:"公共職業安定所","official_name:en":"Public Employment Security Office"}},"office/employment_agency|パソナ":{countryCodes:["jp"],tags:{brand:"パソナ","brand:en":"Pasona","brand:ja":"パソナ","brand:wikidata":"Q7142290","brand:wikipedia":"ja:パソナ",name:"パソナ","name:en":"Pasona","name:ja":"パソナ",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|Bradleys":{countryCodes:["gb"],tags:{brand:"Bradleys","brand:wikidata":"Q83738286",name:"Bradleys",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|Mayfair Town & Country":{countryCodes:["gb"],tags:{brand:"Mayfair Town & Country","brand:wikidata":"Q90269289",name:"Mayfair Town & Country",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|Stags":{countryCodes:["gb"],tags:{brand:"Stags","brand:wikidata":"Q91028631",name:"Stags",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|Symonds & Sampson":{countryCodes:["gb"],tags:{brand:"Symonds & Sampson","brand:wikidata":"Q90262955",name:"Symonds & Sampson",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"],tags:{brand:"タウンハウジング","brand:en":"Townhousing","brand:ja":"タウンハウジング","brand:wikidata":"Q11315877","brand:wikipedia":"ja:タウンハウジング",name:"タウンハウジング","name:en":"Townhousing","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|NM Money":{countryCodes:["gb"],nomatch:["amenity/bureau_de_change|NM Money"],tags:{brand:"NM Money","brand:wikidata":"Q86529747",name:"NM Money",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|A-Plan Insurance":{countryCodes:["gb"],tags:{brand:"A-Plan Insurance","brand:wikidata":"Q87070013",name:"A-Plan Insurance",office:"insurance"}},"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|CESCE":{countryCodes:["es"],tags:{brand:"CESCE","brand:wikidata":"Q5737049","brand:wikipedia":"es:CESCE",name:"CESCE",office:"insurance",official_name:"Compañía Española de Seguros de Crédito a la Exportación"}},"office/insurance|CUK Ubezpieczenia":{countryCodes:["pl"],tags:{brand:"CUK Ubezpieczenia",name:"CUK Ubezpieczenia",office:"insurance"}},"office/insurance|Caser":{countryCodes:["es"],tags:{brand:"Caser","brand:wikidata":"Q5756057","brand:wikipedia":"es:Caser",name:"Caser",office:"insurance"}},"office/insurance|Catalana Occidente":{countryCodes:["es"],tags:{brand:"Catalana Occidente","brand:wikidata":"Q5936881","brand:wikipedia":"es:Catalana Occidente",name:"Catalana Occidente",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|ENSA":{countryCodes:["ao"],tags:{brand:"ENSA","brand:wikidata":"Q5323726","brand:wikipedia":"en:ENSA – Seguros de Angola",name:"ENSA",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","brand:wikidata":"Q1566111","brand:wikipedia":"de: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:wikidata":"Q13103680","brand:wikipedia":"lb:La Luxembourgeoise",name:"LaLux",office:"insurance"}},"office/insurance|Liberty Seguros":{countryCodes:["es"],tags:{brand:"Liberty Seguros","brand:wikidata":"Q3178929","brand:wikipedia":"es:Liberty Seguros",name:"Liberty Seguros",office:"insurance"}},"office/insurance|Línea Directa":{countryCodes:["es"],tags:{brand:"Línea Directa","brand:wikidata":"Q325156","brand:wikipedia":"es:Línea Directa",name:"Línea Directa",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|Mutua Madrileña":{countryCodes:["es"],tags:{brand:"Mutua Madrileña","brand:wikidata":"Q4888750","brand:wikipedia":"es:Mutua Madrileña",name:"Mutua Madrileña",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|Pelayo":{countryCodes:["es"],tags:{brand:"Pelayo","brand:wikidata":"Q16617805","brand:wikipedia":"es:Pelayo Seguros",name:"Pelayo",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|Santa Lucía":{countryCodes:["es"],tags:{brand:"Santa Lucía","brand:wikidata":"Q6120481","brand:wikipedia":"es:Santa Lucía",name:"Santa Lucía",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|Ubezpieczenia":{tags:{brand:"Ubezpieczenia",name:"Ubezpieczenia",office:"insurance"}},"office/insurance|VidaCaixa":{countryCodes:["es"],tags:{brand:"VidaCaixa","brand:wikidata":"Q11705079","brand:wikipedia":"es:VidaCaixa",name:"VidaCaixa",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:"Белгосстрах","brand:be":"Белдзяржстрах","brand:en":"Belgosstrakh","brand:ru":"Белгосстрах","brand:wikidata":"Q64606273",name:"Белгосстрах","name:be":"Белдзяржстрах","name:en":"Belgosstrakh","name:ru":"Белгосстрах",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|Ренессанс страхование":{tags:{brand:"Ренессанс страхование",name:"Ренессанс страхование",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/insurance|日本生命":{countryCodes:["jp"],tags:{"alt_name:en":"Nissay",brand:"日本生命","brand:en":"Nippon Life","brand:ja":"日本生命","brand:wikidata":"Q519611","brand:wikipedia":"ja:日本生命保険",name:"日本生命","name:en":"Nippon Life","name:ja":"日本生命",office:"insurance"}},"office/insurance|明治安田生命":{countryCodes:["jp"],tags:{brand:"明治安田生命","brand:en":"Meiji Yasuda Life","brand:ja":"明治安田生命","brand:wikidata":"Q174081","brand:wikipedia":"ja:明治安田生命保険",name:"明治安田生命","name:en":"Meiji Yasuda Life","name:ja":"明治安田生命",office:"insurance"}},"office/insurance|第一生命":{countryCodes:["jp"],tags:{brand:"第一生命","brand:en":"Dai-ichi Life","brand:ja":"第一生命","brand:wikidata":"Q595475","brand:wikipedia":"ja:第一生命保険",name:"第一生命","name:en":"Dai-ichi Life","name:ja":"第一生命",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"}},"office/telecommunication|Antik Telecom":{countryCodes:["sk"],tags:{brand:"Antik Telecom","brand:wikidata":"Q30297477","brand:wikipedia":"sk:Antik Telecom",name:"Antik Telecom",office:"telecommunication"}},"office/telecommunication|Beeline":{tags:{brand:"Beeline",name:"Beeline",office:"telecommunication"}},"office/telecommunication|ETECSA":{countryCodes:["cu"],tags:{brand:"ETECSA","brand:wikidata":"Q490323","brand:wikipedia":"es:Empresa de Telecomunicaciones de Cuba",name:"ETECSA",office:"telecommunication",official_name:"Empresa de Telecomunicaciones de Cuba"}},"office/telecommunication|Билайн":{tags:{brand:"Билайн","brand:en":"Beeline","brand:ru":"Билайн","brand:wikidata":"Q402880","brand:wikipedia":"ru:Билайн",name:"Билайн","name:en":"Beeline","name:ru":"Билайн",office:"telecommunication"}},"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|NSLC":{tags:{brand:"NSLC",name:"NSLC",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":"Yamaya","brand:ja":"やまや","brand:wikidata":"Q17224765","brand:wikipedia":"ja:やまや",name:"やまや","name:en":"YaMaYa","name:ja":"やまや",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/anime|まんだらけ":{countryCodes:["jp"],tags:{brand:"まんだらけ","brand:en":"Mandarake","brand:ja":"まんだらけ","brand:wikidata":"Q6747833","brand:wikipedia":"ja:まんだらけ",name:"まんだらけ","name:en":"Mandarake","name:ja":"まんだらけ",shop:"anime"}},"shop/anime|らしんばん":{countryCodes:["jp"],tags:{brand:"らしんばん","brand:en":"Lashinbang","brand:ja":"らしんばん","brand:wikidata":"Q11281322","brand:wikipedia":"ja:らしんばん",name:"らしんばん","name:en":"Lashinbang","name:ja":"らしんばん",shop:"anime"}},"shop/anime|ケイ・ブックス":{countryCodes:["jp"],matchNames:["k-books"],matchTags:["shop/books"],tags:{brand:"ケイ・ブックス","brand:en":"K-BOOKS","brand:ja":"ケイ・ブックス","brand:wikidata":"Q8061680","brand:wikipedia":"ja:K-BOOKS",name:"ケイ・ブックス","name:en":"K-BOOKS","name:ja":"ケイ・ブックス",shop:"anime"}},"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|Дочки-сыночки":{countryCodes:["by","ru"],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/baby_goods|赤ちゃん本舗":{countryCodes:["jp"],tags:{brand:"赤ちゃん本舗","brand:en":"Akachan Honpo","brand:ja":"赤ちゃん本舗","brand:wikidata":"Q11257015","brand:wikipedia":"ja:赤ちゃん本舗",name:"赤ちゃん本舗","name:en":"Akachan Honpo","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|Bachmeier":{tags:{brand:"Bachmeier",name:"Bachmeier",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|Brioche Dorée":{countryCodes:["fr"],tags:{brand:"Brioche Dorée","brand:wikidata":"Q2925606","brand:wikipedia":"fr:Brioche Dorée",name:"Brioche Dorée",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|De Echte Bakker":{countryCodes:["nl"],tags:{brand:"De Echte Bakker","brand:wikidata":"Q16920716","brand:wikipedia":"en:De Echte Bakker",name:"De Echte Bakker",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|Franz":{countryCodes:["us"],tags:{brand:"Franz","brand:wikidata":"Q7889571","brand:wikipedia":"en:United States Bakery",name:"Franz",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"],matchNames:["bäckerei kamps"],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|La Panetière":{tags:{brand:"La Panetière",name:"La Panetière",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|Le Pétrin Ribeïrou":{countryCodes:["fr"],tags:{brand:"Le Pétrin Ribeïrou","brand:wikidata":"Q89209633",name:"Le Pétrin Ribeïrou",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|Warrens Bakery":{countryCodes:["gb"],tags:{brand:"Warrens Bakery","brand:wikidata":"Q7970646","brand:wikipedia":"en:Warrens Bakery",name:"Warrens Bakery",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|بربری":{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|Beauty Nails":{tags:{brand:"Beauty Nails",name:"Beauty Nails",shop:"beauty"}},"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|Citron Vert":{countryCodes:["fr"],tags:{brand:"Citron Vert","brand:wikidata":"Q89503945",name:"Citron Vert",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|Happy Nails":{tags:{brand:"Happy Nails",name:"Happy Nails",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|New York Nails":{tags:{brand:"New York Nails",name:"New York Nails",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|Tan Republic":{countryCodes:["us"],matchTags:["leisure/tanning_salon"],tags:{beauty:"tanning",brand:"Tan Republic","brand:wikidata":"Q84112774",name:"Tan Republic",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",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|Markgrafen Getränkemarkt":{tags:{brand:"Markgrafen Getränkemarkt",name:"Markgrafen Getränkemarkt",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|Sagasser":{countryCodes:["de"],tags:{brand:"Sagasser","brand:wikidata":"Q30838417","brand:wikipedia":"de:Sagasser",name:"Sagasser",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:wikidata":"Q67934123","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|STS":{tags:{brand:"STS",name:"STS",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|Christian Science Reading Room":{countryCodes:["us"],tags:{books:"religion",brand:"Christian Science Reading Room","brand:wikidata":"Q5110122","brand:wikipedia":"en:Christian Science Reading Room",name:"Christian Science Reading Room",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|France Loisirs":{tags:{brand:"France Loisirs","brand:wikidata":"Q3080726","brand:wikipedia":"fr:France Loisirs",name:"France Loisirs",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|Martinus":{countryCodes:["sk"],tags:{brand:"Martinus","brand:wikidata":"Q15089074","brand:wikipedia":"sk:Martinus",name:"Martinus",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|Orell Füssli":{countryCodes:["ch"],tags:{brand:"Orell Füssli","brand:wikidata":"Q1511140","brand:wikipedia":"de:Orell Füssli",name:"Orell Füssli",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","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:{"alt_name:en":"Kumabook",brand:"くまざわ書店","brand:en":"Kumazawa Books","brand:ja":"くまざわ書店","brand:wikidata":"Q11265517","brand:wikipedia":"ja:くまざわ",name:"くまざわ書店","name:en":"Kumazawa Books","name:ja":"くまざわ書店",shop:"books"}},"shop/books|とらのあな":{countryCodes:["jp"],tags:{books:"comic",brand:"とらのあな","brand:en":"Toranoana","brand:ja":"とらのあな","brand:wikidata":"Q865297","brand:wikipedia":"ja:コミックとらのあな",name:"とらのあな","name:en":"Comic Toranoana","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"],matchNames:["ジュンク"],tags:{brand:"ジュンク堂書店","brand:en":"Junkudo","brand:ja":"ジュンク堂書店","brand:wikidata":"Q3190093","brand:wikipedia":"ja:ジュンク堂書店",name:"ジュンク堂書店","name:en":"Junkudo","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|丸善":{countryCodes:["jp"],matchNames:["丸善書店"],tags:{brand:"丸善","brand:en":"MARUZEN","brand:ja":"丸善","brand:wikidata":"Q1906012","brand:wikipedia":"ja:丸善雄松堂",name:"丸善","name:en":"MARUZEN","name:ja":"丸善",official_name:"丸善雄松堂","official_name:en":"Maruzen Yushodo","official_name:ja":"丸善雄松堂",shop:"books"}},"shop/books|宮脇書店":{tags:{brand:"宮脇書店","brand:en":"Miyawaki Shoten","brand:ja":"宮脇書店","brand:wikidata":"Q11455237","brand:wikipedia":"ja:宮脇書店",name:"宮脇書店","name:en":"Miyawaki Shoten","name:ja":"宮脇書店",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/books|紀伊國屋書店":{countryCodes:["jp"],tags:{brand:"紀伊國屋書店","brand:en":"Books Kinokuniya","brand:ja":"紀伊國屋書店","brand:wikidata":"Q8061680","brand:wikipedia":"ja:紀伊國屋書店",name:"紀伊國屋書店","name:en":"Books Kinokuniya","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/camera|London Camera Exchange":{countryCodes:["gb"],matchTags:["shop/electronics","shop/photo"],tags:{brand:"London Camera Exchange","brand:wikidata":"Q84156395",name:"London Camera Exchange",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|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|Fit Service":{tags:{brand:"Fit Service",name:"Fit Service",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|Formula One Autocentres":{countryCodes:["gb"],matchNames:["f1 autocentre","formula 1 autocentre"],tags:{brand:"Formula One Autocentres","brand:wikidata":"Q79239635",name:"Formula One Autocentres",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|National Windscreens":{countryCodes:["gb"],tags:{brand:"National Windscreens","brand:wikidata":"Q87142619",name:"National Windscreens","service:vehicle:glass":"yes",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|DriveTime":{countryCodes:["us"],tags:{brand:"DriveTime","brand:wikidata":"Q5307879","brand:wikipedia":"en:DriveTime",name:"DriveTime",second_hand:"only",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|Brainwave":{countryCodes:["gb"],tags:{brand:"Brainwave","brand:wikidata":"Q90561455",name:"Brainwave",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|Cats Protection":{countryCodes:["gb"],tags:{brand:"Cats Protection","brand:wikidata":"Q5053998","brand:wikipedia":"en:Cats Protection",name:"Cats Protection",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|RNLI Shop":{countryCodes:["gb","ie"],matchNames:["royal national lifeboat institution"],tags:{brand:"RNLI Shop","brand:wikidata":"Q2166873","brand:wikipedia":"en:Royal National Lifeboat Institution",name:"RNLI Shop",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|Shelter":{countryCodes:["gb"],tags:{brand:"Shelter","brand:wikidata":"Q7493943","brand:wikipedia":"en:Shelter (charity)",name:"Shelter",shop:"charity"}},"shop/charity|St Margaret's Hospice Care":{countryCodes:["gb"],tags:{brand:"St Margaret's Hospice Care","brand:wikidata":"Q91027360",name:"St Margaret's Hospice Care",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|Drogas":{tags:{brand:"Drogas",name:"Drogas",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|& Other Stories":{countryCodes:["gb"],tags:{brand:"& Other Stories","brand:wikidata":"Q85322338",clothes:"women",name:"& Other Stories",shop:"clothes"}},"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-Modecenter":{countryCodes:["bg","de"],tags:{brand:"AWG-Modecenter","brand:wikidata":"Q300220","brand:wikipedia":"de:AWG-Modecenter",name:"AWG-Modecenter",shop:"clothes",short_name:"AWG"}},"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|Armor Lux":{tags:{brand:"Armor Lux","brand:wikidata":"Q951079","brand:wikipedia":"fr:Armor Lux",name:"Armor Lux",shop:"clothes"}},"shop/clothes|Aubade":{tags:{brand:"Aubade","brand:wikidata":"Q2870536","brand:wikipedia":"fr:Aubade (lingerie)",clothes:"underwear",name:"Aubade",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|BadRhino":{countryCodes:["gb","ie"],tags:{brand:"BadRhino","brand:wikidata":"Q84161924",clothes:"men",name:"BadRhino",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|Bepon":{countryCodes:["sk"],tags:{brand:"Bepon","brand:wikidata":"Q23766409","brand:wikipedia":"sk:Bepon",clothes:"underwear",name:"Bepon",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|Bimba y Lola":{matchNames:["bimba & lola"],tags:{brand:"Bimba y Lola","brand:wikidata":"Q54869493","brand:wikipedia":"es:Bimba y Lola",name:"Bimba y Lola",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|Bonne Gueule":{tags:{brand:"Bonne Gueule","brand:wikidata":"Q22248146","brand:wikipedia":"fr:BonneGueule",name:"Bonne Gueule",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|Bóboli":{countryCodes:["es"],tags:{brand:"Boboli","brand:wikidata":"Q39073733","brand:wikipedia":"ca:Bóboli",name:"Bóboli",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|Coccodrillo":{tags:{brand:"Coccodrillo",name:"Coccodrillo",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|Comptoir des Cotonniers":{tags:{brand:"Comptoir des Cotonniers",name:"Comptoir des Cotonniers",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|Darjeeling":{tags:{brand:"Darjeeling","brand:wikidata":"Q3016203","brand:wikipedia":"fr:Darjeeling (lingerie)",clothes:"underwear",name:"Darjeeling",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","brand:wikidata":"Q3040318","brand:wikipedia":"fr:Du Pareil au Même (entreprise)",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"],matchNames:["ジーユー"],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|Grain de Malice":{tags:{brand:"Grain de Malice","brand:wikidata":"Q66757157",name:"Grain de Malice",shop:"clothes",short_name:"GDM"}},"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|Honeys":{countryCodes:["jp"],tags:{brand:"Honeys","brand:en":"Honeys","brand:ja":"ハニーズ","brand:wikidata":"Q11326592","brand:wikipedia":"ja:ハニーズ",clothes:"women",name:"Honeys","name:en":"Honeys","name:ja":"ハニーズ",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|Jacadi":{tags:{brand:"Jacadi","brand:wikidata":"Q3157058","brand:wikipedia":"fr:Jacadi",clothes:"children",name:"Jacadi",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|Kookaï":{tags:{brand:"Kookaï","brand:wikidata":"Q1783759","brand:wikipedia":"fr:Kookaï",name:"Kookaï",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|Le Slip Français":{tags:{brand:"Le Slip Français","brand:wikidata":"Q14594793","brand:wikipedia":"fr:Le Slip Français",name:"Le Slip Français",shop:"clothes"}},"shop/clothes|Le Temps des Cerises":{tags:{brand:"Le Temps des Cerises","brand:wikidata":"Q3162640","brand:wikipedia":"fr:Le Temps des cerises (vêtements)",name:"Le Temps des Cerises",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|Maje":{tags:{brand:"Maje",name:"Maje",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|Milavitsa":{countryCodes:["be"],matchNames:["милавица","мілавіца"],tags:{brand:"Milavitsa","brand:be":"Мілавіца","brand:ru":"Милавица","brand:wikidata":"Q3575265","brand:wikipedia":"be:Мілавіца (кампанія)",clothes:"underwear",name:"Milavitsa","name:be":"Мілавіца","name:ru":"Милавица",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|Mise au Green":{tags:{brand:"Mise au Green","brand:wikidata":"Q3316239","brand:wikipedia":"fr:Mise au green",name:"Mise au Green",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|Morgan":{tags:{brand:"Morgan",name:"Morgan",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|Riu Paris":{tags:{brand:"Riu Paris","brand:wikidata":"Q16644311","brand:wikipedia":"fr:RIU Paris",clothers:"women",name:"Riu Paris",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":{countryCodes:["fr"],tags:{brand:"Sandro","brand:wikidata":"Q3472022","brand:wikipedia":"fr:Sandro (mode)",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|Tape à l'Œil":{tags:{brand:"Tape à l'Œil","brand:wikidata":"Q30749175","brand:wikipedia":"fr:Tape à l'œil",clothes:"children",name:"Tape à l'Œil",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|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|Vertbaudet":{tags:{brand:"Vertbaudet","brand:wikidata":"Q2518521","brand:wikipedia":"fr:Vertbaudet",clothes:"children",name:"Vertbaudet",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|WEGO":{countryCodes:["jp"],tags:{brand:"WEGO","brand:en":"WEGO","brand:ja":"ウィゴー","brand:wikidata":"Q17193890","brand:wikipedia":"ja:ウィゴー",clothes:"men;women",name:"WEGO","name:en":"WEGO","name:ja":"ウィゴー",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":{countryCodes:["de"],tags:{brand:"Wellensteyn","brand:wikidata":"Q62610375","brand:wikipedia":"de: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|Yours Clothing":{countryCodes:["de","gb","gg","ie"],tags:{brand:"Yours Clothing","brand:wikidata":"Q84163322",clothes:"women",name:"Yours Clothing",shop:"clothes"}},"shop/clothes|Z":{nomatch:["amenity/fuel|Z"],tags:{brand:"Z",clothes:"babies;children",name:"Z",shop:"clothes"}},"shop/clothes|Zadig & Voltaire":{tags:{brand:"Zadig & Voltaire","brand:wikidata":"Q3574548","brand:wikipedia":"fr:Zadig & Voltaire",name:"Zadig & Voltaire",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|niko and ...":{countryCodes:["jp"],matchNames:["ニコアンド"],tags:{brand:"niko and ...","brand:en":"niko and ...","brand:ja":"ニコアンド","brand:wikidata":"Q11236730","brand:wikipedia":"ja:niko and...",clothes:"men;women",name:"niko and ...","name:en":"niko and ...","name:ja":"ニコアンド",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|Сударь":{tags:{brand:"Сударь",name:"Сударь",shop:"clothes"}},"shop/clothes|しまむら":{countryCodes:["jp"],tags:{brand:"しまむら","brand:en":"Shimamura","brand:ja":"しまむら","brand:wikidata":"Q7758173","brand:wikipedia":"ja:しまむら",clothes:"women",name:"しまむら","name:en":"Shimamura","name:ja":"しまむら",official_name:"ファッションセンターしまむら","official_name:en":"Fashion Center Shimamura","official_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":"Avail","brand:ja":"アベイル","brand:wikidata":"Q11284759",name:"アベイル","name:en":"Avail","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|LDLC":{tags:{brand:"LDLC","brand:wikidata":"Q3117461","brand:wikipedia":"fr:Groupe LDLC",name:"LDLC",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/computer|アプライド":{countryCodes:["jp"],tags:{brand:"アプライド","brand:en":"Applied","brand:ja":"アプライド","brand:wikidata":"Q11284742","brand:wikipedia":"ja:アプライド",name:"アプライド","name:en":"Applied","name:ja":"アプライド",shop:"computer"}},"shop/computer|イオシス":{countryCodes:["jp"],tags:{brand:"イオシス","brand:en":"IOSYS","brand:ja":"イオシス","brand:wikidata":"Q17988651","brand:wikipedia":"ja:イオシス (株式会社)",name:"イオシス","name:en":"IOSYS","name:ja":"イオシス",shop:"computer"}},"shop/computer|ツクモ":{countryCodes:["jp"],tags:{brand:"ツクモ","brand:en":"TSUKUMO","brand:ja":"ツクモ","brand:wikidata":"Q29793996","brand:wikipedia":"ja:九十九電機",name:"ツクモ","name:en":"TSUKUMO","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/confectionery|銀座コージーコーナー":{countryCodes:["jp"],matchNames:["コージーコーナー"],tags:{brand:"銀座コージーコーナー","brand:en":"Ginza Cozy Corner","brand:ja":"銀座コージーコーナー","brand:wikidata":"Q11649983","brand:wikipedia":"ja:銀座コージーコーナー",name:"銀座コージーコーナー","name:en":"Ginza Cozy Corner","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|Avia":{tags:{brand:"Avia",name:"Avia",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|Bakmaz":{countryCodes:["hr"],tags:{brand:"Bakmaz","brand:wikidata":"Q65132948","brand:wikipedia":"hr:Bakmaz",name:"Bakmaz",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 Shop":{countryCodes:["fr"],nomatch:["amenity/fuel|Casino","shop/convenience|Le Petit Casino","shop/supermarket|Casino","shop/supermarket|Géant Casino"],tags:{brand:"Casino Shop","brand:wikidata":"Q89029601",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 Food":{countryCodes:["gb"],matchNames:["coop","cooperative food","the co-operative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op Food","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],tags:{brand:"Co-op Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"Co-op Food",shop:"convenience"}},"shop/convenience|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op Food","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op Food","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],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","brand:wikidata":"Q90020480",name:"CocciMarket",shop:"convenience"}},"shop/convenience|CocciMarket City":{countryCodes:["fr"],tags:{brand:"CocciMarket City","brand:wikidata":"Q90020481",name:"CocciMarket City",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|Conoco":{countryCodes:["us"],nomatch:["amenity/fuel|Conoco"],tags:{brand:"Conoco","brand:wikidata":"Q1126518","brand:wikipedia":"en:Conoco",name:"Conoco",shop:"convenience"}},"shop/convenience|Convenient Food Mart":{countryCodes:["us"],tags:{brand:"Convenient Food Mart","brand:wikidata":"Q5166143","brand:wikipedia":"en:Convenient Food Mart",name:"Convenient Food Mart",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/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],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|Diona":{countryCodes:["hr"],tags:{brand:"Diona",name:"Diona",shop:"convenience"}},"shop/convenience|Douka":{tags:{brand:"Douka",name:"Douka",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|Full":{tags:{brand:"Full",name:"Full",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|Gavranović":{countryCodes:["hr"],tags:{brand:"Gavranović",name:"Gavranović",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|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":{countryCodes:["th"],tags:{brand:"Jiffy","brand:wikidata":"Q16770436","brand:wikipedia":"th:จิฟฟี่",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"],nomatch:["amenity/fuel|Kwik Shop"],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|Le Petit Casino":{countryCodes:["fr"],matchNames:["petit casino"],nomatch:["amenity/fuel|Casino","shop/convenience|Casino Shop","shop/supermarket|Casino","shop/supermarket|Géant Casino"],tags:{brand:"Le Petit Casino","brand:wikidata":"Q89029249",name:"Le Petit Casino",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|Love's":{countryCodes:["us"],nomatch:["amenity/fuel|Love's"],tags:{brand:"Love's","brand:wikidata":"Q1872496","brand:wikipedia":"en:Love's Travel Stops & Country Stores",name:"Love's",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"],tags:{brand:"McColl's","brand:wikidata":"Q16997477","brand:wikipedia":"en:McColl's",name:"McColl's",shop:"convenience"}},"shop/convenience|Mercator":{countryCodes:["ba","hr","me","mk","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|Milk-Agro":{countryCodes:["sk"],nomatch:["shop/supermarket|Milk-Agro"],tags:{brand:"Milk-Agro","brand:wikidata":"Q64173785",name:"Milk-Agro",shop:"convenience"}},"shop/convenience|Mini Mix":{countryCodes:["at","be","cy","cz","de","es","fr","gb","gr","it","me","nl","pt"],matchNames:["mini mix markt"],matchTags:["shop/supermarket"],nomatch:["shop/supermarket|Mix Markt"],tags:{brand:"Mini Mix","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mini Mix",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|Monop'":{countryCodes:["fr"],tags:{brand:"Monop'","brand:wikidata":"Q89913683",name:"Monop'",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|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|Rotten Robbie":{countryCodes:["us"],tags:{brand:"Rotten Robbie","brand:wikidata":"Q87378070",name:"Rotten Robbie",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":{countryCodes:["hr"],tags:{brand:"Studenac","brand:wikidata":"Q65156084","brand:wikipedia":"hr: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|Słoneczko":{countryCodes:["pl"],tags:{brand:"Słoneczko",name:"Słoneczko",shop:"convenience"}},"shop/convenience|TA":{countryCodes:["us"],nomatch:["amenity/fuel|TA"],tags:{brand:"TA","brand:wikidata":"Q7835892","brand:wikipedia":"en:TravelCenters of America",name:"TA",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|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|Tommy":{countryCodes:["hr"],tags:{brand:"Tommy","brand:wikidata":"Q12643718","brand:wikipedia":"hr:Tommy",name:"Tommy",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|Trgocentar":{countryCodes:["hr"],tags:{brand:"Trgocentar",name:"Trgocentar",shop:"convenience"}},"shop/convenience|Trgostil":{countryCodes:["hr"],tags:{brand:"Trgostil",name:"Trgostil",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|Votre Marché":{tags:{brand:"Votre Marché",name:"Votre Marché",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|alimentation generale":{tags:{brand:"alimentation generale",name:"alimentation generale",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|Épi Service":{tags:{brand:"Épi Service",name:"Épi Service",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","name:ru":"Евроопт Маркет",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|Руслан":{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|Фермер":{tags:{brand:"Фермер",name:"Фермер",shop:"convenience"}},"shop/convenience|Ярче":{countryCodes:["ru"],tags:{brand:"Ярче",name:"Ярче",shop:"convenience"}},"shop/convenience|จิฟฟี่":{countryCodes:["th"],tags:{brand:"จิฟฟี่","brand:en":"Jiffy","brand:th":"จิฟฟี่","brand:wikidata":"Q16770436","brand:wikipedia":"th:จิฟฟี่",name:"จิฟฟี่","name:en":"Jiffy","name:th":"จิฟฟี่",shop:"convenience"}},"shop/convenience|アンスリー":{countryCodes:["jp"],tags:{"alt_name:en":"Ansuri",brand:"アンスリー","brand:en":"an3","brand:ja":"アンスリー","brand:wikidata":"Q17192555","brand:wikipedia":"ja:アンスリー",name:"アンスリー","name:en":"An3","name:ja":"アンスリー",shop:"convenience"}},"shop/convenience|コミュニティ・ストア":{countryCodes:["jp"],tags:{brand:"コミュニティ・ストア","brand:en":"Community Store","brand:ja":"コミュニティ・ストア","brand:wikidata":"Q11302585","brand:wikipedia":"ja:コミュニティ・ストア",name:"コミュニティ・ストア","name:en":"Community Store","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"],matchNames:["デイリーストア"],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"],matchNames:["ファミマ"],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":"미니스톱","brand:wikidata":"Q1038929","brand:wikipedia":"en:Ministop",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|FaxCopy":{countryCodes:["sk"],tags:{brand:"FaxCopy","brand:wikidata":"Q90990574",name:"FaxCopy",shop:"copyshop"}},"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|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|Копирка":{countryCodes:["by","ru"],tags:{brand:"Копирка",name:"Копирка",shop:"copyshop"}},"shop/copyshop|アクセア":{countryCodes:["jp"],tags:{brand:"アクセア","brand:en":"Accea","brand:ja":"アクセア","brand:wikidata":"Q90043156",name:"アクセア","name:en":"Accea","name:ja":"アクセア",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|Stock+Field":{countryCodes:["us"],tags:{brand:"Stock+Field","brand:wikidata":"Q84572995",name:"Stock+Field",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/dairy|Veronika":{countryCodes:["hr"],tags:{brand:"Veronika","brand:wikidata":"Q87399724",name:"Veronika",shop:"dairy"}},"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|Elektra":{tags:{brand:"Elektra",name:"Elektra",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|dd's Discounts":{countryCodes:["us"],matchNames:["dd's"],matchTags:["shop/variety_store"],tags:{brand:"dd's Discounts","brand:wikidata":"Q83743863",name:"dd's Discounts",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"],matchNames:["良品計画"],tags:{brand:"無印良品","brand:en":"Muji","brand:ja":"無印良品","brand:wikidata":"Q708789","brand:wikipedia":"ja:無印良品",name:"無印良品","name:en":"Muji","name:ja":"無印良品","official_name:en":"Ryohin Keikaku",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":{countryCodes:["no","pl","se"],tags:{brand:"Jula","brand:wikidata":"Q10541151","brand:wikipedia":"sv:Jula (företag)",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":{countryCodes:["fr"],tags:{brand:"Lapeyre","brand:wikidata":"Q3117467","brand:wikipedia":"fr:Groupe 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|PSB Mrówka":{tags:{brand:"PSB Mrówka",name:"PSB Mrówka",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|SUPER VIVA Home":{countryCodes:["jp"],tags:{brand:"VIVA Home","brand:en":"VIVA Home","brand:ja":"ビバホーム","brand:wikidata":"Q11229278","brand:wikipedia":"ja:LIXILビバ",name:"SUPER VIVA Home","name:en":"SUPER VIVA Home","name:ja":"スーパービバホーム",shop:"doityourself","short_name:en":"SVH"}},"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|VIVA Home":{countryCodes:["jp"],tags:{brand:"VIVA Home","brand:en":"VIVA Home","brand:ja":"ビバホーム","brand:wikidata":"Q11229278","brand:wikipedia":"ja:LIXILビバ",name:"VIVA Home","name:en":"VIVA Home","name:ja":"ビバホーム",shop:"doityourself","short_name:en":"VH"}},"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":"Amano","brand:ja":"アマノ","brand:wikidata":"Q11284890","brand:wikipedia":"ja:アマノ",name:"アマノ","name:en":"Amano","name:ja":"アマノ",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:ja":"ケーヨーデイツー",name:"ケーヨーデイツー","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":"Dia Cleaning","brand:ja":"ダイヤクリーニング","brand:wikidata":"Q11316968","brand:wikipedia":"ja:ダイヤクリーニング",name:"ダイヤクリーニング","name:en":"Dia Cleaning","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":"Pony","brand:ja":"ポニー","brand:wikidata":"Q88012241",name:"ポニー","name:en":"Pony","name:ja":"ポニー",official_name:"ポニークリーニング","official_name:en":"Pony Cleaning","official_name:ja":"ポニークリーニング",shop:"dry_cleaning"}},"shop/dry_cleaning|ヤングドライ":{countryCodes:["jp"],tags:{brand:"ヤングドライ","brand:en":"Young Dry","brand:ja":"ヤングドライ","brand:wikidata":"Q11345434","brand:wikipedia":"ja:ヤングドライ",name:"ヤングドライ","name:en":"Young Dry","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|E-Cigarette Direct":{countryCodes:["gb"],tags:{brand:"E-Cigarette Direct","brand:wikidata":"Q84703237",name:"E-Cigarette Direct",shop:"e-cigarette"}},"shop/e-cigarette|E-Dym":{tags:{brand:"E-Dym",name:"E-Dym",shop:"e-cigarette"}},"shop/e-cigarette|Vardex":{countryCodes:["ru"],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|100満ボルト":{countryCodes:["jp"],tags:{brand:"100満ボルト","brand:en":"100mv","brand:ja":"100満ボルト","brand:wikidata":"Q11305504","brand:wikipedia":"ja:サンキュー (小売)",name:"100満ボルト","name:en":"100mv","name:ja":"100満ボルト",shop:"electronics"}},"shop/electronics|ABC Warehouse":{countryCodes:["us"],tags:{brand:"ABC Warehouse","brand:wikidata":"Q4650261","brand:wikipedia":"en:ABC Warehouse",name:"ABC Warehouse",shop:"electronics"}},"shop/electronics|Altex":{tags:{brand:"Altex",name:"Altex",shop:"electronics"}},"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|Bing Lee":{countryCodes:["au"],tags:{brand:"Bing Lee","brand:wikidata":"Q4914136","brand:wikipedia":"en:Bing Lee",name:"Bing Lee",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|Datart":{countryCodes:["cz","sk"],tags:{brand:"Datart","brand:wikidata":"Q11774311","brand:wikipedia":"cs:Datart",name:"Datart",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|Gitem":{tags:{brand:"Gitem",name:"Gitem",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|M.Видео":{tags:{brand:"M.Видео",name:"M.Видео",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|Nay":{countryCodes:["sk"],tags:{brand:"Nay","brand:wikidata":"Q13537421","brand:wikipedia":"sk:Nay",name:"Nay",shop:"electronics"}},"shop/electronics|Neonet":{countryCodes:["pl"],tags:{brand:"Neonet","brand:wikidata":"Q11790622","brand:wikipedia":"pl:Neonet",name:"Neonet",shop:"electronics"}},"shop/electronics|Okay":{countryCodes:["cz","sk"],nomatch:["shop/supermarket|Okay"],tags:{brand:"Okay","brand:wikidata":"Q17583128","brand:wikipedia":"sk:OKAY",name:"Okay",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"],matchNames:["デオデオ"],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"],matchTags:["shop/appliance"],tags:{brand:"ベスト電器","brand:en":"Best Denki","brand:ja":"ベスト電器","brand:wikidata":"Q1096390","brand:wikipedia":"ja:ベスト電器",name:"ベスト電器","name:en":"Best Denki","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|Mulberry":{countryCodes:["ae","au","ca","ch","cn","de","dk","fi","gb","ie","jp","kr","my","nl","no","se","sg","th","us"],tags:{brand:"Mulberry","brand:wikidata":"Q3866987","brand:wikipedia":"en:Mulberry (company)",name:"Mulberry",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/florist|青山フラワーマーケット":{countryCodes:["jp"],tags:{brand:"青山フラワーマーケット","brand:en":"Aoyama Flower Market","brand:ja":"青山フラワーマーケット","brand:wikidata":"Q87743579",name:"青山フラワーマーケット","name:en":"Aoyama Flower Market","name:ja":"青山フラワーマーケット",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|Bellona":{tags:{brand:"Bellona",name:"Bellona",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:"Много мебели","brand:wikidata":"Q18404893","brand:wikipedia":"ru:Много мебели",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/furniture|フランフラン":{countryCodes:["jp"],tags:{brand:"フランフラン","brand:en":"Francfranc","brand:ja":"フランフラン","brand:wikidata":"Q5479732","brand:wikipedia":"ja:Francfranc",name:"フランフラン","name:en":"Francfranc","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|Botanic":{tags:{brand:"Botanic",name:"Botanic",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|Magasin Vert":{tags:{brand:"Magasin Vert",name:"Magasin Vert",shop:"garden_centre"}},"shop/garden_centre|Mountfield":{countryCodes:["cz","sk"],tags:{brand:"Mountfield","brand:wikidata":"Q21180783","brand:wikipedia":"cs:Mountfield",name:"Mountfield",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|Villaverde":{countryCodes:["fr"],tags:{brand:"Villaverde","brand:wikidata":"Q89346546",name:"Villaverde",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|Harry & David":{countryCodes:["us"],tags:{brand:"Harry & David","brand:wikidata":"Q16983369","brand:wikipedia":"en:Harry & David",name:"Harry & David",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|Scribbler":{countryCodes:["gb"],tags:{brand:"Scribbler","brand:wikidata":"Q28457455","brand:wikipedia":"en:Scribbler (card shop)",name:"Scribbler",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|Celly's":{countryCodes:["gb"],tags:{brand:"Celly's","brand:wikidata":"Q86837698",name:"Celly's",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|Ferber":{countryCodes:["lu"],tags:{brand:"Ferber","brand:wikidata":"Q88180887",name:"Ferber",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|Franck Provost":{countryCodes:["be","fr","lu","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|Igorance":{countryCodes:["lu"],tags:{brand:"Igorance","brand:wikidata":"Q88181481",name:"Igorance",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|QBハウス":{countryCodes:["jp"],matchNames:["qb","キュービーハウス"],tags:{brand:"QBハウス","brand:en":"QB HOUSE","brand:ja":"QBハウス","brand:wikidata":"Q11297528","brand:wikipedia":"ja:キュービーネット",name:"QBハウス","name:en":"QB HOUSE","name:ja":"QBハウス",shop:"hairdresser"}},"shop/hairdresser|Ryanhair":{countryCodes:["lu"],tags:{brand:"Ryanhair","brand:wikidata":"Q88180487",name:"Ryanhair",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":{countryCodes:["de"],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|Имидж":{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/hairdresser|カットコムズ":{countryCodes:["jp"],tags:{brand:"カットコムズ","brand:en":"Cutcomz","brand:ja":"カットコムズ","brand:wikidata":"Q91104902",name:"カットコムズ","name:en":"Cutcomz","name:ja":"カットコムズ",shop:"hairdresser"}},"shop/hairdresser|カットファクトリー":{countryCodes:["jp"],tags:{brand:"カットファクトリー","brand:en":"Cut Factory","brand:ja":"カットファクトリー","brand:wikidata":"Q91102312",name:"カットファクトリー","name:en":"Cut Factory","name:ja":"カットファクトリー",shop:"hairdresser"}},"shop/hairdresser|ファミリーカット1000":{countryCodes:["jp"],matchNames:["ファミリーカット"],tags:{brand:"ファミリーカット1000","brand:en":"Family Cut 1000","brand:ja":"ファミリーカット1000","brand:wikidata":"Q91108482",name:"ファミリーカット1000","name:en":"Family Cut 1000","name:ja":"ファミリーカット1000",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|Proper Job":{countryCodes:["gb"],tags:{brand:"Proper Job","brand:wikidata":"Q83741810",name:"Proper Job",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|Хозмаг":{tags:{brand:"Хозмаг",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|Grape Tree":{countryCodes:["gb"],tags:{brand:"Grape Tree","brand:wikidata":"Q87071497",name:"Grape Tree",shop:"health_food"}},"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/hearing_aids|Vitakustik":{countryCodes:["de"],tags:{brand:"Vitakustik","brand:wikidata":"Q87123390",name:"Vitakustik",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/hobby|イエロー・サブマリン":{countryCodes:["jp"],tags:{brand:"イエロー・サブマリン","brand:en":"Yellow Submarine","brand:ja":"イエロー・サブマリン","brand:wikidata":"Q11668496","brand:wikipedia":"ja:ホビーベースイエローサブマリン",name:"イエロー・サブマリン","name:en":"Yellow Submarine","name:ja":"イエロー・サブマリン",shop:"hobby"}},"shop/hobby|ジャンプショップ":{countryCodes:["jp"],matchNames:["ジャンプ"],tags:{brand:"ジャンプショップ","brand:en":"Jump Shop","brand:ja":"ジャンプショップ","brand:wikidata":"Q11310200","brand:wikipedia":"ja:ジャンプショップ",name:"ジャンプショップ","name:en":"Jump Shop","name:ja":"ジャンプショップ",shop:"hobby"}},"shop/hobby|ポケモンセンター":{countryCodes:["jp"],tags:{brand:"ポケモンセンター","brand:en":"Pokémon Center","brand:ja":"ポケモンセンター","brand:wikidata":"Q89673816",name:"ポケモンセンター","name:en":"Pokémon Center","name:ja":"ポケモンセンター",shop:"hobby"}},"shop/hobby|駿河屋":{countryCodes:["jp"],tags:{brand:"駿河屋","brand:en":"Surugaya","brand:ja":"駿河屋","brand:wikidata":"Q88485610",name:"駿河屋","name:en":"Surugaya","name:ja":"駿河屋",shop:"hobby"}},"shop/household_linen|Carré Blanc":{tags:{brand:"Carré Blanc","brand:wikidata":"Q55596025","brand:wikipedia":"fr:Carré blanc (entreprise)",name:"Carré Blanc",shop:"household_linen"}},"shop/household_linen|Descamps":{tags:{brand:"Descamps","brand:wikidata":"Q91002058",name:"Descamps",shop:"household_linen"}},"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|KODi":{countryCodes:["de"],tags:{brand:"KODi","brand:wikidata":"Q1778216","brand:wikipedia":"de:Kodi (Unternehmen)",name:"KODi",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|Habitat~(UK)":{countryCodes:["gb"],matchTags:["shop/department_store","shop/furniture"],tags:{brand:"Habitat","brand:wikidata":"Q87145455","brand:wikipedia":"en:Habitat (retailer)",name:"Habitat",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","brand:wikidata":"Q3114054","brand:wikipedia":"en: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|Beaverbrooks":{countryCodes:["gb"],tags:{brand:"Beaverbrooks","brand:wikidata":"Q4878226","brand:wikipedia":"en:Beaverbrooks",name:"Beaverbrooks",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|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|Ziko":{tags:{brand:"Ziko",name:"Ziko",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/jewelry|ツツミ":{countryCodes:["jp"],tags:{brand:"ツツミ","brand:en":"Tsutsumi","brand:ja":"ツツミ","brand:wikidata":"Q11318759","brand:wikipedia":"ja:ツツミ",name:"ツツミ","name:en":"Tsutsumi","name:ja":"ツツミ",official_name:"ジュエリーツツミ","official_name:en":"Jewelry Tsutsumi","official_name:ja":"ジュエリーツツミ",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|Dream Doors":{countryCodes:["gb"],tags:{brand:"Dream Doors","brand:wikidata":"Q84702301",name:"Dream Doors",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/lottery|宝くじ":{countryCodes:["jp"],matchNames:["lotoロト","lottery of japan","takarakuji","‎japan loto"],tags:{brand:"宝くじ","brand:en":"Takarakuji","brand:ja":"宝くじ","brand:wikidata":"Q87824893","brand:wikipedia":"ja:宝くじ",name:"宝くじ","name:en":"Takarakuji","name:ja":"宝くじ",official_name:"全国自治宝くじ","official_name:en":"National Autonomous Lottery","official_name:ja":"全国自治宝くじ",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/massage|カラダファクトリー":{countryCodes:["jp"],tags:{brand:"カラダファクトリー","brand:en":"Karada Factory","brand:ja":"カラダファクトリー","brand:wikidata":"Q87833239",name:"カラダファクトリー","name:en":"Karada Factory","name:ja":"カラダファクトリー",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|МИБС":{tags:{brand:"МИБС",name:"МИБС",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":"Teluru","brand:ja":"テルル","brand:wikidata":"Q91111384",name:"テルル","name:en":"Teluru","name:ja":"テルル",shop:"mobile_phone"}},"shop/mobile_phone|ドコモショップ":{countryCodes:["jp"],matchNames:["nttドコモ","docomo"],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:["yahooモバイル","ymobile"],tags:{brand:"ワイモバイル","brand:en":"Y!mobile","brand:ja":"ワイモバイル","brand:wikidata":"Q5322556","brand:wikipedia":"ja:ワイモバイル",name:"ワイモバイル","name:en":"Y!mobile","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/money_lender|プロミス":{countryCodes:["jp"],tags:{brand:"プロミス","brand:en":"Promise","brand:ja":"プロミス","brand:wikidata":"Q11243682","brand:wikipedia":"ja:SMBCコンシューマーファイナンス",name:"プロミス","name:en":"Promise","name:ja":"プロミス",official_name:"SMBCコンシューマーファイナンス","official_name:en":"SMBC Consumer Finance",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/musical_instrument|山野楽器":{countryCodes:["jp"],tags:{brand:"山野楽器","brand:en":"Yamano Music","brand:ja":"山野楽器","brand:wikidata":"Q11471074","brand:wikipedia":"ja:山野楽器",name:"山野楽器","name:en":"Yamano Music","name:ja":"山野楽器",shop:"musical_instrument"}},"shop/newsagent|Cigo":{countryCodes:["de","nl"],tags:{brand:"Cigo","brand:wikidata":"Q62391977",name:"Cigo",shop:"newsagent"}},"shop/newsagent|Hudson":{matchNames:["hudson news"],tags:{brand:"Hudson","brand:wikidata":"Q5928682","brand:wikipedia":"en:Hudson Group",name:"Hudson",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|Mag Presse":{tags:{brand:"Mag Presse",name:"Mag Presse",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":"Asahi Shimbun","brand:wikidata":"Q720503","brand:wikipedia":"ja:朝日新聞",name:"朝日新聞","name:en":"Asahi Shimbun",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"],matchNames:["opticiens mutualistes"],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|Lynx Optique":{countryCodes:["fr"],tags:{brand:"Lynx Optique","brand:wikidata":"Q25387428","brand:wikipedia":"fr:Lynx Optique",name:"Lynx Optique",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|Solaris":{countryCodes:["fr"],tags:{brand:"Solaris","brand:wikidata":"Q3489229","brand:wikipedia":"fr:Solaris (magasin)",name:"Solaris",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|Vision Plus":{countryCodes:["fr"],tags:{brand:"Vision Plus","brand:wikidata":"Q23752663",name:"Vision Plus",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:en":"JINS","brand:ja":"ジンズ","brand:wikidata":"Q11308974","brand:wikipedia":"ja:ジンズ",name:"ジンズ","name:en":"JINS","name:ja":"ジンズ",shop:"optician"}},"shop/optician|ゾフ":{countryCodes:["jp"],tags:{brand:"ゾフ","brand:en":"Zoff","brand:ja":"ゾフ","brand:wikidata":"Q11255932","brand:wikipedia":"ja:Zoff",name:"ゾフ","name:en":"Zoff","name:ja":"ゾフ",shop:"optician"}},"shop/optician|メガネの三城":{countryCodes:["jp"],tags:{"alt_name:en":"Megane no Miki",brand:"メガネの三城","brand:ja":"メガネの三城","brand:wikidata":"Q11354808","brand:wikipedia":"jp:三城ホールディングス",name:"メガネの三城","name:en":"Paris Miki","name:ja":"メガネの三城",shop:"optician"}},"shop/optician|メガネストアー":{countryCodes:["jp"],tags:{brand:"メガネストアー","brand:ja":"メガネストアー","brand:wikidata":"Q11343503","brand:wikipedia":"jp:メガネストアー",name:"メガネストアー","name:en":"Megane Store","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|BCF":{tags:{brand:"BCF",name:"BCF",shop:"outdoor"}},"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|Macpac":{countryCodes:["au","nz"],tags:{brand:"Macpac","brand:wikidata":"Q6724943","brand:wikipedia":"en:Macpac",name:"Macpac",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|Dulux Paints":{tags:{brand:"Dulux Paints",name:"Dulux Paints",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"],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|M Lhuillier":{countryCodes:["ph"],tags:{brand:"M Lhuillier","brand:wikidata":"Q83434356",name:"M Lhuillier",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|Animalis":{countryCodes:["fr"],tags:{brand:"Animalis","brand:wikidata":"Q2850015",name:"Animalis",shop:"pet"}},"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|Jollyes":{countryCodes:["gb"],tags:{brand:"Jollyes","brand:wikidata":"Q45844955",name:"Jollyes",shop:"pet"}},"shop/pet|Jumper":{countryCodes:["nl"],tags:{brand:"Jumper","brand:wikidata":"Q87338743",name:"Jumper",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|Médor et Compagnie":{countryCodes:["fr"],tags:{brand:"Médor et Compagnie","brand:wikidata":"Q89344773",name:"Médor et Compagnie",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 Corner":{countryCodes:["gb"],tags:{brand:"Pets Corner","brand:wikidata":"Q17018476","brand:wikipedia":"en:Pets Corner",name:"Pets Corner",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|Snappy Snaps":{countryCodes:["gb"],tags:{brand:"Snappy Snaps","brand:wikidata":"Q7547351","brand:wikipedia":"en:Snappy Snaps",name:"Snappy Snaps",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/photo|コイデカメラ":{countryCodes:["jp"],tags:{brand:"コイデカメラ","brand:en":"Koide Camera","brand:ja":"コイデカメラ","brand:wikidata":"Q11301829","brand:wikipedia":"ja:コイデカメラ",name:"コイデカメラ","name:en":"Koide Camera","name:ja":"コイデカメラ",shop:"photo"}},"shop/photo|パレットプラザ":{countryCodes:["jp"],tags:{brand:"パレットプラザ","brand:en":"Palette Plaza","brand:ja":"パレットプラザ","brand:wikidata":"Q11335403","brand:wikipedia":"ja:プラザクリエイト",name:"パレットプラザ","name:en":"Palette Plaza","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/second_hand|セカンドストリート":{countryCodes:["jp"],tags:{brand:"セカンドストリート","brand:en":"2nd STREET","brand:ja":"セカンドストリート","brand:wikidata":"Q11314186","brand:wikipedia":"ja:セカンドストリート",name:"セカンドストリート","name:en":"2nd STREET","name:ja":"セカンドストリート",shop:"second_hand"}},"shop/second_hand|トレジャー・ファクトリー":{countryCodes:["jp"],tags:{brand:"トレジャー・ファクトリー","brand:en":"Treasure Factory","brand:ja":"トレジャー・ファクトリー","brand:wikidata":"Q11322108","brand:wikipedia":"ja:トレジャー・ファクトリー",name:"トレジャー・ファクトリー","name:en":"Treasure Factory","name:ja":"トレジャー・ファクトリー",shop:"second_hand"}},"shop/second_hand|ハードオフ":{countryCodes:["jp"],tags:{brand:"ハードオフ","brand:en":"Hard Off","brand:ja":"ハードオフ","brand:wikidata":"Q11327274","brand:wikipedia":"ja:ハードオフコーポレーション",name:"ハードオフ","name:en":"Hard Off","name:ja":"ハードオフ",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~(Bolivia)":{countryCodes:["bo"],nomatch:["shop/shoes|Bata~(Czech Republic)"],tags:{brand:"Bata","brand:wikidata":"Q81965517",name:"Bata",shop:"shoes"}},"shop/shoes|Bata~(Czech Republic)":{countryCodes:["cz"],nomatch:["shop/shoes|Bata~(Bolivia)"],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","brand:wikidata":"Q4081686","brand:wikipedia":"ru:Белвест",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|Bocage":{tags:{brand:"Bocage",name:"Bocage",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|Manaco":{countryCodes:["bo"],matchNames:["calzados manaco"],tags:{brand:"Manaco","brand:wikidata":"Q81964197",name:"Manaco",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","brand:wikidata":"Q7500015","brand:wikipedia":"en: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|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:"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|Vögele Shoes":{tags:{brand:"Vögele Shoes",name:"Vögele Shoes",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|Wojas":{tags:{brand:"Wojas",name:"Wojas",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/spices|Penzeys Spices":{countryCodes:["us"],matchNames:["penzeys"],tags:{brand:"Penzeys Spices","brand:wikidata":"Q7165435","brand:wikipedia":"en:Penzeys Spices",name:"Penzeys Spices",shop:"spices"}},"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|GO Sport":{countryCodes:["fr"],tags:{brand:"GO Sport","brand:wikidata":"Q48746237","brand:wikipedia":"fr:GO Sport",name:"GO Sport",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/sports|ゴルフパートナー":{countryCodes:["jp"],tags:{brand:"ゴルフパートナー","brand:en":"Golf Partner","brand:ja":"ゴルフパートナー","brand:wikidata":"Q11303729","brand:wikipedia":"ja:ゴルフパートナー",name:"ゴルフパートナー","name:en":"Golf Partner","name:ja":"ゴルフパートナー",shop:"sports",sport:"golf"}},"shop/sports|ゴルフ・ドゥ":{countryCodes:["jp"],tags:{brand:"ゴルフ・ドゥ","brand:en":"Golf・Do","brand:ja":"ゴルフ・ドゥ","brand:wikidata":"Q11303734","brand:wikipedia":"ja:ゴルフ・ドゥ",name:"ゴルフ・ドゥ","name:en":"Golf・Do","name:ja":"ゴルフ・ドゥ",shop:"sports",sport:"golf"}},"shop/sports|スポーツオーソリティ":{countryCodes:["jp"],tags:{brand:"スポーツオーソリティ","brand:en":"Sports Authority","brand:ja":"スポーツオーソリティ","brand:wikidata":"Q7579688","brand:wikipedia":"ja:スポーツオーソリティ",name:"スポーツオーソリティ","name:en":"Sports Authority","name:ja":"スポーツオーソリティ",shop:"sports"}},"shop/sports|スポーツデポ":{countryCodes:["jp"],matchNames:["スポーツdepo"],tags:{brand:"スポーツデポ","brand:en":"Sports Depo","brand:ja":"スポーツデポ","brand:wikidata":"Q11313050","brand:wikipedia":"ja:スポーツDEPO",name:"スポーツデポ","name:en":"Sports Depo","name:ja":"スポーツデポ",shop:"sports"}},"shop/sports|スーパースポーツゼビオ":{countryCodes:["jp"],matchNames:["ゼビオ"],tags:{brand:"スーパースポーツゼビオ","brand:en":"Super Sports Xebio","brand:ja":"スーパースポーツゼビオ","brand:wikidata":"Q3108542","brand:wikipedia":"ja:ゼビオホールディングス",name:"スーパースポーツゼビオ","name:en":"Super Sports Xebio","name:ja":"スーパースポーツゼビオ",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|Koh-i-Noor":{countryCodes:["cz","sk"],tags:{brand:"Koh-i-Noor","brand:wikidata":"Q698032","brand:wikipedia":"en:Koh-i-Noor Hardtmuth",name:"Koh-i-Noor",official_name:"Koh-i-Noor Hardtmuth",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|Ševt":{countryCodes:["sk"],tags:{brand:"Ševt","brand:wikidata":"Q15980348","brand:wikipedia":"sk:ŠEVT",name:"Ševt",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/storage_rental|UK Storage Company":{countryCodes:["gb"],tags:{brand:"UK Storage Company","brand:wikidata":"Q87411468",name:"UK Storage Company",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|Alvo":{countryCodes:["be","lu"],tags:{brand:"Alvo","brand:wikidata":"Q16068936","brand:wikipedia":"nl:Alvo (supermarkt)",name:"Alvo",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","brand:wikidata":"Q63148677","brand:wikipedia":"de:Tiendas 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":{countryCodes:["br"],tags:{brand:"Assaí Atacadista","brand:wikidata":"Q28679415","brand:wikipedia":"pt: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","brand:wikidata":"Q2870659","brand:wikipedia":"fr: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":{countryCodes:["al"],tags:{brand:"Big Market","brand:wikidata":"Q28135235","brand:wikipedia":"sq: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|BonArea":{countryCodes:["es"],tags:{brand:"Bon Area","brand:wikidata":"Q11924743","brand:wikipedia":"ca:Grup Alimentari Guissona",name:"Bon Area",shop:"supermarket"}},"shop/supermarket|Bonpreu":{countryCodes:["es"],tags:{brand:"Bonpreu","brand:wikidata":"Q11924747","brand:wikipedia":"ca:Grup Bon Preu",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":{countryCodes:["fr"],nomatch:["amenity/fuel|Casino","shop/convenience|Casino Shop","shop/convenience|Le Petit Casino","shop/supermarket|Géant Casino"],tags:{brand:"Casino","brand:wikidata":"Q89029184",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|Choppies":{tags:{brand:"Choppies",name:"Choppies",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 Food":{countryCodes:["gb"],matchNames:["coop","cooperative food","the co-operative food","the cooperative"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op Food","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op~(Canada)","shop/supermarket|Coop~(Schweiz)"],tags:{brand:"Co-op Food","brand:wikidata":"Q3277439","brand:wikipedia":"en:Co-op Food",name:"Co-op Food",shop:"supermarket"}},"shop/supermarket|Co-op~(Canada)":{countryCodes:["ca"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op Food","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op Food","shop/supermarket|Coop~(Schweiz)"],tags:{brand:"Federated Co-operatives","brand:wikidata":"Q5440676","brand:wikipedia":"en:Federated Co-operatives",name:"Co-op",shop:"supermarket"}},"shop/supermarket|Coccinelle Express":{countryCodes:["fr"],tags:{brand:"Coccinelle Express","brand:wikidata":"Q90020479",name:"Coccinelle Express",shop:"supermarket"}},"shop/supermarket|Coccinelle Supermarché":{countryCodes:["fr"],tags:{brand:"Coccinelle Supermarché","brand:wikidata":"Q90020459",name:"Coccinelle Supermarché",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|Conad Superstore":{tags:{brand:"Conad Superstore",name:"Conad Superstore",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 Eesti":{countryCodes:["ee"],tags:{brand:"Coop Eesti","brand:wikidata":"Q12361460","brand:wikipedia":"ee:Coop Eesti",name:"Coop",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|Cooperativa Obrera":{tags:{brand:"Cooperativa Obrera",name:"Cooperativa Obrera",shop:"supermarket"}},"shop/supermarket|Coop~(Schweiz)":{countryCodes:["ch"],nomatch:["amenity/fuel|Co-op~(Canada)","shop/convenience|Co-op Food","shop/convenience|Co-op~(Canada)","shop/convenience|Coop~(Schweiz)","shop/supermarket|Co-op Food","shop/supermarket|Co-op~(Canada)"],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|Côté Nature":{countryCodes:["fr"],tags:{brand:"Côté Nature","brand:wikidata":"Q90016283",name:"Côté Nature",organic:"only",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"],matchNames:["leclerc drive"],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":{countryCodes:["sk"],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"],nomatch:["amenity/fuel|Casino","shop/convenience|Casino Shop","shop/convenience|Le Petit Casino","shop/supermarket|Casino"],tags:{brand:"Géant Casino","brand:wikidata":"Q1380537",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|Hipermaxi":{countryCodes:["bo"],tags:{brand:"Hipermaxi","brand:wikidata":"Q81968262",name:"Hipermaxi",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","brand:wikidata":"Q58196374",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|IC Norte":{countryCodes:["bo"],tags:{brand:"IC Norte","brand:wikidata":"Q81967653",name:"IC Norte",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"],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"],nomatch:["amenity/fast_food|Jack's"],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|Ketal":{countryCodes:["bo"],tags:{brand:"Ketal","brand:wikidata":"Q81967299",name:"Ketal",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 Sirena":{countryCodes:["es"],tags:{brand:"La Sirena","brand:wikidata":"Q21034458","brand:wikipedia":"ca:La Sirena",name:"La Sirena",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|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|MEGAドン・キホーテ":{countryCodes:["jp"],matchNames:["メガ・ドン・キホーテ"],matchTags:["amenity/general","amenity/retail","amenity/variety_store"],nomatch:["amenity/variety_store|ドン・キホーテ"],tags:{brand:"ドン・キホーテ","brand:en":"Don Quijote","brand:ja":"ドン・キホーテ","brand:wikidata":"Q1185381","brand:wikipedia":"ja:ドン・キホーテ (企業)",name:"MEGAドン・キホーテ","name:en":"MEGA Don Quijote","name:ja":"MEGAドン・キホーテ",opening_hours:"24/7",shop:"supermarket",short_name:"MEGAドンキ","short_name:en":"MegaDonki","short_name:ja":"MEGAドンキ"}},"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|Milk-Agro":{countryCodes:["sk"],nomatch:["shop/convenience|Milk-Agro"],tags:{brand:"Milk-Agro","brand:wikidata":"Q64173785",name:"Milk-Agro",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:["at","be","cy","cz","de","es","fr","gb","gr","it","me","nl","pt"],matchTags:["shop/convenience"],nomatch:["shop/convenience|Mini Mix"],tags:{brand:"Mix Markt","brand:wikidata":"Q327854","brand:wikipedia":"de:Mix Markt",name:"Mix Markt",shop:"supermarket"}},"shop/supermarket|Monoprix":{countryCodes:["ad","fr","tn"],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|My market":{tags:{brand:"My market",name:"My market",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","brand:wikidata":"Q6955519","brand:wikipedia":"en: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 Seasons Market":{countryCodes:["us"],matchNames:["new seasons"],tags:{brand:"New Seasons Market","brand:wikidata":"Q7011463","brand:wikipedia":"en:New Seasons Market",name:"New Seasons Market",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"],nomatch:["shop/electronics|Okay"],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":"Q3741108","brand:wikipedia":"en:Rimi Baltic",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|Selver":{countryCodes:["ee"],tags:{brand:"Selver","brand:wikidata":"Q3771177","brand:wikipedia":"en:Selver",name:"Selver",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|Smatch":{countryCodes:["be","lu"],tags:{brand:"Smatch","brand:wikidata":"Q5185959","brand:wikipedia":"fr:Smatch",name:"Smatch",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|Sorli Discau":{countryCodes:["es"],tags:{brand:"Sorli Discau","brand:wikidata":"Q21034458","brand:wikipedia":"ca:Sorli",name:"Sorli Discau",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|Super del Norte":{countryCodes:["mx"],tags:{brand:"Super del Norte","brand:wikidata":"Q88388513",name:"Super del Norte",shop:"supermarket"}},"shop/supermarket|SuperBrugsen":{countryCodes:["dk"],tags:{brand:"SuperBrugsen","brand:wikidata":"Q12337746","brand:wikipedia":"en:SuperBrugsen",name:"SuperBrugsen",shop:"supermarket"}},"shop/supermarket|SuperValu":{countryCodes:["gb","ie"],tags:{brand:"SuperValu","brand:wikidata":"Q7642081","brand:wikipedia":"en:SuperValu (Ireland)",name:"SuperValu",shop:"supermarket"}},"shop/supermarket|SuperVerd":{countryCodes:["es"],tags:{brand:"Superverd","brand:wikidata":"Q11950546","brand:wikipedia":"ca:Superverd",name:"Superverd",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","ie"],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 Food Warehouse":{countryCodes:["gb"],tags:{brand:"The Food Warehouse","brand:wikidata":"Q87263899",name:"The Food Warehouse",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|Varus":{tags:{brand:"Varus",name:"Varus",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","pl"],nomatch:["amenity/fuel|bi1"],tags:{brand:"bi1","brand:wikidata":"Q56325139","brand:wikipedia":"pl: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|Близенько":{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:["rs"],tags:{brand:"Макси","brand:en":"Maxi","brand:wikidata":"Q6795490","brand:wikipedia":"sr:Макси",name:"Макси","name:en":"Maxi",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|Санта":{tags:{brand:"Санта",name:"Санта",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|Соседи":{tags:{brand:"Соседи",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:{brand:"ゆめタウン","brand:en":"YouMe Town","brand:ja":"ゆめタウン","brand:wikidata":"Q11280900","brand:wikipedia":"ja:ゆめタウン",name:"ゆめタウン","name:en":"YouMe Town","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":"APITA","brand:ja":"アピタ","brand:wikidata":"Q55384637",name:"アピタ","name:en":"APITA","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"],tags:{brand:"イオンマーケット","brand:en":"Aeon Market","brand:ja":"イオンマーケット","brand:wikidata":"Q11331715","brand:wikipedia":"ja:イオンマーケット",name:"イオンマーケット","name:en":"Aeon Market","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":"Ecos","brand:ja":"エコス","brand:wikidata":"Q11289886","brand:wikipedia":"ja:エコス",name:"エコス","name:en":"Ecos","name:ja":"エコス",shop:"supermarket"}},"shop/supermarket|エーコープ":{countryCodes:["jp"],matchNames:["aコープ"],tags:{brand:"エーコープ","brand:en":"A-COOP","brand:ja":"エーコープ","brand:wikidata":"Q11291524","brand:wikipedia":"ja:エーコープ",name:"エーコープ","name:en":"A-COOP","name:ja":"エーコープ",organic:"only",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":"Okuwa","brand:ja":"オークワ","brand:wikidata":"Q11293166","brand:wikipedia":"ja:オークワ",name:"オークワ","name:en":"Okuwa","name:ja":"オークワ",shop:"supermarket"}},"shop/supermarket|オーケーストア":{countryCodes:["jp"],matchNames:["オーケー, okストア"],tags:{brand:"オーケー","brand:en":"OK","brand:ja":"オーケー","brand:wikidata":"Q11293184","brand:wikipedia":"ja:オーケー",name:"オーケーストア","name:en":"OK Store","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:{brand:"キョーエイ","brand:en":"Kyoei","brand:ja":"キョーエイ","brand:wikidata":"Q11297581","brand:wikipedia":"ja:キョーエイ",name:"キョーエイ","name:en":"Kyoei","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":"PIAGO","brand:ja":"ピアゴ","brand:wikidata":"Q91014434",name:"ピアゴ","name:en":"PIAGO","name:ja":"ピアゴ",shop:"supermarket"}},"shop/supermarket|フジ":{countryCodes:["jp"],tags:{brand:"フジ","brand:en":"Fuji","brand:ja":"フジ","brand:wikidata":"Q8963035","brand:wikipedia":"ja:フジ (チェーンストア)",name:"フジ","name:en":"Fuji","name:ja":"フジ",shop:"supermarket"}},"shop/supermarket|フジグラン":{countryCodes:["jp"],tags:{brand:"フジ","brand:en":"Fuji","brand:ja":"フジ","brand:wikidata":"Q8963035","brand:wikipedia":"ja:フジ (チェーンストア)",name:"フジグラン","name:en":"Fuji GRAND","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":"Mammy Mart","brand:ja":"マミーマート","brand:wikidata":"Q11340902","brand:wikipedia":"ja:マミーマート",name:"マミーマート","name:en":"Mammy Mart","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":"Marunaka","brand:ja":"マルナカ","brand:wikidata":"Q11341399","brand:wikipedia":"ja:マルナカ (チェーンストア)",name:"マルナカ","name:en":"Marunaka","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":"Yamanaka","brand:ja":"ヤマナカ","brand:wikidata":"Q11345199","brand:wikipedia":"ja:ヤマナカ",name:"ヤマナカ","name:en":"Yamanaka","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":"Seijo Ishii","brand:ja":"成城石井","brand:wikidata":"Q11495410","brand:wikipedia":"ja:成城石井",name:"成城石井","name:en":"Seijo Ishii","name:ja":"成城石井",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:["jp"],matchNames:["そうてつローゼン"],tags:{alt_name:"そうてつローゼン",brand:"相鉄ローゼン","brand:en":"Sotetsu Rosen","brand:ja":"相鉄ローゼン","brand:wikidata":"Q11582450","brand:wikipedia":"ja:相鉄ローゼン",name:"相鉄ローゼン","name:en":"Sotetsu Rosen","name:ja":"相鉄ローゼン",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|Kusmi Tea":{tags:{brand:"Kusmi Tea","brand:wikidata":"Q944186","brand:wikipedia":"en:Kusmi Tea",name:"Kusmi Tea",shop:"tea"}},"shop/tea|Palais des Thés":{countryCodes:["be","fr","ge","il","lu","no","ru"],tags:{brand:"Palais des Thés","brand:wikidata":"Q3225161","brand:wikipedia":"en:Le Palais des Thés",name:"Palais des Thés",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/ticket|Минсктранс":{tags:{brand:"Минсктранс",name:"Минсктранс",shop:"ticket"}},"shop/ticket|みどりの窓口":{countryCodes:["jp"],tags:{brand:"みどりの窓口","brand:en":"Midori-no-madoguchi","brand:ja":"みどりの窓口","brand:wikidata":"Q11279064","brand:wikipedia":"ja:みどりの窓口",name:"みどりの窓口","name:en":"JR Ticket Office","name:ja":"みどりの窓口",shop:"ticket"}},"shop/tiles|Tile Giant":{countryCodes:["gb"],matchTags:["shop/diy"],tags:{brand:"Tile Giant","brand:wikidata":"Q87007841",name:"Tile Giant",shop:"tiles"}},"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/tool_hire|Kiloutou":{tags:{brand:"Kiloutou","brand:wikidata":"Q3196672","brand:wikipedia":"fr:Kiloutou",name:"Kiloutou",shop:"tool_hire"}},"shop/tool_hire|Loxam":{tags:{brand:"Loxam","brand:wikidata":"Q3264407","brand:wikipedia":"fr:Loxam",name:"Loxam",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":{countryCodes:["es"],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|Bradfords Building Supplies":{countryCodes:["gb"],tags:{brand:"Bradfords Building Supplies","brand:wikidata":"Q17986044","brand:wikipedia":"en:Bradfords Group",name:"Bradfords Building Supplies",shop:"trade"}},"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|Miles Morgan Travel":{countryCodes:["gb"],tags:{brand:"Miles Morgan Travel","brand:wikidata":"Q83179278",name:"Miles Morgan 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|STA Travel":{tags:{brand:"STA Travel","brand:wikidata":"Q2208025","brand:wikipedia":"en:STA Travel",name:"STA Travel",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|Alliance Tire Company":{tags:{brand:"Alliance","brand:wikidata":"Q420541","brand:wikipedia":"en:Alliance Tire Company Ltd",name:"Alliance Tire Company",shop:"tyres"}},"shop/tyres|Apollo Tyres":{tags:{brand:"Apollo Tyres","brand:wikidata":"Q4780362","brand:wikipedia":"en:Apollo Tyres",name:"Apollo Tyres",shop:"tyres"}},"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|Continental AG":{tags:{brand:"Continental AG","brand:wikidata":"Q163241","brand:wikipedia":"en:Continental AG",name:"Continental AG",shop:"tyres"}},"shop/tyres|Cooper Tire & Rubber Company":{countryCodes:["us"],tags:{brand:"Cooper Tire & Rubber Company","brand:wikidata":"Q1129847","brand:wikipedia":"en:Cooper Tire & Rubber Company",name:"Cooper Tire & Rubber Company",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|Eurotyre~(Belgium/Netherlands)":{countryCodes:["be","nl"],nomatch:["shop/tyres|Eurotyre~(France)"],tags:{brand:"Eurotyre","brand:wikidata":"Q91309121",name:"Eurotyre",shop:"tyres"}},"shop/tyres|Eurotyre~(France)":{countryCodes:["fr","so"],nomatch:["shop/tyres|Eurotyre~(Belgium/Netherlands)"],tags:{brand:"Eurotyre","brand:wikidata":"Q3060871","brand:wikipedia":"fr:Eurotyre",name:"Eurotyre",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|Pfennigpfeiffer":{tags:{brand:"Pfennigpfeiffer",name:"Pfennigpfeiffer",shop:"variety_store"}},"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|THANK YOU MART":{countryCodes:["jp"],tags:{"alt_name:en":"390 Yen Shop",brand:"THANK YOU MART","brand:en":"THANK YOU MART","brand:ja":"サンキューマート","brand:wikidata":"Q11305509","brand:wikipedia":"ja:サンキューマート",name:"THANK YOU MART","name:en":"THANK YOU MART","name:ja":"サンキューマート",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"],nomatch:["amenity/supermarket|MEGAドン・キホーテ"],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/variety_store|ワッツ":{countryCodes:["jp"],tags:{brand:"ワッツ","brand:en":"Watts","brand:ja":"ワッツ","brand:wikidata":"Q11351402","brand:wikipedia":"ja:ワッツ (企業)",name:"ワッツ","name:en":"Watts","name:ja":"ワッツ",shop:"variety_store"}},"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|Seiko":{matchNames:["セイコー"],matchTags:["shop/jewelry"],tags:{brand:"Seiko","brand:wikidata":"Q322601","brand:wikipedia":"en:Seiko",name:"Seiko",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|Booker Wholesale":{countryCodes:["gb"],tags:{brand:"Booker Wholesale","brand:wikidata":"Q4943180","brand:wikipedia":"en:Booker Group",name:"Booker Wholesale",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"}},"shop/wine|Wine Rack":{countryCodes:["ca"],tags:{brand:"Wine Rack","brand:wikidata":"Q86707661",name:"Wine Rack",shop:"wine"}},"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|Hôtel de la Gare":{tags:{brand:"Hôtel de la Gare",name:"Hôtel de la Gare",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"],matchNames:["apaホテル"],tags:{brand:"アパホテル","brand:en":"APA Hotel","brand:ja":"アパホテル","brand:wikidata":"Q11284497","brand:wikipedia":"ja:アパグループ",name:"アパホテル","name:en":"APA Hotel","name:ja":"アパホテル",tourism:"hotel"}},"tourism/hotel|東横イン":{countryCodes:["jp"],matchNames:["東横inn"],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","brand:wikidata":"Q4742512",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|Economy Inn":{tags:{brand:"Economy Inn",name:"Economy Inn",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"}}};
90201
90202         function validationOutdatedTags(context) {
90203             var type = 'outdated_tags';
90204
90205             // initialize name-suggestion-index matcher
90206             var nsiMatcher = matcher$1();
90207             nsiMatcher.buildMatchIndex(brands);
90208             var nsiKeys = ['amenity', 'shop', 'tourism', 'leisure', 'office'];
90209
90210             var allWD = {};
90211             var allWP = {};
90212             Object.keys(brands).forEach(function(kvnd) {
90213                 var brand = brands[kvnd];
90214                 var wd = brand.tags['brand:wikidata'];
90215                 var wp = brand.tags['brand:wikipedia'];
90216                 if (wd) { allWD[wd] = kvnd; }
90217                 if (wp) { allWP[wp] = kvnd; }
90218             });
90219
90220
90221             function oldTagIssues(entity, graph) {
90222                 var oldTags = Object.assign({}, entity.tags);  // shallow copy
90223                 var preset = context.presets().match(entity, graph);
90224                 var subtype = 'deprecated_tags';
90225
90226                 // upgrade preset..
90227                 if (preset.replacement) {
90228                     var newPreset = context.presets().item(preset.replacement);
90229                     graph = actionChangePreset(entity.id, preset, newPreset)(graph);
90230                     entity = graph.entity(entity.id);
90231                     preset = newPreset;
90232                 }
90233
90234                 // upgrade tags..
90235                 var deprecatedTags = entity.deprecatedTags();
90236                 if (deprecatedTags.length) {
90237                     deprecatedTags.forEach(function(tag) {
90238                         graph = actionUpgradeTags(entity.id, tag.old, tag.replace)(graph);
90239                     });
90240                     entity = graph.entity(entity.id);
90241                 }
90242
90243                 // add missing addTags..
90244                 var newTags = Object.assign({}, entity.tags);  // shallow copy
90245                 if (preset.tags !== preset.addTags) {
90246                     Object.keys(preset.addTags).forEach(function(k) {
90247                         if (!newTags[k]) {
90248                             if (preset.addTags[k] === '*') {
90249                                 newTags[k] = 'yes';
90250                             } else {
90251                                 newTags[k] = preset.addTags[k];
90252                             }
90253                         }
90254                     });
90255                 }
90256
90257                 // Do `wikidata` or `wikipedia` identify this entity as a brand?  #6416
90258                 // If so, these tags can be swapped to `brand:wikidata`/`brand:wikipedia`
90259                 var isBrand;
90260                 if (newTags.wikidata) {                 // try matching `wikidata`
90261                     isBrand = allWD[newTags.wikidata];
90262                 }
90263                 if (!isBrand && newTags.wikipedia) {    // fallback to `wikipedia`
90264                     isBrand = allWP[newTags.wikipedia];
90265                 }
90266                 if (isBrand && !newTags.office) {       // but avoid doing this for corporate offices
90267                     if (newTags.wikidata) {
90268                         newTags['brand:wikidata'] = newTags.wikidata;
90269                         delete newTags.wikidata;
90270                     }
90271                     if (newTags.wikipedia) {
90272                         newTags['brand:wikipedia'] = newTags.wikipedia;
90273                         delete newTags.wikipedia;
90274                     }
90275                     // I considered setting `name` and other tags here, but they aren't unique per wikidata
90276                     // (Q2759586 -> in USA "Papa John's", in Russia "Папа Джонс")
90277                     // So users will really need to use a preset or assign `name` themselves.
90278                 }
90279
90280                 // try key/value|name match against name-suggestion-index
90281                 if (newTags.name) {
90282                     for (var i = 0; i < nsiKeys.length; i++) {
90283                         var k = nsiKeys[i];
90284                         if (!newTags[k]) { continue; }
90285
90286                         var center = entity.extent(graph).center();
90287                         var countryCode = iso1A2Code(center);
90288                         var match = nsiMatcher.matchKVN(k, newTags[k], newTags.name, countryCode && countryCode.toLowerCase());
90289                         if (!match) { continue; }
90290
90291                         // for now skip ambiguous matches (like Target~(USA) vs Target~(Australia))
90292                         if (match.d) { continue; }
90293
90294                         var brand = brands[match.kvnd];
90295                         if (brand && brand.tags['brand:wikidata'] &&
90296                             brand.tags['brand:wikidata'] !== entity.tags['not:brand:wikidata']) {
90297                             subtype = 'noncanonical_brand';
90298
90299                             var keepTags = ['takeaway'].reduce(function(acc, k) {
90300                                 if (newTags[k]) {
90301                                     acc[k] = newTags[k];
90302                                 }
90303                                 return acc;
90304                             }, {});
90305
90306                             nsiKeys.forEach(function(k) { delete newTags[k]; });
90307                             Object.assign(newTags, brand.tags, keepTags);
90308                             break;
90309                         }
90310                     }
90311                 }
90312
90313                 // determine diff
90314                 var tagDiff = utilTagDiff(oldTags, newTags);
90315                 if (!tagDiff.length) { return []; }
90316
90317                 var isOnlyAddingTags = tagDiff.every(function(d) {
90318                     return d.type === '+';
90319                 });
90320
90321                 var prefix = '';
90322                 if (subtype === 'noncanonical_brand') {
90323                     prefix = 'noncanonical_brand.';
90324                 } else if (subtype === 'deprecated_tags' && isOnlyAddingTags) {
90325                     subtype = 'incomplete_tags';
90326                     prefix = 'incomplete.';
90327                 }
90328
90329                 // don't allow autofixing brand tags
90330                 var autoArgs = subtype !== 'noncanonical_brand' ? [doUpgrade, t('issues.fix.upgrade_tags.annotation')] : null;
90331
90332                 return [new validationIssue({
90333                     type: type,
90334                     subtype: subtype,
90335                     severity: 'warning',
90336                     message: showMessage,
90337                     reference: showReference,
90338                     entityIds: [entity.id],
90339                     hash: JSON.stringify(tagDiff),
90340                     dynamicFixes: function() {
90341                         return [
90342                             new validationIssueFix({
90343                                 autoArgs: autoArgs,
90344                                 title: t('issues.fix.upgrade_tags.title'),
90345                                 onClick: function(context) {
90346                                     context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
90347                                 }
90348                             })
90349                         ];
90350                     }
90351                 })];
90352
90353
90354                 function doUpgrade(graph) {
90355                     var currEntity = graph.hasEntity(entity.id);
90356                     if (!currEntity) { return graph; }
90357
90358                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
90359                     tagDiff.forEach(function(diff) {
90360                         if (diff.type === '-') {
90361                             delete newTags[diff.key];
90362                         } else if (diff.type === '+') {
90363                             newTags[diff.key] = diff.newVal;
90364                         }
90365                     });
90366
90367                     return actionChangeTags(currEntity.id, newTags)(graph);
90368                 }
90369
90370
90371                 function showMessage(context) {
90372                     var currEntity = context.hasEntity(entity.id);
90373                     if (!currEntity) { return ''; }
90374
90375                     var messageID = 'issues.outdated_tags.' + prefix + 'message';
90376
90377                     if (subtype === 'noncanonical_brand' && isOnlyAddingTags) {
90378                         messageID += '_incomplete';
90379                     }
90380
90381                     return t(messageID,
90382                         { feature: utilDisplayLabel(currEntity, context) }
90383                     );
90384                 }
90385
90386
90387                 function showReference(selection) {
90388                     var enter = selection.selectAll('.issue-reference')
90389                         .data([0])
90390                         .enter();
90391
90392                     enter
90393                         .append('div')
90394                         .attr('class', 'issue-reference')
90395                         .text(t('issues.outdated_tags.' + prefix + 'reference'));
90396
90397                     enter
90398                         .append('strong')
90399                         .text(t('issues.suggested'));
90400
90401                     enter
90402                         .append('table')
90403                         .attr('class', 'tagDiff-table')
90404                         .selectAll('.tagDiff-row')
90405                         .data(tagDiff)
90406                         .enter()
90407                         .append('tr')
90408                         .attr('class', 'tagDiff-row')
90409                         .append('td')
90410                         .attr('class', function(d) {
90411                             var klass = d.type === '+' ? 'add' : 'remove';
90412                             return 'tagDiff-cell tagDiff-cell-' + klass;
90413                         })
90414                         .text(function(d) { return d.display; });
90415                 }
90416             }
90417
90418
90419             function oldMultipolygonIssues(entity, graph) {
90420
90421                 var multipolygon, outerWay;
90422                 if (entity.type === 'relation') {
90423                     outerWay = osmOldMultipolygonOuterMemberOfRelation(entity, graph);
90424                     multipolygon = entity;
90425                 } else if (entity.type === 'way') {
90426                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
90427                     outerWay = entity;
90428                 } else {
90429                     return [];
90430                 }
90431
90432                 if (!multipolygon || !outerWay) { return []; }
90433
90434                 return [new validationIssue({
90435                     type: type,
90436                     subtype: 'old_multipolygon',
90437                     severity: 'warning',
90438                     message: showMessage,
90439                     reference: showReference,
90440                     entityIds: [outerWay.id, multipolygon.id],
90441                     dynamicFixes: function() {
90442                         return [
90443                             new validationIssueFix({
90444                                 autoArgs: [doUpgrade, t('issues.fix.move_tags.annotation')],
90445                                 title: t('issues.fix.move_tags.title'),
90446                                 onClick: function(context) {
90447                                     context.perform(doUpgrade, t('issues.fix.move_tags.annotation'));
90448                                 }
90449                             })
90450                         ];
90451                     }
90452                 })];
90453
90454
90455                 function doUpgrade(graph) {
90456                     var currMultipolygon = graph.hasEntity(multipolygon.id);
90457                     var currOuterWay = graph.hasEntity(outerWay.id);
90458                     if (!currMultipolygon || !currOuterWay) { return graph; }
90459
90460                     currMultipolygon = currMultipolygon.mergeTags(currOuterWay.tags);
90461                     graph = graph.replace(currMultipolygon);
90462                     return actionChangeTags(currOuterWay.id, {})(graph);
90463                 }
90464
90465
90466                 function showMessage(context) {
90467                     var currMultipolygon = context.hasEntity(multipolygon.id);
90468                     if (!currMultipolygon) { return ''; }
90469
90470                     return t('issues.old_multipolygon.message',
90471                         { multipolygon: utilDisplayLabel(currMultipolygon, context) }
90472                     );
90473                 }
90474
90475
90476                 function showReference(selection) {
90477                     selection.selectAll('.issue-reference')
90478                         .data([0])
90479                         .enter()
90480                         .append('div')
90481                         .attr('class', 'issue-reference')
90482                         .text(t('issues.old_multipolygon.reference'));
90483                 }
90484             }
90485
90486
90487             var validation = function checkOutdatedTags(entity, graph) {
90488                 var issues = oldMultipolygonIssues(entity, graph);
90489                 if (!issues.length) { issues = oldTagIssues(entity, graph); }
90490                 return issues;
90491             };
90492
90493
90494             validation.type = type;
90495
90496             return validation;
90497         }
90498
90499         function validationPrivateData() {
90500             var type = 'private_data';
90501
90502             // assume that some buildings are private
90503             var privateBuildingValues = {
90504                 detached: true,
90505                 farm: true,
90506                 house: true,
90507                 houseboat: true,
90508                 residential: true,
90509                 semidetached_house: true,
90510                 static_caravan: true
90511             };
90512
90513             // but they might be public if they have one of these other tags
90514             var publicKeys = {
90515                 amenity: true,
90516                 craft: true,
90517                 historic: true,
90518                 leisure: true,
90519                 office: true,
90520                 shop: true,
90521                 tourism: true
90522             };
90523
90524             // these tags may contain personally identifying info
90525             var personalTags = {
90526                 'contact:email': true,
90527                 'contact:fax': true,
90528                 'contact:phone': true,
90529                 email: true,
90530                 fax: true,
90531                 phone: true
90532             };
90533
90534
90535             var validation = function checkPrivateData(entity) {
90536                 var tags = entity.tags;
90537                 if (!tags.building || !privateBuildingValues[tags.building]) { return []; }
90538
90539                 var keepTags = {};
90540                 for (var k in tags) {
90541                     if (publicKeys[k]) { return []; }  // probably a public feature
90542                     if (!personalTags[k]) {
90543                         keepTags[k] = tags[k];
90544                     }
90545                 }
90546
90547                 var tagDiff = utilTagDiff(tags, keepTags);
90548                 if (!tagDiff.length) { return []; }
90549
90550                 var fixID = tagDiff.length === 1 ? 'remove_tag' : 'remove_tags';
90551
90552                 return [new validationIssue({
90553                     type: type,
90554                     severity: 'warning',
90555                     message: showMessage,
90556                     reference: showReference,
90557                     entityIds: [entity.id],
90558                     dynamicFixes: function() {
90559                         return [
90560                             new validationIssueFix({
90561                                 icon: 'iD-operation-delete',
90562                                 title: t('issues.fix.' + fixID + '.title'),
90563                                 onClick: function(context) {
90564                                     context.perform(doUpgrade, t('issues.fix.upgrade_tags.annotation'));
90565                                 }
90566                             })
90567                         ];
90568                     }
90569                 })];
90570
90571
90572                 function doUpgrade(graph) {
90573                     var currEntity = graph.hasEntity(entity.id);
90574                     if (!currEntity) { return graph; }
90575
90576                     var newTags = Object.assign({}, currEntity.tags);  // shallow copy
90577                     tagDiff.forEach(function(diff) {
90578                         if (diff.type === '-') {
90579                             delete newTags[diff.key];
90580                         } else if (diff.type === '+') {
90581                             newTags[diff.key] = diff.newVal;
90582                         }
90583                     });
90584
90585                     return actionChangeTags(currEntity.id, newTags)(graph);
90586                 }
90587
90588
90589                 function showMessage(context) {
90590                     var currEntity = context.hasEntity(this.entityIds[0]);
90591                     if (!currEntity) { return ''; }
90592
90593                     return t('issues.private_data.contact.message',
90594                         { feature: utilDisplayLabel(currEntity, context) }
90595                     );
90596                 }
90597
90598
90599                 function showReference(selection) {
90600                     var enter = selection.selectAll('.issue-reference')
90601                         .data([0])
90602                         .enter();
90603
90604                     enter
90605                         .append('div')
90606                         .attr('class', 'issue-reference')
90607                         .text(t('issues.private_data.reference'));
90608
90609                     enter
90610                         .append('strong')
90611                         .text(t('issues.suggested'));
90612
90613                     enter
90614                         .append('table')
90615                         .attr('class', 'tagDiff-table')
90616                         .selectAll('.tagDiff-row')
90617                         .data(tagDiff)
90618                         .enter()
90619                         .append('tr')
90620                         .attr('class', 'tagDiff-row')
90621                         .append('td')
90622                         .attr('class', function(d) {
90623                             var klass = d.type === '+' ? 'add' : 'remove';
90624                             return 'tagDiff-cell tagDiff-cell-' + klass;
90625                         })
90626                         .text(function(d) { return d.display; });
90627                 }
90628             };
90629
90630
90631             validation.type = type;
90632
90633             return validation;
90634         }
90635
90636         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?(одежда|консультация|поликлиника)$","^(スーパー|ハイパー)?マーケット$","^(セルフ)?デパート$","^(自動)?券売機$","^[123456789]00円ショップ$","^academia ao ar livre$","^agencja pocztowa$","^alimentación$","^alimentar(a|i)$","^alimentation\\sgénérale$","^alte (apotheke|post)$","^apotek(a|et)$","^apotheke( am markt)?$","^aptek$","^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)$","^photocopie$","^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?(\\sbar)?$","^souvenir(s)?(\\sshop)?$","^spätkauf$","^stacja (benzynowa|paliw)$","^stadium$","^stadtbäckerei$","^station service$","^steak house$","^stores?$","^super ?america","^super\\s?m(arket|ercado)$","^sushi\\s?(bar|house)?$","^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обуви$","^ресторан$","^ритуал(ьные услуги)?$","^рыб(а|олов)$","^салон красоты$","^сантехника$","^семена$","^социальный участковый$","^спорт(зал|комплекс|товары)$","^столовая$","^стоматолог","^стройматериалы$","^сувениры$","^супермаркет$","^табак(ерка)?$","^ткани$","^товары для дома$","^трактир$","^универ(маг|сам)$","^фельдшерско-акушерский пункт$","^фрукты и овощи$","^химчистка$","^хинкальная$","^хоз(товары)$","^хүнсний дэлгүүр$","^цвет(овик|очный|ы)(\\sмагазин)?$","^церковная( лавка)?$","^чайхана$","^ша(ве|у)рма$","^шашлычная$","^шиномонтаж$","^їдальня$","^דלק$","^اداره پست$","^باشگاه بدنسازی$","^بانک$","^بقال(ة)?$","^حلاق$","^داروخانه شبانه روزی$","^داروخانه$","^درمانگاه$","^رستوران$","^سوپر\\s?مارکت$","^صيدلية$","^قصابی$","^محط(ه|ة) وقود$","^مخابرات$","^مخبز(ة)?$","^مطعم$","^مقهى$","^مكتب البريد$","^میوه فروشی$","^نان\\s?(سنگک|بربری|لواش)?$","^نانوایی\\s?(سنگک|بربری|لواش)?ی?$","^پمپ (بنزین|گاز)$","^მარკეტი( \\(market\\))?","^カフェ$","^ド(ラ|リ)ッグ$","^パチンコ$","^ポスト$","^ラーメン(屋|店)?$","^体育館$","^加油站$","^早餐店$","^書房$","^珈琲館$","^租$","^自動販売機$","^自販機$","^郵便ポスト$","^郵局$","^銀行$","^食堂$","automat na jizdenky"];
90637
90638         function validationSuspiciousName() {
90639             var type = 'suspicious_name';
90640
90641             // known list of generic names (e.g. "bar")
90642             var discardNamesRegexes = discardNames.map(function(discardName) {
90643                 return new RegExp(discardName, 'i');
90644             });
90645
90646             var keysToTestForGenericValues = ['amenity', 'building', 'leisure', 'man_made', 'shop', 'tourism'];
90647
90648             function isDiscardedSuggestionName(lowercaseName) {
90649                 for (var i = 0; i < discardNamesRegexes.length; i++) {
90650                     if (discardNamesRegexes[i].test(lowercaseName)) {
90651                         return true;
90652                     }
90653                 }
90654                 return false;
90655             }
90656
90657             // test if the name is just the key or tag value (e.g. "park")
90658             function nameMatchesRawTag(lowercaseName, tags) {
90659                 var i, key, val;
90660                 for (i = 0; i < keysToTestForGenericValues.length; i++) {
90661                     key = keysToTestForGenericValues[i];
90662                     val = tags[key];
90663                     if (val) {
90664                         val = val.toLowerCase();
90665                         if (key === lowercaseName ||
90666                             val === lowercaseName ||
90667                             key.replace(/\_/g, ' ') === lowercaseName ||
90668                             val.replace(/\_/g, ' ') === lowercaseName) {
90669                             return true;
90670                         }
90671                     }
90672                 }
90673                 return false;
90674             }
90675
90676             function isGenericName(name, tags) {
90677                 name = name.toLowerCase();
90678                 return nameMatchesRawTag(name, tags) || isDiscardedSuggestionName(name);
90679             }
90680
90681             function makeGenericNameIssue(entityId, nameKey, genericName, langCode) {
90682                 return new validationIssue({
90683                     type: type,
90684                     subtype: 'generic_name',
90685                     severity: 'warning',
90686                     message: function(context) {
90687                         var entity = context.hasEntity(this.entityIds[0]);
90688                         if (!entity) { return ''; }
90689                         var preset = utilPreset(entity, context);
90690                         var langName = langCode && languageName(langCode);
90691                         return t('issues.generic_name.message' + (langName ? '_language' : ''),
90692                             { feature: preset.name(), name: genericName, language: langName }
90693                         );
90694                     },
90695                     reference: showReference,
90696                     entityIds: [entityId],
90697                     hash: nameKey + '=' + genericName,
90698                     dynamicFixes: function() {
90699                         return [
90700                             new validationIssueFix({
90701                                 icon: 'iD-operation-delete',
90702                                 title: t('issues.fix.remove_the_name.title'),
90703                                 onClick: function(context) {
90704                                     var entityId = this.issue.entityIds[0];
90705                                     var entity = context.entity(entityId);
90706                                     var tags = Object.assign({}, entity.tags);   // shallow copy
90707                                     delete tags[nameKey];
90708                                     context.perform(
90709                                         actionChangeTags(entityId, tags),
90710                                         t('issues.fix.remove_generic_name.annotation')
90711                                     );
90712                                 }
90713                             })
90714                         ];
90715                     }
90716                 });
90717
90718                 function showReference(selection) {
90719                     selection.selectAll('.issue-reference')
90720                         .data([0])
90721                         .enter()
90722                         .append('div')
90723                         .attr('class', 'issue-reference')
90724                         .text(t('issues.generic_name.reference'));
90725                 }
90726             }
90727
90728             function makeIncorrectNameIssue(entityId, nameKey, incorrectName, langCode) {
90729                 return new validationIssue({
90730                     type: type,
90731                     subtype: 'not_name',
90732                     severity: 'warning',
90733                     message: function(context) {
90734                         var entity = context.hasEntity(this.entityIds[0]);
90735                         if (!entity) { return ''; }
90736                         var preset = utilPreset(entity, context);
90737                         var langName = langCode && languageName(langCode);
90738                         return t('issues.incorrect_name.message' + (langName ? '_language' : ''),
90739                             { feature: preset.name(), name: incorrectName, language: langName }
90740                         );
90741                     },
90742                     reference: showReference,
90743                     entityIds: [entityId],
90744                     hash: nameKey + '=' + incorrectName,
90745                     dynamicFixes: function() {
90746                         return [
90747                             new validationIssueFix({
90748                                 icon: 'iD-operation-delete',
90749                                 title: t('issues.fix.remove_the_name.title'),
90750                                 onClick: function(context) {
90751                                     var entityId = this.issue.entityIds[0];
90752                                     var entity = context.entity(entityId);
90753                                     var tags = Object.assign({}, entity.tags);   // shallow copy
90754                                     delete tags[nameKey];
90755                                     context.perform(
90756                                         actionChangeTags(entityId, tags),
90757                                         t('issues.fix.remove_mistaken_name.annotation')
90758                                     );
90759                                 }
90760                             })
90761                         ];
90762                     }
90763                 });
90764
90765                 function showReference(selection) {
90766                     selection.selectAll('.issue-reference')
90767                         .data([0])
90768                         .enter()
90769                         .append('div')
90770                         .attr('class', 'issue-reference')
90771                         .text(t('issues.generic_name.reference'));
90772                 }
90773             }
90774
90775
90776             var validation = function checkGenericName(entity) {
90777                 // a generic name is okay if it's a known brand or entity
90778                 if (entity.hasWikidata()) { return []; }
90779
90780                 var issues = [];
90781
90782                 var notNames = (entity.tags['not:name'] || '').split(';');
90783
90784                 for (var key in entity.tags) {
90785                     var m = key.match(/^name(?:(?::)([a-zA-Z_-]+))?$/);
90786                     if (!m) { continue; }
90787
90788                     var langCode = m.length >= 2 ? m[1] : null;
90789
90790                     var value = entity.tags[key];
90791                     if (notNames.length) {
90792                         for (var i in notNames) {
90793                             var notName = notNames[i];
90794                             if (notName && value === notName) {
90795                                 issues.push(makeIncorrectNameIssue(entity.id, key, value, langCode));
90796                                 continue;
90797                             }
90798                         }
90799                     }
90800                     if (isGenericName(value, entity.tags)) {
90801                         issues.push(makeGenericNameIssue(entity.id, key, value, langCode));
90802                     }
90803                 }
90804
90805                 return issues;
90806             };
90807
90808             validation.type = type;
90809
90810             return validation;
90811         }
90812
90813         function validationUnsquareWay(context) {
90814             var type = 'unsquare_way';
90815             var DEFAULT_DEG_THRESHOLD = 5;   // see also issues.js
90816
90817             // use looser epsilon for detection to reduce warnings of buildings that are essentially square already
90818             var epsilon = 0.05;
90819             var nodeThreshold = 10;
90820
90821             function isBuilding(entity, graph) {
90822                 if (entity.type !== 'way' || entity.geometry(graph) !== 'area') { return false; }
90823                 return entity.tags.building && entity.tags.building !== 'no';
90824             }
90825
90826
90827             var validation = function checkUnsquareWay(entity, graph) {
90828
90829                 if (!isBuilding(entity, graph)) { return []; }
90830
90831                 // don't flag ways marked as physically unsquare
90832                 if (entity.tags.nonsquare === 'yes') { return []; }
90833
90834                 var isClosed = entity.isClosed();
90835                 if (!isClosed) { return []; }        // this building has bigger problems
90836
90837                 // don't flag ways with lots of nodes since they are likely detail-mapped
90838                 var nodes = graph.childNodes(entity).slice();    // shallow copy
90839                 if (nodes.length > nodeThreshold + 1) { return []; }   // +1 because closing node appears twice
90840
90841                 // ignore if not all nodes are fully downloaded
90842                 var osm = services$1.osm;
90843                 if (!osm || nodes.some(function(node) { return !osm.isDataLoaded(node.loc); })) { return []; }
90844
90845                 // don't flag connected ways to avoid unresolvable unsquare loops
90846                 var hasConnectedSquarableWays = nodes.some(function(node) {
90847                     return graph.parentWays(node).some(function(way) {
90848                         if (way.id === entity.id) { return false; }
90849                         if (isBuilding(way, graph)) { return true; }
90850                         return graph.parentRelations(way).some(function(parentRelation) {
90851                             return parentRelation.isMultipolygon() &&
90852                                 parentRelation.tags.building &&
90853                                 parentRelation.tags.building !== 'no';
90854                         });
90855                     });
90856                 });
90857                 if (hasConnectedSquarableWays) { return []; }
90858
90859
90860                 // user-configurable square threshold
90861                 var storedDegreeThreshold = context.storage('validate-square-degrees');
90862                 var degreeThreshold = isNaN(storedDegreeThreshold) ? DEFAULT_DEG_THRESHOLD : parseFloat(storedDegreeThreshold);
90863
90864                 var points = nodes.map(function(node) { return context.projection(node.loc); });
90865                 if (!geoOrthoCanOrthogonalize(points, isClosed, epsilon, degreeThreshold, true)) { return []; }
90866
90867                 var autoArgs;
90868                 // don't allow autosquaring features linked to wikidata
90869                 if (!entity.tags.wikidata) {
90870                     // use same degree threshold as for detection
90871                     var autoAction = actionOrthogonalize(entity.id, context.projection, undefined, degreeThreshold);
90872                     autoAction.transitionable = false;  // when autofixing, do it instantly
90873                     autoArgs = [autoAction, t('operations.orthogonalize.annotation.feature.single')];
90874                 }
90875
90876                 return [new validationIssue({
90877                     type: type,
90878                     subtype: 'building',
90879                     severity: 'warning',
90880                     message: function(context) {
90881                         var entity = context.hasEntity(this.entityIds[0]);
90882                         return entity ? t('issues.unsquare_way.message', { feature: utilDisplayLabel(entity, context) }) : '';
90883                     },
90884                     reference: showReference,
90885                     entityIds: [entity.id],
90886                     hash: JSON.stringify(autoArgs !== undefined) + degreeThreshold,
90887                     dynamicFixes: function() {
90888                         return [
90889                             new validationIssueFix({
90890                                 icon: 'iD-operation-orthogonalize',
90891                                 title: t('issues.fix.square_feature.title'),
90892                                 autoArgs: autoArgs,
90893                                 onClick: function(context, completionHandler) {
90894                                     var entityId = this.issue.entityIds[0];
90895                                     // use same degree threshold as for detection
90896                                     context.perform(
90897                                         actionOrthogonalize(entityId, context.projection, undefined, degreeThreshold),
90898                                         t('operations.orthogonalize.annotation.feature.single')
90899                                     );
90900                                     // run after the squaring transition (currently 150ms)
90901                                     window.setTimeout(function() { completionHandler(); }, 175);
90902                                 }
90903                             }) ];
90904                     }
90905                 })];
90906
90907                 function showReference(selection) {
90908                     selection.selectAll('.issue-reference')
90909                         .data([0])
90910                         .enter()
90911                         .append('div')
90912                         .attr('class', 'issue-reference')
90913                         .text(t('issues.unsquare_way.buildings.reference'));
90914                 }
90915             };
90916
90917             validation.type = type;
90918
90919             return validation;
90920         }
90921
90922
90923
90924         var Validations = /*#__PURE__*/Object.freeze({
90925                 __proto__: null,
90926                 validationAlmostJunction: validationAlmostJunction,
90927                 validationCloseNodes: validationCloseNodes,
90928                 validationCrossingWays: validationCrossingWays,
90929                 validationDisconnectedWay: validationDisconnectedWay,
90930                 validationFormatting: validationFormatting,
90931                 validationHelpRequest: validationHelpRequest,
90932                 validationImpossibleOneway: validationImpossibleOneway,
90933                 validationIncompatibleSource: validationIncompatibleSource,
90934                 validationMaprules: validationMaprules,
90935                 validationMismatchedGeometry: validationMismatchedGeometry,
90936                 validationMissingRole: validationMissingRole,
90937                 validationMissingTag: validationMissingTag,
90938                 validationOutdatedTags: validationOutdatedTags,
90939                 validationPrivateData: validationPrivateData,
90940                 validationSuspiciousName: validationSuspiciousName,
90941                 validationUnsquareWay: validationUnsquareWay
90942         });
90943
90944         function coreValidator(context) {
90945             var dispatch$1 = dispatch('validated', 'focusedIssue');
90946             var validator = utilRebind({}, dispatch$1, 'on');
90947
90948             var _rules = {};
90949             var _disabledRules = {};
90950
90951             var _ignoredIssueIDs = {};          // issue.id -> true
90952             var _baseCache = validationCache(); // issues before any user edits
90953             var _headCache = validationCache(); // issues after all user edits
90954             var _validatedGraph = null;
90955             var _deferred = new Set();
90956
90957             //
90958             // initialize the validator rulesets
90959             //
90960             validator.init = function() {
90961                 Object.values(Validations).forEach(function(validation) {
90962                     if (typeof validation !== 'function') { return; }
90963
90964                     var fn = validation(context);
90965                     var key = fn.type;
90966                     _rules[key] = fn;
90967                 });
90968
90969                 var disabledRules = context.storage('validate-disabledRules');
90970                 if (disabledRules) {
90971                     disabledRules.split(',')
90972                         .forEach(function(key) { _disabledRules[key] = true; });
90973                 }
90974             };
90975
90976
90977             //
90978             // clear caches, called whenever iD resets after a save
90979             //
90980             validator.reset = function() {
90981                 Array.from(_deferred).forEach(function(handle) {
90982                     window.cancelIdleCallback(handle);
90983                     _deferred.delete(handle);
90984                 });
90985
90986                 // clear caches
90987                 _ignoredIssueIDs = {};
90988                 _baseCache = validationCache();
90989                 _headCache = validationCache();
90990                 _validatedGraph = null;
90991             };
90992
90993             validator.resetIgnoredIssues = function() {
90994                 _ignoredIssueIDs = {};
90995                 // reload UI
90996                 dispatch$1.call('validated');
90997             };
90998
90999
91000             // must update issues when the user changes the unsquare thereshold
91001             validator.reloadUnsquareIssues = function() {
91002
91003                 reloadUnsquareIssues(_headCache, context.graph());
91004                 reloadUnsquareIssues(_baseCache, context.history().base());
91005
91006                 dispatch$1.call('validated');
91007             };
91008
91009             function reloadUnsquareIssues(cache, graph) {
91010
91011                 var checkUnsquareWay = _rules.unsquare_way;
91012                 if (typeof checkUnsquareWay !== 'function') { return; }
91013
91014                 // uncache existing
91015                 cache.uncacheIssuesOfType('unsquare_way');
91016
91017                 var buildings = context.history().tree().intersects(geoExtent([-180,-90],[180, 90]), graph)  // everywhere
91018                     .filter(function(entity) {
91019                         return entity.type === 'way' && entity.tags.building && entity.tags.building !== 'no';
91020                     });
91021
91022                 // rerun for all buildings
91023                 buildings.forEach(function(entity) {
91024                     var detected = checkUnsquareWay(entity, graph);
91025                     if (detected.length !== 1) { return; }
91026                     var issue = detected[0];
91027                     if (!cache.issuesByEntityID[entity.id]) {
91028                         cache.issuesByEntityID[entity.id] = new Set();
91029                     }
91030                     cache.issuesByEntityID[entity.id].add(issue.id);
91031                     cache.issuesByIssueID[issue.id] = issue;
91032                 });
91033             }
91034
91035             // options = {
91036             //     what: 'all',     // 'all' or 'edited'
91037             //     where: 'all',   // 'all' or 'visible'
91038             //     includeIgnored: false   // true, false, or 'only'
91039             //     includeDisabledRules: false   // true, false, or 'only'
91040             // };
91041             validator.getIssues = function(options) {
91042                 var opts = Object.assign({ what: 'all', where: 'all', includeIgnored: false, includeDisabledRules: false }, options);
91043                 var issues = Object.values(_headCache.issuesByIssueID);
91044                 var view = context.map().extent();
91045
91046                 return issues.filter(function(issue) {
91047                     if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) { return false; }
91048                     if (!opts.includeDisabledRules && _disabledRules[issue.type]) { return false; }
91049
91050                     if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) { return false; }
91051                     if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) { return false; }
91052
91053                     // Sanity check:  This issue may be for an entity that not longer exists.
91054                     // If we detect this, uncache and return false so it is not included..
91055                     var entityIds = issue.entityIds || [];
91056                     for (var i = 0; i < entityIds.length; i++) {
91057                         var entityId = entityIds[i];
91058                         if (!context.hasEntity(entityId)) {
91059                             delete _headCache.issuesByEntityID[entityId];
91060                             delete _headCache.issuesByIssueID[issue.id];
91061                             return false;
91062                         }
91063                     }
91064
91065                     if (opts.what === 'edited' && _baseCache.issuesByIssueID[issue.id]) { return false; }
91066
91067                     if (opts.where === 'visible') {
91068                         var extent = issue.extent(context.graph());
91069                         if (!view.intersects(extent)) { return false; }
91070                     }
91071
91072                     return true;
91073                 });
91074             };
91075
91076             validator.getResolvedIssues = function() {
91077                 var baseIssues = Object.values(_baseCache.issuesByIssueID);
91078                 return baseIssues.filter(function(issue) {
91079                     return !_headCache.issuesByIssueID[issue.id];
91080                 });
91081             };
91082
91083             validator.focusIssue = function(issue) {
91084                 var extent = issue.extent(context.graph());
91085
91086                 if (extent) {
91087                     var setZoom = Math.max(context.map().zoom(), 19);
91088                     context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
91089
91090                     // select the first entity
91091                     if (issue.entityIds && issue.entityIds.length) {
91092                         window.setTimeout(function() {
91093                             var ids = issue.entityIds;
91094                             context.enter(modeSelect(context, [ids[0]]));
91095                             dispatch$1.call('focusedIssue', this, issue);
91096                         }, 250);  // after ease
91097                     }
91098                 }
91099             };
91100
91101
91102             validator.getIssuesBySeverity = function(options) {
91103                 var groups = utilArrayGroupBy(validator.getIssues(options), 'severity');
91104                 groups.error = groups.error || [];
91105                 groups.warning = groups.warning || [];
91106                 return groups;
91107             };
91108
91109             // show some issue types in a particular order
91110             var orderedIssueTypes = [
91111                 // flag missing data first
91112                 'missing_tag', 'missing_role',
91113                 // then flag identity issues
91114                 'outdated_tags', 'mismatched_geometry',
91115                 // flag geometry issues where fixing them might solve connectivity issues
91116                 'crossing_ways', 'almost_junction',
91117                 // then flag connectivity issues
91118                 'disconnected_way', 'impossible_oneway'
91119             ];
91120
91121             validator.getEntityIssues = function(entityID, options) {
91122                 var cache = _headCache;
91123
91124                 var issueIDs = cache.issuesByEntityID[entityID];
91125                 if (!issueIDs) { return []; }
91126
91127                 var opts = options || {};
91128
91129                 return Array.from(issueIDs)
91130                     .map(function(id) { return cache.issuesByIssueID[id]; })
91131                     .filter(function(issue) {
91132                         if (opts.includeDisabledRules === 'only' && !_disabledRules[issue.type]) { return false; }
91133                         if (!opts.includeDisabledRules && _disabledRules[issue.type]) { return false; }
91134
91135                         if (opts.includeIgnored === 'only' && !_ignoredIssueIDs[issue.id]) { return false; }
91136                         if (!opts.includeIgnored && _ignoredIssueIDs[issue.id]) { return false; }
91137
91138                         return true;
91139                     }).sort(function(issue1, issue2) {
91140                         if (issue1.type === issue2.type) {
91141                             // issues of the same type, sort deterministically
91142                             return issue1.id < issue2.id ? -1 : 1;
91143                         }
91144                         var index1 = orderedIssueTypes.indexOf(issue1.type);
91145                         var index2 = orderedIssueTypes.indexOf(issue2.type);
91146                         if (index1 !== -1 && index2 !== -1) {
91147                             // both issue types have explicit sort orders
91148                             return index1 - index2;
91149                         } else if (index1 === -1 && index2 === -1) {
91150                             // neither issue type has an explicit sort order, sort by type
91151                             return issue1.type < issue2.type ? -1 : 1;
91152                         } else {
91153                             // order explicit types before everything else
91154                             return index1 !== -1 ? -1 : 1;
91155                         }
91156                     });
91157             };
91158
91159
91160             validator.getRuleKeys = function() {
91161                 return Object.keys(_rules)
91162                     .filter(function(key) { return key !== 'maprules'; })
91163                     .sort(function(key1, key2) {
91164                         // alphabetize by localized title
91165                         return t('issues.' + key1 + '.title') < t('issues.' + key2 + '.title') ? -1 : 1;
91166                     });
91167             };
91168
91169
91170             validator.isRuleEnabled = function(key) {
91171                 return !_disabledRules[key];
91172             };
91173
91174
91175             validator.toggleRule = function(key) {
91176                 if (_disabledRules[key]) {
91177                     delete _disabledRules[key];
91178                 } else {
91179                     _disabledRules[key] = true;
91180                 }
91181
91182                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
91183                 validator.validate();
91184             };
91185
91186
91187             validator.disableRules = function(keys) {
91188                 _disabledRules = {};
91189                 keys.forEach(function(k) {
91190                     _disabledRules[k] = true;
91191                 });
91192
91193                 context.storage('validate-disabledRules', Object.keys(_disabledRules).join(','));
91194                 validator.validate();
91195             };
91196
91197
91198             validator.ignoreIssue = function(id) {
91199                 _ignoredIssueIDs[id] = true;
91200             };
91201
91202
91203             //
91204             // Run validation on a single entity for the given graph
91205             //
91206             function validateEntity(entity, graph) {
91207                 var entityIssues = [];
91208
91209                 // runs validation and appends resulting issues
91210                 function runValidation(key) {
91211
91212                     var fn = _rules[key];
91213                     if (typeof fn !== 'function') {
91214                         console.error('no such validation rule = ' + key);  // eslint-disable-line no-console
91215                         return;
91216                     }
91217
91218                     var detected = fn(entity, graph);
91219                     entityIssues = entityIssues.concat(detected);
91220                 }
91221
91222                 // run all rules
91223                 Object.keys(_rules).forEach(runValidation);
91224
91225                 return entityIssues;
91226             }
91227
91228             function entityIDsToValidate(entityIDs, graph) {
91229                 var processedIDs = new Set();
91230                 return entityIDs.reduce(function(acc, entityID) {
91231                     // keep redundancy check separate from `acc` because an `entityID`
91232                     // could have been added to `acc` as a related entity through an earlier pass
91233                     if (processedIDs.has(entityID)) { return acc; }
91234                     processedIDs.add(entityID);
91235
91236                     var entity = graph.hasEntity(entityID);
91237                     if (!entity) { return acc; }
91238
91239                     acc.add(entityID);
91240
91241                     var checkParentRels = [entity];
91242
91243                     if (entity.type === 'node') {
91244                         graph.parentWays(entity).forEach(function(parentWay) {
91245                             acc.add(parentWay.id); // include parent ways
91246                             checkParentRels.push(parentWay);
91247                         });
91248                     } else if (entity.type === 'relation') {
91249                         entity.members.forEach(function(member) {
91250                             acc.add(member.id); // include members
91251                         });
91252                     } else if (entity.type === 'way') {
91253                         entity.nodes.forEach(function(nodeID) {
91254                             acc.add(nodeID); // include child nodes
91255                             graph._parentWays[nodeID].forEach(function(wayID) {
91256                                 acc.add(wayID); // include connected ways
91257                             });
91258                         });
91259                     }
91260
91261                     checkParentRels.forEach(function(entity) {   // include parent relations
91262                         if (entity.type !== 'relation') {        // but not super-relations
91263                             graph.parentRelations(entity).forEach(function(parentRelation) {
91264                                 acc.add(parentRelation.id);
91265                             });
91266                         }
91267                     });
91268
91269                     return acc;
91270
91271                 }, new Set());
91272             }
91273
91274             //
91275             // Run validation for several entities, supplied `entityIDs`,
91276             // against `graph` for the given `cache`
91277             //
91278             function validateEntities(entityIDs, graph, cache) {
91279
91280                 // clear caches for existing issues related to these entities
91281                 entityIDs.forEach(cache.uncacheEntityID);
91282
91283                 // detect new issues and update caches
91284                 entityIDs.forEach(function(entityID) {
91285                     var entity = graph.hasEntity(entityID);
91286                     // don't validate deleted entities
91287                     if (!entity) { return; }
91288
91289                     var issues = validateEntity(entity, graph);
91290                     cache.cacheIssues(issues);
91291                 });
91292             }
91293
91294
91295             //
91296             // Validates anything that has changed since the last time it was run.
91297             // Also updates the "validatedGraph" to be the current graph
91298             // and dispatches a `validated` event when finished.
91299             //
91300             validator.validate = function() {
91301
91302                 var currGraph = context.graph();
91303                 _validatedGraph = _validatedGraph || context.history().base();
91304                 if (currGraph === _validatedGraph) {
91305                     dispatch$1.call('validated');
91306                     return;
91307                 }
91308                 var oldGraph = _validatedGraph;
91309                 var difference = coreDifference(oldGraph, currGraph);
91310                 _validatedGraph = currGraph;
91311
91312                 var createdAndModifiedEntityIDs = difference.extantIDs(true);   // created/modified (true = w/relation members)
91313                 var entityIDsToCheck = entityIDsToValidate(createdAndModifiedEntityIDs, currGraph);
91314
91315                 // check modified and deleted entities against the old graph in order to update their related entities
91316                 // (e.g. deleting the only highway connected to a road should create a disconnected highway issue)
91317                 var modifiedAndDeletedEntityIDs = difference.deleted().concat(difference.modified())
91318                     .map(function(entity) { return entity.id; });
91319                 var entityIDsToCheckForOldGraph = entityIDsToValidate(modifiedAndDeletedEntityIDs, oldGraph);
91320
91321                 // concat the sets
91322                 entityIDsToCheckForOldGraph.forEach(entityIDsToCheck.add, entityIDsToCheck);
91323
91324                 validateEntities(entityIDsToCheck, context.graph(), _headCache);
91325
91326                 dispatch$1.call('validated');
91327             };
91328
91329
91330             // WHEN TO RUN VALIDATION:
91331             // When graph changes:
91332             context.history()
91333                 .on('restore.validator', validator.validate)   // restore saved history
91334                 .on('undone.validator', validator.validate)    // undo
91335                 .on('redone.validator', validator.validate);   // redo
91336                 // but not on 'change' (e.g. while drawing)
91337
91338             // When user chages editing modes:
91339             context
91340                 .on('exit.validator', validator.validate);
91341
91342             // When merging fetched data:
91343             context.history()
91344                 .on('merge.validator', function(entities) {
91345                     if (!entities) { return; }
91346                     var handle = window.requestIdleCallback(function() {
91347                         var entityIDs = entities.map(function(entity) { return entity.id; });
91348                         var headGraph = context.graph();
91349                         validateEntities(entityIDsToValidate(entityIDs, headGraph), headGraph, _headCache);
91350
91351                         var baseGraph = context.history().base();
91352                         validateEntities(entityIDsToValidate(entityIDs, baseGraph), baseGraph, _baseCache);
91353
91354                         dispatch$1.call('validated');
91355                     });
91356                     _deferred.add(handle);
91357                 });
91358
91359
91360             return validator;
91361         }
91362
91363
91364         function validationCache() {
91365
91366             var cache = {
91367                 issuesByIssueID: {},  // issue.id -> issue
91368                 issuesByEntityID: {} // entity.id -> set(issue.id)
91369             };
91370
91371             cache.cacheIssues = function(issues) {
91372                 issues.forEach(function(issue) {
91373                     var entityIds = issue.entityIds || [];
91374                     entityIds.forEach(function(entityId) {
91375                         if (!cache.issuesByEntityID[entityId]) {
91376                             cache.issuesByEntityID[entityId] = new Set();
91377                         }
91378                         cache.issuesByEntityID[entityId].add(issue.id);
91379                     });
91380                     cache.issuesByIssueID[issue.id] = issue;
91381                 });
91382             };
91383
91384             cache.uncacheIssue = function(issue) {
91385                 // When multiple entities are involved (e.g. crossing_ways),
91386                 // remove this issue from the other entity caches too..
91387                 var entityIds = issue.entityIds || [];
91388                 entityIds.forEach(function(entityId) {
91389                     if (cache.issuesByEntityID[entityId]) {
91390                         cache.issuesByEntityID[entityId].delete(issue.id);
91391                     }
91392                 });
91393                 delete cache.issuesByIssueID[issue.id];
91394             };
91395
91396             cache.uncacheIssues = function(issues) {
91397                 issues.forEach(cache.uncacheIssue);
91398             };
91399
91400             cache.uncacheIssuesOfType = function(type) {
91401                 var issuesOfType = Object.values(cache.issuesByIssueID)
91402                     .filter(function(issue) { return issue.type === type; });
91403                 cache.uncacheIssues(issuesOfType);
91404             };
91405
91406             //
91407             // Remove a single entity and all its related issues from the caches
91408             //
91409             cache.uncacheEntityID = function(entityID) {
91410                 var issueIDs = cache.issuesByEntityID[entityID];
91411                 if (!issueIDs) { return; }
91412
91413                 issueIDs.forEach(function(issueID) {
91414                     var issue = cache.issuesByIssueID[issueID];
91415                     if (issue) {
91416                         cache.uncacheIssue(issue);
91417                     } else {
91418                         delete cache.issuesByIssueID[issueID];
91419                     }
91420                 });
91421
91422                 delete cache.issuesByEntityID[entityID];
91423             };
91424
91425             return cache;
91426         }
91427
91428         function presetCollection(collection) {
91429             var maxSearchResults = 50;
91430
91431             var presets = {
91432
91433                 collection: collection,
91434
91435
91436                 item: function(id) {
91437                     return this.collection.find(function(d) {
91438                         return d.id === id;
91439                     });
91440                 },
91441
91442                 index: function(id) {
91443                     return this.collection.findIndex(function(d) {
91444                         return d.id === id;
91445                     });
91446                 },
91447
91448                 matchGeometry: function(geometry) {
91449                     return presetCollection(this.collection.filter(function(d) {
91450                         return d.matchGeometry(geometry);
91451                     }));
91452                 },
91453
91454                 matchAnyGeometry: function(geometries) {
91455                     return presetCollection(this.collection.filter(function(d) {
91456                         return geometries.some(function(geometry) {
91457                             return d.matchGeometry(geometry);
91458                         });
91459                     }));
91460                 },
91461
91462                 fallback: function(geometry) {
91463                     var id = geometry;
91464                     if (id === 'vertex') { id = 'point'; }
91465                     return this.item(id);
91466                 },
91467
91468                 search: function(value, geometry, countryCode) {
91469                     if (!value) { return this; }
91470
91471                     value = value.toLowerCase().trim();
91472
91473                     // match at name beginning or just after a space (e.g. "office" -> match "Law Office")
91474                     function leading(a) {
91475                         var index = a.indexOf(value);
91476                         return index === 0 || a[index - 1] === ' ';
91477                     }
91478
91479                     // match at name beginning only
91480                     function leadingStrict(a) {
91481                         var index = a.indexOf(value);
91482                         return index === 0;
91483                     }
91484
91485                     function sortNames(a, b) {
91486                         var aCompare = (a.suggestion ? a.originalName : a.name()).toLowerCase();
91487                         var bCompare = (b.suggestion ? b.originalName : b.name()).toLowerCase();
91488
91489                         // priority if search string matches preset name exactly - #4325
91490                         if (value === aCompare) { return -1; }
91491                         if (value === bCompare) { return 1; }
91492
91493                         // priority for higher matchScore
91494                         var i = b.originalScore - a.originalScore;
91495                         if (i !== 0) { return i; }
91496
91497                         // priority if search string appears earlier in preset name
91498                         i = aCompare.indexOf(value) - bCompare.indexOf(value);
91499                         if (i !== 0) { return i; }
91500
91501                         // priority for shorter preset names
91502                         return aCompare.length - bCompare.length;
91503                     }
91504
91505                     var pool = this.collection;
91506                     if (countryCode) {
91507                         pool = pool.filter(function(a) {
91508                             if (a.countryCodes && a.countryCodes.indexOf(countryCode) === -1) {
91509                                 return false;
91510                             }
91511                             if (a.notCountryCodes && a.notCountryCodes.indexOf(countryCode) !== -1) {
91512                                 return false;
91513                             }
91514                             return true;
91515                         });
91516                     }
91517                     var searchable = pool.filter(function(a) {
91518                         return a.searchable !== false && a.suggestion !== true;
91519                     });
91520                     var suggestions = pool.filter(function(a) {
91521                         return a.suggestion === true;
91522                     });
91523
91524                     // matches value to preset.name
91525                     var leading_name = searchable
91526                         .filter(function(a) {
91527                             return leading(a.name().toLowerCase());
91528                         }).sort(sortNames);
91529
91530                     // matches value to preset.terms values
91531                     var leading_terms = searchable
91532                         .filter(function(a) {
91533                             return (a.terms() || []).some(leading);
91534                         });
91535
91536                     // matches value to preset.tags values
91537                     var leading_tag_values = searchable
91538                         .filter(function(a) {
91539                             return Object.values(a.tags || {})
91540                                 .filter(function(val) { return val !== '*'; })
91541                                 .some(leading);
91542                         });
91543
91544                     var leading_suggestions = suggestions
91545                         .filter(function(a) {
91546                             return leadingStrict(a.originalName.toLowerCase());
91547                         }).sort(sortNames);
91548
91549                     // finds close matches to value in preset.name
91550                     var similar_name = searchable
91551                         .map(function(a) {
91552                             return { preset: a, dist: utilEditDistance(value, a.name()) };
91553                         }).filter(function(a) {
91554                             return a.dist + Math.min(value.length - a.preset.name().length, 0) < 3;
91555                         }).sort(function(a, b) {
91556                             return a.dist - b.dist;
91557                         }).map(function(a) {
91558                             return a.preset;
91559                         });
91560
91561                     // finds close matches to value in preset.terms
91562                     var similar_terms = searchable
91563                         .filter(function(a) {
91564                             return (a.terms() || []).some(function(b) {
91565                                 return utilEditDistance(value, b) + Math.min(value.length - b.length, 0) < 3;
91566                             });
91567                         });
91568
91569                     var similar_suggestions = suggestions
91570                         .map(function(a) {
91571                             return { preset: a, dist: utilEditDistance(value, a.originalName.toLowerCase()) };
91572                         }).filter(function(a) {
91573                             return a.dist + Math.min(value.length - a.preset.originalName.length, 0) < 1;
91574                         }).sort(function(a, b) {
91575                             return a.dist - b.dist;
91576                         }).map(function(a) {
91577                             return a.preset;
91578                         });
91579
91580                     var results = leading_name.concat(
91581                         leading_suggestions,
91582                         leading_terms,
91583                         leading_tag_values,
91584                         similar_name,
91585                         similar_suggestions,
91586                         similar_terms
91587                     ).slice(0, maxSearchResults - 1);
91588
91589                     if (geometry) {
91590                         if (typeof geometry === 'string') {
91591                             results.push(presets.fallback(geometry));
91592                         } else {
91593                             geometry.forEach(function(geom) {
91594                                 results.push(presets.fallback(geom));
91595                             });
91596                         }
91597                     }
91598
91599                     return presetCollection(utilArrayUniq(results));
91600                 }
91601             };
91602
91603
91604             return presets;
91605         }
91606
91607         function presetCategory(id, category, all) {
91608             category = Object.assign({}, category);   // shallow copy
91609
91610             category.id = id;
91611
91612
91613             category.members = presetCollection(category.members.map(function(id) {
91614                 return all.item(id);
91615             }));
91616
91617
91618             category.geometry = category.members.collection.reduce(function(geometries, preset) {
91619                 for (var index in preset.geometry) {
91620                     var geometry = preset.geometry[index];
91621                     if (geometries.indexOf(geometry) === -1) {
91622                         geometries.push(geometry);
91623                     }
91624                 }
91625                 return geometries;
91626             }, []);
91627
91628
91629             category.matchGeometry = function(geometry) {
91630                 return category.geometry.indexOf(geometry) >= 0;
91631             };
91632
91633
91634             category.matchScore = function() {
91635                 return -1;
91636             };
91637
91638
91639             category.name = function() {
91640                 return t('presets.categories.' + id + '.name', {'default': id});
91641             };
91642
91643
91644             category.terms = function() {
91645                 return [];
91646             };
91647
91648
91649             return category;
91650         }
91651
91652         function presetField(id, field) {
91653             field = Object.assign({}, field);   // shallow copy
91654
91655             field.id = id;
91656
91657             // for use in classes, element ids, css selectors
91658             field.safeid = utilSafeClassName(id);
91659
91660             field.matchGeometry = function(geometry) {
91661                 return !field.geometry || field.geometry.indexOf(geometry) !== -1;
91662             };
91663
91664
91665             field.t = function(scope, options) {
91666                 return t('presets.fields.' + id + '.' + scope, options);
91667             };
91668
91669
91670             field.label = function() {
91671                 return field.overrideLabel || field.t('label', {'default': id});
91672             };
91673
91674
91675             var placeholder = field.placeholder;
91676             field.placeholder = function() {
91677                 return field.t('placeholder', {'default': placeholder});
91678             };
91679
91680
91681             field.originalTerms = (field.terms || []).join();
91682
91683             field.terms = function() {
91684                 return field.t('terms', { 'default': field.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
91685             };
91686
91687
91688             return field;
91689         }
91690
91691         function presetPreset(id, preset, fields, addable, rawPresets) {
91692             preset = Object.assign({}, preset);   // shallow copy
91693
91694             preset.id = id;
91695
91696             // for use in classes, element ids, css selectors
91697             preset.safeid = utilSafeClassName(id);
91698
91699             preset.parentPresetID = function() {
91700                 var endIndex = preset.id.lastIndexOf('/');
91701                 if (endIndex < 0) { return null; }
91702
91703                 return preset.id.substring(0, endIndex);
91704             };
91705
91706
91707             // For a preset without fields, use the fields of the parent preset.
91708             // Replace {preset} placeholders with the fields of the specified presets.
91709             function resolveFieldInheritance() {
91710
91711                 // Skip `fields` for the keys which define the preset.
91712                 // These are usually `typeCombo` fields like `shop=*`
91713                 function shouldInheritFieldWithID(fieldID) {
91714                     var f = fields[fieldID];
91715                     if (f.key) {
91716                         if (preset.tags[f.key] !== undefined &&
91717                             // inherit anyway if multiple values are allowed or just a checkbox
91718                             f.type !== 'multiCombo' && f.type !== 'semiCombo' && f.type !== 'check') {
91719                             return false;
91720                         }
91721                     }
91722                     return true;
91723                 }
91724
91725                 // returns an array of field IDs to inherit from the given presetID, if found
91726                 function inheritedFieldIDs(presetID, prop) {
91727                     if (!presetID) { return null; }
91728
91729                     var inheritPreset = rawPresets[presetID];
91730                     if (!inheritPreset) { return null; }
91731
91732                     var inheritFieldIDs = inheritPreset[prop] || [];
91733
91734                     if (prop === 'fields') {
91735                         inheritFieldIDs = inheritFieldIDs.filter(shouldInheritFieldWithID);
91736                     }
91737
91738                     return inheritFieldIDs;
91739                 }
91740
91741
91742                 ['fields', 'moreFields'].forEach(function(prop) {
91743                     var fieldIDs = [];
91744                     if (preset[prop] && preset[prop].length) {    // fields were defined
91745                         preset[prop].forEach(function(fieldID) {
91746                             var match = fieldID.match(/\{(.*)\}/);
91747                             if (match !== null) {        // presetID wrapped in braces {}
91748                                 var inheritIDs = inheritedFieldIDs(match[1], prop);
91749                                 if (inheritIDs !== null) {
91750                                     fieldIDs = fieldIDs.concat(inheritIDs);
91751                                 } else {
91752                                     /* eslint-disable no-console */
91753                                     console.log('Cannot resolve presetID ' + match[0] +
91754                                         ' found in ' + preset.id + ' ' + prop);
91755                                     /* eslint-enable no-console */
91756                                 }
91757                             } else {
91758                                 fieldIDs.push(fieldID);  // no braces - just a normal field
91759                             }
91760                         });
91761
91762                     } else {  // no fields defined, so use the parent's if possible
91763                         fieldIDs = inheritedFieldIDs(preset.parentPresetID(), prop);
91764                     }
91765                     // resolve duplicate fields
91766                     fieldIDs = utilArrayUniq(fieldIDs);
91767
91768                     // update this preset with the results
91769                     preset[prop] = fieldIDs;
91770
91771                     // update the raw object to allow for multiple levels of inheritance
91772                     rawPresets[preset.id][prop] = fieldIDs;
91773                 });
91774             }
91775
91776             if (rawPresets) {
91777                 resolveFieldInheritance();
91778             }
91779
91780             preset.fields = (preset.fields || []).map(getFields);
91781             preset.moreFields = (preset.moreFields || []).map(getFields);
91782             preset.geometry = (preset.geometry || []);
91783
91784             addable = addable || false;
91785
91786             function getFields(f) {
91787                 return fields[f];
91788             }
91789
91790
91791             preset.matchGeometry = function(geometry) {
91792                 return preset.geometry.indexOf(geometry) >= 0;
91793             };
91794
91795
91796             preset.originalScore = preset.matchScore || 1;
91797
91798
91799             preset.matchScore = function(entityTags) {
91800                 var tags = preset.tags;
91801                 var seen = {};
91802                 var score = 0;
91803                 var k;
91804
91805                 // match on tags
91806                 for (k in tags) {
91807                     seen[k] = true;
91808                     if (entityTags[k] === tags[k]) {
91809                         score += preset.originalScore;
91810                     } else if (tags[k] === '*' && k in entityTags) {
91811                         score += preset.originalScore / 2;
91812                     } else {
91813                         return -1;
91814                     }
91815                 }
91816
91817                 // boost score for additional matches in addTags - #6802
91818                 var addTags = preset.addTags;
91819                 for (k in addTags) {
91820                     if (!seen[k] && entityTags[k] === addTags[k]) {
91821                         score += preset.originalScore;
91822                     }
91823                 }
91824
91825                 return score;
91826             };
91827
91828
91829             var _textCache = {};
91830
91831             preset.t = function(scope, options) {
91832                 var textID = 'presets.presets.' + id + '.' + scope;
91833
91834                 if (_textCache[textID]) { return _textCache[textID]; }
91835
91836                 var text = t(textID, options);
91837                 _textCache[textID] = text;
91838                 return text;
91839             };
91840
91841
91842             preset.originalName = preset.name || '';
91843
91844
91845             preset.name = function() {
91846                 if (preset.suggestion) {
91847                     var path = id.split('/');
91848                     path.pop();  // remove brand name
91849                     // NOTE: insert an en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
91850                     return preset.originalName + ' – ' + t('presets.presets.' + path.join('/') + '.name');
91851                 }
91852                 return preset.t('name', { 'default': preset.originalName });
91853             };
91854
91855
91856             preset.originalTerms = (preset.terms || []).join();
91857
91858
91859             preset.terms = function() {
91860                 return preset.t('terms', { 'default': preset.originalTerms }).toLowerCase().trim().split(/\s*,+\s*/);
91861             };
91862
91863
91864             preset.isFallback = function() {
91865                 var tagCount = Object.keys(preset.tags).length;
91866                 return tagCount === 0 || (tagCount === 1 && preset.tags.hasOwnProperty('area'));
91867             };
91868
91869             preset.addable = function(val) {
91870                 if (!arguments.length) { return addable; }
91871                 addable = val;
91872                 return addable;
91873             };
91874
91875
91876             var reference = preset.reference || {};
91877             preset.reference = function(geometry) {
91878                 // Lookup documentation on Wikidata...
91879                 var qid = preset.tags.wikidata || preset.tags['brand:wikidata'] || preset.tags['operator:wikidata'];
91880                 if (qid) {
91881                     return { qid: qid };
91882                 }
91883
91884                 // Lookup documentation on OSM Wikibase...
91885                 var key = reference.key || Object.keys(utilObjectOmit(preset.tags, 'name'))[0];
91886                 var value = reference.value || preset.tags[key];
91887
91888                 if (geometry === 'relation' && key === 'type') {
91889                     if (value in preset.tags) {
91890                         key = value;
91891                         value = preset.tags[key];
91892                     } else {
91893                         return { rtype: value };
91894                     }
91895                 }
91896
91897                 if (value === '*') {
91898                     return { key: key };
91899                 } else {
91900                     return { key: key, value: value };
91901                 }
91902             };
91903
91904
91905             preset.removeTags = preset.removeTags || preset.addTags || preset.tags || {};
91906             preset.unsetTags = function(tags, geometry) {
91907                 tags = utilObjectOmit(tags, Object.keys(preset.removeTags));
91908
91909                 for (var f in preset.fields) {
91910                     var field = preset.fields[f];
91911                     if (field.matchGeometry(geometry) && field.default === tags[field.key]) {
91912                         delete tags[field.key];
91913                     }
91914                 }
91915
91916                 delete tags.area;
91917                 return tags;
91918             };
91919
91920
91921             preset.addTags = preset.addTags || preset.tags || {};
91922             preset.setTags = function(tags, geometry, skipFieldDefaults) {
91923                 var addTags = preset.addTags;
91924                 var k;
91925
91926                 tags = Object.assign({}, tags);   // shallow copy
91927
91928                 for (k in addTags) {
91929                     if (addTags[k] === '*') {
91930                         tags[k] = 'yes';
91931                     } else {
91932                         tags[k] = addTags[k];
91933                     }
91934                 }
91935
91936                 // Add area=yes if necessary.
91937                 // This is necessary if the geometry is already an area (e.g. user drew an area) AND any of:
91938                 // 1. chosen preset could be either an area or a line (`barrier=city_wall`)
91939                 // 2. chosen preset doesn't have a key in osmAreaKeys (`railway=station`)
91940                 if (!addTags.hasOwnProperty('area')) {
91941                     delete tags.area;
91942                     if (geometry === 'area') {
91943                         var needsAreaTag = true;
91944                         if (preset.geometry.indexOf('line') === -1) {
91945                             for (k in addTags) {
91946                                 if (k in osmAreaKeys) {
91947                                     needsAreaTag = false;
91948                                     break;
91949                                 }
91950                             }
91951                         }
91952                         if (needsAreaTag) {
91953                             tags.area = 'yes';
91954                         }
91955                     }
91956                 }
91957                 if (geometry && !skipFieldDefaults) {
91958                     for (var f in preset.fields) {
91959                         var field = preset.fields[f];
91960                         if (field.matchGeometry(geometry) && field.key && !tags[field.key] && field.default) {
91961                             tags[field.key] = field.default;
91962                         }
91963                     }
91964                 }
91965
91966                 return tags;
91967             };
91968
91969
91970             return preset;
91971         }
91972
91973         function presetIndex(context) {
91974             // a presetCollection with methods for
91975             // loading new data and returning defaults
91976
91977             var dispatch$1 = dispatch('recentsChange');
91978
91979             var all = presetCollection([]);
91980             var _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
91981             var _fields = {};
91982             var _universal = [];
91983             var _recents;
91984             // presets that the user can add
91985             var _addablePresetIDs;
91986
91987             // Index of presets by (geometry, tag key).
91988             var _index = {
91989                 point: {},
91990                 vertex: {},
91991                 line: {},
91992                 area: {},
91993                 relation: {}
91994             };
91995
91996             all.match = function(entity, resolver) {
91997                 return resolver.transient(entity, 'presetMatch', function() {
91998                     var geometry = entity.geometry(resolver);
91999
92000                     // Treat entities on addr:interpolation lines as points, not vertices - #3241
92001                     if (geometry === 'vertex' && entity.isOnAddressLine(resolver)) {
92002                         geometry = 'point';
92003                     }
92004
92005                     return all.matchTags(entity.tags, geometry);
92006                 });
92007             };
92008
92009             all.matchTags = function(tags, geometry) {
92010
92011                 var address;
92012                 var geometryMatches = _index[geometry];
92013                 var best = -1;
92014                 var match;
92015
92016                 for (var k in tags) {
92017                     // If any part of an address is present,
92018                     // allow fallback to "Address" preset - #4353
92019                     if (/^addr:/.test(k) && geometryMatches['addr:*']) {
92020                         address = geometryMatches['addr:*'][0];
92021                     }
92022
92023                     var keyMatches = geometryMatches[k];
92024                     if (!keyMatches) { continue; }
92025
92026                     for (var i = 0; i < keyMatches.length; i++) {
92027                         var score = keyMatches[i].matchScore(tags);
92028                         if (score > best) {
92029                             best = score;
92030                             match = keyMatches[i];
92031                         }
92032                     }
92033
92034                 }
92035
92036                 if (address && (!match || match.isFallback())) {
92037                     match = address;
92038                 }
92039                 return match || all.fallback(geometry);
92040             };
92041
92042             all.allowsVertex = function(entity, resolver) {
92043                 if (entity.type !== 'node') { return false; }
92044                 if (Object.keys(entity.tags).length === 0) { return true; }
92045
92046                 return resolver.transient(entity, 'vertexMatch', function() {
92047                     // address lines allow vertices to act as standalone points
92048                     if (entity.isOnAddressLine(resolver)) { return true; }
92049
92050                     var geometries = osmNodeGeometriesForTags(entity.tags);
92051                     if (geometries.vertex) { return true; }
92052                     if (geometries.point) { return false; }
92053                     // allow vertices for unspecified points
92054                     return true;
92055                 });
92056             };
92057
92058
92059             // Because of the open nature of tagging, iD will never have a complete
92060             // list of tags used in OSM, so we want it to have logic like "assume
92061             // that a closed way with an amenity tag is an area, unless the amenity
92062             // is one of these specific types". This function computes a structure
92063             // that allows testing of such conditions, based on the presets designated
92064             // as as supporting (or not supporting) the area geometry.
92065             //
92066             // The returned object L is a whitelist/blacklist of tags. A closed way
92067             // with a tag (k, v) is considered to be an area if `k in L && !(v in L[k])`
92068             // (see `Way#isArea()`). In other words, the keys of L form the whitelist,
92069             // and the subkeys form the blacklist.
92070             all.areaKeys = function() {
92071                 var areaKeys = {};
92072                 var ignore = ['barrier', 'highway', 'footway', 'railway', 'junction', 'type'];  // probably a line..
92073
92074                 // ignore name-suggestion-index and deprecated presets
92075                 var presets = all.collection.filter(function(p) {
92076                     return !p.suggestion && !p.replacement;
92077                 });
92078
92079                 // whitelist
92080                 presets.forEach(function(d) {
92081                     for (var key in d.tags) { break; }
92082                     if (!key) { return; }
92083                     if (ignore.indexOf(key) !== -1) { return; }
92084
92085                     if (d.geometry.indexOf('area') !== -1) {    // probably an area..
92086                         areaKeys[key] = areaKeys[key] || {};
92087                     }
92088                 });
92089
92090                 // blacklist
92091                 presets.forEach(function(d) {
92092                     for (var key in d.addTags) {
92093                         // examine all addTags to get a better sense of what can be tagged on lines - #6800
92094                         var value = d.addTags[key];
92095                         if (key in areaKeys &&                      // probably an area...
92096                             d.geometry.indexOf('line') !== -1 &&    // but sometimes a line
92097                             value !== '*') {
92098                             areaKeys[key][value] = true;
92099                         }
92100                     }
92101                 });
92102
92103                 return areaKeys;
92104             };
92105
92106             all.pointTags = function() {
92107                 return all.collection.reduce(function(pointTags, d) {
92108                     // ignore name-suggestion-index, deprecated, and generic presets
92109                     if (d.suggestion || d.replacement || d.searchable === false) { return pointTags; }
92110
92111                     // only care about the primary tag
92112                     for (var key in d.tags) { break; }
92113                     if (!key) { return pointTags; }
92114
92115                     // if this can be a point
92116                     if (d.geometry.indexOf('point') !== -1) {
92117                         pointTags[key] = pointTags[key] || {};
92118                         pointTags[key][d.tags[key]] = true;
92119                     }
92120                     return pointTags;
92121                 }, {});
92122             };
92123
92124             all.vertexTags = function() {
92125                 return all.collection.reduce(function(vertexTags, d) {
92126                     // ignore name-suggestion-index, deprecated, and generic presets
92127                     if (d.suggestion || d.replacement || d.searchable === false) { return vertexTags; }
92128
92129                     // only care about the primary tag
92130                     for (var key in d.tags) { break; }
92131                     if (!key) { return vertexTags; }
92132
92133                     // if this can be a vertex
92134                     if (d.geometry.indexOf('vertex') !== -1) {
92135                         vertexTags[key] = vertexTags[key] || {};
92136                         vertexTags[key][d.tags[key]] = true;
92137                     }
92138                     return vertexTags;
92139                 }, {});
92140             };
92141
92142             all.build = function(d, addable) {
92143                 if (d.fields) {
92144                     Object.keys(d.fields).forEach(function(id) {
92145                         var f = d.fields[id];
92146                         _fields[id] = presetField(id, f);
92147                         if (f.universal) {
92148                             _universal.push(_fields[id]);
92149                         }
92150                     });
92151                 }
92152
92153                 if (d.presets) {
92154                     var rawPresets = d.presets;
92155                     Object.keys(d.presets).forEach(function(id) {
92156                         var p = d.presets[id];
92157                         var existing = all.index(id);
92158                         var isAddable = typeof addable === 'function' ? addable(id, p) : addable;
92159                         if (existing !== -1) {
92160                             all.collection[existing] = presetPreset(id, p, _fields, isAddable, rawPresets);
92161                         } else {
92162                             all.collection.push(presetPreset(id, p, _fields, isAddable, rawPresets));
92163                         }
92164                     });
92165                 }
92166
92167                 if (d.categories) {
92168                     Object.keys(d.categories).forEach(function(id) {
92169                         var c = d.categories[id];
92170                         var existing = all.index(id);
92171                         if (existing !== -1) {
92172                             all.collection[existing] = presetCategory(id, c, all);
92173                         } else {
92174                             all.collection.push(presetCategory(id, c, all));
92175                         }
92176                     });
92177                 }
92178
92179                 var getItem = (all.item).bind(all);
92180                 if (_addablePresetIDs) {
92181                     ['area', 'line', 'point', 'vertex', 'relation'].forEach(function(geometry) {
92182                         _defaults[geometry] = presetCollection(_addablePresetIDs.map(getItem).filter(function(preset) {
92183                             return preset.geometry.indexOf(geometry) !== -1;
92184                         }));
92185                     });
92186                 } else if (d.defaults) {
92187                     _defaults = {
92188                         area: presetCollection(d.defaults.area.map(getItem)),
92189                         line: presetCollection(d.defaults.line.map(getItem)),
92190                         point: presetCollection(d.defaults.point.map(getItem)),
92191                         vertex: presetCollection(d.defaults.vertex.map(getItem)),
92192                         relation: presetCollection(d.defaults.relation.map(getItem))
92193                     };
92194                 }
92195
92196                 for (var i = 0; i < all.collection.length; i++) {
92197                     var preset = all.collection[i];
92198                     var geometry = preset.geometry;
92199
92200                     for (var j = 0; j < geometry.length; j++) {
92201                         var g = _index[geometry[j]];
92202                         for (var k in preset.tags) {
92203                             (g[k] = g[k] || []).push(preset);
92204                         }
92205                     }
92206                 }
92207                 return all;
92208             };
92209
92210             all.init = function(addablePresetIDs) {
92211                 all.collection = [];
92212                 _recents = null;
92213                 _addablePresetIDs = addablePresetIDs;
92214                 _fields = {};
92215                 _universal = [];
92216                 _index = { point: {}, vertex: {}, line: {}, area: {}, relation: {} };
92217
92218                 var addable = true;
92219                 if (addablePresetIDs) {
92220                     addable = function(presetID) {
92221                         return addablePresetIDs.indexOf(presetID) !== -1;
92222                     };
92223                 }
92224
92225                 return all.build(data.presets, addable);
92226             };
92227
92228
92229             all.reset = function() {
92230                 all.collection = [];
92231                 _defaults = { area: all, line: all, point: all, vertex: all, relation: all };
92232                 _fields = {};
92233                 _universal = [];
92234                 _recents = null;
92235
92236                 // Index of presets by (geometry, tag key).
92237                 _index = {
92238                     point: {},
92239                     vertex: {},
92240                     line: {},
92241                     area: {},
92242                     relation: {}
92243                 };
92244
92245                 return all;
92246             };
92247
92248             all.fromExternal = function(external, done) {
92249                 all.reset();
92250                 d3_json(external)
92251                     .then(function(externalPresets) {
92252                         all.build(data.presets, false);    // load the default presets as non-addable to start
92253
92254                         _addablePresetIDs = externalPresets.presets && Object.keys(externalPresets.presets);
92255
92256                         all.build(externalPresets, true);  // then load the external presets as addable
92257                     })
92258                     .catch(function() {
92259                         all.init();
92260                     })
92261                     .finally(function() {
92262                         done(all);
92263                     });
92264             };
92265
92266             all.field = function(id) {
92267                 return _fields[id];
92268             };
92269
92270             all.universal = function() {
92271                 return _universal;
92272             };
92273
92274             all.defaults = function(geometry, n) {
92275                 var rec = [];
92276                 if (!context.inIntro()) {
92277                     rec = all.recent().matchGeometry(geometry).collection.slice(0, 4);
92278                 }
92279                 var def = utilArrayUniq(rec.concat(_defaults[geometry].collection)).slice(0, n - 1);
92280                 return presetCollection(utilArrayUniq(rec.concat(def).concat(all.fallback(geometry))));
92281             };
92282
92283             all.recent = function() {
92284                 return presetCollection(utilArrayUniq(all.getRecents().map(function(d) {
92285                     return d.preset;
92286                 })));
92287             };
92288
92289             function RibbonItem(preset, geometry, source) {
92290                 var item = {};
92291                 item.preset = preset;
92292                 item.geometry = geometry;
92293                 item.source = source;
92294
92295                 item.isRecent = function() {
92296                     return item.source === 'recent';
92297                 };
92298                 item.matches = function(preset, geometry) {
92299                     return item.preset.id === preset.id && item.geometry === geometry;
92300                 };
92301                 item.minified = function() {
92302                     return {
92303                         pID: item.preset.id,
92304                         geom: item.geometry
92305                     };
92306                 };
92307                 return item;
92308             }
92309
92310             function ribbonItemForMinified(d, source) {
92311                 if (d && d.pID && d.geom) {
92312                     var preset = all.item(d.pID);
92313                     if (!preset) { return null; }
92314
92315                     var geom = d.geom;
92316                     // treat point and vertex features as one geometry
92317                     if (geom === 'vertex') { geom = 'point'; }
92318
92319                     // iD's presets could have changed since this was saved,
92320                     // so make sure it's still valid.
92321                     if (preset.matchGeometry(geom) || (geom === 'point' && preset.matchGeometry('vertex'))) {
92322                         return RibbonItem(preset, geom, source);
92323                     }
92324                 }
92325                 return null;
92326             }
92327
92328             function setRecents(items) {
92329                 _recents = items;
92330                 var minifiedItems = items.map(function(d) { return d.minified(); });
92331                 context.storage('preset_recents', JSON.stringify(minifiedItems));
92332
92333                 dispatch$1.call('recentsChange');
92334             }
92335
92336             all.getRecents = function() {
92337                 if (!_recents) {
92338                     // fetch from local storage
92339                     _recents = (JSON.parse(context.storage('preset_recents')) || [])
92340                         .reduce(function(output, d) {
92341                             var item = ribbonItemForMinified(d, 'recent');
92342                             if (item && item.preset.addable()) { output.push(item); }
92343                             return output;
92344                         }, []);
92345                 }
92346                 return _recents;
92347             };
92348
92349             all.removeRecent = function(preset, geometry) {
92350                 var item = all.recentMatching(preset, geometry);
92351                 if (item) {
92352                     var items = all.getRecents();
92353                     items.splice(items.indexOf(item), 1);
92354                     setRecents(items);
92355                 }
92356             };
92357
92358             all.recentMatching = function(preset, geometry) {
92359                 geometry = all.fallback(geometry).id;
92360                 var items = all.getRecents();
92361                 for (var index in items) {
92362                     if (items[index].matches(preset, geometry)) {
92363                         return items[index];
92364                     }
92365                 }
92366                 return null;
92367             };
92368
92369             all.moveItem = function(items, fromIndex, toIndex) {
92370                 if (fromIndex === toIndex ||
92371                     fromIndex < 0 || toIndex < 0 ||
92372                     fromIndex >= items.length || toIndex >= items.length) { return null; }
92373                 items.splice(toIndex, 0, items.splice(fromIndex, 1)[0]);
92374                 return items;
92375             };
92376
92377             all.moveRecent = function(item, beforeItem) {
92378                 var recents = all.getRecents();
92379                 var fromIndex = recents.indexOf(item);
92380                 var toIndex = recents.indexOf(beforeItem);
92381                 var items = all.moveItem(recents, fromIndex, toIndex);
92382                 if (items) { setRecents(items); }
92383             };
92384
92385             all.setMostRecent = function(preset, geometry) {
92386                 if (context.inIntro()) { return; }
92387                 if (preset.searchable === false) { return; }
92388
92389                 geometry = all.fallback(geometry).id;
92390
92391                 var items = all.getRecents();
92392                 var item = all.recentMatching(preset, geometry);
92393                 if (item) {
92394                     items.splice(items.indexOf(item), 1);
92395                 } else {
92396                     item = RibbonItem(preset, geometry, 'recent');
92397                 }
92398                 // allow 30 recents
92399                 if (items.length === 30) {
92400                     // remove the last recent (first in, first out)
92401                     items.pop();
92402                 }
92403                 // prepend array
92404                 items.unshift(item);
92405                 setRecents(items);
92406             };
92407
92408             return utilRebind(all, dispatch$1, 'on');
92409         }
92410
92411         function localeDateString(s) {
92412             if (!s) { return null; }
92413             var detected = utilDetect();
92414             var options = { day: 'numeric', month: 'short', year: 'numeric' };
92415             var d = new Date(s);
92416             if (isNaN(d.getTime())) { return null; }
92417             return d.toLocaleDateString(detected.locale, options);
92418         }
92419
92420         function vintageRange(vintage) {
92421             var s;
92422             if (vintage.start || vintage.end) {
92423                 s = (vintage.start || '?');
92424                 if (vintage.start !== vintage.end) {
92425                     s += ' - ' + (vintage.end || '?');
92426                 }
92427             }
92428             return s;
92429         }
92430
92431
92432         function rendererBackgroundSource(data) {
92433             var source = Object.assign({}, data);   // shallow copy
92434             var offset = [0, 0];
92435             var name = source.name;
92436             var description = source.description;
92437             var best = !!source.best;
92438             var template = source.encrypted ? utilAesDecrypt(source.template) : source.template;
92439
92440             source.tileSize = data.tileSize || 256;
92441             source.zoomExtent = data.zoomExtent || [0, 22];
92442             source.overzoom = data.overzoom !== false;
92443
92444             source.offset = function(_) {
92445                 if (!arguments.length) { return offset; }
92446                 offset = _;
92447                 return source;
92448             };
92449
92450
92451             source.nudge = function(val, zoomlevel) {
92452                 offset[0] += val[0] / Math.pow(2, zoomlevel);
92453                 offset[1] += val[1] / Math.pow(2, zoomlevel);
92454                 return source;
92455             };
92456
92457
92458             source.name = function() {
92459                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
92460                 return t('imagery.' + id_safe + '.name', { default: name });
92461             };
92462
92463
92464             source.description = function() {
92465                 var id_safe = source.id.replace(/\./g, '<TX_DOT>');
92466                 return t('imagery.' + id_safe + '.description', { default: description });
92467             };
92468
92469
92470             source.best = function() {
92471                 return best;
92472             };
92473
92474
92475             source.area = function() {
92476                 if (!data.polygon) { return Number.MAX_VALUE; }  // worldwide
92477                 var area = d3_geoArea({ type: 'MultiPolygon', coordinates: [ data.polygon ] });
92478                 return isNaN(area) ? 0 : area;
92479             };
92480
92481
92482             source.imageryUsed = function() {
92483                 return name || source.id;
92484             };
92485
92486
92487             source.template = function(_) {
92488                 if (!arguments.length) { return template; }
92489                 if (source.id === 'custom') { template = _; }
92490                 return source;
92491             };
92492
92493
92494             source.url = function(coord) {
92495                 if (this.type === 'wms') {
92496                     var tileToProjectedCoords = (function(x, y, z) {
92497                         //polyfill for IE11, PhantomJS
92498                         var sinh = Math.sinh || function(x) {
92499                             var y = Math.exp(x);
92500                             return (y - 1 / y) / 2;
92501                         };
92502
92503                         var zoomSize = Math.pow(2, z);
92504                         var lon = x / zoomSize * Math.PI * 2 - Math.PI;
92505                         var lat = Math.atan(sinh(Math.PI * (1 - 2 * y / zoomSize)));
92506
92507                         switch (this.projection) {
92508                             case 'EPSG:4326':
92509                                 return {
92510                                     x: lon * 180 / Math.PI,
92511                                     y: lat * 180 / Math.PI
92512                                 };
92513                             default: // EPSG:3857 and synonyms
92514                                 var mercCoords = mercatorRaw(lon, lat);
92515                                 return {
92516                                     x: 20037508.34 / Math.PI * mercCoords[0],
92517                                     y: 20037508.34 / Math.PI * mercCoords[1]
92518                                 };
92519                         }
92520                     }).bind(this);
92521
92522                     var tileSize = this.tileSize;
92523                     var projection = this.projection;
92524                     var minXmaxY = tileToProjectedCoords(coord[0], coord[1], coord[2]);
92525                     var maxXminY = tileToProjectedCoords(coord[0]+1, coord[1]+1, coord[2]);
92526                     return template.replace(/\{(\w+)\}/g, function (token, key) {
92527                       switch (key) {
92528                         case 'width':
92529                         case 'height':
92530                           return tileSize;
92531                         case 'proj':
92532                           return projection;
92533                         case 'wkid':
92534                           return projection.replace(/^EPSG:/, '');
92535                         case 'bbox':
92536                           return minXmaxY.x + ',' + maxXminY.y + ',' + maxXminY.x + ',' + minXmaxY.y;
92537                         case 'w':
92538                           return minXmaxY.x;
92539                         case 's':
92540                           return maxXminY.y;
92541                         case 'n':
92542                           return maxXminY.x;
92543                         case 'e':
92544                           return minXmaxY.y;
92545                         default:
92546                           return token;
92547                       }
92548                     });
92549                 }
92550                 return template
92551                     .replace('{x}', coord[0])
92552                     .replace('{y}', coord[1])
92553                     // TMS-flipped y coordinate
92554                     .replace(/\{[t-]y\}/, Math.pow(2, coord[2]) - coord[1] - 1)
92555                     .replace(/\{z(oom)?\}/, coord[2])
92556                     .replace(/\{switch:([^}]+)\}/, function(s, r) {
92557                         var subdomains = r.split(',');
92558                         return subdomains[(coord[0] + coord[1]) % subdomains.length];
92559                     })
92560                     .replace('{u}', function() {
92561                         var u = '';
92562                         for (var zoom = coord[2]; zoom > 0; zoom--) {
92563                             var b = 0;
92564                             var mask = 1 << (zoom - 1);
92565                             if ((coord[0] & mask) !== 0) { b++; }
92566                             if ((coord[1] & mask) !== 0) { b += 2; }
92567                             u += b.toString();
92568                         }
92569                         return u;
92570                     });
92571             };
92572
92573
92574             source.validZoom = function(z) {
92575                 return source.zoomExtent[0] <= z &&
92576                     (source.overzoom || source.zoomExtent[1] > z);
92577             };
92578
92579
92580             source.isLocatorOverlay = function() {
92581                 return source.id === 'mapbox_locator_overlay';
92582             };
92583
92584
92585             /* hides a source from the list, but leaves it available for use */
92586             source.isHidden = function() {
92587                 return source.id === 'DigitalGlobe-Premium-vintage' ||
92588                     source.id === 'DigitalGlobe-Standard-vintage';
92589             };
92590
92591
92592             source.copyrightNotices = function() {};
92593
92594
92595             source.getMetadata = function(center, tileCoord, callback) {
92596                 var vintage = {
92597                     start: localeDateString(source.startDate),
92598                     end: localeDateString(source.endDate)
92599                 };
92600                 vintage.range = vintageRange(vintage);
92601
92602                 var metadata = { vintage: vintage };
92603                 callback(null, metadata);
92604             };
92605
92606
92607             return source;
92608         }
92609
92610
92611         rendererBackgroundSource.Bing = function(data, dispatch) {
92612             // http://msdn.microsoft.com/en-us/library/ff701716.aspx
92613             // http://msdn.microsoft.com/en-us/library/ff701701.aspx
92614
92615             data.template = 'https://ecn.t{switch:0,1,2,3}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z';
92616
92617             var bing = rendererBackgroundSource(data);
92618             // var key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU'; // P2, JOSM, etc
92619             var key = 'Ak5oTE46TUbjRp08OFVcGpkARErDobfpuyNKa-W2mQ8wbt1K1KL8p1bIRwWwcF-Q';    // iD
92620
92621
92622             var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key;
92623             var cache = {};
92624             var inflight = {};
92625             var providers = [];
92626
92627             d3_json(url)
92628                 .then(function(json) {
92629                     providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
92630                         return {
92631                             attribution: provider.attribution,
92632                             areas: provider.coverageAreas.map(function(area) {
92633                                 return {
92634                                     zoom: [area.zoomMin, area.zoomMax],
92635                                     extent: geoExtent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
92636                                 };
92637                             })
92638                         };
92639                     });
92640                     dispatch.call('change');
92641                 })
92642                 .catch(function() {
92643                     /* ignore */
92644                 });
92645
92646
92647             bing.copyrightNotices = function(zoom, extent) {
92648                 zoom = Math.min(zoom, 21);
92649                 return providers.filter(function(provider) {
92650                     return provider.areas.some(function(area) {
92651                         return extent.intersects(area.extent) &&
92652                             area.zoom[0] <= zoom &&
92653                             area.zoom[1] >= zoom;
92654                     });
92655                 }).map(function(provider) {
92656                     return provider.attribution;
92657                 }).join(', ');
92658             };
92659
92660
92661             bing.getMetadata = function(center, tileCoord, callback) {
92662                 var tileID = tileCoord.slice(0, 3).join('/');
92663                 var zoom = Math.min(tileCoord[2], 21);
92664                 var centerPoint = center[1] + ',' + center[0];  // lat,lng
92665                 var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/' + centerPoint +
92666                         '?zl=' + zoom + '&key=' + key;
92667
92668                 if (inflight[tileID]) { return; }
92669
92670                 if (!cache[tileID]) {
92671                     cache[tileID] = {};
92672                 }
92673                 if (cache[tileID] && cache[tileID].metadata) {
92674                     return callback(null, cache[tileID].metadata);
92675                 }
92676
92677                 inflight[tileID] = true;
92678                 d3_json(url)
92679                     .then(function(result) {
92680                         delete inflight[tileID];
92681                         if (!result) {
92682                             throw new Error('Unknown Error');
92683                         }
92684                         var vintage = {
92685                             start: localeDateString(result.resourceSets[0].resources[0].vintageStart),
92686                             end: localeDateString(result.resourceSets[0].resources[0].vintageEnd)
92687                         };
92688                         vintage.range = vintageRange(vintage);
92689
92690                         var metadata = { vintage: vintage };
92691                         cache[tileID].metadata = metadata;
92692                         if (callback) { callback(null, metadata); }
92693                     })
92694                     .catch(function(err) {
92695                         delete inflight[tileID];
92696                         if (callback) { callback(err.message); }
92697                     });
92698             };
92699
92700
92701             bing.terms_url = 'https://blog.openstreetmap.org/2010/11/30/microsoft-imagery-details';
92702
92703
92704             return bing;
92705         };
92706
92707
92708
92709         rendererBackgroundSource.Esri = function(data) {
92710             // in addition to using the tilemap at zoom level 20, overzoom real tiles - #4327 (deprecated technique, but it works)
92711             if (data.template.match(/blankTile/) === null) {
92712                 data.template = data.template + '?blankTile=false';
92713             }
92714
92715             var esri = rendererBackgroundSource(data);
92716             var cache = {};
92717             var inflight = {};
92718             var _prevCenter;
92719
92720             // use a tilemap service to set maximum zoom for esri tiles dynamically
92721             // https://developers.arcgis.com/documentation/tiled-elevation-service/
92722             esri.fetchTilemap = function(center) {
92723                 // skip if we have already fetched a tilemap within 5km
92724                 if (_prevCenter && geoSphericalDistance(center, _prevCenter) < 5000) { return; }
92725                 _prevCenter = center;
92726
92727                 // tiles are available globally to zoom level 19, afterward they may or may not be present
92728                 var z = 20;
92729
92730                 // first generate a random url using the template
92731                 var dummyUrl = esri.url([1,2,3]);
92732
92733                 // calculate url z/y/x from the lat/long of the center of the map
92734                 var x = (Math.floor((center[0] + 180) / 360 * Math.pow(2, z)));
92735                 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)));
92736
92737                 // fetch an 8x8 grid to leverage cache
92738                 var tilemapUrl = dummyUrl.replace(/tile\/[0-9]+\/[0-9]+\/[0-9]+\?blankTile=false/, 'tilemap') + '/' + z + '/' + y + '/' + x + '/8/8';
92739
92740                 // make the request and introspect the response from the tilemap server
92741                 d3_json(tilemapUrl)
92742                     .then(function(tilemap) {
92743                         if (!tilemap) {
92744                             throw new Error('Unknown Error');
92745                         }
92746                         var hasTiles = true;
92747                         for (var i = 0; i < tilemap.data.length; i++) {
92748                             // 0 means an individual tile in the grid doesn't exist
92749                             if (!tilemap.data[i]) {
92750                                 hasTiles = false;
92751                                 break;
92752                             }
92753                         }
92754
92755                         // if any tiles are missing at level 20 we restrict maxZoom to 19
92756                         esri.zoomExtent[1] = (hasTiles ? 22 : 19);
92757                     })
92758                     .catch(function() {
92759                         /* ignore */
92760                     });
92761             };
92762
92763
92764             esri.getMetadata = function(center, tileCoord, callback) {
92765                 var tileID = tileCoord.slice(0, 3).join('/');
92766                 var zoom = Math.min(tileCoord[2], esri.zoomExtent[1]);
92767                 var centerPoint = center[0] + ',' + center[1];  // long, lat (as it should be)
92768                 var unknown = t('info_panels.background.unknown');
92769                 var metadataLayer;
92770                 var vintage = {};
92771                 var metadata = {};
92772
92773                 if (inflight[tileID]) { return; }
92774
92775                 switch (true) {
92776                     case (zoom >= 20 && esri.id === 'EsriWorldImageryClarity'):
92777                         metadataLayer = 4;
92778                         break;
92779                     case zoom >= 19:
92780                         metadataLayer = 3;
92781                         break;
92782                     case zoom >= 17:
92783                         metadataLayer = 2;
92784                         break;
92785                     case zoom >= 13:
92786                         metadataLayer = 0;
92787                         break;
92788                     default:
92789                         metadataLayer = 99;
92790                 }
92791
92792                 var url;
92793                 // build up query using the layer appropriate to the current zoom
92794                 if (esri.id === 'EsriWorldImagery') {
92795                     url = 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/';
92796                 } else if (esri.id === 'EsriWorldImageryClarity') {
92797                     url = 'https://serviceslab.arcgisonline.com/arcgis/rest/services/Clarity_World_Imagery/MapServer/';
92798                 }
92799
92800                 url += metadataLayer + '/query?returnGeometry=false&geometry=' + centerPoint + '&inSR=4326&geometryType=esriGeometryPoint&outFields=*&f=json';
92801
92802                 if (!cache[tileID]) {
92803                     cache[tileID] = {};
92804                 }
92805                 if (cache[tileID] && cache[tileID].metadata) {
92806                     return callback(null, cache[tileID].metadata);
92807                 }
92808
92809                 // accurate metadata is only available >= 13
92810                 if (metadataLayer === 99) {
92811                     vintage = {
92812                         start: null,
92813                         end: null,
92814                         range: null
92815                     };
92816                     metadata = {
92817                         vintage: null,
92818                         source: unknown,
92819                         description: unknown,
92820                         resolution: unknown,
92821                         accuracy: unknown
92822                     };
92823
92824                     callback(null, metadata);
92825
92826                 } else {
92827                     inflight[tileID] = true;
92828                     d3_json(url)
92829                         .then(function(result) {
92830                             delete inflight[tileID];
92831                             if (!result) {
92832                                 throw new Error('Unknown Error');
92833                             } else if (result.features && result.features.length < 1) {
92834                                 throw new Error('No Results');
92835                             } else if (result.error && result.error.message) {
92836                                 throw new Error(result.error.message);
92837                             }
92838
92839                             // pass through the discrete capture date from metadata
92840                             var captureDate = localeDateString(result.features[0].attributes.SRC_DATE2);
92841                             vintage = {
92842                                 start: captureDate,
92843                                 end: captureDate,
92844                                 range: captureDate
92845                             };
92846                             metadata = {
92847                                 vintage: vintage,
92848                                 source: clean(result.features[0].attributes.NICE_NAME),
92849                                 description: clean(result.features[0].attributes.NICE_DESC),
92850                                 resolution: clean(result.features[0].attributes.SRC_RES),
92851                                 accuracy: clean(result.features[0].attributes.SRC_ACC)
92852                             };
92853
92854                             // append units - meters
92855                             if (isFinite(metadata.resolution)) {
92856                                 metadata.resolution += ' m';
92857                             }
92858                             if (isFinite(metadata.accuracy)) {
92859                                 metadata.accuracy += ' m';
92860                             }
92861
92862                             cache[tileID].metadata = metadata;
92863                             if (callback) { callback(null, metadata); }
92864                         })
92865                         .catch(function(err) {
92866                             delete inflight[tileID];
92867                             if (callback) { callback(err.message); }
92868                         });
92869                 }
92870
92871
92872                 function clean(val) {
92873                     return String(val).trim() || unknown;
92874                 }
92875             };
92876
92877             return esri;
92878         };
92879
92880
92881         rendererBackgroundSource.None = function() {
92882             var source = rendererBackgroundSource({ id: 'none', template: '' });
92883
92884
92885             source.name = function() {
92886                 return t('background.none');
92887             };
92888
92889
92890             source.imageryUsed = function() {
92891                 return null;
92892             };
92893
92894
92895             source.area = function() {
92896                 return -1;  // sources in background pane are sorted by area
92897             };
92898
92899
92900             return source;
92901         };
92902
92903
92904         rendererBackgroundSource.Custom = function(template) {
92905             var source = rendererBackgroundSource({ id: 'custom', template: template });
92906
92907
92908             source.name = function() {
92909                 return t('background.custom');
92910             };
92911
92912
92913             source.imageryUsed = function() {
92914                 return 'Custom (' + source.template() + ' )';
92915             };
92916
92917
92918             source.area = function() {
92919                 return -2;  // sources in background pane are sorted by area
92920             };
92921
92922
92923             return source;
92924         };
92925
92926         function rendererTileLayer(context) {
92927             var transformProp = utilPrefixCSSProperty('Transform');
92928             var tiler = utilTiler();
92929
92930             var _tileSize = 256;
92931             var _projection;
92932             var _cache = {};
92933             var _tileOrigin;
92934             var _zoom;
92935             var _source;
92936
92937
92938             function tileSizeAtZoom(d, z) {
92939                 var EPSILON = 0.002;    // close seams
92940                 return ((_tileSize * Math.pow(2, z - d[2])) / _tileSize) + EPSILON;
92941             }
92942
92943
92944             function atZoom(t, distance) {
92945                 var power = Math.pow(2, distance);
92946                 return [
92947                     Math.floor(t[0] * power),
92948                     Math.floor(t[1] * power),
92949                     t[2] + distance
92950                 ];
92951             }
92952
92953
92954             function lookUp(d) {
92955                 for (var up = -1; up > -d[2]; up--) {
92956                     var tile = atZoom(d, up);
92957                     if (_cache[_source.url(tile)] !== false) {
92958                         return tile;
92959                     }
92960                 }
92961             }
92962
92963
92964             function uniqueBy(a, n) {
92965                 var o = [];
92966                 var seen = {};
92967                 for (var i = 0; i < a.length; i++) {
92968                     if (seen[a[i][n]] === undefined) {
92969                         o.push(a[i]);
92970                         seen[a[i][n]] = true;
92971                     }
92972                 }
92973                 return o;
92974             }
92975
92976
92977             function addSource(d) {
92978                 d.push(_source.url(d));
92979                 return d;
92980             }
92981
92982
92983             // Update tiles based on current state of `projection`.
92984             function background(selection) {
92985                 _zoom = geoScaleToZoom(_projection.scale(), _tileSize);
92986
92987                 var pixelOffset;
92988                 if (_source) {
92989                     pixelOffset = [
92990                         _source.offset()[0] * Math.pow(2, _zoom),
92991                         _source.offset()[1] * Math.pow(2, _zoom)
92992                     ];
92993                 } else {
92994                     pixelOffset = [0, 0];
92995                 }
92996
92997                 var translate = [
92998                     _projection.translate()[0] + pixelOffset[0],
92999                     _projection.translate()[1] + pixelOffset[1]
93000                 ];
93001
93002                 tiler
93003                     .scale(_projection.scale() * 2 * Math.PI)
93004                     .translate(translate);
93005
93006                 _tileOrigin = [
93007                     _projection.scale() * Math.PI - translate[0],
93008                     _projection.scale() * Math.PI - translate[1]
93009                 ];
93010
93011                 render(selection);
93012             }
93013
93014
93015             // Derive the tiles onscreen, remove those offscreen and position them.
93016             // Important that this part not depend on `_projection` because it's
93017             // rentered when tiles load/error (see #644).
93018             function render(selection) {
93019                 if (!_source) { return; }
93020                 var requests = [];
93021                 var showDebug = context.getDebug('tile') && !_source.overlay;
93022
93023                 if (_source.validZoom(_zoom)) {
93024                     tiler.skipNullIsland(!!_source.overlay);
93025
93026                     tiler().forEach(function(d) {
93027                         addSource(d);
93028                         if (d[3] === '') { return; }
93029                         if (typeof d[3] !== 'string') { return; } // Workaround for #2295
93030                         requests.push(d);
93031                         if (_cache[d[3]] === false && lookUp(d)) {
93032                             requests.push(addSource(lookUp(d)));
93033                         }
93034                     });
93035
93036                     requests = uniqueBy(requests, 3).filter(function(r) {
93037                         // don't re-request tiles which have failed in the past
93038                         return _cache[r[3]] !== false;
93039                     });
93040                 }
93041
93042                 function load(d) {
93043                     _cache[d[3]] = true;
93044                     d3_select(this)
93045                         .on('error', null)
93046                         .on('load', null)
93047                         .classed('tile-loaded', true);
93048                     render(selection);
93049                 }
93050
93051                 function error(d) {
93052                     _cache[d[3]] = false;
93053                     d3_select(this)
93054                         .on('error', null)
93055                         .on('load', null)
93056                         .remove();
93057                     render(selection);
93058                 }
93059
93060                 function imageTransform(d) {
93061                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
93062                     var scale = tileSizeAtZoom(d, _zoom);
93063                     return 'translate(' +
93064                         ((d[0] * ts) - _tileOrigin[0]) + 'px,' +
93065                         ((d[1] * ts) - _tileOrigin[1]) + 'px) ' +
93066                         'scale(' + scale + ',' + scale + ')';
93067                 }
93068
93069                 function tileCenter(d) {
93070                     var ts = _tileSize * Math.pow(2, _zoom - d[2]);
93071                     return [
93072                         ((d[0] * ts) - _tileOrigin[0] + (ts / 2)),
93073                         ((d[1] * ts) - _tileOrigin[1] + (ts / 2))
93074                     ];
93075                 }
93076
93077                 function debugTransform(d) {
93078                     var coord = tileCenter(d);
93079                     return 'translate(' + coord[0] + 'px,' + coord[1] + 'px)';
93080                 }
93081
93082
93083                 // Pick a representative tile near the center of the viewport
93084                 // (This is useful for sampling the imagery vintage)
93085                 var dims = tiler.size();
93086                 var mapCenter = [dims[0] / 2, dims[1] / 2];
93087                 var minDist = Math.max(dims[0], dims[1]);
93088                 var nearCenter;
93089
93090                 requests.forEach(function(d) {
93091                     var c = tileCenter(d);
93092                     var dist = geoVecLength(c, mapCenter);
93093                     if (dist < minDist) {
93094                         minDist = dist;
93095                         nearCenter = d;
93096                     }
93097                 });
93098
93099
93100                 var image = selection.selectAll('img')
93101                     .data(requests, function(d) { return d[3]; });
93102
93103                 image.exit()
93104                     .style(transformProp, imageTransform)
93105                     .classed('tile-removing', true)
93106                     .classed('tile-center', false)
93107                     .each(function() {
93108                         var tile = d3_select(this);
93109                         window.setTimeout(function() {
93110                             if (tile.classed('tile-removing')) {
93111                                 tile.remove();
93112                             }
93113                         }, 300);
93114                     });
93115
93116                 image.enter()
93117                   .append('img')
93118                     .attr('class', 'tile')
93119                     .style('width', _tileSize + 'px')
93120                     .style('height', _tileSize + 'px')
93121                     .attr('src', function(d) { return d[3]; })
93122                     .on('error', error)
93123                     .on('load', load)
93124                   .merge(image)
93125                     .style(transformProp, imageTransform)
93126                     .classed('tile-debug', showDebug)
93127                     .classed('tile-removing', false)
93128                     .classed('tile-center', function(d) { return d === nearCenter; });
93129
93130
93131
93132                 var debug = selection.selectAll('.tile-label-debug')
93133                     .data(showDebug ? requests : [], function(d) { return d[3]; });
93134
93135                 debug.exit()
93136                     .remove();
93137
93138                 if (showDebug) {
93139                     var debugEnter = debug.enter()
93140                         .append('div')
93141                         .attr('class', 'tile-label-debug');
93142
93143                     debugEnter
93144                         .append('div')
93145                         .attr('class', 'tile-label-debug-coord');
93146
93147                     debugEnter
93148                         .append('div')
93149                         .attr('class', 'tile-label-debug-vintage');
93150
93151                     debug = debug.merge(debugEnter);
93152
93153                     debug
93154                         .style(transformProp, debugTransform);
93155
93156                     debug
93157                         .selectAll('.tile-label-debug-coord')
93158                         .text(function(d) { return d[2] + ' / ' + d[0] + ' / ' + d[1]; });
93159
93160                     debug
93161                         .selectAll('.tile-label-debug-vintage')
93162                         .each(function(d) {
93163                             var span = d3_select(this);
93164                             var center = context.projection.invert(tileCenter(d));
93165                             _source.getMetadata(center, d, function(err, result) {
93166                                 span.text((result && result.vintage && result.vintage.range) ||
93167                                     t('info_panels.background.vintage') + ': ' + t('info_panels.background.unknown')
93168                                 );
93169                             });
93170                         });
93171                 }
93172
93173             }
93174
93175
93176             background.projection = function(val) {
93177                 if (!arguments.length) { return _projection; }
93178                 _projection = val;
93179                 return background;
93180             };
93181
93182
93183             background.dimensions = function(val) {
93184                 if (!arguments.length) { return tiler.size(); }
93185                 tiler.size(val);
93186                 return background;
93187             };
93188
93189
93190             background.source = function(val) {
93191                 if (!arguments.length) { return _source; }
93192                 _source = val;
93193                 _tileSize = _source.tileSize;
93194                 _cache = {};
93195                 tiler.tileSize(_source.tileSize).zoomExtent(_source.zoomExtent);
93196                 return background;
93197             };
93198
93199
93200             return background;
93201         }
93202
93203         function rendererBackground(context) {
93204             var dispatch$1 = dispatch('change');
93205             var detected = utilDetect();
93206             var baseLayer = rendererTileLayer(context).projection(context.projection);
93207             var _isValid = true;
93208             var _overlayLayers = [];
93209             var _backgroundSources = [];
93210             var _brightness = 1;
93211             var _contrast = 1;
93212             var _saturation = 1;
93213             var _sharpness = 1;
93214
93215
93216             function background(selection) {
93217                 // If we are displaying an Esri basemap at high zoom,
93218                 // check its tilemap to see how high the zoom can go
93219                 if (context.map().zoom() > 18) {
93220                     var basemap = baseLayer.source();
93221                     if (basemap && /^EsriWorldImagery/.test(basemap.id)) {
93222                         var center = context.map().center();
93223                         basemap.fetchTilemap(center);
93224                     }
93225                 }
93226
93227                 // Is the imagery valid here? - #4827
93228                 var sources = background.sources(context.map().extent());
93229                 var wasValid = _isValid;
93230                 _isValid = !!sources
93231                     .filter(function(d) { return d === baseLayer.source(); }).length;
93232
93233                 if (wasValid !== _isValid) {      // change in valid status
93234                     background.updateImagery();
93235                 }
93236
93237
93238                 var baseFilter = '';
93239                 if (detected.cssfilters) {
93240                     if (_brightness !== 1) {
93241                         baseFilter += 'brightness(' + _brightness + ')';
93242                     }
93243                     if (_contrast !== 1) {
93244                         baseFilter += 'contrast(' + _contrast + ')';
93245                     }
93246                     if (_saturation !== 1) {
93247                         baseFilter += 'saturate(' + _saturation + ')';
93248                     }
93249                     if (_sharpness < 1) {  // gaussian blur
93250                         var blur = d3_interpolateNumber(0.5, 5)(1 - _sharpness);
93251                         baseFilter += 'blur(' + blur + 'px)';
93252                     }
93253                 }
93254
93255                 var base = selection.selectAll('.layer-background')
93256                     .data([0]);
93257
93258                 base = base.enter()
93259                     .insert('div', '.layer-data')
93260                     .attr('class', 'layer layer-background')
93261                     .merge(base);
93262
93263                 if (detected.cssfilters) {
93264                     base.style('filter', baseFilter || null);
93265                 } else {
93266                     base.style('opacity', _brightness);
93267                 }
93268
93269
93270                 var imagery = base.selectAll('.layer-imagery')
93271                     .data([0]);
93272
93273                 imagery.enter()
93274                     .append('div')
93275                     .attr('class', 'layer layer-imagery')
93276                     .merge(imagery)
93277                     .call(baseLayer);
93278
93279
93280                 var maskFilter = '';
93281                 var mixBlendMode = '';
93282                 if (detected.cssfilters && _sharpness > 1) {  // apply unsharp mask
93283                     mixBlendMode = 'overlay';
93284                     maskFilter = 'saturate(0) blur(3px) invert(1)';
93285
93286                     var contrast = _sharpness - 1;
93287                     maskFilter += ' contrast(' + contrast + ')';
93288
93289                     var brightness = d3_interpolateNumber(1, 0.85)(_sharpness - 1);
93290                     maskFilter += ' brightness(' + brightness + ')';
93291                 }
93292
93293                 var mask = base.selectAll('.layer-unsharp-mask')
93294                     .data(detected.cssfilters && _sharpness > 1 ? [0] : []);
93295
93296                 mask.exit()
93297                     .remove();
93298
93299                 mask.enter()
93300                     .append('div')
93301                     .attr('class', 'layer layer-mask layer-unsharp-mask')
93302                     .merge(mask)
93303                     .call(baseLayer)
93304                     .style('filter', maskFilter || null)
93305                     .style('mix-blend-mode', mixBlendMode || null);
93306
93307
93308                 var overlays = selection.selectAll('.layer-overlay')
93309                     .data(_overlayLayers, function(d) { return d.source().name(); });
93310
93311                 overlays.exit()
93312                     .remove();
93313
93314                 overlays.enter()
93315                     .insert('div', '.layer-data')
93316                     .attr('class', 'layer layer-overlay')
93317                     .merge(overlays)
93318                     .each(function(layer) { d3_select(this).call(layer); });
93319             }
93320
93321
93322             background.updateImagery = function() {
93323                 var b = baseLayer.source();
93324                 if (context.inIntro() || !b) { return; }
93325
93326                 var o = _overlayLayers
93327                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
93328                     .map(function (d) { return d.source().id; })
93329                     .join(',');
93330
93331                 var meters = geoOffsetToMeters(b.offset());
93332                 var epsilon = 0.01;
93333                 var x = +meters[0].toFixed(2);
93334                 var y = +meters[1].toFixed(2);
93335                 var q = utilStringQs(window.location.hash.substring(1));
93336
93337                 var id = b.id;
93338                 if (id === 'custom') {
93339                     id = 'custom:' + b.template();
93340                 }
93341
93342                 if (id) {
93343                     q.background = id;
93344                 } else {
93345                     delete q.background;
93346                 }
93347
93348                 if (o) {
93349                     q.overlays = o;
93350                 } else {
93351                     delete q.overlays;
93352                 }
93353
93354                 if (Math.abs(x) > epsilon || Math.abs(y) > epsilon) {
93355                     q.offset = x + ',' + y;
93356                 } else {
93357                     delete q.offset;
93358                 }
93359
93360                 if (!window.mocha) {
93361                     window.location.replace('#' + utilQsString(q, true));
93362                 }
93363
93364                 var imageryUsed = [];
93365                 var photoOverlaysUsed = [];
93366
93367                 var current = b.imageryUsed();
93368                 if (current && _isValid) {
93369                     imageryUsed.push(current);
93370                 }
93371
93372                 _overlayLayers
93373                     .filter(function (d) { return !d.source().isLocatorOverlay() && !d.source().isHidden(); })
93374                     .forEach(function (d) { imageryUsed.push(d.source().imageryUsed()); });
93375
93376                 var data = context.layers().layer('data');
93377                 if (data && data.enabled() && data.hasData()) {
93378                     imageryUsed.push(data.getSrc());
93379                 }
93380
93381                 var photoOverlayLayers = {
93382                     streetside: 'Bing Streetside',
93383                     mapillary: 'Mapillary Images',
93384                     'mapillary-map-features': 'Mapillary Map Features',
93385                     'mapillary-signs': 'Mapillary Signs',
93386                     openstreetcam: 'OpenStreetCam Images'
93387                 };
93388
93389                 for (var layerID in photoOverlayLayers) {
93390                     var layer = context.layers().layer(layerID);
93391                     if (layer && layer.enabled()) {
93392                         photoOverlaysUsed.push(layerID);
93393                         imageryUsed.push(photoOverlayLayers[layerID]);
93394                     }
93395                 }
93396
93397                 context.history().photoOverlaysUsed(photoOverlaysUsed);
93398                 context.history().imageryUsed(imageryUsed);
93399             };
93400
93401
93402             background.sources = function(extent, zoom, alwaysIncludeSelected) {
93403                 if (!data.imagery || !data.imagery.query) { return []; }   // called before init()?
93404
93405                 var matchIDs = {};
93406                 var matchImagery = data.imagery.query.bbox(extent.rectangle(), true) || [];
93407                 matchImagery.forEach(function(d) { matchIDs[d.id] = true; });
93408
93409                 var currentSource = baseLayer.source();
93410
93411                 return _backgroundSources.filter(function(source) {
93412                     // optionally always include the selected source
93413                     if (alwaysIncludeSelected && currentSource === source) { return true; }
93414
93415                     // always show sources with worldwide coverage
93416                     if (!source.polygon) { return true; }
93417
93418                     // optionally don't include non-worldwide sources at low zooms
93419                     if (zoom && zoom < 6) { return false; }
93420
93421                     // don't include sources outside the extent
93422                     return matchIDs[source.id];
93423                 });
93424             };
93425
93426
93427             background.dimensions = function(d) {
93428                 if (!d) { return; }
93429                 baseLayer.dimensions(d);
93430
93431                 _overlayLayers.forEach(function(layer) {
93432                     layer.dimensions(d);
93433                 });
93434             };
93435
93436
93437             background.baseLayerSource = function(d) {
93438                 if (!arguments.length) { return baseLayer.source(); }
93439
93440                 // test source against OSM imagery blacklists..
93441                 var osm = context.connection();
93442                 if (!osm) { return background; }
93443
93444                 var blacklists = context.connection().imageryBlacklists();
93445                 var template = d.template();
93446                 var fail = false;
93447                 var tested = 0;
93448                 var regex;
93449
93450                 for (var i = 0; i < blacklists.length; i++) {
93451                     try {
93452                         regex = new RegExp(blacklists[i]);
93453                         fail = regex.test(template);
93454                         tested++;
93455                         if (fail) { break; }
93456                     } catch (e) {
93457                         /* noop */
93458                     }
93459                 }
93460
93461                 // ensure at least one test was run.
93462                 if (!tested) {
93463                     regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
93464                     fail = regex.test(template);
93465                 }
93466
93467                 baseLayer.source(!fail ? d : background.findSource('none'));
93468                 dispatch$1.call('change');
93469                 background.updateImagery();
93470                 return background;
93471             };
93472
93473
93474             background.findSource = function(id) {
93475                 return _backgroundSources.find(function(d) {
93476                     return d.id && d.id === id;
93477                 });
93478             };
93479
93480
93481             background.bing = function() {
93482                 background.baseLayerSource(background.findSource('Bing'));
93483             };
93484
93485
93486             background.showsLayer = function(d) {
93487                 var baseSource = baseLayer.source();
93488                 if (!d || !baseSource) { return false; }
93489                 return d.id === baseSource.id ||
93490                     _overlayLayers.some(function(layer) { return d.id === layer.source().id; });
93491             };
93492
93493
93494             background.overlayLayerSources = function() {
93495                 return _overlayLayers.map(function (l) { return l.source(); });
93496             };
93497
93498
93499             background.toggleOverlayLayer = function(d) {
93500                 var layer;
93501                 for (var i = 0; i < _overlayLayers.length; i++) {
93502                     layer = _overlayLayers[i];
93503                     if (layer.source() === d) {
93504                         _overlayLayers.splice(i, 1);
93505                         dispatch$1.call('change');
93506                         background.updateImagery();
93507                         return;
93508                     }
93509                 }
93510
93511                 layer = rendererTileLayer(context)
93512                     .source(d)
93513                     .projection(context.projection)
93514                     .dimensions(baseLayer.dimensions()
93515                 );
93516
93517                 _overlayLayers.push(layer);
93518                 dispatch$1.call('change');
93519                 background.updateImagery();
93520             };
93521
93522
93523             background.nudge = function(d, zoom) {
93524                 baseLayer.source().nudge(d, zoom);
93525                 dispatch$1.call('change');
93526                 background.updateImagery();
93527                 return background;
93528             };
93529
93530
93531             background.offset = function(d) {
93532                 if (!arguments.length) { return baseLayer.source().offset(); }
93533                 baseLayer.source().offset(d);
93534                 dispatch$1.call('change');
93535                 background.updateImagery();
93536                 return background;
93537             };
93538
93539
93540             background.brightness = function(d) {
93541                 if (!arguments.length) { return _brightness; }
93542                 _brightness = d;
93543                 if (context.mode()) { dispatch$1.call('change'); }
93544                 return background;
93545             };
93546
93547
93548             background.contrast = function(d) {
93549                 if (!arguments.length) { return _contrast; }
93550                 _contrast = d;
93551                 if (context.mode()) { dispatch$1.call('change'); }
93552                 return background;
93553             };
93554
93555
93556             background.saturation = function(d) {
93557                 if (!arguments.length) { return _saturation; }
93558                 _saturation = d;
93559                 if (context.mode()) { dispatch$1.call('change'); }
93560                 return background;
93561             };
93562
93563
93564             background.sharpness = function(d) {
93565                 if (!arguments.length) { return _sharpness; }
93566                 _sharpness = d;
93567                 if (context.mode()) { dispatch$1.call('change'); }
93568                 return background;
93569             };
93570
93571
93572             background.init = function() {
93573                 function parseMap(qmap) {
93574                     if (!qmap) { return false; }
93575                     var args = qmap.split('/').map(Number);
93576                     if (args.length < 3 || args.some(isNaN)) { return false; }
93577                     return geoExtent([args[2], args[1]]);
93578                 }
93579
93580                 var q = utilStringQs(window.location.hash.substring(1));
93581                 var requested = q.background || q.layer;
93582                 var extent = parseMap(q.map);
93583                 var first;
93584                 var best;
93585
93586
93587                 data.imagery = data.imagery || [];
93588                 data.imagery.features = {};
93589
93590                 // build efficient index and querying for data.imagery
93591                 var features = data.imagery.map(function(source) {
93592                     if (!source.polygon) { return null; }
93593
93594                     // Add an extra array nest to each element in `source.polygon`
93595                     // so the rings are not treated as a bunch of holes:
93596                     // what we have: [ [[outer],[hole],[hole]] ]
93597                     // what we want: [ [[outer]],[[outer]],[[outer]] ]
93598                     var rings = source.polygon.map(function(ring) { return [ring]; });
93599
93600                     var feature = {
93601                         type: 'Feature',
93602                         properties: { id: source.id },
93603                         geometry: { type: 'MultiPolygon', coordinates: rings }
93604                     };
93605
93606                     data.imagery.features[source.id] = feature;
93607                     return feature;
93608
93609                 }).filter(Boolean);
93610
93611                 data.imagery.query = whichPolygon_1({
93612                     type: 'FeatureCollection',
93613                     features: features
93614                 });
93615
93616
93617                 // Add all the available imagery sources
93618                 _backgroundSources = data.imagery.map(function(source) {
93619                     if (source.type === 'bing') {
93620                         return rendererBackgroundSource.Bing(source, dispatch$1);
93621                     } else if (/^EsriWorldImagery/.test(source.id)) {
93622                         return rendererBackgroundSource.Esri(source);
93623                     } else {
93624                         return rendererBackgroundSource(source);
93625                     }
93626                 });
93627
93628                 first = _backgroundSources.length && _backgroundSources[0];
93629
93630                 // Add 'None'
93631                 _backgroundSources.unshift(rendererBackgroundSource.None());
93632
93633                 // Add 'Custom'
93634                 var template = context.storage('background-custom-template') || '';
93635                 var custom = rendererBackgroundSource.Custom(template);
93636                 _backgroundSources.unshift(custom);
93637
93638
93639                 // Decide which background layer to display
93640                 if (!requested && extent) {
93641                     best = this.sources(extent).find(function(s) { return s.best(); });
93642                 }
93643                 if (requested && requested.indexOf('custom:') === 0) {
93644                     template = requested.replace(/^custom:/, '');
93645                     background.baseLayerSource(custom.template(template));
93646                     context.storage('background-custom-template', template);
93647                 } else {
93648                     background.baseLayerSource(
93649                         background.findSource(requested) ||
93650                         best ||
93651                         background.findSource(context.storage('background-last-used')) ||
93652                         background.findSource('Bing') ||
93653                         first ||
93654                         background.findSource('none')
93655                     );
93656                 }
93657
93658                 var locator = _backgroundSources.find(function(d) {
93659                     return d.overlay && d.default;
93660                 });
93661
93662                 if (locator) {
93663                     background.toggleOverlayLayer(locator);
93664                 }
93665
93666                 var overlays = (q.overlays || '').split(',');
93667                 overlays.forEach(function(overlay) {
93668                     overlay = background.findSource(overlay);
93669                     if (overlay) {
93670                         background.toggleOverlayLayer(overlay);
93671                     }
93672                 });
93673
93674                 if (q.gpx) {
93675                     var gpx = context.layers().layer('data');
93676                     if (gpx) {
93677                         gpx.url(q.gpx, '.gpx');
93678                     }
93679                 }
93680
93681                 if (q.offset) {
93682                     var offset = q.offset.replace(/;/g, ',').split(',').map(function(n) {
93683                         return !isNaN(n) && n;
93684                     });
93685
93686                     if (offset.length === 2) {
93687                         background.offset(geoMetersToOffset(offset));
93688                     }
93689                 }
93690             };
93691
93692
93693             return utilRebind(background, dispatch$1, 'on');
93694         }
93695
93696         function rendererFeatures(context) {
93697             var dispatch$1 = dispatch('change', 'redraw');
93698             var features = utilRebind({}, dispatch$1, 'on');
93699             var _deferred = new Set();
93700
93701             var traffic_roads = {
93702                 'motorway': true,
93703                 'motorway_link': true,
93704                 'trunk': true,
93705                 'trunk_link': true,
93706                 'primary': true,
93707                 'primary_link': true,
93708                 'secondary': true,
93709                 'secondary_link': true,
93710                 'tertiary': true,
93711                 'tertiary_link': true,
93712                 'residential': true,
93713                 'unclassified': true,
93714                 'living_street': true
93715             };
93716
93717             var service_roads = {
93718                 'service': true,
93719                 'road': true,
93720                 'track': true
93721             };
93722
93723             var paths = {
93724                 'path': true,
93725                 'footway': true,
93726                 'cycleway': true,
93727                 'bridleway': true,
93728                 'steps': true,
93729                 'pedestrian': true,
93730                 'corridor': true
93731             };
93732
93733             var past_futures = {
93734                 'proposed': true,
93735                 'construction': true,
93736                 'abandoned': true,
93737                 'dismantled': true,
93738                 'disused': true,
93739                 'razed': true,
93740                 'demolished': true,
93741                 'obliterated': true
93742             };
93743
93744             var _cullFactor = 1;
93745             var _cache = {};
93746             var _rules = {};
93747             var _stats = {};
93748             var _keys = [];
93749             var _hidden = [];
93750             var _forceVisible = {};
93751
93752
93753             function update() {
93754                 if (!window.mocha) {
93755                     var q = utilStringQs(window.location.hash.substring(1));
93756                     var disabled = features.disabled();
93757                     if (disabled.length) {
93758                         q.disable_features = disabled.join(',');
93759                     } else {
93760                         delete q.disable_features;
93761                     }
93762                     window.location.replace('#' + utilQsString(q, true));
93763                     context.storage('disabled-features', disabled.join(','));
93764                 }
93765                 _hidden = features.hidden();
93766                 dispatch$1.call('change');
93767                 dispatch$1.call('redraw');
93768             }
93769
93770
93771             function defineRule(k, filter, max) {
93772                 var isEnabled = true;
93773
93774                 _keys.push(k);
93775                 _rules[k] = {
93776                     filter: filter,
93777                     enabled: isEnabled,   // whether the user wants it enabled..
93778                     count: 0,
93779                     currentMax: (max || Infinity),
93780                     defaultMax: (max || Infinity),
93781                     enable: function() { this.enabled = true; this.currentMax = this.defaultMax; },
93782                     disable: function() { this.enabled = false; this.currentMax = 0; },
93783                     hidden: function() {
93784                         return !context.editableDataEnabled() ||
93785                             (this.count === 0 && !this.enabled) ||
93786                             this.count > this.currentMax * _cullFactor;
93787                     },
93788                     autoHidden: function() { return this.hidden() && this.currentMax > 0; }
93789                 };
93790             }
93791
93792
93793             defineRule('points', function isPoint(tags, geometry) {
93794                 return geometry === 'point';
93795             }, 200);
93796
93797             defineRule('traffic_roads', function isTrafficRoad(tags) {
93798                 return traffic_roads[tags.highway];
93799             });
93800
93801             defineRule('service_roads', function isServiceRoad(tags) {
93802                 return service_roads[tags.highway];
93803             });
93804
93805             defineRule('paths', function isPath(tags) {
93806                 return paths[tags.highway];
93807             });
93808
93809             defineRule('buildings', function isBuilding(tags) {
93810                 return (
93811                     (!!tags.building && tags.building !== 'no') ||
93812                     tags.parking === 'multi-storey' ||
93813                     tags.parking === 'sheds' ||
93814                     tags.parking === 'carports' ||
93815                     tags.parking === 'garage_boxes'
93816                 );
93817             }, 250);
93818
93819             defineRule('building_parts', function isBuildingPart(tags) {
93820                 return tags['building:part'];
93821             });
93822
93823             defineRule('indoor', function isIndoor(tags) {
93824                 return tags.indoor;
93825             });
93826
93827             defineRule('landuse', function isLanduse(tags, geometry) {
93828                 return geometry === 'area' &&
93829                     !_rules.buildings.filter(tags) &&
93830                     !_rules.building_parts.filter(tags) &&
93831                     !_rules.indoor.filter(tags) &&
93832                     !_rules.water.filter(tags) &&
93833                     !_rules.pistes.filter(tags);
93834             });
93835
93836             defineRule('boundaries', function isBoundary(tags) {
93837                 return (
93838                     !!tags.boundary
93839                 ) && !(
93840                     traffic_roads[tags.highway] ||
93841                     service_roads[tags.highway] ||
93842                     paths[tags.highway] ||
93843                     tags.waterway ||
93844                     tags.railway ||
93845                     tags.landuse ||
93846                     tags.natural ||
93847                     tags.building ||
93848                     tags.power
93849                 );
93850             });
93851
93852             defineRule('water', function isWater(tags) {
93853                 return (
93854                     !!tags.waterway ||
93855                     tags.natural === 'water' ||
93856                     tags.natural === 'coastline' ||
93857                     tags.natural === 'bay' ||
93858                     tags.landuse === 'pond' ||
93859                     tags.landuse === 'basin' ||
93860                     tags.landuse === 'reservoir' ||
93861                     tags.landuse === 'salt_pond'
93862                 );
93863             });
93864
93865             defineRule('rail', function isRail(tags) {
93866                 return (
93867                     !!tags.railway ||
93868                     tags.landuse === 'railway'
93869                 ) && !(
93870                     traffic_roads[tags.highway] ||
93871                     service_roads[tags.highway] ||
93872                     paths[tags.highway]
93873                 );
93874             });
93875
93876             defineRule('pistes', function isPiste(tags) {
93877                 return tags['piste:type'];
93878             });
93879
93880             defineRule('aerialways', function isPiste(tags) {
93881                 return tags.aerialway &&
93882                     tags.aerialway !== 'yes' &&
93883                     tags.aerialway !== 'station';
93884             });
93885
93886             defineRule('power', function isPower(tags) {
93887                 return !!tags.power;
93888             });
93889
93890             // contains a past/future tag, but not in active use as a road/path/cycleway/etc..
93891             defineRule('past_future', function isPastFuture(tags) {
93892                 if (
93893                     traffic_roads[tags.highway] ||
93894                     service_roads[tags.highway] ||
93895                     paths[tags.highway]
93896                 ) { return false; }
93897
93898                 var strings = Object.keys(tags);
93899
93900                 for (var i = 0; i < strings.length; i++) {
93901                     var s = strings[i];
93902                     if (past_futures[s] || past_futures[tags[s]]) { return true; }
93903                 }
93904                 return false;
93905             });
93906
93907             // Lines or areas that don't match another feature filter.
93908             // IMPORTANT: The 'others' feature must be the last one defined,
93909             //   so that code in getMatches can skip this test if `hasMatch = true`
93910             defineRule('others', function isOther(tags, geometry) {
93911                 return (geometry === 'line' || geometry === 'area');
93912             });
93913
93914
93915
93916             features.features = function() {
93917                 return _rules;
93918             };
93919
93920
93921             features.keys = function() {
93922                 return _keys;
93923             };
93924
93925
93926             features.enabled = function(k) {
93927                 if (!arguments.length) {
93928                     return _keys.filter(function(k) { return _rules[k].enabled; });
93929                 }
93930                 return _rules[k] && _rules[k].enabled;
93931             };
93932
93933
93934             features.disabled = function(k) {
93935                 if (!arguments.length) {
93936                     return _keys.filter(function(k) { return !_rules[k].enabled; });
93937                 }
93938                 return _rules[k] && !_rules[k].enabled;
93939             };
93940
93941
93942             features.hidden = function(k) {
93943                 if (!arguments.length) {
93944                     return _keys.filter(function(k) { return _rules[k].hidden(); });
93945                 }
93946                 return _rules[k] && _rules[k].hidden();
93947             };
93948
93949
93950             features.autoHidden = function(k) {
93951                 if (!arguments.length) {
93952                     return _keys.filter(function(k) { return _rules[k].autoHidden(); });
93953                 }
93954                 return _rules[k] && _rules[k].autoHidden();
93955             };
93956
93957
93958             features.enable = function(k) {
93959                 if (_rules[k] && !_rules[k].enabled) {
93960                     _rules[k].enable();
93961                     update();
93962                 }
93963             };
93964
93965             features.enableAll = function() {
93966                 var didEnable = false;
93967                 for (var k in _rules) {
93968                     if (!_rules[k].enabled) {
93969                         didEnable = true;
93970                         _rules[k].enable();
93971                     }
93972                 }
93973                 if (didEnable) { update(); }
93974             };
93975
93976
93977             features.disable = function(k) {
93978                 if (_rules[k] && _rules[k].enabled) {
93979                     _rules[k].disable();
93980                     update();
93981                 }
93982             };
93983
93984             features.disableAll = function() {
93985                 var didDisable = false;
93986                 for (var k in _rules) {
93987                     if (_rules[k].enabled) {
93988                         didDisable = true;
93989                         _rules[k].disable();
93990                     }
93991                 }
93992                 if (didDisable) { update(); }
93993             };
93994
93995
93996             features.toggle = function(k) {
93997                 if (_rules[k]) {
93998                     (function(f) { return f.enabled ? f.disable() : f.enable(); }(_rules[k]));
93999                     update();
94000                 }
94001             };
94002
94003
94004             features.resetStats = function() {
94005                 for (var i = 0; i < _keys.length; i++) {
94006                     _rules[_keys[i]].count = 0;
94007                 }
94008                 dispatch$1.call('change');
94009             };
94010
94011
94012             features.gatherStats = function(d, resolver, dimensions) {
94013                 var needsRedraw = false;
94014                 var types = utilArrayGroupBy(d, 'type');
94015                 var entities = [].concat(types.relation || [], types.way || [], types.node || []);
94016                 var currHidden, geometry, matches, i, j;
94017
94018                 for (i = 0; i < _keys.length; i++) {
94019                     _rules[_keys[i]].count = 0;
94020                 }
94021
94022                 // adjust the threshold for point/building culling based on viewport size..
94023                 // a _cullFactor of 1 corresponds to a 1000x1000px viewport..
94024                 _cullFactor = dimensions[0] * dimensions[1] / 1000000;
94025
94026                 for (i = 0; i < entities.length; i++) {
94027                     geometry = entities[i].geometry(resolver);
94028                     matches = Object.keys(features.getMatches(entities[i], resolver, geometry));
94029                     for (j = 0; j < matches.length; j++) {
94030                         _rules[matches[j]].count++;
94031                     }
94032                 }
94033
94034                 currHidden = features.hidden();
94035                 if (currHidden !== _hidden) {
94036                     _hidden = currHidden;
94037                     needsRedraw = true;
94038                     dispatch$1.call('change');
94039                 }
94040
94041                 return needsRedraw;
94042             };
94043
94044
94045             features.stats = function() {
94046                 for (var i = 0; i < _keys.length; i++) {
94047                     _stats[_keys[i]] = _rules[_keys[i]].count;
94048                 }
94049
94050                 return _stats;
94051             };
94052
94053
94054             features.clear = function(d) {
94055                 for (var i = 0; i < d.length; i++) {
94056                     features.clearEntity(d[i]);
94057                 }
94058             };
94059
94060
94061             features.clearEntity = function(entity) {
94062                 delete _cache[osmEntity.key(entity)];
94063             };
94064
94065
94066             features.reset = function() {
94067                 Array.from(_deferred).forEach(function(handle) {
94068                     window.cancelIdleCallback(handle);
94069                     _deferred.delete(handle);
94070                 });
94071
94072                 _cache = {};
94073             };
94074
94075             // only certain relations are worth checking
94076             function relationShouldBeChecked(relation) {
94077                 // multipolygon features have `area` geometry and aren't checked here
94078                 return relation.tags.type === 'boundary';
94079             }
94080
94081             features.getMatches = function(entity, resolver, geometry) {
94082                 if (geometry === 'vertex' ||
94083                     (geometry === 'relation' && !relationShouldBeChecked(entity))) { return {}; }
94084
94085                 var ent = osmEntity.key(entity);
94086                 if (!_cache[ent]) {
94087                     _cache[ent] = {};
94088                 }
94089
94090                 if (!_cache[ent].matches) {
94091                     var matches = {};
94092                     var hasMatch = false;
94093
94094                     for (var i = 0; i < _keys.length; i++) {
94095                         if (_keys[i] === 'others') {
94096                             if (hasMatch) { continue; }
94097
94098                             // If an entity...
94099                             //   1. is a way that hasn't matched other 'interesting' feature rules,
94100                             if (entity.type === 'way') {
94101                                 var parents = features.getParents(entity, resolver, geometry);
94102
94103                                 //   2a. belongs only to a single multipolygon relation
94104                                 if ((parents.length === 1 && parents[0].isMultipolygon()) ||
94105                                     // 2b. or belongs only to boundary relations
94106                                     (parents.length > 0 && parents.every(function(parent) { return parent.tags.type === 'boundary'; }))) {
94107
94108                                     // ...then match whatever feature rules the parent relation has matched.
94109                                     // see #2548, #2887
94110                                     //
94111                                     // IMPORTANT:
94112                                     // For this to work, getMatches must be called on relations before ways.
94113                                     //
94114                                     var pkey = osmEntity.key(parents[0]);
94115                                     if (_cache[pkey] && _cache[pkey].matches) {
94116                                         matches = Object.assign({}, _cache[pkey].matches);  // shallow copy
94117                                         continue;
94118                                     }
94119                                 }
94120                             }
94121                         }
94122
94123                         if (_rules[_keys[i]].filter(entity.tags, geometry)) {
94124                             matches[_keys[i]] = hasMatch = true;
94125                         }
94126                     }
94127                     _cache[ent].matches = matches;
94128                 }
94129
94130                 return _cache[ent].matches;
94131             };
94132
94133
94134             features.getParents = function(entity, resolver, geometry) {
94135                 if (geometry === 'point') { return []; }
94136
94137                 var ent = osmEntity.key(entity);
94138                 if (!_cache[ent]) {
94139                     _cache[ent] = {};
94140                 }
94141
94142                 if (!_cache[ent].parents) {
94143                     var parents = [];
94144                     if (geometry === 'vertex') {
94145                         parents = resolver.parentWays(entity);
94146                     } else {   // 'line', 'area', 'relation'
94147                         parents = resolver.parentRelations(entity);
94148                     }
94149                     _cache[ent].parents = parents;
94150                 }
94151                 return _cache[ent].parents;
94152             };
94153
94154
94155             features.isHiddenPreset = function(preset, geometry) {
94156                 if (!_hidden.length) { return false; }
94157                 if (!preset.tags) { return false; }
94158
94159                 var test = preset.setTags({}, geometry);
94160                 for (var key in _rules) {
94161                     if (_rules[key].filter(test, geometry)) {
94162                         if (_hidden.indexOf(key) !== -1) {
94163                             return key;
94164                         }
94165                         return false;
94166                     }
94167                 }
94168                 return false;
94169             };
94170
94171
94172             features.isHiddenFeature = function(entity, resolver, geometry) {
94173                 if (!_hidden.length) { return false; }
94174                 if (!entity.version) { return false; }
94175                 if (_forceVisible[entity.id]) { return false; }
94176
94177                 var matches = Object.keys(features.getMatches(entity, resolver, geometry));
94178                 return matches.length && matches.every(function(k) { return features.hidden(k); });
94179             };
94180
94181
94182             features.isHiddenChild = function(entity, resolver, geometry) {
94183                 if (!_hidden.length) { return false; }
94184                 if (!entity.version || geometry === 'point') { return false; }
94185                 if (_forceVisible[entity.id]) { return false; }
94186
94187                 var parents = features.getParents(entity, resolver, geometry);
94188                 if (!parents.length) { return false; }
94189
94190                 for (var i = 0; i < parents.length; i++) {
94191                     if (!features.isHidden(parents[i], resolver, parents[i].geometry(resolver))) {
94192                         return false;
94193                     }
94194                 }
94195                 return true;
94196             };
94197
94198
94199             features.hasHiddenConnections = function(entity, resolver) {
94200                 if (!_hidden.length) { return false; }
94201
94202                 var childNodes, connections;
94203                 if (entity.type === 'midpoint') {
94204                     childNodes = [resolver.entity(entity.edge[0]), resolver.entity(entity.edge[1])];
94205                     connections = [];
94206                 } else {
94207                     childNodes = entity.nodes ? resolver.childNodes(entity) : [];
94208                     connections = features.getParents(entity, resolver, entity.geometry(resolver));
94209                 }
94210
94211                 // gather ways connected to child nodes..
94212                 connections = childNodes.reduce(function(result, e) {
94213                     return resolver.isShared(e) ? utilArrayUnion(result, resolver.parentWays(e)) : result;
94214                 }, connections);
94215
94216                 return connections.some(function(e) {
94217                     return features.isHidden(e, resolver, e.geometry(resolver));
94218                 });
94219             };
94220
94221
94222             features.isHidden = function(entity, resolver, geometry) {
94223                 if (!_hidden.length) { return false; }
94224                 if (!entity.version) { return false; }
94225
94226                 var fn = (geometry === 'vertex' ? features.isHiddenChild : features.isHiddenFeature);
94227                 return fn(entity, resolver, geometry);
94228             };
94229
94230
94231             features.filter = function(d, resolver) {
94232                 if (!_hidden.length) { return d; }
94233
94234                 var result = [];
94235                 for (var i = 0; i < d.length; i++) {
94236                     var entity = d[i];
94237                     if (!features.isHidden(entity, resolver, entity.geometry(resolver))) {
94238                         result.push(entity);
94239                     }
94240                 }
94241                 return result;
94242             };
94243
94244
94245             features.forceVisible = function(entityIDs) {
94246                 if (!arguments.length) { return Object.keys(_forceVisible); }
94247
94248                 _forceVisible = {};
94249                 for (var i = 0; i < entityIDs.length; i++) {
94250                     _forceVisible[entityIDs[i]] = true;
94251                     var entity = context.hasEntity(entityIDs[i]);
94252                     if (entity && entity.type === 'relation') {
94253                         // also show relation members (one level deep)
94254                         for (var j in entity.members) {
94255                             _forceVisible[entity.members[j].id] = true;
94256                         }
94257                     }
94258                 }
94259                 return features;
94260             };
94261
94262
94263             features.init = function() {
94264                 var storage = context.storage('disabled-features');
94265                 if (storage) {
94266                     var storageDisabled = storage.replace(/;/g, ',').split(',');
94267                     storageDisabled.forEach(features.disable);
94268                 }
94269
94270                 var q = utilStringQs(window.location.hash.substring(1));
94271                 if (q.disable_features) {
94272                     var hashDisabled = q.disable_features.replace(/;/g, ',').split(',');
94273                     hashDisabled.forEach(features.disable);
94274                 }
94275             };
94276
94277
94278             // warm up the feature matching cache upon merging fetched data
94279             context.history().on('merge.features', function(newEntities) {
94280                 if (!newEntities) { return; }
94281                 var handle = window.requestIdleCallback(function() {
94282                     var graph = context.graph();
94283                     var types = utilArrayGroupBy(newEntities, 'type');
94284                     // ensure that getMatches is called on relations before ways
94285                     var entities = [].concat(types.relation || [], types.way || [], types.node || []);
94286                     for (var i = 0; i < entities.length; i++) {
94287                         var geometry = entities[i].geometry(graph);
94288                         features.getMatches(entities[i], graph, geometry);
94289                     }
94290                 });
94291                 _deferred.add(handle);
94292             });
94293
94294
94295             return features;
94296         }
94297
94298         // Touch targets control which other vertices we can drag a vertex onto.
94299         //
94300         // - the activeID - nope
94301         // - 1 away (adjacent) to the activeID - yes (vertices will be merged)
94302         // - 2 away from the activeID - nope (would create a self intersecting segment)
94303         // - all others on a linear way - yes
94304         // - all others on a closed way - nope (would create a self intersecting polygon)
94305         //
94306         // returns
94307         // 0 = active vertex - no touch/connect
94308         // 1 = passive vertex - yes touch/connect
94309         // 2 = adjacent vertex - yes but pay attention segmenting a line here
94310         //
94311         function svgPassiveVertex(node, graph, activeID) {
94312             if (!activeID) { return 1; }
94313             if (activeID === node.id) { return 0; }
94314
94315             var parents = graph.parentWays(node);
94316
94317             for (var i = 0; i < parents.length; i++) {
94318                 var nodes = parents[i].nodes;
94319                 var isClosed = parents[i].isClosed();
94320                 for (var j = 0; j < nodes.length; j++) {   // find this vertex, look nearby
94321                     if (nodes[j] === node.id) {
94322                         var ix1 = j - 2;
94323                         var ix2 = j - 1;
94324                         var ix3 = j + 1;
94325                         var ix4 = j + 2;
94326
94327                         if (isClosed) {  // wraparound if needed
94328                             var max = nodes.length - 1;
94329                             if (ix1 < 0)   { ix1 = max + ix1; }
94330                             if (ix2 < 0)   { ix2 = max + ix2; }
94331                             if (ix3 > max) { ix3 = ix3 - max; }
94332                             if (ix4 > max) { ix4 = ix4 - max; }
94333                         }
94334
94335                         if (nodes[ix1] === activeID) { return 0; }        // no - prevent self intersect
94336                         else if (nodes[ix2] === activeID) { return 2; }   // ok - adjacent
94337                         else if (nodes[ix3] === activeID) { return 2; }   // ok - adjacent
94338                         else if (nodes[ix4] === activeID) { return 0; }   // no - prevent self intersect
94339                         else if (isClosed && nodes.indexOf(activeID) !== -1) { return 0; }  // no - prevent self intersect
94340                     }
94341                 }
94342             }
94343
94344             return 1;   // ok
94345         }
94346
94347
94348         function svgMarkerSegments(projection, graph, dt,
94349                                           shouldReverse,
94350                                           bothDirections) {
94351             return function(entity) {
94352                 var i = 0;
94353                 var offset = dt;
94354                 var segments = [];
94355                 var clip = d3_geoIdentity().clipExtent(projection.clipExtent()).stream;
94356                 var coordinates = graph.childNodes(entity).map(function(n) { return n.loc; });
94357                 var a, b;
94358
94359                 if (shouldReverse(entity)) {
94360                     coordinates.reverse();
94361                 }
94362
94363                 d3_geoStream({
94364                     type: 'LineString',
94365                     coordinates: coordinates
94366                 }, projection.stream(clip({
94367                     lineStart: function() {},
94368                     lineEnd: function() { a = null; },
94369                     point: function(x, y) {
94370                         b = [x, y];
94371
94372                         if (a) {
94373                             var span = geoVecLength(a, b) - offset;
94374
94375                             if (span >= 0) {
94376                                 var heading = geoVecAngle(a, b);
94377                                 var dx = dt * Math.cos(heading);
94378                                 var dy = dt * Math.sin(heading);
94379                                 var p = [
94380                                     a[0] + offset * Math.cos(heading),
94381                                     a[1] + offset * Math.sin(heading)
94382                                 ];
94383
94384                                 // gather coordinates
94385                                 var coord = [a, p];
94386                                 for (span -= dt; span >= 0; span -= dt) {
94387                                     p = geoVecAdd(p, [dx, dy]);
94388                                     coord.push(p);
94389                                 }
94390                                 coord.push(b);
94391
94392                                 // generate svg paths
94393                                 var segment = '';
94394                                 var j;
94395
94396                                 for (j = 0; j < coord.length; j++) {
94397                                     segment += (j === 0 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
94398                                 }
94399                                 segments.push({ id: entity.id, index: i++, d: segment });
94400
94401                                 if (bothDirections(entity)) {
94402                                     segment = '';
94403                                     for (j = coord.length - 1; j >= 0; j--) {
94404                                         segment += (j === coord.length - 1 ? 'M' : 'L') + coord[j][0] + ',' + coord[j][1];
94405                                     }
94406                                     segments.push({ id: entity.id, index: i++, d: segment });
94407                                 }
94408                             }
94409
94410                             offset = -span;
94411                         }
94412
94413                         a = b;
94414                     }
94415                 })));
94416
94417                 return segments;
94418             };
94419         }
94420
94421
94422         function svgPath(projection, graph, isArea) {
94423
94424             // Explanation of magic numbers:
94425             // "padding" here allows space for strokes to extend beyond the viewport,
94426             // so that the stroke isn't drawn along the edge of the viewport when
94427             // the shape is clipped.
94428             //
94429             // When drawing lines, pad viewport by 5px.
94430             // When drawing areas, pad viewport by 65px in each direction to allow
94431             // for 60px area fill stroke (see ".fill-partial path.fill" css rule)
94432
94433             var cache = {};
94434             var padding = isArea ? 65 : 5;
94435             var viewport = projection.clipExtent();
94436             var paddedExtent = [
94437                 [viewport[0][0] - padding, viewport[0][1] - padding],
94438                 [viewport[1][0] + padding, viewport[1][1] + padding]
94439             ];
94440             var clip = d3_geoIdentity().clipExtent(paddedExtent).stream;
94441             var project = projection.stream;
94442             var path = d3_geoPath()
94443                 .projection({stream: function(output) { return project(clip(output)); }});
94444
94445             var svgpath = function(entity) {
94446                 if (entity.id in cache) {
94447                     return cache[entity.id];
94448                 } else {
94449                     return cache[entity.id] = path(entity.asGeoJSON(graph));
94450                 }
94451             };
94452
94453             svgpath.geojson = function(d) {
94454                 if (d.__featurehash__ !== undefined) {
94455                     if (d.__featurehash__ in cache) {
94456                         return cache[d.__featurehash__];
94457                     } else {
94458                         return cache[d.__featurehash__] = path(d);
94459                     }
94460                 } else {
94461                     return path(d);
94462                 }
94463             };
94464
94465             return svgpath;
94466         }
94467
94468
94469         function svgPointTransform(projection) {
94470             var svgpoint = function(entity) {
94471                 // http://jsperf.com/short-array-join
94472                 var pt = projection(entity.loc);
94473                 return 'translate(' + pt[0] + ',' + pt[1] + ')';
94474             };
94475
94476             svgpoint.geojson = function(d) {
94477                 return svgpoint(d.properties.entity);
94478             };
94479
94480             return svgpoint;
94481         }
94482
94483
94484         function svgRelationMemberTags(graph) {
94485             return function(entity) {
94486                 var tags = entity.tags;
94487                 var shouldCopyMultipolygonTags = !entity.hasInterestingTags();
94488                 graph.parentRelations(entity).forEach(function(relation) {
94489                     var type = relation.tags.type;
94490                     if ((type === 'multipolygon' && shouldCopyMultipolygonTags) || type === 'boundary') {
94491                         tags = Object.assign({}, relation.tags, tags);
94492                     }
94493                 });
94494                 return tags;
94495             };
94496         }
94497
94498
94499         function svgSegmentWay(way, graph, activeID) {
94500             // When there is no activeID, we can memoize this expensive computation
94501             if (activeID === undefined) {
94502                 return graph.transient(way, 'waySegments', getWaySegments);
94503             } else {
94504                 return getWaySegments();
94505             }
94506
94507             function getWaySegments() {
94508                 var isActiveWay = (way.nodes.indexOf(activeID) !== -1);
94509                 var features = { passive: [], active: [] };
94510                 var start = {};
94511                 var end = {};
94512                 var node, type;
94513
94514                 for (var i = 0; i < way.nodes.length; i++) {
94515                     node = graph.entity(way.nodes[i]);
94516                     type = svgPassiveVertex(node, graph, activeID);
94517                     end = { node: node, type: type };
94518
94519                     if (start.type !== undefined) {
94520                         if (start.node.id === activeID || end.node.id === activeID) ; else if (isActiveWay && (start.type === 2 || end.type === 2)) {   // one adjacent vertex
94521                             pushActive(start, end, i);
94522                         } else if (start.type === 0 && end.type === 0) {   // both active vertices
94523                             pushActive(start, end, i);
94524                         } else {
94525                             pushPassive(start, end, i);
94526                         }
94527                     }
94528
94529                     start = end;
94530                 }
94531
94532                 return features;
94533
94534                 function pushActive(start, end, index) {
94535                     features.active.push({
94536                         type: 'Feature',
94537                         id: way.id + '-' + index + '-nope',
94538                         properties: {
94539                             nope: true,
94540                             target: true,
94541                             entity: way,
94542                             nodes: [start.node, end.node],
94543                             index: index
94544                         },
94545                         geometry: {
94546                             type: 'LineString',
94547                             coordinates: [start.node.loc, end.node.loc]
94548                         }
94549                     });
94550                 }
94551
94552                 function pushPassive(start, end, index) {
94553                     features.passive.push({
94554                         type: 'Feature',
94555                         id: way.id + '-' + index,
94556                         properties: {
94557                             target: true,
94558                             entity: way,
94559                             nodes: [start.node, end.node],
94560                             index: index
94561                         },
94562                         geometry: {
94563                             type: 'LineString',
94564                             coordinates: [start.node.loc, end.node.loc]
94565                         }
94566                     });
94567                 }
94568             }
94569         }
94570
94571         function svgTagClasses() {
94572             var primaries = [
94573                 'building', 'highway', 'railway', 'waterway', 'aeroway', 'aerialway',
94574                 'piste:type', 'boundary', 'power', 'amenity', 'natural', 'landuse',
94575                 'leisure', 'military', 'place', 'man_made', 'route', 'attraction',
94576                 'building:part', 'indoor'
94577             ];
94578             var statuses = [
94579                 // nonexistent, might be built
94580                 'proposed', 'planned',
94581                 // under maintentance or between groundbreaking and opening
94582                 'construction',
94583                 // existent but not functional
94584                 'disused',
94585                 // dilapidated to nonexistent
94586                 'abandoned',
94587                 // nonexistent, still may appear in imagery
94588                 'dismantled', 'razed', 'demolished', 'obliterated',
94589                 // existent occasionally, e.g. stormwater drainage basin
94590                 'intermittent'
94591             ];
94592             var secondaries = [
94593                 'oneway', 'bridge', 'tunnel', 'embankment', 'cutting', 'barrier',
94594                 'surface', 'tracktype', 'footway', 'crossing', 'service', 'sport',
94595                 'public_transport', 'location', 'parking', 'golf', 'type', 'leisure',
94596                 'man_made', 'indoor'
94597             ];
94598             var _tags = function(entity) { return entity.tags; };
94599
94600
94601             var tagClasses = function(selection) {
94602                 selection.each(function tagClassesEach(entity) {
94603                     var value = this.className;
94604
94605                     if (value.baseVal !== undefined) {
94606                         value = value.baseVal;
94607                     }
94608
94609                     var t = _tags(entity);
94610
94611                     var computed = tagClasses.getClassesString(t, value);
94612
94613                     if (computed !== value) {
94614                         d3_select(this).attr('class', computed);
94615                     }
94616                 });
94617             };
94618
94619
94620             tagClasses.getClassesString = function(t, value) {
94621                 var primary, status;
94622                 var i, j, k, v;
94623
94624                 // in some situations we want to render perimeter strokes a certain way
94625                 var overrideGeometry;
94626                 if (/\bstroke\b/.test(value)) {
94627                     if (!!t.barrier && t.barrier !== 'no') {
94628                         overrideGeometry = 'line';
94629                     }
94630                 }
94631
94632                 // preserve base classes (nothing with `tag-`)
94633                 var classes = value.trim().split(/\s+/)
94634                     .filter(function(klass) {
94635                         return klass.length && !/^tag-/.test(klass);
94636                     })
94637                     .map(function(klass) {  // special overrides for some perimeter strokes
94638                         return (klass === 'line' || klass === 'area') ? (overrideGeometry || klass) : klass;
94639                     });
94640
94641                 // pick at most one primary classification tag..
94642                 for (i = 0; i < primaries.length; i++) {
94643                     k = primaries[i];
94644                     v = t[k];
94645                     if (!v || v === 'no') { continue; }
94646
94647                     if (k === 'piste:type') {  // avoid a ':' in the class name
94648                         k = 'piste';
94649                     } else if (k === 'building:part') {  // avoid a ':' in the class name
94650                         k = 'building_part';
94651                     }
94652
94653                     primary = k;
94654                     if (statuses.indexOf(v) !== -1) {   // e.g. `railway=abandoned`
94655                         status = v;
94656                         classes.push('tag-' + k);
94657                     } else {
94658                         classes.push('tag-' + k);
94659                         classes.push('tag-' + k + '-' + v);
94660                     }
94661
94662                     break;
94663                 }
94664
94665                 if (!primary) {
94666                     for (i = 0; i < statuses.length; i++) {
94667                         for (j = 0; j < primaries.length; j++) {
94668                             k = statuses[i] + ':' + primaries[j];  // e.g. `demolished:building=yes`
94669                             v = t[k];
94670                             if (!v || v === 'no') { continue; }
94671
94672                             status = statuses[i];
94673                             break;
94674                         }
94675                     }
94676                 }
94677
94678                 // add at most one status tag, only if relates to primary tag..
94679                 if (!status) {
94680                     for (i = 0; i < statuses.length; i++) {
94681                         k = statuses[i];
94682                         v = t[k];
94683                         if (!v || v === 'no') { continue; }
94684
94685                         if (v === 'yes') {   // e.g. `railway=rail + abandoned=yes`
94686                             status = k;
94687                         }
94688                         else if (primary && primary === v) {  // e.g. `railway=rail + abandoned=railway`
94689                             status = k;
94690                         } else if (!primary && primaries.indexOf(v) !== -1) {  // e.g. `abandoned=railway`
94691                             status = k;
94692                             primary = v;
94693                             classes.push('tag-' + v);
94694                         }  // else ignore e.g.  `highway=path + abandoned=railway`
94695
94696                         if (status) { break; }
94697                     }
94698                 }
94699
94700                 if (status) {
94701                     classes.push('tag-status');
94702                     classes.push('tag-status-' + status);
94703                 }
94704
94705                 // add any secondary tags
94706                 for (i = 0; i < secondaries.length; i++) {
94707                     k = secondaries[i];
94708                     v = t[k];
94709                     if (!v || v === 'no' || k === primary) { continue; }
94710                     classes.push('tag-' + k);
94711                     classes.push('tag-' + k + '-' + v);
94712                 }
94713
94714                 // For highways, look for surface tagging..
94715                 if ((primary === 'highway' && !osmPathHighwayTagValues[t.highway]) || primary === 'aeroway') {
94716                     var surface = t.highway === 'track' ? 'unpaved' : 'paved';
94717                     for (k in t) {
94718                         v = t[k];
94719                         if (k in osmPavedTags) {
94720                             surface = osmPavedTags[k][v] ? 'paved' : 'unpaved';
94721                         }
94722                         if (k in osmSemipavedTags && !!osmSemipavedTags[k][v]) {
94723                             surface = 'semipaved';
94724                         }
94725                     }
94726                     classes.push('tag-' + surface);
94727                 }
94728
94729                 // If this is a wikidata-tagged item, add a class for that..
94730                 if (t.wikidata || t['brand:wikidata']) {
94731                     classes.push('tag-wikidata');
94732                 }
94733
94734                 return classes.join(' ').trim();
94735             };
94736
94737
94738             tagClasses.tags = function(val) {
94739                 if (!arguments.length) { return _tags; }
94740                 _tags = val;
94741                 return tagClasses;
94742             };
94743
94744             return tagClasses;
94745         }
94746
94747         // Patterns only work in Firefox when set directly on element.
94748         // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
94749         var patterns = {
94750             // tag - pattern name
94751             // -or-
94752             // tag - value - pattern name
94753             // -or-
94754             // tag - value - rules (optional tag-values, pattern name)
94755             // (matches earlier rules first, so fallback should be last entry)
94756             amenity: {
94757                 grave_yard: 'cemetery',
94758                 fountain: 'water_standing'
94759             },
94760             landuse: {
94761                 cemetery: [
94762                     { religion: 'christian', pattern: 'cemetery_christian' },
94763                     { religion: 'buddhist', pattern: 'cemetery_buddhist' },
94764                     { religion: 'muslim', pattern: 'cemetery_muslim' },
94765                     { religion: 'jewish', pattern: 'cemetery_jewish' },
94766                     { pattern: 'cemetery' }
94767                 ],
94768                 construction: 'construction',
94769                 farmland: 'farmland',
94770                 farmyard: 'farmyard',
94771                 forest: [
94772                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
94773                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
94774                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
94775                     { pattern: 'forest' } // same as 'leaf_type:mixed'
94776                 ],
94777                 grave_yard: 'cemetery',
94778                 grass: [
94779                     { golf: 'green', pattern: 'golf_green' },
94780                     { pattern: 'grass' } ],
94781                 landfill: 'landfill',
94782                 meadow: 'meadow',
94783                 military: 'construction',
94784                 orchard: 'orchard',
94785                 quarry: 'quarry',
94786                 vineyard: 'vineyard'
94787             },
94788             natural: {
94789                 beach: 'beach',
94790                 grassland: 'grass',
94791                 sand: 'beach',
94792                 scrub: 'scrub',
94793                 water: [
94794                     { water: 'pond', pattern: 'pond' },
94795                     { water: 'reservoir', pattern: 'water_standing' },
94796                     { pattern: 'waves' }
94797                 ],
94798                 wetland: [
94799                     { wetland: 'marsh', pattern: 'wetland_marsh' },
94800                     { wetland: 'swamp', pattern: 'wetland_swamp' },
94801                     { wetland: 'bog', pattern: 'wetland_bog' },
94802                     { wetland: 'reedbed', pattern: 'wetland_reedbed' },
94803                     { pattern: 'wetland' }
94804                 ],
94805                 wood: [
94806                     { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' },
94807                     { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' },
94808                     { leaf_type: 'leafless', pattern: 'forest_leafless' },
94809                     { pattern: 'forest' } // same as 'leaf_type:mixed'
94810                 ]
94811             },
94812             traffic_calming: {
94813                 island: [
94814                     { surface: 'grass', pattern: 'grass' } ],
94815                 chicane: [
94816                     { surface: 'grass', pattern: 'grass' } ],
94817                 choker: [
94818                     { surface: 'grass', pattern: 'grass' } ]
94819             }
94820         };
94821
94822         function svgTagPattern(tags) {
94823             // Skip pattern filling if this is a building (buildings don't get patterns applied)
94824             if (tags.building && tags.building !== 'no') {
94825                 return null;
94826             }
94827
94828             for (var tag in patterns) {
94829                 var entityValue = tags[tag];
94830                 if (!entityValue) { continue; }
94831
94832                 if (typeof patterns[tag] === 'string') { // extra short syntax (just tag) - pattern name
94833                     return 'pattern-' + patterns[tag];
94834                 } else {
94835                     var values = patterns[tag];
94836                     for (var value in values) {
94837                         if (entityValue !== value) { continue; }
94838
94839                         var rules = values[value];
94840                         if (typeof rules === 'string') { // short syntax - pattern name
94841                             return 'pattern-' + rules;
94842                         }
94843
94844                         // long syntax - rule array
94845                         for (var ruleKey in rules) {
94846                             var rule = rules[ruleKey];
94847
94848                             var pass = true;
94849                             for (var criterion in rule) {
94850                                 if (criterion !== 'pattern') { // reserved for pattern name
94851                                     // The only rule is a required tag-value pair
94852                                     var v = tags[criterion];
94853                                     if (!v || v !== rule[criterion]) {
94854                                         pass = false;
94855                                         break;
94856                                     }
94857                                 }
94858                             }
94859
94860                             if (pass) {
94861                                 return 'pattern-' + rule.pattern;
94862                             }
94863                         }
94864                     }
94865                 }
94866             }
94867
94868             return null;
94869         }
94870
94871         function svgAreas(projection, context) {
94872
94873
94874             function getPatternStyle(tags) {
94875                 var imageID = svgTagPattern(tags);
94876                 if (imageID) {
94877                     return 'url("#' + imageID + '")';
94878                 }
94879                 return '';
94880             }
94881
94882
94883             function drawTargets(selection, graph, entities, filter) {
94884                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
94885                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
94886                 var getPath = svgPath(projection).geojson;
94887                 var activeID = context.activeID();
94888                 var base = context.history().base();
94889
94890                 // The targets and nopes will be MultiLineString sub-segments of the ways
94891                 var data = { targets: [], nopes: [] };
94892
94893                 entities.forEach(function(way) {
94894                     var features = svgSegmentWay(way, graph, activeID);
94895                     data.targets.push.apply(data.targets, features.passive);
94896                     data.nopes.push.apply(data.nopes, features.active);
94897                 });
94898
94899
94900                 // Targets allow hover and vertex snapping
94901                 var targetData = data.targets.filter(getPath);
94902                 var targets = selection.selectAll('.area.target-allowed')
94903                     .filter(function(d) { return filter(d.properties.entity); })
94904                     .data(targetData, function key(d) { return d.id; });
94905
94906                 // exit
94907                 targets.exit()
94908                     .remove();
94909
94910                 var segmentWasEdited = function(d) {
94911                     var wayID = d.properties.entity.id;
94912                     // if the whole line was edited, don't draw segment changes
94913                     if (!base.entities[wayID] ||
94914                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
94915                         return false;
94916                     }
94917                     return d.properties.nodes.some(function(n) {
94918                         return !base.entities[n.id] ||
94919                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
94920                     });
94921                 };
94922
94923                 // enter/update
94924                 targets.enter()
94925                     .append('path')
94926                     .merge(targets)
94927                     .attr('d', getPath)
94928                     .attr('class', function(d) { return 'way area target target-allowed ' + targetClass + d.id; })
94929                     .classed('segment-edited', segmentWasEdited);
94930
94931
94932                 // NOPE
94933                 var nopeData = data.nopes.filter(getPath);
94934                 var nopes = selection.selectAll('.area.target-nope')
94935                     .filter(function(d) { return filter(d.properties.entity); })
94936                     .data(nopeData, function key(d) { return d.id; });
94937
94938                 // exit
94939                 nopes.exit()
94940                     .remove();
94941
94942                 // enter/update
94943                 nopes.enter()
94944                     .append('path')
94945                     .merge(nopes)
94946                     .attr('d', getPath)
94947                     .attr('class', function(d) { return 'way area target target-nope ' + nopeClass + d.id; })
94948                     .classed('segment-edited', segmentWasEdited);
94949             }
94950
94951
94952             function drawAreas(selection, graph, entities, filter) {
94953                 var path = svgPath(projection, graph, true);
94954                 var areas = {};
94955                 var multipolygon;
94956                 var base = context.history().base();
94957
94958                 for (var i = 0; i < entities.length; i++) {
94959                     var entity = entities[i];
94960                     if (entity.geometry(graph) !== 'area') { continue; }
94961
94962                     multipolygon = osmIsOldMultipolygonOuterMember(entity, graph);
94963                     if (multipolygon) {
94964                         areas[multipolygon.id] = {
94965                             entity: multipolygon.mergeTags(entity.tags),
94966                             area: Math.abs(entity.area(graph))
94967                         };
94968                     } else if (!areas[entity.id]) {
94969                         areas[entity.id] = {
94970                             entity: entity,
94971                             area: Math.abs(entity.area(graph))
94972                         };
94973                     }
94974                 }
94975
94976                 var fills = Object.values(areas).filter(function hasPath(a) { return path(a.entity); });
94977                 fills.sort(function areaSort(a, b) { return b.area - a.area; });
94978                 fills = fills.map(function(a) { return a.entity; });
94979
94980                 var strokes = fills.filter(function(area) { return area.type === 'way'; });
94981
94982                 var data = {
94983                     clip: fills,
94984                     shadow: strokes,
94985                     stroke: strokes,
94986                     fill: fills
94987                 };
94988
94989                 var clipPaths = context.surface().selectAll('defs').selectAll('.clipPath-osm')
94990                    .filter(filter)
94991                    .data(data.clip, osmEntity.key);
94992
94993                 clipPaths.exit()
94994                    .remove();
94995
94996                 var clipPathsEnter = clipPaths.enter()
94997                    .append('clipPath')
94998                    .attr('class', 'clipPath-osm')
94999                    .attr('id', function(entity) { return entity.id + '-clippath'; });
95000
95001                 clipPathsEnter
95002                    .append('path');
95003
95004                 clipPaths.merge(clipPathsEnter)
95005                    .selectAll('path')
95006                    .attr('d', path);
95007
95008
95009                 var drawLayer = selection.selectAll('.layer-osm.areas');
95010                 var touchLayer = selection.selectAll('.layer-touch.areas');
95011
95012                 // Draw areas..
95013                 var areagroup = drawLayer
95014                     .selectAll('g.areagroup')
95015                     .data(['fill', 'shadow', 'stroke']);
95016
95017                 areagroup = areagroup.enter()
95018                     .append('g')
95019                     .attr('class', function(d) { return 'areagroup area-' + d; })
95020                     .merge(areagroup);
95021
95022                 var paths = areagroup
95023                     .selectAll('path')
95024                     .filter(filter)
95025                     .data(function(layer) { return data[layer]; }, osmEntity.key);
95026
95027                 paths.exit()
95028                     .remove();
95029
95030
95031                 var fillpaths = selection.selectAll('.area-fill path.area').nodes();
95032                 var bisect = d3_bisector(function(node) { return -node.__data__.area(graph); }).left;
95033
95034                 function sortedByArea(entity) {
95035                     if (this._parent.__data__ === 'fill') {
95036                         return fillpaths[bisect(fillpaths, -entity.area(graph))];
95037                     }
95038                 }
95039
95040                 paths = paths.enter()
95041                     .insert('path', sortedByArea)
95042                     .merge(paths)
95043                     .each(function(entity) {
95044                         var layer = this.parentNode.__data__;
95045                         this.setAttribute('class', entity.type + ' area ' + layer + ' ' + entity.id);
95046
95047                         if (layer === 'fill') {
95048                             this.setAttribute('clip-path', 'url(#' + entity.id + '-clippath)');
95049                             this.style.fill = this.style.stroke = getPatternStyle(entity.tags);
95050                         }
95051                     })
95052                     .classed('added', function(d) {
95053                         return !base.entities[d.id];
95054                     })
95055                     .classed('geometry-edited', function(d) {
95056                         return graph.entities[d.id] &&
95057                             base.entities[d.id] &&
95058                             !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
95059                     })
95060                     .classed('retagged', function(d) {
95061                         return graph.entities[d.id] &&
95062                             base.entities[d.id] &&
95063                             !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
95064                     })
95065                     .call(svgTagClasses())
95066                     .attr('d', path);
95067
95068
95069                 // Draw touch targets..
95070                 touchLayer
95071                     .call(drawTargets, graph, data.stroke, filter);
95072             }
95073
95074             return drawAreas;
95075         }
95076
95077         //[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]
95078         //[4a]          NameChar           ::=          NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
95079         //[5]           Name       ::=          NameStartChar (NameChar)*
95080         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
95081         var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
95082         var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
95083         //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
95084         //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(',')
95085
95086         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
95087         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
95088         var S_TAG = 0;//tag name offerring
95089         var S_ATTR = 1;//attr name offerring 
95090         var S_ATTR_SPACE=2;//attr name end and space offer
95091         var S_EQ = 3;//=space?
95092         var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
95093         var S_ATTR_END = 5;//attr value end and no space(quot end)
95094         var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
95095         var S_TAG_CLOSE = 7;//closed el<el />
95096
95097         function XMLReader(){
95098                 
95099         }
95100
95101         XMLReader.prototype = {
95102                 parse:function(source,defaultNSMap,entityMap){
95103                         var domBuilder = this.domBuilder;
95104                         domBuilder.startDocument();
95105                         _copy(defaultNSMap ,defaultNSMap = {});
95106                         parse$2(source,defaultNSMap,entityMap,
95107                                         domBuilder,this.errorHandler);
95108                         domBuilder.endDocument();
95109                 }
95110         };
95111         function parse$2(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
95112                 function fixedFromCharCode(code) {
95113                         // String.prototype.fromCharCode does not supports
95114                         // > 2 bytes unicode chars directly
95115                         if (code > 0xffff) {
95116                                 code -= 0x10000;
95117                                 var surrogate1 = 0xd800 + (code >> 10)
95118                                         , surrogate2 = 0xdc00 + (code & 0x3ff);
95119
95120                                 return String.fromCharCode(surrogate1, surrogate2);
95121                         } else {
95122                                 return String.fromCharCode(code);
95123                         }
95124                 }
95125                 function entityReplacer(a){
95126                         var k = a.slice(1,-1);
95127                         if(k in entityMap){
95128                                 return entityMap[k]; 
95129                         }else if(k.charAt(0) === '#'){
95130                                 return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
95131                         }else{
95132                                 errorHandler.error('entity not found:'+a);
95133                                 return a;
95134                         }
95135                 }
95136                 function appendText(end){//has some bugs
95137                         if(end>start){
95138                                 var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
95139                                 locator&&position(start);
95140                                 domBuilder.characters(xt,0,end-start);
95141                                 start = end;
95142                         }
95143                 }
95144                 function position(p,m){
95145                         while(p>=lineEnd && (m = linePattern.exec(source))){
95146                                 lineStart = m.index;
95147                                 lineEnd = lineStart + m[0].length;
95148                                 locator.lineNumber++;
95149                                 //console.log('line++:',locator,startPos,endPos)
95150                         }
95151                         locator.columnNumber = p-lineStart+1;
95152                 }
95153                 var lineStart = 0;
95154                 var lineEnd = 0;
95155                 var linePattern = /.*(?:\r\n?|\n)|.*$/g;
95156                 var locator = domBuilder.locator;
95157                 
95158                 var parseStack = [{currentNSMap:defaultNSMapCopy}];
95159                 var closeMap = {};
95160                 var start = 0;
95161                 while(true){
95162                         try{
95163                                 var tagStart = source.indexOf('<',start);
95164                                 if(tagStart<0){
95165                                         if(!source.substr(start).match(/^\s*$/)){
95166                                                 var doc = domBuilder.doc;
95167                                         var text = doc.createTextNode(source.substr(start));
95168                                         doc.appendChild(text);
95169                                         domBuilder.currentElement = text;
95170                                         }
95171                                         return;
95172                                 }
95173                                 if(tagStart>start){
95174                                         appendText(tagStart);
95175                                 }
95176                                 switch(source.charAt(tagStart+1)){
95177                                 case '/':
95178                                         var end = source.indexOf('>',tagStart+3);
95179                                         var tagName = source.substring(tagStart+2,end);
95180                                         var config = parseStack.pop();
95181                                         if(end<0){
95182                                                 
95183                                         tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
95184                                         //console.error('#@@@@@@'+tagName)
95185                                         errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
95186                                         end = tagStart+1+tagName.length;
95187                                 }else if(tagName.match(/\s</)){
95188                                         tagName = tagName.replace(/[\s<].*/,'');
95189                                         errorHandler.error("end tag name: "+tagName+' maybe not complete');
95190                                         end = tagStart+1+tagName.length;
95191                                         }
95192                                         //console.error(parseStack.length,parseStack)
95193                                         //console.error(config);
95194                                         var localNSMap = config.localNSMap;
95195                                         var endMatch = config.tagName == tagName;
95196                                         var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase();
95197                                 if(endIgnoreCaseMach){
95198                                         domBuilder.endElement(config.uri,config.localName,tagName);
95199                                                 if(localNSMap){
95200                                                         for(var prefix in localNSMap){
95201                                                                 domBuilder.endPrefixMapping(prefix) ;
95202                                                         }
95203                                                 }
95204                                                 if(!endMatch){
95205                                         errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName );
95206                                                 }
95207                                 }else{
95208                                         parseStack.push(config);
95209                                 }
95210                                         
95211                                         end++;
95212                                         break;
95213                                         // end elment
95214                                 case '?':// <?...?>
95215                                         locator&&position(tagStart);
95216                                         end = parseInstruction(source,tagStart,domBuilder);
95217                                         break;
95218                                 case '!':// <!doctype,<![CDATA,<!--
95219                                         locator&&position(tagStart);
95220                                         end = parseDCC(source,tagStart,domBuilder,errorHandler);
95221                                         break;
95222                                 default:
95223                                         locator&&position(tagStart);
95224                                         var el = new ElementAttributes();
95225                                         var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
95226                                         //elStartEnd
95227                                         var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
95228                                         var len = el.length;
95229                                         
95230                                         
95231                                         if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
95232                                                 el.closed = true;
95233                                                 if(!entityMap.nbsp){
95234                                                         errorHandler.warning('unclosed xml attribute');
95235                                                 }
95236                                         }
95237                                         if(locator && len){
95238                                                 var locator2 = copyLocator(locator,{});
95239                                                 //try{//attribute position fixed
95240                                                 for(var i = 0;i<len;i++){
95241                                                         var a = el[i];
95242                                                         position(a.offset);
95243                                                         a.locator = copyLocator(locator,{});
95244                                                 }
95245                                                 //}catch(e){console.error('@@@@@'+e)}
95246                                                 domBuilder.locator = locator2;
95247                                                 if(appendElement(el,domBuilder,currentNSMap)){
95248                                                         parseStack.push(el);
95249                                                 }
95250                                                 domBuilder.locator = locator;
95251                                         }else{
95252                                                 if(appendElement(el,domBuilder,currentNSMap)){
95253                                                         parseStack.push(el);
95254                                                 }
95255                                         }
95256                                         
95257                                         
95258                                         
95259                                         if(el.uri === 'http://www.w3.org/1999/xhtml' && !el.closed){
95260                                                 end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder);
95261                                         }else{
95262                                                 end++;
95263                                         }
95264                                 }
95265                         }catch(e){
95266                                 errorHandler.error('element parse error: '+e);
95267                                 //errorHandler.error('element parse error: '+e);
95268                                 end = -1;
95269                                 //throw e;
95270                         }
95271                         if(end>start){
95272                                 start = end;
95273                         }else{
95274                                 //TODO: 这里有可能sax回退,有位置错误风险
95275                                 appendText(Math.max(tagStart,start)+1);
95276                         }
95277                 }
95278         }
95279         function copyLocator(f,t){
95280                 t.lineNumber = f.lineNumber;
95281                 t.columnNumber = f.columnNumber;
95282                 return t;
95283         }
95284
95285         /**
95286          * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
95287          * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
95288          */
95289         function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
95290                 var attrName;
95291                 var value;
95292                 var p = ++start;
95293                 var s = S_TAG;//status
95294                 while(true){
95295                         var c = source.charAt(p);
95296                         switch(c){
95297                         case '=':
95298                                 if(s === S_ATTR){//attrName
95299                                         attrName = source.slice(start,p);
95300                                         s = S_EQ;
95301                                 }else if(s === S_ATTR_SPACE){
95302                                         s = S_EQ;
95303                                 }else{
95304                                         //fatalError: equal must after attrName or space after attrName
95305                                         throw new Error('attribute equal must after attrName');
95306                                 }
95307                                 break;
95308                         case '\'':
95309                         case '"':
95310                                 if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
95311                                         ){//equal
95312                                         if(s === S_ATTR){
95313                                                 errorHandler.warning('attribute value must after "="');
95314                                                 attrName = source.slice(start,p);
95315                                         }
95316                                         start = p+1;
95317                                         p = source.indexOf(c,start);
95318                                         if(p>0){
95319                                                 value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
95320                                                 el.add(attrName,value,start-1);
95321                                                 s = S_ATTR_END;
95322                                         }else{
95323                                                 //fatalError: no end quot match
95324                                                 throw new Error('attribute value no end \''+c+'\' match');
95325                                         }
95326                                 }else if(s == S_ATTR_NOQUOT_VALUE){
95327                                         value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
95328                                         //console.log(attrName,value,start,p)
95329                                         el.add(attrName,value,start);
95330                                         //console.dir(el)
95331                                         errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
95332                                         start = p+1;
95333                                         s = S_ATTR_END;
95334                                 }else{
95335                                         //fatalError: no equal before
95336                                         throw new Error('attribute value must after "="');
95337                                 }
95338                                 break;
95339                         case '/':
95340                                 switch(s){
95341                                 case S_TAG:
95342                                         el.setTagName(source.slice(start,p));
95343                                 case S_ATTR_END:
95344                                 case S_TAG_SPACE:
95345                                 case S_TAG_CLOSE:
95346                                         s =S_TAG_CLOSE;
95347                                         el.closed = true;
95348                                 case S_ATTR_NOQUOT_VALUE:
95349                                 case S_ATTR:
95350                                 case S_ATTR_SPACE:
95351                                         break;
95352                                 //case S_EQ:
95353                                 default:
95354                                         throw new Error("attribute invalid close char('/')")
95355                                 }
95356                                 break;
95357                         case ''://end document
95358                                 //throw new Error('unexpected end of input')
95359                                 errorHandler.error('unexpected end of input');
95360                                 if(s == S_TAG){
95361                                         el.setTagName(source.slice(start,p));
95362                                 }
95363                                 return p;
95364                         case '>':
95365                                 switch(s){
95366                                 case S_TAG:
95367                                         el.setTagName(source.slice(start,p));
95368                                 case S_ATTR_END:
95369                                 case S_TAG_SPACE:
95370                                 case S_TAG_CLOSE:
95371                                         break;//normal
95372                                 case S_ATTR_NOQUOT_VALUE://Compatible state
95373                                 case S_ATTR:
95374                                         value = source.slice(start,p);
95375                                         if(value.slice(-1) === '/'){
95376                                                 el.closed  = true;
95377                                                 value = value.slice(0,-1);
95378                                         }
95379                                 case S_ATTR_SPACE:
95380                                         if(s === S_ATTR_SPACE){
95381                                                 value = attrName;
95382                                         }
95383                                         if(s == S_ATTR_NOQUOT_VALUE){
95384                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
95385                                                 el.add(attrName,value.replace(/&#?\w+;/g,entityReplacer),start);
95386                                         }else{
95387                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !value.match(/^(?:disabled|checked|selected)$/i)){
95388                                                         errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!');
95389                                                 }
95390                                                 el.add(value,value,start);
95391                                         }
95392                                         break;
95393                                 case S_EQ:
95394                                         throw new Error('attribute value missed!!');
95395                                 }
95396         //                      console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
95397                                 return p;
95398                         /*xml space '\x20' | #x9 | #xD | #xA; */
95399                         case '\u0080':
95400                                 c = ' ';
95401                         default:
95402                                 if(c<= ' '){//space
95403                                         switch(s){
95404                                         case S_TAG:
95405                                                 el.setTagName(source.slice(start,p));//tagName
95406                                                 s = S_TAG_SPACE;
95407                                                 break;
95408                                         case S_ATTR:
95409                                                 attrName = source.slice(start,p);
95410                                                 s = S_ATTR_SPACE;
95411                                                 break;
95412                                         case S_ATTR_NOQUOT_VALUE:
95413                                                 var value = source.slice(start,p).replace(/&#?\w+;/g,entityReplacer);
95414                                                 errorHandler.warning('attribute "'+value+'" missed quot(")!!');
95415                                                 el.add(attrName,value,start);
95416                                         case S_ATTR_END:
95417                                                 s = S_TAG_SPACE;
95418                                                 break;
95419                                         //case S_TAG_SPACE:
95420                                         //case S_EQ:
95421                                         //case S_ATTR_SPACE:
95422                                         //      void();break;
95423                                         //case S_TAG_CLOSE:
95424                                                 //ignore warning
95425                                         }
95426                                 }else{//not space
95427         //S_TAG,        S_ATTR, S_EQ,   S_ATTR_NOQUOT_VALUE
95428         //S_ATTR_SPACE, S_ATTR_END,     S_TAG_SPACE, S_TAG_CLOSE
95429                                         switch(s){
95430                                         //case S_TAG:void();break;
95431                                         //case S_ATTR:void();break;
95432                                         //case S_ATTR_NOQUOT_VALUE:void();break;
95433                                         case S_ATTR_SPACE:
95434                                                 var tagName =  el.tagName;
95435                                                 if(currentNSMap[''] !== 'http://www.w3.org/1999/xhtml' || !attrName.match(/^(?:disabled|checked|selected)$/i)){
95436                                                         errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!');
95437                                                 }
95438                                                 el.add(attrName,attrName,start);
95439                                                 start = p;
95440                                                 s = S_ATTR;
95441                                                 break;
95442                                         case S_ATTR_END:
95443                                                 errorHandler.warning('attribute space is required"'+attrName+'"!!');
95444                                         case S_TAG_SPACE:
95445                                                 s = S_ATTR;
95446                                                 start = p;
95447                                                 break;
95448                                         case S_EQ:
95449                                                 s = S_ATTR_NOQUOT_VALUE;
95450                                                 start = p;
95451                                                 break;
95452                                         case S_TAG_CLOSE:
95453                                                 throw new Error("elements closed character '/' and '>' must be connected to");
95454                                         }
95455                                 }
95456                         }//end outer switch
95457                         //console.log('p++',p)
95458                         p++;
95459                 }
95460         }
95461         /**
95462          * @return true if has new namespace define
95463          */
95464         function appendElement(el,domBuilder,currentNSMap){
95465                 var tagName = el.tagName;
95466                 var localNSMap = null;
95467                 //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
95468                 var i = el.length;
95469                 while(i--){
95470                         var a = el[i];
95471                         var qName = a.qName;
95472                         var value = a.value;
95473                         var nsp = qName.indexOf(':');
95474                         if(nsp>0){
95475                                 var prefix = a.prefix = qName.slice(0,nsp);
95476                                 var localName = qName.slice(nsp+1);
95477                                 var nsPrefix = prefix === 'xmlns' && localName;
95478                         }else{
95479                                 localName = qName;
95480                                 prefix = null;
95481                                 nsPrefix = qName === 'xmlns' && '';
95482                         }
95483                         //can not set prefix,because prefix !== ''
95484                         a.localName = localName ;
95485                         //prefix == null for no ns prefix attribute 
95486                         if(nsPrefix !== false){//hack!!
95487                                 if(localNSMap == null){
95488                                         localNSMap = {};
95489                                         //console.log(currentNSMap,0)
95490                                         _copy(currentNSMap,currentNSMap={});
95491                                         //console.log(currentNSMap,1)
95492                                 }
95493                                 currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
95494                                 a.uri = 'http://www.w3.org/2000/xmlns/';
95495                                 domBuilder.startPrefixMapping(nsPrefix, value); 
95496                         }
95497                 }
95498                 var i = el.length;
95499                 while(i--){
95500                         a = el[i];
95501                         var prefix = a.prefix;
95502                         if(prefix){//no prefix attribute has no namespace
95503                                 if(prefix === 'xml'){
95504                                         a.uri = 'http://www.w3.org/XML/1998/namespace';
95505                                 }if(prefix !== 'xmlns'){
95506                                         a.uri = currentNSMap[prefix || ''];
95507                                         
95508                                         //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
95509                                 }
95510                         }
95511                 }
95512                 var nsp = tagName.indexOf(':');
95513                 if(nsp>0){
95514                         prefix = el.prefix = tagName.slice(0,nsp);
95515                         localName = el.localName = tagName.slice(nsp+1);
95516                 }else{
95517                         prefix = null;//important!!
95518                         localName = el.localName = tagName;
95519                 }
95520                 //no prefix element has default namespace
95521                 var ns = el.uri = currentNSMap[prefix || ''];
95522                 domBuilder.startElement(ns,localName,tagName,el);
95523                 //endPrefixMapping and startPrefixMapping have not any help for dom builder
95524                 //localNSMap = null
95525                 if(el.closed){
95526                         domBuilder.endElement(ns,localName,tagName);
95527                         if(localNSMap){
95528                                 for(prefix in localNSMap){
95529                                         domBuilder.endPrefixMapping(prefix); 
95530                                 }
95531                         }
95532                 }else{
95533                         el.currentNSMap = currentNSMap;
95534                         el.localNSMap = localNSMap;
95535                         //parseStack.push(el);
95536                         return true;
95537                 }
95538         }
95539         function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
95540                 if(/^(?:script|textarea)$/i.test(tagName)){
95541                         var elEndStart =  source.indexOf('</'+tagName+'>',elStartEnd);
95542                         var text = source.substring(elStartEnd+1,elEndStart);
95543                         if(/[&<]/.test(text)){
95544                                 if(/^script$/i.test(tagName)){
95545                                         //if(!/\]\]>/.test(text)){
95546                                                 //lexHandler.startCDATA();
95547                                                 domBuilder.characters(text,0,text.length);
95548                                                 //lexHandler.endCDATA();
95549                                                 return elEndStart;
95550                                         //}
95551                                 }//}else{//text area
95552                                         text = text.replace(/&#?\w+;/g,entityReplacer);
95553                                         domBuilder.characters(text,0,text.length);
95554                                         return elEndStart;
95555                                 //}
95556                                 
95557                         }
95558                 }
95559                 return elStartEnd+1;
95560         }
95561         function fixSelfClosed(source,elStartEnd,tagName,closeMap){
95562                 //if(tagName in closeMap){
95563                 var pos = closeMap[tagName];
95564                 if(pos == null){
95565                         //console.log(tagName)
95566                         pos =  source.lastIndexOf('</'+tagName+'>');
95567                         if(pos<elStartEnd){//忘记闭合
95568                                 pos = source.lastIndexOf('</'+tagName);
95569                         }
95570                         closeMap[tagName] =pos;
95571                 }
95572                 return pos<elStartEnd;
95573                 //} 
95574         }
95575         function _copy(source,target){
95576                 for(var n in source){target[n] = source[n];}
95577         }
95578         function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
95579                 var next= source.charAt(start+2);
95580                 switch(next){
95581                 case '-':
95582                         if(source.charAt(start + 3) === '-'){
95583                                 var end = source.indexOf('-->',start+4);
95584                                 //append comment source.substring(4,end)//<!--
95585                                 if(end>start){
95586                                         domBuilder.comment(source,start+4,end-start-4);
95587                                         return end+3;
95588                                 }else{
95589                                         errorHandler.error("Unclosed comment");
95590                                         return -1;
95591                                 }
95592                         }else{
95593                                 //error
95594                                 return -1;
95595                         }
95596                 default:
95597                         if(source.substr(start+3,6) == 'CDATA['){
95598                                 var end = source.indexOf(']]>',start+9);
95599                                 domBuilder.startCDATA();
95600                                 domBuilder.characters(source,start+9,end-start-9);
95601                                 domBuilder.endCDATA(); 
95602                                 return end+3;
95603                         }
95604                         //<!DOCTYPE
95605                         //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId) 
95606                         var matchs = split(source,start);
95607                         var len = matchs.length;
95608                         if(len>1 && /!doctype/i.test(matchs[0][0])){
95609                                 var name = matchs[1][0];
95610                                 var pubid = len>3 && /^public$/i.test(matchs[2][0]) && matchs[3][0];
95611                                 var sysid = len>4 && matchs[4][0];
95612                                 var lastMatch = matchs[len-1];
95613                                 domBuilder.startDTD(name,pubid && pubid.replace(/^(['"])(.*?)\1$/,'$2'),
95614                                                 sysid && sysid.replace(/^(['"])(.*?)\1$/,'$2'));
95615                                 domBuilder.endDTD();
95616                                 
95617                                 return lastMatch.index+lastMatch[0].length
95618                         }
95619                 }
95620                 return -1;
95621         }
95622
95623
95624
95625         function parseInstruction(source,start,domBuilder){
95626                 var end = source.indexOf('?>',start);
95627                 if(end){
95628                         var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
95629                         if(match){
95630                                 var len = match[0].length;
95631                                 domBuilder.processingInstruction(match[1], match[2]) ;
95632                                 return end+2;
95633                         }else{//error
95634                                 return -1;
95635                         }
95636                 }
95637                 return -1;
95638         }
95639
95640         /**
95641          * @param source
95642          */
95643         function ElementAttributes(source){
95644                 
95645         }
95646         ElementAttributes.prototype = {
95647                 setTagName:function(tagName){
95648                         if(!tagNamePattern.test(tagName)){
95649                                 throw new Error('invalid tagName:'+tagName)
95650                         }
95651                         this.tagName = tagName;
95652                 },
95653                 add:function(qName,value,offset){
95654                         if(!tagNamePattern.test(qName)){
95655                                 throw new Error('invalid attribute:'+qName)
95656                         }
95657                         this[this.length++] = {qName:qName,value:value,offset:offset};
95658                 },
95659                 length:0,
95660                 getLocalName:function(i){return this[i].localName},
95661                 getLocator:function(i){return this[i].locator},
95662                 getQName:function(i){return this[i].qName},
95663                 getURI:function(i){return this[i].uri},
95664                 getValue:function(i){return this[i].value}
95665         //      ,getIndex:function(uri, localName)){
95666         //              if(localName){
95667         //                      
95668         //              }else{
95669         //                      var qName = uri
95670         //              }
95671         //      },
95672         //      getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
95673         //      getType:function(uri,localName){}
95674         //      getType:function(i){},
95675         };
95676
95677
95678
95679
95680         function _set_proto_(thiz,parent){
95681                 thiz.__proto__ = parent;
95682                 return thiz;
95683         }
95684         if(!(_set_proto_({},_set_proto_.prototype) instanceof _set_proto_)){
95685                 _set_proto_ = function(thiz,parent){
95686                         function p(){}          p.prototype = parent;
95687                         p = new p();
95688                         for(parent in thiz){
95689                                 p[parent] = thiz[parent];
95690                         }
95691                         return p;
95692                 };
95693         }
95694
95695         function split(source,start){
95696                 var match;
95697                 var buf = [];
95698                 var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
95699                 reg.lastIndex = start;
95700                 reg.exec(source);//skip <
95701                 while(match = reg.exec(source)){
95702                         buf.push(match);
95703                         if(match[1]){ return buf; }
95704                 }
95705         }
95706
95707         var XMLReader_1 = XMLReader;
95708
95709         var sax = {
95710                 XMLReader: XMLReader_1
95711         };
95712
95713         /*
95714          * DOM Level 2
95715          * Object DOMException
95716          * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
95717          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
95718          */
95719
95720         function copy$3(src,dest){
95721                 for(var p in src){
95722                         dest[p] = src[p];
95723                 }
95724         }
95725         /**
95726         ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
95727         ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
95728          */
95729         function _extends(Class,Super){
95730                 var pt = Class.prototype;
95731                 if(Object.create){
95732                         var ppt = Object.create(Super.prototype);
95733                         pt.__proto__ = ppt;
95734                 }
95735                 if(!(pt instanceof Super)){
95736                         function t(){}          t.prototype = Super.prototype;
95737                         t = new t();
95738                         copy$3(pt,t);
95739                         Class.prototype = pt = t;
95740                 }
95741                 if(pt.constructor != Class){
95742                         if(typeof Class != 'function'){
95743                                 console.error("unknow Class:"+Class);
95744                         }
95745                         pt.constructor = Class;
95746                 }
95747         }
95748         var htmlns = 'http://www.w3.org/1999/xhtml' ;
95749         // Node Types
95750         var NodeType = {};
95751         var ELEMENT_NODE                = NodeType.ELEMENT_NODE                = 1;
95752         var ATTRIBUTE_NODE              = NodeType.ATTRIBUTE_NODE              = 2;
95753         var TEXT_NODE                   = NodeType.TEXT_NODE                   = 3;
95754         var CDATA_SECTION_NODE          = NodeType.CDATA_SECTION_NODE          = 4;
95755         var ENTITY_REFERENCE_NODE       = NodeType.ENTITY_REFERENCE_NODE       = 5;
95756         var ENTITY_NODE                 = NodeType.ENTITY_NODE                 = 6;
95757         var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
95758         var COMMENT_NODE                = NodeType.COMMENT_NODE                = 8;
95759         var DOCUMENT_NODE               = NodeType.DOCUMENT_NODE               = 9;
95760         var DOCUMENT_TYPE_NODE          = NodeType.DOCUMENT_TYPE_NODE          = 10;
95761         var DOCUMENT_FRAGMENT_NODE      = NodeType.DOCUMENT_FRAGMENT_NODE      = 11;
95762         var NOTATION_NODE               = NodeType.NOTATION_NODE               = 12;
95763
95764         // ExceptionCode
95765         var ExceptionCode = {};
95766         var ExceptionMessage = {};
95767         var INDEX_SIZE_ERR              = ExceptionCode.INDEX_SIZE_ERR              = ((ExceptionMessage[1]="Index size error"),1);
95768         var DOMSTRING_SIZE_ERR          = ExceptionCode.DOMSTRING_SIZE_ERR          = ((ExceptionMessage[2]="DOMString size error"),2);
95769         var HIERARCHY_REQUEST_ERR       = ExceptionCode.HIERARCHY_REQUEST_ERR       = ((ExceptionMessage[3]="Hierarchy request error"),3);
95770         var WRONG_DOCUMENT_ERR          = ExceptionCode.WRONG_DOCUMENT_ERR          = ((ExceptionMessage[4]="Wrong document"),4);
95771         var INVALID_CHARACTER_ERR       = ExceptionCode.INVALID_CHARACTER_ERR       = ((ExceptionMessage[5]="Invalid character"),5);
95772         var NO_DATA_ALLOWED_ERR         = ExceptionCode.NO_DATA_ALLOWED_ERR         = ((ExceptionMessage[6]="No data allowed"),6);
95773         var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
95774         var NOT_FOUND_ERR               = ExceptionCode.NOT_FOUND_ERR               = ((ExceptionMessage[8]="Not found"),8);
95775         var NOT_SUPPORTED_ERR           = ExceptionCode.NOT_SUPPORTED_ERR           = ((ExceptionMessage[9]="Not supported"),9);
95776         var INUSE_ATTRIBUTE_ERR         = ExceptionCode.INUSE_ATTRIBUTE_ERR         = ((ExceptionMessage[10]="Attribute in use"),10);
95777         //level2
95778         var INVALID_STATE_ERR           = ExceptionCode.INVALID_STATE_ERR               = ((ExceptionMessage[11]="Invalid state"),11);
95779         var SYNTAX_ERR                  = ExceptionCode.SYNTAX_ERR                      = ((ExceptionMessage[12]="Syntax error"),12);
95780         var INVALID_MODIFICATION_ERR    = ExceptionCode.INVALID_MODIFICATION_ERR        = ((ExceptionMessage[13]="Invalid modification"),13);
95781         var NAMESPACE_ERR               = ExceptionCode.NAMESPACE_ERR                   = ((ExceptionMessage[14]="Invalid namespace"),14);
95782         var INVALID_ACCESS_ERR          = ExceptionCode.INVALID_ACCESS_ERR              = ((ExceptionMessage[15]="Invalid access"),15);
95783
95784
95785         function DOMException$2(code, message) {
95786                 if(message instanceof Error){
95787                         var error = message;
95788                 }else{
95789                         error = this;
95790                         Error.call(this, ExceptionMessage[code]);
95791                         this.message = ExceptionMessage[code];
95792                         if(Error.captureStackTrace) { Error.captureStackTrace(this, DOMException$2); }
95793                 }
95794                 error.code = code;
95795                 if(message) { this.message = this.message + ": " + message; }
95796                 return error;
95797         }DOMException$2.prototype = Error.prototype;
95798         copy$3(ExceptionCode,DOMException$2);
95799         /**
95800          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
95801          * 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.
95802          * The items in the NodeList are accessible via an integral index, starting from 0.
95803          */
95804         function NodeList() {
95805         }NodeList.prototype = {
95806                 /**
95807                  * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
95808                  * @standard level1
95809                  */
95810                 length:0, 
95811                 /**
95812                  * 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.
95813                  * @standard level1
95814                  * @param index  unsigned long 
95815                  *   Index into the collection.
95816                  * @return Node
95817                  *      The node at the indexth position in the NodeList, or null if that is not a valid index. 
95818                  */
95819                 item: function(index) {
95820                         return this[index] || null;
95821                 },
95822                 toString:function(isHTML,nodeFilter){
95823                         for(var buf = [], i = 0;i<this.length;i++){
95824                                 serializeToString(this[i],buf,isHTML,nodeFilter);
95825                         }
95826                         return buf.join('');
95827                 }
95828         };
95829         function LiveNodeList(node,refresh){
95830                 this._node = node;
95831                 this._refresh = refresh;
95832                 _updateLiveList(this);
95833         }
95834         function _updateLiveList(list){
95835                 var inc = list._node._inc || list._node.ownerDocument._inc;
95836                 if(list._inc != inc){
95837                         var ls = list._refresh(list._node);
95838                         //console.log(ls.length)
95839                         __set__(list,'length',ls.length);
95840                         copy$3(ls,list);
95841                         list._inc = inc;
95842                 }
95843         }
95844         LiveNodeList.prototype.item = function(i){
95845                 _updateLiveList(this);
95846                 return this[i];
95847         };
95848
95849         _extends(LiveNodeList,NodeList);
95850         /**
95851          * 
95852          * 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.
95853          * NamedNodeMap objects in the DOM are live.
95854          * used for attributes or DocumentType entities 
95855          */
95856         function NamedNodeMap() {
95857         }
95858         function _findNodeIndex(list,node){
95859                 var i = list.length;
95860                 while(i--){
95861                         if(list[i] === node){return i}
95862                 }
95863         }
95864
95865         function _addNamedNode(el,list,newAttr,oldAttr){
95866                 if(oldAttr){
95867                         list[_findNodeIndex(list,oldAttr)] = newAttr;
95868                 }else{
95869                         list[list.length++] = newAttr;
95870                 }
95871                 if(el){
95872                         newAttr.ownerElement = el;
95873                         var doc = el.ownerDocument;
95874                         if(doc){
95875                                 oldAttr && _onRemoveAttribute(doc,el,oldAttr);
95876                                 _onAddAttribute(doc,el,newAttr);
95877                         }
95878                 }
95879         }
95880         function _removeNamedNode(el,list,attr){
95881                 //console.log('remove attr:'+attr)
95882                 var i = _findNodeIndex(list,attr);
95883                 if(i>=0){
95884                         var lastIndex = list.length-1;
95885                         while(i<lastIndex){
95886                                 list[i] = list[++i];
95887                         }
95888                         list.length = lastIndex;
95889                         if(el){
95890                                 var doc = el.ownerDocument;
95891                                 if(doc){
95892                                         _onRemoveAttribute(doc,el,attr);
95893                                         attr.ownerElement = null;
95894                                 }
95895                         }
95896                 }else{
95897                         throw DOMException$2(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
95898                 }
95899         }
95900         NamedNodeMap.prototype = {
95901                 length:0,
95902                 item:NodeList.prototype.item,
95903                 getNamedItem: function(key) {
95904         //              if(key.indexOf(':')>0 || key == 'xmlns'){
95905         //                      return null;
95906         //              }
95907                         //console.log()
95908                         var i = this.length;
95909                         while(i--){
95910                                 var attr = this[i];
95911                                 //console.log(attr.nodeName,key)
95912                                 if(attr.nodeName == key){
95913                                         return attr;
95914                                 }
95915                         }
95916                 },
95917                 setNamedItem: function(attr) {
95918                         var el = attr.ownerElement;
95919                         if(el && el!=this._ownerElement){
95920                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
95921                         }
95922                         var oldAttr = this.getNamedItem(attr.nodeName);
95923                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
95924                         return oldAttr;
95925                 },
95926                 /* returns Node */
95927                 setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
95928                         var el = attr.ownerElement, oldAttr;
95929                         if(el && el!=this._ownerElement){
95930                                 throw new DOMException$2(INUSE_ATTRIBUTE_ERR);
95931                         }
95932                         oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
95933                         _addNamedNode(this._ownerElement,this,attr,oldAttr);
95934                         return oldAttr;
95935                 },
95936
95937                 /* returns Node */
95938                 removeNamedItem: function(key) {
95939                         var attr = this.getNamedItem(key);
95940                         _removeNamedNode(this._ownerElement,this,attr);
95941                         return attr;
95942                         
95943                         
95944                 },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
95945                 
95946                 //for level2
95947                 removeNamedItemNS:function(namespaceURI,localName){
95948                         var attr = this.getNamedItemNS(namespaceURI,localName);
95949                         _removeNamedNode(this._ownerElement,this,attr);
95950                         return attr;
95951                 },
95952                 getNamedItemNS: function(namespaceURI, localName) {
95953                         var i = this.length;
95954                         while(i--){
95955                                 var node = this[i];
95956                                 if(node.localName == localName && node.namespaceURI == namespaceURI){
95957                                         return node;
95958                                 }
95959                         }
95960                         return null;
95961                 }
95962         };
95963         /**
95964          * @see http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490
95965          */
95966         function DOMImplementation(/* Object */ features) {
95967                 this._features = {};
95968                 if (features) {
95969                         for (var feature in features) {
95970                                  this._features = features[feature];
95971                         }
95972                 }
95973         }
95974         DOMImplementation.prototype = {
95975                 hasFeature: function(/* string */ feature, /* string */ version) {
95976                         var versions = this._features[feature.toLowerCase()];
95977                         if (versions && (!version || version in versions)) {
95978                                 return true;
95979                         } else {
95980                                 return false;
95981                         }
95982                 },
95983                 // Introduced in DOM Level 2:
95984                 createDocument:function(namespaceURI,  qualifiedName, doctype){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR,WRONG_DOCUMENT_ERR
95985                         var doc = new Document();
95986                         doc.implementation = this;
95987                         doc.childNodes = new NodeList();
95988                         doc.doctype = doctype;
95989                         if(doctype){
95990                                 doc.appendChild(doctype);
95991                         }
95992                         if(qualifiedName){
95993                                 var root = doc.createElementNS(namespaceURI,qualifiedName);
95994                                 doc.appendChild(root);
95995                         }
95996                         return doc;
95997                 },
95998                 // Introduced in DOM Level 2:
95999                 createDocumentType:function(qualifiedName, publicId, systemId){// raises:INVALID_CHARACTER_ERR,NAMESPACE_ERR
96000                         var node = new DocumentType();
96001                         node.name = qualifiedName;
96002                         node.nodeName = qualifiedName;
96003                         node.publicId = publicId;
96004                         node.systemId = systemId;
96005                         // Introduced in DOM Level 2:
96006                         //readonly attribute DOMString        internalSubset;
96007                         
96008                         //TODO:..
96009                         //  readonly attribute NamedNodeMap     entities;
96010                         //  readonly attribute NamedNodeMap     notations;
96011                         return node;
96012                 }
96013         };
96014
96015
96016         /**
96017          * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
96018          */
96019
96020         function Node$3() {
96021         }
96022         Node$3.prototype = {
96023                 firstChild : null,
96024                 lastChild : null,
96025                 previousSibling : null,
96026                 nextSibling : null,
96027                 attributes : null,
96028                 parentNode : null,
96029                 childNodes : null,
96030                 ownerDocument : null,
96031                 nodeValue : null,
96032                 namespaceURI : null,
96033                 prefix : null,
96034                 localName : null,
96035                 // Modified in DOM Level 2:
96036                 insertBefore:function(newChild, refChild){//raises 
96037                         return _insertBefore(this,newChild,refChild);
96038                 },
96039                 replaceChild:function(newChild, oldChild){//raises 
96040                         this.insertBefore(newChild,oldChild);
96041                         if(oldChild){
96042                                 this.removeChild(oldChild);
96043                         }
96044                 },
96045                 removeChild:function(oldChild){
96046                         return _removeChild(this,oldChild);
96047                 },
96048                 appendChild:function(newChild){
96049                         return this.insertBefore(newChild,null);
96050                 },
96051                 hasChildNodes:function(){
96052                         return this.firstChild != null;
96053                 },
96054                 cloneNode:function(deep){
96055                         return cloneNode(this.ownerDocument||this,this,deep);
96056                 },
96057                 // Modified in DOM Level 2:
96058                 normalize:function(){
96059                         var child = this.firstChild;
96060                         while(child){
96061                                 var next = child.nextSibling;
96062                                 if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
96063                                         this.removeChild(next);
96064                                         child.appendData(next.data);
96065                                 }else{
96066                                         child.normalize();
96067                                         child = next;
96068                                 }
96069                         }
96070                 },
96071                 // Introduced in DOM Level 2:
96072                 isSupported:function(feature, version){
96073                         return this.ownerDocument.implementation.hasFeature(feature,version);
96074                 },
96075             // Introduced in DOM Level 2:
96076             hasAttributes:function(){
96077                 return this.attributes.length>0;
96078             },
96079             lookupPrefix:function(namespaceURI){
96080                 var el = this;
96081                 while(el){
96082                         var map = el._nsMap;
96083                         //console.dir(map)
96084                         if(map){
96085                                 for(var n in map){
96086                                         if(map[n] == namespaceURI){
96087                                                 return n;
96088                                         }
96089                                 }
96090                         }
96091                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
96092                 }
96093                 return null;
96094             },
96095             // Introduced in DOM Level 3:
96096             lookupNamespaceURI:function(prefix){
96097                 var el = this;
96098                 while(el){
96099                         var map = el._nsMap;
96100                         //console.dir(map)
96101                         if(map){
96102                                 if(prefix in map){
96103                                         return map[prefix] ;
96104                                 }
96105                         }
96106                         el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
96107                 }
96108                 return null;
96109             },
96110             // Introduced in DOM Level 3:
96111             isDefaultNamespace:function(namespaceURI){
96112                 var prefix = this.lookupPrefix(namespaceURI);
96113                 return prefix == null;
96114             }
96115         };
96116
96117
96118         function _xmlEncoder(c){
96119                 return c == '<' && '&lt;' ||
96120                  c == '>' && '&gt;' ||
96121                  c == '&' && '&amp;' ||
96122                  c == '"' && '&quot;' ||
96123                  '&#'+c.charCodeAt()+';'
96124         }
96125
96126
96127         copy$3(NodeType,Node$3);
96128         copy$3(NodeType,Node$3.prototype);
96129
96130         /**
96131          * @param callback return true for continue,false for break
96132          * @return boolean true: break visit;
96133          */
96134         function _visitNode(node,callback){
96135                 if(callback(node)){
96136                         return true;
96137                 }
96138                 if(node = node.firstChild){
96139                         do{
96140                                 if(_visitNode(node,callback)){return true}
96141                 }while(node=node.nextSibling)
96142             }
96143         }
96144
96145
96146
96147         function Document(){
96148         }
96149         function _onAddAttribute(doc,el,newAttr){
96150                 doc && doc._inc++;
96151                 var ns = newAttr.namespaceURI ;
96152                 if(ns == 'http://www.w3.org/2000/xmlns/'){
96153                         //update namespace
96154                         el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value;
96155                 }
96156         }
96157         function _onRemoveAttribute(doc,el,newAttr,remove){
96158                 doc && doc._inc++;
96159                 var ns = newAttr.namespaceURI ;
96160                 if(ns == 'http://www.w3.org/2000/xmlns/'){
96161                         //update namespace
96162                         delete el._nsMap[newAttr.prefix?newAttr.localName:''];
96163                 }
96164         }
96165         function _onUpdateChild(doc,el,newChild){
96166                 if(doc && doc._inc){
96167                         doc._inc++;
96168                         //update childNodes
96169                         var cs = el.childNodes;
96170                         if(newChild){
96171                                 cs[cs.length++] = newChild;
96172                         }else{
96173                                 //console.log(1)
96174                                 var child = el.firstChild;
96175                                 var i = 0;
96176                                 while(child){
96177                                         cs[i++] = child;
96178                                         child =child.nextSibling;
96179                                 }
96180                                 cs.length = i;
96181                         }
96182                 }
96183         }
96184
96185         /**
96186          * attributes;
96187          * children;
96188          * 
96189          * writeable properties:
96190          * nodeValue,Attr:value,CharacterData:data
96191          * prefix
96192          */
96193         function _removeChild(parentNode,child){
96194                 var previous = child.previousSibling;
96195                 var next = child.nextSibling;
96196                 if(previous){
96197                         previous.nextSibling = next;
96198                 }else{
96199                         parentNode.firstChild = next;
96200                 }
96201                 if(next){
96202                         next.previousSibling = previous;
96203                 }else{
96204                         parentNode.lastChild = previous;
96205                 }
96206                 _onUpdateChild(parentNode.ownerDocument,parentNode);
96207                 return child;
96208         }
96209         /**
96210          * preformance key(refChild == null)
96211          */
96212         function _insertBefore(parentNode,newChild,nextChild){
96213                 var cp = newChild.parentNode;
96214                 if(cp){
96215                         cp.removeChild(newChild);//remove and update
96216                 }
96217                 if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
96218                         var newFirst = newChild.firstChild;
96219                         if (newFirst == null) {
96220                                 return newChild;
96221                         }
96222                         var newLast = newChild.lastChild;
96223                 }else{
96224                         newFirst = newLast = newChild;
96225                 }
96226                 var pre = nextChild ? nextChild.previousSibling : parentNode.lastChild;
96227
96228                 newFirst.previousSibling = pre;
96229                 newLast.nextSibling = nextChild;
96230                 
96231                 
96232                 if(pre){
96233                         pre.nextSibling = newFirst;
96234                 }else{
96235                         parentNode.firstChild = newFirst;
96236                 }
96237                 if(nextChild == null){
96238                         parentNode.lastChild = newLast;
96239                 }else{
96240                         nextChild.previousSibling = newLast;
96241                 }
96242                 do{
96243                         newFirst.parentNode = parentNode;
96244                 }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
96245                 _onUpdateChild(parentNode.ownerDocument||parentNode,parentNode);
96246                 //console.log(parentNode.lastChild.nextSibling == null)
96247                 if (newChild.nodeType == DOCUMENT_FRAGMENT_NODE) {
96248                         newChild.firstChild = newChild.lastChild = null;
96249                 }
96250                 return newChild;
96251         }
96252         function _appendSingleChild(parentNode,newChild){
96253                 var cp = newChild.parentNode;
96254                 if(cp){
96255                         var pre = parentNode.lastChild;
96256                         cp.removeChild(newChild);//remove and update
96257                         var pre = parentNode.lastChild;
96258                 }
96259                 var pre = parentNode.lastChild;
96260                 newChild.parentNode = parentNode;
96261                 newChild.previousSibling = pre;
96262                 newChild.nextSibling = null;
96263                 if(pre){
96264                         pre.nextSibling = newChild;
96265                 }else{
96266                         parentNode.firstChild = newChild;
96267                 }
96268                 parentNode.lastChild = newChild;
96269                 _onUpdateChild(parentNode.ownerDocument,parentNode,newChild);
96270                 return newChild;
96271                 //console.log("__aa",parentNode.lastChild.nextSibling == null)
96272         }
96273         Document.prototype = {
96274                 //implementation : null,
96275                 nodeName :  '#document',
96276                 nodeType :  DOCUMENT_NODE,
96277                 doctype :  null,
96278                 documentElement :  null,
96279                 _inc : 1,
96280                 
96281                 insertBefore :  function(newChild, refChild){//raises 
96282                         if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
96283                                 var child = newChild.firstChild;
96284                                 while(child){
96285                                         var next = child.nextSibling;
96286                                         this.insertBefore(child,refChild);
96287                                         child = next;
96288                                 }
96289                                 return newChild;
96290                         }
96291                         if(this.documentElement == null && newChild.nodeType == ELEMENT_NODE){
96292                                 this.documentElement = newChild;
96293                         }
96294                         
96295                         return _insertBefore(this,newChild,refChild),(newChild.ownerDocument = this),newChild;
96296                 },
96297                 removeChild :  function(oldChild){
96298                         if(this.documentElement == oldChild){
96299                                 this.documentElement = null;
96300                         }
96301                         return _removeChild(this,oldChild);
96302                 },
96303                 // Introduced in DOM Level 2:
96304                 importNode : function(importedNode,deep){
96305                         return importNode(this,importedNode,deep);
96306                 },
96307                 // Introduced in DOM Level 2:
96308                 getElementById :        function(id){
96309                         var rtv = null;
96310                         _visitNode(this.documentElement,function(node){
96311                                 if(node.nodeType == ELEMENT_NODE){
96312                                         if(node.getAttribute('id') == id){
96313                                                 rtv = node;
96314                                                 return true;
96315                                         }
96316                                 }
96317                         });
96318                         return rtv;
96319                 },
96320                 
96321                 //document factory method:
96322                 createElement : function(tagName){
96323                         var node = new Element();
96324                         node.ownerDocument = this;
96325                         node.nodeName = tagName;
96326                         node.tagName = tagName;
96327                         node.childNodes = new NodeList();
96328                         var attrs       = node.attributes = new NamedNodeMap();
96329                         attrs._ownerElement = node;
96330                         return node;
96331                 },
96332                 createDocumentFragment :        function(){
96333                         var node = new DocumentFragment();
96334                         node.ownerDocument = this;
96335                         node.childNodes = new NodeList();
96336                         return node;
96337                 },
96338                 createTextNode :        function(data){
96339                         var node = new Text();
96340                         node.ownerDocument = this;
96341                         node.appendData(data);
96342                         return node;
96343                 },
96344                 createComment : function(data){
96345                         var node = new Comment();
96346                         node.ownerDocument = this;
96347                         node.appendData(data);
96348                         return node;
96349                 },
96350                 createCDATASection :    function(data){
96351                         var node = new CDATASection();
96352                         node.ownerDocument = this;
96353                         node.appendData(data);
96354                         return node;
96355                 },
96356                 createProcessingInstruction :   function(target,data){
96357                         var node = new ProcessingInstruction();
96358                         node.ownerDocument = this;
96359                         node.tagName = node.target = target;
96360                         node.nodeValue= node.data = data;
96361                         return node;
96362                 },
96363                 createAttribute :       function(name){
96364                         var node = new Attr();
96365                         node.ownerDocument      = this;
96366                         node.name = name;
96367                         node.nodeName   = name;
96368                         node.localName = name;
96369                         node.specified = true;
96370                         return node;
96371                 },
96372                 createEntityReference : function(name){
96373                         var node = new EntityReference();
96374                         node.ownerDocument      = this;
96375                         node.nodeName   = name;
96376                         return node;
96377                 },
96378                 // Introduced in DOM Level 2:
96379                 createElementNS :       function(namespaceURI,qualifiedName){
96380                         var node = new Element();
96381                         var pl = qualifiedName.split(':');
96382                         var attrs       = node.attributes = new NamedNodeMap();
96383                         node.childNodes = new NodeList();
96384                         node.ownerDocument = this;
96385                         node.nodeName = qualifiedName;
96386                         node.tagName = qualifiedName;
96387                         node.namespaceURI = namespaceURI;
96388                         if(pl.length == 2){
96389                                 node.prefix = pl[0];
96390                                 node.localName = pl[1];
96391                         }else{
96392                                 //el.prefix = null;
96393                                 node.localName = qualifiedName;
96394                         }
96395                         attrs._ownerElement = node;
96396                         return node;
96397                 },
96398                 // Introduced in DOM Level 2:
96399                 createAttributeNS :     function(namespaceURI,qualifiedName){
96400                         var node = new Attr();
96401                         var pl = qualifiedName.split(':');
96402                         node.ownerDocument = this;
96403                         node.nodeName = qualifiedName;
96404                         node.name = qualifiedName;
96405                         node.namespaceURI = namespaceURI;
96406                         node.specified = true;
96407                         if(pl.length == 2){
96408                                 node.prefix = pl[0];
96409                                 node.localName = pl[1];
96410                         }else{
96411                                 //el.prefix = null;
96412                                 node.localName = qualifiedName;
96413                         }
96414                         return node;
96415                 }
96416         };
96417         _extends(Document,Node$3);
96418
96419
96420         function Element() {
96421                 this._nsMap = {};
96422         }Element.prototype = {
96423                 nodeType : ELEMENT_NODE,
96424                 hasAttribute : function(name){
96425                         return this.getAttributeNode(name)!=null;
96426                 },
96427                 getAttribute : function(name){
96428                         var attr = this.getAttributeNode(name);
96429                         return attr && attr.value || '';
96430                 },
96431                 getAttributeNode : function(name){
96432                         return this.attributes.getNamedItem(name);
96433                 },
96434                 setAttribute : function(name, value){
96435                         var attr = this.ownerDocument.createAttribute(name);
96436                         attr.value = attr.nodeValue = "" + value;
96437                         this.setAttributeNode(attr);
96438                 },
96439                 removeAttribute : function(name){
96440                         var attr = this.getAttributeNode(name);
96441                         attr && this.removeAttributeNode(attr);
96442                 },
96443                 
96444                 //four real opeartion method
96445                 appendChild:function(newChild){
96446                         if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
96447                                 return this.insertBefore(newChild,null);
96448                         }else{
96449                                 return _appendSingleChild(this,newChild);
96450                         }
96451                 },
96452                 setAttributeNode : function(newAttr){
96453                         return this.attributes.setNamedItem(newAttr);
96454                 },
96455                 setAttributeNodeNS : function(newAttr){
96456                         return this.attributes.setNamedItemNS(newAttr);
96457                 },
96458                 removeAttributeNode : function(oldAttr){
96459                         //console.log(this == oldAttr.ownerElement)
96460                         return this.attributes.removeNamedItem(oldAttr.nodeName);
96461                 },
96462                 //get real attribute name,and remove it by removeAttributeNode
96463                 removeAttributeNS : function(namespaceURI, localName){
96464                         var old = this.getAttributeNodeNS(namespaceURI, localName);
96465                         old && this.removeAttributeNode(old);
96466                 },
96467                 
96468                 hasAttributeNS : function(namespaceURI, localName){
96469                         return this.getAttributeNodeNS(namespaceURI, localName)!=null;
96470                 },
96471                 getAttributeNS : function(namespaceURI, localName){
96472                         var attr = this.getAttributeNodeNS(namespaceURI, localName);
96473                         return attr && attr.value || '';
96474                 },
96475                 setAttributeNS : function(namespaceURI, qualifiedName, value){
96476                         var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
96477                         attr.value = attr.nodeValue = "" + value;
96478                         this.setAttributeNode(attr);
96479                 },
96480                 getAttributeNodeNS : function(namespaceURI, localName){
96481                         return this.attributes.getNamedItemNS(namespaceURI, localName);
96482                 },
96483                 
96484                 getElementsByTagName : function(tagName){
96485                         return new LiveNodeList(this,function(base){
96486                                 var ls = [];
96487                                 _visitNode(base,function(node){
96488                                         if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
96489                                                 ls.push(node);
96490                                         }
96491                                 });
96492                                 return ls;
96493                         });
96494                 },
96495                 getElementsByTagNameNS : function(namespaceURI, localName){
96496                         return new LiveNodeList(this,function(base){
96497                                 var ls = [];
96498                                 _visitNode(base,function(node){
96499                                         if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
96500                                                 ls.push(node);
96501                                         }
96502                                 });
96503                                 return ls;
96504                                 
96505                         });
96506                 }
96507         };
96508         Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
96509         Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
96510
96511
96512         _extends(Element,Node$3);
96513         function Attr() {
96514         }Attr.prototype.nodeType = ATTRIBUTE_NODE;
96515         _extends(Attr,Node$3);
96516
96517
96518         function CharacterData() {
96519         }CharacterData.prototype = {
96520                 data : '',
96521                 substringData : function(offset, count) {
96522                         return this.data.substring(offset, offset+count);
96523                 },
96524                 appendData: function(text) {
96525                         text = this.data+text;
96526                         this.nodeValue = this.data = text;
96527                         this.length = text.length;
96528                 },
96529                 insertData: function(offset,text) {
96530                         this.replaceData(offset,0,text);
96531                 
96532                 },
96533                 appendChild:function(newChild){
96534                         throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
96535                 },
96536                 deleteData: function(offset, count) {
96537                         this.replaceData(offset,count,"");
96538                 },
96539                 replaceData: function(offset, count, text) {
96540                         var start = this.data.substring(0,offset);
96541                         var end = this.data.substring(offset+count);
96542                         text = start + text + end;
96543                         this.nodeValue = this.data = text;
96544                         this.length = text.length;
96545                 }
96546         };
96547         _extends(CharacterData,Node$3);
96548         function Text() {
96549         }Text.prototype = {
96550                 nodeName : "#text",
96551                 nodeType : TEXT_NODE,
96552                 splitText : function(offset) {
96553                         var text = this.data;
96554                         var newText = text.substring(offset);
96555                         text = text.substring(0, offset);
96556                         this.data = this.nodeValue = text;
96557                         this.length = text.length;
96558                         var newNode = this.ownerDocument.createTextNode(newText);
96559                         if(this.parentNode){
96560                                 this.parentNode.insertBefore(newNode, this.nextSibling);
96561                         }
96562                         return newNode;
96563                 }
96564         };
96565         _extends(Text,CharacterData);
96566         function Comment() {
96567         }Comment.prototype = {
96568                 nodeName : "#comment",
96569                 nodeType : COMMENT_NODE
96570         };
96571         _extends(Comment,CharacterData);
96572
96573         function CDATASection() {
96574         }CDATASection.prototype = {
96575                 nodeName : "#cdata-section",
96576                 nodeType : CDATA_SECTION_NODE
96577         };
96578         _extends(CDATASection,CharacterData);
96579
96580
96581         function DocumentType() {
96582         }DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
96583         _extends(DocumentType,Node$3);
96584
96585         function Notation() {
96586         }Notation.prototype.nodeType = NOTATION_NODE;
96587         _extends(Notation,Node$3);
96588
96589         function Entity() {
96590         }Entity.prototype.nodeType = ENTITY_NODE;
96591         _extends(Entity,Node$3);
96592
96593         function EntityReference() {
96594         }EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
96595         _extends(EntityReference,Node$3);
96596
96597         function DocumentFragment() {
96598         }DocumentFragment.prototype.nodeName =  "#document-fragment";
96599         DocumentFragment.prototype.nodeType =   DOCUMENT_FRAGMENT_NODE;
96600         _extends(DocumentFragment,Node$3);
96601
96602
96603         function ProcessingInstruction() {
96604         }
96605         ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
96606         _extends(ProcessingInstruction,Node$3);
96607         function XMLSerializer$1(){}
96608         XMLSerializer$1.prototype.serializeToString = function(node,isHtml,nodeFilter){
96609                 return nodeSerializeToString.call(node,isHtml,nodeFilter);
96610         };
96611         Node$3.prototype.toString = nodeSerializeToString;
96612         function nodeSerializeToString(isHtml,nodeFilter){
96613                 var buf = [];
96614                 var refNode = this.nodeType == 9?this.documentElement:this;
96615                 var prefix = refNode.prefix;
96616                 var uri = refNode.namespaceURI;
96617                 
96618                 if(uri && prefix == null){
96619                         //console.log(prefix)
96620                         var prefix = refNode.lookupPrefix(uri);
96621                         if(prefix == null){
96622                                 //isHTML = true;
96623                                 var visibleNamespaces=[
96624                                 {namespace:uri,prefix:null} ];
96625                         }
96626                 }
96627                 serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
96628                 //console.log('###',this.nodeType,uri,prefix,buf.join(''))
96629                 return buf.join('');
96630         }
96631         function needNamespaceDefine(node,isHTML, visibleNamespaces) {
96632                 var prefix = node.prefix||'';
96633                 var uri = node.namespaceURI;
96634                 if (!prefix && !uri){
96635                         return false;
96636                 }
96637                 if (prefix === "xml" && uri === "http://www.w3.org/XML/1998/namespace" 
96638                         || uri == 'http://www.w3.org/2000/xmlns/'){
96639                         return false;
96640                 }
96641                 
96642                 var i = visibleNamespaces.length; 
96643                 //console.log('@@@@',node.tagName,prefix,uri,visibleNamespaces)
96644                 while (i--) {
96645                         var ns = visibleNamespaces[i];
96646                         // get namespace prefix
96647                         //console.log(node.nodeType,node.tagName,ns.prefix,prefix)
96648                         if (ns.prefix == prefix){
96649                                 return ns.namespace != uri;
96650                         }
96651                 }
96652                 //console.log(isHTML,uri,prefix=='')
96653                 //if(isHTML && prefix ==null && uri == 'http://www.w3.org/1999/xhtml'){
96654                 //      return false;
96655                 //}
96656                 //node.flag = '11111'
96657                 //console.error(3,true,node.flag,node.prefix,node.namespaceURI)
96658                 return true;
96659         }
96660         function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
96661                 if(nodeFilter){
96662                         node = nodeFilter(node);
96663                         if(node){
96664                                 if(typeof node == 'string'){
96665                                         buf.push(node);
96666                                         return;
96667                                 }
96668                         }else{
96669                                 return;
96670                         }
96671                         //buf.sort.apply(attrs, attributeSorter);
96672                 }
96673                 switch(node.nodeType){
96674                 case ELEMENT_NODE:
96675                         if (!visibleNamespaces) { visibleNamespaces = []; }
96676                         var startVisibleNamespaces = visibleNamespaces.length;
96677                         var attrs = node.attributes;
96678                         var len = attrs.length;
96679                         var child = node.firstChild;
96680                         var nodeName = node.tagName;
96681                         
96682                         isHTML =  (htmlns === node.namespaceURI) ||isHTML; 
96683                         buf.push('<',nodeName);
96684                         
96685                         
96686                         
96687                         for(var i=0;i<len;i++){
96688                                 // add namespaces for attributes
96689                                 var attr = attrs.item(i);
96690                                 if (attr.prefix == 'xmlns') {
96691                                         visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
96692                                 }else if(attr.nodeName == 'xmlns'){
96693                                         visibleNamespaces.push({ prefix: '', namespace: attr.value });
96694                                 }
96695                         }
96696                         for(var i=0;i<len;i++){
96697                                 var attr = attrs.item(i);
96698                                 if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
96699                                         var prefix = attr.prefix||'';
96700                                         var uri = attr.namespaceURI;
96701                                         var ns = prefix ? ' xmlns:' + prefix : " xmlns";
96702                                         buf.push(ns, '="' , uri , '"');
96703                                         visibleNamespaces.push({ prefix: prefix, namespace:uri });
96704                                 }
96705                                 serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
96706                         }
96707                         // add namespace for current node               
96708                         if (needNamespaceDefine(node,isHTML, visibleNamespaces)) {
96709                                 var prefix = node.prefix||'';
96710                                 var uri = node.namespaceURI;
96711                                 var ns = prefix ? ' xmlns:' + prefix : " xmlns";
96712                                 buf.push(ns, '="' , uri , '"');
96713                                 visibleNamespaces.push({ prefix: prefix, namespace:uri });
96714                         }
96715                         
96716                         if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
96717                                 buf.push('>');
96718                                 //if is cdata child node
96719                                 if(isHTML && /^script$/i.test(nodeName)){
96720                                         while(child){
96721                                                 if(child.data){
96722                                                         buf.push(child.data);
96723                                                 }else{
96724                                                         serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
96725                                                 }
96726                                                 child = child.nextSibling;
96727                                         }
96728                                 }else
96729                                 {
96730                                         while(child){
96731                                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
96732                                                 child = child.nextSibling;
96733                                         }
96734                                 }
96735                                 buf.push('</',nodeName,'>');
96736                         }else{
96737                                 buf.push('/>');
96738                         }
96739                         // remove added visible namespaces
96740                         //visibleNamespaces.length = startVisibleNamespaces;
96741                         return;
96742                 case DOCUMENT_NODE:
96743                 case DOCUMENT_FRAGMENT_NODE:
96744                         var child = node.firstChild;
96745                         while(child){
96746                                 serializeToString(child,buf,isHTML,nodeFilter,visibleNamespaces);
96747                                 child = child.nextSibling;
96748                         }
96749                         return;
96750                 case ATTRIBUTE_NODE:
96751                         return buf.push(' ',node.name,'="',node.value.replace(/[<&"]/g,_xmlEncoder),'"');
96752                 case TEXT_NODE:
96753                         return buf.push(node.data.replace(/[<&]/g,_xmlEncoder));
96754                 case CDATA_SECTION_NODE:
96755                         return buf.push( '<![CDATA[',node.data,']]>');
96756                 case COMMENT_NODE:
96757                         return buf.push( "<!--",node.data,"-->");
96758                 case DOCUMENT_TYPE_NODE:
96759                         var pubid = node.publicId;
96760                         var sysid = node.systemId;
96761                         buf.push('<!DOCTYPE ',node.name);
96762                         if(pubid){
96763                                 buf.push(' PUBLIC "',pubid);
96764                                 if (sysid && sysid!='.') {
96765                                         buf.push( '" "',sysid);
96766                                 }
96767                                 buf.push('">');
96768                         }else if(sysid && sysid!='.'){
96769                                 buf.push(' SYSTEM "',sysid,'">');
96770                         }else{
96771                                 var sub = node.internalSubset;
96772                                 if(sub){
96773                                         buf.push(" [",sub,"]");
96774                                 }
96775                                 buf.push(">");
96776                         }
96777                         return;
96778                 case PROCESSING_INSTRUCTION_NODE:
96779                         return buf.push( "<?",node.target," ",node.data,"?>");
96780                 case ENTITY_REFERENCE_NODE:
96781                         return buf.push( '&',node.nodeName,';');
96782                 //case ENTITY_NODE:
96783                 //case NOTATION_NODE:
96784                 default:
96785                         buf.push('??',node.nodeName);
96786                 }
96787         }
96788         function importNode(doc,node,deep){
96789                 var node2;
96790                 switch (node.nodeType) {
96791                 case ELEMENT_NODE:
96792                         node2 = node.cloneNode(false);
96793                         node2.ownerDocument = doc;
96794                         //var attrs = node2.attributes;
96795                         //var len = attrs.length;
96796                         //for(var i=0;i<len;i++){
96797                                 //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
96798                         //}
96799                 case DOCUMENT_FRAGMENT_NODE:
96800                         break;
96801                 case ATTRIBUTE_NODE:
96802                         deep = true;
96803                         break;
96804                 //case ENTITY_REFERENCE_NODE:
96805                 //case PROCESSING_INSTRUCTION_NODE:
96806                 ////case TEXT_NODE:
96807                 //case CDATA_SECTION_NODE:
96808                 //case COMMENT_NODE:
96809                 //      deep = false;
96810                 //      break;
96811                 //case DOCUMENT_NODE:
96812                 //case DOCUMENT_TYPE_NODE:
96813                 //cannot be imported.
96814                 //case ENTITY_NODE:
96815                 //case NOTATION_NODE:
96816                 //can not hit in level3
96817                 //default:throw e;
96818                 }
96819                 if(!node2){
96820                         node2 = node.cloneNode(false);//false
96821                 }
96822                 node2.ownerDocument = doc;
96823                 node2.parentNode = null;
96824                 if(deep){
96825                         var child = node.firstChild;
96826                         while(child){
96827                                 node2.appendChild(importNode(doc,child,deep));
96828                                 child = child.nextSibling;
96829                         }
96830                 }
96831                 return node2;
96832         }
96833         //
96834         //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
96835         //                                      attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
96836         function cloneNode(doc,node,deep){
96837                 var node2 = new node.constructor();
96838                 for(var n in node){
96839                         var v = node[n];
96840                         if(typeof v != 'object' ){
96841                                 if(v != node2[n]){
96842                                         node2[n] = v;
96843                                 }
96844                         }
96845                 }
96846                 if(node.childNodes){
96847                         node2.childNodes = new NodeList();
96848                 }
96849                 node2.ownerDocument = doc;
96850                 switch (node2.nodeType) {
96851                 case ELEMENT_NODE:
96852                         var attrs       = node.attributes;
96853                         var attrs2      = node2.attributes = new NamedNodeMap();
96854                         var len = attrs.length;
96855                         attrs2._ownerElement = node2;
96856                         for(var i=0;i<len;i++){
96857                                 node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
96858                         }
96859                         break;  case ATTRIBUTE_NODE:
96860                         deep = true;
96861                 }
96862                 if(deep){
96863                         var child = node.firstChild;
96864                         while(child){
96865                                 node2.appendChild(cloneNode(doc,child,deep));
96866                                 child = child.nextSibling;
96867                         }
96868                 }
96869                 return node2;
96870         }
96871
96872         function __set__(object,key,value){
96873                 object[key] = value;
96874         }
96875         //do dynamic
96876         try{
96877                 if(Object.defineProperty){
96878                         Object.defineProperty(LiveNodeList.prototype,'length',{
96879                                 get:function(){
96880                                         _updateLiveList(this);
96881                                         return this.$$length;
96882                                 }
96883                         });
96884                         Object.defineProperty(Node$3.prototype,'textContent',{
96885                                 get:function(){
96886                                         return getTextContent(this);
96887                                 },
96888                                 set:function(data){
96889                                         switch(this.nodeType){
96890                                         case ELEMENT_NODE:
96891                                         case DOCUMENT_FRAGMENT_NODE:
96892                                                 while(this.firstChild){
96893                                                         this.removeChild(this.firstChild);
96894                                                 }
96895                                                 if(data || String(data)){
96896                                                         this.appendChild(this.ownerDocument.createTextNode(data));
96897                                                 }
96898                                                 break;
96899                                         default:
96900                                                 //TODO:
96901                                                 this.data = data;
96902                                                 this.value = data;
96903                                                 this.nodeValue = data;
96904                                         }
96905                                 }
96906                         });
96907                         
96908                         function getTextContent(node){
96909                                 switch(node.nodeType){
96910                                 case ELEMENT_NODE:
96911                                 case DOCUMENT_FRAGMENT_NODE:
96912                                         var buf = [];
96913                                         node = node.firstChild;
96914                                         while(node){
96915                                                 if(node.nodeType!==7 && node.nodeType !==8){
96916                                                         buf.push(getTextContent(node));
96917                                                 }
96918                                                 node = node.nextSibling;
96919                                         }
96920                                         return buf.join('');
96921                                 default:
96922                                         return node.nodeValue;
96923                                 }
96924                         }
96925                         __set__ = function(object,key,value){
96926                                 //console.log(value)
96927                                 object['$$'+key] = value;
96928                         };
96929                 }
96930         }catch(e){//ie8
96931         }
96932
96933         //if(typeof require == 'function'){
96934                 var DOMImplementation_1 = DOMImplementation;
96935                 var XMLSerializer_1 = XMLSerializer$1;
96936         //}
96937
96938         var dom = {
96939                 DOMImplementation: DOMImplementation_1,
96940                 XMLSerializer: XMLSerializer_1
96941         };
96942
96943         var domParser = createCommonjsModule(function (module, exports) {
96944         function DOMParser(options){
96945                 this.options = options ||{locator:{}};
96946                 
96947         }
96948         DOMParser.prototype.parseFromString = function(source,mimeType){
96949                 var options = this.options;
96950                 var sax =  new XMLReader();
96951                 var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
96952                 var errorHandler = options.errorHandler;
96953                 var locator = options.locator;
96954                 var defaultNSMap = options.xmlns||{};
96955                 var entityMap = {'lt':'<','gt':'>','amp':'&','quot':'"','apos':"'"};
96956                 if(locator){
96957                         domBuilder.setDocumentLocator(locator);
96958                 }
96959                 
96960                 sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
96961                 sax.domBuilder = options.domBuilder || domBuilder;
96962                 if(/\/x?html?$/.test(mimeType)){
96963                         entityMap.nbsp = '\xa0';
96964                         entityMap.copy = '\xa9';
96965                         defaultNSMap['']= 'http://www.w3.org/1999/xhtml';
96966                 }
96967                 defaultNSMap.xml = defaultNSMap.xml || 'http://www.w3.org/XML/1998/namespace';
96968                 if(source){
96969                         sax.parse(source,defaultNSMap,entityMap);
96970                 }else{
96971                         sax.errorHandler.error("invalid doc source");
96972                 }
96973                 return domBuilder.doc;
96974         };
96975         function buildErrorHandler(errorImpl,domBuilder,locator){
96976                 if(!errorImpl){
96977                         if(domBuilder instanceof DOMHandler){
96978                                 return domBuilder;
96979                         }
96980                         errorImpl = domBuilder ;
96981                 }
96982                 var errorHandler = {};
96983                 var isCallback = errorImpl instanceof Function;
96984                 locator = locator||{};
96985                 function build(key){
96986                         var fn = errorImpl[key];
96987                         if(!fn && isCallback){
96988                                 fn = errorImpl.length == 2?function(msg){errorImpl(key,msg);}:errorImpl;
96989                         }
96990                         errorHandler[key] = fn && function(msg){
96991                                 fn('[xmldom '+key+']\t'+msg+_locator(locator));
96992                         }||function(){};
96993                 }
96994                 build('warning');
96995                 build('error');
96996                 build('fatalError');
96997                 return errorHandler;
96998         }
96999
97000         //console.log('#\n\n\n\n\n\n\n####')
97001         /**
97002          * +ContentHandler+ErrorHandler
97003          * +LexicalHandler+EntityResolver2
97004          * -DeclHandler-DTDHandler 
97005          * 
97006          * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
97007          * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
97008          * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
97009          */
97010         function DOMHandler() {
97011             this.cdata = false;
97012         }
97013         function position(locator,node){
97014                 node.lineNumber = locator.lineNumber;
97015                 node.columnNumber = locator.columnNumber;
97016         }
97017         /**
97018          * @see org.xml.sax.ContentHandler#startDocument
97019          * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
97020          */ 
97021         DOMHandler.prototype = {
97022                 startDocument : function() {
97023                 this.doc = new DOMImplementation().createDocument(null, null, null);
97024                 if (this.locator) {
97025                         this.doc.documentURI = this.locator.systemId;
97026                 }
97027                 },
97028                 startElement:function(namespaceURI, localName, qName, attrs) {
97029                         var doc = this.doc;
97030                     var el = doc.createElementNS(namespaceURI, qName||localName);
97031                     var len = attrs.length;
97032                     appendElement(this, el);
97033                     this.currentElement = el;
97034                     
97035                         this.locator && position(this.locator,el);
97036                     for (var i = 0 ; i < len; i++) {
97037                         var namespaceURI = attrs.getURI(i);
97038                         var value = attrs.getValue(i);
97039                         var qName = attrs.getQName(i);
97040                                 var attr = doc.createAttributeNS(namespaceURI, qName);
97041                                 this.locator &&position(attrs.getLocator(i),attr);
97042                                 attr.value = attr.nodeValue = value;
97043                                 el.setAttributeNode(attr);
97044                     }
97045                 },
97046                 endElement:function(namespaceURI, localName, qName) {
97047                         var current = this.currentElement;
97048                         var tagName = current.tagName;
97049                         this.currentElement = current.parentNode;
97050                 },
97051                 startPrefixMapping:function(prefix, uri) {
97052                 },
97053                 endPrefixMapping:function(prefix) {
97054                 },
97055                 processingInstruction:function(target, data) {
97056                     var ins = this.doc.createProcessingInstruction(target, data);
97057                     this.locator && position(this.locator,ins);
97058                     appendElement(this, ins);
97059                 },
97060                 ignorableWhitespace:function(ch, start, length) {
97061                 },
97062                 characters:function(chars, start, length) {
97063                         chars = _toString.apply(this,arguments);
97064                         //console.log(chars)
97065                         if(chars){
97066                                 if (this.cdata) {
97067                                         var charNode = this.doc.createCDATASection(chars);
97068                                 } else {
97069                                         var charNode = this.doc.createTextNode(chars);
97070                                 }
97071                                 if(this.currentElement){
97072                                         this.currentElement.appendChild(charNode);
97073                                 }else if(/^\s*$/.test(chars)){
97074                                         this.doc.appendChild(charNode);
97075                                         //process xml
97076                                 }
97077                                 this.locator && position(this.locator,charNode);
97078                         }
97079                 },
97080                 skippedEntity:function(name) {
97081                 },
97082                 endDocument:function() {
97083                         this.doc.normalize();
97084                 },
97085                 setDocumentLocator:function (locator) {
97086                     if(this.locator = locator){// && !('lineNumber' in locator)){
97087                         locator.lineNumber = 0;
97088                     }
97089                 },
97090                 //LexicalHandler
97091                 comment:function(chars, start, length) {
97092                         chars = _toString.apply(this,arguments);
97093                     var comm = this.doc.createComment(chars);
97094                     this.locator && position(this.locator,comm);
97095                     appendElement(this, comm);
97096                 },
97097                 
97098                 startCDATA:function() {
97099                     //used in characters() methods
97100                     this.cdata = true;
97101                 },
97102                 endCDATA:function() {
97103                     this.cdata = false;
97104                 },
97105                 
97106                 startDTD:function(name, publicId, systemId) {
97107                         var impl = this.doc.implementation;
97108                     if (impl && impl.createDocumentType) {
97109                         var dt = impl.createDocumentType(name, publicId, systemId);
97110                         this.locator && position(this.locator,dt);
97111                         appendElement(this, dt);
97112                     }
97113                 },
97114                 /**
97115                  * @see org.xml.sax.ErrorHandler
97116                  * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
97117                  */
97118                 warning:function(error) {
97119                         console.warn('[xmldom warning]\t'+error,_locator(this.locator));
97120                 },
97121                 error:function(error) {
97122                         console.error('[xmldom error]\t'+error,_locator(this.locator));
97123                 },
97124                 fatalError:function(error) {
97125                         console.error('[xmldom fatalError]\t'+error,_locator(this.locator));
97126                     throw error;
97127                 }
97128         };
97129         function _locator(l){
97130                 if(l){
97131                         return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
97132                 }
97133         }
97134         function _toString(chars,start,length){
97135                 if(typeof chars == 'string'){
97136                         return chars.substr(start,length)
97137                 }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
97138                         if(chars.length >= start+length || start){
97139                                 return new java.lang.String(chars,start,length)+'';
97140                         }
97141                         return chars;
97142                 }
97143         }
97144
97145         /*
97146          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
97147          * used method of org.xml.sax.ext.LexicalHandler:
97148          *  #comment(chars, start, length)
97149          *  #startCDATA()
97150          *  #endCDATA()
97151          *  #startDTD(name, publicId, systemId)
97152          *
97153          *
97154          * IGNORED method of org.xml.sax.ext.LexicalHandler:
97155          *  #endDTD()
97156          *  #startEntity(name)
97157          *  #endEntity(name)
97158          *
97159          *
97160          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
97161          * IGNORED method of org.xml.sax.ext.DeclHandler
97162          *      #attributeDecl(eName, aName, type, mode, value)
97163          *  #elementDecl(name, model)
97164          *  #externalEntityDecl(name, publicId, systemId)
97165          *  #internalEntityDecl(name, value)
97166          * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
97167          * IGNORED method of org.xml.sax.EntityResolver2
97168          *  #resolveEntity(String name,String publicId,String baseURI,String systemId)
97169          *  #resolveEntity(publicId, systemId)
97170          *  #getExternalSubset(name, baseURI)
97171          * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
97172          * IGNORED method of org.xml.sax.DTDHandler
97173          *  #notationDecl(name, publicId, systemId) {};
97174          *  #unparsedEntityDecl(name, publicId, systemId, notationName) {};
97175          */
97176         "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
97177                 DOMHandler.prototype[key] = function(){return null};
97178         });
97179
97180         /* 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 */
97181         function appendElement (hander,node) {
97182             if (!hander.currentElement) {
97183                 hander.doc.appendChild(node);
97184             } else {
97185                 hander.currentElement.appendChild(node);
97186             }
97187         }//appendChild and setAttributeNS are preformance key
97188
97189         //if(typeof require == 'function'){
97190                 var XMLReader = sax.XMLReader;
97191                 var DOMImplementation = exports.DOMImplementation = dom.DOMImplementation;
97192                 exports.XMLSerializer = dom.XMLSerializer ;
97193                 exports.DOMParser = DOMParser;
97194         //}
97195         });
97196         var domParser_1 = domParser.DOMImplementation;
97197         var domParser_2 = domParser.XMLSerializer;
97198         var domParser_3 = domParser.DOMParser;
97199
97200         var togeojson = createCommonjsModule(function (module, exports) {
97201         var toGeoJSON = (function() {
97202
97203             var removeSpace = /\s*/g,
97204                 trimSpace = /^\s*|\s*$/g,
97205                 splitSpace = /\s+/;
97206             // generate a short, numeric hash of a string
97207             function okhash(x) {
97208                 if (!x || !x.length) { return 0; }
97209                 for (var i = 0, h = 0; i < x.length; i++) {
97210                     h = ((h << 5) - h) + x.charCodeAt(i) | 0;
97211                 } return h;
97212             }
97213             // all Y children of X
97214             function get(x, y) { return x.getElementsByTagName(y); }
97215             function attr(x, y) { return x.getAttribute(y); }
97216             function attrf(x, y) { return parseFloat(attr(x, y)); }
97217             // one Y child of X, if any, otherwise null
97218             function get1(x, y) { var n = get(x, y); return n.length ? n[0] : null; }
97219             // https://developer.mozilla.org/en-US/docs/Web/API/Node.normalize
97220             function norm(el) { if (el.normalize) { el.normalize(); } return el; }
97221             // cast array x into numbers
97222             function numarray(x) {
97223                 for (var j = 0, o = []; j < x.length; j++) { o[j] = parseFloat(x[j]); }
97224                 return o;
97225             }
97226             // get the content of a text node, if any
97227             function nodeVal(x) {
97228                 if (x) { norm(x); }
97229                 return (x && x.textContent) || '';
97230             }
97231             // get the contents of multiple text nodes, if present
97232             function getMulti(x, ys) {
97233                 var o = {}, n, k;
97234                 for (k = 0; k < ys.length; k++) {
97235                     n = get1(x, ys[k]);
97236                     if (n) { o[ys[k]] = nodeVal(n); }
97237                 }
97238                 return o;
97239             }
97240             // add properties of Y to X, overwriting if present in both
97241             function extend(x, y) { for (var k in y) { x[k] = y[k]; } }
97242             // get one coordinate from a coordinate array, if any
97243             function coord1(v) { return numarray(v.replace(removeSpace, '').split(',')); }
97244             // get all coordinates from a coordinate array as [[],[]]
97245             function coord(v) {
97246                 var coords = v.replace(trimSpace, '').split(splitSpace),
97247                     o = [];
97248                 for (var i = 0; i < coords.length; i++) {
97249                     o.push(coord1(coords[i]));
97250                 }
97251                 return o;
97252             }
97253             function coordPair(x) {
97254                 var ll = [attrf(x, 'lon'), attrf(x, 'lat')],
97255                     ele = get1(x, 'ele'),
97256                     // handle namespaced attribute in browser
97257                     heartRate = get1(x, 'gpxtpx:hr') || get1(x, 'hr'),
97258                     time = get1(x, 'time'),
97259                     e;
97260                 if (ele) {
97261                     e = parseFloat(nodeVal(ele));
97262                     if (!isNaN(e)) {
97263                         ll.push(e);
97264                     }
97265                 }
97266                 return {
97267                     coordinates: ll,
97268                     time: time ? nodeVal(time) : null,
97269                     heartRate: heartRate ? parseFloat(nodeVal(heartRate)) : null
97270                 };
97271             }
97272
97273             // create a new feature collection parent object
97274             function fc() {
97275                 return {
97276                     type: 'FeatureCollection',
97277                     features: []
97278                 };
97279             }
97280
97281             var serializer;
97282             if (typeof XMLSerializer !== 'undefined') {
97283                 /* istanbul ignore next */
97284                 serializer = new XMLSerializer();
97285             // only require xmldom in a node environment
97286             } else if ( typeof process === 'object' && !process.browser) {
97287                 serializer = new (domParser.XMLSerializer)();
97288             }
97289             function xml2str(str) {
97290                 // IE9 will create a new XMLSerializer but it'll crash immediately.
97291                 // This line is ignored because we don't run coverage tests in IE9
97292                 /* istanbul ignore next */
97293                 if (str.xml !== undefined) { return str.xml; }
97294                 return serializer.serializeToString(str);
97295             }
97296
97297             var t = {
97298                 kml: function(doc) {
97299
97300                     var gj = fc(),
97301                         // styleindex keeps track of hashed styles in order to match features
97302                         styleIndex = {}, styleByHash = {},
97303                         // stylemapindex keeps track of style maps to expose in properties
97304                         styleMapIndex = {},
97305                         // atomic geospatial types supported by KML - MultiGeometry is
97306                         // handled separately
97307                         geotypes = ['Polygon', 'LineString', 'Point', 'Track', 'gx:Track'],
97308                         // all root placemarks in the file
97309                         placemarks = get(doc, 'Placemark'),
97310                         styles = get(doc, 'Style'),
97311                         styleMaps = get(doc, 'StyleMap');
97312
97313                     for (var k = 0; k < styles.length; k++) {
97314                         var hash = okhash(xml2str(styles[k])).toString(16);
97315                         styleIndex['#' + attr(styles[k], 'id')] = hash;
97316                         styleByHash[hash] = styles[k];
97317                     }
97318                     for (var l = 0; l < styleMaps.length; l++) {
97319                         styleIndex['#' + attr(styleMaps[l], 'id')] = okhash(xml2str(styleMaps[l])).toString(16);
97320                         var pairs = get(styleMaps[l], 'Pair');
97321                         var pairsMap = {};
97322                         for (var m = 0; m < pairs.length; m++) {
97323                             pairsMap[nodeVal(get1(pairs[m], 'key'))] = nodeVal(get1(pairs[m], 'styleUrl'));
97324                         }
97325                         styleMapIndex['#' + attr(styleMaps[l], 'id')] = pairsMap;
97326
97327                     }
97328                     for (var j = 0; j < placemarks.length; j++) {
97329                         gj.features = gj.features.concat(getPlacemark(placemarks[j]));
97330                     }
97331                     function kmlColor(v) {
97332                         var color, opacity;
97333                         v = v || '';
97334                         if (v.substr(0, 1) === '#') { v = v.substr(1); }
97335                         if (v.length === 6 || v.length === 3) { color = v; }
97336                         if (v.length === 8) {
97337                             opacity = parseInt(v.substr(0, 2), 16) / 255;
97338                             color = '#' + v.substr(6, 2) +
97339                                 v.substr(4, 2) +
97340                                 v.substr(2, 2);
97341                         }
97342                         return [color, isNaN(opacity) ? undefined : opacity];
97343                     }
97344                     function gxCoord(v) { return numarray(v.split(' ')); }
97345                     function gxCoords(root) {
97346                         var elems = get(root, 'coord'), coords = [], times = [];
97347                         if (elems.length === 0) { elems = get(root, 'gx:coord'); }
97348                         for (var i = 0; i < elems.length; i++) { coords.push(gxCoord(nodeVal(elems[i]))); }
97349                         var timeElems = get(root, 'when');
97350                         for (var j = 0; j < timeElems.length; j++) { times.push(nodeVal(timeElems[j])); }
97351                         return {
97352                             coords: coords,
97353                             times: times
97354                         };
97355                     }
97356                     function getGeometry(root) {
97357                         var geomNode, geomNodes, i, j, k, geoms = [], coordTimes = [];
97358                         if (get1(root, 'MultiGeometry')) { return getGeometry(get1(root, 'MultiGeometry')); }
97359                         if (get1(root, 'MultiTrack')) { return getGeometry(get1(root, 'MultiTrack')); }
97360                         if (get1(root, 'gx:MultiTrack')) { return getGeometry(get1(root, 'gx:MultiTrack')); }
97361                         for (i = 0; i < geotypes.length; i++) {
97362                             geomNodes = get(root, geotypes[i]);
97363                             if (geomNodes) {
97364                                 for (j = 0; j < geomNodes.length; j++) {
97365                                     geomNode = geomNodes[j];
97366                                     if (geotypes[i] === 'Point') {
97367                                         geoms.push({
97368                                             type: 'Point',
97369                                             coordinates: coord1(nodeVal(get1(geomNode, 'coordinates')))
97370                                         });
97371                                     } else if (geotypes[i] === 'LineString') {
97372                                         geoms.push({
97373                                             type: 'LineString',
97374                                             coordinates: coord(nodeVal(get1(geomNode, 'coordinates')))
97375                                         });
97376                                     } else if (geotypes[i] === 'Polygon') {
97377                                         var rings = get(geomNode, 'LinearRing'),
97378                                             coords = [];
97379                                         for (k = 0; k < rings.length; k++) {
97380                                             coords.push(coord(nodeVal(get1(rings[k], 'coordinates'))));
97381                                         }
97382                                         geoms.push({
97383                                             type: 'Polygon',
97384                                             coordinates: coords
97385                                         });
97386                                     } else if (geotypes[i] === 'Track' ||
97387                                         geotypes[i] === 'gx:Track') {
97388                                         var track = gxCoords(geomNode);
97389                                         geoms.push({
97390                                             type: 'LineString',
97391                                             coordinates: track.coords
97392                                         });
97393                                         if (track.times.length) { coordTimes.push(track.times); }
97394                                     }
97395                                 }
97396                             }
97397                         }
97398                         return {
97399                             geoms: geoms,
97400                             coordTimes: coordTimes
97401                         };
97402                     }
97403                     function getPlacemark(root) {
97404                         var geomsAndTimes = getGeometry(root), i, properties = {},
97405                             name = nodeVal(get1(root, 'name')),
97406                             address = nodeVal(get1(root, 'address')),
97407                             styleUrl = nodeVal(get1(root, 'styleUrl')),
97408                             description = nodeVal(get1(root, 'description')),
97409                             timeSpan = get1(root, 'TimeSpan'),
97410                             timeStamp = get1(root, 'TimeStamp'),
97411                             extendedData = get1(root, 'ExtendedData'),
97412                             lineStyle = get1(root, 'LineStyle'),
97413                             polyStyle = get1(root, 'PolyStyle'),
97414                             visibility = get1(root, 'visibility');
97415
97416                         if (!geomsAndTimes.geoms.length) { return []; }
97417                         if (name) { properties.name = name; }
97418                         if (address) { properties.address = address; }
97419                         if (styleUrl) {
97420                             if (styleUrl[0] !== '#') {
97421                                 styleUrl = '#' + styleUrl;
97422                             }
97423
97424                             properties.styleUrl = styleUrl;
97425                             if (styleIndex[styleUrl]) {
97426                                 properties.styleHash = styleIndex[styleUrl];
97427                             }
97428                             if (styleMapIndex[styleUrl]) {
97429                                 properties.styleMapHash = styleMapIndex[styleUrl];
97430                                 properties.styleHash = styleIndex[styleMapIndex[styleUrl].normal];
97431                             }
97432                             // Try to populate the lineStyle or polyStyle since we got the style hash
97433                             var style = styleByHash[properties.styleHash];
97434                             if (style) {
97435                                 if (!lineStyle) { lineStyle = get1(style, 'LineStyle'); }
97436                                 if (!polyStyle) { polyStyle = get1(style, 'PolyStyle'); }
97437                             }
97438                         }
97439                         if (description) { properties.description = description; }
97440                         if (timeSpan) {
97441                             var begin = nodeVal(get1(timeSpan, 'begin'));
97442                             var end = nodeVal(get1(timeSpan, 'end'));
97443                             properties.timespan = { begin: begin, end: end };
97444                         }
97445                         if (timeStamp) {
97446                             properties.timestamp = nodeVal(get1(timeStamp, 'when'));
97447                         }
97448                         if (lineStyle) {
97449                             var linestyles = kmlColor(nodeVal(get1(lineStyle, 'color'))),
97450                                 color = linestyles[0],
97451                                 opacity = linestyles[1],
97452                                 width = parseFloat(nodeVal(get1(lineStyle, 'width')));
97453                             if (color) { properties.stroke = color; }
97454                             if (!isNaN(opacity)) { properties['stroke-opacity'] = opacity; }
97455                             if (!isNaN(width)) { properties['stroke-width'] = width; }
97456                         }
97457                         if (polyStyle) {
97458                             var polystyles = kmlColor(nodeVal(get1(polyStyle, 'color'))),
97459                                 pcolor = polystyles[0],
97460                                 popacity = polystyles[1],
97461                                 fill = nodeVal(get1(polyStyle, 'fill')),
97462                                 outline = nodeVal(get1(polyStyle, 'outline'));
97463                             if (pcolor) { properties.fill = pcolor; }
97464                             if (!isNaN(popacity)) { properties['fill-opacity'] = popacity; }
97465                             if (fill) { properties['fill-opacity'] = fill === '1' ? properties['fill-opacity'] || 1 : 0; }
97466                             if (outline) { properties['stroke-opacity'] = outline === '1' ? properties['stroke-opacity'] || 1 : 0; }
97467                         }
97468                         if (extendedData) {
97469                             var datas = get(extendedData, 'Data'),
97470                                 simpleDatas = get(extendedData, 'SimpleData');
97471
97472                             for (i = 0; i < datas.length; i++) {
97473                                 properties[datas[i].getAttribute('name')] = nodeVal(get1(datas[i], 'value'));
97474                             }
97475                             for (i = 0; i < simpleDatas.length; i++) {
97476                                 properties[simpleDatas[i].getAttribute('name')] = nodeVal(simpleDatas[i]);
97477                             }
97478                         }
97479                         if (visibility) {
97480                             properties.visibility = nodeVal(visibility);
97481                         }
97482                         if (geomsAndTimes.coordTimes.length) {
97483                             properties.coordTimes = (geomsAndTimes.coordTimes.length === 1) ?
97484                                 geomsAndTimes.coordTimes[0] : geomsAndTimes.coordTimes;
97485                         }
97486                         var feature = {
97487                             type: 'Feature',
97488                             geometry: (geomsAndTimes.geoms.length === 1) ? geomsAndTimes.geoms[0] : {
97489                                 type: 'GeometryCollection',
97490                                 geometries: geomsAndTimes.geoms
97491                             },
97492                             properties: properties
97493                         };
97494                         if (attr(root, 'id')) { feature.id = attr(root, 'id'); }
97495                         return [feature];
97496                     }
97497                     return gj;
97498                 },
97499                 gpx: function(doc) {
97500                     var i,
97501                         tracks = get(doc, 'trk'),
97502                         routes = get(doc, 'rte'),
97503                         waypoints = get(doc, 'wpt'),
97504                         // a feature collection
97505                         gj = fc(),
97506                         feature;
97507                     for (i = 0; i < tracks.length; i++) {
97508                         feature = getTrack(tracks[i]);
97509                         if (feature) { gj.features.push(feature); }
97510                     }
97511                     for (i = 0; i < routes.length; i++) {
97512                         feature = getRoute(routes[i]);
97513                         if (feature) { gj.features.push(feature); }
97514                     }
97515                     for (i = 0; i < waypoints.length; i++) {
97516                         gj.features.push(getPoint(waypoints[i]));
97517                     }
97518                     function getPoints(node, pointname) {
97519                         var pts = get(node, pointname),
97520                             line = [],
97521                             times = [],
97522                             heartRates = [],
97523                             l = pts.length;
97524                         if (l < 2) { return {}; }  // Invalid line in GeoJSON
97525                         for (var i = 0; i < l; i++) {
97526                             var c = coordPair(pts[i]);
97527                             line.push(c.coordinates);
97528                             if (c.time) { times.push(c.time); }
97529                             if (c.heartRate) { heartRates.push(c.heartRate); }
97530                         }
97531                         return {
97532                             line: line,
97533                             times: times,
97534                             heartRates: heartRates
97535                         };
97536                     }
97537                     function getTrack(node) {
97538                         var segments = get(node, 'trkseg'),
97539                             track = [],
97540                             times = [],
97541                             heartRates = [],
97542                             line;
97543                         for (var i = 0; i < segments.length; i++) {
97544                             line = getPoints(segments[i], 'trkpt');
97545                             if (line) {
97546                                 if (line.line) { track.push(line.line); }
97547                                 if (line.times && line.times.length) { times.push(line.times); }
97548                                 if (line.heartRates && line.heartRates.length) { heartRates.push(line.heartRates); }
97549                             }
97550                         }
97551                         if (track.length === 0) { return; }
97552                         var properties = getProperties(node);
97553                         extend(properties, getLineStyle(get1(node, 'extensions')));
97554                         if (times.length) { properties.coordTimes = track.length === 1 ? times[0] : times; }
97555                         if (heartRates.length) { properties.heartRates = track.length === 1 ? heartRates[0] : heartRates; }
97556                         return {
97557                             type: 'Feature',
97558                             properties: properties,
97559                             geometry: {
97560                                 type: track.length === 1 ? 'LineString' : 'MultiLineString',
97561                                 coordinates: track.length === 1 ? track[0] : track
97562                             }
97563                         };
97564                     }
97565                     function getRoute(node) {
97566                         var line = getPoints(node, 'rtept');
97567                         if (!line.line) { return; }
97568                         var prop = getProperties(node);
97569                         extend(prop, getLineStyle(get1(node, 'extensions')));
97570                         var routeObj = {
97571                             type: 'Feature',
97572                             properties: prop,
97573                             geometry: {
97574                                 type: 'LineString',
97575                                 coordinates: line.line
97576                             }
97577                         };
97578                         return routeObj;
97579                     }
97580                     function getPoint(node) {
97581                         var prop = getProperties(node);
97582                         extend(prop, getMulti(node, ['sym']));
97583                         return {
97584                             type: 'Feature',
97585                             properties: prop,
97586                             geometry: {
97587                                 type: 'Point',
97588                                 coordinates: coordPair(node).coordinates
97589                             }
97590                         };
97591                     }
97592                     function getLineStyle(extensions) {
97593                         var style = {};
97594                         if (extensions) {
97595                             var lineStyle = get1(extensions, 'line');
97596                             if (lineStyle) {
97597                                 var color = nodeVal(get1(lineStyle, 'color')),
97598                                     opacity = parseFloat(nodeVal(get1(lineStyle, 'opacity'))),
97599                                     width = parseFloat(nodeVal(get1(lineStyle, 'width')));
97600                                 if (color) { style.stroke = color; }
97601                                 if (!isNaN(opacity)) { style['stroke-opacity'] = opacity; }
97602                                 // GPX width is in mm, convert to px with 96 px per inch
97603                                 if (!isNaN(width)) { style['stroke-width'] = width * 96 / 25.4; }
97604                             }
97605                         }
97606                         return style;
97607                     }
97608                     function getProperties(node) {
97609                         var prop = getMulti(node, ['name', 'cmt', 'desc', 'type', 'time', 'keywords']),
97610                             links = get(node, 'link');
97611                         if (links.length) { prop.links = []; }
97612                         for (var i = 0, link; i < links.length; i++) {
97613                             link = { href: attr(links[i], 'href') };
97614                             extend(link, getMulti(links[i], ['text', 'type']));
97615                             prop.links.push(link);
97616                         }
97617                         return prop;
97618                     }
97619                     return gj;
97620                 }
97621             };
97622             return t;
97623         })();
97624
97625         { module.exports = toGeoJSON; }
97626         });
97627
97628         var _initialized = false;
97629         var _enabled = false;
97630         var _geojson;
97631
97632
97633         function svgData(projection, context, dispatch) {
97634             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
97635             var _showLabels = true;
97636             var detected = utilDetect();
97637             var layer = d3_select(null);
97638             var _vtService;
97639             var _fileList;
97640             var _template;
97641             var _src;
97642
97643
97644             function init() {
97645                 if (_initialized) { return; }  // run once
97646
97647                 _geojson = {};
97648                 _enabled = true;
97649
97650                 function over() {
97651                     event.stopPropagation();
97652                     event.preventDefault();
97653                     event.dataTransfer.dropEffect = 'copy';
97654                 }
97655
97656                 d3_select('body')
97657                     .attr('dropzone', 'copy')
97658                     .on('drop.svgData', function() {
97659                         event.stopPropagation();
97660                         event.preventDefault();
97661                         if (!detected.filedrop) { return; }
97662                         drawData.fileList(event.dataTransfer.files);
97663                     })
97664                     .on('dragenter.svgData', over)
97665                     .on('dragexit.svgData', over)
97666                     .on('dragover.svgData', over);
97667
97668                 _initialized = true;
97669             }
97670
97671
97672             function getService() {
97673                 if (services$1.vectorTile && !_vtService) {
97674                     _vtService = services$1.vectorTile;
97675                     _vtService.event.on('loadedData', throttledRedraw);
97676                 } else if (!services$1.vectorTile && _vtService) {
97677                     _vtService = null;
97678                 }
97679
97680                 return _vtService;
97681             }
97682
97683
97684             function showLayer() {
97685                 layerOn();
97686
97687                 layer
97688                     .style('opacity', 0)
97689                     .transition()
97690                     .duration(250)
97691                     .style('opacity', 1)
97692                     .on('end', function () { dispatch.call('change'); });
97693             }
97694
97695
97696             function hideLayer() {
97697                 throttledRedraw.cancel();
97698
97699                 layer
97700                     .transition()
97701                     .duration(250)
97702                     .style('opacity', 0)
97703                     .on('end', layerOff);
97704             }
97705
97706
97707             function layerOn() {
97708                 layer.style('display', 'block');
97709             }
97710
97711
97712             function layerOff() {
97713                 layer.selectAll('.viewfield-group').remove();
97714                 layer.style('display', 'none');
97715             }
97716
97717
97718             // ensure that all geojson features in a collection have IDs
97719             function ensureIDs(gj) {
97720                 if (!gj) { return null; }
97721
97722                 if (gj.type === 'FeatureCollection') {
97723                     for (var i = 0; i < gj.features.length; i++) {
97724                         ensureFeatureID(gj.features[i]);
97725                     }
97726                 } else {
97727                     ensureFeatureID(gj);
97728                 }
97729                 return gj;
97730             }
97731
97732
97733             // ensure that each single Feature object has a unique ID
97734             function ensureFeatureID(feature) {
97735                 if (!feature) { return; }
97736                 feature.__featurehash__ = utilHashcode(fastJsonStableStringify(feature));
97737                 return feature;
97738             }
97739
97740
97741             // Prefer an array of Features instead of a FeatureCollection
97742             function getFeatures(gj) {
97743                 if (!gj) { return []; }
97744
97745                 if (gj.type === 'FeatureCollection') {
97746                     return gj.features;
97747                 } else {
97748                     return [gj];
97749                 }
97750             }
97751
97752
97753             function featureKey(d) {
97754                 return d.__featurehash__;
97755             }
97756
97757
97758             function isPolygon(d) {
97759                 return d.geometry.type === 'Polygon' || d.geometry.type === 'MultiPolygon';
97760             }
97761
97762
97763             function clipPathID(d) {
97764                 return 'data-' + d.__featurehash__ + '-clippath';
97765             }
97766
97767
97768             function featureClasses(d) {
97769                 return [
97770                     'data' + d.__featurehash__,
97771                     d.geometry.type,
97772                     isPolygon(d) ? 'area' : '',
97773                     d.__layerID__ || ''
97774                 ].filter(Boolean).join(' ');
97775             }
97776
97777
97778             function drawData(selection) {
97779                 var vtService = getService();
97780                 var getPath = svgPath(projection).geojson;
97781                 var getAreaPath = svgPath(projection, null, true).geojson;
97782                 var hasData = drawData.hasData();
97783
97784                 layer = selection.selectAll('.layer-mapdata')
97785                     .data(_enabled && hasData ? [0] : []);
97786
97787                 layer.exit()
97788                     .remove();
97789
97790                 layer = layer.enter()
97791                     .append('g')
97792                     .attr('class', 'layer-mapdata')
97793                     .merge(layer);
97794
97795                 var surface = context.surface();
97796                 if (!surface || surface.empty()) { return; }  // not ready to draw yet, starting up
97797
97798
97799                 // Gather data
97800                 var geoData, polygonData;
97801                 if (_template && vtService) {   // fetch data from vector tile service
97802                     var sourceID = _template;
97803                     vtService.loadTiles(sourceID, _template, projection);
97804                     geoData = vtService.data(sourceID, projection);
97805                 } else {
97806                     geoData = getFeatures(_geojson);
97807                 }
97808                 geoData = geoData.filter(getPath);
97809                 polygonData = geoData.filter(isPolygon);
97810
97811
97812                 // Draw clip paths for polygons
97813                 var clipPaths = surface.selectAll('defs').selectAll('.clipPath-data')
97814                    .data(polygonData, featureKey);
97815
97816                 clipPaths.exit()
97817                    .remove();
97818
97819                 var clipPathsEnter = clipPaths.enter()
97820                    .append('clipPath')
97821                    .attr('class', 'clipPath-data')
97822                    .attr('id', clipPathID);
97823
97824                 clipPathsEnter
97825                    .append('path');
97826
97827                 clipPaths.merge(clipPathsEnter)
97828                    .selectAll('path')
97829                    .attr('d', getAreaPath);
97830
97831
97832                 // Draw fill, shadow, stroke layers
97833                 var datagroups = layer
97834                     .selectAll('g.datagroup')
97835                     .data(['fill', 'shadow', 'stroke']);
97836
97837                 datagroups = datagroups.enter()
97838                     .append('g')
97839                     .attr('class', function(d) { return 'datagroup datagroup-' + d; })
97840                     .merge(datagroups);
97841
97842
97843                 // Draw paths
97844                 var pathData = {
97845                     fill: polygonData,
97846                     shadow: geoData,
97847                     stroke: geoData
97848                 };
97849
97850                 var paths = datagroups
97851                     .selectAll('path')
97852                     .data(function(layer) { return pathData[layer]; }, featureKey);
97853
97854                 // exit
97855                 paths.exit()
97856                     .remove();
97857
97858                 // enter/update
97859                 paths = paths.enter()
97860                     .append('path')
97861                     .attr('class', function(d) {
97862                         var datagroup = this.parentNode.__data__;
97863                         return 'pathdata ' + datagroup + ' ' + featureClasses(d);
97864                     })
97865                     .attr('clip-path', function(d) {
97866                         var datagroup = this.parentNode.__data__;
97867                         return datagroup === 'fill' ? ('url(#' + clipPathID(d) + ')') : null;
97868                     })
97869                     .merge(paths)
97870                     .attr('d', function(d) {
97871                         var datagroup = this.parentNode.__data__;
97872                         return datagroup === 'fill' ? getAreaPath(d) : getPath(d);
97873                     });
97874
97875
97876                 // Draw labels
97877                 layer
97878                     .call(drawLabels, 'label-halo', geoData)
97879                     .call(drawLabels, 'label', geoData);
97880
97881
97882                 function drawLabels(selection, textClass, data) {
97883                     var labelPath = d3_geoPath(projection);
97884                     var labelData = data.filter(function(d) {
97885                         return _showLabels && d.properties && (d.properties.desc || d.properties.name);
97886                     });
97887
97888                     var labels = selection.selectAll('text.' + textClass)
97889                         .data(labelData, featureKey);
97890
97891                     // exit
97892                     labels.exit()
97893                         .remove();
97894
97895                     // enter/update
97896                     labels = labels.enter()
97897                         .append('text')
97898                         .attr('class', function(d) { return textClass + ' ' + featureClasses(d); })
97899                         .merge(labels)
97900                         .text(function(d) {
97901                             return d.properties.desc || d.properties.name;
97902                         })
97903                         .attr('x', function(d) {
97904                             var centroid = labelPath.centroid(d);
97905                             return centroid[0] + 11;
97906                         })
97907                         .attr('y', function(d) {
97908                             var centroid = labelPath.centroid(d);
97909                             return centroid[1];
97910                         });
97911                 }
97912             }
97913
97914
97915             function getExtension(fileName) {
97916                 if (!fileName) { return; }
97917
97918                 var re = /\.(gpx|kml|(geo)?json)$/i;
97919                 var match = fileName.toLowerCase().match(re);
97920                 return match && match.length && match[0];
97921             }
97922
97923
97924             function xmlToDom(textdata) {
97925                 return (new DOMParser()).parseFromString(textdata, 'text/xml');
97926             }
97927
97928
97929             drawData.setFile = function(extension, data) {
97930                 _template = null;
97931                 _fileList = null;
97932                 _geojson = null;
97933                 _src = null;
97934
97935                 var gj;
97936                 switch (extension) {
97937                     case '.gpx':
97938                         gj = togeojson.gpx(xmlToDom(data));
97939                         break;
97940                     case '.kml':
97941                         gj = togeojson.kml(xmlToDom(data));
97942                         break;
97943                     case '.geojson':
97944                     case '.json':
97945                         gj = JSON.parse(data);
97946                         break;
97947                 }
97948
97949                 gj = gj || {};
97950                 if (Object.keys(gj).length) {
97951                     _geojson = ensureIDs(gj);
97952                     _src = extension + ' data file';
97953                     this.fitZoom();
97954                 }
97955
97956                 dispatch.call('change');
97957                 return this;
97958             };
97959
97960
97961             drawData.showLabels = function(val) {
97962                 if (!arguments.length) { return _showLabels; }
97963
97964                 _showLabels = val;
97965                 return this;
97966             };
97967
97968
97969             drawData.enabled = function(val) {
97970                 if (!arguments.length) { return _enabled; }
97971
97972                 _enabled = val;
97973                 if (_enabled) {
97974                     showLayer();
97975                 } else {
97976                     hideLayer();
97977                 }
97978
97979                 dispatch.call('change');
97980                 return this;
97981             };
97982
97983
97984             drawData.hasData = function() {
97985                 var gj = _geojson || {};
97986                 return !!(_template || Object.keys(gj).length);
97987             };
97988
97989
97990             drawData.template = function(val, src) {
97991                 if (!arguments.length) { return _template; }
97992
97993                 // test source against OSM imagery blacklists..
97994                 var osm = context.connection();
97995                 if (osm) {
97996                     var blacklists = osm.imageryBlacklists();
97997                     var fail = false;
97998                     var tested = 0;
97999                     var regex;
98000
98001                     for (var i = 0; i < blacklists.length; i++) {
98002                         try {
98003                             regex = new RegExp(blacklists[i]);
98004                             fail = regex.test(val);
98005                             tested++;
98006                             if (fail) { break; }
98007                         } catch (e) {
98008                             /* noop */
98009                         }
98010                     }
98011
98012                     // ensure at least one test was run.
98013                     if (!tested) {
98014                         regex = new RegExp('.*\.google(apis)?\..*/(vt|kh)[\?/].*([xyz]=.*){3}.*');
98015                         fail = regex.test(val);
98016                     }
98017                 }
98018
98019                 _template = val;
98020                 _fileList = null;
98021                 _geojson = null;
98022
98023                 // strip off the querystring/hash from the template,
98024                 // it often includes the access token
98025                 _src = src || ('vectortile:' + val.split(/[?#]/)[0]);
98026
98027                 dispatch.call('change');
98028                 return this;
98029             };
98030
98031
98032             drawData.geojson = function(gj, src) {
98033                 if (!arguments.length) { return _geojson; }
98034
98035                 _template = null;
98036                 _fileList = null;
98037                 _geojson = null;
98038                 _src = null;
98039
98040                 gj = gj || {};
98041                 if (Object.keys(gj).length) {
98042                     _geojson = ensureIDs(gj);
98043                     _src = src || 'unknown.geojson';
98044                 }
98045
98046                 dispatch.call('change');
98047                 return this;
98048             };
98049
98050
98051             drawData.fileList = function(fileList) {
98052                 if (!arguments.length) { return _fileList; }
98053
98054                 _template = null;
98055                 _fileList = fileList;
98056                 _geojson = null;
98057                 _src = null;
98058
98059                 if (!fileList || !fileList.length) { return this; }
98060                 var f = fileList[0];
98061                 var extension = getExtension(f.name);
98062                 var reader = new FileReader();
98063                 reader.onload = (function() {
98064                     return function(e) {
98065                         drawData.setFile(extension, e.target.result);
98066                     };
98067                 })();
98068
98069                 reader.readAsText(f);
98070
98071                 return this;
98072             };
98073
98074
98075             drawData.url = function(url, defaultExtension) {
98076                 _template = null;
98077                 _fileList = null;
98078                 _geojson = null;
98079                 _src = null;
98080
98081                 // strip off any querystring/hash from the url before checking extension
98082                 var testUrl = url.split(/[?#]/)[0];
98083                 var extension = getExtension(testUrl) || defaultExtension;
98084                 if (extension) {
98085                     _template = null;
98086                     d3_text(url)
98087                         .then(function(data) {
98088                             drawData.setFile(extension, data);
98089                         })
98090                         .catch(function() {
98091                             /* ignore */
98092                         });
98093
98094                 } else {
98095                     drawData.template(url);
98096                 }
98097
98098                 return this;
98099             };
98100
98101
98102             drawData.getSrc = function() {
98103                 return _src || '';
98104             };
98105
98106
98107             drawData.fitZoom = function() {
98108                 var features = getFeatures(_geojson);
98109                 if (!features.length) { return; }
98110
98111                 var map = context.map();
98112                 var viewport = map.trimmedExtent().polygon();
98113                 var coords = features.reduce(function(coords, feature) {
98114                     var c = feature.geometry.coordinates;
98115
98116                     /* eslint-disable no-fallthrough */
98117                     switch (feature.geometry.type) {
98118                         case 'Point':
98119                             c = [c];
98120                         case 'MultiPoint':
98121                         case 'LineString':
98122                             break;
98123
98124                         case 'MultiPolygon':
98125                             c = utilArrayFlatten(c);
98126                         case 'Polygon':
98127                         case 'MultiLineString':
98128                             c = utilArrayFlatten(c);
98129                             break;
98130                     }
98131                     /* eslint-enable no-fallthrough */
98132
98133                     return utilArrayUnion(coords, c);
98134                 }, []);
98135
98136                 if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
98137                     var extent = geoExtent(d3_geoBounds({ type: 'LineString', coordinates: coords }));
98138                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
98139                 }
98140
98141                 return this;
98142             };
98143
98144
98145             init();
98146             return drawData;
98147         }
98148
98149         function svgDebug(projection, context) {
98150
98151             function drawDebug(selection) {
98152                 var showsTile = context.getDebug('tile');
98153                 var showsCollision = context.getDebug('collision');
98154                 var showsImagery = context.getDebug('imagery');
98155                 var showsCommunity = context.getDebug('community');
98156                 var showsTouchTargets = context.getDebug('target');
98157                 var showsDownloaded = context.getDebug('downloaded');
98158
98159                 var debugData = [];
98160                 if (showsTile) {
98161                     debugData.push({ class: 'red', label: 'tile' });
98162                 }
98163                 if (showsCollision) {
98164                     debugData.push({ class: 'yellow', label: 'collision' });
98165                 }
98166                 if (showsImagery) {
98167                     debugData.push({ class: 'orange', label: 'imagery' });
98168                 }
98169                 if (showsCommunity) {
98170                     debugData.push({ class: 'blue', label: 'community' });
98171                 }
98172                 if (showsTouchTargets) {
98173                     debugData.push({ class: 'pink', label: 'touchTargets' });
98174                 }
98175                 if (showsDownloaded) {
98176                     debugData.push({ class: 'purple', label: 'downloaded' });
98177                 }
98178
98179
98180                 var legend = d3_select('#content')
98181                     .selectAll('.debug-legend')
98182                     .data(debugData.length ? [0] : []);
98183
98184                 legend.exit()
98185                     .remove();
98186
98187                 legend = legend.enter()
98188                     .append('div')
98189                     .attr('class', 'fillD debug-legend')
98190                     .merge(legend);
98191
98192
98193                 var legendItems = legend.selectAll('.debug-legend-item')
98194                     .data(debugData, function(d) { return d.label; });
98195
98196                 legendItems.exit()
98197                     .remove();
98198
98199                 legendItems.enter()
98200                     .append('span')
98201                     .attr('class', function(d) { return 'debug-legend-item ' + d.class; })
98202                     .text(function(d) { return d.label; });
98203
98204
98205                 var layer = selection.selectAll('.layer-debug')
98206                     .data(showsImagery || showsCommunity || showsDownloaded ? [0] : []);
98207
98208                 layer.exit()
98209                     .remove();
98210
98211                 layer = layer.enter()
98212                     .append('g')
98213                     .attr('class', 'layer-debug')
98214                     .merge(layer);
98215
98216
98217                 // imagery
98218                 var extent = context.map().extent();
98219                 var matchImagery = (showsImagery && data.imagery.query.bbox(extent.rectangle(), true)) || [];
98220                 var features = matchImagery.map(function(d) { return data.imagery.features[d.id]; });
98221
98222                 var imagery = layer.selectAll('path.debug-imagery')
98223                     .data(features);
98224
98225                 imagery.exit()
98226                     .remove();
98227
98228                 imagery.enter()
98229                     .append('path')
98230                     .attr('class', 'debug-imagery debug orange');
98231
98232
98233                 // community index
98234                 var community = layer.selectAll('path.debug-community')
98235                     .data(showsCommunity ? Object.values(data.community.features) : []);
98236
98237                 community.exit()
98238                     .remove();
98239
98240                 community.enter()
98241                     .append('path')
98242                     .attr('class', 'debug-community debug blue');
98243
98244
98245                 // downloaded
98246                 var osm = context.connection();
98247                 var dataDownloaded = [];
98248
98249                 if (osm) {
98250                     var rtree = osm.caches('get').tile.rtree;
98251                     dataDownloaded = rtree.all().map(function(bbox) {
98252                         return {
98253                             type: 'Feature',
98254                             properties: { id: bbox.id },
98255                             geometry: {
98256                                 type: 'Polygon',
98257                                 coordinates: [[
98258                                     [ bbox.minX, bbox.minY ],
98259                                     [ bbox.minX, bbox.maxY ],
98260                                     [ bbox.maxX, bbox.maxY ],
98261                                     [ bbox.maxX, bbox.minY ],
98262                                     [ bbox.minX, bbox.minY ]
98263                                 ]]
98264                             }
98265                         };
98266                     });
98267                 }
98268
98269
98270                 var downloaded = layer
98271                     .selectAll('path.debug-downloaded')
98272                     .data(showsDownloaded ? dataDownloaded : []);
98273
98274                 downloaded.exit()
98275                     .remove();
98276
98277                 downloaded.enter()
98278                     .append('path')
98279                     .attr('class', 'debug-downloaded debug purple');
98280
98281
98282                 // update
98283                 layer.selectAll('path')
98284                     .attr('d', svgPath(projection).geojson);
98285             }
98286
98287
98288             // This looks strange because `enabled` methods on other layers are
98289             // chainable getter/setters, and this one is just a getter.
98290             drawDebug.enabled = function() {
98291                 if (!arguments.length) {
98292                     return context.getDebug('tile') ||
98293                         context.getDebug('collision') ||
98294                         context.getDebug('imagery') ||
98295                         context.getDebug('target') ||
98296                         context.getDebug('downloaded');
98297                 } else {
98298                     return this;
98299                 }
98300             };
98301
98302
98303             return drawDebug;
98304         }
98305
98306         var _keepRightEnabled = false;
98307         var _keepRightService;
98308
98309
98310         function svgKeepRight(projection, context, dispatch) {
98311             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
98312             var minZoom = 12;
98313             var touchLayer = d3_select(null);
98314             var drawLayer = d3_select(null);
98315             var _keepRightVisible = false;
98316
98317
98318             function markerPath(selection, klass) {
98319                 selection
98320                     .attr('class', klass)
98321                     .attr('transform', 'translate(-4, -24)')
98322                     .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');
98323             }
98324
98325
98326             // Loosely-coupled keepRight service for fetching errors.
98327             function getService() {
98328                 if (services$1.keepRight && !_keepRightService) {
98329                     _keepRightService = services$1.keepRight;
98330                     _keepRightService.on('loaded', throttledRedraw);
98331                 } else if (!services$1.keepRight && _keepRightService) {
98332                     _keepRightService = null;
98333                 }
98334
98335                 return _keepRightService;
98336             }
98337
98338
98339             // Show the errors
98340             function editOn() {
98341                 if (!_keepRightVisible) {
98342                     _keepRightVisible = true;
98343                     drawLayer
98344                         .style('display', 'block');
98345                 }
98346             }
98347
98348
98349             // Immediately remove the errors and their touch targets
98350             function editOff() {
98351                 if (_keepRightVisible) {
98352                     _keepRightVisible = false;
98353                     drawLayer
98354                         .style('display', 'none');
98355                     drawLayer.selectAll('.qa_error.keepRight')
98356                         .remove();
98357                     touchLayer.selectAll('.qa_error.keepRight')
98358                         .remove();
98359                 }
98360             }
98361
98362
98363             // Enable the layer.  This shows the errors and transitions them to visible.
98364             function layerOn() {
98365                 editOn();
98366
98367                 drawLayer
98368                     .style('opacity', 0)
98369                     .transition()
98370                     .duration(250)
98371                     .style('opacity', 1)
98372                     .on('end interrupt', function () {
98373                         dispatch.call('change');
98374                     });
98375             }
98376
98377
98378             // Disable the layer.  This transitions the layer invisible and then hides the errors.
98379             function layerOff() {
98380                 throttledRedraw.cancel();
98381                 drawLayer.interrupt();
98382                 touchLayer.selectAll('.qa_error.keepRight')
98383                     .remove();
98384
98385                 drawLayer
98386                     .transition()
98387                     .duration(250)
98388                     .style('opacity', 0)
98389                     .on('end interrupt', function () {
98390                         editOff();
98391                         dispatch.call('change');
98392                     });
98393             }
98394
98395
98396             // Update the error markers
98397             function updateMarkers() {
98398                 if (!_keepRightVisible || !_keepRightEnabled) { return; }
98399
98400                 var service = getService();
98401                 var selectedID = context.selectedErrorID();
98402                 var data = (service ? service.getErrors(projection) : []);
98403                 var getTransform = svgPointTransform(projection);
98404
98405                 // Draw markers..
98406                 var markers = drawLayer.selectAll('.qa_error.keepRight')
98407                     .data(data, function(d) { return d.id; });
98408
98409                 // exit
98410                 markers.exit()
98411                     .remove();
98412
98413                 // enter
98414                 var markersEnter = markers.enter()
98415                     .append('g')
98416                     .attr('class', function(d) {
98417                         return [
98418                             'qa_error',
98419                             d.service,
98420                             'error_id-' + d.id,
98421                             'error_type-' + d.parent_error_type
98422                         ].join(' ');
98423                     });
98424
98425                 markersEnter
98426                     .append('ellipse')
98427                     .attr('cx', 0.5)
98428                     .attr('cy', 1)
98429                     .attr('rx', 6.5)
98430                     .attr('ry', 3)
98431                     .attr('class', 'stroke');
98432
98433                 markersEnter
98434                     .append('path')
98435                     .call(markerPath, 'shadow');
98436
98437                 markersEnter
98438                     .append('use')
98439                     .attr('class', 'qa_error-fill')
98440                     .attr('width', '20px')
98441                     .attr('height', '20px')
98442                     .attr('x', '-8px')
98443                     .attr('y', '-22px')
98444                     .attr('xlink:href', '#iD-icon-bolt');
98445
98446                 // update
98447                 markers
98448                     .merge(markersEnter)
98449                     .sort(sortY)
98450                     .classed('selected', function(d) { return d.id === selectedID; })
98451                     .attr('transform', getTransform);
98452
98453
98454                 // Draw targets..
98455                 if (touchLayer.empty()) { return; }
98456                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
98457
98458                 var targets = touchLayer.selectAll('.qa_error.keepRight')
98459                     .data(data, function(d) { return d.id; });
98460
98461                 // exit
98462                 targets.exit()
98463                     .remove();
98464
98465                 // enter/update
98466                 targets.enter()
98467                     .append('rect')
98468                     .attr('width', '20px')
98469                     .attr('height', '20px')
98470                     .attr('x', '-8px')
98471                     .attr('y', '-22px')
98472                     .merge(targets)
98473                     .sort(sortY)
98474                     .attr('class', function(d) {
98475                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
98476                     })
98477                     .attr('transform', getTransform);
98478
98479
98480                 function sortY(a, b) {
98481                     return (a.id === selectedID) ? 1
98482                         : (b.id === selectedID) ? -1
98483                         : (a.severity === 'error' && b.severity !== 'error') ? 1
98484                         : (b.severity === 'error' && a.severity !== 'error') ? -1
98485                         : b.loc[1] - a.loc[1];
98486                 }
98487             }
98488
98489
98490             // Draw the keepRight layer and schedule loading errors and updating markers.
98491             function drawKeepRight(selection) {
98492                 var service = getService();
98493
98494                 var surface = context.surface();
98495                 if (surface && !surface.empty()) {
98496                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
98497                 }
98498
98499                 drawLayer = selection.selectAll('.layer-keepRight')
98500                     .data(service ? [0] : []);
98501
98502                 drawLayer.exit()
98503                     .remove();
98504
98505                 drawLayer = drawLayer.enter()
98506                     .append('g')
98507                     .attr('class', 'layer-keepRight')
98508                     .style('display', _keepRightEnabled ? 'block' : 'none')
98509                     .merge(drawLayer);
98510
98511                 if (_keepRightEnabled) {
98512                     if (service && ~~context.map().zoom() >= minZoom) {
98513                         editOn();
98514                         service.loadErrors(projection);
98515                         updateMarkers();
98516                     } else {
98517                         editOff();
98518                     }
98519                 }
98520             }
98521
98522
98523             // Toggles the layer on and off
98524             drawKeepRight.enabled = function(val) {
98525                 if (!arguments.length) { return _keepRightEnabled; }
98526
98527                 _keepRightEnabled = val;
98528                 if (_keepRightEnabled) {
98529                     layerOn();
98530                 } else {
98531                     layerOff();
98532                     if (context.selectedErrorID()) {
98533                         context.enter(modeBrowse(context));
98534                     }
98535                 }
98536
98537                 dispatch.call('change');
98538                 return this;
98539             };
98540
98541
98542             drawKeepRight.supported = function() {
98543                 return !!getService();
98544             };
98545
98546
98547             return drawKeepRight;
98548         }
98549
98550         function svgGeolocate(projection) {
98551             var layer = d3_select(null);
98552             var _position;
98553
98554
98555             function init() {
98556                 if (svgGeolocate.initialized) { return; }  // run once
98557                 svgGeolocate.enabled = false;
98558                 svgGeolocate.initialized = true;
98559             }
98560
98561             function showLayer() {
98562                 layer.style('display', 'block');
98563             }
98564
98565
98566             function hideLayer() {
98567                 layer
98568                     .transition()
98569                     .duration(250)
98570                     .style('opacity', 0);
98571             }
98572
98573             function layerOn() {
98574                 layer
98575                     .style('opacity', 0)
98576                     .transition()
98577                     .duration(250)
98578                     .style('opacity', 1);
98579
98580             }
98581
98582             function layerOff() {
98583                 layer.style('display', 'none');
98584             }
98585
98586             function transform(d) {
98587                 return svgPointTransform(projection)(d);
98588             }
98589
98590             function accuracy(accuracy, loc) { // converts accuracy to pixels...
98591                 var degreesRadius = geoMetersToLat(accuracy),
98592                     tangentLoc = [loc[0], loc[1] + degreesRadius],
98593                     projectedTangent = projection(tangentLoc),
98594                     projectedLoc = projection([loc[0], loc[1]]);
98595
98596                 // southern most point will have higher pixel value...
98597                return Math.round(projectedLoc[1] - projectedTangent[1]).toString();
98598             }
98599
98600             function update() {
98601                 var geolocation = { loc: [_position.coords.longitude, _position.coords.latitude] };
98602
98603                 var groups = layer.selectAll('.geolocations').selectAll('.geolocation')
98604                     .data([geolocation]);
98605
98606                 groups.exit()
98607                     .remove();
98608
98609                 var pointsEnter = groups.enter()
98610                     .append('g')
98611                     .attr('class', 'geolocation');
98612
98613                 pointsEnter
98614                     .append('circle')
98615                     .attr('id', 'geolocate-radius')
98616                     .attr('dx', '0')
98617                     .attr('dy', '0')
98618                     .attr('fill', 'rgb(15,128,225)')
98619                     .attr('fill-opacity', '0.3')
98620                     .attr('r', '0');
98621
98622                 pointsEnter
98623                     .append('circle')
98624                     .attr('dx', '0')
98625                     .attr('dy', '0')
98626                     .attr('fill', 'rgb(15,128,225)')
98627                     .attr('stroke', 'white')
98628                     .attr('stroke-width', '1.5')
98629                     .attr('r', '6');
98630
98631                 groups.merge(pointsEnter)
98632                     .attr('transform', transform);
98633
98634                 d3_select('#geolocate-radius').attr('r', accuracy(_position.coords.accuracy, geolocation.loc));
98635             }
98636
98637             function drawLocation(selection) {
98638                 var enabled = svgGeolocate.enabled;
98639
98640                 layer = selection.selectAll('.layer-geolocate')
98641                     .data([0]);
98642
98643                 layer.exit()
98644                     .remove();
98645
98646                 var layerEnter = layer.enter()
98647                     .append('g')
98648                     .attr('class', 'layer-geolocate')
98649                     .style('display', enabled ? 'block' : 'none');
98650
98651                 layerEnter
98652                     .append('g')
98653                     .attr('class', 'geolocations');
98654
98655                 layer = layerEnter
98656                     .merge(layer);
98657
98658                 if (enabled) {
98659                     update();
98660                 } else {
98661                     layerOff();
98662                 }
98663             }
98664
98665             drawLocation.enabled = function (position, enabled) {
98666                 if (!arguments.length) { return svgGeolocate.enabled; }
98667                 _position = position;
98668                 svgGeolocate.enabled = enabled;
98669                 if (svgGeolocate.enabled) {
98670                     showLayer();
98671                     layerOn();
98672                 } else {
98673                     hideLayer();
98674                 }
98675                 return this;
98676             };
98677
98678             init();
98679             return drawLocation;
98680         }
98681
98682         function svgLabels(projection, context) {
98683             var path = d3_geoPath(projection);
98684             var detected = utilDetect();
98685             var baselineHack = (detected.ie ||
98686                 detected.browser.toLowerCase() === 'edge' ||
98687                 (detected.browser.toLowerCase() === 'firefox' && detected.version >= 70));
98688             var _rdrawn = new RBush();
98689             var _rskipped = new RBush();
98690             var _textWidthCache = {};
98691             var _entitybboxes = {};
98692
98693             // Listed from highest to lowest priority
98694             var labelStack = [
98695                 ['line', 'aeroway', '*', 12],
98696                 ['line', 'highway', 'motorway', 12],
98697                 ['line', 'highway', 'trunk', 12],
98698                 ['line', 'highway', 'primary', 12],
98699                 ['line', 'highway', 'secondary', 12],
98700                 ['line', 'highway', 'tertiary', 12],
98701                 ['line', 'highway', '*', 12],
98702                 ['line', 'railway', '*', 12],
98703                 ['line', 'waterway', '*', 12],
98704                 ['area', 'aeroway', '*', 12],
98705                 ['area', 'amenity', '*', 12],
98706                 ['area', 'building', '*', 12],
98707                 ['area', 'historic', '*', 12],
98708                 ['area', 'leisure', '*', 12],
98709                 ['area', 'man_made', '*', 12],
98710                 ['area', 'natural', '*', 12],
98711                 ['area', 'shop', '*', 12],
98712                 ['area', 'tourism', '*', 12],
98713                 ['area', 'camp_site', '*', 12],
98714                 ['point', 'aeroway', '*', 10],
98715                 ['point', 'amenity', '*', 10],
98716                 ['point', 'building', '*', 10],
98717                 ['point', 'historic', '*', 10],
98718                 ['point', 'leisure', '*', 10],
98719                 ['point', 'man_made', '*', 10],
98720                 ['point', 'natural', '*', 10],
98721                 ['point', 'shop', '*', 10],
98722                 ['point', 'tourism', '*', 10],
98723                 ['point', 'camp_site', '*', 10],
98724                 ['line', 'name', '*', 12],
98725                 ['area', 'name', '*', 12],
98726                 ['point', 'name', '*', 10]
98727             ];
98728
98729
98730             function blacklisted(preset) {
98731                 var noIcons = ['building', 'landuse', 'natural'];
98732                 return noIcons.some(function(s) {
98733                     return preset.id.indexOf(s) >= 0;
98734                 });
98735             }
98736
98737
98738             function get(array, prop) {
98739                 return function(d, i) { return array[i][prop]; };
98740             }
98741
98742
98743             function textWidth(text, size, elem) {
98744                 var c = _textWidthCache[size];
98745                 if (!c) { c = _textWidthCache[size] = {}; }
98746
98747                 if (c[text]) {
98748                     return c[text];
98749
98750                 } else if (elem) {
98751                     c[text] = elem.getComputedTextLength();
98752                     return c[text];
98753
98754                 } else {
98755                     var str = encodeURIComponent(text).match(/%[CDEFcdef]/g);
98756                     if (str === null) {
98757                         return size / 3 * 2 * text.length;
98758                     } else {
98759                         return size / 3 * (2 * text.length + str.length);
98760                     }
98761                 }
98762             }
98763
98764
98765             function drawLinePaths(selection, entities, filter, classes, labels) {
98766                 var paths = selection.selectAll('path')
98767                     .filter(filter)
98768                     .data(entities, osmEntity.key);
98769
98770                 // exit
98771                 paths.exit()
98772                     .remove();
98773
98774                 // enter/update
98775                 paths.enter()
98776                     .append('path')
98777                     .style('stroke-width', get(labels, 'font-size'))
98778                     .attr('id', function(d) { return 'labelpath-' + d.id; })
98779                     .attr('class', classes)
98780                     .merge(paths)
98781                     .attr('d', get(labels, 'lineString'));
98782             }
98783
98784
98785             function drawLineLabels(selection, entities, filter, classes, labels) {
98786                 var texts = selection.selectAll('text.' + classes)
98787                     .filter(filter)
98788                     .data(entities, osmEntity.key);
98789
98790                 // exit
98791                 texts.exit()
98792                     .remove();
98793
98794                 // enter
98795                 texts.enter()
98796                     .append('text')
98797                     .attr('class', function(d, i) { return classes + ' ' + labels[i].classes + ' ' + d.id; })
98798                     .attr('dy', baselineHack ? '0.35em' : null)
98799                     .append('textPath')
98800                     .attr('class', 'textpath');
98801
98802                 // update
98803                 selection.selectAll('text.' + classes).selectAll('.textpath')
98804                     .filter(filter)
98805                     .data(entities, osmEntity.key)
98806                     .attr('startOffset', '50%')
98807                     .attr('xlink:href', function(d) { return '#labelpath-' + d.id; })
98808                     .text(utilDisplayNameForPath);
98809             }
98810
98811
98812             function drawPointLabels(selection, entities, filter, classes, labels) {
98813                 var texts = selection.selectAll('text.' + classes)
98814                     .filter(filter)
98815                     .data(entities, osmEntity.key);
98816
98817                 // exit
98818                 texts.exit()
98819                     .remove();
98820
98821                 // enter/update
98822                 texts.enter()
98823                     .append('text')
98824                     .attr('class', function(d, i) {
98825                         return classes + ' ' + labels[i].classes + ' ' + d.id;
98826                     })
98827                     .merge(texts)
98828                     .attr('x', get(labels, 'x'))
98829                     .attr('y', get(labels, 'y'))
98830                     .style('text-anchor', get(labels, 'textAnchor'))
98831                     .text(utilDisplayName)
98832                     .each(function(d, i) {
98833                         textWidth(utilDisplayName(d), labels[i].height, this);
98834                     });
98835             }
98836
98837
98838             function drawAreaLabels(selection, entities, filter, classes, labels) {
98839                 entities = entities.filter(hasText);
98840                 labels = labels.filter(hasText);
98841                 drawPointLabels(selection, entities, filter, classes, labels);
98842
98843                 function hasText(d, i) {
98844                     return labels[i].hasOwnProperty('x') && labels[i].hasOwnProperty('y');
98845                 }
98846             }
98847
98848
98849             function drawAreaIcons(selection, entities, filter, classes, labels) {
98850                 var icons = selection.selectAll('use.' + classes)
98851                     .filter(filter)
98852                     .data(entities, osmEntity.key);
98853
98854                 // exit
98855                 icons.exit()
98856                     .remove();
98857
98858                 // enter/update
98859                 icons.enter()
98860                     .append('use')
98861                     .attr('class', 'icon ' + classes)
98862                     .attr('width', '17px')
98863                     .attr('height', '17px')
98864                     .merge(icons)
98865                     .attr('transform', get(labels, 'transform'))
98866                     .attr('xlink:href', function(d) {
98867                         var preset = context.presets().match(d, context.graph());
98868                         var picon = preset && preset.icon;
98869
98870                         if (!picon) {
98871                             return '';
98872                         } else {
98873                             var isMaki = /^maki-/.test(picon);
98874                             return '#' + picon + (isMaki ? '-15' : '');
98875                         }
98876                     });
98877             }
98878
98879
98880             function drawCollisionBoxes(selection, rtree, which) {
98881                 var classes = 'debug ' + which + ' ' + (which === 'debug-skipped' ? 'orange' : 'yellow');
98882
98883                 var gj = [];
98884                 if (context.getDebug('collision')) {
98885                     gj = rtree.all().map(function(d) {
98886                         return { type: 'Polygon', coordinates: [[
98887                             [d.minX, d.minY],
98888                             [d.maxX, d.minY],
98889                             [d.maxX, d.maxY],
98890                             [d.minX, d.maxY],
98891                             [d.minX, d.minY]
98892                         ]]};
98893                     });
98894                 }
98895
98896                 var boxes = selection.selectAll('.' + which)
98897                     .data(gj);
98898
98899                 // exit
98900                 boxes.exit()
98901                     .remove();
98902
98903                 // enter/update
98904                 boxes.enter()
98905                     .append('path')
98906                     .attr('class', classes)
98907                     .merge(boxes)
98908                     .attr('d', d3_geoPath());
98909             }
98910
98911
98912             function drawLabels(selection, graph, entities, filter, dimensions, fullRedraw) {
98913                 var wireframe = context.surface().classed('fill-wireframe');
98914                 var zoom = geoScaleToZoom(projection.scale());
98915
98916                 var labelable = [];
98917                 var renderNodeAs = {};
98918                 var i, j, k, entity, geometry;
98919
98920                 for (i = 0; i < labelStack.length; i++) {
98921                     labelable.push([]);
98922                 }
98923
98924                 if (fullRedraw) {
98925                     _rdrawn.clear();
98926                     _rskipped.clear();
98927                     _entitybboxes = {};
98928
98929                 } else {
98930                     for (i = 0; i < entities.length; i++) {
98931                         entity = entities[i];
98932                         var toRemove = []
98933                             .concat(_entitybboxes[entity.id] || [])
98934                             .concat(_entitybboxes[entity.id + 'I'] || []);
98935
98936                         for (j = 0; j < toRemove.length; j++) {
98937                             _rdrawn.remove(toRemove[j]);
98938                             _rskipped.remove(toRemove[j]);
98939                         }
98940                     }
98941                 }
98942
98943                 // Loop through all the entities to do some preprocessing
98944                 for (i = 0; i < entities.length; i++) {
98945                     entity = entities[i];
98946                     geometry = entity.geometry(graph);
98947
98948                     // Insert collision boxes around interesting points/vertices
98949                     if (geometry === 'point' || (geometry === 'vertex' && isInterestingVertex(entity))) {
98950                         var hasDirections = entity.directions(graph, projection).length;
98951                         var markerPadding;
98952
98953                         if (!wireframe && geometry === 'point' && !(zoom >= 18 && hasDirections)) {
98954                             renderNodeAs[entity.id] = 'point';
98955                             markerPadding = 20;   // extra y for marker height
98956                         } else {
98957                             renderNodeAs[entity.id] = 'vertex';
98958                             markerPadding = 0;
98959                         }
98960
98961                         var coord = projection(entity.loc);
98962                         var nodePadding = 10;
98963                         var bbox = {
98964                             minX: coord[0] - nodePadding,
98965                             minY: coord[1] - nodePadding - markerPadding,
98966                             maxX: coord[0] + nodePadding,
98967                             maxY: coord[1] + nodePadding
98968                         };
98969
98970                         doInsert(bbox, entity.id + 'P');
98971                     }
98972
98973                     // From here on, treat vertices like points
98974                     if (geometry === 'vertex') {
98975                         geometry = 'point';
98976                     }
98977
98978                     // Determine which entities are label-able
98979                     var preset = geometry === 'area' && context.presets().match(entity, graph);
98980                     var icon = preset && !blacklisted(preset) && preset.icon;
98981
98982                     if (!icon && !utilDisplayName(entity))
98983                         { continue; }
98984
98985                     for (k = 0; k < labelStack.length; k++) {
98986                         var matchGeom = labelStack[k][0];
98987                         var matchKey = labelStack[k][1];
98988                         var matchVal = labelStack[k][2];
98989                         var hasVal = entity.tags[matchKey];
98990
98991                         if (geometry === matchGeom && hasVal && (matchVal === '*' || matchVal === hasVal)) {
98992                             labelable[k].push(entity);
98993                             break;
98994                         }
98995                     }
98996                 }
98997
98998                 var positions = {
98999                     point: [],
99000                     line: [],
99001                     area: []
99002                 };
99003
99004                 var labelled = {
99005                     point: [],
99006                     line: [],
99007                     area: []
99008                 };
99009
99010                 // Try and find a valid label for labellable entities
99011                 for (k = 0; k < labelable.length; k++) {
99012                     var fontSize = labelStack[k][3];
99013
99014                     for (i = 0; i < labelable[k].length; i++) {
99015                         entity = labelable[k][i];
99016                         geometry = entity.geometry(graph);
99017
99018                         var getName = (geometry === 'line') ? utilDisplayNameForPath : utilDisplayName;
99019                         var name = getName(entity);
99020                         var width = name && textWidth(name, fontSize);
99021                         var p = null;
99022
99023                         if (geometry === 'point' || geometry === 'vertex') {
99024                             // no point or vertex labels in wireframe mode
99025                             // no vertex labels at low zooms (vertices have no icons)
99026                             if (wireframe) { continue; }
99027                             var renderAs = renderNodeAs[entity.id];
99028                             if (renderAs === 'vertex' && zoom < 17) { continue; }
99029
99030                             p = getPointLabel(entity, width, fontSize, renderAs);
99031
99032                         } else if (geometry === 'line') {
99033                             p = getLineLabel(entity, width, fontSize);
99034
99035                         } else if (geometry === 'area') {
99036                             p = getAreaLabel(entity, width, fontSize);
99037                         }
99038
99039                         if (p) {
99040                             if (geometry === 'vertex') { geometry = 'point'; }  // treat vertex like point
99041                             p.classes = geometry + ' tag-' + labelStack[k][1];
99042                             positions[geometry].push(p);
99043                             labelled[geometry].push(entity);
99044                         }
99045                     }
99046                 }
99047
99048
99049                 function isInterestingVertex(entity) {
99050                     var selectedIDs = context.selectedIDs();
99051
99052                     return entity.hasInterestingTags() ||
99053                         entity.isEndpoint(graph) ||
99054                         entity.isConnected(graph) ||
99055                         selectedIDs.indexOf(entity.id) !== -1 ||
99056                         graph.parentWays(entity).some(function(parent) {
99057                             return selectedIDs.indexOf(parent.id) !== -1;
99058                         });
99059                 }
99060
99061
99062                 function getPointLabel(entity, width, height, geometry) {
99063                     var y = (geometry === 'point' ? -12 : 0);
99064                     var pointOffsets = {
99065                         ltr: [15, y, 'start'],
99066                         rtl: [-15, y, 'end']
99067                     };
99068
99069                     var coord = projection(entity.loc);
99070                     var textPadding = 2;
99071                     var offset = pointOffsets[textDirection];
99072                     var p = {
99073                         height: height,
99074                         width: width,
99075                         x: coord[0] + offset[0],
99076                         y: coord[1] + offset[1],
99077                         textAnchor: offset[2]
99078                     };
99079
99080                     // insert a collision box for the text label..
99081                     var bbox;
99082                     if (textDirection === 'rtl') {
99083                         bbox = {
99084                             minX: p.x - width - textPadding,
99085                             minY: p.y - (height / 2) - textPadding,
99086                             maxX: p.x + textPadding,
99087                             maxY: p.y + (height / 2) + textPadding
99088                         };
99089                     } else {
99090                         bbox = {
99091                             minX: p.x - textPadding,
99092                             minY: p.y - (height / 2) - textPadding,
99093                             maxX: p.x + width + textPadding,
99094                             maxY: p.y + (height / 2) + textPadding
99095                         };
99096                     }
99097
99098                     if (tryInsert([bbox], entity.id, true)) {
99099                         return p;
99100                     }
99101                 }
99102
99103
99104                 function getLineLabel(entity, width, height) {
99105                     var viewport = geoExtent(context.projection.clipExtent()).polygon();
99106                     var points = graph.childNodes(entity)
99107                         .map(function(node) { return projection(node.loc); });
99108                     var length = geoPathLength(points);
99109
99110                     if (length < width + 20) { return; }
99111
99112                     // todo: properly clip points to viewport
99113
99114                     // % along the line to attempt to place the label
99115                     var lineOffsets = [50, 45, 55, 40, 60, 35, 65, 30, 70,
99116                                        25, 75, 20, 80, 15, 95, 10, 90, 5, 95];
99117                     var padding = 3;
99118
99119                     for (var i = 0; i < lineOffsets.length; i++) {
99120                         var offset = lineOffsets[i];
99121                         var middle = offset / 100 * length;
99122                         var start = middle - width / 2;
99123
99124                         if (start < 0 || start + width > length) { continue; }
99125
99126                         // generate subpath and ignore paths that are invalid or don't cross viewport.
99127                         var sub = subpath(points, start, start + width);
99128                         if (!sub || !geoPolygonIntersectsPolygon(viewport, sub, true)) {
99129                             continue;
99130                         }
99131
99132                         var isReverse = reverse(sub);
99133                         if (isReverse) {
99134                             sub = sub.reverse();
99135                         }
99136
99137                         var bboxes = [];
99138                         var boxsize = (height + 2) / 2;
99139
99140                         for (var j = 0; j < sub.length - 1; j++) {
99141                             var a = sub[j];
99142                             var b = sub[j + 1];
99143
99144                             // split up the text into small collision boxes
99145                             var num = Math.max(1, Math.floor(geoVecLength(a, b) / boxsize / 2));
99146
99147                             for (var box = 0; box < num; box++) {
99148                                 var p = geoVecInterp(a, b, box / num);
99149                                 var x0 = p[0] - boxsize - padding;
99150                                 var y0 = p[1] - boxsize - padding;
99151                                 var x1 = p[0] + boxsize + padding;
99152                                 var y1 = p[1] + boxsize + padding;
99153
99154                                 bboxes.push({
99155                                     minX: Math.min(x0, x1),
99156                                     minY: Math.min(y0, y1),
99157                                     maxX: Math.max(x0, x1),
99158                                     maxY: Math.max(y0, y1)
99159                                 });
99160                             }
99161                         }
99162
99163                         if (tryInsert(bboxes, entity.id, false)) {   // accept this one
99164                             return {
99165                                 'font-size': height + 2,
99166                                 lineString: lineString(sub),
99167                                 startOffset: offset + '%'
99168                             };
99169                         }
99170                     }
99171
99172                     function reverse(p) {
99173                         var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
99174                         return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
99175                     }
99176
99177                     function lineString(points) {
99178                         return 'M' + points.join('L');
99179                     }
99180
99181                     function subpath(points, from, to) {
99182                         var sofar = 0;
99183                         var start, end, i0, i1;
99184
99185                         for (var i = 0; i < points.length - 1; i++) {
99186                             var a = points[i];
99187                             var b = points[i + 1];
99188                             var current = geoVecLength(a, b);
99189                             var portion;
99190                             if (!start && sofar + current >= from) {
99191                                 portion = (from - sofar) / current;
99192                                 start = [
99193                                     a[0] + portion * (b[0] - a[0]),
99194                                     a[1] + portion * (b[1] - a[1])
99195                                 ];
99196                                 i0 = i + 1;
99197                             }
99198                             if (!end && sofar + current >= to) {
99199                                 portion = (to - sofar) / current;
99200                                 end = [
99201                                     a[0] + portion * (b[0] - a[0]),
99202                                     a[1] + portion * (b[1] - a[1])
99203                                 ];
99204                                 i1 = i + 1;
99205                             }
99206                             sofar += current;
99207                         }
99208
99209                         var result = points.slice(i0, i1);
99210                         result.unshift(start);
99211                         result.push(end);
99212                         return result;
99213                     }
99214                 }
99215
99216
99217                 function getAreaLabel(entity, width, height) {
99218                     var centroid = path.centroid(entity.asGeoJSON(graph, true));
99219                     var extent = entity.extent(graph);
99220                     var areaWidth = projection(extent[1])[0] - projection(extent[0])[0];
99221
99222                     if (isNaN(centroid[0]) || areaWidth < 20) { return; }
99223
99224                     var preset = context.presets().match(entity, context.graph());
99225                     var picon = preset && preset.icon;
99226                     var iconSize = 17;
99227                     var padding = 2;
99228                     var p = {};
99229
99230                     if (picon) {  // icon and label..
99231                         if (addIcon()) {
99232                             addLabel(iconSize + padding);
99233                             return p;
99234                         }
99235                     } else {   // label only..
99236                         if (addLabel(0)) {
99237                             return p;
99238                         }
99239                     }
99240
99241
99242                     function addIcon() {
99243                         var iconX = centroid[0] - (iconSize / 2);
99244                         var iconY = centroid[1] - (iconSize / 2);
99245                         var bbox = {
99246                             minX: iconX,
99247                             minY: iconY,
99248                             maxX: iconX + iconSize,
99249                             maxY: iconY + iconSize
99250                         };
99251
99252                         if (tryInsert([bbox], entity.id + 'I', true)) {
99253                             p.transform = 'translate(' + iconX + ',' + iconY + ')';
99254                             return true;
99255                         }
99256                         return false;
99257                     }
99258
99259                     function addLabel(yOffset) {
99260                         if (width && areaWidth >= width + 20) {
99261                             var labelX = centroid[0];
99262                             var labelY = centroid[1] + yOffset;
99263                             var bbox = {
99264                                 minX: labelX - (width / 2) - padding,
99265                                 minY: labelY - (height / 2) - padding,
99266                                 maxX: labelX + (width / 2) + padding,
99267                                 maxY: labelY + (height / 2) + padding
99268                             };
99269
99270                             if (tryInsert([bbox], entity.id, true)) {
99271                                 p.x = labelX;
99272                                 p.y = labelY;
99273                                 p.textAnchor = 'middle';
99274                                 p.height = height;
99275                                 return true;
99276                             }
99277                         }
99278                         return false;
99279                     }
99280                 }
99281
99282
99283                 // force insert a singular bounding box
99284                 // singular box only, no array, id better be unique
99285                 function doInsert(bbox, id) {
99286                     bbox.id = id;
99287
99288                     var oldbox = _entitybboxes[id];
99289                     if (oldbox) {
99290                         _rdrawn.remove(oldbox);
99291                     }
99292                     _entitybboxes[id] = bbox;
99293                     _rdrawn.insert(bbox);
99294                 }
99295
99296
99297                 function tryInsert(bboxes, id, saveSkipped) {
99298                     var skipped = false;
99299
99300                     for (var i = 0; i < bboxes.length; i++) {
99301                         var bbox = bboxes[i];
99302                         bbox.id = id;
99303
99304                         // Check that label is visible
99305                         if (bbox.minX < 0 || bbox.minY < 0 || bbox.maxX > dimensions[0] || bbox.maxY > dimensions[1]) {
99306                             skipped = true;
99307                             break;
99308                         }
99309                         if (_rdrawn.collides(bbox)) {
99310                             skipped = true;
99311                             break;
99312                         }
99313                     }
99314
99315                     _entitybboxes[id] = bboxes;
99316
99317                     if (skipped) {
99318                         if (saveSkipped) {
99319                             _rskipped.load(bboxes);
99320                         }
99321                     } else {
99322                         _rdrawn.load(bboxes);
99323                     }
99324
99325                     return !skipped;
99326                 }
99327
99328
99329                 var layer = selection.selectAll('.layer-osm.labels');
99330                 layer.selectAll('.labels-group')
99331                     .data(['halo', 'label', 'debug'])
99332                     .enter()
99333                     .append('g')
99334                     .attr('class', function(d) { return 'labels-group ' + d; });
99335
99336                 var halo = layer.selectAll('.labels-group.halo');
99337                 var label = layer.selectAll('.labels-group.label');
99338                 var debug = layer.selectAll('.labels-group.debug');
99339
99340                 // points
99341                 drawPointLabels(label, labelled.point, filter, 'pointlabel', positions.point);
99342                 drawPointLabels(halo, labelled.point, filter, 'pointlabel-halo', positions.point);
99343
99344                 // lines
99345                 drawLinePaths(layer, labelled.line, filter, '', positions.line);
99346                 drawLineLabels(label, labelled.line, filter, 'linelabel', positions.line);
99347                 drawLineLabels(halo, labelled.line, filter, 'linelabel-halo', positions.line);
99348
99349                 // areas
99350                 drawAreaLabels(label, labelled.area, filter, 'arealabel', positions.area);
99351                 drawAreaLabels(halo, labelled.area, filter, 'arealabel-halo', positions.area);
99352                 drawAreaIcons(label, labelled.area, filter, 'areaicon', positions.area);
99353                 drawAreaIcons(halo, labelled.area, filter, 'areaicon-halo', positions.area);
99354
99355                 // debug
99356                 drawCollisionBoxes(debug, _rskipped, 'debug-skipped');
99357                 drawCollisionBoxes(debug, _rdrawn, 'debug-drawn');
99358
99359                 layer.call(filterLabels);
99360             }
99361
99362
99363             function filterLabels(selection) {
99364                 var drawLayer = selection.selectAll('.layer-osm.labels');
99365                 var layers = drawLayer.selectAll('.labels-group.halo, .labels-group.label');
99366
99367                 layers.selectAll('.nolabel')
99368                     .classed('nolabel', false);
99369
99370                 var mouse = context.mouse();
99371                 var graph = context.graph();
99372                 var selectedIDs = context.selectedIDs();
99373                 var ids = [];
99374                 var pad, bbox;
99375
99376                 // hide labels near the mouse
99377                 if (mouse) {
99378                     pad = 20;
99379                     bbox = { minX: mouse[0] - pad, minY: mouse[1] - pad, maxX: mouse[0] + pad, maxY: mouse[1] + pad };
99380                     var nearMouse = _rdrawn.search(bbox).map(function(entity) { return entity.id; });
99381                     ids.push.apply(ids, nearMouse);
99382                 }
99383
99384                 // hide labels on selected nodes (they look weird when dragging / haloed)
99385                 for (var i = 0; i < selectedIDs.length; i++) {
99386                     var entity = graph.hasEntity(selectedIDs[i]);
99387                     if (entity && entity.type === 'node') {
99388                         ids.push(selectedIDs[i]);
99389                     }
99390                 }
99391
99392                 layers.selectAll(utilEntitySelector(ids))
99393                     .classed('nolabel', true);
99394
99395
99396                 // draw the mouse bbox if debugging is on..
99397                 var debug = selection.selectAll('.labels-group.debug');
99398                 var gj = [];
99399                 if (context.getDebug('collision')) {
99400                     gj = bbox ? [{
99401                         type: 'Polygon',
99402                         coordinates: [[
99403                             [bbox.minX, bbox.minY],
99404                             [bbox.maxX, bbox.minY],
99405                             [bbox.maxX, bbox.maxY],
99406                             [bbox.minX, bbox.maxY],
99407                             [bbox.minX, bbox.minY]
99408                         ]]
99409                     }] : [];
99410                 }
99411
99412                 var box = debug.selectAll('.debug-mouse')
99413                     .data(gj);
99414
99415                 // exit
99416                 box.exit()
99417                     .remove();
99418
99419                 // enter/update
99420                 box.enter()
99421                     .append('path')
99422                     .attr('class', 'debug debug-mouse yellow')
99423                     .merge(box)
99424                     .attr('d', d3_geoPath());
99425             }
99426
99427
99428             var throttleFilterLabels = throttle(filterLabels, 100);
99429
99430
99431             drawLabels.observe = function(selection) {
99432                 var listener = function() { throttleFilterLabels(selection); };
99433                 selection.on('mousemove.hidelabels', listener);
99434                 context.on('enter.hidelabels', listener);
99435             };
99436
99437
99438             drawLabels.off = function(selection) {
99439                 throttleFilterLabels.cancel();
99440                 selection.on('mousemove.hidelabels', null);
99441                 context.on('enter.hidelabels', null);
99442             };
99443
99444
99445             return drawLabels;
99446         }
99447
99448         var _improveOsmEnabled = false;
99449         var _errorService;
99450
99451
99452         function svgImproveOSM(projection, context, dispatch) {
99453             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
99454             var minZoom = 12;
99455             var touchLayer = d3_select(null);
99456             var drawLayer = d3_select(null);
99457             var _improveOsmVisible = false;
99458
99459             function markerPath(selection, klass) {
99460                 selection
99461                     .attr('class', klass)
99462                     .attr('transform', 'translate(-10, -28)')
99463                     .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');
99464             }
99465
99466
99467             // Loosely-coupled improveOSM service for fetching errors.
99468             function getService() {
99469                 if (services$1.improveOSM && !_errorService) {
99470                     _errorService = services$1.improveOSM;
99471                     _errorService.on('loaded', throttledRedraw);
99472                 } else if (!services$1.improveOSM && _errorService) {
99473                     _errorService = null;
99474                 }
99475
99476                 return _errorService;
99477             }
99478
99479
99480             // Show the errors
99481             function editOn() {
99482                 if (!_improveOsmVisible) {
99483                     _improveOsmVisible = true;
99484                     drawLayer
99485                         .style('display', 'block');
99486                 }
99487             }
99488
99489
99490             // Immediately remove the errors and their touch targets
99491             function editOff() {
99492                 if (_improveOsmVisible) {
99493                     _improveOsmVisible = false;
99494                     drawLayer
99495                         .style('display', 'none');
99496                     drawLayer.selectAll('.qa_error.improveOSM')
99497                         .remove();
99498                     touchLayer.selectAll('.qa_error.improveOSM')
99499                         .remove();
99500                 }
99501             }
99502
99503
99504             // Enable the layer.  This shows the errors and transitions them to visible.
99505             function layerOn() {
99506                 editOn();
99507
99508                 drawLayer
99509                     .style('opacity', 0)
99510                     .transition()
99511                     .duration(250)
99512                     .style('opacity', 1)
99513                     .on('end interrupt', function () {
99514                         dispatch.call('change');
99515                     });
99516             }
99517
99518
99519             // Disable the layer.  This transitions the layer invisible and then hides the errors.
99520             function layerOff() {
99521                 throttledRedraw.cancel();
99522                 drawLayer.interrupt();
99523                 touchLayer.selectAll('.qa_error.improveOSM')
99524                     .remove();
99525
99526                 drawLayer
99527                     .transition()
99528                     .duration(250)
99529                     .style('opacity', 0)
99530                     .on('end interrupt', function () {
99531                         editOff();
99532                         dispatch.call('change');
99533                     });
99534             }
99535
99536
99537             // Update the error markers
99538             function updateMarkers() {
99539                 if (!_improveOsmVisible || !_improveOsmEnabled) { return; }
99540
99541                 var service = getService();
99542                 var selectedID = context.selectedErrorID();
99543                 var data = (service ? service.getErrors(projection) : []);
99544                 var getTransform = svgPointTransform(projection);
99545
99546                 // Draw markers..
99547                 var markers = drawLayer.selectAll('.qa_error.improveOSM')
99548                     .data(data, function(d) { return d.id; });
99549
99550                 // exit
99551                 markers.exit()
99552                     .remove();
99553
99554                 // enter
99555                 var markersEnter = markers.enter()
99556                     .append('g')
99557                     .attr('class', function(d) {
99558                         return [
99559                             'qa_error',
99560                             d.service,
99561                             'error_id-' + d.id,
99562                             'error_type-' + d.error_type,
99563                             'category-' + d.category
99564                         ].join(' ');
99565                     });
99566
99567                 markersEnter
99568                     .append('polygon')
99569                     .call(markerPath, 'shadow');
99570
99571                 markersEnter
99572                     .append('ellipse')
99573                     .attr('cx', 0)
99574                     .attr('cy', 0)
99575                     .attr('rx', 4.5)
99576                     .attr('ry', 2)
99577                     .attr('class', 'stroke');
99578
99579                 markersEnter
99580                     .append('polygon')
99581                     .attr('fill', 'currentColor')
99582                     .call(markerPath, 'qa_error-fill');
99583
99584                 markersEnter
99585                     .append('use')
99586                     .attr('transform', 'translate(-5.5, -21)')
99587                     .attr('class', 'icon-annotation')
99588                     .attr('width', '11px')
99589                     .attr('height', '11px')
99590                     .attr('xlink:href', function(d) {
99591                         var picon = d.icon;
99592
99593                         if (!picon) {
99594                             return '';
99595                         } else {
99596                             var isMaki = /^maki-/.test(picon);
99597                             return '#' + picon + (isMaki ? '-11' : '');
99598                         }
99599                     });
99600
99601                 // update
99602                 markers
99603                     .merge(markersEnter)
99604                     .sort(sortY)
99605                     .classed('selected', function(d) { return d.id === selectedID; })
99606                     .attr('transform', getTransform);
99607
99608
99609                 // Draw targets..
99610                 if (touchLayer.empty()) { return; }
99611                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
99612
99613                 var targets = touchLayer.selectAll('.qa_error.improveOSM')
99614                     .data(data, function(d) { return d.id; });
99615
99616                 // exit
99617                 targets.exit()
99618                     .remove();
99619
99620                 // enter/update
99621                 targets.enter()
99622                     .append('rect')
99623                     .attr('width', '20px')
99624                     .attr('height', '30px')
99625                     .attr('x', '-10px')
99626                     .attr('y', '-28px')
99627                     .merge(targets)
99628                     .sort(sortY)
99629                     .attr('class', function(d) {
99630                         return 'qa_error ' + d.service + ' target error_id-' + d.id + ' ' + fillClass;
99631                     })
99632                     .attr('transform', getTransform);
99633
99634
99635                 function sortY(a, b) {
99636                     return (a.id === selectedID) ? 1
99637                         : (b.id === selectedID) ? -1
99638                         : b.loc[1] - a.loc[1];
99639                 }
99640             }
99641
99642
99643             // Draw the ImproveOSM layer and schedule loading errors and updating markers.
99644             function drawImproveOSM(selection) {
99645                 var service = getService();
99646
99647                 var surface = context.surface();
99648                 if (surface && !surface.empty()) {
99649                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
99650                 }
99651
99652                 drawLayer = selection.selectAll('.layer-improveOSM')
99653                     .data(service ? [0] : []);
99654
99655                 drawLayer.exit()
99656                     .remove();
99657
99658                 drawLayer = drawLayer.enter()
99659                     .append('g')
99660                     .attr('class', 'layer-improveOSM')
99661                     .style('display', _improveOsmEnabled ? 'block' : 'none')
99662                     .merge(drawLayer);
99663
99664                 if (_improveOsmEnabled) {
99665                     if (service && ~~context.map().zoom() >= minZoom) {
99666                         editOn();
99667                         service.loadErrors(projection);
99668                         updateMarkers();
99669                     } else {
99670                         editOff();
99671                     }
99672                 }
99673             }
99674
99675
99676             // Toggles the layer on and off
99677             drawImproveOSM.enabled = function(val) {
99678                 if (!arguments.length) { return _improveOsmEnabled; }
99679
99680                 _improveOsmEnabled = val;
99681                 if (_improveOsmEnabled) {
99682                     layerOn();
99683                 } else {
99684                     layerOff();
99685                     if (context.selectedErrorID()) {
99686                         context.enter(modeBrowse(context));
99687                     }
99688                 }
99689
99690                 dispatch.call('change');
99691                 return this;
99692             };
99693
99694
99695             drawImproveOSM.supported = function() {
99696                 return !!getService();
99697             };
99698
99699
99700             return drawImproveOSM;
99701         }
99702
99703         function svgStreetside(projection, context, dispatch) {
99704             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
99705             var minZoom = 14;
99706             var minMarkerZoom = 16;
99707             var minViewfieldZoom = 18;
99708             var layer = d3_select(null);
99709             var _viewerYaw = 0;
99710             var _selectedSequence = null;
99711             var _streetside;
99712
99713             /**
99714              * init().
99715              */
99716             function init() {
99717                 if (svgStreetside.initialized) { return; }  // run once
99718                 svgStreetside.enabled = false;
99719                 svgStreetside.initialized = true;
99720             }
99721
99722             /**
99723              * getService().
99724              */
99725             function getService() {
99726                 if (services$1.streetside && !_streetside) {
99727                     _streetside = services$1.streetside;
99728                     _streetside.event
99729                         .on('viewerChanged', viewerChanged)
99730                         .on('loadedBubbles', throttledRedraw);
99731                 } else if (!services$1.streetside && _streetside) {
99732                     _streetside = null;
99733                 }
99734
99735                 return _streetside;
99736             }
99737
99738             /**
99739              * showLayer().
99740              */
99741             function showLayer() {
99742                 var service = getService();
99743                 if (!service) { return; }
99744
99745                 editOn();
99746
99747                 layer
99748                     .style('opacity', 0)
99749                     .transition()
99750                     .duration(250)
99751                     .style('opacity', 1)
99752                     .on('end', function () { dispatch.call('change'); });
99753             }
99754
99755             /**
99756              * hideLayer().
99757              */
99758             function hideLayer() {
99759                 throttledRedraw.cancel();
99760
99761                 layer
99762                     .transition()
99763                     .duration(250)
99764                     .style('opacity', 0)
99765                     .on('end', editOff);
99766             }
99767
99768             /**
99769              * editOn().
99770              */
99771             function editOn() {
99772                 layer.style('display', 'block');
99773             }
99774
99775             /**
99776              * editOff().
99777              */
99778             function editOff() {
99779                 layer.selectAll('.viewfield-group').remove();
99780                 layer.style('display', 'none');
99781             }
99782
99783             /**
99784              * click() Handles 'bubble' point click event.
99785              */
99786             function click(d) {
99787                 var service = getService();
99788                 if (!service) { return; }
99789
99790                 // try to preserve the viewer rotation when staying on the same sequence
99791                 if (d.sequenceKey !== _selectedSequence) {
99792                     _viewerYaw = 0;  // reset
99793                 }
99794                 _selectedSequence = d.sequenceKey;
99795
99796                 service
99797                     .selectImage(d)
99798                     .then(function (response) {
99799                         if (response.status === 'ok'){
99800                             service.showViewer(_viewerYaw);
99801                         }
99802                     });
99803
99804
99805                 context.map().centerEase(d.loc);
99806             }
99807
99808             /**
99809              * mouseover().
99810              */
99811             function mouseover(d) {
99812                 var service = getService();
99813                 if (service) { service.setStyles(d); }
99814             }
99815
99816             /**
99817              * mouseout().
99818              */
99819             function mouseout() {
99820                 var service = getService();
99821                 if (service) { service.setStyles(null); }
99822             }
99823
99824             /**
99825              * transform().
99826              */
99827             function transform(d) {
99828                 var t = svgPointTransform(projection)(d);
99829                 var rot = d.ca + _viewerYaw;
99830                 if (rot) {
99831                     t += ' rotate(' + Math.floor(rot) + ',0,0)';
99832                 }
99833                 return t;
99834             }
99835
99836
99837             function viewerChanged() {
99838                 var service = getService();
99839                 if (!service) { return; }
99840
99841                 var viewer = service.viewer();
99842                 if (!viewer) { return; }
99843
99844                 // update viewfield rotation
99845                 _viewerYaw = viewer.getYaw();
99846
99847                 // avoid updating if the map is currently transformed
99848                 // e.g. during drags or easing.
99849                 if (context.map().isTransformed()) { return; }
99850
99851                 layer.selectAll('.viewfield-group.currentView')
99852                     .attr('transform', transform);
99853             }
99854
99855
99856             context.photos().on('change.streetside', update);
99857
99858             /**
99859              * update().
99860              */
99861             function update() {
99862                 var viewer = d3_select('#photoviewer');
99863                 var selected = viewer.empty() ? undefined : viewer.datum();
99864                 var z = ~~context.map().zoom();
99865                 var showMarkers = (z >= minMarkerZoom);
99866                 var showViewfields = (z >= minViewfieldZoom);
99867                 var service = getService();
99868
99869                 var sequences = [];
99870                 var bubbles = [];
99871
99872                 if (context.photos().showsPanoramic()) {
99873                     sequences = (service ? service.sequences(projection) : []);
99874                     bubbles = (service && showMarkers ? service.bubbles(projection) : []);
99875                 }
99876
99877                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
99878                     .data(sequences, function(d) { return d.properties.key; });
99879
99880                 // exit
99881                 traces.exit()
99882                     .remove();
99883
99884                 // enter/update
99885                 traces = traces.enter()
99886                     .append('path')
99887                     .attr('class', 'sequence')
99888                     .merge(traces)
99889                     .attr('d', svgPath(projection).geojson);
99890
99891
99892                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
99893                     .data(bubbles, function(d) {
99894                         // force reenter once bubbles are attached to a sequence
99895                         return d.key + (d.sequenceKey ? 'v1' : 'v0');
99896                     });
99897
99898                 // exit
99899                 groups.exit()
99900                     .remove();
99901
99902                 // enter
99903                 var groupsEnter = groups.enter()
99904                     .append('g')
99905                     .attr('class', 'viewfield-group')
99906                     .on('mouseenter', mouseover)
99907                     .on('mouseleave', mouseout)
99908                     .on('click', click);
99909
99910                 groupsEnter
99911                     .append('g')
99912                     .attr('class', 'viewfield-scale');
99913
99914                 // update
99915                 var markers = groups
99916                     .merge(groupsEnter)
99917                     .sort(function(a, b) {
99918                         return (a === selected) ? 1
99919                             : (b === selected) ? -1
99920                             : b.loc[1] - a.loc[1];
99921                     })
99922                     .attr('transform', transform)
99923                     .select('.viewfield-scale');
99924
99925
99926                 markers.selectAll('circle')
99927                     .data([0])
99928                     .enter()
99929                     .append('circle')
99930                     .attr('dx', '0')
99931                     .attr('dy', '0')
99932                     .attr('r', '6');
99933
99934                 var viewfields = markers.selectAll('.viewfield')
99935                     .data(showViewfields ? [0] : []);
99936
99937                 viewfields.exit()
99938                     .remove();
99939
99940                 // viewfields may or may not be drawn...
99941                 // but if they are, draw below the circles
99942                 viewfields.enter()
99943                     .insert('path', 'circle')
99944                     .attr('class', 'viewfield')
99945                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
99946                     .attr('d', viewfieldPath);
99947
99948                 function viewfieldPath() {
99949                     var d = this.parentNode.__data__;
99950                     if (d.pano) {
99951                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
99952                     } else {
99953                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
99954                     }
99955                 }
99956
99957             }
99958
99959             /**
99960              * drawImages()
99961              * drawImages is the method that is returned (and that runs) everytime 'svgStreetside()' is called.
99962              * 'svgStreetside()' is called from index.js
99963              */
99964             function drawImages(selection) {
99965                 var enabled = svgStreetside.enabled;
99966                 var service = getService();
99967
99968                 layer = selection.selectAll('.layer-streetside-images')
99969                     .data(service ? [0] : []);
99970
99971                 layer.exit()
99972                     .remove();
99973
99974                 var layerEnter = layer.enter()
99975                     .append('g')
99976                     .attr('class', 'layer-streetside-images')
99977                     .style('display', enabled ? 'block' : 'none');
99978
99979                 layerEnter
99980                     .append('g')
99981                     .attr('class', 'sequences');
99982
99983                 layerEnter
99984                     .append('g')
99985                     .attr('class', 'markers');
99986
99987                 layer = layerEnter
99988                     .merge(layer);
99989
99990                 if (enabled) {
99991                     if (service && ~~context.map().zoom() >= minZoom) {
99992                         editOn();
99993                         update();
99994                         service.loadBubbles(projection);
99995                     } else {
99996                         editOff();
99997                     }
99998                 }
99999             }
100000
100001
100002             /**
100003              * drawImages.enabled().
100004              */
100005             drawImages.enabled = function(_) {
100006                 if (!arguments.length) { return svgStreetside.enabled; }
100007                 svgStreetside.enabled = _;
100008                 if (svgStreetside.enabled) {
100009                     showLayer();
100010                 } else {
100011                     hideLayer();
100012                 }
100013                 dispatch.call('change');
100014                 return this;
100015             };
100016
100017             /**
100018              * drawImages.supported().
100019              */
100020             drawImages.supported = function() {
100021                 return !!getService();
100022             };
100023
100024             init();
100025
100026             return drawImages;
100027         }
100028
100029         function svgMapillaryImages(projection, context, dispatch) {
100030             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
100031             var minZoom = 12;
100032             var minMarkerZoom = 16;
100033             var minViewfieldZoom = 18;
100034             var layer = d3_select(null);
100035             var _mapillary;
100036             var viewerCompassAngle;
100037
100038
100039             function init() {
100040                 if (svgMapillaryImages.initialized) { return; }  // run once
100041                 svgMapillaryImages.enabled = false;
100042                 svgMapillaryImages.initialized = true;
100043             }
100044
100045
100046             function getService() {
100047                 if (services$1.mapillary && !_mapillary) {
100048                     _mapillary = services$1.mapillary;
100049                     _mapillary.event.on('loadedImages', throttledRedraw);
100050                     _mapillary.event.on('bearingChanged', function(e) {
100051                         viewerCompassAngle = e;
100052
100053                         // avoid updating if the map is currently transformed
100054                         // e.g. during drags or easing.
100055                         if (context.map().isTransformed()) { return; }
100056
100057                         layer.selectAll('.viewfield-group.currentView')
100058                             .filter(function(d) {
100059                                 return d.pano;
100060                             })
100061                             .attr('transform', transform);
100062                     });
100063                 } else if (!services$1.mapillary && _mapillary) {
100064                     _mapillary = null;
100065                 }
100066
100067                 return _mapillary;
100068             }
100069
100070
100071             function showLayer() {
100072                 var service = getService();
100073                 if (!service) { return; }
100074
100075                 editOn();
100076
100077                 layer
100078                     .style('opacity', 0)
100079                     .transition()
100080                     .duration(250)
100081                     .style('opacity', 1)
100082                     .on('end', function () { dispatch.call('change'); });
100083             }
100084
100085
100086             function hideLayer() {
100087                 throttledRedraw.cancel();
100088
100089                 layer
100090                     .transition()
100091                     .duration(250)
100092                     .style('opacity', 0)
100093                     .on('end', editOff);
100094             }
100095
100096
100097             function editOn() {
100098                 layer.style('display', 'block');
100099             }
100100
100101
100102             function editOff() {
100103                 layer.selectAll('.viewfield-group').remove();
100104                 layer.style('display', 'none');
100105             }
100106
100107
100108             function click(d) {
100109                 var service = getService();
100110                 if (!service) { return; }
100111
100112                 service
100113                     .selectImage(d.key)
100114                     .updateViewer(d.key, context)
100115                     .showViewer();
100116
100117                 context.map().centerEase(d.loc);
100118             }
100119
100120
100121             function mouseover(d) {
100122                 var service = getService();
100123                 if (service) { service.setStyles(d); }
100124             }
100125
100126
100127             function mouseout() {
100128                 var service = getService();
100129                 if (service) { service.setStyles(null); }
100130             }
100131
100132
100133             function transform(d) {
100134                 var t = svgPointTransform(projection)(d);
100135                 if (d.pano && viewerCompassAngle !== null && isFinite(viewerCompassAngle)) {
100136                     t += ' rotate(' + Math.floor(viewerCompassAngle) + ',0,0)';
100137                 } else if (d.ca) {
100138                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
100139                 }
100140                 return t;
100141             }
100142
100143             context.photos().on('change.mapillary_images', update);
100144
100145             function filterImages(images) {
100146                 var showsPano = context.photos().showsPanoramic();
100147                 var showsFlat = context.photos().showsFlat();
100148                 if (!showsPano || !showsFlat) {
100149                     images = images.filter(function(image) {
100150                         if (image.pano) { return showsPano; }
100151                         return showsFlat;
100152                     });
100153                 }
100154                 return images;
100155             }
100156
100157             function filterSequences(sequences, service) {
100158                 var showsPano = context.photos().showsPanoramic();
100159                 var showsFlat = context.photos().showsFlat();
100160                 if (!showsPano || !showsFlat) {
100161                     sequences = sequences.filter(function(sequence) {
100162                         if (sequence.properties.hasOwnProperty('pano')) {
100163                             if (sequence.properties.pano) { return showsPano; }
100164                             return showsFlat;
100165                         } else {
100166                             // if the sequence doesn't specify pano or not, search its images
100167                             var cProps = sequence.properties.coordinateProperties;
100168                             if (cProps && cProps.image_keys && cProps.image_keys.length > 0) {
100169                                 for (var index in cProps.image_keys) {
100170                                     var imageKey = cProps.image_keys[index];
100171                                     var image = service.cachedImage(imageKey);
100172                                     if (image && image.hasOwnProperty('pano')) {
100173                                         if (image.pano) { return showsPano; }
100174                                         return showsFlat;
100175                                     }
100176                                 }
100177                             }
100178                         }
100179                     });
100180                 }
100181                 return sequences;
100182             }
100183
100184             function update() {
100185
100186                 var z = ~~context.map().zoom();
100187                 var showMarkers = (z >= minMarkerZoom);
100188                 var showViewfields = (z >= minViewfieldZoom);
100189
100190                 var service = getService();
100191                 var selectedKey = service && service.getSelectedImageKey();
100192                 var sequences = (service ? service.sequences(projection) : []);
100193                 var images = (service && showMarkers ? service.images(projection) : []);
100194
100195                 images = filterImages(images);
100196                 sequences = filterSequences(sequences, service);
100197
100198                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
100199                     .data(sequences, function(d) { return d.properties.key; });
100200
100201                 // exit
100202                 traces.exit()
100203                     .remove();
100204
100205                 // enter/update
100206                 traces = traces.enter()
100207                     .append('path')
100208                     .attr('class', 'sequence')
100209                     .merge(traces)
100210                     .attr('d', svgPath(projection).geojson);
100211
100212
100213                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
100214                     .data(images, function(d) { return d.key; });
100215
100216                 // exit
100217                 groups.exit()
100218                     .remove();
100219
100220                 // enter
100221                 var groupsEnter = groups.enter()
100222                     .append('g')
100223                     .attr('class', 'viewfield-group')
100224                     .on('mouseenter', mouseover)
100225                     .on('mouseleave', mouseout)
100226                     .on('click', click);
100227
100228                 groupsEnter
100229                     .append('g')
100230                     .attr('class', 'viewfield-scale');
100231
100232                 // update
100233                 var markers = groups
100234                     .merge(groupsEnter)
100235                     .sort(function(a, b) {
100236                         return (a.key === selectedKey) ? 1
100237                             : (b.key === selectedKey) ? -1
100238                             : b.loc[1] - a.loc[1];  // sort Y
100239                     })
100240                     .attr('transform', transform)
100241                     .select('.viewfield-scale');
100242
100243
100244                 markers.selectAll('circle')
100245                     .data([0])
100246                     .enter()
100247                     .append('circle')
100248                     .attr('dx', '0')
100249                     .attr('dy', '0')
100250                     .attr('r', '6');
100251
100252                 var viewfields = markers.selectAll('.viewfield')
100253                     .data(showViewfields ? [0] : []);
100254
100255                 viewfields.exit()
100256                     .remove();
100257
100258                 viewfields.enter()               // viewfields may or may not be drawn...
100259                     .insert('path', 'circle')    // but if they are, draw below the circles
100260                     .attr('class', 'viewfield')
100261                     .classed('pano', function() { return this.parentNode.__data__.pano; })
100262                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
100263                     .attr('d', viewfieldPath);
100264
100265                 function viewfieldPath() {
100266                     var d = this.parentNode.__data__;
100267                     if (d.pano) {
100268                         return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
100269                     } else {
100270                         return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
100271                     }
100272                 }
100273             }
100274
100275
100276             function drawImages(selection) {
100277                 var enabled = svgMapillaryImages.enabled;
100278                 var service = getService();
100279
100280                 layer = selection.selectAll('.layer-mapillary')
100281                     .data(service ? [0] : []);
100282
100283                 layer.exit()
100284                     .remove();
100285
100286                 var layerEnter = layer.enter()
100287                     .append('g')
100288                     .attr('class', 'layer-mapillary')
100289                     .style('display', enabled ? 'block' : 'none');
100290
100291                 layerEnter
100292                     .append('g')
100293                     .attr('class', 'sequences');
100294
100295                 layerEnter
100296                     .append('g')
100297                     .attr('class', 'markers');
100298
100299                 layer = layerEnter
100300                     .merge(layer);
100301
100302                 if (enabled) {
100303                     if (service && ~~context.map().zoom() >= minZoom) {
100304                         editOn();
100305                         update();
100306                         service.loadImages(projection);
100307                     } else {
100308                         editOff();
100309                     }
100310                 }
100311             }
100312
100313
100314             drawImages.enabled = function(_) {
100315                 if (!arguments.length) { return svgMapillaryImages.enabled; }
100316                 svgMapillaryImages.enabled = _;
100317                 if (svgMapillaryImages.enabled) {
100318                     showLayer();
100319                 } else {
100320                     hideLayer();
100321                 }
100322                 dispatch.call('change');
100323                 return this;
100324             };
100325
100326
100327             drawImages.supported = function() {
100328                 return !!getService();
100329             };
100330
100331
100332             init();
100333             return drawImages;
100334         }
100335
100336         function svgMapillarySigns(projection, context, dispatch) {
100337             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
100338             var minZoom = 12;
100339             var layer = d3_select(null);
100340             var _mapillary;
100341
100342
100343             function init() {
100344                 if (svgMapillarySigns.initialized) { return; }  // run once
100345                 svgMapillarySigns.enabled = false;
100346                 svgMapillarySigns.initialized = true;
100347             }
100348
100349
100350             function getService() {
100351                 if (services$1.mapillary && !_mapillary) {
100352                     _mapillary = services$1.mapillary;
100353                     _mapillary.event.on('loadedSigns', throttledRedraw);
100354                 } else if (!services$1.mapillary && _mapillary) {
100355                     _mapillary = null;
100356                 }
100357                 return _mapillary;
100358             }
100359
100360
100361             function showLayer() {
100362                 var service = getService();
100363                 if (!service) { return; }
100364
100365                 editOn();
100366             }
100367
100368
100369             function hideLayer() {
100370                 throttledRedraw.cancel();
100371                 editOff();
100372             }
100373
100374
100375             function editOn() {
100376                 layer.style('display', 'block');
100377             }
100378
100379
100380             function editOff() {
100381                 layer.selectAll('.icon-sign').remove();
100382                 layer.style('display', 'none');
100383             }
100384
100385
100386             function click(d) {
100387                 var service = getService();
100388                 if (!service) { return; }
100389
100390                 context.map().centerEase(d.loc);
100391
100392                 var selectedImageKey = service.getSelectedImageKey();
100393                 var imageKey;
100394
100395                 // Pick one of the images the sign was detected in,
100396                 // preference given to an image already selected.
100397                 d.detections.forEach(function(detection) {
100398                     if (!imageKey || selectedImageKey === detection.image_key) {
100399                         imageKey = detection.image_key;
100400                     }
100401                 });
100402
100403                 service
100404                     .selectImage(imageKey)
100405                     .updateViewer(imageKey, context)
100406                     .showViewer();
100407             }
100408
100409
100410             function update() {
100411                 var service = getService();
100412                 var data = (service ? service.signs(projection) : []);
100413                 var selectedImageKey = service.getSelectedImageKey();
100414                 var transform = svgPointTransform(projection);
100415
100416                 var signs = layer.selectAll('.icon-sign')
100417                     .data(data, function(d) { return d.key; });
100418
100419                 // exit
100420                 signs.exit()
100421                     .remove();
100422
100423                 // enter
100424                 var enter = signs.enter()
100425                     .append('g')
100426                     .attr('class', 'icon-sign icon-detected')
100427                     .on('click', click);
100428
100429                 enter
100430                     .append('use')
100431                     .attr('width', '24px')
100432                     .attr('height', '24px')
100433                     .attr('x', '-12px')
100434                     .attr('y', '-12px')
100435                     .attr('xlink:href', function(d) { return '#' + d.value; });
100436
100437                 enter
100438                     .append('rect')
100439                     .attr('width', '24px')
100440                     .attr('height', '24px')
100441                     .attr('x', '-12px')
100442                     .attr('y', '-12px');
100443
100444                 // update
100445                 signs
100446                     .merge(enter)
100447                     .attr('transform', transform)
100448                     .classed('currentView', function(d) {
100449                         return d.detections.some(function(detection) {
100450                             return detection.image_key === selectedImageKey;
100451                         });
100452                     })
100453                     .sort(function(a, b) {
100454                         var aSelected = a.detections.some(function(detection) {
100455                             return detection.image_key === selectedImageKey;
100456                         });
100457                         var bSelected = b.detections.some(function(detection) {
100458                             return detection.image_key === selectedImageKey;
100459                         });
100460                         if (aSelected === bSelected) {
100461                             return b.loc[1] - a.loc[1]; // sort Y
100462                         } else if (aSelected) {
100463                             return 1;
100464                         }
100465                         return -1;
100466                     });
100467             }
100468
100469
100470             function drawSigns(selection) {
100471                 var enabled = svgMapillarySigns.enabled;
100472                 var service = getService();
100473
100474                 layer = selection.selectAll('.layer-mapillary-signs')
100475                     .data(service ? [0] : []);
100476
100477                 layer.exit()
100478                     .remove();
100479
100480                 layer = layer.enter()
100481                     .append('g')
100482                     .attr('class', 'layer-mapillary-signs layer-mapillary-detections')
100483                     .style('display', enabled ? 'block' : 'none')
100484                     .merge(layer);
100485
100486                 if (enabled) {
100487                     if (service && ~~context.map().zoom() >= minZoom) {
100488                         editOn();
100489                         update();
100490                         service.loadSigns(projection);
100491                     } else {
100492                         editOff();
100493                     }
100494                 }
100495             }
100496
100497
100498             drawSigns.enabled = function(_) {
100499                 if (!arguments.length) { return svgMapillarySigns.enabled; }
100500                 svgMapillarySigns.enabled = _;
100501                 if (svgMapillarySigns.enabled) {
100502                     showLayer();
100503                 } else {
100504                     hideLayer();
100505                 }
100506                 dispatch.call('change');
100507                 return this;
100508             };
100509
100510
100511             drawSigns.supported = function() {
100512                 return !!getService();
100513             };
100514
100515
100516             init();
100517             return drawSigns;
100518         }
100519
100520         function svgMapillaryMapFeatures(projection, context, dispatch) {
100521             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
100522             var minZoom = 12;
100523             var layer = d3_select(null);
100524             var _mapillary;
100525
100526
100527             function init() {
100528                 if (svgMapillaryMapFeatures.initialized) { return; }  // run once
100529                 svgMapillaryMapFeatures.enabled = false;
100530                 svgMapillaryMapFeatures.initialized = true;
100531             }
100532
100533
100534             function getService() {
100535                 if (services$1.mapillary && !_mapillary) {
100536                     _mapillary = services$1.mapillary;
100537                     _mapillary.event.on('loadedMapFeatures', throttledRedraw);
100538                 } else if (!services$1.mapillary && _mapillary) {
100539                     _mapillary = null;
100540                 }
100541                 return _mapillary;
100542             }
100543
100544
100545             function showLayer() {
100546                 var service = getService();
100547                 if (!service) { return; }
100548
100549                 editOn();
100550             }
100551
100552
100553             function hideLayer() {
100554                 throttledRedraw.cancel();
100555                 editOff();
100556             }
100557
100558
100559             function editOn() {
100560                 layer.style('display', 'block');
100561             }
100562
100563
100564             function editOff() {
100565                 layer.selectAll('.icon-map-feature').remove();
100566                 layer.style('display', 'none');
100567             }
100568
100569
100570             function click(d) {
100571                 var service = getService();
100572                 if (!service) { return; }
100573
100574                 context.map().centerEase(d.loc);
100575
100576                 var selectedImageKey = service.getSelectedImageKey();
100577                 var imageKey;
100578
100579                 // Pick one of the images the map feature was detected in,
100580                 // preference given to an image already selected.
100581                 d.detections.forEach(function(detection) {
100582                     if (!imageKey || selectedImageKey === detection.image_key) {
100583                         imageKey = detection.image_key;
100584                     }
100585                 });
100586
100587                 service
100588                     .selectImage(imageKey)
100589                     .updateViewer(imageKey, context)
100590                     .showViewer();
100591             }
100592
100593
100594             function update() {
100595                 var service = getService();
100596                 var data = (service ? service.mapFeatures(projection) : []);
100597                 var selectedImageKey = service && service.getSelectedImageKey();
100598                 var transform = svgPointTransform(projection);
100599
100600                 var mapFeatures = layer.selectAll('.icon-map-feature')
100601                     .data(data, function(d) { return d.key; });
100602
100603                 // exit
100604                 mapFeatures.exit()
100605                     .remove();
100606
100607                 // enter
100608                 var enter = mapFeatures.enter()
100609                     .append('g')
100610                     .attr('class', 'icon-map-feature icon-detected')
100611                     .on('click', click);
100612
100613                 enter
100614                     .append('title')
100615                     .text(function(d) {
100616                         var id = d.value.replace(/--/g, '.').replace(/-/g, '_');
100617                         return t('mapillary_map_features.' + id);
100618                     });
100619
100620                 enter
100621                     .append('use')
100622                     .attr('width', '24px')
100623                     .attr('height', '24px')
100624                     .attr('x', '-12px')
100625                     .attr('y', '-12px')
100626                     .attr('xlink:href', function(d) {
100627                         if (d.value === 'object--billboard') {
100628                             // no billboard icon right now, so use the advertisement icon
100629                             return '#object--sign--advertisement';
100630                         }
100631                         return '#' + d.value;
100632                     });
100633
100634                 enter
100635                     .append('rect')
100636                     .attr('width', '24px')
100637                     .attr('height', '24px')
100638                     .attr('x', '-12px')
100639                     .attr('y', '-12px');
100640
100641                 // update
100642                 mapFeatures
100643                     .merge(enter)
100644                     .attr('transform', transform)
100645                     .classed('currentView', function(d) {
100646                         return d.detections.some(function(detection) {
100647                             return detection.image_key === selectedImageKey;
100648                         });
100649                     })
100650                     .sort(function(a, b) {
100651                         var aSelected = a.detections.some(function(detection) {
100652                             return detection.image_key === selectedImageKey;
100653                         });
100654                         var bSelected = b.detections.some(function(detection) {
100655                             return detection.image_key === selectedImageKey;
100656                         });
100657                         if (aSelected === bSelected) {
100658                             return b.loc[1] - a.loc[1]; // sort Y
100659                         } else if (aSelected) {
100660                             return 1;
100661                         }
100662                         return -1;
100663                     });
100664             }
100665
100666
100667             function drawMapFeatures(selection) {
100668                 var enabled = svgMapillaryMapFeatures.enabled;
100669                 var service = getService();
100670
100671                 layer = selection.selectAll('.layer-mapillary-map-features')
100672                     .data(service ? [0] : []);
100673
100674                 layer.exit()
100675                     .remove();
100676
100677                 layer = layer.enter()
100678                     .append('g')
100679                     .attr('class', 'layer-mapillary-map-features layer-mapillary-detections')
100680                     .style('display', enabled ? 'block' : 'none')
100681                     .merge(layer);
100682
100683                 if (enabled) {
100684                     if (service && ~~context.map().zoom() >= minZoom) {
100685                         editOn();
100686                         update();
100687                         service.loadMapFeatures(projection);
100688                     } else {
100689                         editOff();
100690                     }
100691                 }
100692             }
100693
100694
100695             drawMapFeatures.enabled = function(_) {
100696                 if (!arguments.length) { return svgMapillaryMapFeatures.enabled; }
100697                 svgMapillaryMapFeatures.enabled = _;
100698                 if (svgMapillaryMapFeatures.enabled) {
100699                     showLayer();
100700                 } else {
100701                     hideLayer();
100702                 }
100703                 dispatch.call('change');
100704                 return this;
100705             };
100706
100707
100708             drawMapFeatures.supported = function() {
100709                 return !!getService();
100710             };
100711
100712
100713             init();
100714             return drawMapFeatures;
100715         }
100716
100717         function svgOpenstreetcamImages(projection, context, dispatch) {
100718             var throttledRedraw = throttle(function () { dispatch.call('change'); }, 1000);
100719             var minZoom = 12;
100720             var minMarkerZoom = 16;
100721             var minViewfieldZoom = 18;
100722             var layer = d3_select(null);
100723             var _openstreetcam;
100724
100725
100726             function init() {
100727                 if (svgOpenstreetcamImages.initialized) { return; }  // run once
100728                 svgOpenstreetcamImages.enabled = false;
100729                 svgOpenstreetcamImages.initialized = true;
100730             }
100731
100732
100733             function getService() {
100734                 if (services$1.openstreetcam && !_openstreetcam) {
100735                     _openstreetcam = services$1.openstreetcam;
100736                     _openstreetcam.event.on('loadedImages', throttledRedraw);
100737                 } else if (!services$1.openstreetcam && _openstreetcam) {
100738                     _openstreetcam = null;
100739                 }
100740
100741                 return _openstreetcam;
100742             }
100743
100744
100745             function showLayer() {
100746                 var service = getService();
100747                 if (!service) { return; }
100748
100749                 editOn();
100750
100751                 layer
100752                     .style('opacity', 0)
100753                     .transition()
100754                     .duration(250)
100755                     .style('opacity', 1)
100756                     .on('end', function () { dispatch.call('change'); });
100757             }
100758
100759
100760             function hideLayer() {
100761                 throttledRedraw.cancel();
100762
100763                 layer
100764                     .transition()
100765                     .duration(250)
100766                     .style('opacity', 0)
100767                     .on('end', editOff);
100768             }
100769
100770
100771             function editOn() {
100772                 layer.style('display', 'block');
100773             }
100774
100775
100776             function editOff() {
100777                 layer.selectAll('.viewfield-group').remove();
100778                 layer.style('display', 'none');
100779             }
100780
100781
100782             function click(d) {
100783                 var service = getService();
100784                 if (!service) { return; }
100785
100786                 service
100787                     .selectImage(d)
100788                     .updateViewer(d)
100789                     .showViewer();
100790
100791                 context.map().centerEase(d.loc);
100792             }
100793
100794
100795             function mouseover(d) {
100796                 var service = getService();
100797                 if (service) { service.setStyles(d); }
100798             }
100799
100800
100801             function mouseout() {
100802                 var service = getService();
100803                 if (service) { service.setStyles(null); }
100804             }
100805
100806
100807             function transform(d) {
100808                 var t = svgPointTransform(projection)(d);
100809                 if (d.ca) {
100810                     t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
100811                 }
100812                 return t;
100813             }
100814
100815
100816             context.photos().on('change.openstreetcam_images', update);
100817
100818             function update() {
100819                 var viewer = d3_select('#photoviewer');
100820                 var selected = viewer.empty() ? undefined : viewer.datum();
100821
100822                 var z = ~~context.map().zoom();
100823                 var showMarkers = (z >= minMarkerZoom);
100824                 var showViewfields = (z >= minViewfieldZoom);
100825
100826                 var service = getService();
100827                 var sequences = [];
100828                 var images = [];
100829
100830                 if (context.photos().showsFlat()) {
100831                     sequences = (service ? service.sequences(projection) : []);
100832                     images = (service && showMarkers ? service.images(projection) : []);
100833                 }
100834
100835                 var traces = layer.selectAll('.sequences').selectAll('.sequence')
100836                     .data(sequences, function(d) { return d.properties.key; });
100837
100838                 // exit
100839                 traces.exit()
100840                     .remove();
100841
100842                 // enter/update
100843                 traces = traces.enter()
100844                     .append('path')
100845                     .attr('class', 'sequence')
100846                     .merge(traces)
100847                     .attr('d', svgPath(projection).geojson);
100848
100849
100850                 var groups = layer.selectAll('.markers').selectAll('.viewfield-group')
100851                     .data(images, function(d) { return d.key; });
100852
100853                 // exit
100854                 groups.exit()
100855                     .remove();
100856
100857                 // enter
100858                 var groupsEnter = groups.enter()
100859                     .append('g')
100860                     .attr('class', 'viewfield-group')
100861                     .on('mouseenter', mouseover)
100862                     .on('mouseleave', mouseout)
100863                     .on('click', click);
100864
100865                 groupsEnter
100866                     .append('g')
100867                     .attr('class', 'viewfield-scale');
100868
100869                 // update
100870                 var markers = groups
100871                     .merge(groupsEnter)
100872                     .sort(function(a, b) {
100873                         return (a === selected) ? 1
100874                             : (b === selected) ? -1
100875                             : b.loc[1] - a.loc[1];  // sort Y
100876                     })
100877                     .attr('transform', transform)
100878                     .select('.viewfield-scale');
100879
100880
100881                 markers.selectAll('circle')
100882                     .data([0])
100883                     .enter()
100884                     .append('circle')
100885                     .attr('dx', '0')
100886                     .attr('dy', '0')
100887                     .attr('r', '6');
100888
100889                 var viewfields = markers.selectAll('.viewfield')
100890                     .data(showViewfields ? [0] : []);
100891
100892                 viewfields.exit()
100893                     .remove();
100894
100895                 viewfields.enter()               // viewfields may or may not be drawn...
100896                     .insert('path', 'circle')    // but if they are, draw below the circles
100897                     .attr('class', 'viewfield')
100898                     .attr('transform', 'scale(1.5,1.5),translate(-8, -13)')
100899                     .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');
100900             }
100901
100902
100903             function drawImages(selection) {
100904                 var enabled = svgOpenstreetcamImages.enabled,
100905                     service = getService();
100906
100907                 layer = selection.selectAll('.layer-openstreetcam')
100908                     .data(service ? [0] : []);
100909
100910                 layer.exit()
100911                     .remove();
100912
100913                 var layerEnter = layer.enter()
100914                     .append('g')
100915                     .attr('class', 'layer-openstreetcam')
100916                     .style('display', enabled ? 'block' : 'none');
100917
100918                 layerEnter
100919                     .append('g')
100920                     .attr('class', 'sequences');
100921
100922                 layerEnter
100923                     .append('g')
100924                     .attr('class', 'markers');
100925
100926                 layer = layerEnter
100927                     .merge(layer);
100928
100929                 if (enabled) {
100930                     if (service && ~~context.map().zoom() >= minZoom) {
100931                         editOn();
100932                         update();
100933                         service.loadImages(projection);
100934                     } else {
100935                         editOff();
100936                     }
100937                 }
100938             }
100939
100940
100941             drawImages.enabled = function(_) {
100942                 if (!arguments.length) { return svgOpenstreetcamImages.enabled; }
100943                 svgOpenstreetcamImages.enabled = _;
100944                 if (svgOpenstreetcamImages.enabled) {
100945                     showLayer();
100946                 } else {
100947                     hideLayer();
100948                 }
100949                 dispatch.call('change');
100950                 return this;
100951             };
100952
100953
100954             drawImages.supported = function() {
100955                 return !!getService();
100956             };
100957
100958
100959             init();
100960             return drawImages;
100961         }
100962
100963         function svgOsm(projection, context, dispatch) {
100964             var enabled = true;
100965
100966
100967             function drawOsm(selection) {
100968                 selection.selectAll('.layer-osm')
100969                     .data(['covered', 'areas', 'lines', 'points', 'labels'])
100970                     .enter()
100971                     .append('g')
100972                     .attr('class', function(d) { return 'layer-osm ' + d; });
100973
100974                 selection.selectAll('.layer-osm.points').selectAll('.points-group')
100975                     .data(['points', 'midpoints', 'vertices', 'turns'])
100976                     .enter()
100977                     .append('g')
100978                     .attr('class', function(d) { return 'points-group ' + d; });
100979             }
100980
100981
100982             function showLayer() {
100983                 var layer = context.surface().selectAll('.data-layer.osm');
100984                 layer.interrupt();
100985
100986                 layer
100987                     .classed('disabled', false)
100988                     .style('opacity', 0)
100989                     .transition()
100990                     .duration(250)
100991                     .style('opacity', 1)
100992                     .on('end interrupt', function () {
100993                         dispatch.call('change');
100994                     });
100995             }
100996
100997
100998             function hideLayer() {
100999                 var layer = context.surface().selectAll('.data-layer.osm');
101000                 layer.interrupt();
101001
101002                 layer
101003                     .transition()
101004                     .duration(250)
101005                     .style('opacity', 0)
101006                     .on('end interrupt', function () {
101007                         layer.classed('disabled', true);
101008                         dispatch.call('change');
101009                     });
101010             }
101011
101012
101013             drawOsm.enabled = function(val) {
101014                 if (!arguments.length) { return enabled; }
101015                 enabled = val;
101016
101017                 if (enabled) {
101018                     showLayer();
101019                 } else {
101020                     hideLayer();
101021                 }
101022
101023                 dispatch.call('change');
101024                 return this;
101025             };
101026
101027
101028             return drawOsm;
101029         }
101030
101031         var _notesEnabled = false;
101032         var _osmService;
101033
101034
101035         function svgNotes(projection, context, dispatch$1) {
101036             if (!dispatch$1) { dispatch$1 = dispatch('change'); }
101037             var throttledRedraw = throttle(function () { dispatch$1.call('change'); }, 1000);
101038             var minZoom = 12;
101039             var touchLayer = d3_select(null);
101040             var drawLayer = d3_select(null);
101041             var _notesVisible = false;
101042
101043
101044             function markerPath(selection, klass) {
101045                 selection
101046                     .attr('class', klass)
101047                     .attr('transform', 'translate(-8, -22)')
101048                     .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');
101049             }
101050
101051
101052             // Loosely-coupled osm service for fetching notes.
101053             function getService() {
101054                 if (services$1.osm && !_osmService) {
101055                     _osmService = services$1.osm;
101056                     _osmService.on('loadedNotes', throttledRedraw);
101057                 } else if (!services$1.osm && _osmService) {
101058                     _osmService = null;
101059                 }
101060
101061                 return _osmService;
101062             }
101063
101064
101065             // Show the notes
101066             function editOn() {
101067                 if (!_notesVisible) {
101068                     _notesVisible = true;
101069                     drawLayer
101070                         .style('display', 'block');
101071                 }
101072             }
101073
101074
101075             // Immediately remove the notes and their touch targets
101076             function editOff() {
101077                 if (_notesVisible) {
101078                     _notesVisible = false;
101079                     drawLayer
101080                         .style('display', 'none');
101081                     drawLayer.selectAll('.note')
101082                         .remove();
101083                     touchLayer.selectAll('.note')
101084                         .remove();
101085                 }
101086             }
101087
101088
101089             // Enable the layer.  This shows the notes and transitions them to visible.
101090             function layerOn() {
101091                 editOn();
101092
101093                 drawLayer
101094                     .style('opacity', 0)
101095                     .transition()
101096                     .duration(250)
101097                     .style('opacity', 1)
101098                     .on('end interrupt', function () {
101099                         dispatch$1.call('change');
101100                     });
101101             }
101102
101103
101104             // Disable the layer.  This transitions the layer invisible and then hides the notes.
101105             function layerOff() {
101106                 throttledRedraw.cancel();
101107                 drawLayer.interrupt();
101108                 touchLayer.selectAll('.note')
101109                     .remove();
101110
101111                 drawLayer
101112                     .transition()
101113                     .duration(250)
101114                     .style('opacity', 0)
101115                     .on('end interrupt', function () {
101116                         editOff();
101117                         dispatch$1.call('change');
101118                     });
101119             }
101120
101121
101122             // Update the note markers
101123             function updateMarkers() {
101124                 if (!_notesVisible || !_notesEnabled) { return; }
101125
101126                 var service = getService();
101127                 var selectedID = context.selectedNoteID();
101128                 var data = (service ? service.notes(projection) : []);
101129                 var getTransform = svgPointTransform(projection);
101130
101131                 // Draw markers..
101132                 var notes = drawLayer.selectAll('.note')
101133                     .data(data, function(d) { return d.status + d.id; });
101134
101135                 // exit
101136                 notes.exit()
101137                     .remove();
101138
101139                 // enter
101140                 var notesEnter = notes.enter()
101141                     .append('g')
101142                     .attr('class', function(d) { return 'note note-' + d.id + ' ' + d.status; })
101143                     .classed('new', function(d) { return d.id < 0; });
101144
101145                 notesEnter
101146                     .append('ellipse')
101147                     .attr('cx', 0.5)
101148                     .attr('cy', 1)
101149                     .attr('rx', 6.5)
101150                     .attr('ry', 3)
101151                     .attr('class', 'stroke');
101152
101153                 notesEnter
101154                     .append('path')
101155                     .call(markerPath, 'shadow');
101156
101157                 notesEnter
101158                     .append('use')
101159                     .attr('class', 'note-fill')
101160                     .attr('width', '20px')
101161                     .attr('height', '20px')
101162                     .attr('x', '-8px')
101163                     .attr('y', '-22px')
101164                     .attr('xlink:href', '#iD-icon-note');
101165
101166                 notesEnter.selectAll('.icon-annotation')
101167                     .data(function(d) { return [d]; })
101168                     .enter()
101169                     .append('use')
101170                     .attr('class', 'icon-annotation')
101171                     .attr('width', '10px')
101172                     .attr('height', '10px')
101173                     .attr('x', '-3px')
101174                     .attr('y', '-19px')
101175                     .attr('xlink:href', function(d) {
101176                         return '#iD-icon-' + (d.id < 0 ? 'plus' : (d.status === 'open' ? 'close' : 'apply'));
101177                     });
101178
101179                 // update
101180                 notes
101181                     .merge(notesEnter)
101182                     .sort(sortY)
101183                     .classed('selected', function(d) {
101184                         var mode = context.mode();
101185                         var isMoving = mode && mode.id === 'drag-note';  // no shadows when dragging
101186                         return !isMoving && d.id === selectedID;
101187                     })
101188                     .attr('transform', getTransform);
101189
101190
101191                 // Draw targets..
101192                 if (touchLayer.empty()) { return; }
101193                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
101194
101195                 var targets = touchLayer.selectAll('.note')
101196                     .data(data, function(d) { return d.id; });
101197
101198                 // exit
101199                 targets.exit()
101200                     .remove();
101201
101202                 // enter/update
101203                 targets.enter()
101204                     .append('rect')
101205                     .attr('width', '20px')
101206                     .attr('height', '20px')
101207                     .attr('x', '-8px')
101208                     .attr('y', '-22px')
101209                     .merge(targets)
101210                     .sort(sortY)
101211                     .attr('class', function(d) {
101212                         var newClass = (d.id < 0 ? 'new' : '');
101213                         return 'note target note-' + d.id + ' ' + fillClass + newClass;
101214                     })
101215                     .attr('transform', getTransform);
101216
101217
101218                 function sortY(a, b) {
101219                     return (a.id === selectedID) ? 1 : (b.id === selectedID) ? -1 : b.loc[1] - a.loc[1];
101220                 }
101221             }
101222
101223
101224             // Draw the notes layer and schedule loading notes and updating markers.
101225             function drawNotes(selection) {
101226                 var service = getService();
101227
101228                 var surface = context.surface();
101229                 if (surface && !surface.empty()) {
101230                     touchLayer = surface.selectAll('.data-layer.touch .layer-touch.markers');
101231                 }
101232
101233                 drawLayer = selection.selectAll('.layer-notes')
101234                     .data(service ? [0] : []);
101235
101236                 drawLayer.exit()
101237                     .remove();
101238
101239                 drawLayer = drawLayer.enter()
101240                     .append('g')
101241                     .attr('class', 'layer-notes')
101242                     .style('display', _notesEnabled ? 'block' : 'none')
101243                     .merge(drawLayer);
101244
101245                 if (_notesEnabled) {
101246                     if (service && ~~context.map().zoom() >= minZoom) {
101247                         editOn();
101248                         service.loadNotes(projection);
101249                         updateMarkers();
101250                     } else {
101251                         editOff();
101252                     }
101253                 }
101254             }
101255
101256
101257             // Toggles the layer on and off
101258             drawNotes.enabled = function(val) {
101259                 if (!arguments.length) { return _notesEnabled; }
101260
101261                 _notesEnabled = val;
101262                 if (_notesEnabled) {
101263                     layerOn();
101264                 } else {
101265                     layerOff();
101266                     if (context.selectedNoteID()) {
101267                         context.enter(modeBrowse(context));
101268                     }
101269                 }
101270
101271                 dispatch$1.call('change');
101272                 return this;
101273             };
101274
101275
101276             return drawNotes;
101277         }
101278
101279         function svgTouch() {
101280
101281             function drawTouch(selection) {
101282                 selection.selectAll('.layer-touch')
101283                     .data(['areas', 'lines', 'points', 'turns', 'markers'])
101284                     .enter()
101285                     .append('g')
101286                     .attr('class', function(d) { return 'layer-touch ' + d; });
101287             }
101288
101289             return drawTouch;
101290         }
101291
101292         function svgLayers(projection, context) {
101293             var dispatch$1 = dispatch('change');
101294             var svg = d3_select(null);
101295             var _layers = [
101296                 { id: 'osm', layer: svgOsm(projection, context, dispatch$1) },
101297                 { id: 'notes', layer: svgNotes(projection, context, dispatch$1) },
101298                 { id: 'data', layer: svgData(projection, context, dispatch$1) },
101299                 { id: 'keepRight', layer: svgKeepRight(projection, context, dispatch$1) },
101300                 { id: 'improveOSM', layer: svgImproveOSM(projection, context, dispatch$1) },
101301                 { id: 'streetside', layer: svgStreetside(projection, context, dispatch$1)},
101302                 { id: 'mapillary', layer: svgMapillaryImages(projection, context, dispatch$1) },
101303                 { id: 'mapillary-map-features',  layer: svgMapillaryMapFeatures(projection, context, dispatch$1) },
101304                 { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$1) },
101305                 { id: 'openstreetcam', layer: svgOpenstreetcamImages(projection, context, dispatch$1) },
101306                 { id: 'debug', layer: svgDebug(projection, context) },
101307                 { id: 'geolocate', layer: svgGeolocate(projection) },
101308                 { id: 'touch', layer: svgTouch() }
101309             ];
101310
101311
101312             function drawLayers(selection) {
101313                 svg = selection.selectAll('.surface')
101314                     .data([0]);
101315
101316                 svg = svg.enter()
101317                     .append('svg')
101318                     .attr('class', 'surface')
101319                     .merge(svg);
101320
101321                 var defs = svg.selectAll('.surface-defs')
101322                     .data([0]);
101323
101324                 defs.enter()
101325                     .append('defs')
101326                     .attr('class', 'surface-defs');
101327
101328                 var groups = svg.selectAll('.data-layer')
101329                     .data(_layers);
101330
101331                 groups.exit()
101332                     .remove();
101333
101334                 groups.enter()
101335                     .append('g')
101336                     .attr('class', function(d) { return 'data-layer ' + d.id; })
101337                     .merge(groups)
101338                     .each(function(d) { d3_select(this).call(d.layer); });
101339             }
101340
101341
101342             drawLayers.all = function() {
101343                 return _layers;
101344             };
101345
101346
101347             drawLayers.layer = function(id) {
101348                 var obj = _layers.find(function(o) { return o.id === id; });
101349                 return obj && obj.layer;
101350             };
101351
101352
101353             drawLayers.only = function(what) {
101354                 var arr = [].concat(what);
101355                 var all = _layers.map(function(layer) { return layer.id; });
101356                 return drawLayers.remove(utilArrayDifference(all, arr));
101357             };
101358
101359
101360             drawLayers.remove = function(what) {
101361                 var arr = [].concat(what);
101362                 arr.forEach(function(id) {
101363                     _layers = _layers.filter(function(o) { return o.id !== id; });
101364                 });
101365                 dispatch$1.call('change');
101366                 return this;
101367             };
101368
101369
101370             drawLayers.add = function(what) {
101371                 var arr = [].concat(what);
101372                 arr.forEach(function(obj) {
101373                     if ('id' in obj && 'layer' in obj) {
101374                         _layers.push(obj);
101375                     }
101376                 });
101377                 dispatch$1.call('change');
101378                 return this;
101379             };
101380
101381
101382             drawLayers.dimensions = function(val) {
101383                 if (!arguments.length) { return utilGetDimensions(svg); }
101384                 utilSetDimensions(svg, val);
101385                 return this;
101386             };
101387
101388
101389             return utilRebind(drawLayers, dispatch$1, 'on');
101390         }
101391
101392         function svgLines(projection, context) {
101393             var detected = utilDetect();
101394
101395             var highway_stack = {
101396                 motorway: 0,
101397                 motorway_link: 1,
101398                 trunk: 2,
101399                 trunk_link: 3,
101400                 primary: 4,
101401                 primary_link: 5,
101402                 secondary: 6,
101403                 tertiary: 7,
101404                 unclassified: 8,
101405                 residential: 9,
101406                 service: 10,
101407                 footway: 11
101408             };
101409
101410
101411             function drawTargets(selection, graph, entities, filter) {
101412                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
101413                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
101414                 var getPath = svgPath(projection).geojson;
101415                 var activeID = context.activeID();
101416                 var base = context.history().base();
101417
101418                 // The targets and nopes will be MultiLineString sub-segments of the ways
101419                 var data = { targets: [], nopes: [] };
101420
101421                 entities.forEach(function(way) {
101422                     var features = svgSegmentWay(way, graph, activeID);
101423                     data.targets.push.apply(data.targets, features.passive);
101424                     data.nopes.push.apply(data.nopes, features.active);
101425                 });
101426
101427
101428                 // Targets allow hover and vertex snapping
101429                 var targetData = data.targets.filter(getPath);
101430                 var targets = selection.selectAll('.line.target-allowed')
101431                     .filter(function(d) { return filter(d.properties.entity); })
101432                     .data(targetData, function key(d) { return d.id; });
101433
101434                 // exit
101435                 targets.exit()
101436                     .remove();
101437
101438                 var segmentWasEdited = function(d) {
101439                     var wayID = d.properties.entity.id;
101440                     // if the whole line was edited, don't draw segment changes
101441                     if (!base.entities[wayID] ||
101442                         !fastDeepEqual(graph.entities[wayID].nodes, base.entities[wayID].nodes)) {
101443                         return false;
101444                     }
101445                     return d.properties.nodes.some(function(n) {
101446                         return !base.entities[n.id] ||
101447                                !fastDeepEqual(graph.entities[n.id].loc, base.entities[n.id].loc);
101448                     });
101449                 };
101450
101451                 // enter/update
101452                 targets.enter()
101453                     .append('path')
101454                     .merge(targets)
101455                     .attr('d', getPath)
101456                     .attr('class', function(d) {
101457                         return 'way line target target-allowed ' + targetClass + d.id;
101458                     })
101459                     .classed('segment-edited', segmentWasEdited);
101460
101461                 // NOPE
101462                 var nopeData = data.nopes.filter(getPath);
101463                 var nopes = selection.selectAll('.line.target-nope')
101464                     .filter(function(d) { return filter(d.properties.entity); })
101465                     .data(nopeData, function key(d) { return d.id; });
101466
101467                 // exit
101468                 nopes.exit()
101469                     .remove();
101470
101471                 // enter/update
101472                 nopes.enter()
101473                     .append('path')
101474                     .merge(nopes)
101475                     .attr('d', getPath)
101476                     .attr('class', function(d) {
101477                         return 'way line target target-nope ' + nopeClass + d.id;
101478                     })
101479                     .classed('segment-edited', segmentWasEdited);
101480             }
101481
101482
101483             function drawLines(selection, graph, entities, filter) {
101484                 var base = context.history().base();
101485
101486                 function waystack(a, b) {
101487                     var selected = context.selectedIDs();
101488                     var scoreA = selected.indexOf(a.id) !== -1 ? 20 : 0;
101489                     var scoreB = selected.indexOf(b.id) !== -1 ? 20 : 0;
101490
101491                     if (a.tags.highway) { scoreA -= highway_stack[a.tags.highway]; }
101492                     if (b.tags.highway) { scoreB -= highway_stack[b.tags.highway]; }
101493                     return scoreA - scoreB;
101494                 }
101495
101496
101497                 function drawLineGroup(selection, klass, isSelected) {
101498                     // Note: Don't add `.selected` class in draw modes
101499                     var mode = context.mode();
101500                     var isDrawing = mode && /^draw/.test(mode.id);
101501                     var selectedClass = (!isDrawing && isSelected) ? 'selected ' : '';
101502
101503                     var lines = selection
101504                         .selectAll('path')
101505                         .filter(filter)
101506                         .data(getPathData(isSelected), osmEntity.key);
101507
101508                     lines.exit()
101509                         .remove();
101510
101511                     // Optimization: Call expensive TagClasses only on enter selection. This
101512                     // works because osmEntity.key is defined to include the entity v attribute.
101513                     lines.enter()
101514                         .append('path')
101515                         .attr('class', function(d) {
101516
101517                             var prefix = 'way line';
101518
101519                             // if this line isn't styled by its own tags
101520                             if (!d.hasInterestingTags()) {
101521
101522                                 var parentRelations = graph.parentRelations(d);
101523                                 var parentMultipolygons = parentRelations.filter(function(relation) {
101524                                     return relation.isMultipolygon();
101525                                 });
101526
101527                                 // and if it's a member of at least one multipolygon relation
101528                                 if (parentMultipolygons.length > 0 &&
101529                                     // and only multipolygon relations
101530                                     parentRelations.length === parentMultipolygons.length) {
101531                                     // then fudge the classes to style this as an area edge
101532                                     prefix = 'relation area';
101533                                 }
101534                             }
101535
101536                             var oldMPClass = oldMultiPolygonOuters[d.id] ? 'old-multipolygon ' : '';
101537                             return prefix + ' ' + klass + ' ' + selectedClass + oldMPClass + d.id;
101538                         })
101539                         .classed('added', function(d) {
101540                             return !base.entities[d.id];
101541                         })
101542                         .classed('geometry-edited', function(d) {
101543                             return graph.entities[d.id] &&
101544                                 base.entities[d.id] &&
101545                                 !fastDeepEqual(graph.entities[d.id].nodes, base.entities[d.id].nodes);
101546                         })
101547                         .classed('retagged', function(d) {
101548                             return graph.entities[d.id] &&
101549                                 base.entities[d.id] &&
101550                                 !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
101551                         })
101552                         .call(svgTagClasses())
101553                         .merge(lines)
101554                         .sort(waystack)
101555                         .attr('d', getPath)
101556                         .call(svgTagClasses().tags(svgRelationMemberTags(graph)));
101557
101558                     return selection;
101559                 }
101560
101561
101562                 function getPathData(isSelected) {
101563                     return function() {
101564                         var layer = this.parentNode.__data__;
101565                         var data = pathdata[layer] || [];
101566                         return data.filter(function(d) {
101567                             if (isSelected)
101568                                 { return context.selectedIDs().indexOf(d.id) !== -1; }
101569                             else
101570                                 { return context.selectedIDs().indexOf(d.id) === -1; }
101571                         });
101572                     };
101573                 }
101574
101575                 function addMarkers(layergroup, pathclass, groupclass, groupdata, marker) {
101576                     var markergroup = layergroup
101577                         .selectAll('g.' + groupclass)
101578                         .data([pathclass]);
101579
101580                     markergroup = markergroup.enter()
101581                         .append('g')
101582                         .attr('class', groupclass)
101583                         .merge(markergroup);
101584
101585                     var markers = markergroup
101586                         .selectAll('path')
101587                         .filter(filter)
101588                         .data(
101589                             function data() { return groupdata[this.parentNode.__data__] || []; },
101590                             function key(d) { return [d.id, d.index]; }
101591                         );
101592
101593                     markers.exit()
101594                         .remove();
101595
101596                     markers = markers.enter()
101597                         .append('path')
101598                         .attr('class', pathclass)
101599                         .merge(markers)
101600                         .attr('marker-mid', marker)
101601                         .attr('d', function(d) { return d.d; });
101602
101603                     if (detected.ie) {
101604                         markers.each(function() { this.parentNode.insertBefore(this, this); });
101605                     }
101606                 }
101607
101608
101609                 var getPath = svgPath(projection, graph);
101610                 var ways = [];
101611                 var onewaydata = {};
101612                 var sideddata = {};
101613                 var oldMultiPolygonOuters = {};
101614
101615                 for (var i = 0; i < entities.length; i++) {
101616                     var entity = entities[i];
101617                     var outer = osmOldMultipolygonOuterMember(entity, graph);
101618                     if (outer) {
101619                         ways.push(entity.mergeTags(outer.tags));
101620                         oldMultiPolygonOuters[outer.id] = true;
101621                     } else if (entity.geometry(graph) === 'line') {
101622                         ways.push(entity);
101623                     }
101624                 }
101625
101626                 ways = ways.filter(getPath);
101627                 var pathdata = utilArrayGroupBy(ways, function(way) { return way.layer(); });
101628
101629                 Object.keys(pathdata).forEach(function(k) {
101630                     var v = pathdata[k];
101631                     var onewayArr = v.filter(function(d) { return d.isOneWay(); });
101632                     var onewaySegments = svgMarkerSegments(
101633                         projection, graph, 35,
101634                         function shouldReverse(entity) { return entity.tags.oneway === '-1'; },
101635                         function bothDirections(entity) {
101636                             return entity.tags.oneway === 'reversible' || entity.tags.oneway === 'alternating';
101637                         }
101638                     );
101639                     onewaydata[k] = utilArrayFlatten(onewayArr.map(onewaySegments));
101640
101641                     var sidedArr = v.filter(function(d) { return d.isSided(); });
101642                     var sidedSegments = svgMarkerSegments(
101643                         projection, graph, 30,
101644                         function shouldReverse() { return false; },
101645                         function bothDirections() { return false; }
101646                     );
101647                     sideddata[k] = utilArrayFlatten(sidedArr.map(sidedSegments));
101648                 });
101649
101650
101651                 var covered = selection.selectAll('.layer-osm.covered');     // under areas
101652                 var uncovered = selection.selectAll('.layer-osm.lines');     // over areas
101653                 var touchLayer = selection.selectAll('.layer-touch.lines');
101654
101655                 // Draw lines..
101656                 [covered, uncovered].forEach(function(selection) {
101657                     var range = (selection === covered ? d3_range(-10,0) : d3_range(0,11));
101658                     var layergroup = selection
101659                         .selectAll('g.layergroup')
101660                         .data(range);
101661
101662                     layergroup = layergroup.enter()
101663                         .append('g')
101664                         .attr('class', function(d) { return 'layergroup layer' + String(d); })
101665                         .merge(layergroup);
101666
101667                     layergroup
101668                         .selectAll('g.linegroup')
101669                         .data(['shadow', 'casing', 'stroke', 'shadow-highlighted', 'casing-highlighted', 'stroke-highlighted'])
101670                         .enter()
101671                         .append('g')
101672                         .attr('class', function(d) { return 'linegroup line-' + d; });
101673
101674                     layergroup.selectAll('g.line-shadow')
101675                         .call(drawLineGroup, 'shadow', false);
101676                     layergroup.selectAll('g.line-casing')
101677                         .call(drawLineGroup, 'casing', false);
101678                     layergroup.selectAll('g.line-stroke')
101679                         .call(drawLineGroup, 'stroke', false);
101680
101681                     layergroup.selectAll('g.line-shadow-highlighted')
101682                         .call(drawLineGroup, 'shadow', true);
101683                     layergroup.selectAll('g.line-casing-highlighted')
101684                         .call(drawLineGroup, 'casing', true);
101685                     layergroup.selectAll('g.line-stroke-highlighted')
101686                         .call(drawLineGroup, 'stroke', true);
101687
101688                     addMarkers(layergroup, 'oneway', 'onewaygroup', onewaydata, 'url(#oneway-marker)');
101689                     addMarkers(layergroup, 'sided', 'sidedgroup', sideddata,
101690                         function marker(d) {
101691                             var category = graph.entity(d.id).sidednessIdentifier();
101692                             return 'url(#sided-marker-' + category + ')';
101693                         }
101694                     );
101695                 });
101696
101697                 // Draw touch targets..
101698                 touchLayer
101699                     .call(drawTargets, graph, ways, filter);
101700             }
101701
101702
101703             return drawLines;
101704         }
101705
101706         function svgMidpoints(projection, context) {
101707             var targetRadius = 8;
101708
101709             function drawTargets(selection, graph, entities, filter) {
101710                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
101711                 var getTransform = svgPointTransform(projection).geojson;
101712
101713                 var data = entities.map(function(midpoint) {
101714                     return {
101715                         type: 'Feature',
101716                         id: midpoint.id,
101717                         properties: {
101718                             target: true,
101719                             entity: midpoint
101720                         },
101721                         geometry: {
101722                             type: 'Point',
101723                             coordinates: midpoint.loc
101724                         }
101725                     };
101726                 });
101727
101728                 var targets = selection.selectAll('.midpoint.target')
101729                     .filter(function(d) { return filter(d.properties.entity); })
101730                     .data(data, function key(d) { return d.id; });
101731
101732                 // exit
101733                 targets.exit()
101734                     .remove();
101735
101736                 // enter/update
101737                 targets.enter()
101738                     .append('circle')
101739                     .attr('r', targetRadius)
101740                     .merge(targets)
101741                     .attr('class', function(d) { return 'node midpoint target ' + fillClass + d.id; })
101742                     .attr('transform', getTransform);
101743             }
101744
101745
101746             function drawMidpoints(selection, graph, entities, filter, extent) {
101747                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.midpoints');
101748                 var touchLayer = selection.selectAll('.layer-touch.points');
101749
101750                 var mode = context.mode();
101751                 if ((mode && mode.id !== 'select') || !context.map().withinEditableZoom()) {
101752                     drawLayer.selectAll('.midpoint').remove();
101753                     touchLayer.selectAll('.midpoint.target').remove();
101754                     return;
101755                 }
101756
101757                 var poly = extent.polygon();
101758                 var midpoints = {};
101759
101760                 for (var i = 0; i < entities.length; i++) {
101761                     var entity = entities[i];
101762
101763                     if (entity.type !== 'way') { continue; }
101764                     if (!filter(entity)) { continue; }
101765                     if (context.selectedIDs().indexOf(entity.id) < 0) { continue; }
101766
101767                     var nodes = graph.childNodes(entity);
101768                     for (var j = 0; j < nodes.length - 1; j++) {
101769                         var a = nodes[j];
101770                         var b = nodes[j + 1];
101771                         var id = [a.id, b.id].sort().join('-');
101772
101773                         if (midpoints[id]) {
101774                             midpoints[id].parents.push(entity);
101775                         } else if (geoVecLength(projection(a.loc), projection(b.loc)) > 40) {
101776                             var point = geoVecInterp(a.loc, b.loc, 0.5);
101777                             var loc = null;
101778
101779                             if (extent.intersects(point)) {
101780                                 loc = point;
101781                             } else {
101782                                 for (var k = 0; k < 4; k++) {
101783                                     point = geoLineIntersection([a.loc, b.loc], [poly[k], poly[k + 1]]);
101784                                     if (point &&
101785                                         geoVecLength(projection(a.loc), projection(point)) > 20 &&
101786                                         geoVecLength(projection(b.loc), projection(point)) > 20)
101787                                     {
101788                                         loc = point;
101789                                         break;
101790                                     }
101791                                 }
101792                             }
101793
101794                             if (loc) {
101795                                 midpoints[id] = {
101796                                     type: 'midpoint',
101797                                     id: id,
101798                                     loc: loc,
101799                                     edge: [a.id, b.id],
101800                                     parents: [entity]
101801                                 };
101802                             }
101803                         }
101804                     }
101805                 }
101806
101807
101808                 function midpointFilter(d) {
101809                     if (midpoints[d.id])
101810                         { return true; }
101811
101812                     for (var i = 0; i < d.parents.length; i++) {
101813                         if (filter(d.parents[i])) {
101814                             return true;
101815                         }
101816                     }
101817
101818                     return false;
101819                 }
101820
101821
101822                 var groups = drawLayer.selectAll('.midpoint')
101823                     .filter(midpointFilter)
101824                     .data(Object.values(midpoints), function(d) { return d.id; });
101825
101826                 groups.exit()
101827                     .remove();
101828
101829                 var enter = groups.enter()
101830                     .insert('g', ':first-child')
101831                     .attr('class', 'midpoint');
101832
101833                 enter
101834                     .append('polygon')
101835                     .attr('points', '-6,8 10,0 -6,-8')
101836                     .attr('class', 'shadow');
101837
101838                 enter
101839                     .append('polygon')
101840                     .attr('points', '-3,4 5,0 -3,-4')
101841                     .attr('class', 'fill');
101842
101843                 groups = groups
101844                     .merge(enter)
101845                     .attr('transform', function(d) {
101846                         var translate = svgPointTransform(projection);
101847                         var a = graph.entity(d.edge[0]);
101848                         var b = graph.entity(d.edge[1]);
101849                         var angle = geoAngle(a, b, projection) * (180 / Math.PI);
101850                         return translate(d) + ' rotate(' + angle + ')';
101851                     })
101852                     .call(svgTagClasses().tags(
101853                         function(d) { return d.parents[0].tags; }
101854                     ));
101855
101856                 // Propagate data bindings.
101857                 groups.select('polygon.shadow');
101858                 groups.select('polygon.fill');
101859
101860
101861                 // Draw touch targets..
101862                 touchLayer
101863                     .call(drawTargets, graph, Object.values(midpoints), midpointFilter);
101864             }
101865
101866             return drawMidpoints;
101867         }
101868
101869         function svgPoints(projection, context) {
101870
101871             function markerPath(selection, klass) {
101872                 selection
101873                     .attr('class', klass)
101874                     .attr('transform', 'translate(-8, -23)')
101875                     .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');
101876             }
101877
101878             function sortY(a, b) {
101879                 return b.loc[1] - a.loc[1];
101880             }
101881
101882
101883             // Avoid exit/enter if we're just moving stuff around.
101884             // The node will get a new version but we only need to run the update selection.
101885             function fastEntityKey(d) {
101886                 var mode = context.mode();
101887                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
101888                 return isMoving ? d.id : osmEntity.key(d);
101889             }
101890
101891
101892             function drawTargets(selection, graph, entities, filter) {
101893                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
101894                 var getTransform = svgPointTransform(projection).geojson;
101895                 var activeID = context.activeID();
101896                 var data = [];
101897
101898                 entities.forEach(function(node) {
101899                     if (activeID === node.id) { return; }   // draw no target on the activeID
101900
101901                     data.push({
101902                         type: 'Feature',
101903                         id: node.id,
101904                         properties: {
101905                             target: true,
101906                             entity: node
101907                         },
101908                         geometry: node.asGeoJSON()
101909                     });
101910                 });
101911
101912                 var targets = selection.selectAll('.point.target')
101913                     .filter(function(d) { return filter(d.properties.entity); })
101914                     .data(data, function key(d) { return d.id; });
101915
101916                 // exit
101917                 targets.exit()
101918                     .remove();
101919
101920                 // enter/update
101921                 targets.enter()
101922                     .append('rect')
101923                     .attr('x', -10)
101924                     .attr('y', -26)
101925                     .attr('width', 20)
101926                     .attr('height', 30)
101927                     .merge(targets)
101928                     .attr('class', function(d) { return 'node point target ' + fillClass + d.id; })
101929                     .attr('transform', getTransform);
101930             }
101931
101932
101933             function drawPoints(selection, graph, entities, filter) {
101934                 var wireframe = context.surface().classed('fill-wireframe');
101935                 var zoom = geoScaleToZoom(projection.scale());
101936                 var base = context.history().base();
101937
101938                 // Points with a direction will render as vertices at higher zooms..
101939                 function renderAsPoint(entity) {
101940                     return entity.geometry(graph) === 'point' &&
101941                         !(zoom >= 18 && entity.directions(graph, projection).length);
101942                 }
101943
101944                 // All points will render as vertices in wireframe mode too..
101945                 var points = wireframe ? [] : entities.filter(renderAsPoint);
101946                 points.sort(sortY);
101947
101948
101949                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.points');
101950                 var touchLayer = selection.selectAll('.layer-touch.points');
101951
101952                 // Draw points..
101953                 var groups = drawLayer.selectAll('g.point')
101954                     .filter(filter)
101955                     .data(points, fastEntityKey);
101956
101957                 groups.exit()
101958                     .remove();
101959
101960                 var enter = groups.enter()
101961                     .append('g')
101962                     .attr('class', function(d) { return 'node point ' + d.id; })
101963                     .order();
101964
101965                 enter
101966                     .append('path')
101967                     .call(markerPath, 'shadow');
101968
101969                 enter
101970                     .append('ellipse')
101971                     .attr('cx', 0.5)
101972                     .attr('cy', 1)
101973                     .attr('rx', 6.5)
101974                     .attr('ry', 3)
101975                     .attr('class', 'stroke');
101976
101977                 enter
101978                     .append('path')
101979                     .call(markerPath, 'stroke');
101980
101981                 enter
101982                     .append('use')
101983                     .attr('transform', 'translate(-5, -19)')
101984                     .attr('class', 'icon')
101985                     .attr('width', '11px')
101986                     .attr('height', '11px');
101987
101988                 groups = groups
101989                     .merge(enter)
101990                     .attr('transform', svgPointTransform(projection))
101991                     .classed('added', function(d) {
101992                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
101993                     })
101994                     .classed('moved', function(d) {
101995                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
101996                     })
101997                     .classed('retagged', function(d) {
101998                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
101999                     })
102000                     .call(svgTagClasses());
102001
102002                 groups.select('.shadow');   // propagate bound data
102003                 groups.select('.stroke');   // propagate bound data
102004                 groups.select('.icon')      // propagate bound data
102005                     .attr('xlink:href', function(entity) {
102006                         var preset = context.presets().match(entity, graph);
102007                         var picon = preset && preset.icon;
102008
102009                         if (!picon) {
102010                             return '';
102011                         } else {
102012                             var isMaki = /^maki-/.test(picon);
102013                             return '#' + picon + (isMaki ? '-11' : '');
102014                         }
102015                     });
102016
102017
102018                 // Draw touch targets..
102019                 touchLayer
102020                     .call(drawTargets, graph, points, filter);
102021             }
102022
102023
102024             return drawPoints;
102025         }
102026
102027         function svgTurns(projection, context) {
102028
102029             function icon(turn) {
102030                 var u = turn.u ? '-u' : '';
102031                 if (turn.no) { return '#iD-turn-no' + u; }
102032                 if (turn.only) { return '#iD-turn-only' + u; }
102033                 return '#iD-turn-yes' + u;
102034             }
102035
102036             function drawTurns(selection, graph, turns) {
102037
102038                 function turnTransform(d) {
102039                     var pxRadius = 50;
102040                     var toWay = graph.entity(d.to.way);
102041                     var toPoints = graph.childNodes(toWay)
102042                         .map(function (n) { return n.loc; })
102043                         .map(projection);
102044                     var toLength = geoPathLength(toPoints);
102045                     var mid = toLength / 2;    // midpoint of destination way
102046
102047                     var toNode = graph.entity(d.to.node);
102048                     var toVertex = graph.entity(d.to.vertex);
102049                     var a = geoAngle(toVertex, toNode, projection);
102050                     var o = projection(toVertex.loc);
102051                     var r = d.u ? 0                  // u-turn: no radius
102052                         : !toWay.__via ? pxRadius    // leaf way: put marker at pxRadius
102053                         : Math.min(mid, pxRadius);   // via way: prefer pxRadius, fallback to mid for very short ways
102054
102055                     return 'translate(' + (r * Math.cos(a) + o[0]) + ',' + (r * Math.sin(a) + o[1]) + ') ' +
102056                         'rotate(' + a * 180 / Math.PI + ')';
102057                 }
102058
102059
102060                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.turns');
102061                 var touchLayer = selection.selectAll('.layer-touch.turns');
102062
102063                 // Draw turns..
102064                 var groups = drawLayer.selectAll('g.turn')
102065                     .data(turns, function(d) { return d.key; });
102066
102067                 // exit
102068                 groups.exit()
102069                     .remove();
102070
102071                 // enter
102072                 var groupsEnter = groups.enter()
102073                     .append('g')
102074                     .attr('class', function(d) { return 'turn ' + d.key; });
102075
102076                 var turnsEnter = groupsEnter
102077                     .filter(function(d) { return !d.u; });
102078
102079                 turnsEnter.append('rect')
102080                     .attr('transform', 'translate(-22, -12)')
102081                     .attr('width', '44')
102082                     .attr('height', '24');
102083
102084                 turnsEnter.append('use')
102085                     .attr('transform', 'translate(-22, -12)')
102086                     .attr('width', '44')
102087                     .attr('height', '24');
102088
102089                 var uEnter = groupsEnter
102090                     .filter(function(d) { return d.u; });
102091
102092                 uEnter.append('circle')
102093                     .attr('r', '16');
102094
102095                 uEnter.append('use')
102096                     .attr('transform', 'translate(-16, -16)')
102097                     .attr('width', '32')
102098                     .attr('height', '32');
102099
102100                 // update
102101                 groups = groups
102102                     .merge(groupsEnter)
102103                     .attr('opacity', function(d) { return d.direct === false ? '0.7' : null; })
102104                     .attr('transform', turnTransform);
102105
102106                 groups.select('use')
102107                     .attr('xlink:href', icon);
102108
102109                 groups.select('rect');      // propagate bound data
102110                 groups.select('circle');    // propagate bound data
102111
102112
102113                 // Draw touch targets..
102114                 var fillClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
102115                 groups = touchLayer.selectAll('g.turn')
102116                     .data(turns, function(d) { return d.key; });
102117
102118                 // exit
102119                 groups.exit()
102120                     .remove();
102121
102122                 // enter
102123                 groupsEnter = groups.enter()
102124                     .append('g')
102125                     .attr('class', function(d) { return 'turn ' + d.key; });
102126
102127                 turnsEnter = groupsEnter
102128                     .filter(function(d) { return !d.u; });
102129
102130                 turnsEnter.append('rect')
102131                     .attr('class', 'target ' + fillClass)
102132                     .attr('transform', 'translate(-22, -12)')
102133                     .attr('width', '44')
102134                     .attr('height', '24');
102135
102136                 uEnter = groupsEnter
102137                     .filter(function(d) { return d.u; });
102138
102139                 uEnter.append('circle')
102140                     .attr('class', 'target ' + fillClass)
102141                     .attr('r', '16');
102142
102143                 // update
102144                 groups = groups
102145                     .merge(groupsEnter)
102146                     .attr('transform', turnTransform);
102147
102148                 groups.select('rect');      // propagate bound data
102149                 groups.select('circle');    // propagate bound data
102150
102151
102152                 return this;
102153             }
102154
102155             return drawTurns;
102156         }
102157
102158         function svgVertices(projection, context) {
102159             var radiuses = {
102160                 //       z16-, z17,   z18+,  w/icon
102161                 shadow: [6,    7.5,   7.5,   12],
102162                 stroke: [2.5,  3.5,   3.5,   8],
102163                 fill:   [1,    1.5,   1.5,   1.5]
102164             };
102165
102166             var _currHoverTarget;
102167             var _currPersistent = {};
102168             var _currHover = {};
102169             var _prevHover = {};
102170             var _currSelected = {};
102171             var _prevSelected = {};
102172             var _radii = {};
102173
102174
102175             function sortY(a, b) {
102176                 return b.loc[1] - a.loc[1];
102177             }
102178
102179             // Avoid exit/enter if we're just moving stuff around.
102180             // The node will get a new version but we only need to run the update selection.
102181             function fastEntityKey(d) {
102182                 var mode = context.mode();
102183                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
102184                 return isMoving ? d.id : osmEntity.key(d);
102185             }
102186
102187
102188             function draw(selection, graph, vertices, sets, filter) {
102189                 sets = sets || { selected: {}, important: {}, hovered: {} };
102190
102191                 var icons = {};
102192                 var directions = {};
102193                 var wireframe = context.surface().classed('fill-wireframe');
102194                 var zoom = geoScaleToZoom(projection.scale());
102195                 var z = (zoom < 17 ? 0 : zoom < 18 ? 1 : 2);
102196                 var activeID = context.activeID();
102197                 var base = context.history().base();
102198
102199
102200                 function getIcon(d) {
102201                     // always check latest entity, as fastEntityKey avoids enter/exit now
102202                     var entity = graph.entity(d.id);
102203                     if (entity.id in icons) { return icons[entity.id]; }
102204
102205                     icons[entity.id] =
102206                         entity.hasInterestingTags() &&
102207                         context.presets().match(entity, graph).icon;
102208
102209                     return icons[entity.id];
102210                 }
102211
102212
102213                 // memoize directions results, return false for empty arrays (for use in filter)
102214                 function getDirections(entity) {
102215                     if (entity.id in directions) { return directions[entity.id]; }
102216
102217                     var angles = entity.directions(graph, projection);
102218                     directions[entity.id] = angles.length ? angles : false;
102219                     return angles;
102220                 }
102221
102222
102223                 function updateAttributes(selection) {
102224                     ['shadow', 'stroke', 'fill'].forEach(function(klass) {
102225                         var rads = radiuses[klass];
102226                         selection.selectAll('.' + klass)
102227                             .each(function(entity) {
102228                                 var i = z && getIcon(entity);
102229                                 var r = rads[i ? 3 : z];
102230
102231                                 // slightly increase the size of unconnected endpoints #3775
102232                                 if (entity.id !== activeID && entity.isEndpoint(graph) && !entity.isConnected(graph)) {
102233                                     r += 1.5;
102234                                 }
102235
102236                                 if (klass === 'shadow') {   // remember this value, so we don't need to
102237                                     _radii[entity.id] = r;  // recompute it when we draw the touch targets
102238                                 }
102239
102240                                 d3_select(this)
102241                                     .attr('r', r)
102242                                     .attr('visibility', (i && klass === 'fill') ? 'hidden' : null);
102243                             });
102244                     });
102245                 }
102246
102247                 vertices.sort(sortY);
102248
102249                 var groups = selection.selectAll('g.vertex')
102250                     .filter(filter)
102251                     .data(vertices, fastEntityKey);
102252
102253                 // exit
102254                 groups.exit()
102255                     .remove();
102256
102257                 // enter
102258                 var enter = groups.enter()
102259                     .append('g')
102260                     .attr('class', function(d) { return 'node vertex ' + d.id; })
102261                     .order();
102262
102263                 enter
102264                     .append('circle')
102265                     .attr('class', 'shadow');
102266
102267                 enter
102268                     .append('circle')
102269                     .attr('class', 'stroke');
102270
102271                 // Vertices with tags get a fill.
102272                 enter.filter(function(d) { return d.hasInterestingTags(); })
102273                     .append('circle')
102274                     .attr('class', 'fill');
102275
102276                 // update
102277                 groups = groups
102278                     .merge(enter)
102279                     .attr('transform', svgPointTransform(projection))
102280                     .classed('sibling', function(d) { return d.id in sets.selected; })
102281                     .classed('shared', function(d) { return graph.isShared(d); })
102282                     .classed('endpoint', function(d) { return d.isEndpoint(graph); })
102283                     .classed('added', function(d) {
102284                         return !base.entities[d.id]; // if it doesn't exist in the base graph, it's new
102285                     })
102286                     .classed('moved', function(d) {
102287                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].loc, base.entities[d.id].loc);
102288                     })
102289                     .classed('retagged', function(d) {
102290                         return base.entities[d.id] && !fastDeepEqual(graph.entities[d.id].tags, base.entities[d.id].tags);
102291                     })
102292                     .call(updateAttributes);
102293
102294                 // Vertices with icons get a `use`.
102295                 var iconUse = groups
102296                     .selectAll('.icon')
102297                     .data(function data(d) { return zoom >= 17 && getIcon(d) ? [d] : []; }, fastEntityKey);
102298
102299                 // exit
102300                 iconUse.exit()
102301                     .remove();
102302
102303                 // enter
102304                 iconUse.enter()
102305                     .append('use')
102306                     .attr('class', 'icon')
102307                     .attr('width', '11px')
102308                     .attr('height', '11px')
102309                     .attr('transform', 'translate(-5.5, -5.5)')
102310                     .attr('xlink:href', function(d) {
102311                         var picon = getIcon(d);
102312                         var isMaki = /^maki-/.test(picon);
102313                         return '#' + picon + (isMaki ? '-11' : '');
102314                     });
102315
102316
102317                 // Vertices with directions get viewfields
102318                 var dgroups = groups
102319                     .selectAll('.viewfieldgroup')
102320                     .data(function data(d) { return zoom >= 18 && getDirections(d) ? [d] : []; }, fastEntityKey);
102321
102322                 // exit
102323                 dgroups.exit()
102324                     .remove();
102325
102326                 // enter/update
102327                 dgroups = dgroups.enter()
102328                     .insert('g', '.shadow')
102329                     .attr('class', 'viewfieldgroup')
102330                     .merge(dgroups);
102331
102332                 var viewfields = dgroups.selectAll('.viewfield')
102333                     .data(getDirections, function key(d) { return osmEntity.key(d); });
102334
102335                 // exit
102336                 viewfields.exit()
102337                     .remove();
102338
102339                 // enter/update
102340                 viewfields.enter()
102341                     .append('path')
102342                     .attr('class', 'viewfield')
102343                     .attr('d', 'M0,0H0')
102344                     .merge(viewfields)
102345                     .attr('marker-start', 'url(#viewfield-marker' + (wireframe ? '-wireframe' : '') + ')')
102346                     .attr('transform', function(d) { return 'rotate(' + d + ')'; });
102347             }
102348
102349
102350             function drawTargets(selection, graph, entities, filter) {
102351                 var targetClass = context.getDebug('target') ? 'pink ' : 'nocolor ';
102352                 var nopeClass = context.getDebug('target') ? 'red ' : 'nocolor ';
102353                 var getTransform = svgPointTransform(projection).geojson;
102354                 var activeID = context.activeID();
102355                 var data = { targets: [], nopes: [] };
102356
102357                 entities.forEach(function(node) {
102358                     if (activeID === node.id) { return; }   // draw no target on the activeID
102359
102360                     var vertexType = svgPassiveVertex(node, graph, activeID);
102361                     if (vertexType !== 0) {     // passive or adjacent - allow to connect
102362                         data.targets.push({
102363                             type: 'Feature',
102364                             id: node.id,
102365                             properties: {
102366                                 target: true,
102367                                 entity: node
102368                             },
102369                             geometry: node.asGeoJSON()
102370                         });
102371                     } else {
102372                         data.nopes.push({
102373                             type: 'Feature',
102374                             id: node.id + '-nope',
102375                             properties: {
102376                                 nope: true,
102377                                 target: true,
102378                                 entity: node
102379                             },
102380                             geometry: node.asGeoJSON()
102381                         });
102382                     }
102383                 });
102384
102385                 // Targets allow hover and vertex snapping
102386                 var targets = selection.selectAll('.vertex.target-allowed')
102387                     .filter(function(d) { return filter(d.properties.entity); })
102388                     .data(data.targets, function key(d) { return d.id; });
102389
102390                 // exit
102391                 targets.exit()
102392                     .remove();
102393
102394                 // enter/update
102395                 targets.enter()
102396                     .append('circle')
102397                     .attr('r', function(d) {
102398                         return _radii[d.id]
102399                           || radiuses.shadow[3];
102400                     })
102401                     .merge(targets)
102402                     .attr('class', function(d) {
102403                         return 'node vertex target target-allowed '
102404                         + targetClass + d.id;
102405                     })
102406                     .attr('transform', getTransform);
102407
102408
102409                 // NOPE
102410                 var nopes = selection.selectAll('.vertex.target-nope')
102411                     .filter(function(d) { return filter(d.properties.entity); })
102412                     .data(data.nopes, function key(d) { return d.id; });
102413
102414                 // exit
102415                 nopes.exit()
102416                     .remove();
102417
102418                 // enter/update
102419                 nopes.enter()
102420                     .append('circle')
102421                     .attr('r', function(d) { return (_radii[d.properties.entity.id] || radiuses.shadow[3]); })
102422                     .merge(nopes)
102423                     .attr('class', function(d) { return 'node vertex target target-nope ' + nopeClass + d.id; })
102424                     .attr('transform', getTransform);
102425             }
102426
102427
102428             // Points can also render as vertices:
102429             // 1. in wireframe mode or
102430             // 2. at higher zooms if they have a direction
102431             function renderAsVertex(entity, graph, wireframe, zoom) {
102432                 var geometry = entity.geometry(graph);
102433                 return geometry === 'vertex' || (geometry === 'point' && (
102434                     wireframe || (zoom >= 18 && entity.directions(graph, projection).length)
102435                 ));
102436             }
102437
102438
102439             function isEditedNode(node, base, head) {
102440                 var baseNode = base.entities[node.id];
102441                 var headNode = head.entities[node.id];
102442                 return !headNode ||
102443                     !baseNode ||
102444                     !fastDeepEqual(headNode.tags, baseNode.tags) ||
102445                     !fastDeepEqual(headNode.loc, baseNode.loc);
102446             }
102447
102448
102449             function getSiblingAndChildVertices(ids, graph, wireframe, zoom) {
102450                 var results = {};
102451
102452                 function addChildVertices(entity) {
102453                     var geometry = entity.geometry(graph);
102454                     if (!context.features().isHiddenFeature(entity, graph, geometry)) {
102455                         var i;
102456                         if (entity.type === 'way') {
102457                             for (i = 0; i < entity.nodes.length; i++) {
102458                                 var child = graph.hasEntity(entity.nodes[i]);
102459                                 if (child) {
102460                                     addChildVertices(child);
102461                                 }
102462                             }
102463                         } else if (entity.type === 'relation') {
102464                             for (i = 0; i < entity.members.length; i++) {
102465                                 var member = graph.hasEntity(entity.members[i].id);
102466                                 if (member) {
102467                                     addChildVertices(member);
102468                                 }
102469                             }
102470                         } else if (renderAsVertex(entity, graph, wireframe, zoom)) {
102471                             results[entity.id] = entity;
102472                         }
102473                     }
102474                 }
102475
102476                 ids.forEach(function(id) {
102477                     var entity = graph.hasEntity(id);
102478                     if (!entity) { return; }
102479
102480                     if (entity.type === 'node') {
102481                         if (renderAsVertex(entity, graph, wireframe, zoom)) {
102482                             results[entity.id] = entity;
102483                             graph.parentWays(entity).forEach(function(entity) {
102484                                 addChildVertices(entity);
102485                             });
102486                         }
102487                     } else {  // way, relation
102488                         addChildVertices(entity);
102489                     }
102490                 });
102491
102492                 return results;
102493             }
102494
102495
102496             function drawVertices(selection, graph, entities, filter, extent, fullRedraw) {
102497                 var wireframe = context.surface().classed('fill-wireframe');
102498                 var visualDiff = context.surface().classed('highlight-edited');
102499                 var zoom = geoScaleToZoom(projection.scale());
102500                 var mode = context.mode();
102501                 var isMoving = mode && /^(add|draw|drag|move|rotate)/.test(mode.id);
102502                 var base = context.history().base();
102503
102504                 var drawLayer = selection.selectAll('.layer-osm.points .points-group.vertices');
102505                 var touchLayer = selection.selectAll('.layer-touch.points');
102506
102507                 if (fullRedraw) {
102508                     _currPersistent = {};
102509                     _radii = {};
102510                 }
102511
102512                 // Collect important vertices from the `entities` list..
102513                 // (during a paritial redraw, it will not contain everything)
102514                 for (var i = 0; i < entities.length; i++) {
102515                     var entity = entities[i];
102516                     var geometry = entity.geometry(graph);
102517                     var keep = false;
102518
102519                     // a point that looks like a vertex..
102520                     if ((geometry === 'point') && renderAsVertex(entity, graph, wireframe, zoom)) {
102521                         _currPersistent[entity.id] = entity;
102522                         keep = true;
102523
102524                     // a vertex of some importance..
102525                     } else if (geometry === 'vertex' &&
102526                         (entity.hasInterestingTags() || entity.isEndpoint(graph) || entity.isConnected(graph)
102527                         || (visualDiff && isEditedNode(entity, base, graph)))) {
102528                         _currPersistent[entity.id] = entity;
102529                         keep = true;
102530                     }
102531
102532                     // whatever this is, it's not a persistent vertex..
102533                     if (!keep && !fullRedraw) {
102534                         delete _currPersistent[entity.id];
102535                     }
102536                 }
102537
102538                 // 3 sets of vertices to consider:
102539                 var sets = {
102540                     persistent: _currPersistent,  // persistent = important vertices (render always)
102541                     selected: _currSelected,      // selected + siblings of selected (render always)
102542                     hovered: _currHover           // hovered + siblings of hovered (render only in draw modes)
102543                 };
102544
102545                 var all = Object.assign({}, (isMoving ? _currHover : {}), _currSelected, _currPersistent);
102546
102547                 // Draw the vertices..
102548                 // The filter function controls the scope of what objects d3 will touch (exit/enter/update)
102549                 // Adjust the filter function to expand the scope beyond whatever entities were passed in.
102550                 var filterRendered = function(d) {
102551                     return d.id in _currPersistent || d.id in _currSelected || d.id in _currHover || filter(d);
102552                 };
102553                 drawLayer
102554                     .call(draw, graph, currentVisible(all), sets, filterRendered);
102555
102556                 // Draw touch targets..
102557                 // When drawing, render all targets (not just those affected by a partial redraw)
102558                 var filterTouch = function(d) {
102559                     return isMoving ? true : filterRendered(d);
102560                 };
102561                 touchLayer
102562                     .call(drawTargets, graph, currentVisible(all), filterTouch);
102563
102564
102565                 function currentVisible(which) {
102566                     return Object.keys(which)
102567                         .map(graph.hasEntity, graph)     // the current version of this entity
102568                         .filter(function (entity) { return entity && entity.intersects(extent, graph); });
102569                 }
102570             }
102571
102572
102573             // partial redraw - only update the selected items..
102574             drawVertices.drawSelected = function(selection, graph, extent) {
102575                 var wireframe = context.surface().classed('fill-wireframe');
102576                 var zoom = geoScaleToZoom(projection.scale());
102577
102578                 _prevSelected = _currSelected || {};
102579                 if (context.map().isInWideSelection()) {
102580                     _currSelected = {};
102581                     context.selectedIDs().forEach(function(id) {
102582                         var entity = graph.hasEntity(id);
102583                         if (!entity) { return; }
102584
102585                         if (entity.type === 'node') {
102586                             if (renderAsVertex(entity, graph, wireframe, zoom)) {
102587                                 _currSelected[entity.id] = entity;
102588                             }
102589                         }
102590                     });
102591
102592                 } else {
102593                     _currSelected = getSiblingAndChildVertices(context.selectedIDs(), graph, wireframe, zoom);
102594                 }
102595
102596                 // note that drawVertices will add `_currSelected` automatically if needed..
102597                 var filter = function(d) { return d.id in _prevSelected; };
102598                 drawVertices(selection, graph, Object.values(_prevSelected), filter, extent, false);
102599             };
102600
102601
102602             // partial redraw - only update the hovered items..
102603             drawVertices.drawHover = function(selection, graph, target, extent) {
102604                 if (target === _currHoverTarget) { return; }  // continue only if something changed
102605
102606                 var wireframe = context.surface().classed('fill-wireframe');
102607                 var zoom = geoScaleToZoom(projection.scale());
102608
102609                 _prevHover = _currHover || {};
102610                 _currHoverTarget = target;
102611                 var entity = target && target.properties && target.properties.entity;
102612
102613                 if (entity) {
102614                     _currHover = getSiblingAndChildVertices([entity.id], graph, wireframe, zoom);
102615                 } else {
102616                     _currHover = {};
102617                 }
102618
102619                 // note that drawVertices will add `_currHover` automatically if needed..
102620                 var filter = function(d) { return d.id in _prevHover; };
102621                 drawVertices(selection, graph, Object.values(_prevHover), filter, extent, false);
102622             };
102623
102624             return drawVertices;
102625         }
102626
102627         function utilBindOnce(target, type, listener, capture) {
102628             var typeOnce = type + '.once';
102629             function one() {
102630                 target.on(typeOnce, null);
102631                 listener.apply(this, arguments);
102632             }
102633             target.on(typeOnce, one, capture);
102634             return this;
102635         }
102636
102637         // constants
102638         var TILESIZE = 256;
102639         var minZoom = 2;
102640         var maxZoom = 24;
102641         var kMin = geoZoomToScale(minZoom, TILESIZE);
102642         var kMax = geoZoomToScale(maxZoom, TILESIZE);
102643
102644         function clamp(num, min, max) {
102645             return Math.max(min, Math.min(num, max));
102646         }
102647
102648
102649         function rendererMap(context) {
102650             var dispatch$1 = dispatch('move', 'drawn', 'crossEditableZoom');
102651             var projection = context.projection;
102652             var curtainProjection = context.curtainProjection;
102653             var drawLayers = svgLayers(projection, context);
102654             var drawPoints = svgPoints(projection, context);
102655             var drawVertices = svgVertices(projection, context);
102656             var drawLines = svgLines(projection, context);
102657             var drawAreas = svgAreas(projection, context);
102658             var drawMidpoints = svgMidpoints(projection, context);
102659             var drawLabels = svgLabels(projection, context);
102660
102661             var _selection = d3_select(null);
102662             var supersurface = d3_select(null);
102663             var wrapper = d3_select(null);
102664             var surface = d3_select(null);
102665
102666             var _dimensions = [1, 1];
102667             var _dblClickEnabled = true;
102668             var _redrawEnabled = true;
102669             var _gestureTransformStart;
102670             var _transformStart = projection.transform();
102671             var _transformLast;
102672             var _isTransformed = false;
102673             var _minzoom = 0;
102674             var _getMouseCoords;
102675             var _mouseEvent;
102676             var _lastWithinEditableZoom;
102677
102678             var zoom = d3_zoom()
102679                 .scaleExtent([kMin, kMax])
102680                 .interpolate(d3_interpolate)
102681                 .filter(zoomEventFilter)
102682                 .on('zoom', zoomPan);
102683
102684             var scheduleRedraw = throttle(redraw, 750);
102685             // var isRedrawScheduled = false;
102686             // var pendingRedrawCall;
102687             // function scheduleRedraw() {
102688             //     // Only schedule the redraw if one has not already been set.
102689             //     if (isRedrawScheduled) return;
102690             //     isRedrawScheduled = true;
102691             //     var that = this;
102692             //     var args = arguments;
102693             //     pendingRedrawCall = window.requestIdleCallback(function () {
102694             //         // Reset the boolean so future redraws can be set.
102695             //         isRedrawScheduled = false;
102696             //         redraw.apply(that, args);
102697             //     }, { timeout: 1400 });
102698             // }
102699
102700             function cancelPendingRedraw() {
102701                 scheduleRedraw.cancel();
102702                 // isRedrawScheduled = false;
102703                 // window.cancelIdleCallback(pendingRedrawCall);
102704             }
102705
102706
102707             function map(selection) {
102708                 _selection = selection;
102709
102710                 context
102711                     .on('change.map', immediateRedraw);
102712
102713                 var osm = context.connection();
102714                 if (osm) {
102715                     osm.on('change.map', immediateRedraw);
102716                 }
102717
102718                 function didUndoOrRedo(targetTransform) {
102719                     var mode = context.mode().id;
102720                     if (mode !== 'browse' && mode !== 'select') { return; }
102721                     if (targetTransform) {
102722                         map.transformEase(targetTransform);
102723                     }
102724                 }
102725
102726                 context.history()
102727                     .on('merge.map', function() { scheduleRedraw(); })
102728                     .on('change.map', immediateRedraw)
102729                     .on('undone.map', function(stack, fromStack) {
102730                         didUndoOrRedo(fromStack.transform);
102731                     })
102732                     .on('redone.map', function(stack) {
102733                         didUndoOrRedo(stack.transform);
102734                     });
102735
102736                 context.background()
102737                     .on('change.map', immediateRedraw);
102738
102739                 context.features()
102740                     .on('redraw.map', immediateRedraw);
102741
102742                 drawLayers
102743                     .on('change.map', function() {
102744                         context.background().updateImagery();
102745                         immediateRedraw();
102746                     });
102747
102748                 selection
102749                     .on('dblclick.map', dblClick)
102750                     .call(zoom)
102751                     .call(zoom.transform, projection.transform());
102752
102753                 supersurface = selection.append('div')
102754                     .attr('id', 'supersurface')
102755                     .call(utilSetTransform, 0, 0);
102756
102757                 // Need a wrapper div because Opera can't cope with an absolutely positioned
102758                 // SVG element: http://bl.ocks.org/jfirebaugh/6fbfbd922552bf776c16
102759                 wrapper = supersurface
102760                     .append('div')
102761                     .attr('class', 'layer layer-data');
102762
102763                 map.surface = surface = wrapper
102764                     .call(drawLayers)
102765                     .selectAll('.surface')
102766                     .attr('id', 'surface');
102767
102768                 surface
102769                     .call(drawLabels.observe)
102770                     .on('gesturestart.surface', function() {
102771                         _gestureTransformStart = projection.transform();
102772                     })
102773                     .on('gesturechange.surface', gestureChange)
102774                     .on('mousedown.zoom', function() {
102775                         if (event.button === 2) {
102776                             event.stopPropagation();
102777                         }
102778                     }, true)
102779                     .on('mouseup.zoom', function() {
102780                         if (resetTransform()) {
102781                             immediateRedraw();
102782                         }
102783                     })
102784                     .on('mousemove.map', function() {
102785                         _mouseEvent = event;
102786                     })
102787                     .on('mouseover.vertices', function() {
102788                         if (map.editableDataEnabled() && !_isTransformed) {
102789                             var hover = event.target.__data__;
102790                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
102791                             dispatch$1.call('drawn', this, { full: false });
102792                         }
102793                     })
102794                     .on('mouseout.vertices', function() {
102795                         if (map.editableDataEnabled() && !_isTransformed) {
102796                             var hover = event.relatedTarget && event.relatedTarget.__data__;
102797                             surface.call(drawVertices.drawHover, context.graph(), hover, map.extent());
102798                             dispatch$1.call('drawn', this, { full: false });
102799                         }
102800                     });
102801
102802                 context.on('enter.map',  function() {
102803                     if (map.editableDataEnabled(true /* skip zoom check */) && !_isTransformed) {
102804                         // redraw immediately any objects affected by a change in selectedIDs.
102805                         var graph = context.graph();
102806                         var selectedAndParents = {};
102807                         context.selectedIDs().forEach(function(id) {
102808                             var entity = graph.hasEntity(id);
102809                             if (entity) {
102810                                 selectedAndParents[entity.id] = entity;
102811                                 if (entity.type === 'node') {
102812                                     graph.parentWays(entity).forEach(function(parent) {
102813                                         selectedAndParents[parent.id] = parent;
102814                                     });
102815                                 }
102816                             }
102817                         });
102818                         var data = Object.values(selectedAndParents);
102819                         var filter = function(d) { return d.id in selectedAndParents; };
102820
102821                         data = context.features().filter(data, graph);
102822
102823                         surface
102824                             .call(drawVertices.drawSelected, graph, map.extent())
102825                             .call(drawLines, graph, data, filter)
102826                             .call(drawAreas, graph, data, filter)
102827                             .call(drawMidpoints, graph, data, filter, map.trimmedExtent());
102828
102829                         dispatch$1.call('drawn', this, { full: false });
102830
102831                         // redraw everything else later
102832                         scheduleRedraw();
102833                     }
102834                 });
102835
102836                 map.dimensions(utilGetDimensions(selection));
102837             }
102838
102839
102840             function zoomEventFilter() {
102841                 // Fix for #2151, (see also d3/d3-zoom#60, d3/d3-brush#18)
102842                 // Intercept `mousedown` and check if there is an orphaned zoom gesture.
102843                 // This can happen if a previous `mousedown` occurred without a `mouseup`.
102844                 // If we detect this, dispatch `mouseup` to complete the orphaned gesture,
102845                 // so that d3-zoom won't stop propagation of new `mousedown` events.
102846                 if (event.type === 'mousedown') {
102847                     var hasOrphan = false;
102848                     var listeners = window.__on;
102849                     for (var i = 0; i < listeners.length; i++) {
102850                         var listener = listeners[i];
102851                         if (listener.name === 'zoom' && listener.type === 'mouseup') {
102852                             hasOrphan = true;
102853                             break;
102854                         }
102855                     }
102856                     if (hasOrphan) {
102857                         var event$1 = window.CustomEvent;
102858                         if (event$1) {
102859                             event$1 = new event$1('mouseup');
102860                         } else {
102861                             event$1 = window.document.createEvent('Event');
102862                             event$1.initEvent('mouseup', false, false);
102863                         }
102864                         // Event needs to be dispatched with an event.view property.
102865                         event$1.view = window;
102866                         window.dispatchEvent(event$1);
102867                     }
102868                 }
102869
102870                 return event.button !== 2;   // ignore right clicks
102871             }
102872
102873
102874             function pxCenter() {
102875                 return [_dimensions[0] / 2, _dimensions[1] / 2];
102876             }
102877
102878
102879             function drawEditable(difference, extent) {
102880                 var mode = context.mode();
102881                 var graph = context.graph();
102882                 var features = context.features();
102883                 var all = context.intersects(map.extent());
102884                 var fullRedraw = false;
102885                 var data;
102886                 var set;
102887                 var filter;
102888
102889                 if (map.isInWideSelection()) {
102890                     data = [];
102891                     utilEntityAndDeepMemberIDs(mode.selectedIDs(), context.graph()).forEach(function(id) {
102892                         var entity = context.hasEntity(id);
102893                         if (entity) { data.push(entity); }
102894                     });
102895                     fullRedraw = true;
102896                     filter = utilFunctor(true);
102897
102898                 } else if (difference) {
102899                     var complete = difference.complete(map.extent());
102900                     data = Object.values(complete).filter(Boolean);
102901                     set = new Set(Object.keys(complete));
102902                     filter = function(d) { return set.has(d.id); };
102903                     features.clear(data);
102904
102905                 } else {
102906                     // force a full redraw if gatherStats detects that a feature
102907                     // should be auto-hidden (e.g. points or buildings)..
102908                     if (features.gatherStats(all, graph, _dimensions)) {
102909                         extent = undefined;
102910                     }
102911
102912                     if (extent) {
102913                         data = context.intersects(map.extent().intersection(extent));
102914                         set = new Set(data.map(function(entity) { return entity.id; }));
102915                         filter = function(d) { return set.has(d.id); };
102916
102917                     } else {
102918                         data = all;
102919                         fullRedraw = true;
102920                         filter = utilFunctor(true);
102921                     }
102922                 }
102923
102924                 data = features.filter(data, graph);
102925
102926                 if (mode && mode.id === 'select') {
102927                     // update selected vertices - the user might have just double-clicked a way,
102928                     // creating a new vertex, triggering a partial redraw without a mode change
102929                     surface.call(drawVertices.drawSelected, graph, map.extent());
102930                 }
102931
102932                 surface
102933                     .call(drawVertices, graph, data, filter, map.extent(), fullRedraw)
102934                     .call(drawLines, graph, data, filter)
102935                     .call(drawAreas, graph, data, filter)
102936                     .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
102937                     .call(drawLabels, graph, data, filter, _dimensions, fullRedraw)
102938                     .call(drawPoints, graph, data, filter);
102939
102940                 dispatch$1.call('drawn', this, {full: true});
102941             }
102942
102943
102944             function editOff() {
102945                 context.features().resetStats();
102946                 surface.selectAll('.layer-osm *').remove();
102947                 surface.selectAll('.layer-touch:not(.markers) *').remove();
102948
102949                 var allowed = {
102950                     'browse': true,
102951                     'save': true,
102952                     'select-note': true,
102953                     'select-data': true,
102954                     'select-error': true
102955                 };
102956
102957                 var mode = context.mode();
102958                 if (mode && !allowed[mode.id]) {
102959                     context.enter(modeBrowse(context));
102960                 }
102961
102962                 dispatch$1.call('drawn', this, {full: true});
102963             }
102964
102965
102966             function dblClick() {
102967                 if (!_dblClickEnabled) {
102968                     event.preventDefault();
102969                     event.stopImmediatePropagation();
102970                 }
102971             }
102972
102973
102974             function gestureChange() {
102975                 // Remap Safari gesture events to wheel events - #5492
102976                 // We want these disabled most places, but enabled for zoom/unzoom on map surface
102977                 // https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent
102978                 var e = event;
102979                 e.preventDefault();
102980
102981                 var props = {
102982                     deltaMode: 0,    // dummy values to ignore in zoomPan
102983                     deltaY: 1,       // dummy values to ignore in zoomPan
102984                     clientX: e.clientX,
102985                     clientY: e.clientY,
102986                     screenX: e.screenX,
102987                     screenY: e.screenY,
102988                     x: e.x,
102989                     y: e.y
102990                 };
102991
102992                 var e2 = new WheelEvent('wheel', props);
102993                 e2._scale = e.scale;         // preserve the original scale
102994                 e2._rotation = e.rotation;   // preserve the original rotation
102995
102996                 _selection.node().dispatchEvent(e2);
102997             }
102998
102999
103000             function zoomPan(manualEvent) {
103001                 var event$1 = (manualEvent || event);
103002                 var source = event$1.sourceEvent;
103003                 var eventTransform = event$1.transform;
103004                 var x = eventTransform.x;
103005                 var y = eventTransform.y;
103006                 var k = eventTransform.k;
103007
103008                 if (_transformStart.x === x &&
103009                     _transformStart.y === y &&
103010                     _transformStart.k === k) {
103011                     return;  // no change
103012                 }
103013
103014                 // Special handling of 'wheel' events:
103015                 // They might be triggered by the user scrolling the mouse wheel,
103016                 // or 2-finger pinch/zoom gestures, the transform may need adjustment.
103017                 if (source && source.type === 'wheel') {
103018                     var detected = utilDetect();
103019                     var dX = source.deltaX;
103020                     var dY = source.deltaY;
103021                     var x2 = x;
103022                     var y2 = y;
103023                     var k2 = k;
103024                     var t0, p0, p1;
103025
103026                     // Normalize mousewheel scroll speed (Firefox) - #3029
103027                     // If wheel delta is provided in LINE units, recalculate it in PIXEL units
103028                     // We are essentially redoing the calculations that occur here:
103029                     //   https://github.com/d3/d3-zoom/blob/78563a8348aa4133b07cac92e2595c2227ca7cd7/src/zoom.js#L203
103030                     // See this for more info:
103031                     //   https://github.com/basilfx/normalize-wheel/blob/master/src/normalizeWheel.js
103032                     if (source.deltaMode === 1 /* LINE */) {
103033                         // Convert from lines to pixels, more if the user is scrolling fast.
103034                         // (I made up the exp function to roughly match Firefox to what Chrome does)
103035                         // These numbers should be floats, because integers are treated as pan gesture below.
103036                         var lines = Math.abs(source.deltaY);
103037                         var sign = (source.deltaY > 0) ? 1 : -1;
103038                         dY = sign * clamp(
103039                             Math.exp((lines - 1) * 0.75) * 4.000244140625,
103040                             4.000244140625,    // min
103041                             350.000244140625   // max
103042                         );
103043
103044                         // On Firefox Windows and Linux we always get +/- the scroll line amount (default 3)
103045                         // There doesn't seem to be any scroll accelleration.
103046                         // This multiplier increases the speed a little bit - #5512
103047                         if (detected.os !== 'mac') {
103048                             dY *= 5;
103049                         }
103050
103051                         // recalculate x2,y2,k2
103052                         t0 = _isTransformed ? _transformLast : _transformStart;
103053                         p0 = _getMouseCoords(source);
103054                         p1 = t0.invert(p0);
103055                         k2 = t0.k * Math.pow(2, -dY / 500);
103056                         k2 = clamp(k2, kMin, kMax);
103057                         x2 = p0[0] - p1[0] * k2;
103058                         y2 = p0[1] - p1[1] * k2;
103059
103060                     // 2 finger map pinch zooming (Safari) - #5492
103061                     // These are fake `wheel` events we made from Safari `gesturechange` events..
103062                     } else if (source._scale) {
103063                         // recalculate x2,y2,k2
103064                         t0 = _gestureTransformStart;
103065                         p0 = _getMouseCoords(source);
103066                         p1 = t0.invert(p0);
103067                         k2 = t0.k * source._scale;
103068                         k2 = clamp(k2, kMin, kMax);
103069                         x2 = p0[0] - p1[0] * k2;
103070                         y2 = p0[1] - p1[1] * k2;
103071
103072                     // 2 finger map pinch zooming (all browsers except Safari) - #5492
103073                     // Pinch zooming via the `wheel` event will always have:
103074                     // - `ctrlKey = true`
103075                     // - `deltaY` is not round integer pixels (ignore `deltaX`)
103076                     } else if (source.ctrlKey && !isInteger(dY)) {
103077                         dY *= 6;   // slightly scale up whatever the browser gave us
103078
103079                         // recalculate x2,y2,k2
103080                         t0 = _isTransformed ? _transformLast : _transformStart;
103081                         p0 = _getMouseCoords(source);
103082                         p1 = t0.invert(p0);
103083                         k2 = t0.k * Math.pow(2, -dY / 500);
103084                         k2 = clamp(k2, kMin, kMax);
103085                         x2 = p0[0] - p1[0] * k2;
103086                         y2 = p0[1] - p1[1] * k2;
103087
103088                     // Trackpad scroll zooming with shift or alt/option key down
103089                     } else if ((source.altKey || source.shiftKey) && isInteger(dY)) {
103090                         // recalculate x2,y2,k2
103091                         t0 = _isTransformed ? _transformLast : _transformStart;
103092                         p0 = _getMouseCoords(source);
103093                         p1 = t0.invert(p0);
103094                         k2 = t0.k * Math.pow(2, -dY / 500);
103095                         k2 = clamp(k2, kMin, kMax);
103096                         x2 = p0[0] - p1[0] * k2;
103097                         y2 = p0[1] - p1[1] * k2;
103098
103099                     // 2 finger map panning (Mac only, all browsers) - #5492, #5512
103100                     // Panning via the `wheel` event will always have:
103101                     // - `ctrlKey = false`
103102                     // - `deltaX`,`deltaY` are round integer pixels
103103                     } else if (detected.os === 'mac' && !source.ctrlKey && isInteger(dX) && isInteger(dY)) {
103104                         p1 = projection.translate();
103105                         x2 = p1[0] - dX;
103106                         y2 = p1[1] - dY;
103107                         k2 = projection.scale();
103108                         k2 = clamp(k2, kMin, kMax);
103109                     }
103110
103111                     // something changed - replace the event transform
103112                     if (x2 !== x || y2 !== y || k2 !== k) {
103113                         x = x2;
103114                         y = y2;
103115                         k = k2;
103116                         eventTransform = identity$8.translate(x2, y2).scale(k2);
103117                         _selection.node().__zoom = eventTransform;
103118                     }
103119
103120                 }
103121
103122                 var withinEditableZoom = map.withinEditableZoom();
103123                 if (_lastWithinEditableZoom !== withinEditableZoom) {
103124                     if (_lastWithinEditableZoom !== undefined) {
103125                         // notify that the map zoomed in or out over the editable zoom threshold
103126                         dispatch$1.call('crossEditableZoom', this, map);
103127                     }
103128                     _lastWithinEditableZoom = withinEditableZoom;
103129                 }
103130
103131                 if (geoScaleToZoom(k, TILESIZE) < _minzoom) {
103132                     surface.interrupt();
103133                     uiFlash().text(t('cannot_zoom'))();
103134                     setCenterZoom(map.center(), context.minEditableZoom(), 0, true);
103135                     scheduleRedraw();
103136                     dispatch$1.call('move', this, map);
103137                     return;
103138                 }
103139
103140                 projection.transform(eventTransform);
103141
103142                 var scale = k / _transformStart.k;
103143                 var tX = (x / scale - _transformStart.x) * scale;
103144                 var tY = (y / scale - _transformStart.y) * scale;
103145
103146                 if (context.inIntro()) {
103147                     curtainProjection.transform({
103148                         x: x - tX,
103149                         y: y - tY,
103150                         k: k
103151                     });
103152                 }
103153
103154                 if (source) {
103155                     _mouseEvent = event$1;
103156                 }
103157                 _isTransformed = true;
103158                 _transformLast = eventTransform;
103159                 utilSetTransform(supersurface, tX, tY, scale);
103160                 scheduleRedraw();
103161
103162                 dispatch$1.call('move', this, map);
103163
103164
103165                 function isInteger(val) {
103166                     return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;
103167                 }
103168             }
103169
103170
103171             function resetTransform() {
103172                 if (!_isTransformed) { return false; }
103173
103174                 // deprecation warning - Radial Menu to be removed in iD v3
103175                 surface.selectAll('.edit-menu, .radial-menu').interrupt().remove();
103176                 utilSetTransform(supersurface, 0, 0);
103177                 _isTransformed = false;
103178                 if (context.inIntro()) {
103179                     curtainProjection.transform(projection.transform());
103180                 }
103181                 return true;
103182             }
103183
103184
103185             function redraw(difference, extent) {
103186                 if (surface.empty() || !_redrawEnabled) { return; }
103187
103188                 // If we are in the middle of a zoom/pan, we can't do differenced redraws.
103189                 // It would result in artifacts where differenced entities are redrawn with
103190                 // one transform and unchanged entities with another.
103191                 if (resetTransform()) {
103192                     difference = extent = undefined;
103193                 }
103194
103195                 var zoom = map.zoom();
103196                 var z = String(~~zoom);
103197
103198                 if (surface.attr('data-zoom') !== z) {
103199                     surface.attr('data-zoom', z);
103200                 }
103201
103202                 // class surface as `lowzoom` around z17-z18.5 (based on latitude)
103203                 var lat = map.center()[1];
103204                 var lowzoom = linear$2()
103205                     .domain([-60, 0, 60])
103206                     .range([17, 18.5, 17])
103207                     .clamp(true);
103208
103209                 surface
103210                     .classed('low-zoom', zoom <= lowzoom(lat));
103211
103212
103213                 if (!difference) {
103214                     supersurface.call(context.background());
103215                     wrapper.call(drawLayers);
103216                 }
103217
103218                 // OSM
103219                 if (map.editableDataEnabled() || map.isInWideSelection()) {
103220                     context.loadTiles(projection);
103221                     drawEditable(difference, extent);
103222                 } else {
103223                     editOff();
103224                 }
103225
103226                 _transformStart = projection.transform();
103227
103228                 return map;
103229             }
103230
103231
103232
103233             var immediateRedraw = function(difference, extent) {
103234                 if (!difference && !extent) { cancelPendingRedraw(); }
103235                 redraw(difference, extent);
103236             };
103237
103238
103239             map.mouse = function() {
103240                 var event$1 = _mouseEvent || event;
103241                 if (event$1) {
103242                     var s;
103243                     while ((s = event$1.sourceEvent)) { event$1 = s; }
103244                     return _getMouseCoords(event$1);
103245                 }
103246                 return null;
103247             };
103248
103249
103250             // returns Lng/Lat
103251             map.mouseCoordinates = function() {
103252                 var coord = map.mouse() || pxCenter();
103253                 return projection.invert(coord);
103254             };
103255
103256
103257             map.dblclickEnable = function(val) {
103258                 if (!arguments.length) { return _dblClickEnabled; }
103259                 _dblClickEnabled = val;
103260                 return map;
103261             };
103262
103263
103264             map.redrawEnable = function(val) {
103265                 if (!arguments.length) { return _redrawEnabled; }
103266                 _redrawEnabled = val;
103267                 return map;
103268             };
103269
103270
103271             map.isTransformed = function() {
103272                 return _isTransformed;
103273             };
103274
103275
103276             function setTransform(t2, duration, force) {
103277                 var t = projection.transform();
103278                 if (!force && t2.k === t.k && t2.x === t.x && t2.y === t.y) { return false; }
103279
103280                 if (duration) {
103281                     _selection
103282                         .transition()
103283                         .duration(duration)
103284                         .on('start', function() { map.startEase(); })
103285                         .call(zoom.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
103286                 } else {
103287                     projection.transform(t2);
103288                     _transformStart = t2;
103289                     _selection.call(zoom.transform, _transformStart);
103290                 }
103291
103292                 return true;
103293             }
103294
103295
103296             function setCenterZoom(loc2, z2, duration, force) {
103297                 var c = map.center();
103298                 var z = map.zoom();
103299                 if (loc2[0] === c[0] && loc2[1] === c[1] && z2 === z && !force) { return false; }
103300
103301                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
103302
103303                 var k2 = clamp(geoZoomToScale(z2, TILESIZE), kMin, kMax);
103304                 proj.scale(k2);
103305
103306                 var t = proj.translate();
103307                 var point = proj(loc2);
103308
103309                 var center = pxCenter();
103310                 t[0] += center[0] - point[0];
103311                 t[1] += center[1] - point[1];
103312
103313                 return setTransform(identity$8.translate(t[0], t[1]).scale(k2), duration, force);
103314             }
103315
103316
103317             map.pan = function(delta, duration) {
103318                 var t = projection.translate();
103319                 var k = projection.scale();
103320
103321                 t[0] += delta[0];
103322                 t[1] += delta[1];
103323
103324                 if (duration) {
103325                     _selection
103326                         .transition()
103327                         .duration(duration)
103328                         .on('start', function() { map.startEase(); })
103329                         .call(zoom.transform, identity$8.translate(t[0], t[1]).scale(k));
103330                 } else {
103331                     projection.translate(t);
103332                     _transformStart = projection.transform();
103333                     _selection.call(zoom.transform, _transformStart);
103334                     dispatch$1.call('move', this, map);
103335                     immediateRedraw();
103336                 }
103337
103338                 return map;
103339             };
103340
103341
103342             map.dimensions = function(val) {
103343                 if (!arguments.length) { return _dimensions; }
103344
103345                 _dimensions = val;
103346                 drawLayers.dimensions(_dimensions);
103347                 context.background().dimensions(_dimensions);
103348                 projection.clipExtent([[0, 0], _dimensions]);
103349                 _getMouseCoords = utilFastMouse(supersurface.node());
103350
103351                 scheduleRedraw();
103352                 return map;
103353             };
103354
103355
103356             function zoomIn(delta) {
103357                 setCenterZoom(map.center(), ~~map.zoom() + delta, 250, true);
103358             }
103359
103360             function zoomOut(delta) {
103361                 setCenterZoom(map.center(), ~~map.zoom() - delta, 250, true);
103362             }
103363
103364             map.zoomIn = function() { zoomIn(1); };
103365             map.zoomInFurther = function() { zoomIn(4); };
103366             map.canZoomIn = function() { return map.zoom() < maxZoom; };
103367
103368             map.zoomOut = function() { zoomOut(1); };
103369             map.zoomOutFurther = function() { zoomOut(4); };
103370             map.canZoomOut = function() { return map.zoom() > minZoom; };
103371
103372             map.center = function(loc2) {
103373                 if (!arguments.length) {
103374                     return projection.invert(pxCenter());
103375                 }
103376
103377                 if (setCenterZoom(loc2, map.zoom())) {
103378                     dispatch$1.call('move', this, map);
103379                 }
103380
103381                 scheduleRedraw();
103382                 return map;
103383             };
103384
103385             map.unobscuredCenterZoomEase = function(loc, zoom) {
103386                 var offset = map.unobscuredOffsetPx();
103387
103388                 var proj = geoRawMercator().transform(projection.transform());  // copy projection
103389                 // use the target zoom to calculate the offset center
103390                 proj.scale(geoZoomToScale(zoom, TILESIZE));
103391
103392                 var locPx = proj(loc);
103393                 var offsetLocPx = [locPx[0] + offset[0], locPx[1] + offset[1]];
103394                 var offsetLoc = proj.invert(offsetLocPx);
103395
103396                 map.centerZoomEase(offsetLoc, zoom);
103397             };
103398
103399             map.unobscuredOffsetPx = function() {
103400                 var openPane = d3_select('.map-panes .map-pane.shown');
103401                 if (!openPane.empty()) {
103402                     return [openPane.node().offsetWidth/2, 0];
103403                 }
103404                 return [0, 0];
103405             };
103406
103407             map.zoom = function(z2) {
103408                 if (!arguments.length) {
103409                     return Math.max(geoScaleToZoom(projection.scale(), TILESIZE), 0);
103410                 }
103411
103412                 if (z2 < _minzoom) {
103413                     surface.interrupt();
103414                     uiFlash().text(t('cannot_zoom'))();
103415                     z2 = context.minEditableZoom();
103416                 }
103417
103418                 if (setCenterZoom(map.center(), z2)) {
103419                     dispatch$1.call('move', this, map);
103420                 }
103421
103422                 scheduleRedraw();
103423                 return map;
103424             };
103425
103426
103427             map.centerZoom = function(loc2, z2) {
103428                 if (setCenterZoom(loc2, z2)) {
103429                     dispatch$1.call('move', this, map);
103430                 }
103431
103432                 scheduleRedraw();
103433                 return map;
103434             };
103435
103436
103437             map.zoomTo = function(entity) {
103438                 var extent = entity.extent(context.graph());
103439                 if (!isFinite(extent.area())) { return map; }
103440
103441                 var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);
103442                 return map.centerZoom(extent.center(), z2);
103443             };
103444
103445
103446             map.centerEase = function(loc2, duration) {
103447                 duration = duration || 250;
103448                 setCenterZoom(loc2, map.zoom(), duration);
103449                 return map;
103450             };
103451
103452
103453             map.zoomEase = function(z2, duration) {
103454                 duration = duration || 250;
103455                 setCenterZoom(map.center(), z2, duration, false);
103456                 return map;
103457             };
103458
103459
103460             map.centerZoomEase = function(loc2, z2, duration) {
103461                 duration = duration || 250;
103462                 setCenterZoom(loc2, z2, duration, false);
103463                 return map;
103464             };
103465
103466
103467             map.transformEase = function(t2, duration) {
103468                 duration = duration || 250;
103469                 setTransform(t2, duration, false);
103470                 return map;
103471             };
103472
103473
103474             map.zoomToEase = function(obj, duration) {
103475                 var extent;
103476                 if (Array.isArray(obj)) {
103477                     obj.forEach(function(entity) {
103478                         var entityExtent = entity.extent(context.graph());
103479                         if (!extent) {
103480                             extent = entityExtent;
103481                         } else {
103482                             extent = extent.extend(entityExtent);
103483                         }
103484                     });
103485                 } else {
103486                     extent = obj.extent(context.graph());
103487                 }
103488                 if (!isFinite(extent.area())) { return map; }
103489
103490                 var z2 = clamp(map.trimmedExtentZoom(extent), 0, 20);
103491                 return map.centerZoomEase(extent.center(), z2, duration);
103492             };
103493
103494
103495             map.startEase = function() {
103496                 utilBindOnce(surface, 'mousedown.ease', function() {
103497                     map.cancelEase();
103498                 });
103499                 return map;
103500             };
103501
103502
103503             map.cancelEase = function() {
103504                 _selection.interrupt();
103505                 return map;
103506             };
103507
103508
103509             map.extent = function(val) {
103510                 if (!arguments.length) {
103511                     return new geoExtent(
103512                         projection.invert([0, _dimensions[1]]),
103513                         projection.invert([_dimensions[0], 0])
103514                     );
103515                 } else {
103516                     var extent = geoExtent(val);
103517                     map.centerZoom(extent.center(), map.extentZoom(extent));
103518                 }
103519             };
103520
103521
103522             map.trimmedExtent = function(val) {
103523                 if (!arguments.length) {
103524                     var headerY = 60;
103525                     var footerY = 30;
103526                     var pad = 10;
103527                     return new geoExtent(
103528                         projection.invert([pad, _dimensions[1] - footerY - pad]),
103529                         projection.invert([_dimensions[0] - pad, headerY + pad])
103530                     );
103531                 } else {
103532                     var extent = geoExtent(val);
103533                     map.centerZoom(extent.center(), map.trimmedExtentZoom(extent));
103534                 }
103535             };
103536
103537
103538             function calcExtentZoom(extent, dim) {
103539                 var tl = projection([extent[0][0], extent[1][1]]);
103540                 var br = projection([extent[1][0], extent[0][1]]);
103541
103542                 // Calculate maximum zoom that fits extent
103543                 var hFactor = (br[0] - tl[0]) / dim[0];
103544                 var vFactor = (br[1] - tl[1]) / dim[1];
103545                 var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
103546                 var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
103547                 var newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
103548
103549                 return newZoom;
103550             }
103551
103552
103553             map.extentZoom = function(val) {
103554                 return calcExtentZoom(geoExtent(val), _dimensions);
103555             };
103556
103557
103558             map.trimmedExtentZoom = function(val) {
103559                 var trimY = 120;
103560                 var trimX = 40;
103561                 var trimmed = [_dimensions[0] - trimX, _dimensions[1] - trimY];
103562                 return calcExtentZoom(geoExtent(val), trimmed);
103563             };
103564
103565
103566             map.withinEditableZoom = function() {
103567                 return map.zoom() >= context.minEditableZoom();
103568             };
103569
103570
103571             map.isInWideSelection = function() {
103572                 return !map.withinEditableZoom() && context.mode() && context.mode().id === 'select';
103573             };
103574
103575
103576             map.editableDataEnabled = function(skipZoomCheck) {
103577
103578                 var layer = context.layers().layer('osm');
103579                 if (!layer || !layer.enabled()) { return false; }
103580
103581                 return skipZoomCheck || map.withinEditableZoom();
103582             };
103583
103584
103585             map.notesEditable = function() {
103586                 var layer = context.layers().layer('notes');
103587                 if (!layer || !layer.enabled()) { return false; }
103588
103589                 return map.withinEditableZoom();
103590             };
103591
103592
103593             map.minzoom = function(val) {
103594                 if (!arguments.length) { return _minzoom; }
103595                 _minzoom = val;
103596                 return map;
103597             };
103598
103599
103600             map.layers = drawLayers;
103601
103602
103603             return utilRebind(map, dispatch$1, 'on');
103604         }
103605
103606         function rendererPhotos(context) {
103607             var dispatch$1 = dispatch('change');
103608             var _layerIDs = ['streetside', 'mapillary', 'mapillary-map-features', 'mapillary-signs', 'openstreetcam'];
103609             var _allPhotoTypes = ['flat', 'panoramic'];
103610             var _shownPhotoTypes = _allPhotoTypes.slice();   // shallow copy
103611
103612             function photos() {}
103613
103614             function updateStorage() {
103615                 if (window.mocha) { return; }
103616
103617                 var q = utilStringQs(window.location.hash.substring(1));
103618                 var enabled = context.layers().all().filter(function(d) {
103619                     return _layerIDs.indexOf(d.id) !== -1 && d.layer && d.layer.supported() && d.layer.enabled();
103620                 }).map(function(d) {
103621                     return d.id;
103622                 });
103623                 if (enabled.length) {
103624                     q.photo_overlay = enabled.join(',');
103625                 } else {
103626                     delete q.photo_overlay;
103627                 }
103628                 window.location.replace('#' + utilQsString(q, true));
103629             }
103630
103631             photos.overlayLayerIDs = function() {
103632                 return _layerIDs;
103633             };
103634
103635             photos.allPhotoTypes = function() {
103636                 return _allPhotoTypes;
103637             };
103638
103639             function showsLayer(id) {
103640                 var layer = context.layers().layer(id);
103641                 return layer && layer.supported() && layer.enabled();
103642             }
103643
103644             photos.shouldFilterByPhotoType = function() {
103645                 return showsLayer('mapillary') ||
103646                     (showsLayer('streetside') && showsLayer('openstreetcam'));
103647             };
103648
103649             photos.showsPhotoType = function(val) {
103650                 if (!photos.shouldFilterByPhotoType()) { return true; }
103651
103652                 return _shownPhotoTypes.indexOf(val) !== -1;
103653             };
103654
103655             photos.showsFlat = function() {
103656                 return photos.showsPhotoType('flat');
103657             };
103658
103659             photos.showsPanoramic = function() {
103660                 return photos.showsPhotoType('panoramic');
103661             };
103662
103663             photos.togglePhotoType = function(val) {
103664                 var index = _shownPhotoTypes.indexOf(val);
103665                 if (index !== -1) {
103666                     _shownPhotoTypes.splice(index, 1);
103667                 } else {
103668                     _shownPhotoTypes.push(val);
103669                 }
103670                 dispatch$1.call('change', this);
103671                 return photos;
103672             };
103673
103674             photos.init = function() {
103675                 var q = utilStringQs(window.location.hash.substring(1));
103676                 if (q.photo_overlay) {
103677                     var hashOverlayIDs = q.photo_overlay.replace(/;/g, ',').split(',');
103678                     hashOverlayIDs.forEach(function(id) {
103679                         var layer = context.layers().layer(id);
103680                         if (layer) { layer.enabled(true); }
103681                     });
103682                 }
103683
103684                 context.layers().on('change.rendererPhotos', updateStorage);
103685             };
103686
103687             return utilRebind(photos, dispatch$1, 'on');
103688         }
103689
103690         function uiAccount(context) {
103691             var osm = context.connection();
103692
103693
103694             function update(selection) {
103695                 if (!osm) { return; }
103696
103697                 if (!osm.authenticated()) {
103698                     selection.selectAll('#userLink, #logoutLink')
103699                         .classed('hide', true);
103700                     return;
103701                 }
103702
103703                 osm.userDetails(function(err, details) {
103704                     var userLink = selection.select('#userLink'),
103705                         logoutLink = selection.select('#logoutLink');
103706
103707                     userLink.html('');
103708                     logoutLink.html('');
103709
103710                     if (err || !details) { return; }
103711
103712                     selection.selectAll('#userLink, #logoutLink')
103713                         .classed('hide', false);
103714
103715                     // Link
103716                     userLink.append('a')
103717                         .attr('href', osm.userURL(details.display_name))
103718                         .attr('target', '_blank');
103719
103720                     // Add thumbnail or dont
103721                     if (details.image_url) {
103722                         userLink.append('img')
103723                             .attr('class', 'icon pre-text user-icon')
103724                             .attr('src', details.image_url);
103725                     } else {
103726                         userLink
103727                             .call(svgIcon('#iD-icon-avatar', 'pre-text light'));
103728                     }
103729
103730                     // Add user name
103731                     userLink.append('span')
103732                         .attr('class', 'label')
103733                         .text(details.display_name);
103734
103735                     logoutLink.append('a')
103736                         .attr('class', 'logout')
103737                         .attr('href', '#')
103738                         .text(t('logout'))
103739                         .on('click.logout', function() {
103740                             event.preventDefault();
103741                             osm.logout();
103742                         });
103743                 });
103744             }
103745
103746
103747             return function(selection) {
103748                 selection.append('li')
103749                     .attr('id', 'logoutLink')
103750                     .classed('hide', true);
103751
103752                 selection.append('li')
103753                     .attr('id', 'userLink')
103754                     .classed('hide', true);
103755
103756                 if (osm) {
103757                     osm.on('change.account', function() { update(selection); });
103758                     update(selection);
103759                 }
103760             };
103761         }
103762
103763         function uiAttribution(context) {
103764             var selection;
103765
103766
103767             function attribution(data, klass) {
103768                 var div = selection.selectAll('.' + klass)
103769                     .data([0]);
103770
103771                 div = div.enter()
103772                     .append('div')
103773                     .attr('class', klass)
103774                     .merge(div);
103775
103776
103777                 var background = div.selectAll('.attribution')
103778                     .data(data, function(d) { return d.name(); });
103779
103780                 background.exit()
103781                     .remove();
103782
103783                 background = background.enter()
103784                     .append('span')
103785                     .attr('class', 'attribution')
103786                     .each(function(d) {
103787                         if (d.terms_html) {
103788                             d3_select(this)
103789                                 .html(d.terms_html);
103790                             return;
103791                         }
103792
103793                         var selection;
103794                         if (d.terms_url) {
103795                             selection = d3_select(this)
103796                                 .append('a')
103797                                 .attr('href', d.terms_url)
103798                                 .attr('target', '_blank');
103799                         } else {
103800                             selection = d3_select(this);
103801                         }
103802
103803
103804                         var id_safe = d.id.replace(/\./g, '<TX_DOT>');
103805                         var terms_text = t('imagery.' + id_safe + '.attribution.text',
103806                             { default: d.terms_text || d.id || d.name() }
103807                         );
103808
103809                         if (d.icon && !d.overlay) {
103810                             selection
103811                                 .append('img')
103812                                 .attr('class', 'source-image')
103813                                 .attr('src', d.icon);
103814                         }
103815
103816                         selection
103817                             .append('span')
103818                             .attr('class', 'attribution-text')
103819                             .text(terms_text);
103820                     })
103821                     .merge(background);
103822
103823
103824                 var copyright = background.selectAll('.copyright-notice')
103825                     .data(function(d) {
103826                         var notice = d.copyrightNotices(context.map().zoom(), context.map().extent());
103827                         return notice ? [notice] : [];
103828                     });
103829
103830                 copyright.exit()
103831                     .remove();
103832
103833                 copyright = copyright.enter()
103834                     .append('span')
103835                     .attr('class', 'copyright-notice')
103836                     .merge(copyright);
103837
103838                 copyright
103839                     .text(String);
103840             }
103841
103842
103843             function update() {
103844                 attribution([context.background().baseLayerSource()], 'base-layer-attribution');
103845                 attribution(context.background().overlayLayerSources().filter(function (s) {
103846                     return s.validZoom(context.map().zoom());
103847                 }), 'overlay-layer-attribution');
103848             }
103849
103850
103851             return function(select) {
103852                 selection = select;
103853
103854                 context.background()
103855                     .on('change.attribution', update);
103856
103857                 context.map()
103858                     .on('move.attribution', throttle(update, 400, {leading: false}));
103859
103860                 update();
103861             };
103862         }
103863
103864         function uiBackgroundDisplayOptions(context) {
103865             var detected = utilDetect();
103866             var storedOpacity = context.storage('background-opacity');
103867             var minVal = 0.25;
103868             var maxVal = detected.cssfilters ? 2 : 1;
103869
103870             var sliders = detected.cssfilters
103871                 ? ['brightness', 'contrast', 'saturation', 'sharpness']
103872                 : ['brightness'];
103873
103874             var _options = {
103875                 brightness: (storedOpacity !== null ? (+storedOpacity) : 1),
103876                 contrast: 1,
103877                 saturation: 1,
103878                 sharpness: 1
103879             };
103880
103881             var _selection = d3_select(null);
103882
103883
103884             function clamp(x, min, max) {
103885                 return Math.max(min, Math.min(x, max));
103886             }
103887
103888
103889             function updateValue(d, val) {
103890                 if (!val && event && event.target) {
103891                     val = event.target.value;
103892                 }
103893
103894                 val = clamp(val, minVal, maxVal);
103895
103896                 _options[d] = val;
103897                 context.background()[d](val);
103898
103899                 if (d === 'brightness') {
103900                     context.storage('background-opacity', val);
103901                 }
103902
103903                 _selection
103904                     .call(render);
103905             }
103906
103907
103908             function render(selection) {
103909                 var container = selection.selectAll('.display-options-container')
103910                     .data([0]);
103911
103912                 var containerEnter = container.enter()
103913                     .append('div')
103914                     .attr('class', 'display-options-container controls-list');
103915
103916                 // add slider controls
103917                 var slidersEnter = containerEnter.selectAll('.display-control')
103918                     .data(sliders)
103919                     .enter()
103920                     .append('div')
103921                     .attr('class', function(d) { return 'display-control display-control-' + d; });
103922
103923                 slidersEnter
103924                     .append('h5')
103925                     .text(function(d) { return t('background.' + d); })
103926                     .append('span')
103927                     .attr('class', function(d) { return 'display-option-value display-option-value-' + d; });
103928
103929                 slidersEnter
103930                     .append('input')
103931                     .attr('class', function(d) { return 'display-option-input display-option-input-' + d; })
103932                     .attr('type', 'range')
103933                     .attr('min', minVal)
103934                     .attr('max', maxVal)
103935                     .attr('step', '0.05')
103936                     .on('input', function(d) {
103937                         var val = d3_select(this).property('value');
103938                         updateValue(d, val);
103939                     });
103940
103941                 slidersEnter
103942                     .append('button')
103943                     .attr('title', t('background.reset'))
103944                     .attr('class', function(d) { return 'display-option-reset display-option-reset-' + d; })
103945                     .on('click', function(d) {
103946                         if (event.button !== 0) { return; }
103947                         updateValue(d, 1);
103948                     })
103949                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
103950
103951                 // reset all button
103952                 containerEnter
103953                     .append('a')
103954                     .attr('class', 'display-option-resetlink')
103955                     .attr('href', '#')
103956                     .text(t('background.reset_all'))
103957                     .on('click', function() {
103958                         for (var i = 0; i < sliders.length; i++) {
103959                             updateValue(sliders[i],1);
103960                         }
103961                     });
103962
103963                 // update
103964                 container = containerEnter
103965                     .merge(container);
103966
103967                 container.selectAll('.display-option-input')
103968                     .property('value', function(d) { return _options[d]; });
103969
103970                 container.selectAll('.display-option-value')
103971                     .text(function(d) { return Math.floor(_options[d] * 100) + '%'; });
103972
103973                 container.selectAll('.display-option-reset')
103974                     .classed('disabled', function(d) { return _options[d] === 1; });
103975
103976                 // first time only, set brightness if needed
103977                 if (containerEnter.size() && _options.brightness !== 1) {
103978                     context.background().brightness(_options.brightness);
103979                 }
103980             }
103981
103982
103983             function backgroundDisplayOptions(selection) {
103984                 _selection = selection;
103985
103986                 selection
103987                     .call(uiDisclosure(context, 'background_display_options', true)
103988                         .title(t('background.display_options'))
103989                         .content(render)
103990                     );
103991             }
103992
103993
103994             return backgroundDisplayOptions;
103995         }
103996
103997         function uiBackgroundOffset(context) {
103998             var directions = [
103999                 ['right', [0.5, 0]],
104000                 ['top', [0, -0.5]],
104001                 ['left', [-0.5, 0]],
104002                 ['bottom', [0, 0.5]]
104003             ];
104004
104005
104006             function d3_eventCancel() {
104007                 event.stopPropagation();
104008                 event.preventDefault();
104009             }
104010
104011
104012             function updateValue() {
104013                 var meters = geoOffsetToMeters(context.background().offset());
104014                 var x = +meters[0].toFixed(2);
104015                 var y = +meters[1].toFixed(2);
104016
104017                 d3_selectAll('.nudge-inner-rect')
104018                     .select('input')
104019                     .classed('error', false)
104020                     .property('value', x + ', ' + y);
104021
104022                 d3_selectAll('.nudge-reset')
104023                     .classed('disabled', function() {
104024                         return (x === 0 && y === 0);
104025                     });
104026             }
104027
104028
104029             function resetOffset() {
104030                 context.background().offset([0, 0]);
104031                 updateValue();
104032             }
104033
104034
104035             function nudge(d) {
104036                 context.background().nudge(d, context.map().zoom());
104037                 updateValue();
104038             }
104039
104040
104041             function clickNudgeButton(d) {
104042                 var interval;
104043                 var timeout = window.setTimeout(function() {
104044                         interval = window.setInterval(nudge.bind(null, d), 100);
104045                     }, 500);
104046
104047                 function doneNudge() {
104048                     window.clearTimeout(timeout);
104049                     window.clearInterval(interval);
104050                     d3_select(window)
104051                         .on('mouseup.buttonoffset', null, true)
104052                         .on('mousedown.buttonoffset', null, true);
104053                 }
104054
104055                 d3_select(window)
104056                     .on('mouseup.buttonoffset', doneNudge, true)
104057                     .on('mousedown.buttonoffset', doneNudge, true);
104058
104059                 nudge(d);
104060             }
104061
104062
104063             function inputOffset() {
104064                 var input = d3_select(this);
104065                 var d = input.node().value;
104066
104067                 if (d === '') { return resetOffset(); }
104068
104069                 d = d.replace(/;/g, ',').split(',').map(function(n) {
104070                     // if n is NaN, it will always get mapped to false.
104071                     return !isNaN(n) && n;
104072                 });
104073
104074                 if (d.length !== 2 || !d[0] || !d[1]) {
104075                     input.classed('error', true);
104076                     return;
104077                 }
104078
104079                 context.background().offset(geoMetersToOffset(d));
104080                 updateValue();
104081             }
104082
104083
104084             function dragOffset() {
104085                 if (event.button !== 0) { return; }
104086
104087                 var origin = [event.clientX, event.clientY];
104088
104089                 context.container()
104090                     .append('div')
104091                     .attr('class', 'nudge-surface');
104092
104093                 d3_select(window)
104094                     .on('mousemove.offset', function() {
104095                         var latest = [event.clientX, event.clientY];
104096                         var d = [
104097                             -(origin[0] - latest[0]) / 4,
104098                             -(origin[1] - latest[1]) / 4
104099                         ];
104100
104101                         origin = latest;
104102                         nudge(d);
104103                     })
104104                     .on('mouseup.offset', function() {
104105                         if (event.button !== 0) { return; }
104106                         d3_selectAll('.nudge-surface')
104107                             .remove();
104108
104109                         d3_select(window)
104110                             .on('mousemove.offset', null)
104111                             .on('mouseup.offset', null);
104112                     });
104113             }
104114
104115
104116             function render(selection) {
104117                 var container = selection.selectAll('.nudge-container')
104118                     .data([0]);
104119
104120                 var containerEnter = container.enter()
104121                     .append('div')
104122                     .attr('class', 'nudge-container cf');
104123
104124                 containerEnter
104125                     .append('div')
104126                     .attr('class', 'nudge-instructions')
104127                     .text(t('background.offset'));
104128
104129                 var nudgeEnter = containerEnter
104130                     .append('div')
104131                     .attr('class', 'nudge-outer-rect')
104132                     .on('mousedown', dragOffset);
104133
104134                 nudgeEnter
104135                     .append('div')
104136                     .attr('class', 'nudge-inner-rect')
104137                     .append('input')
104138                     .on('change', inputOffset);
104139
104140                 containerEnter
104141                     .append('div')
104142                     .selectAll('button')
104143                     .data(directions).enter()
104144                     .append('button')
104145                     .attr('class', function(d) { return d[0] + ' nudge'; })
104146                     .on('contextmenu', d3_eventCancel)
104147                     .on('mousedown', function(d) {
104148                         if (event.button !== 0) { return; }
104149                         clickNudgeButton(d[1]);
104150                     });
104151
104152                 containerEnter
104153                     .append('button')
104154                     .attr('title', t('background.reset'))
104155                     .attr('class', 'nudge-reset disabled')
104156                     .on('contextmenu', d3_eventCancel)
104157                     .on('click', function() {
104158                         if (event.button !== 0) { return; }
104159                         resetOffset();
104160                     })
104161                     .call(svgIcon('#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo')));
104162
104163                 updateValue();
104164             }
104165
104166
104167             function backgroundOffset(selection) {
104168                 selection
104169                     .call(uiDisclosure(context, 'background_offset', false)
104170                         .title(t('background.fix_misalignment'))
104171                         .content(render)
104172                     );
104173             }
104174
104175
104176             context.background()
104177                 .on('change.backgroundOffset-update', updateValue);
104178
104179             return backgroundOffset;
104180         }
104181
104182         // import { utilGetDimensions } from '../util/dimensions';
104183
104184
104185         function uiMapInMap(context) {
104186
104187             function mapInMap(selection) {
104188                 var backgroundLayer = rendererTileLayer(context);
104189                 var overlayLayers = {};
104190                 var projection = geoRawMercator();
104191                 var dataLayer = svgData(projection, context).showLabels(false);
104192                 var debugLayer = svgDebug(projection, context);
104193                 var zoom = d3_zoom()
104194                     .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(24)])
104195                     .on('start', zoomStarted)
104196                     .on('zoom', zoomed)
104197                     .on('end', zoomEnded);
104198
104199                 var wrap = d3_select(null);
104200                 var tiles = d3_select(null);
104201                 var viewport = d3_select(null);
104202
104203                 var _isTransformed = false;
104204                 var _isHidden = true;
104205                 var _skipEvents = false;
104206                 var _gesture = null;
104207                 var _zDiff = 6;    // by default, minimap renders at (main zoom - 6)
104208                 var _dMini;        // dimensions of minimap
104209                 var _cMini;        // center pixel of minimap
104210                 var _tStart;       // transform at start of gesture
104211                 var _tCurr;        // transform at most recent event
104212                 var _timeoutID;
104213
104214
104215                 function zoomStarted() {
104216                     if (_skipEvents) { return; }
104217                     _tStart = _tCurr = projection.transform();
104218                     _gesture = null;
104219                 }
104220
104221
104222                 function zoomed() {
104223                     if (_skipEvents) { return; }
104224
104225                     var x = event.transform.x;
104226                     var y = event.transform.y;
104227                     var k = event.transform.k;
104228                     var isZooming = (k !== _tStart.k);
104229                     var isPanning = (x !== _tStart.x || y !== _tStart.y);
104230
104231                     if (!isZooming && !isPanning) {
104232                         return;  // no change
104233                     }
104234
104235                     // lock in either zooming or panning, don't allow both in minimap.
104236                     if (!_gesture) {
104237                         _gesture = isZooming ? 'zoom' : 'pan';
104238                     }
104239
104240                     var tMini = projection.transform();
104241                     var tX, tY, scale;
104242
104243                     if (_gesture === 'zoom') {
104244                         scale = k / tMini.k;
104245                         tX = (_cMini[0] / scale - _cMini[0]) * scale;
104246                         tY = (_cMini[1] / scale - _cMini[1]) * scale;
104247                     } else {
104248                         k = tMini.k;
104249                         scale = 1;
104250                         tX = x - tMini.x;
104251                         tY = y - tMini.y;
104252                     }
104253
104254                     utilSetTransform(tiles, tX, tY, scale);
104255                     utilSetTransform(viewport, 0, 0, scale);
104256                     _isTransformed = true;
104257                     _tCurr = identity$8.translate(x, y).scale(k);
104258
104259                     var zMain = geoScaleToZoom(context.projection.scale());
104260                     var zMini = geoScaleToZoom(k);
104261
104262                     _zDiff = zMain - zMini;
104263
104264                     queueRedraw();
104265                 }
104266
104267
104268                 function zoomEnded() {
104269                     if (_skipEvents) { return; }
104270                     if (_gesture !== 'pan') { return; }
104271
104272                     updateProjection();
104273                     _gesture = null;
104274                     context.map().center(projection.invert(_cMini));   // recenter main map..
104275                 }
104276
104277
104278                 function updateProjection() {
104279                     var loc = context.map().center();
104280                     var tMain = context.projection.transform();
104281                     var zMain = geoScaleToZoom(tMain.k);
104282                     var zMini = Math.max(zMain - _zDiff, 0.5);
104283                     var kMini = geoZoomToScale(zMini);
104284
104285                     projection
104286                         .translate([tMain.x, tMain.y])
104287                         .scale(kMini);
104288
104289                     var point = projection(loc);
104290                     var mouse = (_gesture === 'pan') ? geoVecSubtract([_tCurr.x, _tCurr.y], [_tStart.x, _tStart.y]) : [0, 0];
104291                     var xMini = _cMini[0] - point[0] + tMain.x + mouse[0];
104292                     var yMini = _cMini[1] - point[1] + tMain.y + mouse[1];
104293
104294                     projection
104295                         .translate([xMini, yMini])
104296                         .clipExtent([[0, 0], _dMini]);
104297
104298                     _tCurr = projection.transform();
104299
104300                     if (_isTransformed) {
104301                         utilSetTransform(tiles, 0, 0);
104302                         utilSetTransform(viewport, 0, 0);
104303                         _isTransformed = false;
104304                     }
104305
104306                     zoom
104307                         .scaleExtent([geoZoomToScale(0.5), geoZoomToScale(zMain - 3)]);
104308
104309                     _skipEvents = true;
104310                     wrap.call(zoom.transform, _tCurr);
104311                     _skipEvents = false;
104312                 }
104313
104314
104315                 function redraw() {
104316                     clearTimeout(_timeoutID);
104317                     if (_isHidden) { return; }
104318
104319                     updateProjection();
104320                     var zMini = geoScaleToZoom(projection.scale());
104321
104322                     // setup tile container
104323                     tiles = wrap
104324                         .selectAll('.map-in-map-tiles')
104325                         .data([0]);
104326
104327                     tiles = tiles.enter()
104328                         .append('div')
104329                         .attr('class', 'map-in-map-tiles')
104330                         .merge(tiles);
104331
104332                     // redraw background
104333                     backgroundLayer
104334                         .source(context.background().baseLayerSource())
104335                         .projection(projection)
104336                         .dimensions(_dMini);
104337
104338                     var background = tiles
104339                         .selectAll('.map-in-map-background')
104340                         .data([0]);
104341
104342                     background.enter()
104343                         .append('div')
104344                         .attr('class', 'map-in-map-background')
104345                         .merge(background)
104346                         .call(backgroundLayer);
104347
104348
104349                     // redraw overlay
104350                     var overlaySources = context.background().overlayLayerSources();
104351                     var activeOverlayLayers = [];
104352                     for (var i = 0; i < overlaySources.length; i++) {
104353                         if (overlaySources[i].validZoom(zMini)) {
104354                             if (!overlayLayers[i]) { overlayLayers[i] = rendererTileLayer(context); }
104355                             activeOverlayLayers.push(overlayLayers[i]
104356                                 .source(overlaySources[i])
104357                                 .projection(projection)
104358                                 .dimensions(_dMini));
104359                         }
104360                     }
104361
104362                     var overlay = tiles
104363                         .selectAll('.map-in-map-overlay')
104364                         .data([0]);
104365
104366                     overlay = overlay.enter()
104367                         .append('div')
104368                         .attr('class', 'map-in-map-overlay')
104369                         .merge(overlay);
104370
104371
104372                     var overlays = overlay
104373                         .selectAll('div')
104374                         .data(activeOverlayLayers, function(d) { return d.source().name(); });
104375
104376                     overlays.exit()
104377                         .remove();
104378
104379                     overlays = overlays.enter()
104380                         .append('div')
104381                         .merge(overlays)
104382                         .each(function(layer) { d3_select(this).call(layer); });
104383
104384
104385                     var dataLayers = tiles
104386                         .selectAll('.map-in-map-data')
104387                         .data([0]);
104388
104389                     dataLayers.exit()
104390                         .remove();
104391
104392                     dataLayers = dataLayers.enter()
104393                         .append('svg')
104394                         .attr('class', 'map-in-map-data')
104395                         .merge(dataLayers)
104396                         .call(dataLayer)
104397                         .call(debugLayer);
104398
104399
104400                     // redraw viewport bounding box
104401                     if (_gesture !== 'pan') {
104402                         var getPath = d3_geoPath(projection);
104403                         var bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
104404
104405                         viewport = wrap.selectAll('.map-in-map-viewport')
104406                             .data([0]);
104407
104408                         viewport = viewport.enter()
104409                             .append('svg')
104410                             .attr('class', 'map-in-map-viewport')
104411                             .merge(viewport);
104412
104413
104414                         var path = viewport.selectAll('.map-in-map-bbox')
104415                             .data([bbox]);
104416
104417                         path.enter()
104418                             .append('path')
104419                             .attr('class', 'map-in-map-bbox')
104420                             .merge(path)
104421                             .attr('d', getPath)
104422                             .classed('thick', function(d) { return getPath.area(d) < 30; });
104423                     }
104424                 }
104425
104426
104427                 function queueRedraw() {
104428                     clearTimeout(_timeoutID);
104429                     _timeoutID = setTimeout(function() { redraw(); }, 750);
104430                 }
104431
104432
104433                 function toggle() {
104434                     if (event) { event.preventDefault(); }
104435
104436                     _isHidden = !_isHidden;
104437
104438                     d3_select('.minimap-toggle-item')
104439                         .classed('active', !_isHidden)
104440                         .select('input')
104441                         .property('checked', !_isHidden);
104442
104443                     if (_isHidden) {
104444                         wrap
104445                             .style('display', 'block')
104446                             .style('opacity', '1')
104447                             .transition()
104448                             .duration(200)
104449                             .style('opacity', '0')
104450                             .on('end', function() {
104451                                 selection.selectAll('.map-in-map')
104452                                     .style('display', 'none');
104453                             });
104454                     } else {
104455                         wrap
104456                             .style('display', 'block')
104457                             .style('opacity', '0')
104458                             .transition()
104459                             .duration(200)
104460                             .style('opacity', '1')
104461                             .on('end', function() {
104462                                 redraw();
104463                             });
104464                     }
104465                 }
104466
104467
104468                 uiMapInMap.toggle = toggle;
104469
104470                 wrap = selection.selectAll('.map-in-map')
104471                     .data([0]);
104472
104473                 wrap = wrap.enter()
104474                     .append('div')
104475                     .attr('class', 'map-in-map')
104476                     .style('display', (_isHidden ? 'none' : 'block'))
104477                     .call(zoom)
104478                     .on('dblclick.zoom', null)
104479                     .merge(wrap);
104480
104481                 // reflow warning: Hardcode dimensions - currently can't resize it anyway..
104482                 _dMini = [200,150]; //utilGetDimensions(wrap);
104483                 _cMini = geoVecScale(_dMini, 0.5);
104484
104485                 context.map()
104486                     .on('drawn.map-in-map', function(drawn) {
104487                         if (drawn.full === true) {
104488                             redraw();
104489                         }
104490                     });
104491
104492                 redraw();
104493
104494                 context.keybinding()
104495                     .on(t('background.minimap.key'), toggle);
104496             }
104497
104498             return mapInMap;
104499         }
104500
104501         function uiConfirm(selection) {
104502             var modalSelection = uiModal(selection);
104503
104504             modalSelection.select('.modal')
104505                 .classed('modal-alert', true);
104506
104507             var section = modalSelection.select('.content');
104508
104509             section.append('div')
104510                 .attr('class', 'modal-section header');
104511
104512             section.append('div')
104513                 .attr('class', 'modal-section message-text');
104514
104515             var buttons = section.append('div')
104516                 .attr('class', 'modal-section buttons cf');
104517
104518
104519             modalSelection.okButton = function() {
104520                 buttons
104521                     .append('button')
104522                     .attr('class', 'button ok-button action')
104523                     .on('click.confirm', function() {
104524                         modalSelection.remove();
104525                     })
104526                     .text(t('confirm.okay'))
104527                     .node()
104528                     .focus();
104529
104530                 return modalSelection;
104531             };
104532
104533
104534             return modalSelection;
104535         }
104536
104537         function uiSettingsCustomBackground(context) {
104538             var dispatch$1 = dispatch('change');
104539
104540             function render(selection) {
104541                 // keep separate copies of original and current settings
104542                 var _origSettings = {
104543                     template: context.storage('background-custom-template')
104544                 };
104545                 var _currSettings = {
104546                     template: context.storage('background-custom-template')
104547                 };
104548
104549                 var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
104550                 var modal = uiConfirm(selection).okButton();
104551
104552                 modal
104553                     .classed('settings-modal settings-custom-background', true);
104554
104555                 modal.select('.modal-section.header')
104556                     .append('h3')
104557                     .text(t('settings.custom_background.header'));
104558
104559
104560                 var textSection = modal.select('.modal-section.message-text');
104561
104562                 textSection
104563                     .append('pre')
104564                     .attr('class', 'instructions-template')
104565                     .text(t('settings.custom_background.instructions', { example: example }));
104566
104567                 textSection
104568                     .append('textarea')
104569                     .attr('class', 'field-template')
104570                     .attr('placeholder', t('settings.custom_background.template.placeholder'))
104571                     .call(utilNoAuto)
104572                     .property('value', _currSettings.template);
104573
104574
104575                 // insert a cancel button
104576                 var buttonSection = modal.select('.modal-section.buttons');
104577
104578                 buttonSection
104579                     .insert('button', '.ok-button')
104580                     .attr('class', 'button cancel-button secondary-action')
104581                     .text(t('confirm.cancel'));
104582
104583
104584                 buttonSection.select('.cancel-button')
104585                     .on('click.cancel', clickCancel);
104586
104587                 buttonSection.select('.ok-button')
104588                     .attr('disabled', isSaveDisabled)
104589                     .on('click.save', clickSave);
104590
104591
104592                 function isSaveDisabled() {
104593                     return null;
104594                 }
104595
104596
104597                 // restore the original template
104598                 function clickCancel() {
104599                     textSection.select('.field-template').property('value', _origSettings.template);
104600                     context.storage('background-custom-template', _origSettings.template);
104601                     this.blur();
104602                     modal.close();
104603                 }
104604
104605                 // accept the current template
104606                 function clickSave() {
104607                     _currSettings.template = textSection.select('.field-template').property('value');
104608                     context.storage('background-custom-template', _currSettings.template);
104609                     this.blur();
104610                     modal.close();
104611                     dispatch$1.call('change', this, _currSettings);
104612                 }
104613             }
104614
104615             return utilRebind(render, dispatch$1, 'on');
104616         }
104617
104618         function uiBackground(context) {
104619             var key = t('background.key');
104620
104621             var _pane = d3_select(null);
104622
104623             var _customSource = context.background().findSource('custom');
104624             var _previousBackground = context.background().findSource(context.storage('background-last-used-toggle'));
104625
104626             var _backgroundList = d3_select(null);
104627             var _overlayList = d3_select(null);
104628             var _displayOptionsContainer = d3_select(null);
104629             var _offsetContainer = d3_select(null);
104630
104631             var backgroundDisplayOptions = uiBackgroundDisplayOptions(context);
104632             var backgroundOffset = uiBackgroundOffset(context);
104633
104634             var settingsCustomBackground = uiSettingsCustomBackground(context)
104635                 .on('change', customChanged);
104636
104637
104638             function setTooltips(selection) {
104639                 selection.each(function(d, i, nodes) {
104640                     var item = d3_select(this).select('label');
104641                     var span = item.select('span');
104642                     var placement = (i < nodes.length / 2) ? 'bottom' : 'top';
104643                     var description = d.description();
104644                     var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth'));
104645
104646                     item.call(tooltip().destroyAny);
104647
104648                     if (d === _previousBackground) {
104649                         item.call(tooltip()
104650                             .placement(placement)
104651                             .html(true)
104652                             .title(function() {
104653                                 var tip = '<div>' + t('background.switch') + '</div>';
104654                                 return uiTooltipHtml(tip, uiCmd('⌘' + key));
104655                             })
104656                         );
104657                     } else if (description || isOverflowing) {
104658                         item.call(tooltip()
104659                             .placement(placement)
104660                             .title(description || d.name())
104661                         );
104662                     }
104663                 });
104664             }
104665
104666
104667             function updateLayerSelections(selection) {
104668                 function active(d) {
104669                     return context.background().showsLayer(d);
104670                 }
104671
104672                 selection.selectAll('li')
104673                     .classed('active', active)
104674                     .classed('switch', function(d) { return d === _previousBackground; })
104675                     .call(setTooltips)
104676                     .selectAll('input')
104677                     .property('checked', active);
104678             }
104679
104680
104681             function chooseBackground(d) {
104682                 if (d.id === 'custom' && !d.template()) {
104683                     return editCustom();
104684                 }
104685
104686                 event.preventDefault();
104687                 _previousBackground = context.background().baseLayerSource();
104688                 context.storage('background-last-used-toggle', _previousBackground.id);
104689                 context.storage('background-last-used', d.id);
104690                 context.background().baseLayerSource(d);
104691                 _backgroundList.call(updateLayerSelections);
104692                 document.activeElement.blur();
104693             }
104694
104695
104696             function customChanged(d) {
104697                 if (d && d.template) {
104698                     _customSource.template(d.template);
104699                     chooseBackground(_customSource);
104700                 } else {
104701                     _customSource.template('');
104702                     chooseBackground(context.background().findSource('none'));
104703                 }
104704             }
104705
104706
104707             function editCustom() {
104708                 event.preventDefault();
104709                 context.container()
104710                     .call(settingsCustomBackground);
104711             }
104712
104713
104714             function chooseOverlay(d) {
104715                 event.preventDefault();
104716                 context.background().toggleOverlayLayer(d);
104717                 _overlayList.call(updateLayerSelections);
104718                 document.activeElement.blur();
104719             }
104720
104721
104722             function drawListItems(layerList, type, change, filter) {
104723                 var sources = context.background()
104724                     .sources(context.map().extent(), context.map().zoom(), true)
104725                     .filter(filter);
104726
104727                 var layerLinks = layerList.selectAll('li')
104728                     .data(sources, function(d) { return d.name(); });
104729
104730                 layerLinks.exit()
104731                     .remove();
104732
104733                 var enter = layerLinks.enter()
104734                     .append('li')
104735                     .classed('layer-custom', function(d) { return d.id === 'custom'; })
104736                     .classed('best', function(d) { return d.best(); });
104737
104738                 var label = enter
104739                     .append('label');
104740
104741                 label
104742                     .append('input')
104743                     .attr('type', type)
104744                     .attr('name', 'layers')
104745                     .on('change', change);
104746
104747                 label
104748                     .append('span')
104749                     .text(function(d) { return d.name(); });
104750
104751                 enter.filter(function(d) { return d.id === 'custom'; })
104752                     .append('button')
104753                     .attr('class', 'layer-browse')
104754                     .call(tooltip()
104755                         .title(t('settings.custom_background.tooltip'))
104756                         .placement((textDirection === 'rtl') ? 'right' : 'left')
104757                     )
104758                     .on('click', editCustom)
104759                     .call(svgIcon('#iD-icon-more'));
104760
104761                 enter.filter(function(d) { return d.best(); })
104762                     .append('div')
104763                     .attr('class', 'best')
104764                     .call(tooltip()
104765                         .title(t('background.best_imagery'))
104766                         .placement((textDirection === 'rtl') ? 'right' : 'left')
104767                     )
104768                     .append('span')
104769                     .html('&#9733;');
104770
104771
104772                 layerList.selectAll('li')
104773                     .sort(sortSources);
104774
104775                 layerList
104776                     .call(updateLayerSelections);
104777
104778
104779                 function sortSources(a, b) {
104780                     return a.best() && !b.best() ? -1
104781                         : b.best() && !a.best() ? 1
104782                         : d3_descending(a.area(), b.area()) || d3_ascending(a.name(), b.name()) || 0;
104783                 }
104784             }
104785
104786
104787             function renderBackgroundList(selection) {
104788
104789                 // the background list
104790                 var container = selection.selectAll('.layer-background-list')
104791                     .data([0]);
104792
104793                 _backgroundList = container.enter()
104794                     .append('ul')
104795                     .attr('class', 'layer-list layer-background-list')
104796                     .attr('dir', 'auto')
104797                     .merge(container);
104798
104799
104800                 // add minimap toggle below list
104801                 var bgExtrasListEnter = selection.selectAll('.bg-extras-list')
104802                     .data([0])
104803                     .enter()
104804                     .append('ul')
104805                     .attr('class', 'layer-list bg-extras-list');
104806
104807                 var minimapLabelEnter = bgExtrasListEnter
104808                     .append('li')
104809                     .attr('class', 'minimap-toggle-item')
104810                     .append('label')
104811                     .call(tooltip()
104812                         .html(true)
104813                         .title(uiTooltipHtml(t('background.minimap.tooltip'), t('background.minimap.key')))
104814                         .placement('top')
104815                     );
104816
104817                 minimapLabelEnter
104818                     .append('input')
104819                     .attr('type', 'checkbox')
104820                     .on('change', function() {
104821                         event.preventDefault();
104822                         uiMapInMap.toggle();
104823                     });
104824
104825                 minimapLabelEnter
104826                     .append('span')
104827                     .text(t('background.minimap.description'));
104828
104829
104830                 var panelLabelEnter = bgExtrasListEnter
104831                     .append('li')
104832                     .attr('class', 'background-panel-toggle-item')
104833                     .append('label')
104834                     .call(tooltip()
104835                         .html(true)
104836                         .title(uiTooltipHtml(t('background.panel.tooltip'), uiCmd('⌘⇧' + t('info_panels.background.key'))))
104837                         .placement('top')
104838                     );
104839
104840                 panelLabelEnter
104841                     .append('input')
104842                     .attr('type', 'checkbox')
104843                     .on('change', function() {
104844                         event.preventDefault();
104845                         context.ui().info.toggle('background');
104846                     });
104847
104848                 panelLabelEnter
104849                     .append('span')
104850                     .text(t('background.panel.description'));
104851
104852
104853                 // "Info / Report a Problem" link
104854                 selection.selectAll('.imagery-faq')
104855                     .data([0])
104856                     .enter()
104857                     .append('div')
104858                     .attr('class', 'imagery-faq')
104859                     .append('a')
104860                     .attr('target', '_blank')
104861                     .call(svgIcon('#iD-icon-out-link', 'inline'))
104862                     .attr('href', 'https://github.com/openstreetmap/iD/blob/develop/FAQ.md#how-can-i-report-an-issue-with-background-imagery')
104863                     .append('span')
104864                     .text(t('background.imagery_problem_faq'));
104865
104866                 updateBackgroundList();
104867             }
104868
104869
104870             function renderOverlayList(selection) {
104871                 var container = selection.selectAll('.layer-overlay-list')
104872                     .data([0]);
104873
104874                 _overlayList = container.enter()
104875                     .append('ul')
104876                     .attr('class', 'layer-list layer-overlay-list')
104877                     .attr('dir', 'auto')
104878                     .merge(container);
104879
104880                 updateOverlayList();
104881             }
104882
104883             function updateBackgroundList() {
104884                 _backgroundList
104885                     .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; });
104886             }
104887
104888             function updateOverlayList() {
104889                 _overlayList
104890                     .call(drawListItems, 'checkbox', chooseOverlay, function(d) { return !d.isHidden() && d.overlay; });
104891             }
104892
104893
104894             function update() {
104895                 if (!_pane.select('.disclosure-wrap-background_list').classed('hide')) {
104896                     updateBackgroundList();
104897                 }
104898
104899                 if (!_pane.select('.disclosure-wrap-overlay_list').classed('hide')) {
104900                     updateOverlayList();
104901                 }
104902
104903                 _displayOptionsContainer
104904                     .call(backgroundDisplayOptions);
104905
104906                 _offsetContainer
104907                     .call(backgroundOffset);
104908             }
104909
104910
104911             function quickSwitch() {
104912                 if (event) {
104913                     event.stopImmediatePropagation();
104914                     event.preventDefault();
104915                 }
104916                 if (_previousBackground) {
104917                     chooseBackground(_previousBackground);
104918                 }
104919             }
104920
104921             var paneTooltip = tooltip()
104922                 .placement((textDirection === 'rtl') ? 'right' : 'left')
104923                 .html(true)
104924                 .title(uiTooltipHtml(t('background.description'), key));
104925
104926             uiBackground.togglePane = function() {
104927                 if (event) { event.preventDefault(); }
104928                 paneTooltip.hide();
104929                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
104930             };
104931
104932             function hidePane() {
104933                 context.ui().togglePanes();
104934             }
104935
104936             uiBackground.renderToggleButton = function(selection) {
104937
104938                 selection
104939                     .append('button')
104940                     .on('click', uiBackground.togglePane)
104941                     .call(svgIcon('#iD-icon-layers', 'light'))
104942                     .call(paneTooltip);
104943             };
104944
104945             uiBackground.renderPane = function(selection) {
104946
104947                 _pane = selection
104948                     .append('div')
104949                     .attr('class', 'fillL map-pane background-pane hide')
104950                     .attr('pane', 'background');
104951
104952
104953                 var heading = _pane
104954                     .append('div')
104955                     .attr('class', 'pane-heading');
104956
104957                 heading
104958                     .append('h2')
104959                     .text(t('background.title'));
104960
104961                 heading
104962                     .append('button')
104963                     .on('click', hidePane)
104964                     .call(svgIcon('#iD-icon-close'));
104965
104966
104967                 var content = _pane
104968                     .append('div')
104969                     .attr('class', 'pane-content');
104970
104971                 // background list
104972                 content
104973                     .append('div')
104974                     .attr('class', 'background-background-list-container')
104975                     .call(uiDisclosure(context, 'background_list', true)
104976                         .title(t('background.backgrounds'))
104977                         .content(renderBackgroundList)
104978                     );
104979
104980                 // overlay list
104981                 content
104982                     .append('div')
104983                     .attr('class', 'background-overlay-list-container')
104984                     .call(uiDisclosure(context, 'overlay_list', true)
104985                         .title(t('background.overlays'))
104986                         .content(renderOverlayList)
104987                     );
104988
104989                 // display options
104990                 _displayOptionsContainer = content
104991                     .append('div')
104992                     .attr('class', 'background-display-options');
104993
104994                 // offset controls
104995                 _offsetContainer = content
104996                     .append('div')
104997                     .attr('class', 'background-offset');
104998
104999
105000                 // add listeners
105001                 context.map()
105002                     .on('move.background-update',
105003                         debounce(function() { window.requestIdleCallback(update); }, 1000)
105004                     );
105005
105006
105007                 context.background()
105008                     .on('change.background-update', update);
105009
105010
105011                 update();
105012
105013                 context.keybinding()
105014                     .on(key, uiBackground.togglePane)
105015                     .on(uiCmd('⌘' + key), quickSwitch);
105016             };
105017
105018             return uiBackground;
105019         }
105020
105021         function uiContributors(context) {
105022             var osm = context.connection(),
105023                 debouncedUpdate = debounce(function() { update(); }, 1000),
105024                 limit = 4,
105025                 hidden = false,
105026                 wrap = d3_select(null);
105027
105028
105029             function update() {
105030                 if (!osm) { return; }
105031
105032                 var users = {},
105033                     entities = context.intersects(context.map().extent());
105034
105035                 entities.forEach(function(entity) {
105036                     if (entity && entity.user) { users[entity.user] = true; }
105037                 });
105038
105039                 var u = Object.keys(users),
105040                     subset = u.slice(0, u.length > limit ? limit - 1 : limit);
105041
105042                 wrap.html('')
105043                     .call(svgIcon('#iD-icon-nearby', 'pre-text light'));
105044
105045                 var userList = d3_select(document.createElement('span'));
105046
105047                 userList.selectAll()
105048                     .data(subset)
105049                     .enter()
105050                     .append('a')
105051                     .attr('class', 'user-link')
105052                     .attr('href', function(d) { return osm.userURL(d); })
105053                     .attr('target', '_blank')
105054                     .text(String);
105055
105056                 if (u.length > limit) {
105057                     var count = d3_select(document.createElement('span'));
105058
105059                     count.append('a')
105060                         .attr('target', '_blank')
105061                         .attr('href', function() {
105062                             return osm.changesetsURL(context.map().center(), context.map().zoom());
105063                         })
105064                         .text(u.length - limit + 1);
105065
105066                     wrap.append('span')
105067                         .html(t('contributors.truncated_list', { users: userList.html(), count: count.html() }));
105068
105069                 } else {
105070                     wrap.append('span')
105071                         .html(t('contributors.list', { users: userList.html() }));
105072                 }
105073
105074                 if (!u.length) {
105075                     hidden = true;
105076                     wrap
105077                         .transition()
105078                         .style('opacity', 0);
105079
105080                 } else if (hidden) {
105081                     wrap
105082                         .transition()
105083                         .style('opacity', 1);
105084                 }
105085             }
105086
105087
105088             return function(selection) {
105089                 if (!osm) { return; }
105090                 wrap = selection;
105091                 update();
105092
105093                 osm.on('loaded.contributors', debouncedUpdate);
105094                 context.map().on('move.contributors', debouncedUpdate);
105095             };
105096         }
105097
105098         function uiFeatureInfo(context) {
105099             function update(selection) {
105100                 var features = context.features();
105101                 var stats = features.stats();
105102                 var count = 0;
105103                 var hiddenList = features.hidden().map(function(k) {
105104                     if (stats[k]) {
105105                         count += stats[k];
105106                         return String(stats[k]) + ' ' + t('feature.' + k + '.description');
105107                     }
105108                 }).filter(Boolean);
105109
105110                 selection.html('');
105111
105112                 if (hiddenList.length) {
105113                     var tooltipBehavior = tooltip()
105114                         .placement('top')
105115                         .html(true)
105116                         .title(function() {
105117                             return uiTooltipHtml(hiddenList.join('<br/>'));
105118                         });
105119
105120                     selection.append('a')
105121                         .attr('class', 'chip')
105122                         .attr('href', '#')
105123                         .attr('tabindex', -1)
105124                         .html(t('feature_info.hidden_warning', { count: count }))
105125                         .call(tooltipBehavior)
105126                         .on('click', function() {
105127                             tooltipBehavior.hide();
105128                             event.preventDefault();
105129                             // open the Map Data pane
105130                             context.ui().togglePanes(d3_select('.map-panes .map-data-pane'));
105131                         });
105132                 }
105133
105134                 selection
105135                     .classed('hide', !hiddenList.length);
105136             }
105137
105138
105139             return function(selection) {
105140                 update(selection);
105141
105142                 context.features().on('change.feature_info', function() {
105143                     update(selection);
105144                 });
105145             };
105146         }
105147
105148         function uiFullScreen(context) {
105149             var element = context.container().node();
105150             // var button = d3_select(null);
105151
105152
105153             function getFullScreenFn() {
105154                 if (element.requestFullscreen) {
105155                     return element.requestFullscreen;
105156                 } else if (element.msRequestFullscreen) {
105157                     return element.msRequestFullscreen;
105158                 } else if (element.mozRequestFullScreen) {
105159                     return element.mozRequestFullScreen;
105160                 } else if (element.webkitRequestFullscreen) {
105161                     return element.webkitRequestFullscreen;
105162                 }
105163             }
105164
105165
105166             function getExitFullScreenFn() {
105167                 if (document.exitFullscreen) {
105168                     return document.exitFullscreen;
105169                 } else if (document.msExitFullscreen) {
105170                     return document.msExitFullscreen;
105171                 } else if (document.mozCancelFullScreen) {
105172                     return document.mozCancelFullScreen;
105173                 } else if (document.webkitExitFullscreen) {
105174                     return document.webkitExitFullscreen;
105175                 }
105176             }
105177
105178
105179             function isFullScreen() {
105180                 return document.fullscreenElement ||
105181                     document.mozFullScreenElement ||
105182                     document.webkitFullscreenElement ||
105183                     document.msFullscreenElement;
105184             }
105185
105186
105187             function isSupported() {
105188                 return !!getFullScreenFn();
105189             }
105190
105191
105192             function fullScreen() {
105193                 event.preventDefault();
105194                 if (!isFullScreen()) {
105195                     // button.classed('active', true);
105196                     getFullScreenFn().apply(element);
105197                 } else {
105198                     // button.classed('active', false);
105199                     getExitFullScreenFn().apply(document);
105200                 }
105201             }
105202
105203
105204             return function() { // selection) {
105205                 if (!isSupported()) { return; }
105206
105207                 // button = selection.append('button')
105208                 //     .attr('title', t('full_screen'))
105209                 //     .attr('tabindex', -1)
105210                 //     .on('click', fullScreen)
105211                 //     .call(tooltip);
105212
105213                 // button.append('span')
105214                 //     .attr('class', 'icon full-screen');
105215
105216                 var detected = utilDetect();
105217                 var keys = (detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11']);
105218                 context.keybinding().on(keys, fullScreen);
105219             };
105220         }
105221
105222         function uiGeolocate(context) {
105223             var geoOptions = { enableHighAccuracy: false, timeout: 6000 /* 6sec */ };
105224             var locating = uiLoading(context).message(t('geolocate.locating')).blocking(true);
105225             var layer = context.layers().layer('geolocate');
105226             var _position;
105227             var _extent;
105228             var _timeoutID;
105229
105230
105231             function click() {
105232                 if (context.inIntro()) { return; }
105233                 context.enter(modeBrowse(context));
105234                 if (!layer.enabled()) {
105235                     if (!_position) {
105236                         context.container().call(locating);
105237                         navigator.geolocation.getCurrentPosition(success, error, geoOptions);
105238                     } else {
105239                         zoomTo();
105240                     }
105241                 } else {
105242                     layer.enabled(null, false);
105243                 }
105244                 // This timeout ensures that we still call finish() even if
105245                 // the user declines to share their location in Firefox
105246                 _timeoutID = setTimeout(finish, 10000 /* 10sec */ );
105247             }
105248
105249             function zoomTo() {
105250                 var map = context.map();
105251                 layer.enabled(_position, true);
105252                 map.centerZoomEase(_extent.center(), Math.min(20, map.extentZoom(_extent)));
105253             }
105254
105255
105256             function success(geolocation) {
105257                 _position = geolocation;
105258                 var coords = _position.coords;
105259                 _extent = geoExtent([coords.longitude, coords.latitude]).padByMeters(coords.accuracy);
105260                 zoomTo();
105261                 finish();
105262             }
105263
105264
105265             function error() {
105266                 finish();
105267             }
105268
105269
105270             function finish() {
105271                 locating.close();  // unblock ui
105272                 if (_timeoutID) { clearTimeout(_timeoutID); }
105273                 _timeoutID = undefined;
105274             }
105275
105276
105277             return function(selection) {
105278                 if (!navigator.geolocation) { return; }
105279
105280                 selection
105281                     .append('button')
105282                     .attr('title', t('geolocate.title'))
105283                     .on('click', click)
105284                     .call(svgIcon('#iD-icon-geolocate', 'light'))
105285                     .call(tooltip()
105286                         .placement((textDirection === 'rtl') ? 'right' : 'left'));
105287             };
105288         }
105289
105290         var defaults$1 = createCommonjsModule(function (module) {
105291         function getDefaults() {
105292           return {
105293             baseUrl: null,
105294             breaks: false,
105295             gfm: true,
105296             headerIds: true,
105297             headerPrefix: '',
105298             highlight: null,
105299             langPrefix: 'language-',
105300             mangle: true,
105301             pedantic: false,
105302             renderer: null,
105303             sanitize: false,
105304             sanitizer: null,
105305             silent: false,
105306             smartLists: false,
105307             smartypants: false,
105308             xhtml: false
105309           };
105310         }
105311
105312         function changeDefaults(newDefaults) {
105313           module.exports.defaults = newDefaults;
105314         }
105315
105316         module.exports = {
105317           defaults: getDefaults(),
105318           getDefaults: getDefaults,
105319           changeDefaults: changeDefaults
105320         };
105321         });
105322         var defaults_1 = defaults$1.defaults;
105323         var defaults_2 = defaults$1.getDefaults;
105324         var defaults_3 = defaults$1.changeDefaults;
105325
105326         /**
105327          * Helpers
105328          */
105329         var escapeTest = /[&<>"']/;
105330         var escapeReplace = /[&<>"']/g;
105331         var escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
105332         var escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
105333         var escapeReplacements = {
105334           '&': '&amp;',
105335           '<': '&lt;',
105336           '>': '&gt;',
105337           '"': '&quot;',
105338           "'": '&#39;'
105339         };
105340         var getEscapeReplacement = function (ch) { return escapeReplacements[ch]; };
105341         function escape$1(html, encode) {
105342           if (encode) {
105343             if (escapeTest.test(html)) {
105344               return html.replace(escapeReplace, getEscapeReplacement);
105345             }
105346           } else {
105347             if (escapeTestNoEncode.test(html)) {
105348               return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
105349             }
105350           }
105351
105352           return html;
105353         }
105354
105355         var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
105356
105357         function unescape$1(html) {
105358           // explicitly match decimal, hex, and named HTML entities
105359           return html.replace(unescapeTest, function (_, n) {
105360             n = n.toLowerCase();
105361             if (n === 'colon') { return ':'; }
105362             if (n.charAt(0) === '#') {
105363               return n.charAt(1) === 'x'
105364                 ? String.fromCharCode(parseInt(n.substring(2), 16))
105365                 : String.fromCharCode(+n.substring(1));
105366             }
105367             return '';
105368           });
105369         }
105370
105371         var caret = /(^|[^\[])\^/g;
105372         function edit(regex, opt) {
105373           regex = regex.source || regex;
105374           opt = opt || '';
105375           var obj = {
105376             replace: function (name, val) {
105377               val = val.source || val;
105378               val = val.replace(caret, '$1');
105379               regex = regex.replace(name, val);
105380               return obj;
105381             },
105382             getRegex: function () {
105383               return new RegExp(regex, opt);
105384             }
105385           };
105386           return obj;
105387         }
105388
105389         var nonWordAndColonTest = /[^\w:]/g;
105390         var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
105391         function cleanUrl(sanitize, base, href) {
105392           if (sanitize) {
105393             var prot;
105394             try {
105395               prot = decodeURIComponent(unescape$1(href))
105396                 .replace(nonWordAndColonTest, '')
105397                 .toLowerCase();
105398             } catch (e) {
105399               return null;
105400             }
105401             if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
105402               return null;
105403             }
105404           }
105405           if (base && !originIndependentUrl.test(href)) {
105406             href = resolveUrl$1(base, href);
105407           }
105408           try {
105409             href = encodeURI(href).replace(/%25/g, '%');
105410           } catch (e) {
105411             return null;
105412           }
105413           return href;
105414         }
105415
105416         var baseUrls = {};
105417         var justDomain = /^[^:]+:\/*[^/]*$/;
105418         var protocol = /^([^:]+:)[\s\S]*$/;
105419         var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
105420
105421         function resolveUrl$1(base, href) {
105422           if (!baseUrls[' ' + base]) {
105423             // we can ignore everything in base after the last slash of its path component,
105424             // but we might need to add _that_
105425             // https://tools.ietf.org/html/rfc3986#section-3
105426             if (justDomain.test(base)) {
105427               baseUrls[' ' + base] = base + '/';
105428             } else {
105429               baseUrls[' ' + base] = rtrim(base, '/', true);
105430             }
105431           }
105432           base = baseUrls[' ' + base];
105433           var relativeBase = base.indexOf(':') === -1;
105434
105435           if (href.substring(0, 2) === '//') {
105436             if (relativeBase) {
105437               return href;
105438             }
105439             return base.replace(protocol, '$1') + href;
105440           } else if (href.charAt(0) === '/') {
105441             if (relativeBase) {
105442               return href;
105443             }
105444             return base.replace(domain, '$1') + href;
105445           } else {
105446             return base + href;
105447           }
105448         }
105449
105450         var noopTest = { exec: function noopTest() {} };
105451
105452         function merge$1(obj) {
105453           var arguments$1 = arguments;
105454
105455           var i = 1,
105456             target,
105457             key;
105458
105459           for (; i < arguments.length; i++) {
105460             target = arguments$1[i];
105461             for (key in target) {
105462               if (Object.prototype.hasOwnProperty.call(target, key)) {
105463                 obj[key] = target[key];
105464               }
105465             }
105466           }
105467
105468           return obj;
105469         }
105470
105471         function splitCells(tableRow, count) {
105472           // ensure that every cell-delimiting pipe has a space
105473           // before it to distinguish it from an escaped pipe
105474           var row = tableRow.replace(/\|/g, function (match, offset, str) {
105475               var escaped = false,
105476                 curr = offset;
105477               while (--curr >= 0 && str[curr] === '\\') { escaped = !escaped; }
105478               if (escaped) {
105479                 // odd number of slashes means | is escaped
105480                 // so we leave it alone
105481                 return '|';
105482               } else {
105483                 // add space before unescaped |
105484                 return ' |';
105485               }
105486             }),
105487             cells = row.split(/ \|/);
105488           var i = 0;
105489
105490           if (cells.length > count) {
105491             cells.splice(count);
105492           } else {
105493             while (cells.length < count) { cells.push(''); }
105494           }
105495
105496           for (; i < cells.length; i++) {
105497             // leading or trailing whitespace is ignored per the gfm spec
105498             cells[i] = cells[i].trim().replace(/\\\|/g, '|');
105499           }
105500           return cells;
105501         }
105502
105503         // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
105504         // /c*$/ is vulnerable to REDOS.
105505         // invert: Remove suffix of non-c chars instead. Default falsey.
105506         function rtrim(str, c, invert) {
105507           var l = str.length;
105508           if (l === 0) {
105509             return '';
105510           }
105511
105512           // Length of suffix matching the invert condition.
105513           var suffLen = 0;
105514
105515           // Step left until we fail to match the invert condition.
105516           while (suffLen < l) {
105517             var currChar = str.charAt(l - suffLen - 1);
105518             if (currChar === c && !invert) {
105519               suffLen++;
105520             } else if (currChar !== c && invert) {
105521               suffLen++;
105522             } else {
105523               break;
105524             }
105525           }
105526
105527           return str.substr(0, l - suffLen);
105528         }
105529
105530         function findClosingBracket(str, b) {
105531           if (str.indexOf(b[1]) === -1) {
105532             return -1;
105533           }
105534           var l = str.length;
105535           var level = 0,
105536             i = 0;
105537           for (; i < l; i++) {
105538             if (str[i] === '\\') {
105539               i++;
105540             } else if (str[i] === b[0]) {
105541               level++;
105542             } else if (str[i] === b[1]) {
105543               level--;
105544               if (level < 0) {
105545                 return i;
105546               }
105547             }
105548           }
105549           return -1;
105550         }
105551
105552         function checkSanitizeDeprecation(opt) {
105553           if (opt && opt.sanitize && !opt.silent) {
105554             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');
105555           }
105556         }
105557
105558         var helpers$1 = {
105559           escape: escape$1,
105560           unescape: unescape$1,
105561           edit: edit,
105562           cleanUrl: cleanUrl,
105563           resolveUrl: resolveUrl$1,
105564           noopTest: noopTest,
105565           merge: merge$1,
105566           splitCells: splitCells,
105567           rtrim: rtrim,
105568           findClosingBracket: findClosingBracket,
105569           checkSanitizeDeprecation: checkSanitizeDeprecation
105570         };
105571
105572         var noopTest$1 = helpers$1.noopTest;
105573         var edit$1 = helpers$1.edit;
105574         var merge$2 = helpers$1.merge;
105575
105576         /**
105577          * Block-Level Grammar
105578          */
105579         var block = {
105580           newline: /^\n+/,
105581           code: /^( {4}[^\n]+\n*)+/,
105582           fences: /^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
105583           hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
105584           heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
105585           blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
105586           list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
105587           html: '^ {0,3}(?:' // optional indentation
105588             + '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
105589             + '|comment[^\\n]*(\\n+|$)' // (2)
105590             + '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
105591             + '|<![A-Z][\\s\\S]*?>\\n*' // (4)
105592             + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
105593             + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
105594             + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
105595             + '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
105596             + ')',
105597           def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
105598           nptable: noopTest$1,
105599           table: noopTest$1,
105600           lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
105601           // regex template, placeholders will be replaced according to different paragraph
105602           // interruption rules of commonmark and the original markdown spec:
105603           _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
105604           text: /^[^\n]+/
105605         };
105606
105607         block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
105608         block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
105609         block.def = edit$1(block.def)
105610           .replace('label', block._label)
105611           .replace('title', block._title)
105612           .getRegex();
105613
105614         block.bullet = /(?:[*+-]|\d{1,9}\.)/;
105615         block.item = /^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/;
105616         block.item = edit$1(block.item, 'gm')
105617           .replace(/bull/g, block.bullet)
105618           .getRegex();
105619
105620         block.list = edit$1(block.list)
105621           .replace(/bull/g, block.bullet)
105622           .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
105623           .replace('def', '\\n+(?=' + block.def.source + ')')
105624           .getRegex();
105625
105626         block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
105627           + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
105628           + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
105629           + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
105630           + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
105631           + '|track|ul';
105632         block._comment = /<!--(?!-?>)[\s\S]*?-->/;
105633         block.html = edit$1(block.html, 'i')
105634           .replace('comment', block._comment)
105635           .replace('tag', block._tag)
105636           .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
105637           .getRegex();
105638
105639         block.paragraph = edit$1(block._paragraph)
105640           .replace('hr', block.hr)
105641           .replace('heading', ' {0,3}#{1,6} +')
105642           .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
105643           .replace('blockquote', ' {0,3}>')
105644           .replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n')
105645           .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
105646           .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)')
105647           .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
105648           .getRegex();
105649
105650         block.blockquote = edit$1(block.blockquote)
105651           .replace('paragraph', block.paragraph)
105652           .getRegex();
105653
105654         /**
105655          * Normal Block Grammar
105656          */
105657
105658         block.normal = merge$2({}, block);
105659
105660         /**
105661          * GFM Block Grammar
105662          */
105663
105664         block.gfm = merge$2({}, block.normal, {
105665           nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
105666           table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
105667         });
105668
105669         /**
105670          * Pedantic grammar (original John Gruber's loose markdown specification)
105671          */
105672
105673         block.pedantic = merge$2({}, block.normal, {
105674           html: edit$1(
105675             '^ *(?:comment *(?:\\n|\\s*$)'
105676             + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
105677             + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
105678             .replace('comment', block._comment)
105679             .replace(/tag/g, '(?!(?:'
105680               + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
105681               + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
105682               + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
105683             .getRegex(),
105684           def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
105685           heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
105686           fences: noopTest$1, // fences not supported
105687           paragraph: edit$1(block.normal._paragraph)
105688             .replace('hr', block.hr)
105689             .replace('heading', ' *#{1,6} *[^\n]')
105690             .replace('lheading', block.lheading)
105691             .replace('blockquote', ' {0,3}>')
105692             .replace('|fences', '')
105693             .replace('|list', '')
105694             .replace('|html', '')
105695             .getRegex()
105696         });
105697
105698         /**
105699          * Inline-Level Grammar
105700          */
105701         var inline = {
105702           escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
105703           autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
105704           url: noopTest$1,
105705           tag: '^comment'
105706             + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
105707             + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
105708             + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
105709             + '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
105710             + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
105711           link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
105712           reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
105713           nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
105714           strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
105715           em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
105716           code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
105717           br: /^( {2,}|\\)\n(?!\s*$)/,
105718           del: noopTest$1,
105719           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
105720         };
105721
105722         // list of punctuation marks from common mark spec
105723         // without ` and ] to workaround Rule 17 (inline code blocks/links)
105724         inline._punctuation = '!"#$%&\'()*+,\\-./:;<=>?@\\[^_{|}~';
105725         inline.em = edit$1(inline.em).replace(/punctuation/g, inline._punctuation).getRegex();
105726
105727         inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
105728
105729         inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
105730         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])?)+(?![-_])/;
105731         inline.autolink = edit$1(inline.autolink)
105732           .replace('scheme', inline._scheme)
105733           .replace('email', inline._email)
105734           .getRegex();
105735
105736         inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
105737
105738         inline.tag = edit$1(inline.tag)
105739           .replace('comment', block._comment)
105740           .replace('attribute', inline._attribute)
105741           .getRegex();
105742
105743         inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
105744         inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
105745         inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
105746
105747         inline.link = edit$1(inline.link)
105748           .replace('label', inline._label)
105749           .replace('href', inline._href)
105750           .replace('title', inline._title)
105751           .getRegex();
105752
105753         inline.reflink = edit$1(inline.reflink)
105754           .replace('label', inline._label)
105755           .getRegex();
105756
105757         /**
105758          * Normal Inline Grammar
105759          */
105760
105761         inline.normal = merge$2({}, inline);
105762
105763         /**
105764          * Pedantic Inline Grammar
105765          */
105766
105767         inline.pedantic = merge$2({}, inline.normal, {
105768           strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
105769           em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
105770           link: edit$1(/^!?\[(label)\]\((.*?)\)/)
105771             .replace('label', inline._label)
105772             .getRegex(),
105773           reflink: edit$1(/^!?\[(label)\]\s*\[([^\]]*)\]/)
105774             .replace('label', inline._label)
105775             .getRegex()
105776         });
105777
105778         /**
105779          * GFM Inline Grammar
105780          */
105781
105782         inline.gfm = merge$2({}, inline.normal, {
105783           escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),
105784           _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
105785           url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
105786           _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
105787           del: /^~+(?=\S)([\s\S]*?\S)~+/,
105788           text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
105789         });
105790
105791         inline.gfm.url = edit$1(inline.gfm.url, 'i')
105792           .replace('email', inline.gfm._extended_email)
105793           .getRegex();
105794         /**
105795          * GFM + Line Breaks Inline Grammar
105796          */
105797
105798         inline.breaks = merge$2({}, inline.gfm, {
105799           br: edit$1(inline.br).replace('{2,}', '*').getRegex(),
105800           text: edit$1(inline.gfm.text)
105801             .replace('\\b_', '\\b_| {2,}\\n')
105802             .replace(/\{2,\}/g, '*')
105803             .getRegex()
105804         });
105805
105806         var rules = {
105807           block: block,
105808           inline: inline
105809         };
105810
105811         var defaults$2 = defaults$1.defaults;
105812         var block$1 = rules.block;
105813         var rtrim$1 = helpers$1.rtrim;
105814         var splitCells$1 = helpers$1.splitCells;
105815         var escape$2 = helpers$1.escape;
105816
105817         /**
105818          * Block Lexer
105819          */
105820         var Lexer_1 = /*@__PURE__*/(function () {
105821           function Lexer(options) {
105822             this.tokens = [];
105823             this.tokens.links = Object.create(null);
105824             this.options = options || defaults$2;
105825             this.rules = block$1.normal;
105826
105827             if (this.options.pedantic) {
105828               this.rules = block$1.pedantic;
105829             } else if (this.options.gfm) {
105830               this.rules = block$1.gfm;
105831             }
105832           }
105833
105834           var staticAccessors = { rules: { configurable: true } };
105835
105836           /**
105837            * Expose Block Rules
105838            */
105839           staticAccessors.rules.get = function () {
105840             return block$1;
105841           };
105842
105843           /**
105844            * Static Lex Method
105845            */
105846           Lexer.lex = function lex (src, options) {
105847             var lexer = new Lexer(options);
105848             return lexer.lex(src);
105849           };
105850           /**
105851            * Preprocessing
105852            */
105853           Lexer.prototype.lex = function lex (src) {
105854             src = src
105855               .replace(/\r\n|\r/g, '\n')
105856               .replace(/\t/g, '    ');
105857
105858             return this.token(src, true);
105859           };
105860           /**
105861            * Lexing
105862            */
105863           Lexer.prototype.token = function token (src, top) {
105864             src = src.replace(/^ +$/gm, '');
105865             var next,
105866               loose,
105867               cap,
105868               bull,
105869               b,
105870               item,
105871               listStart,
105872               listItems,
105873               t,
105874               space,
105875               i,
105876               tag,
105877               l,
105878               isordered,
105879               istask,
105880               ischecked;
105881
105882             while (src) {
105883               // newline
105884               if (cap = this.rules.newline.exec(src)) {
105885                 src = src.substring(cap[0].length);
105886                 if (cap[0].length > 1) {
105887                   this.tokens.push({
105888                     type: 'space'
105889                   });
105890                 }
105891               }
105892
105893               // code
105894               if (cap = this.rules.code.exec(src)) {
105895                 var lastToken = this.tokens[this.tokens.length - 1];
105896                 src = src.substring(cap[0].length);
105897                 // An indented code block cannot interrupt a paragraph.
105898                 if (lastToken && lastToken.type === 'paragraph') {
105899                   lastToken.text += '\n' + cap[0].trimRight();
105900                 } else {
105901                   cap = cap[0].replace(/^ {4}/gm, '');
105902                   this.tokens.push({
105903                     type: 'code',
105904                     codeBlockStyle: 'indented',
105905                     text: !this.options.pedantic
105906                       ? rtrim$1(cap, '\n')
105907                       : cap
105908                   });
105909                 }
105910                 continue;
105911               }
105912
105913               // fences
105914               if (cap = this.rules.fences.exec(src)) {
105915                 src = src.substring(cap[0].length);
105916                 this.tokens.push({
105917                   type: 'code',
105918                   lang: cap[2] ? cap[2].trim() : cap[2],
105919                   text: cap[3] || ''
105920                 });
105921                 continue;
105922               }
105923
105924               // heading
105925               if (cap = this.rules.heading.exec(src)) {
105926                 src = src.substring(cap[0].length);
105927                 this.tokens.push({
105928                   type: 'heading',
105929                   depth: cap[1].length,
105930                   text: cap[2]
105931                 });
105932                 continue;
105933               }
105934
105935               // table no leading pipe (gfm)
105936               if (cap = this.rules.nptable.exec(src)) {
105937                 item = {
105938                   type: 'table',
105939                   header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')),
105940                   align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
105941                   cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
105942                 };
105943
105944                 if (item.header.length === item.align.length) {
105945                   src = src.substring(cap[0].length);
105946
105947                   for (i = 0; i < item.align.length; i++) {
105948                     if (/^ *-+: *$/.test(item.align[i])) {
105949                       item.align[i] = 'right';
105950                     } else if (/^ *:-+: *$/.test(item.align[i])) {
105951                       item.align[i] = 'center';
105952                     } else if (/^ *:-+ *$/.test(item.align[i])) {
105953                       item.align[i] = 'left';
105954                     } else {
105955                       item.align[i] = null;
105956                     }
105957                   }
105958
105959                   for (i = 0; i < item.cells.length; i++) {
105960                     item.cells[i] = splitCells$1(item.cells[i], item.header.length);
105961                   }
105962
105963                   this.tokens.push(item);
105964
105965                   continue;
105966                 }
105967               }
105968
105969               // hr
105970               if (cap = this.rules.hr.exec(src)) {
105971                 src = src.substring(cap[0].length);
105972                 this.tokens.push({
105973                   type: 'hr'
105974                 });
105975                 continue;
105976               }
105977
105978               // blockquote
105979               if (cap = this.rules.blockquote.exec(src)) {
105980                 src = src.substring(cap[0].length);
105981
105982                 this.tokens.push({
105983                   type: 'blockquote_start'
105984                 });
105985
105986                 cap = cap[0].replace(/^ *> ?/gm, '');
105987
105988                 // Pass `top` to keep the current
105989                 // "toplevel" state. This is exactly
105990                 // how markdown.pl works.
105991                 this.token(cap, top);
105992
105993                 this.tokens.push({
105994                   type: 'blockquote_end'
105995                 });
105996
105997                 continue;
105998               }
105999
106000               // list
106001               if (cap = this.rules.list.exec(src)) {
106002                 src = src.substring(cap[0].length);
106003                 bull = cap[2];
106004                 isordered = bull.length > 1;
106005
106006                 listStart = {
106007                   type: 'list_start',
106008                   ordered: isordered,
106009                   start: isordered ? +bull : '',
106010                   loose: false
106011                 };
106012
106013                 this.tokens.push(listStart);
106014
106015                 // Get each top-level item.
106016                 cap = cap[0].match(this.rules.item);
106017
106018                 listItems = [];
106019                 next = false;
106020                 l = cap.length;
106021                 i = 0;
106022
106023                 for (; i < l; i++) {
106024                   item = cap[i];
106025
106026                   // Remove the list item's bullet
106027                   // so it is seen as the next token.
106028                   space = item.length;
106029                   item = item.replace(/^ *([*+-]|\d+\.) */, '');
106030
106031                   // Outdent whatever the
106032                   // list item contains. Hacky.
106033                   if (~item.indexOf('\n ')) {
106034                     space -= item.length;
106035                     item = !this.options.pedantic
106036                       ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
106037                       : item.replace(/^ {1,4}/gm, '');
106038                   }
106039
106040                   // Determine whether the next list item belongs here.
106041                   // Backpedal if it does not belong in this list.
106042                   if (i !== l - 1) {
106043                     b = block$1.bullet.exec(cap[i + 1])[0];
106044                     if (bull.length > 1 ? b.length === 1
106045                       : (b.length > 1 || (this.options.smartLists && b !== bull))) {
106046                       src = cap.slice(i + 1).join('\n') + src;
106047                       i = l - 1;
106048                     }
106049                   }
106050
106051                   // Determine whether item is loose or not.
106052                   // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
106053                   // for discount behavior.
106054                   loose = next || /\n\n(?!\s*$)/.test(item);
106055                   if (i !== l - 1) {
106056                     next = item.charAt(item.length - 1) === '\n';
106057                     if (!loose) { loose = next; }
106058                   }
106059
106060                   if (loose) {
106061                     listStart.loose = true;
106062                   }
106063
106064                   // Check for task list items
106065                   istask = /^\[[ xX]\] /.test(item);
106066                   ischecked = undefined;
106067                   if (istask) {
106068                     ischecked = item[1] !== ' ';
106069                     item = item.replace(/^\[[ xX]\] +/, '');
106070                   }
106071
106072                   t = {
106073                     type: 'list_item_start',
106074                     task: istask,
106075                     checked: ischecked,
106076                     loose: loose
106077                   };
106078
106079                   listItems.push(t);
106080                   this.tokens.push(t);
106081
106082                   // Recurse.
106083                   this.token(item, false);
106084
106085                   this.tokens.push({
106086                     type: 'list_item_end'
106087                   });
106088                 }
106089
106090                 if (listStart.loose) {
106091                   l = listItems.length;
106092                   i = 0;
106093                   for (; i < l; i++) {
106094                     listItems[i].loose = true;
106095                   }
106096                 }
106097
106098                 this.tokens.push({
106099                   type: 'list_end'
106100                 });
106101
106102                 continue;
106103               }
106104
106105               // html
106106               if (cap = this.rules.html.exec(src)) {
106107                 src = src.substring(cap[0].length);
106108                 this.tokens.push({
106109                   type: this.options.sanitize
106110                     ? 'paragraph'
106111                     : 'html',
106112                   pre: !this.options.sanitizer
106113                     && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
106114                   text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0])) : cap[0]
106115                 });
106116                 continue;
106117               }
106118
106119               // def
106120               if (top && (cap = this.rules.def.exec(src))) {
106121                 src = src.substring(cap[0].length);
106122                 if (cap[3]) { cap[3] = cap[3].substring(1, cap[3].length - 1); }
106123                 tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
106124                 if (!this.tokens.links[tag]) {
106125                   this.tokens.links[tag] = {
106126                     href: cap[2],
106127                     title: cap[3]
106128                   };
106129                 }
106130                 continue;
106131               }
106132
106133               // table (gfm)
106134               if (cap = this.rules.table.exec(src)) {
106135                 item = {
106136                   type: 'table',
106137                   header: splitCells$1(cap[1].replace(/^ *| *\| *$/g, '')),
106138                   align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
106139                   cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
106140                 };
106141
106142                 if (item.header.length === item.align.length) {
106143                   src = src.substring(cap[0].length);
106144
106145                   for (i = 0; i < item.align.length; i++) {
106146                     if (/^ *-+: *$/.test(item.align[i])) {
106147                       item.align[i] = 'right';
106148                     } else if (/^ *:-+: *$/.test(item.align[i])) {
106149                       item.align[i] = 'center';
106150                     } else if (/^ *:-+ *$/.test(item.align[i])) {
106151                       item.align[i] = 'left';
106152                     } else {
106153                       item.align[i] = null;
106154                     }
106155                   }
106156
106157                   for (i = 0; i < item.cells.length; i++) {
106158                     item.cells[i] = splitCells$1(
106159                       item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
106160                       item.header.length);
106161                   }
106162
106163                   this.tokens.push(item);
106164
106165                   continue;
106166                 }
106167               }
106168
106169               // lheading
106170               if (cap = this.rules.lheading.exec(src)) {
106171                 src = src.substring(cap[0].length);
106172                 this.tokens.push({
106173                   type: 'heading',
106174                   depth: cap[2].charAt(0) === '=' ? 1 : 2,
106175                   text: cap[1]
106176                 });
106177                 continue;
106178               }
106179
106180               // top-level paragraph
106181               if (top && (cap = this.rules.paragraph.exec(src))) {
106182                 src = src.substring(cap[0].length);
106183                 this.tokens.push({
106184                   type: 'paragraph',
106185                   text: cap[1].charAt(cap[1].length - 1) === '\n'
106186                     ? cap[1].slice(0, -1)
106187                     : cap[1]
106188                 });
106189                 continue;
106190               }
106191
106192               // text
106193               if (cap = this.rules.text.exec(src)) {
106194                 // Top-level should never reach here.
106195                 src = src.substring(cap[0].length);
106196                 this.tokens.push({
106197                   type: 'text',
106198                   text: cap[0]
106199                 });
106200                 continue;
106201               }
106202
106203               if (src) {
106204                 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
106205               }
106206             }
106207
106208             return this.tokens;
106209           };
106210
106211           Object.defineProperties( Lexer, staticAccessors );
106212
106213           return Lexer;
106214         }());
106215
106216         var defaults$3 = defaults$1.defaults;
106217         var cleanUrl$1 = helpers$1.cleanUrl;
106218         var escape$3 = helpers$1.escape;
106219
106220         /**
106221          * Renderer
106222          */
106223         var Renderer_1 = /*@__PURE__*/(function () {
106224           function Renderer(options) {
106225             this.options = options || defaults$3;
106226           }
106227
106228           Renderer.prototype.code = function code (code$1, infostring, escaped) {
106229             var lang = (infostring || '').match(/\S*/)[0];
106230             if (this.options.highlight) {
106231               var out = this.options.highlight(code$1, lang);
106232               if (out != null && out !== code$1) {
106233                 escaped = true;
106234                 code$1 = out;
106235               }
106236             }
106237
106238             if (!lang) {
106239               return '<pre><code>'
106240                 + (escaped ? code$1 : escape$3(code$1, true))
106241                 + '</code></pre>';
106242             }
106243
106244             return '<pre><code class="'
106245               + this.options.langPrefix
106246               + escape$3(lang, true)
106247               + '">'
106248               + (escaped ? code$1 : escape$3(code$1, true))
106249               + '</code></pre>\n';
106250           };
106251           Renderer.prototype.blockquote = function blockquote (quote) {
106252             return '<blockquote>\n' + quote + '</blockquote>\n';
106253           };
106254           Renderer.prototype.html = function html (html$1) {
106255             return html$1;
106256           };
106257           Renderer.prototype.heading = function heading (text, level, raw, slugger) {
106258             if (this.options.headerIds) {
106259               return '<h'
106260                 + level
106261                 + ' id="'
106262                 + this.options.headerPrefix
106263                 + slugger.slug(raw)
106264                 + '">'
106265                 + text
106266                 + '</h'
106267                 + level
106268                 + '>\n';
106269             }
106270             // ignore IDs
106271             return '<h' + level + '>' + text + '</h' + level + '>\n';
106272           };
106273           Renderer.prototype.hr = function hr () {
106274             return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
106275           };
106276           Renderer.prototype.list = function list (body, ordered, start) {
106277             var type = ordered ? 'ol' : 'ul',
106278               startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
106279             return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
106280           };
106281           Renderer.prototype.listitem = function listitem (text) {
106282             return '<li>' + text + '</li>\n';
106283           };
106284           Renderer.prototype.checkbox = function checkbox (checked) {
106285             return '<input '
106286               + (checked ? 'checked="" ' : '')
106287               + 'disabled="" type="checkbox"'
106288               + (this.options.xhtml ? ' /' : '')
106289               + '> ';
106290           };
106291           Renderer.prototype.paragraph = function paragraph (text) {
106292             return '<p>' + text + '</p>\n';
106293           };
106294           Renderer.prototype.table = function table (header, body) {
106295             if (body) { body = '<tbody>' + body + '</tbody>'; }
106296
106297             return '<table>\n'
106298               + '<thead>\n'
106299               + header
106300               + '</thead>\n'
106301               + body
106302               + '</table>\n';
106303           };
106304           Renderer.prototype.tablerow = function tablerow (content) {
106305             return '<tr>\n' + content + '</tr>\n';
106306           };
106307           Renderer.prototype.tablecell = function tablecell (content, flags) {
106308             var type = flags.header ? 'th' : 'td';
106309             var tag = flags.align
106310               ? '<' + type + ' align="' + flags.align + '">'
106311               : '<' + type + '>';
106312             return tag + content + '</' + type + '>\n';
106313           };
106314           // span level renderer
106315           Renderer.prototype.strong = function strong (text) {
106316             return '<strong>' + text + '</strong>';
106317           };
106318           Renderer.prototype.em = function em (text) {
106319             return '<em>' + text + '</em>';
106320           };
106321           Renderer.prototype.codespan = function codespan (text) {
106322             return '<code>' + text + '</code>';
106323           };
106324           Renderer.prototype.br = function br () {
106325             return this.options.xhtml ? '<br/>' : '<br>';
106326           };
106327           Renderer.prototype.del = function del (text) {
106328             return '<del>' + text + '</del>';
106329           };
106330           Renderer.prototype.link = function link (href, title, text) {
106331             href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);
106332             if (href === null) {
106333               return text;
106334             }
106335             var out = '<a href="' + escape$3(href) + '"';
106336             if (title) {
106337               out += ' title="' + title + '"';
106338             }
106339             out += '>' + text + '</a>';
106340             return out;
106341           };
106342           Renderer.prototype.image = function image (href, title, text) {
106343             href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);
106344             if (href === null) {
106345               return text;
106346             }
106347
106348             var out = '<img src="' + href + '" alt="' + text + '"';
106349             if (title) {
106350               out += ' title="' + title + '"';
106351             }
106352             out += this.options.xhtml ? '/>' : '>';
106353             return out;
106354           };
106355           Renderer.prototype.text = function text (text$1) {
106356             return text$1;
106357           };
106358
106359           return Renderer;
106360         }());
106361
106362         /**
106363          * Slugger generates header id
106364          */
106365         var Slugger_1 = /*@__PURE__*/(function () {
106366           function Slugger() {
106367             this.seen = {};
106368           }
106369
106370           /**
106371            * Convert string to unique id
106372            */
106373           Slugger.prototype.slug = function slug (value) {
106374             var slug = value
106375               .toLowerCase()
106376               .trim()
106377               .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
106378               .replace(/\s/g, '-');
106379
106380             if (this.seen.hasOwnProperty(slug)) {
106381               var originalSlug = slug;
106382               do {
106383                 this.seen[originalSlug]++;
106384                 slug = originalSlug + '-' + this.seen[originalSlug];
106385               } while (this.seen.hasOwnProperty(slug));
106386             }
106387             this.seen[slug] = 0;
106388
106389             return slug;
106390           };
106391
106392           return Slugger;
106393         }());
106394
106395         var defaults$4 = defaults$1.defaults;
106396         var inline$1 = rules.inline;
106397         var findClosingBracket$1 = helpers$1.findClosingBracket;
106398         var escape$4 = helpers$1.escape;
106399
106400         /**
106401          * Inline Lexer & Compiler
106402          */
106403         var InlineLexer_1 = /*@__PURE__*/(function () {
106404           function InlineLexer(links, options) {
106405             this.options = options || defaults$4;
106406             this.links = links;
106407             this.rules = inline$1.normal;
106408             this.options.renderer = this.options.renderer || new Renderer_1();
106409             this.renderer = this.options.renderer;
106410             this.renderer.options = this.options;
106411
106412             if (!this.links) {
106413               throw new Error('Tokens array requires a `links` property.');
106414             }
106415
106416             if (this.options.pedantic) {
106417               this.rules = inline$1.pedantic;
106418             } else if (this.options.gfm) {
106419               if (this.options.breaks) {
106420                 this.rules = inline$1.breaks;
106421               } else {
106422                 this.rules = inline$1.gfm;
106423               }
106424             }
106425           }
106426
106427           var staticAccessors = { rules: { configurable: true } };
106428
106429           /**
106430            * Expose Inline Rules
106431            */
106432           staticAccessors.rules.get = function () {
106433             return inline$1;
106434           };
106435
106436           /**
106437            * Static Lexing/Compiling Method
106438            */
106439           InlineLexer.output = function output (src, links, options) {
106440             var inline = new InlineLexer(links, options);
106441             return inline.output(src);
106442           };
106443
106444           /**
106445            * Lexing/Compiling
106446            */
106447           InlineLexer.prototype.output = function output (src) {
106448             var out = '',
106449               link,
106450               text,
106451               href,
106452               title,
106453               cap,
106454               prevCapZero;
106455
106456             while (src) {
106457               // escape
106458               if (cap = this.rules.escape.exec(src)) {
106459                 src = src.substring(cap[0].length);
106460                 out += escape$4(cap[1]);
106461                 continue;
106462               }
106463
106464               // tag
106465               if (cap = this.rules.tag.exec(src)) {
106466                 if (!this.inLink && /^<a /i.test(cap[0])) {
106467                   this.inLink = true;
106468                 } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
106469                   this.inLink = false;
106470                 }
106471                 if (!this.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
106472                   this.inRawBlock = true;
106473                 } else if (this.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
106474                   this.inRawBlock = false;
106475                 }
106476
106477                 src = src.substring(cap[0].length);
106478                 out += this.options.sanitize
106479                   ? this.options.sanitizer
106480                     ? this.options.sanitizer(cap[0])
106481                     : escape$4(cap[0])
106482                   : cap[0];
106483                 continue;
106484               }
106485
106486               // link
106487               if (cap = this.rules.link.exec(src)) {
106488                 var lastParenIndex = findClosingBracket$1(cap[2], '()');
106489                 if (lastParenIndex > -1) {
106490                   var start = cap[0].indexOf('!') === 0 ? 5 : 4;
106491                   var linkLen = start + cap[1].length + lastParenIndex;
106492                   cap[2] = cap[2].substring(0, lastParenIndex);
106493                   cap[0] = cap[0].substring(0, linkLen).trim();
106494                   cap[3] = '';
106495                 }
106496                 src = src.substring(cap[0].length);
106497                 this.inLink = true;
106498                 href = cap[2];
106499                 if (this.options.pedantic) {
106500                   link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
106501
106502                   if (link) {
106503                     href = link[1];
106504                     title = link[3];
106505                   } else {
106506                     title = '';
106507                   }
106508                 } else {
106509                   title = cap[3] ? cap[3].slice(1, -1) : '';
106510                 }
106511                 href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
106512                 out += this.outputLink(cap, {
106513                   href: InlineLexer.escapes(href),
106514                   title: InlineLexer.escapes(title)
106515                 });
106516                 this.inLink = false;
106517                 continue;
106518               }
106519
106520               // reflink, nolink
106521               if ((cap = this.rules.reflink.exec(src))
106522                   || (cap = this.rules.nolink.exec(src))) {
106523                 src = src.substring(cap[0].length);
106524                 link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
106525                 link = this.links[link.toLowerCase()];
106526                 if (!link || !link.href) {
106527                   out += cap[0].charAt(0);
106528                   src = cap[0].substring(1) + src;
106529                   continue;
106530                 }
106531                 this.inLink = true;
106532                 out += this.outputLink(cap, link);
106533                 this.inLink = false;
106534                 continue;
106535               }
106536
106537               // strong
106538               if (cap = this.rules.strong.exec(src)) {
106539                 src = src.substring(cap[0].length);
106540                 out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1]));
106541                 continue;
106542               }
106543
106544               // em
106545               if (cap = this.rules.em.exec(src)) {
106546                 src = src.substring(cap[0].length);
106547                 out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
106548                 continue;
106549               }
106550
106551               // code
106552               if (cap = this.rules.code.exec(src)) {
106553                 src = src.substring(cap[0].length);
106554                 out += this.renderer.codespan(escape$4(cap[2].trim(), true));
106555                 continue;
106556               }
106557
106558               // br
106559               if (cap = this.rules.br.exec(src)) {
106560                 src = src.substring(cap[0].length);
106561                 out += this.renderer.br();
106562                 continue;
106563               }
106564
106565               // del (gfm)
106566               if (cap = this.rules.del.exec(src)) {
106567                 src = src.substring(cap[0].length);
106568                 out += this.renderer.del(this.output(cap[1]));
106569                 continue;
106570               }
106571
106572               // autolink
106573               if (cap = this.rules.autolink.exec(src)) {
106574                 src = src.substring(cap[0].length);
106575                 if (cap[2] === '@') {
106576                   text = escape$4(this.mangle(cap[1]));
106577                   href = 'mailto:' + text;
106578                 } else {
106579                   text = escape$4(cap[1]);
106580                   href = text;
106581                 }
106582                 out += this.renderer.link(href, null, text);
106583                 continue;
106584               }
106585
106586               // url (gfm)
106587               if (!this.inLink && (cap = this.rules.url.exec(src))) {
106588                 if (cap[2] === '@') {
106589                   text = escape$4(cap[0]);
106590                   href = 'mailto:' + text;
106591                 } else {
106592                   // do extended autolink path validation
106593                   do {
106594                     prevCapZero = cap[0];
106595                     cap[0] = this.rules._backpedal.exec(cap[0])[0];
106596                   } while (prevCapZero !== cap[0]);
106597                   text = escape$4(cap[0]);
106598                   if (cap[1] === 'www.') {
106599                     href = 'http://' + text;
106600                   } else {
106601                     href = text;
106602                   }
106603                 }
106604                 src = src.substring(cap[0].length);
106605                 out += this.renderer.link(href, null, text);
106606                 continue;
106607               }
106608
106609               // text
106610               if (cap = this.rules.text.exec(src)) {
106611                 src = src.substring(cap[0].length);
106612                 if (this.inRawBlock) {
106613                   out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$4(cap[0])) : cap[0]);
106614                 } else {
106615                   out += this.renderer.text(escape$4(this.smartypants(cap[0])));
106616                 }
106617                 continue;
106618               }
106619
106620               if (src) {
106621                 throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));
106622               }
106623             }
106624
106625             return out;
106626           };
106627
106628           InlineLexer.escapes = function escapes (text) {
106629             return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
106630           };
106631
106632           /**
106633            * Compile Link
106634            */
106635           InlineLexer.prototype.outputLink = function outputLink (cap, link) {
106636             var href = link.href,
106637               title = link.title ? escape$4(link.title) : null;
106638
106639             return cap[0].charAt(0) !== '!'
106640               ? this.renderer.link(href, title, this.output(cap[1]))
106641               : this.renderer.image(href, title, escape$4(cap[1]));
106642           };
106643
106644           /**
106645            * Smartypants Transformations
106646            */
106647           InlineLexer.prototype.smartypants = function smartypants (text) {
106648             if (!this.options.smartypants) { return text; }
106649             return text
106650               // em-dashes
106651               .replace(/---/g, '\u2014')
106652               // en-dashes
106653               .replace(/--/g, '\u2013')
106654               // opening singles
106655               .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
106656               // closing singles & apostrophes
106657               .replace(/'/g, '\u2019')
106658               // opening doubles
106659               .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
106660               // closing doubles
106661               .replace(/"/g, '\u201d')
106662               // ellipses
106663               .replace(/\.{3}/g, '\u2026');
106664           };
106665
106666           /**
106667            * Mangle Links
106668            */
106669           InlineLexer.prototype.mangle = function mangle (text) {
106670             if (!this.options.mangle) { return text; }
106671             var l = text.length;
106672             var out = '',
106673               i = 0,
106674               ch;
106675
106676             for (; i < l; i++) {
106677               ch = text.charCodeAt(i);
106678               if (Math.random() > 0.5) {
106679                 ch = 'x' + ch.toString(16);
106680               }
106681               out += '&#' + ch + ';';
106682             }
106683
106684             return out;
106685           };
106686
106687           Object.defineProperties( InlineLexer, staticAccessors );
106688
106689           return InlineLexer;
106690         }());
106691
106692         /**
106693          * TextRenderer
106694          * returns only the textual part of the token
106695          */
106696         var TextRenderer_1 = /*@__PURE__*/(function () {
106697           function TextRenderer () {}
106698
106699           TextRenderer.prototype.strong = function strong (text) {
106700             return text;
106701           };
106702
106703           TextRenderer.prototype.em = function em (text) {
106704             return text;
106705           };
106706
106707           TextRenderer.prototype.codespan = function codespan (text) {
106708             return text;
106709           };
106710
106711           TextRenderer.prototype.del = function del (text) {
106712             return text;
106713           };
106714
106715           TextRenderer.prototype.text = function text (text$1) {
106716             return text$1;
106717           };
106718
106719           TextRenderer.prototype.link = function link (href, title, text) {
106720             return '' + text;
106721           };
106722
106723           TextRenderer.prototype.image = function image (href, title, text) {
106724             return '' + text;
106725           };
106726
106727           TextRenderer.prototype.br = function br () {
106728             return '';
106729           };
106730
106731           return TextRenderer;
106732         }());
106733
106734         var defaults$5 = defaults$1.defaults;
106735         var merge$3 = helpers$1.merge;
106736         var unescape$2 = helpers$1.unescape;
106737
106738         /**
106739          * Parsing & Compiling
106740          */
106741         var Parser_1 = /*@__PURE__*/(function () {
106742           function Parser(options) {
106743             this.tokens = [];
106744             this.token = null;
106745             this.options = options || defaults$5;
106746             this.options.renderer = this.options.renderer || new Renderer_1();
106747             this.renderer = this.options.renderer;
106748             this.renderer.options = this.options;
106749             this.slugger = new Slugger_1();
106750           }
106751
106752           /**
106753            * Static Parse Method
106754            */
106755           Parser.parse = function parse (tokens, options) {
106756             var parser = new Parser(options);
106757             return parser.parse(tokens);
106758           };
106759           /**
106760            * Parse Loop
106761            */
106762           Parser.prototype.parse = function parse (tokens) {
106763             this.inline = new InlineLexer_1(tokens.links, this.options);
106764             // use an InlineLexer with a TextRenderer to extract pure text
106765             this.inlineText = new InlineLexer_1(
106766               tokens.links,
106767               merge$3({}, this.options, { renderer: new TextRenderer_1() })
106768             );
106769             this.tokens = tokens.reverse();
106770
106771             var out = '';
106772             while (this.next()) {
106773               out += this.tok();
106774             }
106775
106776             return out;
106777           };
106778           /**
106779            * Next Token
106780            */
106781           Parser.prototype.next = function next () {
106782             this.token = this.tokens.pop();
106783             return this.token;
106784           };
106785           /**
106786            * Preview Next Token
106787            */
106788           Parser.prototype.peek = function peek () {
106789             return this.tokens[this.tokens.length - 1] || 0;
106790           };
106791           /**
106792            * Parse Text Tokens
106793            */
106794           Parser.prototype.parseText = function parseText () {
106795             var body = this.token.text;
106796
106797             while (this.peek().type === 'text') {
106798               body += '\n' + this.next().text;
106799             }
106800
106801             return this.inline.output(body);
106802           };
106803           /**
106804            * Parse Current Token
106805            */
106806           Parser.prototype.tok = function tok () {
106807             var body = '';
106808             switch (this.token.type) {
106809               case 'space': {
106810                 return '';
106811               }
106812               case 'hr': {
106813                 return this.renderer.hr();
106814               }
106815               case 'heading': {
106816                 return this.renderer.heading(
106817                   this.inline.output(this.token.text),
106818                   this.token.depth,
106819                   unescape$2(this.inlineText.output(this.token.text)),
106820                   this.slugger);
106821               }
106822               case 'code': {
106823                 return this.renderer.code(this.token.text,
106824                   this.token.lang,
106825                   this.token.escaped);
106826               }
106827               case 'table': {
106828                 var header = '',
106829                   i,
106830                   row,
106831                   cell,
106832                   j;
106833
106834                 // header
106835                 cell = '';
106836                 for (i = 0; i < this.token.header.length; i++) {
106837                   cell += this.renderer.tablecell(
106838                     this.inline.output(this.token.header[i]),
106839                     { header: true, align: this.token.align[i] }
106840                   );
106841                 }
106842                 header += this.renderer.tablerow(cell);
106843
106844                 for (i = 0; i < this.token.cells.length; i++) {
106845                   row = this.token.cells[i];
106846
106847                   cell = '';
106848                   for (j = 0; j < row.length; j++) {
106849                     cell += this.renderer.tablecell(
106850                       this.inline.output(row[j]),
106851                       { header: false, align: this.token.align[j] }
106852                     );
106853                   }
106854
106855                   body += this.renderer.tablerow(cell);
106856                 }
106857                 return this.renderer.table(header, body);
106858               }
106859               case 'blockquote_start': {
106860                 body = '';
106861
106862                 while (this.next().type !== 'blockquote_end') {
106863                   body += this.tok();
106864                 }
106865
106866                 return this.renderer.blockquote(body);
106867               }
106868               case 'list_start': {
106869                 body = '';
106870                 var ordered = this.token.ordered,
106871                   start = this.token.start;
106872
106873                 while (this.next().type !== 'list_end') {
106874                   body += this.tok();
106875                 }
106876
106877                 return this.renderer.list(body, ordered, start);
106878               }
106879               case 'list_item_start': {
106880                 body = '';
106881                 var loose = this.token.loose;
106882                 var checked = this.token.checked;
106883                 var task = this.token.task;
106884
106885                 if (this.token.task) {
106886                   if (loose) {
106887                     if (this.peek().type === 'text') {
106888                       var nextToken = this.peek();
106889                       nextToken.text = this.renderer.checkbox(checked) + ' ' + nextToken.text;
106890                     } else {
106891                       this.tokens.push({
106892                         type: 'text',
106893                         text: this.renderer.checkbox(checked)
106894                       });
106895                     }
106896                   } else {
106897                     body += this.renderer.checkbox(checked);
106898                   }
106899                 }
106900
106901                 while (this.next().type !== 'list_item_end') {
106902                   body += !loose && this.token.type === 'text'
106903                     ? this.parseText()
106904                     : this.tok();
106905                 }
106906                 return this.renderer.listitem(body, task, checked);
106907               }
106908               case 'html': {
106909                 // TODO parse inline content if parameter markdown=1
106910                 return this.renderer.html(this.token.text);
106911               }
106912               case 'paragraph': {
106913                 return this.renderer.paragraph(this.inline.output(this.token.text));
106914               }
106915               case 'text': {
106916                 return this.renderer.paragraph(this.parseText());
106917               }
106918               default: {
106919                 var errMsg = 'Token with "' + this.token.type + '" type was not found.';
106920                 if (this.options.silent) {
106921                   console.log(errMsg);
106922                 } else {
106923                   throw new Error(errMsg);
106924                 }
106925               }
106926             }
106927           };
106928
106929           return Parser;
106930         }());
106931
106932         var merge$4 = helpers$1.merge;
106933         var checkSanitizeDeprecation$1 = helpers$1.checkSanitizeDeprecation;
106934         var escape$5 = helpers$1.escape;
106935         var getDefaults = defaults$1.getDefaults;
106936         var changeDefaults = defaults$1.changeDefaults;
106937         var defaults$6 = defaults$1.defaults;
106938
106939         /**
106940          * Marked
106941          */
106942         function marked(src, opt, callback) {
106943           // throw error in case of non string input
106944           if (typeof src === 'undefined' || src === null) {
106945             throw new Error('marked(): input parameter is undefined or null');
106946           }
106947           if (typeof src !== 'string') {
106948             throw new Error('marked(): input parameter is of type '
106949               + Object.prototype.toString.call(src) + ', string expected');
106950           }
106951
106952           if (callback || typeof opt === 'function') {
106953             if (!callback) {
106954               callback = opt;
106955               opt = null;
106956             }
106957
106958             opt = merge$4({}, marked.defaults, opt || {});
106959             checkSanitizeDeprecation$1(opt);
106960             var highlight = opt.highlight;
106961             var tokens,
106962               pending,
106963               i = 0;
106964
106965             try {
106966               tokens = Lexer_1.lex(src, opt);
106967             } catch (e) {
106968               return callback(e);
106969             }
106970
106971             pending = tokens.length;
106972
106973             var done = function(err) {
106974               if (err) {
106975                 opt.highlight = highlight;
106976                 return callback(err);
106977               }
106978
106979               var out;
106980
106981               try {
106982                 out = Parser_1.parse(tokens, opt);
106983               } catch (e) {
106984                 err = e;
106985               }
106986
106987               opt.highlight = highlight;
106988
106989               return err
106990                 ? callback(err)
106991                 : callback(null, out);
106992             };
106993
106994             if (!highlight || highlight.length < 3) {
106995               return done();
106996             }
106997
106998             delete opt.highlight;
106999
107000             if (!pending) { return done(); }
107001
107002             for (; i < tokens.length; i++) {
107003               (function(token) {
107004                 if (token.type !== 'code') {
107005                   return --pending || done();
107006                 }
107007                 return highlight(token.text, token.lang, function(err, code) {
107008                   if (err) { return done(err); }
107009                   if (code == null || code === token.text) {
107010                     return --pending || done();
107011                   }
107012                   token.text = code;
107013                   token.escaped = true;
107014                   --pending || done();
107015                 });
107016               })(tokens[i]);
107017             }
107018
107019             return;
107020           }
107021           try {
107022             opt = merge$4({}, marked.defaults, opt || {});
107023             checkSanitizeDeprecation$1(opt);
107024             return Parser_1.parse(Lexer_1.lex(src, opt), opt);
107025           } catch (e) {
107026             e.message += '\nPlease report this to https://github.com/markedjs/marked.';
107027             if ((opt || marked.defaults).silent) {
107028               return '<p>An error occurred:</p><pre>'
107029                 + escape$5(e.message + '', true)
107030                 + '</pre>';
107031             }
107032             throw e;
107033           }
107034         }
107035
107036         /**
107037          * Options
107038          */
107039
107040         marked.options =
107041         marked.setOptions = function(opt) {
107042           merge$4(marked.defaults, opt);
107043           changeDefaults(marked.defaults);
107044           return marked;
107045         };
107046
107047         marked.getDefaults = getDefaults;
107048
107049         marked.defaults = defaults$6;
107050
107051         /**
107052          * Expose
107053          */
107054
107055         marked.Parser = Parser_1;
107056         marked.parser = Parser_1.parse;
107057
107058         marked.Renderer = Renderer_1;
107059         marked.TextRenderer = TextRenderer_1;
107060
107061         marked.Lexer = Lexer_1;
107062         marked.lexer = Lexer_1.lex;
107063
107064         marked.InlineLexer = InlineLexer_1;
107065         marked.inlineLexer = InlineLexer_1.output;
107066
107067         marked.Slugger = Slugger_1;
107068
107069         marked.parse = marked;
107070
107071         var marked_1 = marked;
107072
107073         function pointBox(loc, context) {
107074             var rect = context.surfaceRect();
107075             var point = context.curtainProjection(loc);
107076             return {
107077                 left: point[0] + rect.left - 40,
107078                 top: point[1] + rect.top - 60,
107079                 width: 80,
107080                 height: 90
107081             };
107082         }
107083
107084
107085         function pad$2(locOrBox, padding, context) {
107086             var box;
107087             if (locOrBox instanceof Array) {
107088                 var rect = context.surfaceRect();
107089                 var point = context.curtainProjection(locOrBox);
107090                 box = {
107091                     left: point[0] + rect.left,
107092                     top: point[1] + rect.top
107093                 };
107094             } else {
107095                 box = locOrBox;
107096             }
107097
107098             return {
107099                 left: box.left - padding,
107100                 top: box.top - padding,
107101                 width: (box.width || 0) + 2 * padding,
107102                 height: (box.width || 0) + 2 * padding
107103             };
107104         }
107105
107106
107107         function icon(name, svgklass, useklass) {
107108             return '<svg class="icon ' + (svgklass || '') + '">' +
107109                  '<use xlink:href="' + name + '"' +
107110                  (useklass ? ' class="' + useklass + '"' : '') + '></use></svg>';
107111         }
107112
107113
107114         function slugify(text) {
107115             return text.toString().toLowerCase()
107116                 .replace(/\s+/g, '-')           // Replace spaces with -
107117                 .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
107118                 .replace(/\-\-+/g, '-')         // Replace multiple - with single -
107119                 .replace(/^-+/, '')             // Trim - from start of text
107120                 .replace(/-+$/, '');            // Trim - from end of text
107121         }
107122
107123
107124         // console warning for missing walkthrough names
107125         var missingStrings = {};
107126         function checkKey(key, text) {
107127             if (t(key, { default: undefined}) === undefined) {
107128                 if (missingStrings.hasOwnProperty(key)) { return; }  // warn once
107129                 missingStrings[key] = text;
107130                 var missing = key + ': ' + text;
107131                 if (typeof console !== 'undefined') { console.log(missing); } // eslint-disable-line
107132             }
107133         }
107134
107135
107136         function localize(obj) {
107137             var key;
107138
107139             // Assign name if entity has one..
107140             var name = obj.tags && obj.tags.name;
107141             if (name) {
107142                 key = 'intro.graph.name.' + slugify(name);
107143                 obj.tags.name = t(key, { default: name });
107144                 checkKey(key, name);
107145             }
107146
107147             // Assign street name if entity has one..
107148             var street = obj.tags && obj.tags['addr:street'];
107149             if (street) {
107150                 key = 'intro.graph.name.' + slugify(street);
107151                 obj.tags['addr:street'] = t(key, { default: street });
107152                 checkKey(key, street);
107153
107154                 // Add address details common across walkthrough..
107155                 var addrTags = [
107156                     'block_number', 'city', 'county', 'district', 'hamlet', 'neighbourhood',
107157                     'postcode', 'province', 'quarter', 'state', 'subdistrict', 'suburb'
107158                 ];
107159                 addrTags.forEach(function(k) {
107160                     var key = 'intro.graph.' + k;
107161                     var tag = 'addr:' + k;
107162                     var val = obj.tags && obj.tags[tag];
107163                     var str = t(key, { default: val });
107164
107165                     if (str) {
107166                         if (str.match(/^<.*>$/) !== null) {
107167                             delete obj.tags[tag];
107168                         } else {
107169                             obj.tags[tag] = str;
107170                         }
107171                     }
107172                 });
107173             }
107174
107175             return obj;
107176         }
107177
107178
107179         // Used to detect squareness.. some duplicataion of code from actionOrthogonalize.
107180         function isMostlySquare(points) {
107181             // note: uses 15 here instead of the 12 from actionOrthogonalize because
107182             // actionOrthogonalize can actually straighten some larger angles as it iterates
107183             var threshold = 15; // degrees within right or straight
107184             var lowerBound = Math.cos((90 - threshold) * Math.PI / 180);  // near right
107185             var upperBound = Math.cos(threshold * Math.PI / 180);         // near straight
107186
107187             for (var i = 0; i < points.length; i++) {
107188                 var a = points[(i - 1 + points.length) % points.length];
107189                 var origin = points[i];
107190                 var b = points[(i + 1) % points.length];
107191
107192                 var dotp = geoVecNormalizedDot(a, b, origin);
107193                 var mag = Math.abs(dotp);
107194                 if (mag > lowerBound && mag < upperBound) {
107195                     return false;
107196                 }
107197             }
107198
107199             return true;
107200         }
107201
107202
107203         function selectMenuItem(operation) {
107204             var selector = '.edit-menu .edit-menu-item-' + operation +
107205                 ', .radial-menu .radial-menu-item-' + operation;
107206             return d3_select(selector);
107207         }
107208
107209
107210         function transitionTime(point1, point2) {
107211             var distance = geoSphericalDistance(point1, point2);
107212             if (distance === 0)
107213                 { return 0; }
107214             else if (distance < 80)
107215                 { return 500; }
107216             else
107217                 { return 1000; }
107218         }
107219
107220         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]}};
107221
107222         // Tooltips and svg mask used to highlight certain features
107223         function uiCurtain() {
107224
107225             var surface = d3_select(null),
107226                 tooltip = d3_select(null),
107227                 darkness = d3_select(null);
107228
107229             function curtain(selection) {
107230                 surface = selection
107231                     .append('svg')
107232                     .attr('id', 'curtain')
107233                     .style('z-index', 1000)
107234                     .style('pointer-events', 'none')
107235                     .style('position', 'absolute')
107236                     .style('top', 0)
107237                     .style('left', 0);
107238
107239                 darkness = surface.append('path')
107240                     .attr('x', 0)
107241                     .attr('y', 0)
107242                     .attr('class', 'curtain-darkness');
107243
107244                 d3_select(window).on('resize.curtain', resize);
107245
107246                 tooltip = selection.append('div')
107247                     .attr('class', 'tooltip')
107248                     .style('z-index', 1002);
107249
107250                 tooltip
107251                     .append('div')
107252                     .attr('class', 'popover-arrow');
107253
107254                 tooltip
107255                     .append('div')
107256                     .attr('class', 'popover-inner');
107257
107258                 resize();
107259
107260
107261                 function resize() {
107262                     surface
107263                         .attr('width', window.innerWidth)
107264                         .attr('height', window.innerHeight);
107265                     curtain.cut(darkness.datum());
107266                 }
107267             }
107268
107269
107270             /**
107271              * Reveal cuts the curtain to highlight the given box,
107272              * and shows a tooltip with instructions next to the box.
107273              *
107274              * @param  {String|ClientRect} [box]   box used to cut the curtain
107275              * @param  {String}    [text]          text for a tooltip
107276              * @param  {Object}    [options]
107277              * @param  {string}    [options.tooltipClass]    optional class to add to the tooltip
107278              * @param  {integer}   [options.duration]        transition time in milliseconds
107279              * @param  {string}    [options.buttonText]      if set, create a button with this text label
107280              * @param  {function}  [options.buttonCallback]  if set, the callback for the button
107281              * @param  {String|ClientRect} [options.tooltipBox]  box for tooltip position, if different from box for the curtain
107282              */
107283             curtain.reveal = function(box, text, options) {
107284                 if (typeof box === 'string') {
107285                     box = d3_select(box).node();
107286                 }
107287                 if (box && box.getBoundingClientRect) {
107288                     box = copyBox(box.getBoundingClientRect());
107289                 }
107290
107291                 options = options || {};
107292
107293                 var tooltipBox;
107294                 if (options.tooltipBox) {
107295                     tooltipBox = options.tooltipBox;
107296                     if (typeof tooltipBox === 'string') {
107297                         tooltipBox = d3_select(tooltipBox).node();
107298                     }
107299                     if (tooltipBox && tooltipBox.getBoundingClientRect) {
107300                         tooltipBox = copyBox(tooltipBox.getBoundingClientRect());
107301                     }
107302                 } else {
107303                     tooltipBox = box;
107304                 }
107305
107306                 if (tooltipBox && text) {
107307                     // pseudo markdown bold text for the instruction section..
107308                     var parts = text.split('**');
107309                     var html = parts[0] ? '<span>' + parts[0] + '</span>' : '';
107310                     if (parts[1]) {
107311                         html += '<span class="instruction">' + parts[1] + '</span>';
107312                     }
107313
107314                     html = html.replace(/\*(.*?)\*/g, '<em>$1</em>');   // emphasis
107315                     html = html.replace(/\{br\}/g, '<br/><br/>');       // linebreak
107316
107317                     if (options.buttonText && options.buttonCallback) {
107318                         html += '<div class="button-section">' +
107319                             '<button href="#" class="button action">' + options.buttonText + '</button></div>';
107320                     }
107321
107322                     var classes = 'curtain-tooltip popover tooltip arrowed in ' + (options.tooltipClass || '');
107323                     tooltip
107324                         .classed(classes, true)
107325                         .selectAll('.popover-inner')
107326                         .html(html);
107327
107328                     if (options.buttonText && options.buttonCallback) {
107329                         var button = tooltip.selectAll('.button-section .button.action');
107330                         button
107331                             .on('click', function() {
107332                                 event.preventDefault();
107333                                 options.buttonCallback();
107334                             });
107335                     }
107336
107337                     var tip = copyBox(tooltip.node().getBoundingClientRect()),
107338                         w = window.innerWidth,
107339                         h = window.innerHeight,
107340                         tooltipWidth = 200,
107341                         tooltipArrow = 5,
107342                         side, pos;
107343
107344
107345                     // hack: this will have bottom placement,
107346                     // so need to reserve extra space for the tooltip illustration.
107347                     if (options.tooltipClass === 'intro-mouse') {
107348                         tip.height += 80;
107349                     }
107350
107351                     // trim box dimensions to just the portion that fits in the window..
107352                     if (tooltipBox.top + tooltipBox.height > h) {
107353                         tooltipBox.height -= (tooltipBox.top + tooltipBox.height - h);
107354                     }
107355                     if (tooltipBox.left + tooltipBox.width > w) {
107356                         tooltipBox.width -= (tooltipBox.left + tooltipBox.width - w);
107357                     }
107358
107359                     // determine tooltip placement..
107360
107361                     if (tooltipBox.top + tooltipBox.height < 100) {
107362                         // tooltip below box..
107363                         side = 'bottom';
107364                         pos = [
107365                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
107366                             tooltipBox.top + tooltipBox.height
107367                         ];
107368
107369                     } else if (tooltipBox.top > h - 140) {
107370                         // tooltip above box..
107371                         side = 'top';
107372                         pos = [
107373                             tooltipBox.left + tooltipBox.width / 2 - tip.width / 2,
107374                             tooltipBox.top - tip.height
107375                         ];
107376
107377                     } else {
107378                         // tooltip to the side of the tooltipBox..
107379                         var tipY = tooltipBox.top + tooltipBox.height / 2 - tip.height / 2;
107380
107381                         if (textDirection === 'rtl') {
107382                             if (tooltipBox.left - tooltipWidth - tooltipArrow < 70) {
107383                                 side = 'right';
107384                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
107385
107386                             } else {
107387                                 side = 'left';
107388                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
107389                             }
107390
107391                         } else {
107392                             if (tooltipBox.left + tooltipBox.width + tooltipArrow + tooltipWidth > w - 70) {
107393                                 side = 'left';
107394                                 pos = [tooltipBox.left - tooltipWidth - tooltipArrow, tipY];
107395                             }
107396                             else {
107397                                 side = 'right';
107398                                 pos = [tooltipBox.left + tooltipBox.width + tooltipArrow, tipY];
107399                             }
107400                         }
107401                     }
107402
107403                     if (options.duration !== 0 || !tooltip.classed(side)) {
107404                         tooltip.call(uiToggle(true));
107405                     }
107406
107407                     tooltip
107408                         .style('top', pos[1] + 'px')
107409                         .style('left', pos[0] + 'px')
107410                         .attr('class', classes + ' ' + side);
107411
107412
107413                     // shift popover-inner if it is very close to the top or bottom edge
107414                     // (doesn't affect the placement of the popover-arrow)
107415                     var shiftY = 0;
107416                     if (side === 'left' || side === 'right') {
107417                         if (pos[1] < 60) {
107418                             shiftY = 60 - pos[1];
107419                         }
107420                         else if (pos[1] + tip.height > h - 100) {
107421                             shiftY = h - pos[1] - tip.height - 100;
107422                         }
107423                     }
107424                     tooltip.selectAll('.popover-inner')
107425                         .style('top', shiftY + 'px');
107426
107427                 } else {
107428                     tooltip
107429                         .classed('in', false)
107430                         .call(uiToggle(false));
107431                 }
107432
107433                 curtain.cut(box, options.duration);
107434
107435                 return tooltip;
107436             };
107437
107438
107439             curtain.cut = function(datum, duration) {
107440                 darkness.datum(datum)
107441                     .interrupt();
107442
107443                 var selection;
107444                 if (duration === 0) {
107445                     selection = darkness;
107446                 } else {
107447                     selection = darkness
107448                         .transition()
107449                         .duration(duration || 600)
107450                         .ease(linear$1);
107451                 }
107452
107453                 selection
107454                     .attr('d', function(d) {
107455                         var string = 'M 0,0 L 0,' + window.innerHeight + ' L ' +
107456                             window.innerWidth + ',' + window.innerHeight + 'L' +
107457                             window.innerWidth + ',0 Z';
107458
107459                         if (!d) { return string; }
107460                         return string + 'M' +
107461                             d.left + ',' + d.top + 'L' +
107462                             d.left + ',' + (d.top + d.height) + 'L' +
107463                             (d.left + d.width) + ',' + (d.top + d.height) + 'L' +
107464                             (d.left + d.width) + ',' + (d.top) + 'Z';
107465
107466                     });
107467             };
107468
107469
107470             curtain.remove = function() {
107471                 surface.remove();
107472                 tooltip.remove();
107473                 d3_select(window).on('resize.curtain', null);
107474             };
107475
107476
107477             // ClientRects are immutable, so copy them to an object,
107478             // in case we need to trim the height/width.
107479             function copyBox(src) {
107480                 return {
107481                     top: src.top,
107482                     right: src.right,
107483                     bottom: src.bottom,
107484                     left: src.left,
107485                     width: src.width,
107486                     height: src.height
107487                 };
107488             }
107489
107490
107491             return curtain;
107492         }
107493
107494         function uiIntroWelcome(context, reveal) {
107495             var dispatch$1 = dispatch('done');
107496             var listener = clickListener();
107497
107498             var chapter = {
107499                 title: 'intro.welcome.title'
107500             };
107501
107502
107503             function welcome() {
107504                 context.map().centerZoom([-85.63591, 41.94285], 19);
107505                 reveal('.intro-nav-wrap .chapter-welcome',
107506                     t('intro.welcome.welcome'),
107507                     { buttonText: t('intro.ok'), buttonCallback: practice }
107508                 );
107509             }
107510
107511             function practice() {
107512                 reveal('.intro-nav-wrap .chapter-welcome',
107513                     t('intro.welcome.practice'),
107514                     { buttonText: t('intro.ok'), buttonCallback: words }
107515                 );
107516             }
107517
107518             function words() {
107519                 reveal('.intro-nav-wrap .chapter-welcome',
107520                     t('intro.welcome.words'),
107521                     { buttonText: t('intro.ok'), buttonCallback: mouse }
107522                 );
107523             }
107524
107525
107526             function mouse() {
107527                 reveal('.intro-nav-wrap .chapter-welcome',
107528                     t('intro.welcome.mouse'),
107529                     { buttonText: t('intro.ok'), buttonCallback: leftClick }
107530                 );
107531             }
107532
107533
107534             function leftClick() {
107535                 var counter = 0;
107536                 var times = 5;
107537
107538                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
107539                     t('intro.welcome.leftclick', { num: times }),
107540                     { tooltipClass: 'intro-mouse' }
107541                 );
107542
107543                 tooltip.selectAll('.popover-inner')
107544                     .insert('svg', 'span')
107545                     .attr('class', 'tooltip-illustration')
107546                     .append('use')
107547                     .attr('xlink:href', '#iD-walkthrough-mouse');
107548
107549                 tooltip
107550                     .append('div')
107551                     .attr('class', 'counter');
107552
107553                 tooltip.call(listener);
107554
107555                 listener.on('click', function(which) {
107556                     if (which === 'left') {
107557                         d3_select('.curtain-tooltip.intro-mouse .counter')
107558                             .text(String(++counter));
107559
107560                         if (counter === times) {
107561                             window.setTimeout(function() { continueTo(rightClick); }, 1000);
107562                         }
107563                     }
107564                 });
107565
107566                 function continueTo(nextStep) {
107567                     listener.on('click', null);
107568                     tooltip.call(listener.off);
107569                     tooltip.select('.counter').remove();
107570                     nextStep();
107571                 }
107572             }
107573
107574
107575             function rightClick() {
107576                 var counter = 0;
107577                 var times = 5;
107578
107579                 var tooltip = reveal('.intro-nav-wrap .chapter-welcome',
107580                     t('intro.welcome.rightclick', { num: times }),
107581                     { tooltipClass: 'intro-mouse' }
107582                 );
107583
107584                 tooltip.selectAll('.popover-inner')
107585                     .insert('svg', 'span')
107586                     .attr('class', 'tooltip-illustration')
107587                     .append('use')
107588                     .attr('xlink:href', '#iD-walkthrough-mouse');
107589
107590                 tooltip
107591                     .append('div')
107592                     .attr('class', 'counter');
107593
107594                 tooltip.call(listener);
107595
107596                 listener.on('click', function(which) {
107597                     if (which === 'right') {
107598                         d3_select('.curtain-tooltip.intro-mouse .counter')
107599                             .text(String(++counter));
107600
107601                         if (counter === times) {
107602                             window.setTimeout(function() { continueTo(chapters); }, 1000);
107603                         }
107604                     }
107605                 });
107606
107607                 function continueTo(nextStep) {
107608                     listener.on('click', null);
107609                     tooltip.call(listener.off);
107610                     tooltip.select('.counter').remove();
107611                     nextStep();
107612                 }
107613             }
107614
107615
107616             function chapters() {
107617                 dispatch$1.call('done');
107618                 reveal('.intro-nav-wrap .chapter-navigation',
107619                     t('intro.welcome.chapters', { next: t('intro.navigation.title') })
107620                 );
107621             }
107622
107623
107624             chapter.enter = function() {
107625                 welcome();
107626             };
107627
107628
107629             chapter.exit = function() {
107630                 listener.off();
107631                 d3_select('.curtain-tooltip.intro-mouse')
107632                     .selectAll('.counter')
107633                     .remove();
107634             };
107635
107636
107637             chapter.restart = function() {
107638                 chapter.exit();
107639                 chapter.enter();
107640             };
107641
107642
107643             return utilRebind(chapter, dispatch$1, 'on');
107644         }
107645
107646
107647
107648         function clickListener() {
107649             var dispatch$1 = dispatch('click');
107650             var minTime = 120;
107651             var tooltip = d3_select(null);
107652             var down = {};
107653
107654             // `down` keeps track of which buttons/keys are down.
107655             // Setting a property in `down` happens immediately.
107656             // Unsetting a property in `down` is delayed because
107657             //   on Windows a contextmenu event happens after keyup/mouseup
107658
107659             function keydown() {
107660                 if (event.keyCode === 93)  {   // context menu
107661                     event.preventDefault();
107662                     event.stopPropagation();
107663                     down.menu = event.timeStamp;
107664                     tooltip.classed('rightclick', true);
107665                 }
107666             }
107667
107668
107669             function keyup() {
107670                 if (event.keyCode === 93)  {   // context menu
107671                     event.preventDefault();
107672                     event.stopPropagation();
107673                     var endTime = event.timeStamp;
107674                     var startTime = down.menu || endTime;
107675                     var delay = (endTime - startTime < minTime) ? minTime : 0;
107676
107677                     window.setTimeout(function() {
107678                         tooltip.classed('rightclick', false);
107679                         down.menu = undefined;  // delayed, for Windows
107680                     }, delay);
107681
107682                     dispatch$1.call('click', this, 'right');
107683                 }
107684             }
107685
107686
107687             function mousedown() {
107688                 var button = event.button;
107689                 if (button === 0 && !event.ctrlKey) {
107690                     tooltip.classed('leftclick', true);
107691                 } else if (button === 2) {
107692                     tooltip.classed('rightclick', true);
107693                 }
107694                 down[button] = event.timeStamp;
107695             }
107696
107697
107698             function mouseup() {
107699                 var button = event.button;
107700                 var endTime = event.timeStamp;
107701                 var startTime = down[button] || endTime;
107702                 var delay = (endTime - startTime < minTime) ? minTime : 0;
107703
107704                 if (button === 0 && !event.ctrlKey) {
107705                     window.setTimeout(function() {
107706                         tooltip.classed('leftclick', false);
107707                         down[button] = undefined;  // delayed, for Windows
107708                     }, delay);
107709
107710                     dispatch$1.call('click', this, 'left');
107711
107712                 } else if (button === 2) {
107713                     window.setTimeout(function() {
107714                         tooltip.classed('rightclick', false);
107715                         down[button] = undefined;  // delayed, for Windows
107716                     }, delay);
107717
107718                     dispatch$1.call('click', this, 'right');
107719
107720                 } else {
107721                     window.setTimeout(function() {
107722                         down[button] = undefined;  // delayed, for Windows
107723                     }, delay);
107724                 }
107725             }
107726
107727
107728             function contextmenu() {
107729                 event.preventDefault();
107730                 event.stopPropagation();
107731                 if (!down[2] && !down.menu) {
107732                     tooltip.classed('rightclick', true);
107733                     window.setTimeout(function() {
107734                         tooltip.classed('rightclick', false);
107735                     }, minTime);
107736                     dispatch$1.call('click', this, 'right');
107737                 }
107738             }
107739
107740
107741             var behavior = function(selection) {
107742                 tooltip = selection;
107743                 down = {};
107744
107745                 d3_select(window)
107746                     .on('keydown.intro', keydown)
107747                     .on('keyup.intro', keyup)
107748                     .on('mousedown.intro', mousedown)
107749                     .on('mouseup.intro', mouseup)
107750                     .on('contextmenu.intro', contextmenu);
107751             };
107752
107753
107754             behavior.off = function() {
107755                 d3_select(window)
107756                     .on('keydown.intro', null)
107757                     .on('keyup.intro', null)
107758                     .on('mousedown.intro', null)
107759                     .on('mouseup.intro', null)
107760                     .on('contextmenu.intro', null);
107761
107762                 tooltip
107763                     .classed('leftclick', false)
107764                     .classed('rightclick', false);
107765             };
107766
107767             return utilRebind(behavior, dispatch$1, 'on');
107768         }
107769
107770         function uiIntroNavigation(context, reveal) {
107771             var dispatch$1 = dispatch('done');
107772             var timeouts = [];
107773             var hallId = 'n2061';
107774             var townHall = [-85.63591, 41.94285];
107775             var springStreetId = 'w397';
107776             var springStreetEndId = 'n1834';
107777             var springStreet = [-85.63582, 41.94255];
107778             var onewayField = context.presets().field('oneway');
107779             var maxspeedField = context.presets().field('maxspeed');
107780
107781
107782             var chapter = {
107783                 title: 'intro.navigation.title'
107784             };
107785
107786
107787             function timeout(f, t) {
107788                 timeouts.push(window.setTimeout(f, t));
107789             }
107790
107791
107792             function eventCancel() {
107793                 event.stopPropagation();
107794                 event.preventDefault();
107795             }
107796
107797
107798             function isTownHallSelected() {
107799                 var ids = context.selectedIDs();
107800                 return ids.length === 1 && ids[0] === hallId;
107801             }
107802
107803
107804             function dragMap() {
107805                 context.enter(modeBrowse(context));
107806                 context.history().reset('initial');
107807
107808                 var msec = transitionTime(townHall, context.map().center());
107809                 if (msec) { reveal(null, null, { duration: 0 }); }
107810                 context.map().centerZoomEase(townHall, 19, msec);
107811
107812                 timeout(function() {
107813                     var centerStart = context.map().center();
107814
107815                     reveal('#surface', t('intro.navigation.drag'));
107816                     context.map().on('drawn.intro', function() {
107817                         reveal('#surface', t('intro.navigation.drag'), { duration: 0 });
107818                     });
107819
107820                     context.map().on('move.intro', function() {
107821                         var centerNow = context.map().center();
107822                         if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
107823                             context.map().on('move.intro', null);
107824                             timeout(function() { continueTo(zoomMap); }, 3000);
107825                         }
107826                     });
107827
107828                 }, msec + 100);
107829
107830                 function continueTo(nextStep) {
107831                     context.map().on('move.intro drawn.intro', null);
107832                     nextStep();
107833                 }
107834             }
107835
107836
107837             function zoomMap() {
107838                 var zoomStart = context.map().zoom();
107839
107840                 reveal('#surface',
107841                     t('intro.navigation.zoom', {
107842                         plus: icon('#iD-icon-plus', 'pre-text'),
107843                         minus: icon('#iD-icon-minus', 'pre-text')
107844                     })
107845                 );
107846
107847                 context.map().on('drawn.intro', function() {
107848                     reveal('#surface',
107849                         t('intro.navigation.zoom', {
107850                             plus: icon('#iD-icon-plus', 'pre-text'),
107851                             minus: icon('#iD-icon-minus', 'pre-text')
107852                         }), { duration: 0 }
107853                     );
107854                 });
107855
107856                 context.map().on('move.intro', function() {
107857                     if (context.map().zoom() !== zoomStart) {
107858                         context.map().on('move.intro', null);
107859                         timeout(function() { continueTo(features); }, 3000);
107860                     }
107861                 });
107862
107863                 function continueTo(nextStep) {
107864                     context.map().on('move.intro drawn.intro', null);
107865                     nextStep();
107866                 }
107867             }
107868
107869
107870             function features() {
107871                 var onClick = function() { continueTo(pointsLinesAreas); };
107872
107873                 reveal('#surface', t('intro.navigation.features'),
107874                     { buttonText: t('intro.ok'), buttonCallback: onClick }
107875                 );
107876
107877                 context.map().on('drawn.intro', function() {
107878                     reveal('#surface', t('intro.navigation.features'),
107879                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
107880                     );
107881                 });
107882
107883                 function continueTo(nextStep) {
107884                     context.map().on('drawn.intro', null);
107885                     nextStep();
107886                 }
107887             }
107888
107889             function pointsLinesAreas() {
107890                 var onClick = function() { continueTo(nodesWays); };
107891
107892                 reveal('#surface', t('intro.navigation.points_lines_areas'),
107893                     { buttonText: t('intro.ok'), buttonCallback: onClick }
107894                 );
107895
107896                 context.map().on('drawn.intro', function() {
107897                     reveal('#surface', t('intro.navigation.points_lines_areas'),
107898                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
107899                     );
107900                 });
107901
107902                 function continueTo(nextStep) {
107903                     context.map().on('drawn.intro', null);
107904                     nextStep();
107905                 }
107906             }
107907
107908             function nodesWays() {
107909                 var onClick = function() { continueTo(clickTownHall); };
107910
107911                 reveal('#surface', t('intro.navigation.nodes_ways'),
107912                     { buttonText: t('intro.ok'), buttonCallback: onClick }
107913                 );
107914
107915                 context.map().on('drawn.intro', function() {
107916                     reveal('#surface', t('intro.navigation.nodes_ways'),
107917                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
107918                     );
107919                 });
107920
107921                 function continueTo(nextStep) {
107922                     context.map().on('drawn.intro', null);
107923                     nextStep();
107924                 }
107925             }
107926
107927             function clickTownHall() {
107928                 context.enter(modeBrowse(context));
107929                 context.history().reset('initial');
107930
107931                 var entity = context.hasEntity(hallId);
107932                 if (!entity) { return; }
107933                 reveal(null, null, { duration: 0 });
107934                 context.map().centerZoomEase(entity.loc, 19, 500);
107935
107936                 timeout(function() {
107937                     var entity = context.hasEntity(hallId);
107938                     if (!entity) { return; }
107939                     var box = pointBox(entity.loc, context);
107940                     reveal(box, t('intro.navigation.click_townhall'));
107941
107942                     context.map().on('move.intro drawn.intro', function() {
107943                         var entity = context.hasEntity(hallId);
107944                         if (!entity) { return; }
107945                         var box = pointBox(entity.loc, context);
107946                         reveal(box, t('intro.navigation.click_townhall'), { duration: 0 });
107947                     });
107948
107949                     context.on('enter.intro', function() {
107950                         if (isTownHallSelected()) { continueTo(selectedTownHall); }
107951                     });
107952
107953                 }, 550);  // after centerZoomEase
107954
107955                 context.history().on('change.intro', function() {
107956                     if (!context.hasEntity(hallId)) {
107957                         continueTo(clickTownHall);
107958                     }
107959                 });
107960
107961                 function continueTo(nextStep) {
107962                     context.on('enter.intro', null);
107963                     context.map().on('move.intro drawn.intro', null);
107964                     context.history().on('change.intro', null);
107965                     nextStep();
107966                 }
107967             }
107968
107969
107970             function selectedTownHall() {
107971                 if (!isTownHallSelected()) { return clickTownHall(); }
107972
107973                 var entity = context.hasEntity(hallId);
107974                 if (!entity) { return clickTownHall(); }
107975
107976                 var box = pointBox(entity.loc, context);
107977                 var onClick = function() { continueTo(editorTownHall); };
107978
107979                 reveal(box, t('intro.navigation.selected_townhall'),
107980                     { buttonText: t('intro.ok'), buttonCallback: onClick }
107981                 );
107982
107983                 context.map().on('move.intro drawn.intro', function() {
107984                     var entity = context.hasEntity(hallId);
107985                     if (!entity) { return; }
107986                     var box = pointBox(entity.loc, context);
107987                     reveal(box, t('intro.navigation.selected_townhall'),
107988                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
107989                     );
107990                 });
107991
107992                 context.history().on('change.intro', function() {
107993                     if (!context.hasEntity(hallId)) {
107994                         continueTo(clickTownHall);
107995                     }
107996                 });
107997
107998                 function continueTo(nextStep) {
107999                     context.map().on('move.intro drawn.intro', null);
108000                     context.history().on('change.intro', null);
108001                     nextStep();
108002                 }
108003             }
108004
108005
108006             function editorTownHall() {
108007                 if (!isTownHallSelected()) { return clickTownHall(); }
108008
108009                 // disallow scrolling
108010                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108011
108012                 var onClick = function() { continueTo(presetTownHall); };
108013
108014                 reveal('.entity-editor-pane',
108015                     t('intro.navigation.editor_townhall'),
108016                     { buttonText: t('intro.ok'), buttonCallback: onClick }
108017                 );
108018
108019                 context.on('exit.intro', function() {
108020                     continueTo(clickTownHall);
108021                 });
108022
108023                 context.history().on('change.intro', function() {
108024                     if (!context.hasEntity(hallId)) {
108025                         continueTo(clickTownHall);
108026                     }
108027                 });
108028
108029                 function continueTo(nextStep) {
108030                     context.on('exit.intro', null);
108031                     context.history().on('change.intro', null);
108032                     d3_select('.inspector-wrap').on('wheel.intro', null);
108033                     nextStep();
108034                 }
108035             }
108036
108037
108038             function presetTownHall() {
108039                 if (!isTownHallSelected()) { return clickTownHall(); }
108040
108041                 // reset pane, in case user happened to change it..
108042                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
108043                 // disallow scrolling
108044                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108045
108046                 // preset match, in case the user happened to change it.
108047                 var entity = context.entity(context.selectedIDs()[0]);
108048                 var preset = context.presets().match(entity, context.graph());
108049
108050                 var onClick = function() { continueTo(fieldsTownHall); };
108051
108052                 context.on('exit.intro', function() {
108053                     continueTo(clickTownHall);
108054                 });
108055
108056                 context.history().on('change.intro', function() {
108057                     if (!context.hasEntity(hallId)) {
108058                         continueTo(clickTownHall);
108059                     }
108060                 });
108061
108062                 reveal('.inspector-body .preset-list-item.inspector-inner',
108063                     t('intro.navigation.preset_townhall', { preset: preset.name() }),
108064                     { buttonText: t('intro.ok'), buttonCallback: onClick }
108065                 );
108066
108067                 function continueTo(nextStep) {
108068                     context.on('exit.intro', null);
108069                     context.history().on('change.intro', null);
108070                     d3_select('.inspector-wrap').on('wheel.intro', null);
108071                     nextStep();
108072                 }
108073             }
108074
108075
108076             function fieldsTownHall() {
108077                 if (!isTownHallSelected()) { return clickTownHall(); }
108078
108079                 // reset pane, in case user happened to change it..
108080                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
108081                 // disallow scrolling
108082                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108083
108084                 var onClick = function() { continueTo(closeTownHall); };
108085
108086                 reveal('.inspector-body .preset-editor',
108087                     t('intro.navigation.fields_townhall'),
108088                     { buttonText: t('intro.ok'), buttonCallback: onClick }
108089                 );
108090
108091                 context.on('exit.intro', function() {
108092                     continueTo(clickTownHall);
108093                 });
108094
108095                 context.history().on('change.intro', function() {
108096                     if (!context.hasEntity(hallId)) {
108097                         continueTo(clickTownHall);
108098                     }
108099                 });
108100
108101                 function continueTo(nextStep) {
108102                     context.on('exit.intro', null);
108103                     context.history().on('change.intro', null);
108104                     d3_select('.inspector-wrap').on('wheel.intro', null);
108105                     nextStep();
108106                 }
108107             }
108108
108109
108110             function closeTownHall() {
108111                 if (!isTownHallSelected()) { return clickTownHall(); }
108112
108113                 var selector = '.entity-editor-pane button.preset-close svg use';
108114                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
108115
108116                 reveal('.entity-editor-pane',
108117                     t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') })
108118                 );
108119
108120                 context.on('exit.intro', function() {
108121                     continueTo(searchStreet);
108122                 });
108123
108124                 context.history().on('change.intro', function() {
108125                     // update the close icon in the tooltip if the user edits something.
108126                     var selector = '.entity-editor-pane button.preset-close svg use';
108127                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
108128
108129                     reveal('.entity-editor-pane',
108130                         t('intro.navigation.close_townhall', { button: icon(href, 'pre-text') }),
108131                         { duration: 0 }
108132                     );
108133                 });
108134
108135                 function continueTo(nextStep) {
108136                     context.on('exit.intro', null);
108137                     context.history().on('change.intro', null);
108138                     nextStep();
108139                 }
108140             }
108141
108142
108143             function searchStreet() {
108144                 context.enter(modeBrowse(context));
108145                 context.history().reset('initial');  // ensure spring street exists
108146
108147                 var msec = transitionTime(springStreet, context.map().center());
108148                 if (msec) { reveal(null, null, { duration: 0 }); }
108149                 context.map().centerZoomEase(springStreet, 19, msec);  // ..and user can see it
108150
108151                 timeout(function() {
108152                     reveal('.search-header input',
108153                         t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
108154                     );
108155
108156                     d3_select('.search-header input')
108157                         .on('keyup.intro', checkSearchResult);
108158                 }, msec + 100);
108159             }
108160
108161
108162             function checkSearchResult() {
108163                 var first = d3_select('.feature-list-item:nth-child(0n+2)');  // skip "No Results" item
108164                 var firstName = first.select('.entity-name');
108165                 var name = t('intro.graph.name.spring-street');
108166
108167                 if (!firstName.empty() && firstName.text() === name) {
108168                     reveal(first.node(),
108169                         t('intro.navigation.choose_street', { name: name }),
108170                         { duration: 300 }
108171                     );
108172
108173                     context.on('exit.intro', function() {
108174                         continueTo(selectedStreet);
108175                     });
108176
108177                     d3_select('.search-header input')
108178                         .on('keydown.intro', eventCancel, true)
108179                         .on('keyup.intro', null);
108180                 }
108181
108182                 function continueTo(nextStep) {
108183                     context.on('exit.intro', null);
108184                     d3_select('.search-header input')
108185                         .on('keydown.intro', null)
108186                         .on('keyup.intro', null);
108187                     nextStep();
108188                 }
108189             }
108190
108191
108192             function selectedStreet() {
108193                 if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
108194                     return searchStreet();
108195                 }
108196
108197                 var onClick = function() { continueTo(editorStreet); };
108198                 var entity = context.entity(springStreetEndId);
108199                 var box = pointBox(entity.loc, context);
108200                 box.height = 500;
108201
108202                 reveal(box,
108203                     t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
108204                     { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
108205                 );
108206
108207                 timeout(function() {
108208                     context.map().on('move.intro drawn.intro', function() {
108209                         var entity = context.hasEntity(springStreetEndId);
108210                         if (!entity) { return; }
108211                         var box = pointBox(entity.loc, context);
108212                         box.height = 500;
108213                         reveal(box,
108214                             t('intro.navigation.selected_street', { name: t('intro.graph.name.spring-street') }),
108215                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
108216                         );
108217                     });
108218                 }, 600);  // after reveal.
108219
108220                 context.on('enter.intro', function(mode) {
108221                     if (!context.hasEntity(springStreetId)) {
108222                         return continueTo(searchStreet);
108223                     }
108224                     var ids = context.selectedIDs();
108225                     if (mode.id !== 'select' || !ids.length || ids[0] !== springStreetId) {
108226                         // keep Spring Street selected..
108227                         context.enter(modeSelect(context, [springStreetId]));
108228                     }
108229                 });
108230
108231                 context.history().on('change.intro', function() {
108232                     if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
108233                         timeout(function() {
108234                             continueTo(searchStreet);
108235                         }, 300);  // after any transition (e.g. if user deleted intersection)
108236                     }
108237                 });
108238
108239                 function continueTo(nextStep) {
108240                     context.map().on('move.intro drawn.intro', null);
108241                     context.on('enter.intro', null);
108242                     context.history().on('change.intro', null);
108243                     nextStep();
108244                 }
108245             }
108246
108247
108248             function editorStreet() {
108249                 var selector = '.entity-editor-pane button.preset-close svg use';
108250                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
108251
108252                 reveal('.entity-editor-pane',
108253                     t('intro.navigation.editor_street', {
108254                         button: icon(href, 'pre-text'),
108255                         field1: onewayField.label(),
108256                         field2: maxspeedField.label()
108257                     })
108258                 );
108259
108260                 context.on('exit.intro', function() {
108261                     continueTo(play);
108262                 });
108263
108264                 context.history().on('change.intro', function() {
108265                     // update the close icon in the tooltip if the user edits something.
108266                     var selector = '.entity-editor-pane button.preset-close svg use';
108267                     var href = d3_select(selector).attr('href') || '#iD-icon-close';
108268
108269                     reveal('.entity-editor-pane',
108270                         t('intro.navigation.editor_street', {
108271                             button: icon(href, 'pre-text'),
108272                             field1: onewayField.label().toLowerCase(),
108273                             field2: maxspeedField.label().toLowerCase()
108274                         }), { duration: 0 }
108275                     );
108276                 });
108277
108278                 function continueTo(nextStep) {
108279                     context.on('exit.intro', null);
108280                     context.history().on('change.intro', null);
108281                     nextStep();
108282                 }
108283             }
108284
108285
108286             function play() {
108287                 dispatch$1.call('done');
108288                 reveal('.ideditor',
108289                     t('intro.navigation.play', { next: t('intro.points.title') }), {
108290                         tooltipBox: '.intro-nav-wrap .chapter-point',
108291                         buttonText: t('intro.ok'),
108292                         buttonCallback: function() { reveal('.ideditor'); }
108293                     }
108294                 );
108295             }
108296
108297
108298             chapter.enter = function() {
108299                 dragMap();
108300             };
108301
108302
108303             chapter.exit = function() {
108304                 timeouts.forEach(window.clearTimeout);
108305                 context.on('enter.intro exit.intro', null);
108306                 context.map().on('move.intro drawn.intro', null);
108307                 context.history().on('change.intro', null);
108308                 d3_select('.inspector-wrap').on('wheel.intro', null);
108309                 d3_select('.search-header input').on('keydown.intro keyup.intro', null);
108310             };
108311
108312
108313             chapter.restart = function() {
108314                 chapter.exit();
108315                 chapter.enter();
108316             };
108317
108318
108319             return utilRebind(chapter, dispatch$1, 'on');
108320         }
108321
108322         function uiIntroPoint(context, reveal) {
108323             var dispatch$1 = dispatch('done');
108324             var timeouts = [];
108325             var intersection = [-85.63279, 41.94394];
108326             var building = [-85.632422, 41.944045];
108327             var cafePreset = context.presets().item('amenity/cafe');
108328             var _pointID = null;
108329
108330
108331             var chapter = {
108332                 title: 'intro.points.title'
108333             };
108334
108335
108336             function timeout(f, t) {
108337                 timeouts.push(window.setTimeout(f, t));
108338             }
108339
108340
108341             function revealEditMenu(loc, text, options) {
108342                 var rect = context.surfaceRect();
108343                 var point = context.curtainProjection(loc);
108344                 var pad = 40;
108345                 var width = 250 + (2 * pad);
108346                 var height = 250;
108347                 var startX = rect.left + point[0];
108348                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
108349                 var box = {
108350                     left: left,
108351                     top: point[1] + rect.top - 60,
108352                     width: width,
108353                     height: height
108354                 };
108355                 reveal(box, text, options);
108356             }
108357
108358
108359             function eventCancel() {
108360                 event.stopPropagation();
108361                 event.preventDefault();
108362             }
108363
108364
108365             function addPoint() {
108366                 context.enter(modeBrowse(context));
108367                 context.history().reset('initial');
108368
108369                 var msec = transitionTime(intersection, context.map().center());
108370                 if (msec) { reveal(null, null, { duration: 0 }); }
108371                 context.map().centerZoomEase(intersection, 19, msec);
108372
108373                 timeout(function() {
108374                     var tooltip = reveal('button.add-point',
108375                         t('intro.points.add_point', { button: icon('#iD-icon-point', 'pre-text') }));
108376
108377                     _pointID = null;
108378
108379                     tooltip.selectAll('.popover-inner')
108380                         .insert('svg', 'span')
108381                         .attr('class', 'tooltip-illustration')
108382                         .append('use')
108383                         .attr('xlink:href', '#iD-graphic-points');
108384
108385                     context.on('enter.intro', function(mode) {
108386                         if (mode.id !== 'add-point') { return; }
108387                         continueTo(placePoint);
108388                     });
108389                 }, msec + 100);
108390
108391                 function continueTo(nextStep) {
108392                     context.on('enter.intro', null);
108393                     nextStep();
108394                 }
108395             }
108396
108397
108398             function placePoint() {
108399                 if (context.mode().id !== 'add-point') {
108400                     return chapter.restart();
108401                 }
108402
108403                 var pointBox = pad$2(building, 150, context);
108404                 reveal(pointBox, t('intro.points.place_point'));
108405
108406                 context.map().on('move.intro drawn.intro', function() {
108407                     pointBox = pad$2(building, 150, context);
108408                     reveal(pointBox, t('intro.points.place_point'), { duration: 0 });
108409                 });
108410
108411                 context.on('enter.intro', function(mode) {
108412                     if (mode.id !== 'select') { return chapter.restart(); }
108413                     _pointID = context.mode().selectedIDs()[0];
108414                     continueTo(searchPreset);
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 searchPreset() {
108426                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
108427                     return addPoint();
108428                 }
108429
108430                 // disallow scrolling
108431                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108432
108433                 d3_select('.preset-search-input')
108434                     .on('keydown.intro', null)
108435                     .on('keyup.intro', checkPresetSearch);
108436
108437                 reveal('.preset-search-input',
108438                     t('intro.points.search_cafe', { preset: cafePreset.name() })
108439                 );
108440
108441                 context.on('enter.intro', function(mode) {
108442                     if (!_pointID || !context.hasEntity(_pointID)) {
108443                         return continueTo(addPoint);
108444                     }
108445
108446                     var ids = context.selectedIDs();
108447                     if (mode.id !== 'select' || !ids.length || ids[0] !== _pointID) {
108448                         // keep the user's point selected..
108449                         context.enter(modeSelect(context, [_pointID]));
108450
108451                         // disallow scrolling
108452                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108453
108454                         d3_select('.preset-search-input')
108455                             .on('keydown.intro', null)
108456                             .on('keyup.intro', checkPresetSearch);
108457
108458                         reveal('.preset-search-input',
108459                             t('intro.points.search_cafe', { preset: cafePreset.name() })
108460                         );
108461
108462                         context.history().on('change.intro', null);
108463                     }
108464                 });
108465
108466
108467                 function checkPresetSearch() {
108468                     var first = d3_select('.preset-list-item:first-child');
108469
108470                     if (first.classed('preset-amenity-cafe')) {
108471                         d3_select('.preset-search-input')
108472                             .on('keydown.intro', eventCancel, true)
108473                             .on('keyup.intro', null);
108474
108475                         reveal(first.select('.preset-list-button').node(),
108476                             t('intro.points.choose_cafe', { preset: cafePreset.name() }),
108477                             { duration: 300 }
108478                         );
108479
108480                         context.history().on('change.intro', function() {
108481                             continueTo(aboutFeatureEditor);
108482                         });
108483                     }
108484                 }
108485
108486                 function continueTo(nextStep) {
108487                     context.on('enter.intro', null);
108488                     context.history().on('change.intro', null);
108489                     d3_select('.inspector-wrap').on('wheel.intro', null);
108490                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
108491                     nextStep();
108492                 }
108493             }
108494
108495
108496             function aboutFeatureEditor() {
108497                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
108498                     return addPoint();
108499                 }
108500
108501                 timeout(function() {
108502                     reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
108503                         tooltipClass: 'intro-points-describe',
108504                         buttonText: t('intro.ok'),
108505                         buttonCallback: function() { continueTo(addName); }
108506                     });
108507                 }, 400);
108508
108509                 context.on('exit.intro', function() {
108510                     // if user leaves select mode here, just continue with the tutorial.
108511                     continueTo(reselectPoint);
108512                 });
108513
108514                 function continueTo(nextStep) {
108515                     context.on('exit.intro', null);
108516                     nextStep();
108517                 }
108518             }
108519
108520
108521             function addName() {
108522                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
108523                     return addPoint();
108524                 }
108525
108526                 // reset pane, in case user happened to change it..
108527                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
108528
108529                 timeout(function() {
108530                     // It's possible for the user to add a name in a previous step..
108531                     // If so, don't tell them to add the name in this step.
108532                     // Give them an OK button instead.
108533                     var entity = context.entity(_pointID);
108534                     if (entity.tags.name) {
108535                         var tooltip = reveal('.entity-editor-pane', t('intro.points.add_name'), {
108536                             tooltipClass: 'intro-points-describe',
108537                             buttonText: t('intro.ok'),
108538                             buttonCallback: function() { continueTo(addCloseEditor); }
108539                         });
108540                         tooltip.select('.instruction').style('display', 'none');
108541
108542                     } else {
108543                         reveal('.entity-editor-pane', t('intro.points.add_name'),
108544                             { tooltipClass: 'intro-points-describe' }
108545                         );
108546                     }
108547                 }, 400);
108548
108549                 context.history().on('change.intro', function() {
108550                     continueTo(addCloseEditor);
108551                 });
108552
108553                 context.on('exit.intro', function() {
108554                     // if user leaves select mode here, just continue with the tutorial.
108555                     continueTo(reselectPoint);
108556                 });
108557
108558                 function continueTo(nextStep) {
108559                     context.on('exit.intro', null);
108560                     context.history().on('change.intro', null);
108561                     nextStep();
108562                 }
108563             }
108564
108565
108566             function addCloseEditor() {
108567                 // reset pane, in case user happened to change it..
108568                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
108569
108570                 var selector = '.entity-editor-pane button.preset-close svg use';
108571                 var href = d3_select(selector).attr('href') || '#iD-icon-close';
108572
108573                 context.on('exit.intro', function() {
108574                     continueTo(reselectPoint);
108575                 });
108576
108577                 reveal('.entity-editor-pane',
108578                     t('intro.points.add_close', { button: icon(href, 'pre-text') })
108579                 );
108580
108581                 function continueTo(nextStep) {
108582                     context.on('exit.intro', null);
108583                     nextStep();
108584                 }
108585             }
108586
108587
108588             function reselectPoint() {
108589                 if (!_pointID) { return chapter.restart(); }
108590                 var entity = context.hasEntity(_pointID);
108591                 if (!entity) { return chapter.restart(); }
108592
108593                 // make sure it's still a cafe, in case user somehow changed it..
108594                 var oldPreset = context.presets().match(entity, context.graph());
108595                 context.replace(actionChangePreset(_pointID, oldPreset, cafePreset));
108596
108597                 context.enter(modeBrowse(context));
108598
108599                 var msec = transitionTime(entity.loc, context.map().center());
108600                 if (msec) { reveal(null, null, { duration: 0 }); }
108601                 context.map().centerEase(entity.loc, msec);
108602
108603                 timeout(function() {
108604                     var box = pointBox(entity.loc, context);
108605                     reveal(box, t('intro.points.reselect'), { duration: 600 });
108606
108607                     timeout(function() {
108608                         context.map().on('move.intro drawn.intro', function() {
108609                             var entity = context.hasEntity(_pointID);
108610                             if (!entity) { return chapter.restart(); }
108611                             var box = pointBox(entity.loc, context);
108612                             reveal(box, t('intro.points.reselect'), { duration: 0 });
108613                         });
108614                     }, 600); // after reveal..
108615
108616                     context.on('enter.intro', function(mode) {
108617                         if (mode.id !== 'select') { return; }
108618                         continueTo(updatePoint);
108619                     });
108620
108621                 }, msec + 100);
108622
108623                 function continueTo(nextStep) {
108624                     context.map().on('move.intro drawn.intro', null);
108625                     context.on('enter.intro', null);
108626                     nextStep();
108627                 }
108628             }
108629
108630
108631             function updatePoint() {
108632                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
108633                     return continueTo(reselectPoint);
108634                 }
108635
108636                 // reset pane, in case user happened to untag the point..
108637                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
108638
108639                 context.on('exit.intro', function() {
108640                     continueTo(reselectPoint);
108641                 });
108642
108643                 context.history().on('change.intro', function() {
108644                     continueTo(updateCloseEditor);
108645                 });
108646
108647                 timeout(function() {
108648                     reveal('.entity-editor-pane', t('intro.points.update'),
108649                         { tooltipClass: 'intro-points-describe' }
108650                     );
108651                 }, 400);
108652
108653                 function continueTo(nextStep) {
108654                     context.on('exit.intro', null);
108655                     context.history().on('change.intro', null);
108656                     nextStep();
108657                 }
108658             }
108659
108660
108661             function updateCloseEditor() {
108662                 if (context.mode().id !== 'select' || !_pointID || !context.hasEntity(_pointID)) {
108663                     return continueTo(reselectPoint);
108664                 }
108665
108666                 // reset pane, in case user happened to change it..
108667                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
108668
108669                 context.on('exit.intro', function() {
108670                     continueTo(rightClickPoint);
108671                 });
108672
108673                 timeout(function() {
108674                     reveal('.entity-editor-pane',
108675                         t('intro.points.update_close', { button: icon('#iD-icon-apply', 'pre-text') })
108676                     );
108677                 }, 500);
108678
108679                 function continueTo(nextStep) {
108680                     context.on('exit.intro', null);
108681                     nextStep();
108682                 }
108683             }
108684
108685
108686             function rightClickPoint() {
108687                 if (!_pointID) { return chapter.restart(); }
108688                 var entity = context.hasEntity(_pointID);
108689                 if (!entity) { return chapter.restart(); }
108690
108691                 context.enter(modeBrowse(context));
108692
108693                 var box = pointBox(entity.loc, context);
108694                 reveal(box, t('intro.points.rightclick'), { duration: 600 });
108695
108696                 timeout(function() {
108697                     context.map().on('move.intro drawn.intro', function() {
108698                         var entity = context.hasEntity(_pointID);
108699                         if (!entity) { return chapter.restart(); }
108700                         var box = pointBox(entity.loc, context);
108701                         reveal(box, t('intro.points.rightclick'), { duration: 0 });
108702                     });
108703                 }, 600); // after reveal
108704
108705                 context.on('enter.intro', function(mode) {
108706                     if (mode.id !== 'select') { return; }
108707                     var ids = context.selectedIDs();
108708                     if (ids.length !== 1 || ids[0] !== _pointID) { return; }
108709
108710                     timeout(function() {
108711                         var node = selectMenuItem('delete').node();
108712                         if (!node) { return; }
108713                         continueTo(enterDelete);
108714                     }, 300);  // after menu visible
108715                 });
108716
108717                 function continueTo(nextStep) {
108718                     context.on('enter.intro', null);
108719                     context.map().on('move.intro drawn.intro', null);
108720                     nextStep();
108721                 }
108722             }
108723
108724
108725             function enterDelete() {
108726                 if (!_pointID) { return chapter.restart(); }
108727                 var entity = context.hasEntity(_pointID);
108728                 if (!entity) { return chapter.restart(); }
108729
108730                 var node = selectMenuItem('delete').node();
108731                 if (!node) { return continueTo(rightClickPoint); }
108732
108733                 revealEditMenu(entity.loc,
108734                     t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') })
108735                 );
108736
108737                 timeout(function() {
108738                     context.map().on('move.intro drawn.intro', function() {
108739                         revealEditMenu(entity.loc,
108740                             t('intro.points.delete', { button: icon('#iD-operation-delete', 'pre-text') }),
108741                             { duration: 0}
108742                         );
108743                     });
108744                 }, 300); // after menu visible
108745
108746                 context.on('exit.intro', function() {
108747                     if (!_pointID) { return chapter.restart(); }
108748                     var entity = context.hasEntity(_pointID);
108749                     if (entity) { return continueTo(rightClickPoint); }  // point still exists
108750                 });
108751
108752                 context.history().on('change.intro', function(changed) {
108753                     if (changed.deleted().length) {
108754                         continueTo(undo);
108755                     }
108756                 });
108757
108758                 function continueTo(nextStep) {
108759                     context.map().on('move.intro drawn.intro', null);
108760                     context.history().on('change.intro', null);
108761                     context.on('exit.intro', null);
108762                     nextStep();
108763                 }
108764             }
108765
108766
108767             function undo() {
108768                 context.history().on('change.intro', function() {
108769                     continueTo(play);
108770                 });
108771
108772                 var iconName = '#iD-icon-' + (textDirection === 'rtl' ? 'redo' : 'undo');
108773                 reveal('#bar button.undo-button',
108774                     t('intro.points.undo', { button: icon(iconName, 'pre-text') })
108775                 );
108776
108777                 function continueTo(nextStep) {
108778                     context.history().on('change.intro', null);
108779                     nextStep();
108780                 }
108781             }
108782
108783
108784             function play() {
108785                 dispatch$1.call('done');
108786                 reveal('.ideditor',
108787                     t('intro.points.play', { next: t('intro.areas.title') }), {
108788                         tooltipBox: '.intro-nav-wrap .chapter-area',
108789                         buttonText: t('intro.ok'),
108790                         buttonCallback: function() { reveal('.ideditor'); }
108791                     }
108792                 );
108793             }
108794
108795
108796             chapter.enter = function() {
108797                 addPoint();
108798             };
108799
108800
108801             chapter.exit = function() {
108802                 timeouts.forEach(window.clearTimeout);
108803                 context.on('enter.intro exit.intro', null);
108804                 context.map().on('move.intro drawn.intro', null);
108805                 context.history().on('change.intro', null);
108806                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
108807                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
108808             };
108809
108810
108811             chapter.restart = function() {
108812                 chapter.exit();
108813                 chapter.enter();
108814             };
108815
108816
108817             return utilRebind(chapter, dispatch$1, 'on');
108818         }
108819
108820         function uiIntroArea(context, reveal) {
108821             var dispatch$1 = dispatch('done');
108822             var playground = [-85.63552, 41.94159];
108823             var playgroundPreset = context.presets().item('leisure/playground');
108824             var descriptionField = context.presets().field('description');
108825             var timeouts = [];
108826             var _areaID;
108827
108828
108829             var chapter = {
108830                 title: 'intro.areas.title'
108831             };
108832
108833
108834             function timeout(f, t) {
108835                 timeouts.push(window.setTimeout(f, t));
108836             }
108837
108838
108839             function eventCancel() {
108840                 event.stopPropagation();
108841                 event.preventDefault();
108842             }
108843
108844
108845             function revealPlayground(center, text, options) {
108846                 var padding = 180 * Math.pow(2, context.map().zoom() - 19.5);
108847                 var box = pad$2(center, padding, context);
108848                 reveal(box, text, options);
108849             }
108850
108851
108852             function addArea() {
108853                 context.enter(modeBrowse(context));
108854                 context.history().reset('initial');
108855                 _areaID = null;
108856
108857                 var msec = transitionTime(playground, context.map().center());
108858                 if (msec) { reveal(null, null, { duration: 0 }); }
108859                 context.map().centerZoomEase(playground, 19, msec);
108860
108861                 timeout(function() {
108862                     var tooltip = reveal('button.add-area',
108863                         t('intro.areas.add_playground', { button: icon('#iD-icon-area', 'pre-text') }));
108864
108865                     tooltip.selectAll('.popover-inner')
108866                         .insert('svg', 'span')
108867                         .attr('class', 'tooltip-illustration')
108868                         .append('use')
108869                         .attr('xlink:href', '#iD-graphic-areas');
108870
108871                     context.on('enter.intro', function(mode) {
108872                         if (mode.id !== 'add-area') { return; }
108873                         continueTo(startPlayground);
108874                     });
108875                 }, msec + 100);
108876
108877                 function continueTo(nextStep) {
108878                     context.on('enter.intro', null);
108879                     nextStep();
108880                 }
108881             }
108882
108883
108884             function startPlayground() {
108885                 if (context.mode().id !== 'add-area') {
108886                     return chapter.restart();
108887                 }
108888
108889                 _areaID = null;
108890                 context.map().zoomEase(19.5, 500);
108891
108892                 timeout(function() {
108893                     revealPlayground(playground,
108894                         t('intro.areas.start_playground'), { duration: 250 }
108895                     );
108896
108897                     timeout(function() {
108898                         context.map().on('move.intro drawn.intro', function() {
108899                             revealPlayground(playground,
108900                                 t('intro.areas.start_playground'), { duration: 0 }
108901                             );
108902                         });
108903                         context.on('enter.intro', function(mode) {
108904                             if (mode.id !== 'draw-area') { return chapter.restart(); }
108905                             continueTo(continuePlayground);
108906                         });
108907                     }, 250);  // after reveal
108908
108909                 }, 550);  // after easing
108910
108911                 function continueTo(nextStep) {
108912                     context.map().on('move.intro drawn.intro', null);
108913                     context.on('enter.intro', null);
108914                     nextStep();
108915                 }
108916             }
108917
108918
108919             function continuePlayground() {
108920                 if (context.mode().id !== 'draw-area') {
108921                     return chapter.restart();
108922                 }
108923
108924                 _areaID = null;
108925                 revealPlayground(playground,
108926                     t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
108927                     { duration: 250 }
108928                 );
108929
108930                 timeout(function() {
108931                     context.map().on('move.intro drawn.intro', function() {
108932                         revealPlayground(playground,
108933                             t('intro.areas.continue_playground', { alt: uiCmd.display('⌥') }),
108934                             { duration: 0 }
108935                         );
108936                     });
108937                 }, 250);  // after reveal
108938
108939                 context.on('enter.intro', function(mode) {
108940                     if (mode.id === 'draw-area') {
108941                         var entity = context.hasEntity(context.selectedIDs()[0]);
108942                         if (entity && entity.nodes.length >= 6) {
108943                             return continueTo(finishPlayground);
108944                         } else {
108945                             return;
108946                         }
108947                     } else if (mode.id === 'select') {
108948                         _areaID = context.selectedIDs()[0];
108949                         return continueTo(searchPresets);
108950                     } else {
108951                         return chapter.restart();
108952                     }
108953                 });
108954
108955                 function continueTo(nextStep) {
108956                     context.map().on('move.intro drawn.intro', null);
108957                     context.on('enter.intro', null);
108958                     nextStep();
108959                 }
108960             }
108961
108962
108963             function finishPlayground() {
108964                 if (context.mode().id !== 'draw-area') {
108965                     return chapter.restart();
108966                 }
108967
108968                 _areaID = null;
108969                 revealPlayground(playground,
108970                     t('intro.areas.finish_playground'), { duration: 250 }
108971                 );
108972
108973                 timeout(function() {
108974                     context.map().on('move.intro drawn.intro', function() {
108975                         revealPlayground(playground,
108976                             t('intro.areas.finish_playground'), { duration: 0 }
108977                         );
108978                     });
108979                 }, 250);  // after reveal
108980
108981                 context.on('enter.intro', function(mode) {
108982                     if (mode.id === 'draw-area') {
108983                         return;
108984                     } else if (mode.id === 'select') {
108985                         _areaID = context.selectedIDs()[0];
108986                         return continueTo(searchPresets);
108987                     } else {
108988                         return chapter.restart();
108989                     }
108990                 });
108991
108992                 function continueTo(nextStep) {
108993                     context.map().on('move.intro drawn.intro', null);
108994                     context.on('enter.intro', null);
108995                     nextStep();
108996                 }
108997             }
108998
108999
109000             function searchPresets() {
109001                 if (!_areaID || !context.hasEntity(_areaID)) {
109002                     return addArea();
109003                 }
109004                 var ids = context.selectedIDs();
109005                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
109006                     context.enter(modeSelect(context, [_areaID]));
109007                 }
109008
109009                 // disallow scrolling
109010                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109011
109012                 timeout(function() {
109013                     // reset pane, in case user somehow happened to change it..
109014                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109015
109016                     d3_select('.preset-search-input')
109017                         .on('keydown.intro', null)
109018                         .on('keyup.intro', checkPresetSearch);
109019
109020                     reveal('.preset-search-input',
109021                         t('intro.areas.search_playground', { preset: playgroundPreset.name() })
109022                     );
109023                 }, 400);  // after preset list pane visible..
109024
109025                 context.on('enter.intro', function(mode) {
109026                     if (!_areaID || !context.hasEntity(_areaID)) {
109027                         return continueTo(addArea);
109028                     }
109029
109030                     var ids = context.selectedIDs();
109031                     if (mode.id !== 'select' || !ids.length || ids[0] !== _areaID) {
109032                         // keep the user's area selected..
109033                         context.enter(modeSelect(context, [_areaID]));
109034
109035                         // reset pane, in case user somehow happened to change it..
109036                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109037                         // disallow scrolling
109038                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109039
109040                         d3_select('.preset-search-input')
109041                             .on('keydown.intro', null)
109042                             .on('keyup.intro', checkPresetSearch);
109043
109044                         reveal('.preset-search-input',
109045                             t('intro.areas.search_playground', { preset: playgroundPreset.name() })
109046                         );
109047
109048                         context.history().on('change.intro', null);
109049                     }
109050                 });
109051
109052                 function checkPresetSearch() {
109053                     var first = d3_select('.preset-list-item:first-child');
109054
109055                     if (first.classed('preset-leisure-playground')) {
109056                         reveal(first.select('.preset-list-button').node(),
109057                             t('intro.areas.choose_playground', { preset: playgroundPreset.name() }),
109058                             { duration: 300 }
109059                         );
109060
109061                         d3_select('.preset-search-input')
109062                             .on('keydown.intro', eventCancel, true)
109063                             .on('keyup.intro', null);
109064
109065                         context.history().on('change.intro', function() {
109066                             continueTo(clickAddField);
109067                         });
109068                     }
109069                 }
109070
109071                 function continueTo(nextStep) {
109072                     d3_select('.inspector-wrap').on('wheel.intro', null);
109073                     context.on('enter.intro', null);
109074                     context.history().on('change.intro', null);
109075                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
109076                     nextStep();
109077                 }
109078             }
109079
109080
109081             function clickAddField() {
109082                 if (!_areaID || !context.hasEntity(_areaID)) {
109083                     return addArea();
109084                 }
109085                 var ids = context.selectedIDs();
109086                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
109087                     return searchPresets();
109088                 }
109089
109090                 if (!d3_select('.form-field-description').empty()) {
109091                     return continueTo(describePlayground);
109092                 }
109093
109094                 // disallow scrolling
109095                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109096
109097                 timeout(function() {
109098                     // reset pane, in case user somehow happened to change it..
109099                     d3_select('.inspector-wrap .panewrap').style('right', '0%');
109100
109101                     // It's possible for the user to add a description in a previous step..
109102                     // If they did this already, just continue to next step.
109103                     var entity = context.entity(_areaID);
109104                     if (entity.tags.description) {
109105                         return continueTo(play);
109106                     }
109107
109108                     // scroll "Add field" into view
109109                     var box = d3_select('.more-fields').node().getBoundingClientRect();
109110                     if (box.top > 300) {
109111                         var pane = d3_select('.entity-editor-pane .inspector-body');
109112                         var start = pane.node().scrollTop;
109113                         var end = start + (box.top - 300);
109114
109115                         pane
109116                             .transition()
109117                             .duration(250)
109118                             .tween('scroll.inspector', function() {
109119                                 var node = this;
109120                                 var i = d3_interpolateNumber(start, end);
109121                                 return function(t) {
109122                                     node.scrollTop = i(t);
109123                                 };
109124                             });
109125                     }
109126
109127                     timeout(function() {
109128                         reveal('.more-fields .combobox-input',
109129                             t('intro.areas.add_field'),
109130                             { duration: 300 }
109131                         );
109132
109133                         d3_select('.more-fields .combobox-input')
109134                             .on('click.intro', function() {
109135                                 // Watch for the combobox to appear...
109136                                 var watcher;
109137                                 watcher = window.setInterval(function() {
109138                                     if (!d3_select('div.combobox').empty()) {
109139                                         window.clearInterval(watcher);
109140                                         continueTo(chooseDescriptionField);
109141                                     }
109142                                 }, 300);
109143                             });
109144                     }, 300);  // after "Add Field" visible
109145
109146                 }, 400);  // after editor pane visible
109147
109148                 context.on('exit.intro', function() {
109149                     return continueTo(searchPresets);
109150                 });
109151
109152                 function continueTo(nextStep) {
109153                     d3_select('.inspector-wrap').on('wheel.intro', null);
109154                     d3_select('.more-fields .combobox-input').on('click.intro', null);
109155                     context.on('exit.intro', null);
109156                     nextStep();
109157                 }
109158             }
109159
109160
109161             function chooseDescriptionField() {
109162                 if (!_areaID || !context.hasEntity(_areaID)) {
109163                     return addArea();
109164                 }
109165                 var ids = context.selectedIDs();
109166                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
109167                     return searchPresets();
109168                 }
109169
109170                 if (!d3_select('.form-field-description').empty()) {
109171                     return continueTo(describePlayground);
109172                 }
109173
109174                 // Make sure combobox is ready..
109175                 if (d3_select('div.combobox').empty()) {
109176                     return continueTo(clickAddField);
109177                 }
109178                 // Watch for the combobox to go away..
109179                 var watcher;
109180                 watcher = window.setInterval(function() {
109181                     if (d3_select('div.combobox').empty()) {
109182                         window.clearInterval(watcher);
109183                         timeout(function() {
109184                             if (d3_select('.form-field-description').empty()) {
109185                                 continueTo(retryChooseDescription);
109186                             } else {
109187                                 continueTo(describePlayground);
109188                             }
109189                         }, 300);  // after description field added.
109190                     }
109191                 }, 300);
109192
109193                 reveal('div.combobox',
109194                     t('intro.areas.choose_field', { field: descriptionField.label() }),
109195                     { duration: 300 }
109196                 );
109197
109198                 context.on('exit.intro', function() {
109199                     return continueTo(searchPresets);
109200                 });
109201
109202                 function continueTo(nextStep) {
109203                     if (watcher) { window.clearInterval(watcher); }
109204                     context.on('exit.intro', null);
109205                     nextStep();
109206                 }
109207             }
109208
109209
109210             function describePlayground() {
109211                 if (!_areaID || !context.hasEntity(_areaID)) {
109212                     return addArea();
109213                 }
109214                 var ids = context.selectedIDs();
109215                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
109216                     return searchPresets();
109217                 }
109218
109219                 // reset pane, in case user happened to change it..
109220                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
109221
109222                 if (d3_select('.form-field-description').empty()) {
109223                     return continueTo(retryChooseDescription);
109224                 }
109225
109226                 context.on('exit.intro', function() {
109227                     continueTo(play);
109228                 });
109229
109230                 reveal('.entity-editor-pane',
109231                     t('intro.areas.describe_playground', { button: icon('#iD-icon-apply', 'pre-text') }),
109232                     { duration: 300 }
109233                 );
109234
109235                 function continueTo(nextStep) {
109236                     context.on('exit.intro', null);
109237                     nextStep();
109238                 }
109239             }
109240
109241
109242             function retryChooseDescription() {
109243                 if (!_areaID || !context.hasEntity(_areaID)) {
109244                     return addArea();
109245                 }
109246                 var ids = context.selectedIDs();
109247                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _areaID) {
109248                     return searchPresets();
109249                 }
109250
109251                 // reset pane, in case user happened to change it..
109252                 d3_select('.inspector-wrap .panewrap').style('right', '0%');
109253
109254                 reveal('.entity-editor-pane',
109255                     t('intro.areas.retry_add_field', { field: descriptionField.label() }), {
109256                     buttonText: t('intro.ok'),
109257                     buttonCallback: function() { continueTo(clickAddField); }
109258                 });
109259
109260                 context.on('exit.intro', function() {
109261                     return continueTo(searchPresets);
109262                 });
109263
109264                 function continueTo(nextStep) {
109265                     context.on('exit.intro', null);
109266                     nextStep();
109267                 }
109268             }
109269
109270
109271             function play() {
109272                 dispatch$1.call('done');
109273                 reveal('.ideditor',
109274                     t('intro.areas.play', { next: t('intro.lines.title') }), {
109275                         tooltipBox: '.intro-nav-wrap .chapter-line',
109276                         buttonText: t('intro.ok'),
109277                         buttonCallback: function() { reveal('.ideditor'); }
109278                     }
109279                 );
109280             }
109281
109282
109283             chapter.enter = function() {
109284                 addArea();
109285             };
109286
109287
109288             chapter.exit = function() {
109289                 timeouts.forEach(window.clearTimeout);
109290                 context.on('enter.intro exit.intro', null);
109291                 context.map().on('move.intro drawn.intro', null);
109292                 context.history().on('change.intro', null);
109293                 d3_select('.inspector-wrap').on('wheel.intro', null);
109294                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
109295                 d3_select('.more-fields .combobox-input').on('click.intro', null);
109296             };
109297
109298
109299             chapter.restart = function() {
109300                 chapter.exit();
109301                 chapter.enter();
109302             };
109303
109304
109305             return utilRebind(chapter, dispatch$1, 'on');
109306         }
109307
109308         function uiIntroLine(context, reveal) {
109309             var dispatch$1 = dispatch('done');
109310             var timeouts = [];
109311             var _tulipRoadID = null;
109312             var flowerRoadID = 'w646';
109313             var tulipRoadStart = [-85.6297754121684, 41.95805253325314];
109314             var tulipRoadMidpoint = [-85.62975395449628, 41.95787501510204];
109315             var tulipRoadIntersection = [-85.62974496187628, 41.95742515554585];
109316             var roadCategory = context.presets().item('category-road_minor');
109317             var residentialPreset = context.presets().item('highway/residential');
109318             var woodRoadID = 'w525';
109319             var woodRoadEndID = 'n2862';
109320             var woodRoadAddNode = [-85.62390110349587, 41.95397111462291];
109321             var woodRoadDragEndpoint = [-85.623867390213, 41.95466987786487];
109322             var woodRoadDragMidpoint = [-85.62386254803509, 41.95430395953872];
109323             var washingtonStreetID = 'w522';
109324             var twelfthAvenueID = 'w1';
109325             var eleventhAvenueEndID = 'n3550';
109326             var twelfthAvenueEndID = 'n5';
109327             var _washingtonSegmentID = null;
109328             var eleventhAvenueEnd = context.entity(eleventhAvenueEndID).loc;
109329             var twelfthAvenueEnd = context.entity(twelfthAvenueEndID).loc;
109330             var deleteLinesLoc = [-85.6219395542764, 41.95228033922477];
109331             var twelfthAvenue = [-85.62219310052491, 41.952505413152956];
109332
109333
109334             var chapter = {
109335                 title: 'intro.lines.title'
109336             };
109337
109338
109339             function timeout(f, t) {
109340                 timeouts.push(window.setTimeout(f, t));
109341             }
109342
109343
109344             function eventCancel() {
109345                 event.stopPropagation();
109346                 event.preventDefault();
109347             }
109348
109349
109350             function revealEditMenu(loc, text, options) {
109351                 var rect = context.surfaceRect();
109352                 var point = context.curtainProjection(loc);
109353                 var pad = 40;
109354                 var width = 250 + (2 * pad);
109355                 var height = 350;
109356                 var startX = rect.left + point[0];
109357                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
109358                 var box = {
109359                     left: left,
109360                     top: point[1] + rect.top - 60,
109361                     width: width,
109362                     height: height
109363                 };
109364                 reveal(box, text, options);
109365             }
109366
109367
109368             function addLine() {
109369                 context.enter(modeBrowse(context));
109370                 context.history().reset('initial');
109371
109372                 var msec = transitionTime(tulipRoadStart, context.map().center());
109373                 if (msec) { reveal(null, null, { duration: 0 }); }
109374                 context.map().centerZoomEase(tulipRoadStart, 18.5, msec);
109375
109376                 timeout(function() {
109377                     var tooltip = reveal('button.add-line',
109378                         t('intro.lines.add_line', { button: icon('#iD-icon-line', 'pre-text') }));
109379
109380                     tooltip.selectAll('.popover-inner')
109381                         .insert('svg', 'span')
109382                         .attr('class', 'tooltip-illustration')
109383                         .append('use')
109384                         .attr('xlink:href', '#iD-graphic-lines');
109385
109386                     context.on('enter.intro', function(mode) {
109387                         if (mode.id !== 'add-line') { return; }
109388                         continueTo(startLine);
109389                     });
109390                 }, msec + 100);
109391
109392                 function continueTo(nextStep) {
109393                     context.on('enter.intro', null);
109394                     nextStep();
109395                 }
109396             }
109397
109398
109399             function startLine() {
109400                 if (context.mode().id !== 'add-line') { return chapter.restart(); }
109401
109402                 _tulipRoadID = null;
109403
109404                 var padding = 70 * Math.pow(2, context.map().zoom() - 18);
109405                 var box = pad$2(tulipRoadStart, padding, context);
109406                 box.height = box.height + 100;
109407                 reveal(box, t('intro.lines.start_line'));
109408
109409                 context.map().on('move.intro drawn.intro', function() {
109410                     padding = 70 * Math.pow(2, context.map().zoom() - 18);
109411                     box = pad$2(tulipRoadStart, padding, context);
109412                     box.height = box.height + 100;
109413                     reveal(box, t('intro.lines.start_line'), { duration: 0 });
109414                 });
109415
109416                 context.on('enter.intro', function(mode) {
109417                     if (mode.id !== 'draw-line') { return chapter.restart(); }
109418                     continueTo(drawLine);
109419                 });
109420
109421                 function continueTo(nextStep) {
109422                     context.map().on('move.intro drawn.intro', null);
109423                     context.on('enter.intro', null);
109424                     nextStep();
109425                 }
109426             }
109427
109428
109429             function drawLine() {
109430                 if (context.mode().id !== 'draw-line') { return chapter.restart(); }
109431
109432                 _tulipRoadID = context.mode().selectedIDs()[0];
109433                 context.map().centerEase(tulipRoadMidpoint, 500);
109434
109435                 timeout(function() {
109436                     var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
109437                     var box = pad$2(tulipRoadMidpoint, padding, context);
109438                     box.height = box.height * 2;
109439                     reveal(box,
109440                         t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') })
109441                     );
109442
109443                     context.map().on('move.intro drawn.intro', function() {
109444                         padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
109445                         box = pad$2(tulipRoadMidpoint, padding, context);
109446                         box.height = box.height * 2;
109447                         reveal(box,
109448                             t('intro.lines.intersect', { name: t('intro.graph.name.flower-street') }),
109449                             { duration: 0 }
109450                         );
109451                     });
109452                 }, 550);  // after easing..
109453
109454                 context.history().on('change.intro', function() {
109455                     if (isLineConnected()) {
109456                         continueTo(continueLine);
109457                     }
109458                 });
109459
109460                 context.on('enter.intro', function(mode) {
109461                     if (mode.id === 'draw-line') {
109462                         return;
109463                     } else if (mode.id === 'select') {
109464                         continueTo(retryIntersect);
109465                         return;
109466                     } else {
109467                         return chapter.restart();
109468                     }
109469                 });
109470
109471                 function continueTo(nextStep) {
109472                     context.map().on('move.intro drawn.intro', null);
109473                     context.history().on('change.intro', null);
109474                     context.on('enter.intro', null);
109475                     nextStep();
109476                 }
109477             }
109478
109479
109480             function isLineConnected() {
109481                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
109482                 if (!entity) { return false; }
109483
109484                 var drawNodes = context.graph().childNodes(entity);
109485                 return drawNodes.some(function(node) {
109486                     return context.graph().parentWays(node).some(function(parent) {
109487                         return parent.id === flowerRoadID;
109488                     });
109489                 });
109490             }
109491
109492
109493             function retryIntersect() {
109494                 d3_select(window).on('mousedown.intro', eventCancel, true);
109495
109496                 var box = pad$2(tulipRoadIntersection, 80, context);
109497                 reveal(box,
109498                     t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
109499                 );
109500
109501                 timeout(chapter.restart, 3000);
109502             }
109503
109504
109505             function continueLine() {
109506                 if (context.mode().id !== 'draw-line') { return chapter.restart(); }
109507                 var entity = _tulipRoadID && context.hasEntity(_tulipRoadID);
109508                 if (!entity) { return chapter.restart(); }
109509
109510                 context.map().centerEase(tulipRoadIntersection, 500);
109511
109512                 reveal('#surface', t('intro.lines.continue_line'));
109513
109514                 context.on('enter.intro', function(mode) {
109515                     if (mode.id === 'draw-line')
109516                         { return; }
109517                     else if (mode.id === 'select')
109518                         { return continueTo(chooseCategoryRoad); }
109519                     else
109520                         { return chapter.restart(); }
109521                 });
109522
109523                 function continueTo(nextStep) {
109524                     context.on('enter.intro', null);
109525                     nextStep();
109526                 }
109527             }
109528
109529
109530             function chooseCategoryRoad() {
109531                 if (context.mode().id !== 'select') { return chapter.restart(); }
109532
109533                 context.on('exit.intro', function() {
109534                     return chapter.restart();
109535                 });
109536
109537                 var button = d3_select('.preset-category-road_minor .preset-list-button');
109538                 if (button.empty()) { return chapter.restart(); }
109539
109540                 // disallow scrolling
109541                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109542
109543                 timeout(function() {
109544                     // reset pane, in case user somehow happened to change it..
109545                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
109546
109547                     reveal(button.node(),
109548                         t('intro.lines.choose_category_road', { category: roadCategory.name() })
109549                     );
109550
109551                     button.on('click.intro', function() {
109552                         continueTo(choosePresetResidential);
109553                     });
109554
109555                 }, 400);  // after editor pane visible
109556
109557                 function continueTo(nextStep) {
109558                     d3_select('.inspector-wrap').on('wheel.intro', null);
109559                     d3_select('.preset-list-button').on('click.intro', null);
109560                     context.on('exit.intro', null);
109561                     nextStep();
109562                 }
109563             }
109564
109565
109566             function choosePresetResidential() {
109567                 if (context.mode().id !== 'select') { return chapter.restart(); }
109568
109569                 context.on('exit.intro', function() {
109570                     return chapter.restart();
109571                 });
109572
109573                 var subgrid = d3_select('.preset-category-road_minor .subgrid');
109574                 if (subgrid.empty()) { return chapter.restart(); }
109575
109576                 subgrid.selectAll(':not(.preset-highway-residential) .preset-list-button')
109577                     .on('click.intro', function() {
109578                         continueTo(retryPresetResidential);
109579                     });
109580
109581                 subgrid.selectAll('.preset-highway-residential .preset-list-button')
109582                     .on('click.intro', function() {
109583                         continueTo(nameRoad);
109584                     });
109585
109586                 timeout(function() {
109587                     reveal(subgrid.node(),
109588                         t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
109589                         { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
109590                     );
109591                 }, 300);
109592
109593                 function continueTo(nextStep) {
109594                     d3_select('.preset-list-button').on('click.intro', null);
109595                     context.on('exit.intro', null);
109596                     nextStep();
109597                 }
109598             }
109599
109600
109601             // selected wrong road type
109602             function retryPresetResidential() {
109603                 if (context.mode().id !== 'select') { return chapter.restart(); }
109604
109605                 context.on('exit.intro', function() {
109606                     return chapter.restart();
109607                 });
109608
109609                 // disallow scrolling
109610                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
109611
109612                 timeout(function() {
109613                     var button = d3_select('.entity-editor-pane .preset-list-button');
109614
109615                     reveal(button.node(),
109616                         t('intro.lines.retry_preset_residential', { preset: residentialPreset.name() })
109617                     );
109618
109619                     button.on('click.intro', function() {
109620                         continueTo(chooseCategoryRoad);
109621                     });
109622
109623                 }, 500);
109624
109625                 function continueTo(nextStep) {
109626                     d3_select('.inspector-wrap').on('wheel.intro', null);
109627                     d3_select('.preset-list-button').on('click.intro', null);
109628                     context.on('exit.intro', null);
109629                     nextStep();
109630                 }
109631             }
109632
109633
109634             function nameRoad() {
109635                 context.on('exit.intro', function() {
109636                     continueTo(didNameRoad);
109637                 });
109638
109639                 timeout(function() {
109640                     reveal('.entity-editor-pane',
109641                         t('intro.lines.name_road', { button: icon('#iD-icon-apply', 'pre-text') }),
109642                         { tooltipClass: 'intro-lines-name_road' }
109643                     );
109644                 }, 500);
109645
109646                 function continueTo(nextStep) {
109647                     context.on('exit.intro', null);
109648                     nextStep();
109649                 }
109650             }
109651
109652
109653             function didNameRoad() {
109654                 context.history().checkpoint('doneAddLine');
109655
109656                 timeout(function() {
109657                     reveal('#surface', t('intro.lines.did_name_road'), {
109658                         buttonText: t('intro.ok'),
109659                         buttonCallback: function() { continueTo(updateLine); }
109660                     });
109661                 }, 500);
109662
109663                 function continueTo(nextStep) {
109664                     nextStep();
109665                 }
109666             }
109667
109668
109669             function updateLine() {
109670                 context.history().reset('doneAddLine');
109671                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109672                     return chapter.restart();
109673                 }
109674
109675                 var msec = transitionTime(woodRoadDragMidpoint, context.map().center());
109676                 if (msec) { reveal(null, null, { duration: 0 }); }
109677                 context.map().centerZoomEase(woodRoadDragMidpoint, 19, msec);
109678
109679                 timeout(function() {
109680                     var padding = 250 * Math.pow(2, context.map().zoom() - 19);
109681                     var box = pad$2(woodRoadDragMidpoint, padding, context);
109682                     var advance = function() { continueTo(addNode); };
109683
109684                     reveal(box, t('intro.lines.update_line'),
109685                         { buttonText: t('intro.ok'), buttonCallback: advance }
109686                     );
109687
109688                     context.map().on('move.intro drawn.intro', function() {
109689                         var padding = 250 * Math.pow(2, context.map().zoom() - 19);
109690                         var box = pad$2(woodRoadDragMidpoint, padding, context);
109691                         reveal(box, t('intro.lines.update_line'),
109692                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
109693                         );
109694                     });
109695                 }, msec + 100);
109696
109697                 function continueTo(nextStep) {
109698                     context.map().on('move.intro drawn.intro', null);
109699                     nextStep();
109700                 }
109701             }
109702
109703
109704             function addNode() {
109705                 context.history().reset('doneAddLine');
109706                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109707                     return chapter.restart();
109708                 }
109709
109710                 var padding = 40 * Math.pow(2, context.map().zoom() - 19);
109711                 var box = pad$2(woodRoadAddNode, padding, context);
109712                 reveal(box, t('intro.lines.add_node'));
109713
109714                 context.map().on('move.intro drawn.intro', function() {
109715                     var padding = 40 * Math.pow(2, context.map().zoom() - 19);
109716                     var box = pad$2(woodRoadAddNode, padding, context);
109717                     reveal(box, t('intro.lines.add_node'), { duration: 0 });
109718                 });
109719
109720                 context.history().on('change.intro', function(changed) {
109721                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109722                         return continueTo(updateLine);
109723                     }
109724                     if (changed.created().length === 1) {
109725                         timeout(function() { continueTo(startDragEndpoint); }, 500);
109726                     }
109727                 });
109728
109729                 context.on('enter.intro', function(mode) {
109730                     if (mode.id !== 'select') {
109731                         continueTo(updateLine);
109732                     }
109733                 });
109734
109735                 function continueTo(nextStep) {
109736                     context.map().on('move.intro drawn.intro', null);
109737                     context.history().on('change.intro', null);
109738                     context.on('enter.intro', null);
109739                     nextStep();
109740                 }
109741             }
109742
109743
109744             function startDragEndpoint() {
109745                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109746                     return continueTo(updateLine);
109747                 }
109748                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
109749                 var box = pad$2(woodRoadDragEndpoint, padding, context);
109750                 reveal(box, t('intro.lines.start_drag_endpoint'));
109751
109752                 context.map().on('move.intro drawn.intro', function() {
109753                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109754                         return continueTo(updateLine);
109755                     }
109756                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
109757                     var box = pad$2(woodRoadDragEndpoint, padding, context);
109758                     reveal(box, t('intro.lines.start_drag_endpoint'), { duration: 0 });
109759
109760                     var entity = context.entity(woodRoadEndID);
109761                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) <= 4) {
109762                         continueTo(finishDragEndpoint);
109763                     }
109764                 });
109765
109766                 function continueTo(nextStep) {
109767                     context.map().on('move.intro drawn.intro', null);
109768                     nextStep();
109769                 }
109770             }
109771
109772
109773             function finishDragEndpoint() {
109774                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109775                     return continueTo(updateLine);
109776                 }
109777
109778                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
109779                 var box = pad$2(woodRoadDragEndpoint, padding, context);
109780                 reveal(box, t('intro.lines.finish_drag_endpoint'));
109781
109782                 context.map().on('move.intro drawn.intro', function() {
109783                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109784                         return continueTo(updateLine);
109785                     }
109786                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
109787                     var box = pad$2(woodRoadDragEndpoint, padding, context);
109788                     reveal(box, t('intro.lines.finish_drag_endpoint'), { duration: 0 });
109789
109790                     var entity = context.entity(woodRoadEndID);
109791                     if (geoSphericalDistance(entity.loc, woodRoadDragEndpoint) > 4) {
109792                         continueTo(startDragEndpoint);
109793                     }
109794                 });
109795
109796                 context.on('enter.intro', function() {
109797                     continueTo(startDragMidpoint);
109798                 });
109799
109800                 function continueTo(nextStep) {
109801                     context.map().on('move.intro drawn.intro', null);
109802                     context.on('enter.intro', null);
109803                     nextStep();
109804                 }
109805             }
109806
109807
109808             function startDragMidpoint() {
109809                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109810                     return continueTo(updateLine);
109811                 }
109812                 if (context.selectedIDs().indexOf(woodRoadID) === -1) {
109813                     context.enter(modeSelect(context, [woodRoadID]));
109814                 }
109815
109816                 var padding = 80 * Math.pow(2, context.map().zoom() - 19);
109817                 var box = pad$2(woodRoadDragMidpoint, padding, context);
109818                 reveal(box, t('intro.lines.start_drag_midpoint'));
109819
109820                 context.map().on('move.intro drawn.intro', function() {
109821                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109822                         return continueTo(updateLine);
109823                     }
109824                     var padding = 80 * Math.pow(2, context.map().zoom() - 19);
109825                     var box = pad$2(woodRoadDragMidpoint, padding, context);
109826                     reveal(box, t('intro.lines.start_drag_midpoint'), { duration: 0 });
109827                 });
109828
109829                 context.history().on('change.intro', function(changed) {
109830                     if (changed.created().length === 1) {
109831                         continueTo(continueDragMidpoint);
109832                     }
109833                 });
109834
109835                 context.on('enter.intro', function(mode) {
109836                     if (mode.id !== 'select') {
109837                         // keep Wood Road selected so midpoint triangles are drawn..
109838                         context.enter(modeSelect(context, [woodRoadID]));
109839                     }
109840                 });
109841
109842                 function continueTo(nextStep) {
109843                     context.map().on('move.intro drawn.intro', null);
109844                     context.history().on('change.intro', null);
109845                     context.on('enter.intro', null);
109846                     nextStep();
109847                 }
109848             }
109849
109850
109851             function continueDragMidpoint() {
109852                 if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109853                     return continueTo(updateLine);
109854                 }
109855
109856                 var padding = 100 * Math.pow(2, context.map().zoom() - 19);
109857                 var box = pad$2(woodRoadDragEndpoint, padding, context);
109858                 box.height += 400;
109859
109860                 var advance = function() {
109861                     context.history().checkpoint('doneUpdateLine');
109862                     continueTo(deleteLines);
109863                 };
109864
109865                 reveal(box, t('intro.lines.continue_drag_midpoint'),
109866                     { buttonText: t('intro.ok'), buttonCallback: advance }
109867                 );
109868
109869                 context.map().on('move.intro drawn.intro', function() {
109870                     if (!context.hasEntity(woodRoadID) || !context.hasEntity(woodRoadEndID)) {
109871                         return continueTo(updateLine);
109872                     }
109873                     var padding = 100 * Math.pow(2, context.map().zoom() - 19);
109874                     var box = pad$2(woodRoadDragEndpoint, padding, context);
109875                     box.height += 400;
109876                     reveal(box, t('intro.lines.continue_drag_midpoint'),
109877                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
109878                     );
109879                 });
109880
109881                 function continueTo(nextStep) {
109882                     context.map().on('move.intro drawn.intro', null);
109883                     nextStep();
109884                 }
109885             }
109886
109887
109888             function deleteLines() {
109889                 context.history().reset('doneUpdateLine');
109890                 context.enter(modeBrowse(context));
109891
109892                 if (!context.hasEntity(washingtonStreetID) ||
109893                     !context.hasEntity(twelfthAvenueID) ||
109894                     !context.hasEntity(eleventhAvenueEndID)) {
109895                     return chapter.restart();
109896                 }
109897
109898                 var msec = transitionTime(deleteLinesLoc, context.map().center());
109899                 if (msec) { reveal(null, null, { duration: 0 }); }
109900                 context.map().centerZoomEase(deleteLinesLoc, 18, msec);
109901
109902                 timeout(function() {
109903                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
109904                     var box = pad$2(deleteLinesLoc, padding, context);
109905                     box.top -= 200;
109906                     box.height += 400;
109907                     var advance = function() { continueTo(rightClickIntersection); };
109908
109909                     reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
109910                         { buttonText: t('intro.ok'), buttonCallback: advance }
109911                     );
109912
109913                     context.map().on('move.intro drawn.intro', function() {
109914                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
109915                         var box = pad$2(deleteLinesLoc, padding, context);
109916                         box.top -= 200;
109917                         box.height += 400;
109918                         reveal(box, t('intro.lines.delete_lines', { street: t('intro.graph.name.12th-avenue') }),
109919                             { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
109920                         );
109921                     });
109922
109923                     context.history().on('change.intro', function() {
109924                         timeout(function() {
109925                             continueTo(deleteLines);
109926                         }, 500);  // after any transition (e.g. if user deleted intersection)
109927                     });
109928
109929                 }, msec + 100);
109930
109931                 function continueTo(nextStep) {
109932                     context.map().on('move.intro drawn.intro', null);
109933                     context.history().on('change.intro', null);
109934                     nextStep();
109935                 }
109936             }
109937
109938
109939             function rightClickIntersection() {
109940                 context.history().reset('doneUpdateLine');
109941                 context.enter(modeBrowse(context));
109942
109943                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
109944
109945                 timeout(function() {
109946                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
109947                     var box = pad$2(eleventhAvenueEnd, padding, context);
109948                     reveal(box, t('intro.lines.rightclick_intersection',
109949                         { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') })
109950                     );
109951
109952                     context.map().on('move.intro drawn.intro', function() {
109953                         var padding = 60 * Math.pow(2, context.map().zoom() - 18);
109954                         var box = pad$2(eleventhAvenueEnd, padding, context);
109955                         reveal(box, t('intro.lines.rightclick_intersection',
109956                             { street1: t('intro.graph.name.11th-avenue'), street2: t('intro.graph.name.washington-street') }),
109957                             { duration: 0 }
109958                         );
109959                     });
109960
109961                     context.on('enter.intro', function(mode) {
109962                         if (mode.id !== 'select') { return; }
109963                         var ids = context.selectedIDs();
109964                         if (ids.length !== 1 || ids[0] !== eleventhAvenueEndID) { return; }
109965
109966                         timeout(function() {
109967                             var node = selectMenuItem('split').node();
109968                             if (!node) { return; }
109969                             continueTo(splitIntersection);
109970                         }, 300);  // after menu visible
109971                     });
109972
109973                     context.history().on('change.intro', function() {
109974                         timeout(function() {
109975                             continueTo(deleteLines);
109976                         }, 300);  // after any transition (e.g. if user deleted intersection)
109977                     });
109978
109979                 }, 600);
109980
109981                 function continueTo(nextStep) {
109982                     context.map().on('move.intro drawn.intro', null);
109983                     context.on('enter.intro', null);
109984                     context.history().on('change.intro', null);
109985                     nextStep();
109986                 }
109987             }
109988
109989
109990             function splitIntersection() {
109991                 if (!context.hasEntity(washingtonStreetID) ||
109992                     !context.hasEntity(twelfthAvenueID) ||
109993                     !context.hasEntity(eleventhAvenueEndID)) {
109994                     return continueTo(deleteLines);
109995                 }
109996
109997                 var node = selectMenuItem('split').node();
109998                 if (!node) { return continueTo(rightClickIntersection); }
109999
110000                 var wasChanged = false;
110001                 var menuCoords = context.map().mouseCoordinates();
110002                 _washingtonSegmentID = null;
110003
110004                 revealEditMenu(menuCoords, t('intro.lines.split_intersection',
110005                     { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') })
110006                 );
110007
110008                 context.map().on('move.intro drawn.intro', function() {
110009                     var node = selectMenuItem('split').node();
110010                     if (!wasChanged && !node) { return continueTo(rightClickIntersection); }
110011
110012                     revealEditMenu(menuCoords, t('intro.lines.split_intersection',
110013                         { button: icon('#iD-operation-split', 'pre-text'), street: t('intro.graph.name.washington-street') }),
110014                         { duration: 0 }
110015                     );
110016                 });
110017
110018                 context.history().on('change.intro', function(changed) {
110019                     wasChanged = true;
110020                     timeout(function() {
110021                         if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
110022                             _washingtonSegmentID = changed.created()[0].id;
110023                             continueTo(didSplit);
110024                         } else {
110025                             _washingtonSegmentID = null;
110026                             continueTo(retrySplit);
110027                         }
110028                     }, 300);  // after any transition (e.g. if user deleted intersection)
110029                 });
110030
110031                 function continueTo(nextStep) {
110032                     context.map().on('move.intro drawn.intro', null);
110033                     context.history().on('change.intro', null);
110034                     nextStep();
110035                 }
110036             }
110037
110038
110039             function retrySplit() {
110040                 context.enter(modeBrowse(context));
110041                 context.map().centerZoomEase(eleventhAvenueEnd, 18, 500);
110042                 var advance = function() { continueTo(rightClickIntersection); };
110043
110044                 var padding = 60 * Math.pow(2, context.map().zoom() - 18);
110045                 var box = pad$2(eleventhAvenueEnd, padding, context);
110046                 reveal(box, t('intro.lines.retry_split'),
110047                     { buttonText: t('intro.ok'), buttonCallback: advance }
110048                 );
110049
110050                 context.map().on('move.intro drawn.intro', function() {
110051                     var padding = 60 * Math.pow(2, context.map().zoom() - 18);
110052                     var box = pad$2(eleventhAvenueEnd, padding, context);
110053                     reveal(box, t('intro.lines.retry_split'),
110054                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: advance }
110055                     );
110056                 });
110057
110058                 function continueTo(nextStep) {
110059                     context.map().on('move.intro drawn.intro', null);
110060                     nextStep();
110061                 }
110062             }
110063
110064
110065             function didSplit() {
110066                 if (!_washingtonSegmentID ||
110067                     !context.hasEntity(_washingtonSegmentID) ||
110068                     !context.hasEntity(washingtonStreetID) ||
110069                     !context.hasEntity(twelfthAvenueID) ||
110070                     !context.hasEntity(eleventhAvenueEndID)) {
110071                     return continueTo(rightClickIntersection);
110072                 }
110073
110074                 var ids = context.selectedIDs();
110075                 var string = 'intro.lines.did_split_' + (ids.length > 1 ? 'multi' : 'single');
110076                 var street = t('intro.graph.name.washington-street');
110077
110078                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
110079                 var box = pad$2(twelfthAvenue, padding, context);
110080                 box.width = box.width / 2;
110081                 reveal(box, t(string, { street1: street, street2: street }),
110082                     { duration: 500 }
110083                 );
110084
110085                 timeout(function() {
110086                     context.map().centerZoomEase(twelfthAvenue, 18, 500);
110087
110088                     context.map().on('move.intro drawn.intro', function() {
110089                         var padding = 200 * Math.pow(2, context.map().zoom() - 18);
110090                         var box = pad$2(twelfthAvenue, padding, context);
110091                         box.width = box.width / 2;
110092                         reveal(box, t(string, { street1: street, street2: street }),
110093                             { duration: 0 }
110094                         );
110095                     });
110096                 }, 600);  // after initial reveal and curtain cut
110097
110098                 context.on('enter.intro', function() {
110099                     var ids = context.selectedIDs();
110100                     if (ids.length === 1 && ids[0] === _washingtonSegmentID) {
110101                         continueTo(multiSelect);
110102                     }
110103                 });
110104
110105                 context.history().on('change.intro', function() {
110106                     if (!_washingtonSegmentID ||
110107                         !context.hasEntity(_washingtonSegmentID) ||
110108                         !context.hasEntity(washingtonStreetID) ||
110109                         !context.hasEntity(twelfthAvenueID) ||
110110                         !context.hasEntity(eleventhAvenueEndID)) {
110111                         return continueTo(rightClickIntersection);
110112                     }
110113                 });
110114
110115                 function continueTo(nextStep) {
110116                     context.map().on('move.intro drawn.intro', null);
110117                     context.on('enter.intro', null);
110118                     context.history().on('change.intro', null);
110119                     nextStep();
110120                 }
110121             }
110122
110123
110124             function multiSelect() {
110125                 if (!_washingtonSegmentID ||
110126                     !context.hasEntity(_washingtonSegmentID) ||
110127                     !context.hasEntity(washingtonStreetID) ||
110128                     !context.hasEntity(twelfthAvenueID) ||
110129                     !context.hasEntity(eleventhAvenueEndID)) {
110130                     return continueTo(rightClickIntersection);
110131                 }
110132
110133                 var ids = context.selectedIDs();
110134                 var hasWashington = ids.indexOf(_washingtonSegmentID) !== -1;
110135                 var hasTwelfth = ids.indexOf(twelfthAvenueID) !== -1;
110136
110137                 if (hasWashington && hasTwelfth) {
110138                     return continueTo(multiRightClick);
110139                 } else if (!hasWashington && !hasTwelfth) {
110140                     return continueTo(didSplit);
110141                 }
110142
110143                 context.map().centerZoomEase(twelfthAvenue, 18, 500);
110144
110145                 timeout(function() {
110146                     var selected, other, padding, box;
110147                     if (hasWashington) {
110148                         selected = t('intro.graph.name.washington-street');
110149                         other = t('intro.graph.name.12th-avenue');
110150                         padding = 60 * Math.pow(2, context.map().zoom() - 18);
110151                         box = pad$2(twelfthAvenueEnd, padding, context);
110152                         box.width *= 3;
110153                     } else {
110154                         selected = t('intro.graph.name.12th-avenue');
110155                         other = t('intro.graph.name.washington-street');
110156                         padding = 200 * Math.pow(2, context.map().zoom() - 18);
110157                         box = pad$2(twelfthAvenue, padding, context);
110158                         box.width /= 2;
110159                     }
110160
110161                     reveal(box,
110162                         t('intro.lines.multi_select', { selected: selected, other1: other, other2: other })
110163                     );
110164
110165                     context.map().on('move.intro drawn.intro', function() {
110166                         if (hasWashington) {
110167                             selected = t('intro.graph.name.washington-street');
110168                             other = t('intro.graph.name.12th-avenue');
110169                             padding = 60 * Math.pow(2, context.map().zoom() - 18);
110170                             box = pad$2(twelfthAvenueEnd, padding, context);
110171                             box.width *= 3;
110172                         } else {
110173                             selected = t('intro.graph.name.12th-avenue');
110174                             other = t('intro.graph.name.washington-street');
110175                             padding = 200 * Math.pow(2, context.map().zoom() - 18);
110176                             box = pad$2(twelfthAvenue, padding, context);
110177                             box.width /= 2;
110178                         }
110179
110180                         reveal(box,
110181                             t('intro.lines.multi_select', { selected: selected, other1: other, other2: other }),
110182                             { duration: 0 }
110183                         );
110184                     });
110185
110186                     context.on('enter.intro', function() {
110187                         continueTo(multiSelect);
110188                     });
110189
110190                     context.history().on('change.intro', function() {
110191                         if (!_washingtonSegmentID ||
110192                             !context.hasEntity(_washingtonSegmentID) ||
110193                             !context.hasEntity(washingtonStreetID) ||
110194                             !context.hasEntity(twelfthAvenueID) ||
110195                             !context.hasEntity(eleventhAvenueEndID)) {
110196                             return continueTo(rightClickIntersection);
110197                         }
110198                     });
110199                 }, 600);
110200
110201                 function continueTo(nextStep) {
110202                     context.map().on('move.intro drawn.intro', null);
110203                     context.on('enter.intro', null);
110204                     context.history().on('change.intro', null);
110205                     nextStep();
110206                 }
110207             }
110208
110209
110210             function multiRightClick() {
110211                 if (!_washingtonSegmentID ||
110212                     !context.hasEntity(_washingtonSegmentID) ||
110213                     !context.hasEntity(washingtonStreetID) ||
110214                     !context.hasEntity(twelfthAvenueID) ||
110215                     !context.hasEntity(eleventhAvenueEndID)) {
110216                     return continueTo(rightClickIntersection);
110217                 }
110218
110219                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
110220                 var box = pad$2(twelfthAvenue, padding, context);
110221                 reveal(box, t('intro.lines.multi_rightclick'));
110222
110223                 context.map().on('move.intro drawn.intro', function() {
110224                     var padding = 200 * Math.pow(2, context.map().zoom() - 18);
110225                     var box = pad$2(twelfthAvenue, padding, context);
110226                     reveal(box, t('intro.lines.multi_rightclick'), { duration: 0 });
110227                 });
110228
110229                 d3_select(window).on('click.intro contextmenu.intro', function() {
110230                     timeout(function() {
110231                         var ids = context.selectedIDs();
110232                         if (ids.length === 2 &&
110233                             ids.indexOf(twelfthAvenueID) !== -1 &&
110234                             ids.indexOf(_washingtonSegmentID) !== -1) {
110235                                 var node = selectMenuItem('delete').node();
110236                                 if (!node) { return; }
110237                                 continueTo(multiDelete);
110238                         } else if (ids.length === 1 &&
110239                             ids.indexOf(_washingtonSegmentID) !== -1) {
110240                             return continueTo(multiSelect);
110241                         } else {
110242                             return continueTo(didSplit);
110243                         }
110244                     }, 300);  // after edit menu visible
110245                 }, true);
110246
110247                 context.history().on('change.intro', function() {
110248                     if (!_washingtonSegmentID ||
110249                         !context.hasEntity(_washingtonSegmentID) ||
110250                         !context.hasEntity(washingtonStreetID) ||
110251                         !context.hasEntity(twelfthAvenueID) ||
110252                         !context.hasEntity(eleventhAvenueEndID)) {
110253                         return continueTo(rightClickIntersection);
110254                     }
110255                 });
110256
110257                 function continueTo(nextStep) {
110258                     context.map().on('move.intro drawn.intro', null);
110259                     d3_select(window).on('click.intro contextmenu.intro', null, true);
110260                     context.history().on('change.intro', null);
110261                     nextStep();
110262                 }
110263             }
110264
110265
110266             function multiDelete() {
110267                 if (!_washingtonSegmentID ||
110268                     !context.hasEntity(_washingtonSegmentID) ||
110269                     !context.hasEntity(washingtonStreetID) ||
110270                     !context.hasEntity(twelfthAvenueID) ||
110271                     !context.hasEntity(eleventhAvenueEndID)) {
110272                     return continueTo(rightClickIntersection);
110273                 }
110274
110275                 var node = selectMenuItem('delete').node();
110276                 if (!node) { return continueTo(multiRightClick); }
110277
110278                 var menuCoords = context.map().mouseCoordinates();
110279                 revealEditMenu(menuCoords,
110280                     t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') })
110281                 );
110282
110283                 context.map().on('move.intro drawn.intro', function() {
110284                     revealEditMenu(menuCoords,
110285                         t('intro.lines.multi_delete', { button: icon('#iD-operation-delete', 'pre-text') }),
110286                         { duration: 0 }
110287                     );
110288                 });
110289
110290                 context.on('exit.intro', function() {
110291                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
110292                         return continueTo(multiSelect);  // left select mode but roads still exist
110293                     }
110294                 });
110295
110296                 context.history().on('change.intro', function() {
110297                     if (context.hasEntity(_washingtonSegmentID) || context.hasEntity(twelfthAvenueID)) {
110298                         continueTo(retryDelete);         // changed something but roads still exist
110299                     } else {
110300                         continueTo(play);
110301                     }
110302                 });
110303
110304                 function continueTo(nextStep) {
110305                     context.map().on('move.intro drawn.intro', null);
110306                     context.on('exit.intro', null);
110307                     context.history().on('change.intro', null);
110308                     nextStep();
110309                 }
110310             }
110311
110312
110313             function retryDelete() {
110314                 context.enter(modeBrowse(context));
110315
110316                 var padding = 200 * Math.pow(2, context.map().zoom() - 18);
110317                 var box = pad$2(twelfthAvenue, padding, context);
110318                 reveal(box, t('intro.lines.retry_delete'), {
110319                     buttonText: t('intro.ok'),
110320                     buttonCallback: function() { continueTo(multiSelect); }
110321                 });
110322
110323                 function continueTo(nextStep) {
110324                     nextStep();
110325                 }
110326             }
110327
110328
110329             function play() {
110330                 dispatch$1.call('done');
110331                 reveal('.ideditor',
110332                     t('intro.lines.play', { next: t('intro.buildings.title') }), {
110333                         tooltipBox: '.intro-nav-wrap .chapter-building',
110334                         buttonText: t('intro.ok'),
110335                         buttonCallback: function() { reveal('.ideditor'); }
110336                     }
110337                 );
110338            }
110339
110340
110341             chapter.enter = function() {
110342                 addLine();
110343             };
110344
110345
110346             chapter.exit = function() {
110347                 timeouts.forEach(window.clearTimeout);
110348                 d3_select(window).on('mousedown.intro', null, true);
110349                 context.on('enter.intro exit.intro', null);
110350                 context.map().on('move.intro drawn.intro', null);
110351                 context.history().on('change.intro', null);
110352                 d3_select('.inspector-wrap').on('wheel.intro', null);
110353                 d3_select('.preset-list-button').on('click.intro', null);
110354             };
110355
110356
110357             chapter.restart = function() {
110358                 chapter.exit();
110359                 chapter.enter();
110360             };
110361
110362
110363             return utilRebind(chapter, dispatch$1, 'on');
110364         }
110365
110366         function uiIntroBuilding(context, reveal) {
110367             var dispatch$1 = dispatch('done');
110368             var house = [-85.62815, 41.95638];
110369             var tank = [-85.62732, 41.95347];
110370             var buildingCatetory = context.presets().item('category-building');
110371             var housePreset = context.presets().item('building/house');
110372             var tankPreset = context.presets().item('man_made/storage_tank');
110373             var timeouts = [];
110374             var _houseID = null;
110375             var _tankID = null;
110376
110377
110378             var chapter = {
110379                 title: 'intro.buildings.title'
110380             };
110381
110382
110383             function timeout(f, t) {
110384                 timeouts.push(window.setTimeout(f, t));
110385             }
110386
110387
110388             function eventCancel() {
110389                 event.stopPropagation();
110390                 event.preventDefault();
110391             }
110392
110393
110394             function revealHouse(center, text, options) {
110395                 var padding = 160 * Math.pow(2, context.map().zoom() - 20);
110396                 var box = pad$2(center, padding, context);
110397                 reveal(box, text, options);
110398             }
110399
110400
110401             function revealTank(center, text, options) {
110402                 var padding = 190 * Math.pow(2, context.map().zoom() - 19.5);
110403                 var box = pad$2(center, padding, context);
110404                 reveal(box, text, options);
110405             }
110406
110407
110408             function revealEditMenu(loc, text, options) {
110409                 var rect = context.surfaceRect();
110410                 var point = context.curtainProjection(loc);
110411                 var pad = 40;
110412                 var width = 250 + (2 * pad);
110413                 var height = 350;
110414                 var startX = rect.left + point[0];
110415                 var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
110416                 var box = {
110417                     left: left,
110418                     top: point[1] + rect.top - 60,
110419                     width: width,
110420                     height: height
110421                 };
110422                 reveal(box, text, options);
110423             }
110424
110425
110426             function addHouse() {
110427                 context.enter(modeBrowse(context));
110428                 context.history().reset('initial');
110429                 _houseID = null;
110430
110431                 var msec = transitionTime(house, context.map().center());
110432                 if (msec) { reveal(null, null, { duration: 0 }); }
110433                 context.map().centerZoomEase(house, 19, msec);
110434
110435                 timeout(function() {
110436                     var tooltip = reveal('button.add-area',
110437                         t('intro.buildings.add_building', { button: icon('#iD-icon-area', 'pre-text') }));
110438
110439                     tooltip.selectAll('.popover-inner')
110440                         .insert('svg', 'span')
110441                         .attr('class', 'tooltip-illustration')
110442                         .append('use')
110443                         .attr('xlink:href', '#iD-graphic-buildings');
110444
110445                     context.on('enter.intro', function(mode) {
110446                         if (mode.id !== 'add-area') { return; }
110447                         continueTo(startHouse);
110448                     });
110449                 }, msec + 100);
110450
110451                 function continueTo(nextStep) {
110452                     context.on('enter.intro', null);
110453                     nextStep();
110454                 }
110455             }
110456
110457
110458             function startHouse() {
110459                 if (context.mode().id !== 'add-area') {
110460                     return continueTo(addHouse);
110461                 }
110462
110463                 _houseID = null;
110464                 context.map().zoomEase(20, 500);
110465
110466                 timeout(function() {
110467                     revealHouse(house, t('intro.buildings.start_building'));
110468
110469                     context.map().on('move.intro drawn.intro', function() {
110470                         revealHouse(house, t('intro.buildings.start_building'), { duration: 0 });
110471                     });
110472
110473                     context.on('enter.intro', function(mode) {
110474                         if (mode.id !== 'draw-area') { return chapter.restart(); }
110475                         continueTo(continueHouse);
110476                     });
110477
110478                 }, 550);  // after easing
110479
110480                 function continueTo(nextStep) {
110481                     context.map().on('move.intro drawn.intro', null);
110482                     context.on('enter.intro', null);
110483                     nextStep();
110484                 }
110485             }
110486
110487
110488             function continueHouse() {
110489                 if (context.mode().id !== 'draw-area') {
110490                     return continueTo(addHouse);
110491                 }
110492
110493                 _houseID = null;
110494
110495                 revealHouse(house, t('intro.buildings.continue_building'));
110496
110497                 context.map().on('move.intro drawn.intro', function() {
110498                     revealHouse(house, t('intro.buildings.continue_building'), { duration: 0 });
110499                 });
110500
110501                 context.on('enter.intro', function(mode) {
110502                     if (mode.id === 'draw-area') {
110503                         return;
110504                     } else if (mode.id === 'select') {
110505                         var graph = context.graph();
110506                         var way = context.entity(context.selectedIDs()[0]);
110507                         var nodes = graph.childNodes(way);
110508                         var points = utilArrayUniq(nodes)
110509                             .map(function(n) { return context.projection(n.loc); });
110510
110511                         if (isMostlySquare(points)) {
110512                             _houseID = way.id;
110513                             return continueTo(chooseCategoryBuilding);
110514                         } else {
110515                             return continueTo(retryHouse);
110516                         }
110517
110518                     } else {
110519                         return chapter.restart();
110520                     }
110521                 });
110522
110523                 function continueTo(nextStep) {
110524                     context.map().on('move.intro drawn.intro', null);
110525                     context.on('enter.intro', null);
110526                     nextStep();
110527                 }
110528             }
110529
110530
110531             function retryHouse() {
110532                 var onClick = function() { continueTo(addHouse); };
110533
110534                 revealHouse(house, t('intro.buildings.retry_building'),
110535                     { buttonText: t('intro.ok'), buttonCallback: onClick }
110536                 );
110537
110538                 context.map().on('move.intro drawn.intro', function() {
110539                     revealHouse(house, t('intro.buildings.retry_building'),
110540                         { duration: 0, buttonText: t('intro.ok'), buttonCallback: onClick }
110541                     );
110542                 });
110543
110544                 function continueTo(nextStep) {
110545                     context.map().on('move.intro drawn.intro', null);
110546                     nextStep();
110547                 }
110548             }
110549
110550
110551             function chooseCategoryBuilding() {
110552                 if (!_houseID || !context.hasEntity(_houseID)) {
110553                     return addHouse();
110554                 }
110555                 var ids = context.selectedIDs();
110556                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
110557                     context.enter(modeSelect(context, [_houseID]));
110558                 }
110559
110560                 // disallow scrolling
110561                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
110562
110563                 timeout(function() {
110564                     // reset pane, in case user somehow happened to change it..
110565                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
110566
110567                     var button = d3_select('.preset-category-building .preset-list-button');
110568
110569                     reveal(button.node(),
110570                         t('intro.buildings.choose_category_building', { category: buildingCatetory.name() })
110571                     );
110572
110573                     button.on('click.intro', function() {
110574                         button.on('click.intro', null);
110575                         continueTo(choosePresetHouse);
110576                     });
110577
110578                 }, 400);  // after preset list pane visible..
110579
110580
110581                 context.on('enter.intro', function(mode) {
110582                     if (!_houseID || !context.hasEntity(_houseID)) {
110583                         return continueTo(addHouse);
110584                     }
110585                     var ids = context.selectedIDs();
110586                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
110587                         return continueTo(chooseCategoryBuilding);
110588                     }
110589                 });
110590
110591                 function continueTo(nextStep) {
110592                     d3_select('.inspector-wrap').on('wheel.intro', null);
110593                     d3_select('.preset-list-button').on('click.intro', null);
110594                     context.on('enter.intro', null);
110595                     nextStep();
110596                 }
110597             }
110598
110599
110600             function choosePresetHouse() {
110601                 if (!_houseID || !context.hasEntity(_houseID)) {
110602                     return addHouse();
110603                 }
110604                 var ids = context.selectedIDs();
110605                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
110606                     context.enter(modeSelect(context, [_houseID]));
110607                 }
110608
110609                 // disallow scrolling
110610                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
110611
110612                 timeout(function() {
110613                     // reset pane, in case user somehow happened to change it..
110614                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
110615
110616                     var button = d3_select('.preset-building-house .preset-list-button');
110617
110618                     reveal(button.node(),
110619                         t('intro.buildings.choose_preset_house', { preset: housePreset.name() }),
110620                         { duration: 300 }
110621                     );
110622
110623                     button.on('click.intro', function() {
110624                         button.on('click.intro', null);
110625                         continueTo(closeEditorHouse);
110626                     });
110627
110628                 }, 400);  // after preset list pane visible..
110629
110630                 context.on('enter.intro', function(mode) {
110631                     if (!_houseID || !context.hasEntity(_houseID)) {
110632                         return continueTo(addHouse);
110633                     }
110634                     var ids = context.selectedIDs();
110635                     if (mode.id !== 'select' || !ids.length || ids[0] !== _houseID) {
110636                         return continueTo(chooseCategoryBuilding);
110637                     }
110638                 });
110639
110640                 function continueTo(nextStep) {
110641                     d3_select('.inspector-wrap').on('wheel.intro', null);
110642                     d3_select('.preset-list-button').on('click.intro', null);
110643                     context.on('enter.intro', null);
110644                     nextStep();
110645                 }
110646             }
110647
110648
110649             function closeEditorHouse() {
110650                 if (!_houseID || !context.hasEntity(_houseID)) {
110651                     return addHouse();
110652                 }
110653                 var ids = context.selectedIDs();
110654                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _houseID) {
110655                     context.enter(modeSelect(context, [_houseID]));
110656                 }
110657
110658                 context.history().checkpoint('hasHouse');
110659
110660                 context.on('exit.intro', function() {
110661                     continueTo(rightClickHouse);
110662                 });
110663
110664                 timeout(function() {
110665                     reveal('.entity-editor-pane',
110666                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
110667                     );
110668                 }, 500);
110669
110670                 function continueTo(nextStep) {
110671                     context.on('exit.intro', null);
110672                     nextStep();
110673                 }
110674             }
110675
110676
110677             function rightClickHouse() {
110678                 if (!_houseID) { return chapter.restart(); }
110679
110680                 context.enter(modeBrowse(context));
110681                 context.history().reset('hasHouse');
110682                 var zoom = context.map().zoom();
110683                 if (zoom < 20) {
110684                     zoom = 20;
110685                 }
110686                 context.map().centerZoomEase(house, zoom, 500);
110687
110688                 context.on('enter.intro', function(mode) {
110689                     if (mode.id !== 'select') { return; }
110690                     var ids = context.selectedIDs();
110691                     if (ids.length !== 1 || ids[0] !== _houseID) { return; }
110692
110693                     timeout(function() {
110694                         var node = selectMenuItem('orthogonalize').node();
110695                         if (!node) { return; }
110696                         continueTo(clickSquare);
110697                     }, 300);  // after menu visible
110698                 });
110699
110700                 context.map().on('move.intro drawn.intro', function() {
110701                     revealHouse(house, t('intro.buildings.rightclick_building'), { duration: 0 });
110702                 });
110703
110704                 context.history().on('change.intro', function() {
110705                     continueTo(rightClickHouse);
110706                 });
110707
110708                 function continueTo(nextStep) {
110709                     context.on('enter.intro', null);
110710                     context.map().on('move.intro drawn.intro', null);
110711                     context.history().on('change.intro', null);
110712                     nextStep();
110713                 }
110714             }
110715
110716
110717             function clickSquare() {
110718                 if (!_houseID) { return chapter.restart(); }
110719                 var entity = context.hasEntity(_houseID);
110720                 if (!entity) { return continueTo(rightClickHouse); }
110721
110722                 var node = selectMenuItem('orthogonalize').node();
110723                 if (!node) { return continueTo(rightClickHouse); }
110724
110725                 var wasChanged = false;
110726                 var menuCoords = context.map().mouseCoordinates();
110727
110728                 revealEditMenu(menuCoords,
110729                     t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') })
110730                 );
110731
110732                 context.on('enter.intro', function(mode) {
110733                     if (mode.id === 'browse') {
110734                         continueTo(rightClickHouse);
110735                     } else if (mode.id === 'move' || mode.id === 'rotate') {
110736                         continueTo(retryClickSquare);
110737                     }
110738                 });
110739
110740                 context.map().on('move.intro drawn.intro', function() {
110741                     var node = selectMenuItem('orthogonalize').node();
110742                     if (!wasChanged && !node) { return continueTo(rightClickHouse); }
110743
110744                     revealEditMenu(menuCoords,
110745                         t('intro.buildings.square_building', { button: icon('#iD-operation-orthogonalize', 'pre-text') }),
110746                         { duration: 0 }
110747                     );
110748                 });
110749
110750                 context.history().on('change.intro', function() {
110751                     wasChanged = true;
110752                     context.history().on('change.intro', null);
110753
110754                     // Something changed.  Wait for transition to complete and check undo annotation.
110755                     timeout(function() {
110756                         if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.feature.single')) {
110757                             continueTo(doneSquare);
110758                         } else {
110759                             continueTo(retryClickSquare);
110760                         }
110761                     }, 500);  // after transitioned actions
110762                 });
110763
110764                 function continueTo(nextStep) {
110765                     context.on('enter.intro', null);
110766                     context.map().on('move.intro drawn.intro', null);
110767                     context.history().on('change.intro', null);
110768                     nextStep();
110769                 }
110770             }
110771
110772
110773             function retryClickSquare() {
110774                 context.enter(modeBrowse(context));
110775
110776                 revealHouse(house, t('intro.buildings.retry_square'), {
110777                     buttonText: t('intro.ok'),
110778                     buttonCallback: function() { continueTo(rightClickHouse); }
110779                 });
110780
110781                 function continueTo(nextStep) {
110782                     nextStep();
110783                 }
110784             }
110785
110786
110787             function doneSquare() {
110788                 context.history().checkpoint('doneSquare');
110789
110790                 revealHouse(house, t('intro.buildings.done_square'), {
110791                     buttonText: t('intro.ok'),
110792                     buttonCallback: function() { continueTo(addTank); }
110793                 });
110794
110795                 function continueTo(nextStep) {
110796                     nextStep();
110797                 }
110798             }
110799
110800
110801             function addTank() {
110802                 context.enter(modeBrowse(context));
110803                 context.history().reset('doneSquare');
110804                 _tankID = null;
110805
110806                 var msec = transitionTime(tank, context.map().center());
110807                 if (msec) { reveal(null, null, { duration: 0 }); }
110808                 context.map().centerZoomEase(tank, 19.5, msec);
110809
110810                 timeout(function() {
110811                     reveal('button.add-area',
110812                         t('intro.buildings.add_tank', { button: icon('#iD-icon-area', 'pre-text') })
110813                     );
110814
110815                     context.on('enter.intro', function(mode) {
110816                         if (mode.id !== 'add-area') { return; }
110817                         continueTo(startTank);
110818                     });
110819                 }, msec + 100);
110820
110821                 function continueTo(nextStep) {
110822                     context.on('enter.intro', null);
110823                     nextStep();
110824                 }
110825             }
110826
110827
110828             function startTank() {
110829                 if (context.mode().id !== 'add-area') {
110830                     return continueTo(addTank);
110831                 }
110832
110833                 _tankID = null;
110834
110835                 timeout(function() {
110836                     revealTank(tank, t('intro.buildings.start_tank'));
110837
110838                     context.map().on('move.intro drawn.intro', function() {
110839                         revealTank(tank, t('intro.buildings.start_tank'), { duration: 0 });
110840                     });
110841
110842                     context.on('enter.intro', function(mode) {
110843                         if (mode.id !== 'draw-area') { return chapter.restart(); }
110844                         continueTo(continueTank);
110845                     });
110846
110847                 }, 550);  // after easing
110848
110849                 function continueTo(nextStep) {
110850                     context.map().on('move.intro drawn.intro', null);
110851                     context.on('enter.intro', null);
110852                     nextStep();
110853                 }
110854             }
110855
110856
110857             function continueTank() {
110858                 if (context.mode().id !== 'draw-area') {
110859                     return continueTo(addTank);
110860                 }
110861
110862                 _tankID = null;
110863
110864                 revealTank(tank, t('intro.buildings.continue_tank'));
110865
110866                 context.map().on('move.intro drawn.intro', function() {
110867                     revealTank(tank, t('intro.buildings.continue_tank'), { duration: 0 });
110868                 });
110869
110870                 context.on('enter.intro', function(mode) {
110871                     if (mode.id === 'draw-area') {
110872                         return;
110873                     } else if (mode.id === 'select') {
110874                         _tankID = context.selectedIDs()[0];
110875                         return continueTo(searchPresetTank);
110876                     } else {
110877                         return continueTo(addTank);
110878                     }
110879                 });
110880
110881                 function continueTo(nextStep) {
110882                     context.map().on('move.intro drawn.intro', null);
110883                     context.on('enter.intro', null);
110884                     nextStep();
110885                 }
110886             }
110887
110888
110889             function searchPresetTank() {
110890                 if (!_tankID || !context.hasEntity(_tankID)) {
110891                     return addTank();
110892                 }
110893                 var ids = context.selectedIDs();
110894                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
110895                     context.enter(modeSelect(context, [_tankID]));
110896                 }
110897
110898                 // disallow scrolling
110899                 d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
110900
110901                 timeout(function() {
110902                     // reset pane, in case user somehow happened to change it..
110903                     d3_select('.inspector-wrap .panewrap').style('right', '-100%');
110904
110905                     d3_select('.preset-search-input')
110906                         .on('keydown.intro', null)
110907                         .on('keyup.intro', checkPresetSearch);
110908
110909                     reveal('.preset-search-input',
110910                         t('intro.buildings.search_tank', { preset: tankPreset.name() })
110911                     );
110912                 }, 400);  // after preset list pane visible..
110913
110914                 context.on('enter.intro', function(mode) {
110915                     if (!_tankID || !context.hasEntity(_tankID)) {
110916                         return continueTo(addTank);
110917                     }
110918
110919                     var ids = context.selectedIDs();
110920                     if (mode.id !== 'select' || !ids.length || ids[0] !== _tankID) {
110921                         // keep the user's area selected..
110922                         context.enter(modeSelect(context, [_tankID]));
110923
110924                         // reset pane, in case user somehow happened to change it..
110925                         d3_select('.inspector-wrap .panewrap').style('right', '-100%');
110926                         // disallow scrolling
110927                         d3_select('.inspector-wrap').on('wheel.intro', eventCancel);
110928
110929                         d3_select('.preset-search-input')
110930                             .on('keydown.intro', null)
110931                             .on('keyup.intro', checkPresetSearch);
110932
110933                         reveal('.preset-search-input',
110934                             t('intro.buildings.search_tank', { preset: tankPreset.name() })
110935                         );
110936
110937                         context.history().on('change.intro', null);
110938                     }
110939                 });
110940
110941                 function checkPresetSearch() {
110942                     var first = d3_select('.preset-list-item:first-child');
110943
110944                     if (first.classed('preset-man_made-storage_tank')) {
110945                         reveal(first.select('.preset-list-button').node(),
110946                             t('intro.buildings.choose_tank', { preset: tankPreset.name() }),
110947                             { duration: 300 }
110948                         );
110949
110950                         d3_select('.preset-search-input')
110951                             .on('keydown.intro', eventCancel, true)
110952                             .on('keyup.intro', null);
110953
110954                         context.history().on('change.intro', function() {
110955                             continueTo(closeEditorTank);
110956                         });
110957                     }
110958                 }
110959
110960                 function continueTo(nextStep) {
110961                     d3_select('.inspector-wrap').on('wheel.intro', null);
110962                     context.on('enter.intro', null);
110963                     context.history().on('change.intro', null);
110964                     d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
110965                     nextStep();
110966                 }
110967             }
110968
110969
110970             function closeEditorTank() {
110971                 if (!_tankID || !context.hasEntity(_tankID)) {
110972                     return addTank();
110973                 }
110974                 var ids = context.selectedIDs();
110975                 if (context.mode().id !== 'select' || !ids.length || ids[0] !== _tankID) {
110976                     context.enter(modeSelect(context, [_tankID]));
110977                 }
110978
110979                 context.history().checkpoint('hasTank');
110980
110981                 context.on('exit.intro', function() {
110982                     continueTo(rightClickTank);
110983                 });
110984
110985                 timeout(function() {
110986                     reveal('.entity-editor-pane',
110987                         t('intro.buildings.close', { button: icon('#iD-icon-apply', 'pre-text') })
110988                     );
110989                 }, 500);
110990
110991                 function continueTo(nextStep) {
110992                     context.on('exit.intro', null);
110993                     nextStep();
110994                 }
110995             }
110996
110997
110998             function rightClickTank() {
110999                 if (!_tankID) { return continueTo(addTank); }
111000
111001                 context.enter(modeBrowse(context));
111002                 context.history().reset('hasTank');
111003                 context.map().centerEase(tank, 500);
111004
111005                 timeout(function() {
111006                     context.on('enter.intro', function(mode) {
111007                         if (mode.id !== 'select') { return; }
111008                         var ids = context.selectedIDs();
111009                         if (ids.length !== 1 || ids[0] !== _tankID) { return; }
111010
111011                         timeout(function() {
111012                             var node = selectMenuItem('circularize').node();
111013                             if (!node) { return; }
111014                             continueTo(clickCircle);
111015                         }, 300);  // after menu visible
111016                     });
111017
111018                     revealTank(tank, t('intro.buildings.rightclick_tank'));
111019
111020                     context.map().on('move.intro drawn.intro', function() {
111021                         revealTank(tank, t('intro.buildings.rightclick_tank'), { duration: 0 });
111022                     });
111023
111024                     context.history().on('change.intro', function() {
111025                         continueTo(rightClickTank);
111026                     });
111027
111028                 }, 600);
111029
111030                 function continueTo(nextStep) {
111031                     context.on('enter.intro', null);
111032                     context.map().on('move.intro drawn.intro', null);
111033                     context.history().on('change.intro', null);
111034                     nextStep();
111035                 }
111036             }
111037
111038
111039             function clickCircle() {
111040                 if (!_tankID) { return chapter.restart(); }
111041                 var entity = context.hasEntity(_tankID);
111042                 if (!entity) { return continueTo(rightClickTank); }
111043
111044                 var node = selectMenuItem('circularize').node();
111045                 if (!node) { return continueTo(rightClickTank); }
111046
111047                 var wasChanged = false;
111048                 var menuCoords = context.map().mouseCoordinates();
111049
111050                 revealEditMenu(menuCoords,
111051                     t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') })
111052                 );
111053
111054                 context.on('enter.intro', function(mode) {
111055                     if (mode.id === 'browse') {
111056                         continueTo(rightClickTank);
111057                     } else if (mode.id === 'move' || mode.id === 'rotate') {
111058                         continueTo(retryClickCircle);
111059                     }
111060                 });
111061
111062                 context.map().on('move.intro drawn.intro', function() {
111063                     var node = selectMenuItem('circularize').node();
111064                     if (!wasChanged && !node) { return continueTo(rightClickTank); }
111065
111066                     revealEditMenu(menuCoords,
111067                         t('intro.buildings.circle_tank', { button: icon('#iD-operation-circularize', 'pre-text') }),
111068                         { duration: 0 }
111069                     );
111070                 });
111071
111072                 context.history().on('change.intro', function() {
111073                     wasChanged = true;
111074                     context.history().on('change.intro', null);
111075
111076                     // Something changed.  Wait for transition to complete and check undo annotation.
111077                     timeout(function() {
111078                         if (context.history().undoAnnotation() === t('operations.circularize.annotation.single')) {
111079                             continueTo(play);
111080                         } else {
111081                             continueTo(retryClickCircle);
111082                         }
111083                     }, 500);  // after transitioned actions
111084                 });
111085
111086                 function continueTo(nextStep) {
111087                     context.on('enter.intro', null);
111088                     context.map().on('move.intro drawn.intro', null);
111089                     context.history().on('change.intro', null);
111090                     nextStep();
111091                 }
111092             }
111093
111094
111095             function retryClickCircle() {
111096                 context.enter(modeBrowse(context));
111097
111098                 revealTank(tank, t('intro.buildings.retry_circle'), {
111099                     buttonText: t('intro.ok'),
111100                     buttonCallback: function() { continueTo(rightClickTank); }
111101                 });
111102
111103                 function continueTo(nextStep) {
111104                     nextStep();
111105                 }
111106             }
111107
111108
111109             function play() {
111110                 dispatch$1.call('done');
111111                 reveal('.ideditor',
111112                     t('intro.buildings.play', { next: t('intro.startediting.title') }), {
111113                         tooltipBox: '.intro-nav-wrap .chapter-startEditing',
111114                         buttonText: t('intro.ok'),
111115                         buttonCallback: function() { reveal('.ideditor'); }
111116                     }
111117                 );
111118             }
111119
111120
111121             chapter.enter = function() {
111122                 addHouse();
111123             };
111124
111125
111126             chapter.exit = function() {
111127                 timeouts.forEach(window.clearTimeout);
111128                 context.on('enter.intro exit.intro', null);
111129                 context.map().on('move.intro drawn.intro', null);
111130                 context.history().on('change.intro', null);
111131                 d3_select('.inspector-wrap').on('wheel.intro', null);
111132                 d3_select('.preset-search-input').on('keydown.intro keyup.intro', null);
111133                 d3_select('.more-fields .combobox-input').on('click.intro', null);
111134             };
111135
111136
111137             chapter.restart = function() {
111138                 chapter.exit();
111139                 chapter.enter();
111140             };
111141
111142
111143             return utilRebind(chapter, dispatch$1, 'on');
111144         }
111145
111146         function uiIntroStartEditing(context, reveal) {
111147             var dispatch$1 = dispatch('done', 'startEditing');
111148             var modalSelection = d3_select(null);
111149
111150
111151             var chapter = {
111152                 title: 'intro.startediting.title'
111153             };
111154
111155             function showHelp() {
111156                 reveal('.map-control.help-control',
111157                     t('intro.startediting.help', { button: icon('#iD-icon-help', 'pre-text'), key: t('help.key') }), {
111158                         buttonText: t('intro.ok'),
111159                         buttonCallback: function() { shortcuts(); }
111160                     }
111161                 );
111162             }
111163
111164             function shortcuts() {
111165                 reveal('.map-control.help-control',
111166                     t('intro.startediting.shortcuts', { key: t('shortcuts.toggle.key') }), {
111167                         buttonText: t('intro.ok'),
111168                         buttonCallback: function() { showSave(); }
111169                     }
111170                 );
111171             }
111172
111173             function showSave() {
111174                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
111175                 reveal('#bar button.save',
111176                     t('intro.startediting.save'), {
111177                         buttonText: t('intro.ok'),
111178                         buttonCallback: function() { showStart(); }
111179                     }
111180                 );
111181             }
111182
111183             function showStart() {
111184                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
111185
111186                 modalSelection = uiModal(context.container());
111187
111188                 modalSelection.select('.modal')
111189                     .attr('class', 'modal-splash modal col6');
111190
111191                 modalSelection.selectAll('.close').remove();
111192
111193                 var startbutton = modalSelection.select('.content')
111194                     .attr('class', 'fillL')
111195                     .append('button')
111196                         .attr('class', 'modal-section huge-modal-button')
111197                         .on('click', function() {
111198                             modalSelection.remove();
111199                         });
111200
111201                     startbutton
111202                         .append('svg')
111203                         .attr('class', 'illustration')
111204                         .append('use')
111205                         .attr('xlink:href', '#iD-logo-walkthrough');
111206
111207                     startbutton
111208                         .append('h2')
111209                         .text(t('intro.startediting.start'));
111210
111211                 dispatch$1.call('startEditing');
111212             }
111213
111214
111215             chapter.enter = function() {
111216                 showHelp();
111217             };
111218
111219
111220             chapter.exit = function() {
111221                 modalSelection.remove();
111222                 d3_selectAll('.shaded').remove();  // in case user opened keyboard shortcuts
111223             };
111224
111225
111226             return utilRebind(chapter, dispatch$1, 'on');
111227         }
111228
111229         var chapterUi = {
111230             welcome: uiIntroWelcome,
111231             navigation: uiIntroNavigation,
111232             point: uiIntroPoint,
111233             area: uiIntroArea,
111234             line: uiIntroLine,
111235             building: uiIntroBuilding,
111236             startEditing: uiIntroStartEditing
111237         };
111238
111239         var chapterFlow = [
111240             'welcome',
111241             'navigation',
111242             'point',
111243             'area',
111244             'line',
111245             'building',
111246             'startEditing'
111247         ];
111248
111249
111250         function uiIntro(context) {
111251             var INTRO_IMAGERY = 'EsriWorldImageryClarity';
111252             var introGraph = {};
111253             var _currChapter;
111254
111255             // create entities for intro graph and localize names
111256             for (var id in dataIntroGraph) {
111257                 introGraph[id] = osmEntity(localize(dataIntroGraph[id]));
111258             }
111259
111260
111261             function intro(selection) {
111262                 context.enter(modeBrowse(context));
111263
111264                 // Save current map state
111265                 var osm = context.connection();
111266                 var history = context.history().toJSON();
111267                 var hash = window.location.hash;
111268                 var center = context.map().center();
111269                 var zoom = context.map().zoom();
111270                 var background = context.background().baseLayerSource();
111271                 var overlays = context.background().overlayLayerSources();
111272                 var opacity = d3_selectAll('#map .layer-background').style('opacity');
111273                 var caches = osm && osm.caches();
111274                 var baseEntities = context.history().graph().base().entities;
111275
111276                 // Show sidebar and disable the sidebar resizing button
111277                 // (this needs to be before `context.inIntro(true)`)
111278                 context.ui().sidebar.expand();
111279                 d3_selectAll('button.sidebar-toggle').classed('disabled', true);
111280
111281                 // Block saving
111282                 context.inIntro(true);
111283
111284                 // Load semi-real data used in intro
111285                 if (osm) { osm.toggle(false).reset(); }
111286                 context.history().reset();
111287                 context.history().merge(Object.values(coreGraph().load(introGraph).entities));
111288                 context.history().checkpoint('initial');
111289
111290                 // Setup imagery
111291                 var imagery = context.background().findSource(INTRO_IMAGERY);
111292                 if (imagery) {
111293                     context.background().baseLayerSource(imagery);
111294                 } else {
111295                     context.background().bing();
111296                 }
111297                 overlays.forEach(function(d) {
111298                     context.background().toggleOverlayLayer(d);
111299                 });
111300
111301                 // Setup data layers (only OSM)
111302                 var layers = context.layers();
111303                 layers.all().forEach(function(item) {
111304                     // if the layer has the function `enabled`
111305                     if (typeof item.layer.enabled === 'function') {
111306                         item.layer.enabled(item.id === 'osm');
111307                     }
111308                 });
111309
111310
111311                 d3_selectAll('#map .layer-background').style('opacity', 1);
111312
111313                 var curtain = uiCurtain();
111314                 selection.call(curtain);
111315
111316                 // Store that the user started the walkthrough..
111317                 context.storage('walkthrough_started', 'yes');
111318
111319                 // Restore previous walkthrough progress..
111320                 var storedProgress = context.storage('walkthrough_progress') || '';
111321                 var progress = storedProgress.split(';').filter(Boolean);
111322
111323                 var chapters = chapterFlow.map(function(chapter, i) {
111324                     var s = chapterUi[chapter](context, curtain.reveal)
111325                         .on('done', function() {
111326                             context.presets().init();  // clear away "recent" presets
111327
111328                             buttons.filter(function(d) {
111329                                 return d.title === s.title;
111330                             }).classed('finished', true);
111331
111332                             if (i < chapterFlow.length - 1) {
111333                                 var next = chapterFlow[i + 1];
111334                                 d3_select('button.chapter-' + next)
111335                                     .classed('next', true);
111336                             }
111337
111338                             // Store walkthrough progress..
111339                             progress.push(chapter);
111340                             context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
111341                         });
111342                     return s;
111343                 });
111344
111345                 chapters[chapters.length - 1].on('startEditing', function() {
111346                     // Store walkthrough progress..
111347                     progress.push('startEditing');
111348                     context.storage('walkthrough_progress', utilArrayUniq(progress).join(';'));
111349
111350                     // Store if walkthrough is completed..
111351                     var incomplete = utilArrayDifference(chapterFlow, progress);
111352                     if (!incomplete.length) {
111353                         context.storage('walkthrough_completed', 'yes');
111354                     }
111355
111356                     curtain.remove();
111357                     navwrap.remove();
111358                     d3_selectAll('#map .layer-background').style('opacity', opacity);
111359                     d3_selectAll('button.sidebar-toggle').classed('disabled', false);
111360                     if (osm) { osm.toggle(true).reset().caches(caches); }
111361                     context.history().reset().merge(Object.values(baseEntities));
111362                     context.background().baseLayerSource(background);
111363                     overlays.forEach(function(d) { context.background().toggleOverlayLayer(d); });
111364                     if (history) { context.history().fromJSON(history, false); }
111365                     context.map().centerZoom(center, zoom);
111366                     window.location.replace(hash);
111367                     context.inIntro(false);
111368                 });
111369
111370                 var navwrap = selection
111371                     .append('div')
111372                     .attr('class', 'intro-nav-wrap fillD');
111373
111374                 navwrap
111375                     .append('svg')
111376                     .attr('class', 'intro-nav-wrap-logo')
111377                     .append('use')
111378                     .attr('xlink:href', '#iD-logo-walkthrough');
111379
111380                 var buttonwrap = navwrap
111381                     .append('div')
111382                     .attr('class', 'joined')
111383                     .selectAll('button.chapter');
111384
111385                 var buttons = buttonwrap
111386                     .data(chapters)
111387                     .enter()
111388                     .append('button')
111389                     .attr('class', function(d, i) { return 'chapter chapter-' + chapterFlow[i]; })
111390                     .on('click', enterChapter);
111391
111392                 buttons
111393                     .append('span')
111394                     .text(function(d) { return t(d.title); });
111395
111396                 buttons
111397                     .append('span')
111398                     .attr('class', 'status')
111399                     .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
111400
111401                 enterChapter(chapters[0]);
111402
111403
111404                 function enterChapter(newChapter) {
111405                     if (_currChapter) { _currChapter.exit(); }
111406                     context.enter(modeBrowse(context));
111407
111408                     _currChapter = newChapter;
111409                     _currChapter.enter();
111410
111411                     buttons
111412                         .classed('next', false)
111413                         .classed('active', function(d) {
111414                             return d.title === _currChapter.title;
111415                         });
111416                 }
111417             }
111418
111419
111420             return intro;
111421         }
111422
111423         function uiShortcuts(context) {
111424             var detected = utilDetect();
111425             var _activeTab = 0;
111426             var _modalSelection;
111427             var _selection = d3_select(null);
111428
111429
111430             context.keybinding()
111431                 .on([t('shortcuts.toggle.key'), '?'], function () {
111432                     if (d3_selectAll('.modal-shortcuts').size()) {  // already showing
111433                         if (_modalSelection) {
111434                             _modalSelection.close();
111435                             _modalSelection = null;
111436                         }
111437                     } else {
111438                         _modalSelection = uiModal(_selection);
111439                         shortcutsModal(_modalSelection);
111440                     }
111441                 });
111442
111443
111444             function shortcutsModal(_modalSelection) {
111445                 _modalSelection.select('.modal')
111446                     .classed('modal-shortcuts', true);
111447
111448                 var shortcutsModal = _modalSelection.select('.content');
111449
111450                 shortcutsModal
111451                     .append('div')
111452                     .attr('class', 'modal-section')
111453                     .append('h3')
111454                     .text(t('shortcuts.title'));
111455
111456                 shortcutsModal
111457                     .call(render);
111458             }
111459
111460
111461             function render(selection) {
111462                 var wrapper = selection
111463                     .selectAll('.wrapper')
111464                     .data([0]);
111465
111466                 var wrapperEnter = wrapper
111467                     .enter()
111468                     .append('div')
111469                     .attr('class', 'wrapper modal-section');
111470
111471                 var tabsBar = wrapperEnter
111472                     .append('div')
111473                     .attr('class', 'tabs-bar');
111474
111475                 var shortcutsList = wrapperEnter
111476                     .append('div')
111477                     .attr('class', 'shortcuts-list');
111478
111479                 wrapper = wrapper.merge(wrapperEnter);
111480
111481                 var tabs = tabsBar
111482                     .selectAll('.tab')
111483                     .data(dataShortcuts);
111484
111485                 var tabsEnter = tabs
111486                     .enter()
111487                     .append('div')
111488                     .attr('class', 'tab')
111489                     .on('click', function (d, i) {
111490                         _activeTab = i;
111491                         render(selection);
111492                     });
111493
111494                 tabsEnter
111495                     .append('span')
111496                     .text(function (d) { return t(d.text); });
111497
111498                 tabs = tabs
111499                     .merge(tabsEnter);
111500
111501                 // Update
111502                 wrapper.selectAll('.tab')
111503                     .classed('active', function (d, i) {
111504                         return i === _activeTab;
111505                     });
111506
111507
111508                 var shortcuts = shortcutsList
111509                     .selectAll('.shortcut-tab')
111510                     .data(dataShortcuts);
111511
111512                 var shortcutsEnter = shortcuts
111513                     .enter()
111514                     .append('div')
111515                     .attr('class', function(d) { return 'shortcut-tab shortcut-tab-' + d.tab; });
111516
111517                 var columnsEnter = shortcutsEnter
111518                     .selectAll('.shortcut-column')
111519                     .data(function (d) { return d.columns; })
111520                     .enter()
111521                     .append('table')
111522                     .attr('class', 'shortcut-column');
111523
111524                 var rowsEnter = columnsEnter
111525                     .selectAll('.shortcut-row')
111526                     .data(function (d) { return d.rows; })
111527                     .enter()
111528                     .append('tr')
111529                     .attr('class', 'shortcut-row');
111530
111531
111532                 var sectionRows = rowsEnter
111533                     .filter(function (d) { return !d.shortcuts; });
111534
111535                 sectionRows
111536                     .append('td');
111537
111538                 sectionRows
111539                     .append('td')
111540                     .attr('class', 'shortcut-section')
111541                     .append('h3')
111542                     .text(function (d) { return t(d.text); });
111543
111544
111545                 var shortcutRows = rowsEnter
111546                     .filter(function (d) { return d.shortcuts; });
111547
111548                 var shortcutKeys = shortcutRows
111549                     .append('td')
111550                     .attr('class', 'shortcut-keys');
111551
111552                 var modifierKeys = shortcutKeys
111553                     .filter(function (d) { return d.modifiers; });
111554
111555                 modifierKeys
111556                     .selectAll('kbd.modifier')
111557                     .data(function (d) {
111558                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
111559                             return ['⌘'];
111560                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
111561                             return [];
111562                         } else {
111563                             return d.modifiers;
111564                         }
111565                     })
111566                     .enter()
111567                     .each(function () {
111568                         var selection = d3_select(this);
111569
111570                         selection
111571                             .append('kbd')
111572                             .attr('class', 'modifier')
111573                             .text(function (d) { return uiCmd.display(d); });
111574
111575                         selection
111576                             .append('span')
111577                             .text('+');
111578                     });
111579
111580
111581                 shortcutKeys
111582                     .selectAll('kbd.shortcut')
111583                     .data(function (d) {
111584                         var arr = d.shortcuts;
111585                         if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
111586                             arr = ['Y'];
111587                         } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
111588                             arr = ['F11'];
111589                         }
111590
111591                         // replace translations
111592                         arr = arr.map(function(s) {
111593                             return uiCmd.display(s.indexOf('.') !== -1 ? t(s) : s);
111594                         });
111595
111596                         return utilArrayUniq(arr).map(function(s) {
111597                             return {
111598                                 shortcut: s,
111599                                 separator: d.separator,
111600                                 suffix: d.suffix
111601                             };
111602                         });
111603                     })
111604                     .enter()
111605                     .each(function (d, i, nodes) {
111606                         var selection = d3_select(this);
111607                         var click = d.shortcut.toLowerCase().match(/(.*).click/);
111608
111609                         if (click && click[1]) {   // replace "left_click", "right_click" with mouse icon
111610                             selection
111611                                 .call(svgIcon('#iD-walkthrough-mouse', 'mouseclick', click[1]));
111612                         } else {
111613                             selection
111614                                 .append('kbd')
111615                                 .attr('class', 'shortcut')
111616                                 .text(function (d) { return d.shortcut; });
111617                         }
111618
111619                         if (i < nodes.length - 1) {
111620                             selection
111621                                 .append('span')
111622                                 .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
111623                         } else if (i === nodes.length - 1 && d.suffix) {
111624                             selection
111625                                 .append('span')
111626                                 .text(d.suffix);
111627                         }
111628                     });
111629
111630
111631                 shortcutKeys
111632                     .filter(function(d) { return d.gesture; })
111633                     .each(function () {
111634                         var selection = d3_select(this);
111635
111636                         selection
111637                             .append('span')
111638                             .text('+');
111639
111640                         selection
111641                             .append('span')
111642                             .attr('class', 'gesture')
111643                             .text(function (d) { return t(d.gesture); });
111644                     });
111645
111646
111647                 shortcutRows
111648                     .append('td')
111649                     .attr('class', 'shortcut-desc')
111650                     .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
111651
111652
111653                 shortcuts = shortcuts
111654                     .merge(shortcutsEnter);
111655
111656                 // Update
111657                 wrapper.selectAll('.shortcut-tab')
111658                     .style('display', function (d, i) {
111659                         return i === _activeTab ? 'flex' : 'none';
111660                     });
111661             }
111662
111663
111664             return function(selection, show) {
111665                 _selection = selection;
111666                 if (show) {
111667                     _modalSelection = uiModal(selection);
111668                     shortcutsModal(_modalSelection);
111669                 }
111670             };
111671         }
111672
111673         function uiHelp(context) {
111674             var key = t('help.key');
111675
111676             var _pane = d3_select(null);
111677
111678             var docKeys = [
111679                 ['help', [
111680                     'welcome',
111681                     'open_data_h',
111682                     'open_data',
111683                     'before_start_h',
111684                     'before_start',
111685                     'open_source_h',
111686                     'open_source',
111687                     'open_source_help'
111688                 ]],
111689                 ['overview', [
111690                     'navigation_h',
111691                     'navigation_drag',
111692                     'navigation_zoom',
111693                     'features_h',
111694                     'features',
111695                     'nodes_ways'
111696                 ]],
111697                 ['editing', [
111698                     'select_h',
111699                     'select_left_click',
111700                     'select_right_click',
111701                     'multiselect_h',
111702                     'multiselect_shift_click',
111703                     'multiselect_lasso',
111704                     'undo_redo_h',
111705                     'undo_redo',
111706                     'save_h',
111707                     'save',
111708                     'save_validation',
111709                     'upload_h',
111710                     'upload',
111711                     'backups_h',
111712                     'backups',
111713                     'keyboard_h',
111714                     'keyboard'
111715                 ]],
111716                 ['feature_editor', [
111717                     'intro',
111718                     'definitions',
111719                     'type_h',
111720                     'type',
111721                     'type_picker',
111722                     'fields_h',
111723                     'fields_all_fields',
111724                     'fields_example',
111725                     'fields_add_field',
111726                     'tags_h',
111727                     'tags_all_tags',
111728                     'tags_resources'
111729                 ]],
111730                 ['points', [
111731                     'intro',
111732                     'add_point_h',
111733                     'add_point',
111734                     'add_point_finish',
111735                     'move_point_h',
111736                     'move_point',
111737                     'delete_point_h',
111738                     'delete_point',
111739                     'delete_point_command'
111740                 ]],
111741                 ['lines', [
111742                     'intro',
111743                     'add_line_h',
111744                     'add_line',
111745                     'add_line_draw',
111746                     'add_line_finish',
111747                     'modify_line_h',
111748                     'modify_line_dragnode',
111749                     'modify_line_addnode',
111750                     'connect_line_h',
111751                     'connect_line',
111752                     'connect_line_display',
111753                     'connect_line_drag',
111754                     'connect_line_tag',
111755                     'disconnect_line_h',
111756                     'disconnect_line_command',
111757                     'move_line_h',
111758                     'move_line_command',
111759                     'move_line_connected',
111760                     'delete_line_h',
111761                     'delete_line',
111762                     'delete_line_command'
111763                 ]],
111764                 ['areas', [
111765                     'intro',
111766                     'point_or_area_h',
111767                     'point_or_area',
111768                     'add_area_h',
111769                     'add_area_command',
111770                     'add_area_draw',
111771                     'add_area_finish',
111772                     'square_area_h',
111773                     'square_area_command',
111774                     'modify_area_h',
111775                     'modify_area_dragnode',
111776                     'modify_area_addnode',
111777                     'delete_area_h',
111778                     'delete_area',
111779                     'delete_area_command'
111780                 ]],
111781                 ['relations', [
111782                     'intro',
111783                     'edit_relation_h',
111784                     'edit_relation',
111785                     'edit_relation_add',
111786                     'edit_relation_delete',
111787                     'maintain_relation_h',
111788                     'maintain_relation',
111789                     'relation_types_h',
111790                     'multipolygon_h',
111791                     'multipolygon',
111792                     'multipolygon_create',
111793                     'multipolygon_merge',
111794                     'turn_restriction_h',
111795                     'turn_restriction',
111796                     'turn_restriction_field',
111797                     'turn_restriction_editing',
111798                     'route_h',
111799                     'route',
111800                     'route_add',
111801                     'boundary_h',
111802                     'boundary',
111803                     'boundary_add'
111804                 ]],
111805                 ['notes', [
111806                     'intro',
111807                     'add_note_h',
111808                     'add_note',
111809                     'move_note',
111810                     'update_note_h',
111811                     'update_note',
111812                     'save_note_h',
111813                     'save_note'
111814                 ]],
111815
111816                 ['imagery', [
111817                     'intro',
111818                     'sources_h',
111819                     'choosing',
111820                     'sources',
111821                     'offsets_h',
111822                     'offset',
111823                     'offset_change'
111824                 ]],
111825                 ['streetlevel', [
111826                     'intro',
111827                     'using_h',
111828                     'using',
111829                     'photos',
111830                     'viewer'
111831                 ]],
111832                 ['gps', [
111833                     'intro',
111834                     'survey',
111835                     'using_h',
111836                     'using',
111837                     'tracing',
111838                     'upload'
111839                 ]],
111840                 ['qa', [
111841                     'intro',
111842                     'tools_h',
111843                     'tools',
111844                     'issues_h',
111845                     'issues'
111846                 ]]
111847             ];
111848
111849             var headings = {
111850                 'help.help.open_data_h': 3,
111851                 'help.help.before_start_h': 3,
111852                 'help.help.open_source_h': 3,
111853                 'help.overview.navigation_h': 3,
111854                 'help.overview.features_h': 3,
111855                 'help.editing.select_h': 3,
111856                 'help.editing.multiselect_h': 3,
111857                 'help.editing.undo_redo_h': 3,
111858                 'help.editing.save_h': 3,
111859                 'help.editing.upload_h': 3,
111860                 'help.editing.backups_h': 3,
111861                 'help.editing.keyboard_h': 3,
111862                 'help.feature_editor.type_h': 3,
111863                 'help.feature_editor.fields_h': 3,
111864                 'help.feature_editor.tags_h': 3,
111865                 'help.points.add_point_h': 3,
111866                 'help.points.move_point_h': 3,
111867                 'help.points.delete_point_h': 3,
111868                 'help.lines.add_line_h': 3,
111869                 'help.lines.modify_line_h': 3,
111870                 'help.lines.connect_line_h': 3,
111871                 'help.lines.disconnect_line_h': 3,
111872                 'help.lines.move_line_h': 3,
111873                 'help.lines.delete_line_h': 3,
111874                 'help.areas.point_or_area_h': 3,
111875                 'help.areas.add_area_h': 3,
111876                 'help.areas.square_area_h': 3,
111877                 'help.areas.modify_area_h': 3,
111878                 'help.areas.delete_area_h': 3,
111879                 'help.relations.edit_relation_h': 3,
111880                 'help.relations.maintain_relation_h': 3,
111881                 'help.relations.relation_types_h': 2,
111882                 'help.relations.multipolygon_h': 3,
111883                 'help.relations.turn_restriction_h': 3,
111884                 'help.relations.route_h': 3,
111885                 'help.relations.boundary_h': 3,
111886                 'help.notes.add_note_h': 3,
111887                 'help.notes.update_note_h': 3,
111888                 'help.notes.save_note_h': 3,
111889                 'help.imagery.sources_h': 3,
111890                 'help.imagery.offsets_h': 3,
111891                 'help.streetlevel.using_h': 3,
111892                 'help.gps.using_h': 3,
111893                 'help.qa.tools_h': 3,
111894                 'help.qa.issues_h': 3
111895             };
111896
111897             var replacements = {
111898                 point: icon('#iD-icon-point', 'pre-text'),
111899                 line: icon('#iD-icon-line', 'pre-text'),
111900                 area: icon('#iD-icon-area', 'pre-text'),
111901                 note: icon('#iD-icon-note', 'pre-text add-note'),
111902                 plus: icon('#iD-icon-plus', 'pre-text'),
111903                 minus: icon('#iD-icon-minus', 'pre-text'),
111904                 orthogonalize: icon('#iD-operation-orthogonalize', 'pre-text'),
111905                 disconnect: icon('#iD-operation-disconnect', 'pre-text'),
111906                 layers: icon('#iD-icon-layers', 'pre-text'),
111907                 data: icon('#iD-icon-data', 'pre-text'),
111908                 inspect: icon('#iD-icon-inspect', 'pre-text'),
111909                 move: icon('#iD-operation-move', 'pre-text'),
111910                 merge: icon('#iD-operation-merge', 'pre-text'),
111911                 delete: icon('#iD-operation-delete', 'pre-text'),
111912                 close: icon('#iD-icon-close', 'pre-text'),
111913                 undo: icon(textDirection === 'rtl' ? '#iD-icon-redo' : '#iD-icon-undo', 'pre-text'),
111914                 redo: icon(textDirection === 'rtl' ? '#iD-icon-undo' : '#iD-icon-redo', 'pre-text'),
111915                 save: icon('#iD-icon-save', 'pre-text'),
111916                 leftclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'left'),
111917                 rightclick: icon('#iD-walkthrough-mouse', 'pre-text mouseclick', 'right'),
111918                 shift: uiCmd.display('⇧'),
111919                 alt: uiCmd.display('⌥'),
111920                 return: uiCmd.display('↵'),
111921                 version: context.version
111922             };
111923
111924             // For each section, squash all the texts into a single markdown document
111925             var docs = docKeys.map(function(key) {
111926                 var helpkey = 'help.' + key[0];
111927                 var text = key[1].reduce(function(all, part) {
111928                     var subkey = helpkey + '.' + part;
111929                     var depth = headings[subkey];                              // is this subkey a heading?
111930                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
111931                     return all + hhh + t(subkey, replacements) + '\n\n';
111932                 }, '');
111933
111934                 return {
111935                     title: t(helpkey + '.title'),
111936                     html: marked_1(text.trim())
111937                 };
111938             });
111939
111940             var paneTooltip = tooltip()
111941                 .placement((textDirection === 'rtl') ? 'right' : 'left')
111942                 .html(true)
111943                 .title(uiTooltipHtml(t('help.title'), key));
111944
111945             function hidePane() {
111946                 context.ui().togglePanes();
111947             }
111948
111949             uiHelp.togglePane = function() {
111950                 if (event) { event.preventDefault(); }
111951                 paneTooltip.hide();
111952                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
111953             };
111954
111955             uiHelp.renderToggleButton = function(selection) {
111956
111957                 selection.append('button')
111958                     .on('click', uiHelp.togglePane)
111959                     .call(svgIcon('#iD-icon-help', 'light'))
111960                     .call(paneTooltip);
111961             };
111962
111963
111964             uiHelp.renderPane = function(selection) {
111965
111966                 function clickHelp(d, i) {
111967                     var rtl = (textDirection === 'rtl');
111968                     content.property('scrollTop', 0);
111969                     doctitle.html(d.title);
111970
111971                     body.html(d.html);
111972                     body.selectAll('a')
111973                         .attr('target', '_blank');
111974                     menuItems.classed('selected', function(m) {
111975                         return m.title === d.title;
111976                     });
111977
111978                     nav.html('');
111979                     if (rtl) {
111980                         nav.call(drawNext).call(drawPrevious);
111981                     } else {
111982                         nav.call(drawPrevious).call(drawNext);
111983                     }
111984
111985
111986                     function drawNext(selection) {
111987                         if (i < docs.length - 1) {
111988                             var nextLink = selection
111989                                 .append('a')
111990                                 .attr('class', 'next')
111991                                 .on('click', function() {
111992                                     clickHelp(docs[i + 1], i + 1);
111993                                 });
111994
111995                             nextLink
111996                                 .append('span')
111997                                 .text(docs[i + 1].title)
111998                                 .call(svgIcon((rtl ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'));
111999                         }
112000                     }
112001
112002
112003                     function drawPrevious(selection) {
112004                         if (i > 0) {
112005                             var prevLink = selection
112006                                 .append('a')
112007                                 .attr('class', 'previous')
112008                                 .on('click', function() {
112009                                     clickHelp(docs[i - 1], i - 1);
112010                                 });
112011
112012                             prevLink
112013                                 .call(svgIcon((rtl ? '#iD-icon-forward' : '#iD-icon-backward'), 'inline'))
112014                                 .append('span')
112015                                 .text(docs[i - 1].title);
112016                         }
112017                     }
112018                 }
112019
112020
112021                 function clickWalkthrough() {
112022                     if (context.inIntro()) { return; }
112023                     context.container().call(uiIntro(context));
112024                     context.ui().togglePanes();
112025                 }
112026
112027
112028                 function clickShortcuts() {
112029                     context.container().call(uiShortcuts(context), true);
112030                 }
112031
112032
112033                 _pane = selection.append('div')
112034                     .attr('class', 'help-wrap map-pane fillL hide')
112035                     .attr('pane', 'help');
112036
112037                 var heading = _pane
112038                     .append('div')
112039                     .attr('class', 'pane-heading');
112040
112041                 var doctitle = heading
112042                     .append('h2')
112043                     .text(t('help.title'));
112044
112045                 heading
112046                     .append('button')
112047                     .on('click', hidePane)
112048                     .call(svgIcon('#iD-icon-close'));
112049
112050
112051                 var content = _pane
112052                     .append('div')
112053                     .attr('class', 'pane-content');
112054
112055                 var toc = content
112056                     .append('ul')
112057                     .attr('class', 'toc');
112058
112059                 var menuItems = toc.selectAll('li')
112060                     .data(docs)
112061                     .enter()
112062                     .append('li')
112063                     .append('a')
112064                     .html(function(d) { return d.title; })
112065                     .on('click', clickHelp);
112066
112067                 var shortcuts = toc
112068                     .append('li')
112069                     .attr('class', 'shortcuts')
112070                     .call(tooltip()
112071                         .html(true)
112072                         .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
112073                         .placement('top')
112074                     )
112075                     .append('a')
112076                     .on('click', clickShortcuts);
112077
112078                 shortcuts
112079                     .append('div')
112080                     .text(t('shortcuts.title'));
112081
112082                 var walkthrough = toc
112083                     .append('li')
112084                     .attr('class', 'walkthrough')
112085                     .append('a')
112086                     .on('click', clickWalkthrough);
112087
112088                 walkthrough
112089                     .append('svg')
112090                     .attr('class', 'logo logo-walkthrough')
112091                     .append('use')
112092                     .attr('xlink:href', '#iD-logo-walkthrough');
112093
112094                 walkthrough
112095                     .append('div')
112096                     .text(t('splash.walkthrough'));
112097
112098
112099                 var helpContent = content
112100                     .append('div')
112101                     .attr('class', 'left-content');
112102
112103                 var body = helpContent
112104                     .append('div')
112105                     .attr('class', 'body');
112106
112107                 var nav = helpContent
112108                     .append('div')
112109                     .attr('class', 'nav');
112110
112111                 clickHelp(docs[0], 0);
112112
112113                 context.keybinding()
112114                     .on(key, uiHelp.togglePane);
112115
112116             };
112117
112118             return uiHelp;
112119         }
112120
112121         function uiPanelBackground(context) {
112122             var background = context.background();
112123             var currSourceName = null;
112124             var metadata = {};
112125             var metadataKeys = [
112126                 'zoom', 'vintage', 'source', 'description', 'resolution', 'accuracy'
112127             ];
112128
112129             var debouncedRedraw = debounce(redraw, 250);
112130
112131             function redraw(selection) {
112132                 var source = background.baseLayerSource();
112133                 var isDG = (source.id.match(/^DigitalGlobe/i) !== null);
112134
112135                 if (currSourceName !== source.name()) {
112136                     currSourceName = source.name();
112137                     metadata = {};
112138                 }
112139
112140                 selection.html('');
112141
112142                 var list = selection
112143                     .append('ul')
112144                     .attr('class', 'background-info');
112145
112146                 list
112147                     .append('li')
112148                     .text(currSourceName);
112149
112150                 metadataKeys.forEach(function(k) {
112151                     // DigitalGlobe vintage is available in raster layers for now.
112152                     if (isDG && k === 'vintage') { return; }
112153
112154                     list
112155                         .append('li')
112156                         .attr('class', 'background-info-list-' + k)
112157                         .classed('hide', !metadata[k])
112158                         .text(t('info_panels.background.' + k) + ':')
112159                         .append('span')
112160                         .attr('class', 'background-info-span-' + k)
112161                         .text(metadata[k]);
112162                 });
112163
112164                 debouncedGetMetadata(selection);
112165
112166                 var toggleTiles = context.getDebug('tile') ? 'hide_tiles' : 'show_tiles';
112167
112168                 selection
112169                     .append('a')
112170                     .text(t('info_panels.background.' + toggleTiles))
112171                     .attr('href', '#')
112172                     .attr('class', 'button button-toggle-tiles')
112173                     .on('click', function() {
112174                         event.preventDefault();
112175                         context.setDebug('tile', !context.getDebug('tile'));
112176                         selection.call(redraw);
112177                     });
112178
112179                 if (isDG) {
112180                     var key = source.id + '-vintage';
112181                     var sourceVintage = context.background().findSource(key);
112182                     var showsVintage = context.background().showsLayer(sourceVintage);
112183                     var toggleVintage = showsVintage ? 'hide_vintage' : 'show_vintage';
112184                     selection
112185                         .append('a')
112186                         .text(t('info_panels.background.' + toggleVintage))
112187                         .attr('href', '#')
112188                         .attr('class', 'button button-toggle-vintage')
112189                         .on('click', function() {
112190                             event.preventDefault();
112191                             context.background().toggleOverlayLayer(sourceVintage);
112192                             selection.call(redraw);
112193                         });
112194                 }
112195
112196                 // disable if necessary
112197                 ['DigitalGlobe-Premium', 'DigitalGlobe-Standard'].forEach(function(layerId) {
112198                     if (source.id !== layerId) {
112199                         var key = layerId + '-vintage';
112200                         var sourceVintage = context.background().findSource(key);
112201                         if (context.background().showsLayer(sourceVintage)) {
112202                             context.background().toggleOverlayLayer(sourceVintage);
112203                         }
112204                     }
112205                 });
112206             }
112207
112208
112209             var debouncedGetMetadata = debounce(getMetadata, 250);
112210
112211             function getMetadata(selection) {
112212                 var tile = d3_select('.layer-background img.tile-center');   // tile near viewport center
112213                 if (tile.empty()) { return; }
112214
112215                 var sourceName = currSourceName;
112216                 var d = tile.datum();
112217                 var zoom = (d && d.length >= 3 && d[2]) || Math.floor(context.map().zoom());
112218                 var center = context.map().center();
112219
112220                 // update zoom
112221                 metadata.zoom = String(zoom);
112222                 selection.selectAll('.background-info-list-zoom')
112223                     .classed('hide', false)
112224                     .selectAll('.background-info-span-zoom')
112225                     .text(metadata.zoom);
112226
112227                 if (!d || !d.length >= 3) { return; }
112228
112229                 background.baseLayerSource().getMetadata(center, d, function(err, result) {
112230                     if (err || currSourceName !== sourceName) { return; }
112231
112232                     // update vintage
112233                     var vintage = result.vintage;
112234                     metadata.vintage = (vintage && vintage.range) || t('info_panels.background.unknown');
112235                     selection.selectAll('.background-info-list-vintage')
112236                         .classed('hide', false)
112237                         .selectAll('.background-info-span-vintage')
112238                         .text(metadata.vintage);
112239
112240                     // update other metdata
112241                     metadataKeys.forEach(function(k) {
112242                         if (k === 'zoom' || k === 'vintage') { return; }  // done already
112243                         var val = result[k];
112244                         metadata[k] = val;
112245                         selection.selectAll('.background-info-list-' + k)
112246                             .classed('hide', !val)
112247                             .selectAll('.background-info-span-' + k)
112248                             .text(val);
112249                     });
112250                 });
112251             }
112252
112253
112254             var panel = function(selection) {
112255                 selection.call(redraw);
112256
112257                 context.map()
112258                     .on('drawn.info-background', function() {
112259                         selection.call(debouncedRedraw);
112260                     })
112261                     .on('move.info-background', function() {
112262                         selection.call(debouncedGetMetadata);
112263                     });
112264
112265             };
112266
112267             panel.off = function() {
112268                 context.map()
112269                     .on('drawn.info-background', null)
112270                     .on('move.info-background', null);
112271             };
112272
112273             panel.id = 'background';
112274             panel.title = t('info_panels.background.title');
112275             panel.key = t('info_panels.background.key');
112276
112277
112278             return panel;
112279         }
112280
112281         function uiPanelHistory(context) {
112282             var osm;
112283
112284             function displayTimestamp(timestamp) {
112285                 if (!timestamp) { return t('info_panels.history.unknown'); }
112286                 var detected = utilDetect();
112287                 var options = {
112288                     day: 'numeric', month: 'short', year: 'numeric',
112289                     hour: 'numeric', minute: 'numeric', second: 'numeric'
112290                 };
112291                 var d = new Date(timestamp);
112292                 if (isNaN(d.getTime())) { return t('info_panels.history.unknown'); }
112293                 return d.toLocaleString(detected.locale, options);
112294             }
112295
112296
112297             function displayUser(selection, userName) {
112298                 if (!userName) {
112299                     selection
112300                         .append('span')
112301                         .text(t('info_panels.history.unknown'));
112302                     return;
112303                 }
112304
112305                 selection
112306                     .append('span')
112307                     .attr('class', 'user-name')
112308                     .text(userName);
112309
112310                 var links = selection
112311                     .append('div')
112312                     .attr('class', 'links');
112313
112314                 if (osm) {
112315                     links
112316                         .append('a')
112317                         .attr('class', 'user-osm-link')
112318                         .attr('href', osm.userURL(userName))
112319                         .attr('target', '_blank')
112320                         .attr('tabindex', -1)
112321                         .text('OSM');
112322                 }
112323
112324                 links
112325                     .append('a')
112326                     .attr('class', 'user-hdyc-link')
112327                     .attr('href', 'https://hdyc.neis-one.org/?' + userName)
112328                     .attr('target', '_blank')
112329                     .attr('tabindex', -1)
112330                     .text('HDYC');
112331             }
112332
112333
112334             function displayChangeset(selection, changeset) {
112335                 if (!changeset) {
112336                     selection
112337                         .append('span')
112338                         .text(t('info_panels.history.unknown'));
112339                     return;
112340                 }
112341
112342                 selection
112343                     .append('span')
112344                     .attr('class', 'changeset-id')
112345                     .text(changeset);
112346
112347                 var links = selection
112348                     .append('div')
112349                     .attr('class', 'links');
112350
112351                 if (osm) {
112352                     links
112353                         .append('a')
112354                         .attr('class', 'changeset-osm-link')
112355                         .attr('href', osm.changesetURL(changeset))
112356                         .attr('target', '_blank')
112357                         .attr('tabindex', -1)
112358                         .text('OSM');
112359                 }
112360
112361                 links
112362                     .append('a')
112363                     .attr('class', 'changeset-osmcha-link')
112364                     .attr('href', 'https://osmcha.mapbox.com/changesets/' + changeset)
112365                     .attr('target', '_blank')
112366                     .attr('tabindex', -1)
112367                     .text('OSMCha');
112368
112369                 links
112370                     .append('a')
112371                     .attr('class', 'changeset-achavi-link')
112372                     .attr('href', 'https://overpass-api.de/achavi/?changeset=' + changeset)
112373                     .attr('target', '_blank')
112374                     .attr('tabindex', -1)
112375                     .text('Achavi');
112376             }
112377
112378
112379             function redraw(selection) {
112380                 var selectedNoteID = context.selectedNoteID();
112381                 osm = context.connection();
112382
112383                 var selected, note, entity;
112384                 if (selectedNoteID && osm) {       // selected 1 note
112385                     selected = [ t('note.note') + ' ' + selectedNoteID ];
112386                     note = osm.getNote(selectedNoteID);
112387                 } else {                           // selected 1..n entities
112388                     selected = context.selectedIDs()
112389                         .filter(function(e) { return context.hasEntity(e); });
112390                     if (selected.length) {
112391                         entity = context.entity(selected[0]);
112392                     }
112393                 }
112394
112395                 var singular = selected.length === 1 ? selected[0] : null;
112396
112397                 selection.html('');
112398
112399                 selection
112400                     .append('h4')
112401                     .attr('class', 'history-heading')
112402                     .text(singular || t('info_panels.history.selected', { n: selected.length }));
112403
112404                 if (!singular) { return; }
112405
112406                 if (entity) {
112407                     selection.call(redrawEntity, entity);
112408                 } else if (note) {
112409                     selection.call(redrawNote, note);
112410                 }
112411             }
112412
112413
112414             function redrawNote(selection, note) {
112415                 if (!note || note.isNew()) {
112416                     selection
112417                         .append('div')
112418                         .text(t('info_panels.history.note_no_history'));
112419                     return;
112420                 }
112421
112422                 var list = selection
112423                     .append('ul');
112424
112425                 list
112426                     .append('li')
112427                     .text(t('info_panels.history.note_comments') + ':')
112428                     .append('span')
112429                     .text(note.comments.length);
112430
112431                 if (note.comments.length) {
112432                     list
112433                         .append('li')
112434                         .text(t('info_panels.history.note_created_date') + ':')
112435                         .append('span')
112436                         .text(displayTimestamp(note.comments[0].date));
112437
112438                     list
112439                         .append('li')
112440                         .text(t('info_panels.history.note_created_user') + ':')
112441                         .call(displayUser, note.comments[0].user);
112442                 }
112443
112444                 if (osm) {
112445                     selection
112446                         .append('a')
112447                         .attr('class', 'view-history-on-osm')
112448                         .attr('target', '_blank')
112449                         .attr('tabindex', -1)
112450                         .attr('href', osm.noteURL(note))
112451                         .call(svgIcon('#iD-icon-out-link', 'inline'))
112452                         .append('span')
112453                         .text(t('info_panels.history.note_link_text'));
112454                 }
112455             }
112456
112457
112458             function redrawEntity(selection, entity) {
112459                 if (!entity || entity.isNew()) {
112460                     selection
112461                         .append('div')
112462                         .text(t('info_panels.history.no_history'));
112463                     return;
112464                 }
112465
112466                 var links = selection
112467                     .append('div')
112468                     .attr('class', 'links');
112469
112470                 if (osm) {
112471                     links
112472                         .append('a')
112473                         .attr('class', 'view-history-on-osm')
112474                         .attr('href', osm.historyURL(entity))
112475                         .attr('target', '_blank')
112476                         .attr('tabindex', -1)
112477                         .attr('title', t('info_panels.history.link_text'))
112478                         .text('OSM');
112479                 }
112480                 links
112481                     .append('a')
112482                     .attr('class', 'pewu-history-viewer-link')
112483                     .attr('href', 'https://pewu.github.io/osm-history/#/' + entity.type + '/' + entity.osmId())
112484                     .attr('target', '_blank')
112485                     .attr('tabindex', -1)
112486                     .text('PeWu');
112487
112488                 var list = selection
112489                     .append('ul');
112490
112491                 list
112492                     .append('li')
112493                     .text(t('info_panels.history.version') + ':')
112494                     .append('span')
112495                     .text(entity.version);
112496
112497                 list
112498                     .append('li')
112499                     .text(t('info_panels.history.last_edit') + ':')
112500                     .append('span')
112501                     .text(displayTimestamp(entity.timestamp));
112502
112503                 list
112504                     .append('li')
112505                     .text(t('info_panels.history.edited_by') + ':')
112506                     .call(displayUser, entity.user);
112507
112508                 list
112509                     .append('li')
112510                     .text(t('info_panels.history.changeset') + ':')
112511                     .call(displayChangeset, entity.changeset);
112512             }
112513
112514
112515             var panel = function(selection) {
112516                 selection.call(redraw);
112517
112518                 context.map()
112519                     .on('drawn.info-history', function() {
112520                         selection.call(redraw);
112521                     });
112522
112523                 context
112524                     .on('enter.info-history', function() {
112525                         selection.call(redraw);
112526                     });
112527             };
112528
112529             panel.off = function() {
112530                 context.map().on('drawn.info-history', null);
112531                 context.on('enter.info-history', null);
112532             };
112533
112534             panel.id = 'history';
112535             panel.title = t('info_panels.history.title');
112536             panel.key = t('info_panels.history.key');
112537
112538
112539             return panel;
112540         }
112541
112542         var OSM_PRECISION = 7;
112543         var locale$2 = utilDetect().locale;
112544
112545         /**
112546          * Returns a localized representation of the given length measurement.
112547          *
112548          * @param {Number} m area in meters
112549          * @param {Boolean} isImperial true for U.S. customary units; false for metric
112550          */
112551         function displayLength(m, isImperial) {
112552             var d = m * (isImperial ? 3.28084 : 1);
112553             var unit;
112554
112555             if (isImperial) {
112556                 if (d >= 5280) {
112557                     d /= 5280;
112558                     unit = 'miles';
112559                 } else {
112560                     unit = 'feet';
112561                 }
112562             } else {
112563                 if (d >= 1000) {
112564                     d /= 1000;
112565                     unit = 'kilometers';
112566                 } else {
112567                     unit = 'meters';
112568                 }
112569             }
112570
112571             return t('units.' + unit, {
112572                 quantity: d.toLocaleString(locale$2, {
112573                     maximumSignificantDigits: 4
112574                 })
112575             });
112576         }
112577
112578         /**
112579          * Returns a localized representation of the given area measurement.
112580          *
112581          * @param {Number} m2 area in square meters
112582          * @param {Boolean} isImperial true for U.S. customary units; false for metric
112583          */
112584         function displayArea(m2, isImperial) {
112585             var d = m2 * (isImperial ? 10.7639111056 : 1);
112586             var d1, d2, area;
112587             var unit1 = '';
112588             var unit2 = '';
112589
112590             if (isImperial) {
112591                 if (d >= 6969600) { // > 0.25mi² show mi²
112592                     d1 = d / 27878400;
112593                     unit1 = 'square_miles';
112594                 } else {
112595                     d1 = d;
112596                     unit1 = 'square_feet';
112597                 }
112598
112599                 if (d > 4356 && d < 43560000) { // 0.1 - 1000 acres
112600                     d2 = d / 43560;
112601                     unit2 = 'acres';
112602                 }
112603
112604             } else {
112605                 if (d >= 250000) { // > 0.25km² show km²
112606                     d1 = d / 1000000;
112607                     unit1 = 'square_kilometers';
112608                 } else {
112609                     d1 = d;
112610                     unit1 = 'square_meters';
112611                 }
112612
112613                 if (d > 1000 && d < 10000000) { // 0.1 - 1000 hectares
112614                     d2 = d / 10000;
112615                     unit2 = 'hectares';
112616                 }
112617             }
112618
112619             area = t('units.' + unit1, {
112620                 quantity: d1.toLocaleString(locale$2, {
112621                     maximumSignificantDigits: 4
112622                 })
112623             });
112624
112625             if (d2) {
112626                 return t('units.area_pair', {
112627                     area1: area,
112628                     area2: t('units.' + unit2, {
112629                         quantity: d2.toLocaleString(locale$2, {
112630                             maximumSignificantDigits: 2
112631                         })
112632                     })
112633                 });
112634             } else {
112635                 return area;
112636             }
112637         }
112638
112639         function wrap(x, min, max) {
112640             var d = max - min;
112641             return ((x - min) % d + d) % d + min;
112642         }
112643
112644         function clamp$1(x, min, max) {
112645             return Math.max(min, Math.min(x, max));
112646         }
112647
112648         function displayCoordinate(deg, pos, neg) {
112649             var min = (Math.abs(deg) - Math.floor(Math.abs(deg))) * 60;
112650             var sec = (min - Math.floor(min)) * 60;
112651             var displayDegrees = t('units.arcdegrees', {
112652                 quantity: Math.floor(Math.abs(deg)).toLocaleString(locale$2)
112653             });
112654             var displayCoordinate;
112655
112656             if (Math.floor(sec) > 0) {
112657                 displayCoordinate = displayDegrees +
112658                     t('units.arcminutes', {
112659                         quantity: Math.floor(min).toLocaleString(locale$2)
112660                     }) +
112661                     t('units.arcseconds', {
112662                         quantity: Math.round(sec).toLocaleString(locale$2)
112663                     });
112664             } else if (Math.floor(min) > 0) {
112665                 displayCoordinate = displayDegrees +
112666                     t('units.arcminutes', {
112667                         quantity: Math.round(min).toLocaleString(locale$2)
112668                     });
112669             } else {
112670                 displayCoordinate = t('units.arcdegrees', {
112671                     quantity: Math.round(Math.abs(deg)).toLocaleString(locale$2)
112672                 });
112673             }
112674
112675             if (deg === 0) {
112676                 return displayCoordinate;
112677             } else {
112678                 return t('units.coordinate', {
112679                     coordinate: displayCoordinate,
112680                     direction: t('units.' + (deg > 0 ? pos : neg))
112681                 });
112682             }
112683         }
112684
112685         /**
112686          * Returns given coordinate pair in degree-minute-second format.
112687          *
112688          * @param {Array<Number>} coord longitude and latitude
112689          */
112690         function dmsCoordinatePair(coord) {
112691             return t('units.coordinate_pair', {
112692                 latitude: displayCoordinate(clamp$1(coord[1], -90, 90), 'north', 'south'),
112693                 longitude: displayCoordinate(wrap(coord[0], -180, 180), 'east', 'west')
112694             });
112695         }
112696
112697         /**
112698          * Returns the given coordinate pair in decimal format.
112699          * note: unlocalized to avoid comma ambiguity - see #4765
112700          *
112701          * @param {Array<Number>} coord longitude and latitude
112702          */
112703         function decimalCoordinatePair(coord) {
112704             return t('units.coordinate_pair', {
112705                 latitude: clamp$1(coord[1], -90, 90).toFixed(OSM_PRECISION),
112706                 longitude: wrap(coord[0], -180, 180).toFixed(OSM_PRECISION)
112707             });
112708         }
112709
112710         function uiPanelLocation(context) {
112711             var currLocation = '';
112712
112713
112714             function redraw(selection) {
112715                 selection.html('');
112716
112717                 var list = selection
112718                     .append('ul');
112719
112720                 // Mouse coordinates
112721                 var coord = context.map().mouseCoordinates();
112722                 if (coord.some(isNaN)) {
112723                     coord = context.map().center();
112724                 }
112725
112726                 list
112727                     .append('li')
112728                     .text(dmsCoordinatePair(coord))
112729                     .append('li')
112730                     .text(decimalCoordinatePair(coord));
112731
112732                 // Location Info
112733                 selection
112734                     .append('div')
112735                     .attr('class', 'location-info')
112736                     .text(currLocation || ' ');
112737
112738                 debouncedGetLocation(selection, coord);
112739             }
112740
112741
112742             var debouncedGetLocation = debounce(getLocation, 250);
112743             function getLocation(selection, coord) {
112744                 if (!services$1.geocoder) {
112745                     currLocation = t('info_panels.location.unknown_location');
112746                     selection.selectAll('.location-info')
112747                         .text(currLocation);
112748                 } else {
112749                     services$1.geocoder.reverse(coord, function(err, result) {
112750                         currLocation = result ? result.display_name : t('info_panels.location.unknown_location');
112751                         selection.selectAll('.location-info')
112752                             .text(currLocation);
112753                     });
112754                 }
112755             }
112756
112757
112758             var panel = function(selection) {
112759                 selection.call(redraw);
112760
112761                 context.surface()
112762                     .on('mousemove.info-location', function() {
112763                         selection.call(redraw);
112764                     });
112765             };
112766
112767             panel.off = function() {
112768                 context.surface()
112769                     .on('mousemove.info-location', null);
112770             };
112771
112772             panel.id = 'location';
112773             panel.title = t('info_panels.location.title');
112774             panel.key = t('info_panels.location.key');
112775
112776
112777             return panel;
112778         }
112779
112780         function uiPanelMeasurement(context) {
112781             var locale = utilDetect().locale;
112782             var isImperial = (locale.toLowerCase() === 'en-us');
112783
112784
112785             function radiansToMeters(r) {
112786                 // using WGS84 authalic radius (6371007.1809 m)
112787                 return r * 6371007.1809;
112788             }
112789
112790             function steradiansToSqmeters(r) {
112791                 // http://gis.stackexchange.com/a/124857/40446
112792                 return r / (4 * Math.PI) * 510065621724000;
112793             }
112794
112795
112796             function toLineString(feature) {
112797                 if (feature.type === 'LineString') { return feature; }
112798
112799                 var result = { type: 'LineString', coordinates: [] };
112800                 if (feature.type === 'Polygon') {
112801                     result.coordinates = feature.coordinates[0];
112802                 } else if (feature.type === 'MultiPolygon') {
112803                     result.coordinates = feature.coordinates[0][0];
112804                 }
112805
112806                 return result;
112807             }
112808
112809
112810             function nodeCount(feature) {
112811               if (feature.type === 'LineString') { return feature.coordinates.length; }
112812               if (feature.type === 'Polygon') { return feature.coordinates[0].length - 1; }
112813             }
112814
112815
112816             function redraw(selection) {
112817                 var resolver = context.graph();
112818                 var selectedNoteID = context.selectedNoteID();
112819                 var osm = services$1.osm;
112820
112821                 var selected, center, entity, note, geometry;
112822
112823                 if (selectedNoteID && osm) {       // selected 1 note
112824                     selected = [ t('note.note') + ' ' + selectedNoteID ];
112825                     note = osm.getNote(selectedNoteID);
112826                     center = note.loc;
112827                     geometry = 'note';
112828
112829                 } else {                           // selected 1..n entities
112830                     var extent = geoExtent();
112831                     selected = context.selectedIDs()
112832                         .filter(function(e) { return context.hasEntity(e); });
112833                     if (selected.length) {
112834                         for (var i = 0; i < selected.length; i++) {
112835                             entity = context.entity(selected[i]);
112836                             extent._extend(entity.extent(resolver));
112837                         }
112838                         center = extent.center();
112839                         geometry = entity.geometry(resolver);
112840                     }
112841                 }
112842
112843                 var singular = selected.length === 1 ? selected[0] : null;
112844
112845                 selection.html('');
112846
112847                 selection
112848                     .append('h4')
112849                     .attr('class', 'measurement-heading')
112850                     .text(singular || t('info_panels.measurement.selected', { n: selected.length.toLocaleString(locale) }));
112851
112852                 if (!selected.length) { return; }
112853
112854
112855                 var list = selection
112856                     .append('ul');
112857                 var coordItem;
112858
112859                 // multiple selected features, just display extent center..
112860                 if (!singular) {
112861                     coordItem = list
112862                         .append('li')
112863                         .text(t('info_panels.measurement.center') + ':');
112864                     coordItem.append('span')
112865                         .text(dmsCoordinatePair(center));
112866                     coordItem.append('span')
112867                         .text(decimalCoordinatePair(center));
112868                     return;
112869                 }
112870
112871                 // single selected feature, display details..
112872                 if (geometry === 'line' || geometry === 'area') {
112873                     var closed = (entity.type === 'relation') || (entity.isClosed() && !entity.isDegenerate());
112874                     var feature = entity.asGeoJSON(resolver);
112875                     var length = radiansToMeters(d3_geoLength(toLineString(feature)));
112876                     var lengthLabel = t('info_panels.measurement.' + (closed ? 'perimeter' : 'length'));
112877                     var centroid = d3_geoCentroid(feature);
112878
112879                     list
112880                         .append('li')
112881                         .text(t('info_panels.measurement.geometry') + ':')
112882                         .append('span')
112883                         .text(
112884                             closed ? t('info_panels.measurement.closed_' + geometry) : t('geometry.' + geometry)
112885                         );
112886
112887                     if (entity.type !== 'relation') {
112888                         list
112889                             .append('li')
112890                             .text(t('info_panels.measurement.node_count') + ':')
112891                             .append('span')
112892                             .text(nodeCount(feature).toLocaleString(locale));
112893                     }
112894
112895                     if (closed) {
112896                         var area = steradiansToSqmeters(entity.area(resolver));
112897                         list
112898                             .append('li')
112899                             .text(t('info_panels.measurement.area') + ':')
112900                             .append('span')
112901                             .text(displayArea(area, isImperial));
112902                     }
112903
112904
112905                     list
112906                         .append('li')
112907                         .text(lengthLabel + ':')
112908                         .append('span')
112909                         .text(displayLength(length, isImperial));
112910
112911                     coordItem = list
112912                         .append('li')
112913                         .text(t('info_panels.measurement.centroid') + ':');
112914                     coordItem.append('span')
112915                         .text(dmsCoordinatePair(centroid));
112916                     coordItem.append('span')
112917                         .text(decimalCoordinatePair(centroid));
112918
112919                     var toggle  = isImperial ? 'imperial' : 'metric';
112920
112921                     selection
112922                         .append('a')
112923                         .text(t('info_panels.measurement.' + toggle))
112924                         .attr('href', '#')
112925                         .attr('class', 'button button-toggle-units')
112926                         .on('click', function() {
112927                             event.preventDefault();
112928                             isImperial = !isImperial;
112929                             selection.call(redraw);
112930                         });
112931
112932                 } else {
112933                     var centerLabel = t('info_panels.measurement.' +
112934                         (note || entity.type === 'node' ? 'location' : 'center'));
112935
112936                     list
112937                         .append('li')
112938                         .text(t('info_panels.measurement.geometry') + ':')
112939                         .append('span')
112940                         .text(t('geometry.' + geometry));
112941
112942                     coordItem = list
112943                         .append('li')
112944                         .text(centerLabel + ':');
112945                     coordItem.append('span')
112946                         .text(dmsCoordinatePair(center));
112947                     coordItem.append('span')
112948                         .text(decimalCoordinatePair(center));
112949                 }
112950             }
112951
112952
112953             var panel = function(selection) {
112954                 selection.call(redraw);
112955
112956                 context.map()
112957                     .on('drawn.info-measurement', function() {
112958                         selection.call(redraw);
112959                     });
112960
112961                 context
112962                     .on('enter.info-measurement', function() {
112963                         selection.call(redraw);
112964                     });
112965             };
112966
112967             panel.off = function() {
112968                 context.map().on('drawn.info-measurement', null);
112969                 context.on('enter.info-measurement', null);
112970             };
112971
112972             panel.id = 'measurement';
112973             panel.title = t('info_panels.measurement.title');
112974             panel.key = t('info_panels.measurement.key');
112975
112976
112977             return panel;
112978         }
112979
112980         var uiInfoPanels = {
112981             background: uiPanelBackground,
112982             history: uiPanelHistory,
112983             location: uiPanelLocation,
112984             measurement: uiPanelMeasurement,
112985         };
112986
112987         function uiInfo(context) {
112988             var ids = Object.keys(uiInfoPanels);
112989             var wasActive = ['measurement'];
112990             var panels = {};
112991             var active = {};
112992
112993             // create panels
112994             ids.forEach(function(k) {
112995                 if (!panels[k]) {
112996                     panels[k] = uiInfoPanels[k](context);
112997                     active[k] = false;
112998                 }
112999             });
113000
113001
113002             function info(selection) {
113003
113004                 function redraw() {
113005                     var activeids = ids.filter(function(k) { return active[k]; }).sort();
113006
113007                     var containers = infoPanels.selectAll('.panel-container')
113008                         .data(activeids, function(k) { return k; });
113009
113010                     containers.exit()
113011                         .style('opacity', 1)
113012                         .transition()
113013                         .duration(200)
113014                         .style('opacity', 0)
113015                         .on('end', function(d) {
113016                             d3_select(this)
113017                                 .call(panels[d].off)
113018                                 .remove();
113019                         });
113020
113021                     var enter = containers.enter()
113022                         .append('div')
113023                         .attr('class', function(d) { return 'fillD2 panel-container panel-container-' + d; });
113024
113025                     enter
113026                         .style('opacity', 0)
113027                         .transition()
113028                         .duration(200)
113029                         .style('opacity', 1);
113030
113031                     var title = enter
113032                         .append('div')
113033                         .attr('class', 'panel-title fillD2');
113034
113035                     title
113036                         .append('h3')
113037                         .text(function(d) { return panels[d].title; });
113038
113039                     title
113040                         .append('button')
113041                         .attr('class', 'close')
113042                         .on('click', function (d) { info.toggle(d); })
113043                         .call(svgIcon('#iD-icon-close'));
113044
113045                     enter
113046                         .append('div')
113047                         .attr('class', function(d) { return 'panel-content panel-content-' + d; });
113048
113049
113050                     // redraw the panels
113051                     infoPanels.selectAll('.panel-content')
113052                         .each(function(d) {
113053                             d3_select(this).call(panels[d]);
113054                         });
113055                 }
113056
113057
113058                 info.toggle = function(which) {
113059                     if (event) {
113060                         event.stopImmediatePropagation();
113061                         event.preventDefault();
113062                     }
113063
113064                     var activeids = ids.filter(function(k) { return active[k]; });
113065
113066                     if (which) {  // toggle one
113067                         active[which] = !active[which];
113068                         if (activeids.length === 1 && activeids[0] === which) {  // none active anymore
113069                             wasActive = [which];
113070                         }
113071
113072                         d3_select('.' + which + '-panel-toggle-item')
113073                             .classed('active', active[which])
113074                             .select('input')
113075                             .property('checked', active[which]);
113076
113077                     } else {      // toggle all
113078                         if (activeids.length) {
113079                             wasActive = activeids;
113080                             activeids.forEach(function(k) { active[k] = false; });
113081                         } else {
113082                             wasActive.forEach(function(k) { active[k] = true; });
113083                         }
113084                     }
113085
113086                     redraw();
113087                 };
113088
113089
113090                 var infoPanels = selection.selectAll('.info-panels')
113091                     .data([0]);
113092
113093                 infoPanels = infoPanels.enter()
113094                     .append('div')
113095                     .attr('class', 'info-panels')
113096                     .merge(infoPanels);
113097
113098                 redraw();
113099
113100                 context.keybinding()
113101                     .on(uiCmd('⌘' + t('info_panels.key')), info.toggle);
113102
113103                 ids.forEach(function(k) {
113104                     var key = t('info_panels.' + k + '.key', { default: null });
113105                     if (!key) { return; }
113106                     context.keybinding()
113107                         .on(uiCmd('⌘⇧' + key), function() { info.toggle(k); });
113108                 });
113109             }
113110
113111             return info;
113112         }
113113
113114         function uiIssues(context) {
113115             var key = t('issues.key');
113116
113117             var MINSQUARE = 0;
113118             var MAXSQUARE = 20;
113119             var DEFAULTSQUARE = 5;  // see also unsquare_way.js
113120
113121             var _errorsSelection = d3_select(null);
113122             var _warningsSelection = d3_select(null);
113123             var _rulesList = d3_select(null);
113124             var _pane = d3_select(null);
113125             var _toggleButton = d3_select(null);
113126
113127             var _errors = [];
113128             var _warnings = [];
113129             var _options = {
113130                 what: context.storage('validate-what') || 'edited',    // 'all', 'edited'
113131                 where: context.storage('validate-where') || 'all'  // 'all', 'visible'
113132             };
113133
113134             // listeners
113135             context.validator().on('validated.uiIssues',
113136                 function() { window.requestIdleCallback(update); }
113137             );
113138             context.map().on('move.uiIssues',
113139                 debounce(function() { window.requestIdleCallback(update); }, 1000)
113140             );
113141
113142
113143             function addNotificationBadge(selection) {
113144                 var d = 10;
113145                 selection.selectAll('svg.notification-badge')
113146                     .data([0])
113147                     .enter()
113148                     .append('svg')
113149                     .attr('viewbox', '0 0 ' + d + ' ' + d)
113150                     .attr('class', 'notification-badge hide')
113151                     .append('circle')
113152                     .attr('cx', d / 2)
113153                     .attr('cy', d / 2)
113154                     .attr('r', (d / 2) - 1)
113155                     .attr('fill', 'currentColor');
113156             }
113157
113158
113159             function renderErrorsList(selection) {
113160                 _errorsSelection = selection
113161                     .call(drawIssuesList, 'errors', _errors);
113162             }
113163
113164
113165             function renderWarningsList(selection) {
113166                 _warningsSelection = selection
113167                     .call(drawIssuesList, 'warnings', _warnings);
113168             }
113169
113170
113171             function drawIssuesList(selection, which, issues) {
113172                 var list = selection.selectAll('.issues-list')
113173                     .data([0]);
113174
113175                 list = list.enter()
113176                     .append('ul')
113177                     .attr('class', 'layer-list issues-list ' + which + '-list')
113178                     .merge(list);
113179
113180
113181                 var items = list.selectAll('li')
113182                     .data(issues, function(d) { return d.id; });
113183
113184                 // Exit
113185                 items.exit()
113186                     .remove();
113187
113188                 // Enter
113189                 var itemsEnter = items.enter()
113190                     .append('li')
113191                     .attr('class', function (d) { return 'issue severity-' + d.severity; })
113192                     .on('click', function(d) {
113193                         context.validator().focusIssue(d);
113194                     })
113195                     .on('mouseover', function(d) {
113196                         utilHighlightEntities(d.entityIds, true, context);
113197                     })
113198                     .on('mouseout', function(d) {
113199                         utilHighlightEntities(d.entityIds, false, context);
113200                     });
113201
113202
113203                 var labelsEnter = itemsEnter
113204                     .append('div')
113205                     .attr('class', 'issue-label');
113206
113207                 var textEnter = labelsEnter
113208                     .append('span')
113209                     .attr('class', 'issue-text');
113210
113211                 textEnter
113212                     .append('span')
113213                     .attr('class', 'issue-icon')
113214                     .each(function(d) {
113215                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
113216                         d3_select(this)
113217                             .call(svgIcon(iconName));
113218                     });
113219
113220                 textEnter
113221                     .append('span')
113222                     .attr('class', 'issue-message');
113223
113224                 /*
113225                 labelsEnter
113226                     .append('span')
113227                     .attr('class', 'issue-autofix')
113228                     .each(function(d) {
113229                         if (!d.autoFix) return;
113230
113231                         d3_select(this)
113232                             .append('button')
113233                             .attr('title', t('issues.fix_one.title'))
113234                             .datum(d.autoFix)  // set button datum to the autofix
113235                             .attr('class', 'autofix action')
113236                             .on('click', function(d) {
113237                                 d3_event.preventDefault();
113238                                 d3_event.stopPropagation();
113239
113240                                 var issuesEntityIDs = d.issue.entityIds;
113241                                 utilHighlightEntities(issuesEntityIDs.concat(d.entityIds), false, context);
113242
113243                                 context.perform.apply(context, d.autoArgs);
113244                                 context.validator().validate();
113245                             })
113246                             .call(svgIcon('#iD-icon-wrench'));
113247                     });
113248                 */
113249
113250                 // Update
113251                 items = items
113252                     .merge(itemsEnter)
113253                     .order();
113254
113255                 items.selectAll('.issue-message')
113256                     .text(function(d) {
113257                         return d.message(context);
113258                     });
113259
113260                 /*
113261                 // autofix
113262                 var canAutoFix = issues.filter(function(issue) { return issue.autoFix; });
113263
113264                 var autoFixAll = selection.selectAll('.autofix-all')
113265                     .data(canAutoFix.length ? [0] : []);
113266
113267                 // exit
113268                 autoFixAll.exit()
113269                     .remove();
113270
113271                 // enter
113272                 var autoFixAllEnter = autoFixAll.enter()
113273                     .insert('div', '.issues-list')
113274                     .attr('class', 'autofix-all');
113275
113276                 var linkEnter = autoFixAllEnter
113277                     .append('a')
113278                     .attr('class', 'autofix-all-link')
113279                     .attr('href', '#');
113280
113281                 linkEnter
113282                     .append('span')
113283                     .attr('class', 'autofix-all-link-text')
113284                     .text(t('issues.fix_all.title'));
113285
113286                 linkEnter
113287                     .append('span')
113288                     .attr('class', 'autofix-all-link-icon')
113289                     .call(svgIcon('#iD-icon-wrench'));
113290
113291                 if (which === 'warnings') {
113292                     renderIgnoredIssuesReset(selection);
113293                 }
113294
113295                 // update
113296                 autoFixAll = autoFixAll
113297                     .merge(autoFixAllEnter);
113298
113299                 autoFixAll.selectAll('.autofix-all-link')
113300                     .on('click', function() {
113301                         context.pauseChangeDispatch();
113302                         context.perform(actionNoop());
113303                         canAutoFix.forEach(function(issue) {
113304                             var args = issue.autoFix.autoArgs.slice();  // copy
113305                             if (typeof args[args.length - 1] !== 'function') {
113306                                 args.pop();
113307                             }
113308                             args.push(t('issues.fix_all.annotation'));
113309                             context.replace.apply(context, args);
113310                         });
113311                         context.resumeChangeDispatch();
113312                         context.validator().validate();
113313                     });
113314                 */
113315             }
113316
113317
113318             function updateOptionValue(d, val) {
113319                 if (!val && event && event.target) {
113320                     val = event.target.value;
113321                 }
113322
113323                 _options[d] = val;
113324                 context.storage('validate-' + d, val);
113325                 context.validator().validate();
113326             }
113327
113328
113329             function renderIssuesOptions(selection) {
113330                 var container = selection.selectAll('.issues-options-container')
113331                     .data([0]);
113332
113333                 container = container.enter()
113334                     .append('div')
113335                     .attr('class', 'issues-options-container')
113336                     .merge(container);
113337
113338                 var data = [
113339                     { key: 'what', values: ['edited', 'all'] },
113340                     { key: 'where', values: ['visible', 'all'] }
113341                 ];
113342
113343                 var options = container.selectAll('.issues-option')
113344                     .data(data, function(d) { return d.key; });
113345
113346                 var optionsEnter = options.enter()
113347                     .append('div')
113348                     .attr('class', function(d) { return 'issues-option issues-option-' + d.key; });
113349
113350                 optionsEnter
113351                     .append('div')
113352                     .attr('class', 'issues-option-title')
113353                     .text(function(d) { return t('issues.options.' + d.key + '.title'); });
113354
113355                 var valuesEnter = optionsEnter.selectAll('label')
113356                     .data(function(d) {
113357                         return d.values.map(function(val) { return { value: val, key: d.key }; });
113358                     })
113359                     .enter()
113360                     .append('label');
113361
113362                 valuesEnter
113363                     .append('input')
113364                     .attr('type', 'radio')
113365                     .attr('name', function(d) { return 'issues-option-' + d.key; })
113366                     .attr('value', function(d) { return d.value; })
113367                     .property('checked', function(d) { return _options[d.key] === d.value; })
113368                     .on('change', function(d) { updateOptionValue(d.key, d.value); });
113369
113370                 valuesEnter
113371                     .append('span')
113372                     .text(function(d) { return t('issues.options.' + d.key + '.' + d.value); });
113373             }
113374
113375
113376             function renderNoIssuesBox(selection) {
113377
113378                 var box = selection.append('div')
113379                     .attr('class', 'box');
113380
113381                 box
113382                     .append('div')
113383                     .call(svgIcon('#iD-icon-apply', 'pre-text'));
113384
113385                 var noIssuesMessage = box
113386                     .append('span');
113387
113388                 noIssuesMessage
113389                     .append('strong')
113390                     .attr('class', 'message');
113391
113392                 noIssuesMessage
113393                     .append('br');
113394
113395                 noIssuesMessage
113396                     .append('span')
113397                     .attr('class', 'details');
113398             }
113399
113400             function renderIgnoredIssuesReset(selection) {
113401
113402                 var ignoredIssues = context.validator()
113403                     .getIssues({ what: 'all', where: 'all', includeDisabledRules: true, includeIgnored: 'only' });
113404
113405                 var resetIgnored = selection.selectAll('.reset-ignored')
113406                     .data(ignoredIssues.length ? [0] : []);
113407
113408                 // exit
113409                 resetIgnored.exit()
113410                     .remove();
113411
113412                 // enter
113413                 var resetIgnoredEnter = resetIgnored.enter()
113414                     .append('div')
113415                     .attr('class', 'reset-ignored section-footer');
113416
113417                 resetIgnoredEnter
113418                     .append('a')
113419                     .attr('href', '#');
113420
113421                 // update
113422                 resetIgnored = resetIgnored
113423                     .merge(resetIgnoredEnter);
113424
113425                 resetIgnored.select('a')
113426                     .text(t('issues.reset_ignored', { count: ignoredIssues.length.toString() }));
113427
113428                 resetIgnored.on('click', function() {
113429                     context.validator().resetIgnoredIssues();
113430                 });
113431             }
113432
113433
113434             function renderRulesList(selection) {
113435                 var container = selection.selectAll('.issues-rulelist-container')
113436                     .data([0]);
113437
113438                 var containerEnter = container.enter()
113439                     .append('div')
113440                     .attr('class', 'issues-rulelist-container');
113441
113442                 containerEnter
113443                     .append('ul')
113444                     .attr('class', 'layer-list issue-rules-list');
113445
113446                 var ruleLinks = containerEnter
113447                     .append('div')
113448                     .attr('class', 'issue-rules-links section-footer');
113449
113450                 ruleLinks
113451                     .append('a')
113452                     .attr('class', 'issue-rules-link')
113453                     .attr('href', '#')
113454                     .text(t('issues.enable_all'))
113455                     .on('click', function() {
113456                         context.validator().disableRules([]);
113457                     });
113458
113459                 ruleLinks
113460                     .append('a')
113461                     .attr('class', 'issue-rules-link')
113462                     .attr('href', '#')
113463                     .text(t('issues.disable_all'))
113464                     .on('click', function() {
113465                         var keys = context.validator().getRuleKeys();
113466                         context.validator().disableRules(keys);
113467                     });
113468
113469
113470                 // Update
113471                 container = container
113472                     .merge(containerEnter);
113473
113474                 _rulesList = container.selectAll('.issue-rules-list');
113475
113476                 updateRulesList();
113477             }
113478
113479
113480             function updateRulesList() {
113481                 var ruleKeys = context.validator().getRuleKeys();
113482                 _rulesList
113483                     .call(drawListItems, ruleKeys, 'checkbox', 'rule', toggleRule, isRuleEnabled);
113484             }
113485
113486
113487             function isRuleEnabled(d) {
113488                 return context.validator().isRuleEnabled(d);
113489             }
113490
113491
113492             function toggleRule(d) {
113493                 context.validator().toggleRule(d);
113494             }
113495
113496             function setNoIssuesText() {
113497
113498                 function checkForHiddenIssues(cases) {
113499                     for (var type in cases) {
113500                         var opts = cases[type];
113501                         var hiddenIssues = context.validator().getIssues(opts);
113502                         if (hiddenIssues.length) {
113503                             _pane.select('.issues-none .details')
113504                                 .text(t(
113505                                     'issues.no_issues.hidden_issues.' + type,
113506                                     { count: hiddenIssues.length.toString() }
113507                                 ));
113508                             return;
113509                         }
113510                     }
113511                     _pane.select('.issues-none .details')
113512                         .text(t('issues.no_issues.hidden_issues.none'));
113513                 }
113514
113515                 var messageType;
113516
113517                 if (_options.what === 'edited' && _options.where === 'visible') {
113518
113519                     messageType = 'edits_in_view';
113520
113521                     checkForHiddenIssues({
113522                         elsewhere: { what: 'edited', where: 'all' },
113523                         everything_else: { what: 'all', where: 'visible' },
113524                         disabled_rules: { what: 'edited', where: 'visible', includeDisabledRules: 'only' },
113525                         everything_else_elsewhere: { what: 'all', where: 'all' },
113526                         disabled_rules_elsewhere: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
113527                         ignored_issues: { what: 'edited', where: 'visible', includeIgnored: 'only' },
113528                         ignored_issues_elsewhere: { what: 'edited', where: 'all', includeIgnored: 'only' }
113529                     });
113530
113531                 } else if (_options.what === 'edited' && _options.where === 'all') {
113532
113533                     messageType = 'edits';
113534
113535                     checkForHiddenIssues({
113536                         everything_else: { what: 'all', where: 'all' },
113537                         disabled_rules: { what: 'edited', where: 'all', includeDisabledRules: 'only' },
113538                         ignored_issues: { what: 'edited', where: 'all', includeIgnored: 'only' }
113539                     });
113540
113541                 } else if (_options.what === 'all' && _options.where === 'visible') {
113542
113543                     messageType = 'everything_in_view';
113544
113545                     checkForHiddenIssues({
113546                         elsewhere: { what: 'all', where: 'all' },
113547                         disabled_rules: { what: 'all', where: 'visible', includeDisabledRules: 'only' },
113548                         disabled_rules_elsewhere: { what: 'all', where: 'all', includeDisabledRules: 'only' },
113549                         ignored_issues: { what: 'all', where: 'visible', includeIgnored: 'only' },
113550                         ignored_issues_elsewhere: { what: 'all', where: 'all', includeIgnored: 'only' }
113551                     });
113552                 } else if (_options.what === 'all' && _options.where === 'all') {
113553
113554                     messageType = 'everything';
113555
113556                     checkForHiddenIssues({
113557                         disabled_rules: { what: 'all', where: 'all', includeDisabledRules: 'only' },
113558                         ignored_issues: { what: 'all', where: 'all', includeIgnored: 'only' }
113559                     });
113560                 }
113561
113562                 if (_options.what === 'edited' && context.history().difference().summary().length === 0) {
113563                     messageType = 'no_edits';
113564                 }
113565
113566                 _pane.select('.issues-none .message')
113567                     .text(t('issues.no_issues.message.' + messageType));
113568
113569             }
113570
113571
113572             function update() {
113573                 var issuesBySeverity = context.validator().getIssuesBySeverity(_options);
113574
113575                 // sort issues by distance away from the center of the map
113576                 var center = context.map().center();
113577                 var graph = context.graph();
113578                 _errors = issuesBySeverity.error.map(withDistance).sort(byDistance);
113579                 _warnings = issuesBySeverity.warning.map(withDistance).sort(byDistance);
113580
113581                 // cut off at 1000
113582                 var errorCount = _errors.length > 1000 ? '1000+' : String(_errors.length);
113583                 var warningCount = _warnings.length > 1000 ? '1000+' : String(_warnings.length);
113584                 _errors = _errors.slice(0, 1000);
113585                 _warnings = _warnings.slice(0, 1000);
113586
113587
113588                 _toggleButton.selectAll('.notification-badge')
113589                     .classed('error', (_errors.length > 0))
113590                     .classed('warning', (_errors.length === 0 && _warnings.length > 0))
113591                     .classed('hide', (_errors.length === 0 && _warnings.length === 0));
113592
113593
113594                 _pane.selectAll('.issues-errors')
113595                     .classed('hide', _errors.length === 0);
113596
113597                 if (_errors.length > 0) {
113598                     _pane.selectAll('.hide-toggle-issues_errors .hide-toggle-text')
113599                         .text(t('issues.errors.list_title', { count: errorCount }));
113600                     if (!_pane.select('.disclosure-wrap-issues_errors').classed('hide')) {
113601                         _errorsSelection
113602                             .call(drawIssuesList, 'errors', _errors);
113603                     }
113604                 }
113605
113606                 _pane.selectAll('.issues-warnings')
113607                     .classed('hide', _warnings.length === 0);
113608
113609                 if (_warnings.length > 0) {
113610                     _pane.selectAll('.hide-toggle-issues_warnings .hide-toggle-text')
113611                         .text(t('issues.warnings.list_title', { count: warningCount }));
113612                     if (!_pane.select('.disclosure-wrap-issues_warnings').classed('hide')) {
113613                         _warningsSelection
113614                             .call(drawIssuesList, 'warnings', _warnings);
113615                         renderIgnoredIssuesReset(_warningsSelection);
113616                     }
113617                 }
113618
113619                 var hasIssues = _warnings.length > 0 || _errors.length > 0;
113620
113621                 var issuesNone = _pane.select('.issues-none');
113622                 issuesNone.classed('hide', hasIssues);
113623                 if (!hasIssues) {
113624                     renderIgnoredIssuesReset(issuesNone);
113625                     setNoIssuesText();
113626                 }
113627
113628                 if (!_pane.select('.disclosure-wrap-issues_rules').classed('hide')) {
113629                     updateRulesList();
113630                 }
113631
113632
113633                 function byDistance(a, b) {
113634                     return a.dist - b.dist;
113635                 }
113636
113637                 function withDistance(issue) {
113638                     var extent = issue.extent(graph);
113639                     var dist = extent ? geoSphericalDistance(center, extent.center()) : 0;
113640                     return Object.assign(issue, { dist: dist });
113641                 }
113642             }
113643
113644
113645             function drawListItems(selection, data, type, name, change, active) {
113646                 var items = selection.selectAll('li')
113647                     .data(data);
113648
113649                 // Exit
113650                 items.exit()
113651                     .remove();
113652
113653                 // Enter
113654                 var enter = items.enter()
113655                     .append('li');
113656
113657                 if (name === 'rule') {
113658                     enter
113659                         .call(tooltip()
113660                             .title(function(d) { return t('issues.' + d + '.tip'); })
113661                             .placement('top')
113662                         );
113663                 }
113664
113665                 var label = enter
113666                     .append('label');
113667
113668                 label
113669                     .append('input')
113670                     .attr('type', type)
113671                     .attr('name', name)
113672                     .on('change', change);
113673
113674                 label
113675                     .append('span')
113676                     .html(function(d) {
113677                         var params = {};
113678                         if (d === 'unsquare_way') {
113679                             params.val = '<span class="square-degrees"></span>';
113680                         }
113681                         return t('issues.' + d + '.title', params);
113682                     });
113683
113684                 // Update
113685                 items = items
113686                     .merge(enter);
113687
113688                 items
113689                     .classed('active', active)
113690                     .selectAll('input')
113691                     .property('checked', active)
113692                     .property('indeterminate', false);
113693
113694
113695                 // user-configurable square threshold
113696                 var degStr = context.storage('validate-square-degrees');
113697                 if (degStr === null) {
113698                     degStr = '' + DEFAULTSQUARE;
113699                 }
113700
113701                 var span = items.selectAll('.square-degrees');
113702                 var input = span.selectAll('.square-degrees-input')
113703                     .data([0]);
113704
113705                 // enter / update
113706                 input.enter()
113707                     .append('input')
113708                     .attr('type', 'number')
113709                     .attr('min', '' + MINSQUARE)
113710                     .attr('max', '' + MAXSQUARE)
113711                     .attr('step', '0.5')
113712                     .attr('class', 'square-degrees-input')
113713                     .call(utilNoAuto)
113714                     .on('click', function () {
113715                         event.preventDefault();
113716                         event.stopPropagation();
113717                         this.select();
113718                     })
113719                     .on('keyup', function () {
113720                         if (event.keyCode === 13) { // enter
113721                             this.blur();
113722                             this.select();
113723                         }
113724                     })
113725                     .on('blur', changeSquare)
113726                     .merge(input)
113727                     .property('value', degStr);
113728             }
113729
113730
113731             function changeSquare() {
113732                 var input = d3_select(this);
113733                 var degStr = utilGetSetValue(input).trim();
113734                 var degNum = parseFloat(degStr, 10);
113735
113736                 if (!isFinite(degNum)) {
113737                     degNum = DEFAULTSQUARE;
113738                 } else if (degNum > MAXSQUARE) {
113739                     degNum = MAXSQUARE;
113740                 } else if (degNum < MINSQUARE) {
113741                     degNum = MINSQUARE;
113742                 }
113743
113744                 degNum = Math.round(degNum * 10 ) / 10;   // round to 1 decimal
113745                 degStr = '' + degNum;
113746
113747                 input
113748                     .property('value', degStr);
113749
113750                 context.storage('validate-square-degrees', degStr);
113751                 context.validator().reloadUnsquareIssues();
113752             }
113753
113754
113755             function hidePane() {
113756                 context.ui().togglePanes();
113757             }
113758
113759
113760
113761             var paneTooltip = tooltip()
113762                 .placement((textDirection === 'rtl') ? 'right' : 'left')
113763                 .html(true)
113764                 .title(uiTooltipHtml(t('issues.title'), key));
113765
113766
113767
113768             uiIssues.togglePane = function() {
113769                 if (event) { event.preventDefault(); }
113770                 paneTooltip.hide();
113771                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
113772             };
113773
113774
113775             uiIssues.renderToggleButton = function(selection) {
113776                 _toggleButton = selection
113777                     .append('button')
113778                     .on('click', uiIssues.togglePane)
113779                     .call(svgIcon('#iD-icon-alert', 'light'))
113780                     .call(addNotificationBadge)
113781                     .call(paneTooltip);
113782             };
113783
113784
113785             uiIssues.renderPane = function(selection) {
113786                 _pane = selection
113787                     .append('div')
113788                     .attr('class', 'fillL map-pane issues-pane hide')
113789                     .attr('pane', 'map-issues');
113790
113791                 var heading = _pane
113792                     .append('div')
113793                     .attr('class', 'pane-heading');
113794
113795                 heading
113796                     .append('h2')
113797                     .text(t('issues.title'));
113798
113799                 heading
113800                     .append('button')
113801                     .on('click', hidePane)
113802                     .call(svgIcon('#iD-icon-close'));
113803
113804                 var content = _pane
113805                     .append('div')
113806                     .attr('class', 'pane-content');
113807
113808                 content
113809                     .append('div')
113810                     .attr('class', 'issues-options')
113811                     .call(renderIssuesOptions);
113812
113813                 content
113814                     .append('div')
113815                     .attr('class', 'issues-none')
113816                     .call(renderNoIssuesBox);
113817
113818                 // errors
113819                 content
113820                     .append('div')
113821                     .attr('class', 'issues-errors')
113822                     .call(uiDisclosure(context, 'issues_errors', true)
113823                         .content(renderErrorsList)
113824                     );
113825
113826                 // warnings
113827                 content
113828                     .append('div')
113829                     .attr('class', 'issues-warnings')
113830                     .call(uiDisclosure(context, 'issues_warnings', true)
113831                         .content(renderWarningsList)
113832                     );
113833
113834                 // rules
113835                 content
113836                     .append('div')
113837                     .attr('class', 'issues-rules')
113838                     .call(uiDisclosure(context, 'issues_rules', false)
113839                         .title(t('issues.rules.title'))
113840                         .content(renderRulesList)
113841                     );
113842
113843                 // update();
113844
113845                 context.keybinding()
113846                     .on(key, uiIssues.togglePane);
113847             };
113848
113849             return uiIssues;
113850         }
113851
113852         function uiIssuesInfo(context) {
113853
113854             var warningsItem = {
113855                 id: 'warnings',
113856                 count: 0,
113857                 iconID: 'iD-icon-alert',
113858                 descriptionID: 'issues.warnings_and_errors'
113859             };
113860
113861             var resolvedItem = {
113862                 id: 'resolved',
113863                 count: 0,
113864                 iconID: 'iD-icon-apply',
113865                 descriptionID: 'issues.user_resolved_issues'
113866             };
113867
113868             function update(selection) {
113869
113870                 var shownItems = [];
113871
113872                 if (context.storage('validate-what') === 'all') {
113873
113874                     var liveIssues = context.validator().getIssues({
113875                         what: context.storage('validate-what') || 'edited',
113876                         where: context.storage('validate-where') || 'all'
113877                     });
113878                     if (liveIssues.length) {
113879                         warningsItem.count = liveIssues.length;
113880                         shownItems.push(warningsItem);
113881                     }
113882
113883                     var resolvedIssues = context.validator().getResolvedIssues();
113884                     if (resolvedIssues.length) {
113885                         resolvedItem.count = resolvedIssues.length;
113886                         shownItems.push(resolvedItem);
113887                     }
113888                 }
113889
113890                 var chips = selection.selectAll('.chip')
113891                     .data(shownItems, function(d) {
113892                         return d.id;
113893                     });
113894
113895                 chips.exit().remove();
113896
113897                 var enter = chips.enter()
113898                     .append('a')
113899                     .attr('class', function(d) {
113900                         return 'chip ' + d.id + '-count';
113901                     })
113902                     .attr('href', '#')
113903                     .attr('tabindex', -1)
113904                     .each(function(d) {
113905
113906                         var chipSelection = d3_select(this);
113907
113908                         var tooltipBehavior = tooltip()
113909                             .placement('top')
113910                             .title(t(d.descriptionID));
113911
113912                         chipSelection
113913                             .call(tooltipBehavior)
113914                             .on('click', function() {
113915                                 event.preventDefault();
113916
113917                                 tooltipBehavior.hide(d3_select(this));
113918                                 // open the Issues pane
113919                                 context.ui().togglePanes(d3_select('.map-panes .issues-pane'));
113920                             });
113921
113922                         chipSelection.call(svgIcon('#' + d.iconID));
113923
113924                     });
113925
113926                 enter.append('span')
113927                     .attr('class', 'count');
113928
113929                 enter.merge(chips)
113930                     .selectAll('span.count')
113931                     .text(function(d) {
113932                         return d.count.toString();
113933                     });
113934             }
113935
113936
113937             return function(selection) {
113938                 update(selection);
113939
113940                 context.validator().on('validated.infobox', function() {
113941                     update(selection);
113942                 });
113943             };
113944         }
113945
113946         function uiSettingsCustomData(context) {
113947             var dispatch$1 = dispatch('change');
113948
113949             function render(selection) {
113950                 var dataLayer = context.layers().layer('data');
113951
113952                 // keep separate copies of original and current settings
113953                 var _origSettings = {
113954                     fileList: (dataLayer && dataLayer.fileList()) || null,
113955                     url: context.storage('settings-custom-data-url')
113956                 };
113957                 var _currSettings = {
113958                     fileList: (dataLayer && dataLayer.fileList()) || null,
113959                     url: context.storage('settings-custom-data-url')
113960                 };
113961
113962                 // var example = 'https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png';
113963                 var modal = uiConfirm(selection).okButton();
113964
113965                 modal
113966                     .classed('settings-modal settings-custom-data', true);
113967
113968                 modal.select('.modal-section.header')
113969                     .append('h3')
113970                     .text(t('settings.custom_data.header'));
113971
113972
113973                 var textSection = modal.select('.modal-section.message-text');
113974
113975                 textSection
113976                     .append('pre')
113977                     .attr('class', 'instructions-file')
113978                     .text(t('settings.custom_data.file.instructions'));
113979
113980                 textSection
113981                     .append('input')
113982                     .attr('class', 'field-file')
113983                     .attr('type', 'file')
113984                     .property('files', _currSettings.fileList)  // works for all except IE11
113985                     .on('change', function() {
113986                         var files = event.target.files;
113987                         if (files && files.length) {
113988                             _currSettings.url = '';
113989                             textSection.select('.field-url').property('value', '');
113990                             _currSettings.fileList = files;
113991                         } else {
113992                             _currSettings.fileList = null;
113993                         }
113994                     });
113995
113996                 textSection
113997                     .append('h4')
113998                     .text(t('settings.custom_data.or'));
113999
114000                 textSection
114001                     .append('pre')
114002                     .attr('class', 'instructions-url')
114003                     .text(t('settings.custom_data.url.instructions'));
114004
114005                 textSection
114006                     .append('textarea')
114007                     .attr('class', 'field-url')
114008                     .attr('placeholder', t('settings.custom_data.url.placeholder'))
114009                     .call(utilNoAuto)
114010                     .property('value', _currSettings.url);
114011
114012
114013                 // insert a cancel button
114014                 var buttonSection = modal.select('.modal-section.buttons');
114015
114016                 buttonSection
114017                     .insert('button', '.ok-button')
114018                     .attr('class', 'button cancel-button secondary-action')
114019                     .text(t('confirm.cancel'));
114020
114021
114022                 buttonSection.select('.cancel-button')
114023                     .on('click.cancel', clickCancel);
114024
114025                 buttonSection.select('.ok-button')
114026                     .attr('disabled', isSaveDisabled)
114027                     .on('click.save', clickSave);
114028
114029
114030                 function isSaveDisabled() {
114031                     return null;
114032                 }
114033
114034
114035                 // restore the original url
114036                 function clickCancel() {
114037                     textSection.select('.field-url').property('value', _origSettings.url);
114038                     context.storage('settings-custom-data-url', _origSettings.url);
114039                     this.blur();
114040                     modal.close();
114041                 }
114042
114043                 // accept the current url
114044                 function clickSave() {
114045                     _currSettings.url = textSection.select('.field-url').property('value').trim();
114046
114047                     // one or the other but not both
114048                     if (_currSettings.url) { _currSettings.fileList = null; }
114049                     if (_currSettings.fileList) { _currSettings.url = ''; }
114050
114051                     context.storage('settings-custom-data-url', _currSettings.url);
114052                     this.blur();
114053                     modal.close();
114054                     dispatch$1.call('change', this, _currSettings);
114055                 }
114056             }
114057
114058             return utilRebind(render, dispatch$1, 'on');
114059         }
114060
114061         function uiMapData(context) {
114062             var key = t('map_data.key');
114063             var osmDataToggleKey = uiCmd('⌥' + t('area_fill.wireframe.key'));
114064             var features = context.features().keys();
114065             var layers = context.layers();
114066             var fills = ['wireframe', 'partial', 'full'];
114067
114068             var settingsCustomData = uiSettingsCustomData(context)
114069                 .on('change', customChanged);
114070
114071             var _pane = d3_select(null);
114072
114073             var _fillSelected = context.storage('area-fill') || 'partial';
114074             var _dataLayerContainer = d3_select(null);
114075             var _photoOverlayContainer = d3_select(null);
114076             var _fillList = d3_select(null);
114077             var _featureList = d3_select(null);
114078             var _visualDiffList = d3_select(null);
114079             var _QAList = d3_select(null);
114080
114081
114082             function showsFeature(d) {
114083                 return context.features().enabled(d);
114084             }
114085
114086
114087             function autoHiddenFeature(d) {
114088                 if (d.type === 'kr_error') { return context.errors().autoHidden(d); }
114089                 return context.features().autoHidden(d);
114090             }
114091
114092
114093             function clickFeature(d) {
114094                 context.features().toggle(d);
114095                 update();
114096             }
114097
114098
114099             function showsQA(d) {
114100                 var QAKeys = [d];
114101                 var QALayers = layers.all().filter(function(obj) { return QAKeys.indexOf(obj.id) !== -1; });
114102                 var data = QALayers.filter(function(obj) { return obj.layer.supported(); });
114103
114104                 function layerSupported(d) {
114105                     return d.layer && d.layer.supported();
114106                 }
114107                 function layerEnabled(d) {
114108                     return layerSupported(d) && d.layer.enabled();
114109                 }
114110
114111                 return layerEnabled(data[0]);
114112             }
114113
114114
114115             function showsFill(d) {
114116                 return _fillSelected === d;
114117             }
114118
114119
114120             function setFill(d) {
114121                 fills.forEach(function(opt) {
114122                     context.surface().classed('fill-' + opt, Boolean(opt === d));
114123                 });
114124
114125                 _fillSelected = d;
114126                 context.storage('area-fill', d);
114127                 if (d !== 'wireframe') {
114128                     context.storage('area-fill-toggle', d);
114129                 }
114130                 update();
114131             }
114132
114133
114134             function toggleHighlightEdited() {
114135                 event.preventDefault();
114136                 var surface = context.surface();
114137                 surface.classed('highlight-edited', !surface.classed('highlight-edited'));
114138                 updateVisualDiffList();
114139
114140                 context.map().pan([0,0]);  // trigger a redraw
114141             }
114142
114143
114144             function showsLayer(which) {
114145                 var layer = layers.layer(which);
114146                 if (layer) {
114147                     return layer.enabled();
114148                 }
114149                 return false;
114150             }
114151
114152
114153             function setLayer(which, enabled) {
114154                 // Don't allow layer changes while drawing - #6584
114155                 var mode = context.mode();
114156                 if (mode && /^draw/.test(mode.id)) { return; }
114157
114158                 var layer = layers.layer(which);
114159                 if (layer) {
114160                     layer.enabled(enabled);
114161
114162                     if (!enabled && (which === 'osm' || which === 'notes')) {
114163                         context.enter(modeBrowse(context));
114164                     }
114165
114166                     update();
114167                 }
114168             }
114169
114170
114171             function toggleLayer(which) {
114172                 setLayer(which, !showsLayer(which));
114173             }
114174
114175
114176             function drawPhotoItems(selection) {
114177                 var photoKeys = context.photos().overlayLayerIDs();
114178                 var photoLayers = layers.all().filter(function(obj) { return photoKeys.indexOf(obj.id) !== -1; });
114179                 var data = photoLayers.filter(function(obj) { return obj.layer.supported(); });
114180
114181                 function layerSupported(d) {
114182                     return d.layer && d.layer.supported();
114183                 }
114184                 function layerEnabled(d) {
114185                     return layerSupported(d) && d.layer.enabled();
114186                 }
114187
114188                 var ul = selection
114189                     .selectAll('.layer-list-photos')
114190                     .data([0]);
114191
114192                 ul = ul.enter()
114193                     .append('ul')
114194                     .attr('class', 'layer-list layer-list-photos')
114195                     .merge(ul);
114196
114197                 var li = ul.selectAll('.list-item-photos')
114198                     .data(data);
114199
114200                 li.exit()
114201                     .remove();
114202
114203                 var liEnter = li.enter()
114204                     .append('li')
114205                     .attr('class', function(d) {
114206                         var classes = 'list-item-photos list-item-' + d.id;
114207                         if (d.id === 'mapillary-signs' || d.id === 'mapillary-map-features') {
114208                             classes += ' indented';
114209                         }
114210                         return classes;
114211                     });
114212
114213                 var labelEnter = liEnter
114214                     .append('label')
114215                     .each(function(d) {
114216                         var titleID;
114217                         if (d.id === 'mapillary-signs') { titleID = 'mapillary.signs.tooltip'; }
114218                         else if (d.id === 'mapillary') { titleID = 'mapillary_images.tooltip'; }
114219                         else if (d.id === 'openstreetcam') { titleID = 'openstreetcam_images.tooltip'; }
114220                         else { titleID = d.id.replace(/-/g, '_') + '.tooltip'; }
114221                         d3_select(this)
114222                             .call(tooltip()
114223                                 .title(t(titleID))
114224                                 .placement('top')
114225                             );
114226                     });
114227
114228                 labelEnter
114229                     .append('input')
114230                     .attr('type', 'checkbox')
114231                     .on('change', function(d) { toggleLayer(d.id); });
114232
114233                 labelEnter
114234                     .append('span')
114235                     .text(function(d) {
114236                         var id = d.id;
114237                         if (id === 'mapillary-signs') { id = 'photo_overlays.traffic_signs'; }
114238                         return t(id.replace(/-/g, '_') + '.title');
114239                     });
114240
114241                 labelEnter
114242                     .filter(function(d) { return d.id === 'mapillary-map-features'; })
114243                     .append('a')
114244                     .attr('class', 'request-data-link')
114245                     .attr('target', '_blank')
114246                     .attr('tabindex', -1)
114247                     .call(svgIcon('#iD-icon-out-link', 'inline'))
114248                     .attr('href', 'https://mapillary.github.io/mapillary_solutions/data-request')
114249                     .append('span')
114250                     .text(t('mapillary_map_features.request_data'));
114251
114252
114253                 // Update
114254                 li
114255                     .merge(liEnter)
114256                     .classed('active', layerEnabled)
114257                     .selectAll('input')
114258                     .property('checked', layerEnabled);
114259             }
114260
114261             function drawPhotoTypeItems(selection) {
114262                 var data = context.photos().allPhotoTypes();
114263
114264                 function typeEnabled(d) {
114265                     return context.photos().showsPhotoType(d);
114266                 }
114267
114268                 var ul = selection
114269                     .selectAll('.layer-list-photo-types')
114270                     .data(context.photos().shouldFilterByPhotoType() ? [0] : []);
114271
114272                 ul.exit()
114273                     .remove();
114274
114275                 ul = ul.enter()
114276                     .append('ul')
114277                     .attr('class', 'layer-list layer-list-photo-types')
114278                     .merge(ul);
114279
114280                 var li = ul.selectAll('.list-item-photo-types')
114281                     .data(data);
114282
114283                 li.exit()
114284                     .remove();
114285
114286                 var liEnter = li.enter()
114287                     .append('li')
114288                     .attr('class', function(d) {
114289                         return 'list-item-photo-types list-item-' + d;
114290                     });
114291
114292                 var labelEnter = liEnter
114293                     .append('label')
114294                     .each(function(d) {
114295                         d3_select(this)
114296                             .call(tooltip()
114297                                 .title(t('photo_overlays.photo_type.' + d + '.tooltip'))
114298                                 .placement('top')
114299                             );
114300                     });
114301
114302                 labelEnter
114303                     .append('input')
114304                     .attr('type', 'checkbox')
114305                     .on('change', function(d) {
114306                         context.photos().togglePhotoType(d);
114307                         update();
114308                     });
114309
114310                 labelEnter
114311                     .append('span')
114312                     .text(function(d) {
114313                         return t('photo_overlays.photo_type.' + d + '.title');
114314                     });
114315
114316
114317                 // Update
114318                 li
114319                     .merge(liEnter)
114320                     .classed('active', typeEnabled)
114321                     .selectAll('input')
114322                     .property('checked', typeEnabled);
114323             }
114324
114325
114326             function drawOsmItems(selection) {
114327                 var osmKeys = ['osm', 'notes'];
114328                 var osmLayers = layers.all().filter(function(obj) { return osmKeys.indexOf(obj.id) !== -1; });
114329
114330                 var ul = selection
114331                     .selectAll('.layer-list-osm')
114332                     .data([0]);
114333
114334                 ul = ul.enter()
114335                     .append('ul')
114336                     .attr('class', 'layer-list layer-list-osm')
114337                     .merge(ul);
114338
114339                 var li = ul.selectAll('.list-item')
114340                     .data(osmLayers);
114341
114342                 li.exit()
114343                     .remove();
114344
114345                 var liEnter = li.enter()
114346                     .append('li')
114347                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
114348
114349                 var labelEnter = liEnter
114350                     .append('label')
114351                     .each(function(d) {
114352                         if (d.id === 'osm') {
114353                             d3_select(this)
114354                                 .call(tooltip()
114355                                     .html(true)
114356                                     .title(uiTooltipHtml(t('map_data.layers.' + d.id + '.tooltip'), osmDataToggleKey))
114357                                     .placement('bottom')
114358                                 );
114359                         } else {
114360                             d3_select(this)
114361                                 .call(tooltip()
114362                                     .title(t('map_data.layers.' + d.id + '.tooltip'))
114363                                     .placement('bottom')
114364                                 );
114365                         }
114366                     });
114367
114368                 labelEnter
114369                     .append('input')
114370                     .attr('type', 'checkbox')
114371                     .on('change', function(d) { toggleLayer(d.id); });
114372
114373                 labelEnter
114374                     .append('span')
114375                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
114376
114377
114378                 // Update
114379                 li
114380                     .merge(liEnter)
114381                     .classed('active', function (d) { return d.layer.enabled(); })
114382                     .selectAll('input')
114383                     .property('checked', function (d) { return d.layer.enabled(); });
114384             }
114385
114386
114387             function drawQAItems(selection) {
114388                 var qaKeys = ['keepRight', 'improveOSM'];
114389                 var qaLayers = layers.all().filter(function(obj) { return qaKeys.indexOf(obj.id) !== -1; });
114390
114391                 var ul = selection
114392                     .selectAll('.layer-list-qa')
114393                     .data([0]);
114394
114395                 ul = ul.enter()
114396                     .append('ul')
114397                     .attr('class', 'layer-list layer-list-qa')
114398                     .merge(ul);
114399
114400                 var li = ul.selectAll('.list-item')
114401                     .data(qaLayers);
114402
114403                 li.exit()
114404                     .remove();
114405
114406                 var liEnter = li.enter()
114407                     .append('li')
114408                     .attr('class', function(d) { return 'list-item list-item-' + d.id; });
114409
114410                 var labelEnter = liEnter
114411                     .append('label')
114412                     .each(function(d) {
114413                         d3_select(this)
114414                             .call(tooltip()
114415                                 .title(t('map_data.layers.' + d.id + '.tooltip'))
114416                                 .placement('bottom')
114417                             );
114418                     });
114419
114420                 labelEnter
114421                     .append('input')
114422                     .attr('type', 'checkbox')
114423                     .on('change', function(d) { toggleLayer(d.id); });
114424
114425                 labelEnter
114426                     .append('span')
114427                     .text(function(d) { return t('map_data.layers.' + d.id + '.title'); });
114428
114429
114430                 // Update
114431                 li
114432                     .merge(liEnter)
114433                     .classed('active', function (d) { return d.layer.enabled(); })
114434                     .selectAll('input')
114435                     .property('checked', function (d) { return d.layer.enabled(); });
114436             }
114437
114438
114439             // Beta feature - sample vector layers to support Detroit Mapping Challenge
114440             // https://github.com/osmus/detroit-mapping-challenge
114441             function drawVectorItems(selection) {
114442                 var dataLayer = layers.layer('data');
114443                 var vtData = [
114444                     {
114445                         name: 'Detroit Neighborhoods/Parks',
114446                         src: 'neighborhoods-parks',
114447                         tooltip: 'Neighborhood boundaries and parks as compiled by City of Detroit in concert with community groups.',
114448                         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'
114449                     }, {
114450                         name: 'Detroit Composite POIs',
114451                         src: 'composite-poi',
114452                         tooltip: 'Fire Inspections, Business Licenses, and other public location data collated from the City of Detroit.',
114453                         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'
114454                     }, {
114455                         name: 'Detroit All-The-Places POIs',
114456                         src: 'alltheplaces-poi',
114457                         tooltip: 'Public domain business location data created by web scrapers.',
114458                         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'
114459                     }
114460                 ];
114461
114462                 // Only show this if the map is around Detroit..
114463                 var detroit = geoExtent([-83.5, 42.1], [-82.8, 42.5]);
114464                 var showVectorItems = (context.map().zoom() > 9 && detroit.contains(context.map().center()));
114465
114466                 var container = selection.selectAll('.vectortile-container')
114467                     .data(showVectorItems ? [0] : []);
114468
114469                 container.exit()
114470                     .remove();
114471
114472                 var containerEnter = container.enter()
114473                     .append('div')
114474                     .attr('class', 'vectortile-container');
114475
114476                 containerEnter
114477                     .append('h4')
114478                     .attr('class', 'vectortile-header')
114479                     .text('Detroit Vector Tiles (Beta)');
114480
114481                 containerEnter
114482                     .append('ul')
114483                     .attr('class', 'layer-list layer-list-vectortile');
114484
114485                 containerEnter
114486                     .append('div')
114487                     .attr('class', 'vectortile-footer')
114488                     .append('a')
114489                     .attr('target', '_blank')
114490                     .attr('tabindex', -1)
114491                     .call(svgIcon('#iD-icon-out-link', 'inline'))
114492                     .attr('href', 'https://github.com/osmus/detroit-mapping-challenge')
114493                     .append('span')
114494                     .text('About these layers');
114495
114496                 container = container
114497                     .merge(containerEnter);
114498
114499
114500                 var ul = container.selectAll('.layer-list-vectortile');
114501
114502                 var li = ul.selectAll('.list-item')
114503                     .data(vtData);
114504
114505                 li.exit()
114506                     .remove();
114507
114508                 var liEnter = li.enter()
114509                     .append('li')
114510                     .attr('class', function(d) { return 'list-item list-item-' + d.src; });
114511
114512                 var labelEnter = liEnter
114513                     .append('label')
114514                     .each(function(d) {
114515                         d3_select(this).call(
114516                             tooltip().title(d.tooltip).placement('top')
114517                         );
114518                     });
114519
114520                 labelEnter
114521                     .append('input')
114522                     .attr('type', 'radio')
114523                     .attr('name', 'vectortile')
114524                     .on('change', selectVTLayer);
114525
114526                 labelEnter
114527                     .append('span')
114528                     .text(function(d) { return d.name; });
114529
114530                 // Update
114531                 li
114532                     .merge(liEnter)
114533                     .classed('active', isVTLayerSelected)
114534                     .selectAll('input')
114535                     .property('checked', isVTLayerSelected);
114536
114537
114538                 function isVTLayerSelected(d) {
114539                     return dataLayer && dataLayer.template() === d.template;
114540                 }
114541
114542                 function selectVTLayer(d) {
114543                     context.storage('settings-custom-data-url', d.template);
114544                     if (dataLayer) {
114545                         dataLayer.template(d.template, d.src);
114546                         dataLayer.enabled(true);
114547                     }
114548                 }
114549             }
114550
114551
114552             function drawCustomDataItems(selection) {
114553                 var dataLayer = layers.layer('data');
114554                 var hasData = dataLayer && dataLayer.hasData();
114555                 var showsData = hasData && dataLayer.enabled();
114556
114557                 var ul = selection
114558                     .selectAll('.layer-list-data')
114559                     .data(dataLayer ? [0] : []);
114560
114561                 // Exit
114562                 ul.exit()
114563                     .remove();
114564
114565                 // Enter
114566                 var ulEnter = ul.enter()
114567                     .append('ul')
114568                     .attr('class', 'layer-list layer-list-data');
114569
114570                 var liEnter = ulEnter
114571                     .append('li')
114572                     .attr('class', 'list-item-data');
114573
114574                 var labelEnter = liEnter
114575                     .append('label')
114576                     .call(tooltip()
114577                         .title(t('map_data.layers.custom.tooltip'))
114578                         .placement('top')
114579                     );
114580
114581                 labelEnter
114582                     .append('input')
114583                     .attr('type', 'checkbox')
114584                     .on('change', function() { toggleLayer('data'); });
114585
114586                 labelEnter
114587                     .append('span')
114588                     .text(t('map_data.layers.custom.title'));
114589
114590                 liEnter
114591                     .append('button')
114592                     .call(tooltip()
114593                         .title(t('settings.custom_data.tooltip'))
114594                         .placement((textDirection === 'rtl') ? 'right' : 'left')
114595                     )
114596                     .on('click', editCustom)
114597                     .call(svgIcon('#iD-icon-more'));
114598
114599                 liEnter
114600                     .append('button')
114601                     .call(tooltip()
114602                         .title(t('map_data.layers.custom.zoom'))
114603                         .placement((textDirection === 'rtl') ? 'right' : 'left')
114604                     )
114605                     .on('click', function() {
114606                         event.preventDefault();
114607                         event.stopPropagation();
114608                         dataLayer.fitZoom();
114609                     })
114610                     .call(svgIcon('#iD-icon-search'));
114611
114612                 // Update
114613                 ul = ul
114614                     .merge(ulEnter);
114615
114616                 ul.selectAll('.list-item-data')
114617                     .classed('active', showsData)
114618                     .selectAll('label')
114619                     .classed('deemphasize', !hasData)
114620                     .selectAll('input')
114621                     .property('disabled', !hasData)
114622                     .property('checked', showsData);
114623             }
114624
114625
114626             function editCustom() {
114627                 event.preventDefault();
114628                 context.container()
114629                     .call(settingsCustomData);
114630             }
114631
114632
114633             function customChanged(d) {
114634                 var dataLayer = layers.layer('data');
114635
114636                 if (d && d.url) {
114637                     dataLayer.url(d.url);
114638                 } else if (d && d.fileList) {
114639                     dataLayer.fileList(d.fileList);
114640                 }
114641             }
114642
114643
114644             function drawListItems(selection, data, type, name, change, active) {
114645                 var items = selection.selectAll('li')
114646                     .data(data);
114647
114648                 // Exit
114649                 items.exit()
114650                     .remove();
114651
114652                 // Enter
114653                 var enter = items.enter()
114654                     .append('li')
114655                     .call(tooltip()
114656                         .html(true)
114657                         .title(function(d) {
114658                             var tip = t(name + '.' + d + '.tooltip');
114659                             var key = (d === 'wireframe' ? t('area_fill.wireframe.key') : null);
114660                             if (d === 'highlight_edits') { key = t('map_data.highlight_edits.key'); }
114661
114662                             if ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d)) {
114663                                 var msg = showsLayer('osm') ? t('map_data.autohidden') : t('map_data.osmhidden');
114664                                 tip += '<div>' + msg + '</div>';
114665                             }
114666                             return uiTooltipHtml(tip, key);
114667                         })
114668                         .placement('top')
114669                     );
114670
114671                 var label = enter
114672                     .append('label');
114673
114674                 label
114675                     .append('input')
114676                     .attr('type', type)
114677                     .attr('name', name)
114678                     .on('change', change);
114679
114680                 label
114681                     .append('span')
114682                     .text(function(d) { return t(name + '.' + d + '.description'); });
114683
114684                 // Update
114685                 items = items
114686                     .merge(enter);
114687
114688                 items
114689                     .classed('active', active)
114690                     .selectAll('input')
114691                     .property('checked', active)
114692                     .property('indeterminate', function(d) {
114693                         return ((name === 'feature' || name === 'keepRight') && autoHiddenFeature(d));
114694                     });
114695             }
114696
114697
114698             function renderDataLayers(selection) {
114699                 var container = selection.selectAll('.data-layer-container')
114700                     .data([0]);
114701
114702                 _dataLayerContainer = container.enter()
114703                     .append('div')
114704                     .attr('class', 'data-layer-container')
114705                     .merge(container);
114706
114707                 updateDataLayers();
114708             }
114709
114710             function renderPhotoOverlays(selection) {
114711                 var container = selection.selectAll('.photo-overlay-container')
114712                     .data([0]);
114713
114714                 _photoOverlayContainer = container.enter()
114715                     .append('div')
114716                     .attr('class', 'photo-overlay-container')
114717                     .merge(container);
114718
114719                 updatePhotoOverlays();
114720             }
114721
114722
114723             function renderStyleOptions(selection) {
114724                 var container = selection.selectAll('.layer-fill-list')
114725                     .data([0]);
114726
114727                 _fillList = container.enter()
114728                     .append('ul')
114729                     .attr('class', 'layer-list layer-fill-list')
114730                     .merge(container);
114731
114732                 updateFillList();
114733
114734                 var container2 = selection.selectAll('.layer-visual-diff-list')
114735                     .data([0]);
114736
114737                 _visualDiffList = container2.enter()
114738                     .append('ul')
114739                     .attr('class', 'layer-list layer-visual-diff-list')
114740                     .merge(container2);
114741
114742                 updateVisualDiffList();
114743             }
114744
114745
114746             function renderFeatureList(selection) {
114747                 var container = selection.selectAll('.layer-feature-list-container')
114748                     .data([0]);
114749
114750                 var containerEnter = container.enter()
114751                     .append('div')
114752                     .attr('class', 'layer-feature-list-container');
114753
114754                 containerEnter
114755                     .append('ul')
114756                     .attr('class', 'layer-list layer-feature-list');
114757
114758                 var footer = containerEnter
114759                     .append('div')
114760                     .attr('class', 'feature-list-links section-footer');
114761
114762                 footer
114763                     .append('a')
114764                     .attr('class', 'feature-list-link')
114765                     .attr('href', '#')
114766                     .text(t('issues.enable_all'))
114767                     .on('click', function() {
114768                         context.features().enableAll();
114769                     });
114770
114771                 footer
114772                     .append('a')
114773                     .attr('class', 'feature-list-link')
114774                     .attr('href', '#')
114775                     .text(t('issues.disable_all'))
114776                     .on('click', function() {
114777                         context.features().disableAll();
114778                     });
114779
114780                 // Update
114781                 container = container
114782                     .merge(containerEnter);
114783
114784                 _featureList = container.selectAll('.layer-feature-list');
114785
114786                 updateFeatureList();
114787             }
114788
114789             function updatePhotoOverlays() {
114790                 _photoOverlayContainer
114791                     .call(drawPhotoItems)
114792                     .call(drawPhotoTypeItems);
114793             }
114794
114795             function updateDataLayers() {
114796                 _dataLayerContainer
114797                     .call(drawOsmItems)
114798                     .call(drawQAItems)
114799                     .call(drawCustomDataItems)
114800                     .call(drawVectorItems);      // Beta - Detroit mapping challenge
114801             }
114802
114803             function updateFillList() {
114804                 _fillList
114805                     .call(drawListItems, fills, 'radio', 'area_fill', setFill, showsFill);
114806             }
114807
114808             function updateVisualDiffList() {
114809                 _visualDiffList
114810                     .call(drawListItems, ['highlight_edits'], 'checkbox', 'visual_diff', toggleHighlightEdited, function() {
114811                         return context.surface().classed('highlight-edited');
114812                     });
114813             }
114814
114815             function updateFeatureList() {
114816                 _featureList
114817                     .call(drawListItems, features, 'checkbox', 'feature', clickFeature, showsFeature);
114818             }
114819
114820             function update() {
114821
114822                 if (!_pane.select('.disclosure-wrap-data_layers').classed('hide')) {
114823                     updateDataLayers();
114824                 }
114825                 if (!_pane.select('.disclosure-wrap-photo_overlays').classed('hide')) {
114826                     updatePhotoOverlays();
114827                 }
114828                 if (!_pane.select('.disclosure-wrap-fill_area').classed('hide')) {
114829                     updateFillList();
114830                 }
114831                 if (!_pane.select('.disclosure-wrap-map_features').classed('hide')) {
114832                     updateFeatureList();
114833                 }
114834
114835                 _QAList
114836                     .call(drawListItems, ['keep-right'], 'checkbox', 'QA', function(d) { toggleLayer(d); }, showsQA);
114837             }
114838
114839
114840             function toggleWireframe() {
114841                 if (event) {
114842                     event.preventDefault();
114843                     event.stopPropagation();
114844                 }
114845
114846                 if (_fillSelected === 'wireframe') {
114847                     _fillSelected = context.storage('area-fill-toggle') || 'partial';
114848                 } else {
114849                     _fillSelected = 'wireframe';
114850                 }
114851
114852                 setFill(_fillSelected);
114853                 context.map().pan([0,0]);  // trigger a redraw
114854             }
114855
114856             var paneTooltip = tooltip()
114857                 .placement((textDirection === 'rtl') ? 'right' : 'left')
114858                 .html(true)
114859                 .title(uiTooltipHtml(t('map_data.description'), key));
114860
114861             function hidePane() {
114862                 context.ui().togglePanes();
114863             }
114864
114865             uiMapData.togglePane = function() {
114866                 if (event) { event.preventDefault(); }
114867                 paneTooltip.hide();
114868                 context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
114869             };
114870
114871             uiMapData.renderToggleButton = function(selection) {
114872
114873                 selection
114874                     .append('button')
114875                     .on('click', uiMapData.togglePane)
114876                     .call(svgIcon('#iD-icon-data', 'light'))
114877                     .call(paneTooltip);
114878             };
114879
114880
114881             uiMapData.renderPane = function(selection) {
114882
114883                 _pane = selection
114884                     .append('div')
114885                     .attr('class', 'fillL map-pane map-data-pane hide')
114886                     .attr('pane', 'map-data');
114887
114888                 var heading = _pane
114889                     .append('div')
114890                     .attr('class', 'pane-heading');
114891
114892                 heading
114893                     .append('h2')
114894                     .text(t('map_data.title'));
114895
114896                 heading
114897                     .append('button')
114898                     .on('click', hidePane)
114899                     .call(svgIcon('#iD-icon-close'));
114900
114901
114902                 var content = _pane
114903                     .append('div')
114904                     .attr('class', 'pane-content');
114905
114906
114907                 // data layers
114908                 content
114909                     .append('div')
114910                     .attr('class', 'map-data-data-layers')
114911                     .call(uiDisclosure(context, 'data_layers', true)
114912                         .title(t('map_data.data_layers'))
114913                         .content(renderDataLayers)
114914                     );
114915
114916                 // photo overlays
114917                 content
114918                     .append('div')
114919                     .attr('class', 'map-data-photo-overlays')
114920                     .call(uiDisclosure(context, 'photo_overlays', false)
114921                         .title(t('photo_overlays.title'))
114922                         .content(renderPhotoOverlays)
114923                     );
114924
114925                 // area fills
114926                 content
114927                     .append('div')
114928                     .attr('class', 'map-data-area-fills')
114929                     .call(uiDisclosure(context, 'fill_area', false)
114930                         .title(t('map_data.style_options'))
114931                         .content(renderStyleOptions)
114932                     );
114933
114934                 // feature filters
114935                 content
114936                     .append('div')
114937                     .attr('class', 'map-data-feature-filters')
114938                     .call(uiDisclosure(context, 'map_features', false)
114939                         .title(t('map_data.map_features'))
114940                         .content(renderFeatureList)
114941                     );
114942
114943
114944                 // add listeners
114945                 context.features()
114946                     .on('change.map_data-update', update);
114947
114948                 update();
114949                 setFill(_fillSelected);
114950
114951                 context.keybinding()
114952                     .on(key, uiMapData.togglePane)
114953                     .on(t('area_fill.wireframe.key'), toggleWireframe)
114954                     .on(osmDataToggleKey, function() {
114955                         event.preventDefault();
114956                         event.stopPropagation();
114957                         toggleLayer('osm');
114958                     })
114959                     .on(t('map_data.highlight_edits.key'), toggleHighlightEdited);
114960             };
114961
114962             return uiMapData;
114963         }
114964
114965         function uiNotice(context) {
114966
114967             return function(selection) {
114968                 var div = selection
114969                     .append('div')
114970                     .attr('class', 'notice');
114971
114972                 var button = div
114973                     .append('button')
114974                     .attr('class', 'zoom-to notice fillD')
114975                     .on('click', function() {
114976                         context.map().zoomEase(context.minEditableZoom());
114977                     })
114978                     .on('wheel', function() {   // let wheel events pass through #4482
114979                         var e2 = new WheelEvent(event.type, event);
114980                         context.surface().node().dispatchEvent(e2);
114981                     });
114982
114983                 button
114984                     .call(svgIcon('#iD-icon-plus', 'pre-text'))
114985                     .append('span')
114986                     .attr('class', 'label')
114987                     .text(t('zoom_in_edit'));
114988
114989
114990                 function disableTooHigh() {
114991                     var canEdit = context.map().zoom() >= context.minEditableZoom();
114992                     div.style('display', canEdit ? 'none' : 'block');
114993                 }
114994
114995                 context.map()
114996                     .on('move.notice', debounce(disableTooHigh, 500));
114997
114998                 disableTooHigh();
114999             };
115000         }
115001
115002         function uiPhotoviewer(context) {
115003
115004             var dispatch$1 = dispatch('resize');
115005
115006             function photoviewer(selection) {
115007                 selection
115008                     .append('button')
115009                     .attr('class', 'thumb-hide')
115010                     .on('click', function () {
115011                         if (services$1.streetside) { services$1.streetside.hideViewer(); }
115012                         if (services$1.mapillary) { services$1.mapillary.hideViewer(); }
115013                         if (services$1.openstreetcam) { services$1.openstreetcam.hideViewer(); }
115014                     })
115015                     .append('div')
115016                     .call(svgIcon('#iD-icon-close'));
115017
115018                 selection
115019                     .append('button')
115020                     .attr('class', 'resize-handle-xy')
115021                     .on(
115022                         'mousedown',
115023                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true, resizeOnY: true })
115024                     );
115025
115026                 selection
115027                     .append('button')
115028                     .attr('class', 'resize-handle-x')
115029                     .on(
115030                         'mousedown',
115031                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnX: true })
115032                     );
115033
115034                 selection
115035                     .append('button')
115036                     .attr('class', 'resize-handle-y')
115037                     .on(
115038                         'mousedown',
115039                         buildResizeListener(selection, 'resize', dispatch$1, { resizeOnY: true })
115040                     );
115041
115042                 services$1.streetside.loadViewer(context);
115043                 services$1.mapillary.loadViewer(context);
115044                 services$1.openstreetcam.loadViewer(context);
115045
115046                 function buildResizeListener(target, eventName, dispatch, options) {
115047                     var resizeOnX = !!options.resizeOnX;
115048                     var resizeOnY = !!options.resizeOnY;
115049                     var minHeight = options.minHeight || 240;
115050                     var minWidth = options.minWidth || 320;
115051                     var startX;
115052                     var startY;
115053                     var startWidth;
115054                     var startHeight;
115055
115056                     function startResize() {
115057                         var mapSize = context.map().dimensions();
115058
115059                         if (resizeOnX) {
115060                             var maxWidth = mapSize[0];
115061                             var newWidth = clamp((startWidth + event.clientX - startX), minWidth, maxWidth);
115062                             target.style('width', newWidth + 'px');
115063                         }
115064
115065                         if (resizeOnY) {
115066                             var maxHeight = mapSize[1] - 90;  // preserve space at top/bottom of map
115067                             var newHeight = clamp((startHeight + startY - event.clientY), minHeight, maxHeight);
115068                             target.style('height', newHeight + 'px');
115069                         }
115070
115071                         dispatch.call(eventName, target, utilGetDimensions(target, true));
115072                     }
115073
115074                     function clamp(num, min, max) {
115075                         return Math.max(min, Math.min(num, max));
115076                     }
115077
115078                     function stopResize() {
115079                         d3_select(window)
115080                             .on('.' + eventName, null);
115081                     }
115082
115083                     return function initResize() {
115084                         startX = event.clientX;
115085                         startY = event.clientY;
115086                         startWidth = target.node().getBoundingClientRect().width;
115087                         startHeight = target.node().getBoundingClientRect().height;
115088
115089                         d3_select(window)
115090                             .on('mousemove.' + eventName, startResize, false)
115091                             .on('mouseup.' + eventName, stopResize, false);
115092                     };
115093                 }
115094             }
115095
115096             photoviewer.onMapResize = function() {
115097                 var photoviewer = d3_select('#photoviewer');
115098                 var content = d3_select('#content');
115099                 var mapDimensions = utilGetDimensions(content, true);
115100                 // shrink photo viewer if it is too big
115101                 // (-90 preserves space at top and bottom of map used by menus)
115102                 var photoDimensions = utilGetDimensions(photoviewer, true);
115103                 if (photoDimensions[0] > mapDimensions[0] || photoDimensions[1] > (mapDimensions[1] - 90)) {
115104                     var setPhotoDimensions = [
115105                         Math.min(photoDimensions[0], mapDimensions[0]),
115106                         Math.min(photoDimensions[1], mapDimensions[1] - 90) ];
115107
115108                     photoviewer
115109                         .style('width', setPhotoDimensions[0] + 'px')
115110                         .style('height', setPhotoDimensions[1] + 'px');
115111
115112                     dispatch$1.call('resize', photoviewer, setPhotoDimensions);
115113                 }
115114             };
115115
115116             return utilRebind(photoviewer, dispatch$1, 'on');
115117         }
115118
115119         function uiPreferences(context) {
115120           var key = t('preferences.key');
115121           var _pane = d3_select(null);
115122           var _showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
115123
115124           var paneTooltip = tooltip()
115125             .placement((textDirection === 'rtl') ? 'right' : 'left')
115126             .html(true)
115127             .title(uiTooltipHtml(t('preferences.description'), key));
115128
115129
115130           function renderPrivacyOptions(selection) {
115131             // enter
115132             var privacyOptionsListEnter = selection.selectAll('.privacy-options-list')
115133               .data([0])
115134               .enter()
115135               .append('ul')
115136               .attr('class', 'layer-list privacy-options-list');
115137
115138             var thirdPartyIconsEnter = privacyOptionsListEnter
115139               .append('li')
115140               .attr('class', 'privacy-third-party-icons-item')
115141               .append('label')
115142               .call(tooltip()
115143                 .title(t('preferences.privacy.third_party_icons.tooltip'))
115144                 .placement('bottom')
115145               );
115146
115147             thirdPartyIconsEnter
115148               .append('input')
115149               .attr('type', 'checkbox')
115150               .on('change', function () {
115151                 event.preventDefault();
115152                 _showThirdPartyIcons = (_showThirdPartyIcons === 'true') ? 'false' : 'true';
115153                 context.storage('preferences.privacy.thirdpartyicons', _showThirdPartyIcons);
115154                 update();
115155               });
115156
115157             thirdPartyIconsEnter
115158               .append('span')
115159               .text(t('preferences.privacy.third_party_icons.description'));
115160
115161
115162             // Privacy Policy link
115163             selection.selectAll('.privacy-link')
115164               .data([0])
115165               .enter()
115166               .append('div')
115167               .attr('class', 'privacy-link')
115168               .append('a')
115169               .attr('target', '_blank')
115170               .call(svgIcon('#iD-icon-out-link', 'inline'))
115171               .attr('href', 'https://github.com/openstreetmap/iD/blob/release/PRIVACY.md')
115172               .append('span')
115173               .text(t('preferences.privacy.privacy_link'));
115174
115175             update();
115176
115177
115178             function update() {
115179               selection.selectAll('.privacy-third-party-icons-item')
115180                 .classed('active', (_showThirdPartyIcons === 'true'))
115181                 .select('input')
115182                 .property('checked', (_showThirdPartyIcons === 'true'));
115183             }
115184           }
115185
115186
115187           uiPreferences.togglePane = function () {
115188             if (event) { event.preventDefault(); }
115189             paneTooltip.hide();
115190             context.ui().togglePanes(!_pane.classed('shown') ? _pane : undefined);
115191           };
115192
115193
115194           uiPreferences.renderToggleButton = function (selection) {
115195             selection
115196               .append('button')
115197               .on('click', uiPreferences.togglePane)
115198               .call(svgIcon('#fas-user-cog', 'light'))
115199               .call(paneTooltip);
115200           };
115201
115202
115203           uiPreferences.renderPane = function (selection) {
115204             _pane = selection
115205               .append('div')
115206               .attr('class', 'fillL map-pane preferences-pane hide')
115207               .attr('pane', 'preferences');
115208
115209             var heading = _pane
115210               .append('div')
115211               .attr('class', 'pane-heading');
115212
115213             heading
115214               .append('h2')
115215               .text(t('preferences.title'));
115216
115217             heading
115218               .append('button')
115219               .on('click', function () { return context.ui().togglePanes(); })
115220               .call(svgIcon('#iD-icon-close'));
115221
115222
115223             var content = _pane
115224               .append('div')
115225               .attr('class', 'pane-content');
115226
115227             content
115228               .append('div')
115229               .attr('class', 'preferences-privacy')
115230               .call(uiDisclosure(context, 'preferences_third_party', true)
115231                 .title(t('preferences.privacy.title'))
115232                 .content(renderPrivacyOptions)
115233               );
115234
115235             context.keybinding()
115236               .on(key, uiPreferences.togglePane);
115237           };
115238
115239           return uiPreferences;
115240         }
115241
115242         function uiRestore(context) {
115243           return function(selection) {
115244             if (!context.history().hasRestorableChanges()) { return; }
115245
115246             var modalSelection = uiModal(selection, true);
115247
115248             modalSelection.select('.modal')
115249               .attr('class', 'modal fillL');
115250
115251             var introModal = modalSelection.select('.content');
115252
115253             introModal
115254               .append('div')
115255               .attr('class', 'modal-section')
115256               .append('h3')
115257               .text(t('restore.heading'));
115258
115259             introModal
115260               .append('div')
115261               .attr('class','modal-section')
115262               .append('p')
115263               .text(t('restore.description'));
115264
115265             var buttonWrap = introModal
115266               .append('div')
115267               .attr('class', 'modal-actions');
115268
115269             var restore = buttonWrap
115270               .append('button')
115271               .attr('class', 'restore')
115272               .on('click', function () {
115273                 context.history().restore();
115274                 modalSelection.remove();
115275               });
115276
115277             restore
115278               .append('svg')
115279               .attr('class', 'logo logo-restore')
115280               .append('use')
115281               .attr('xlink:href', '#iD-logo-restore');
115282
115283             restore
115284               .append('div')
115285               .text(t('restore.restore'));
115286
115287             var reset = buttonWrap
115288               .append('button')
115289               .attr('class', 'reset')
115290               .on('click', function () {
115291                 context.history().clearSaved();
115292                 modalSelection.remove();
115293               });
115294
115295             reset
115296               .append('svg')
115297               .attr('class', 'logo logo-reset')
115298               .append('use')
115299               .attr('xlink:href', '#iD-logo-reset');
115300
115301             reset
115302               .append('div')
115303               .text(t('restore.reset'));
115304
115305             restore.node().focus();
115306           };
115307         }
115308
115309         function uiScale(context) {
115310             var projection = context.projection,
115311                 isImperial = (utilDetect().locale.toLowerCase() === 'en-us'),
115312                 maxLength = 180,
115313                 tickHeight = 8;
115314
115315
115316             function scaleDefs(loc1, loc2) {
115317                 var lat = (loc2[1] + loc1[1]) / 2,
115318                     conversion = (isImperial ? 3.28084 : 1),
115319                     dist = geoLonToMeters(loc2[0] - loc1[0], lat) * conversion,
115320                     scale = { dist: 0, px: 0, text: '' },
115321                     buckets, i, val, dLon;
115322
115323                 if (isImperial) {
115324                     buckets = [5280000, 528000, 52800, 5280, 500, 50, 5, 1];
115325                 } else {
115326                     buckets = [5000000, 500000, 50000, 5000, 500, 50, 5, 1];
115327                 }
115328
115329                 // determine a user-friendly endpoint for the scale
115330                 for (i = 0; i < buckets.length; i++) {
115331                     val = buckets[i];
115332                     if (dist >= val) {
115333                         scale.dist = Math.floor(dist / val) * val;
115334                         break;
115335                     } else {
115336                         scale.dist = +dist.toFixed(2);
115337                     }
115338                 }
115339
115340                 dLon = geoMetersToLon(scale.dist / conversion, lat);
115341                 scale.px = Math.round(projection([loc1[0] + dLon, loc1[1]])[0]);
115342
115343                 scale.text = displayLength(scale.dist / conversion, isImperial);
115344
115345                 return scale;
115346             }
115347
115348
115349             function update(selection) {
115350                 // choose loc1, loc2 along bottom of viewport (near where the scale will be drawn)
115351                 var dims = context.map().dimensions(),
115352                     loc1 = projection.invert([0, dims[1]]),
115353                     loc2 = projection.invert([maxLength, dims[1]]),
115354                     scale = scaleDefs(loc1, loc2);
115355
115356                 selection.select('#scale-path')
115357                     .attr('d', 'M0.5,0.5v' + tickHeight + 'h' + scale.px + 'v-' + tickHeight);
115358
115359                 selection.select('#scale-textgroup')
115360                     .attr('transform', 'translate(' + (scale.px + 8) + ',' + tickHeight + ')');
115361
115362                 selection.select('#scale-text')
115363                     .text(scale.text);
115364             }
115365
115366
115367             return function(selection) {
115368                 function switchUnits() {
115369                     isImperial = !isImperial;
115370                     selection.call(update);
115371                 }
115372
115373                 var scalegroup = selection.append('svg')
115374                     .attr('id', 'scale')
115375                     .on('click', switchUnits)
115376                     .append('g')
115377                     .attr('transform', 'translate(10,11)');
115378
115379                 scalegroup
115380                     .append('path')
115381                     .attr('id', 'scale-path');
115382
115383                 scalegroup
115384                     .append('g')
115385                     .attr('id', 'scale-textgroup')
115386                     .append('text')
115387                     .attr('id', 'scale-text');
115388
115389                 selection.call(update);
115390
115391                 context.map().on('move.scale', function() {
115392                     update(selection);
115393                 });
115394             };
115395         }
115396
115397         var pair_1 = pair$1;
115398
115399
115400         function search(input, dims) {
115401           if (!dims) { dims = 'NSEW'; }
115402           if (typeof input !== 'string') { return null; }
115403
115404           input = input.toUpperCase();
115405           var regex = /^[\s\,]*([NSEW])?\s*([\-|\—|\―]?[0-9.]+)[°º˚]?\s*(?:([0-9.]+)['’′‘]\s*)?(?:([0-9.]+)(?:''|"|”|″)\s*)?([NSEW])?/;
115406
115407           var m = input.match(regex);
115408           if (!m) { return null; }  // no match
115409
115410           var matched = m[0];
115411
115412           // extract dimension.. m[1] = leading, m[5] = trailing
115413           var dim;
115414           if (m[1] && m[5]) {                 // if matched both..
115415             dim = m[1];                       // keep leading
115416             matched = matched.slice(0, -1);   // remove trailing dimension from match
115417           } else {
115418             dim = m[1] || m[5];
115419           }
115420
115421           // if unrecognized dimension
115422           if (dim && dims.indexOf(dim) === -1) { return null; }
115423
115424           // extract DMS
115425           var deg = m[2] ? parseFloat(m[2]) : 0;
115426           var min = m[3] ? parseFloat(m[3]) / 60 : 0;
115427           var sec = m[4] ? parseFloat(m[4]) / 3600 : 0;
115428           var sign = (deg < 0) ? -1 : 1;
115429           if (dim === 'S' || dim === 'W') { sign *= -1; }
115430
115431           return {
115432             val: (Math.abs(deg) + min + sec) * sign,
115433             dim: dim,
115434             matched: matched,
115435             remain: input.slice(matched.length)
115436           };
115437         }
115438
115439
115440         function pair$1(input, dims) {
115441           input = input.trim();
115442           var one = search(input, dims);
115443           if (!one) { return null; }
115444
115445           input = one.remain.trim();
115446           var two = search(input, dims);
115447           if (!two || two.remain) { return null; }
115448
115449           if (one.dim) {
115450             return swapdim(one.val, two.val, one.dim);
115451           } else {
115452             return [one.val, two.val];
115453           }
115454         }
115455
115456
115457         function swapdim(a, b, dim) {
115458           if (dim === 'N' || dim === 'S') { return [a, b]; }
115459           if (dim === 'W' || dim === 'E') { return [b, a]; }
115460         }
115461
115462         function uiFeatureList(context) {
115463             var _geocodeResults;
115464
115465
115466             function featureList(selection) {
115467                 var header = selection
115468                     .append('div')
115469                     .attr('class', 'header fillL cf');
115470
115471                 header
115472                     .append('h3')
115473                     .text(t('inspector.feature_list'));
115474
115475                 var searchWrap = selection
115476                     .append('div')
115477                     .attr('class', 'search-header');
115478
115479                 var search = searchWrap
115480                     .append('input')
115481                     .attr('placeholder', t('inspector.search'))
115482                     .attr('type', 'search')
115483                     .call(utilNoAuto)
115484                     .on('keypress', keypress)
115485                     .on('keydown', keydown)
115486                     .on('input', inputevent);
115487
115488                 searchWrap
115489                     .call(svgIcon('#iD-icon-search', 'pre-text'));
115490
115491                 var listWrap = selection
115492                     .append('div')
115493                     .attr('class', 'inspector-body');
115494
115495                 var list = listWrap
115496                     .append('div')
115497                     .attr('class', 'feature-list cf');
115498
115499                 context
115500                     .on('exit.feature-list', clearSearch);
115501                 context.map()
115502                     .on('drawn.feature-list', mapDrawn);
115503
115504                 context.keybinding()
115505                     .on(uiCmd('⌘F'), focusSearch);
115506
115507
115508                 function focusSearch() {
115509                     var mode = context.mode() && context.mode().id;
115510                     if (mode !== 'browse') { return; }
115511
115512                     event.preventDefault();
115513                     search.node().focus();
115514                 }
115515
115516
115517                 function keydown() {
115518                     if (event.keyCode === 27) {  // escape
115519                         search.node().blur();
115520                     }
115521                 }
115522
115523
115524                 function keypress() {
115525                     var q = search.property('value'),
115526                         items = list.selectAll('.feature-list-item');
115527                     if (event.keyCode === 13 && q.length && items.size()) {  // return
115528                         click(items.datum());
115529                     }
115530                 }
115531
115532
115533                 function inputevent() {
115534                     _geocodeResults = undefined;
115535                     drawList();
115536                 }
115537
115538
115539                 function clearSearch() {
115540                     search.property('value', '');
115541                     drawList();
115542                 }
115543
115544
115545                 function mapDrawn(e) {
115546                     if (e.full) {
115547                         drawList();
115548                     }
115549                 }
115550
115551
115552                 function features() {
115553                     var result = [];
115554                     var graph = context.graph();
115555                     var visibleCenter = context.map().extent().center();
115556                     var q = search.property('value').toLowerCase();
115557
115558                     if (!q) { return result; }
115559
115560                     var idMatch = q.match(/^([nwr])([0-9]+)$/);
115561
115562                     if (idMatch) {
115563                         result.push({
115564                             id: idMatch[0],
115565                             geometry: idMatch[1] === 'n' ? 'point' : idMatch[1] === 'w' ? 'line' : 'relation',
115566                             type: idMatch[1] === 'n' ? t('inspector.node') : idMatch[1] === 'w' ? t('inspector.way') : t('inspector.relation'),
115567                             name: idMatch[2]
115568                         });
115569                     }
115570
115571                     var locationMatch = pair_1(q.toUpperCase()) || q.match(/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)$/);
115572
115573                     if (locationMatch) {
115574                         var loc = [parseFloat(locationMatch[0]), parseFloat(locationMatch[1])];
115575                         result.push({
115576                             id: -1,
115577                             geometry: 'point',
115578                             type: t('inspector.location'),
115579                             name: dmsCoordinatePair([loc[1], loc[0]]),
115580                             location: loc
115581                         });
115582                     }
115583
115584                     var allEntities = graph.entities;
115585                     var localResults = [];
115586                     for (var id in allEntities) {
115587                         var entity = allEntities[id];
115588                         if (!entity) { continue; }
115589
115590                         var name = utilDisplayName(entity) || '';
115591                         if (name.toLowerCase().indexOf(q) < 0) { continue; }
115592                         
115593                         var matched = context.presets().match(entity, graph);
115594                         var type = (matched && matched.name()) || utilDisplayType(entity.id);
115595                         var extent = entity.extent(graph);
115596                         var distance = extent ? geoSphericalDistance(visibleCenter, extent.center()) : 0;
115597
115598                         localResults.push({
115599                             id: entity.id,
115600                             entity: entity,
115601                             geometry: context.geometry(entity.id),
115602                             type: type,
115603                             name: name,
115604                             distance: distance
115605                         });
115606
115607                         if (localResults.length > 100) { break; }
115608                     }
115609                     localResults = localResults.sort(function byDistance(a, b) {
115610                         return a.distance - b.distance;
115611                     });
115612                     result = result.concat(localResults);
115613
115614                     (_geocodeResults || []).forEach(function(d) {
115615                         if (d.osm_type && d.osm_id) {    // some results may be missing these - #1890
115616
115617                             // Make a temporary osmEntity so we can preset match
115618                             // and better localize the search result - #4725
115619                             var id = osmEntity.id.fromOSM(d.osm_type, d.osm_id);
115620                             var tags = {};
115621                             tags[d.class] = d.type;
115622
115623                             var attrs = { id: id, type: d.osm_type, tags: tags };
115624                             if (d.osm_type === 'way') {   // for ways, add some fake closed nodes
115625                                 attrs.nodes = ['a','a'];  // so that geometry area is possible
115626                             }
115627
115628                             var tempEntity = osmEntity(attrs);
115629                             var tempGraph = coreGraph([tempEntity]);
115630                             var matched = context.presets().match(tempEntity, tempGraph);
115631                             var type = (matched && matched.name()) || utilDisplayType(id);
115632
115633                             result.push({
115634                                 id: tempEntity.id,
115635                                 geometry: tempEntity.geometry(tempGraph),
115636                                 type: type,
115637                                 name: d.display_name,
115638                                 extent: new geoExtent(
115639                                     [parseFloat(d.boundingbox[3]), parseFloat(d.boundingbox[0])],
115640                                     [parseFloat(d.boundingbox[2]), parseFloat(d.boundingbox[1])])
115641                             });
115642                         }
115643                     });
115644
115645                     if (q.match(/^[0-9]+$/)) {
115646                         // if query is just a number, possibly an OSM ID without a prefix
115647                         result.push({
115648                             id: 'n' + q,
115649                             geometry: 'point',
115650                             type: t('inspector.node'),
115651                             name: q
115652                         });
115653                         result.push({
115654                             id: 'w' + q,
115655                             geometry: 'line',
115656                             type: t('inspector.way'),
115657                             name: q
115658                         });
115659                         result.push({
115660                             id: 'r' + q,
115661                             geometry: 'relation',
115662                             type: t('inspector.relation'),
115663                             name: q
115664                         });
115665                     }
115666
115667                     return result;
115668                 }
115669
115670
115671                 function drawList() {
115672                     var value = search.property('value');
115673                     var results = features();
115674
115675                     list.classed('filtered', value.length);
115676
115677                     var resultsIndicator = list.selectAll('.no-results-item')
115678                         .data([0])
115679                         .enter()
115680                         .append('button')
115681                         .property('disabled', true)
115682                         .attr('class', 'no-results-item')
115683                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
115684
115685                     resultsIndicator.append('span')
115686                         .attr('class', 'entity-name');
115687
115688                     list.selectAll('.no-results-item .entity-name')
115689                         .text(t('geocoder.no_results_worldwide'));
115690
115691                     if (services$1.geocoder) {
115692                       list.selectAll('.geocode-item')
115693                           .data([0])
115694                           .enter()
115695                           .append('button')
115696                           .attr('class', 'geocode-item')
115697                           .on('click', geocoderSearch)
115698                           .append('div')
115699                           .attr('class', 'label')
115700                           .append('span')
115701                           .attr('class', 'entity-name')
115702                           .text(t('geocoder.search'));
115703                     }
115704
115705                     list.selectAll('.no-results-item')
115706                         .style('display', (value.length && !results.length) ? 'block' : 'none');
115707
115708                     list.selectAll('.geocode-item')
115709                         .style('display', (value && _geocodeResults === undefined) ? 'block' : 'none');
115710
115711                     list.selectAll('.feature-list-item')
115712                         .data([-1])
115713                         .remove();
115714
115715                     var items = list.selectAll('.feature-list-item')
115716                         .data(results, function(d) { return d.id; });
115717
115718                     var enter = items.enter()
115719                         .insert('button', '.geocode-item')
115720                         .attr('class', 'feature-list-item')
115721                         .on('mouseover', mouseover)
115722                         .on('mouseout', mouseout)
115723                         .on('click', click);
115724
115725                     var label = enter
115726                         .append('div')
115727                         .attr('class', 'label');
115728
115729                     label
115730                         .each(function(d) {
115731                             d3_select(this)
115732                                 .call(svgIcon('#iD-icon-' + d.geometry, 'pre-text'));
115733                         });
115734
115735                     label
115736                         .append('span')
115737                         .attr('class', 'entity-type')
115738                         .text(function(d) { return d.type; });
115739
115740                     label
115741                         .append('span')
115742                         .attr('class', 'entity-name')
115743                         .text(function(d) { return d.name; });
115744
115745                     enter
115746                         .style('opacity', 0)
115747                         .transition()
115748                         .style('opacity', 1);
115749
115750                     items.order();
115751
115752                     items.exit()
115753                         .remove();
115754                 }
115755
115756
115757                 function mouseover(d) {
115758                     if (d.id === -1) { return; }
115759
115760                     context.surface().selectAll(utilEntityOrMemberSelector([d.id], context.graph()))
115761                         .classed('hover', true);
115762                 }
115763
115764
115765                 function mouseout() {
115766                     context.surface().selectAll('.hover')
115767                         .classed('hover', false);
115768                 }
115769
115770
115771                 function click(d) {
115772                     event.preventDefault();
115773                     if (d.location) {
115774                         context.map().centerZoomEase([d.location[1], d.location[0]], 19);
115775                     }
115776                     else if (d.entity) {
115777                         if (d.entity.type === 'node') {
115778                             context.map().center(d.entity.loc);
115779                         } else if (d.entity.type === 'way') {
115780                             var center = context.projection(context.map().center());
115781                             var edge = geoChooseEdge(context.childNodes(d.entity), center, context.projection);
115782                             context.map().center(edge.loc);
115783                         }
115784                         context.enter(modeSelect(context, [d.entity.id]));
115785                     } else {
115786                         context.zoomToEntity(d.id);
115787                     }
115788                 }
115789
115790
115791                 function geocoderSearch() {
115792                     services$1.geocoder.search(search.property('value'), function (err, resp) {
115793                         _geocodeResults = resp || [];
115794                         drawList();
115795                     });
115796                 }
115797             }
115798
115799
115800             return featureList;
115801         }
115802
115803         function uiPresetIcon(context) {
115804           var arguments$1 = arguments;
115805
115806           var _preset;
115807           var _geometry;
115808           var _sizeClass = 'medium';
115809
115810
115811           function isSmall() {
115812             return _sizeClass === 'small';
115813           }
115814
115815
115816           function presetIcon(selection) {
115817             selection.each(render);
115818           }
115819
115820
115821           function getIcon(p, geom) {
115822             if (isSmall() && p.isFallback && p.isFallback())
115823               { return 'iD-icon-' + p.id; }
115824             else if (p.icon)
115825               { return p.icon; }
115826             else if (geom === 'line')
115827               { return 'iD-other-line'; }
115828             else if (geom === 'vertex')
115829               { return p.isFallback() ? '' : 'temaki-vertex'; }
115830             else if (isSmall() && geom === 'point')
115831               { return ''; }
115832             else
115833               { return 'maki-marker-stroked'; }
115834           }
115835
115836
115837           function renderPointBorder(enter) {
115838             var w = 40;
115839             var h = 40;
115840
115841             enter
115842               .append('svg')
115843               .attr('class', 'preset-icon-fill preset-icon-point-border')
115844               .attr('width', w)
115845               .attr('height', h)
115846               .attr('viewBox', ("0 0 " + w + " " + h))
115847               .append('path')
115848               .attr('transform', 'translate(11.5, 8)')
115849               .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');
115850           }
115851
115852
115853           function renderCircleFill(fillEnter) {
115854             var w = 60;
115855             var h = 60;
115856             var d = 40;
115857
115858             fillEnter
115859               .append('svg')
115860               .attr('class', 'preset-icon-fill preset-icon-fill-vertex')
115861               .attr('width', w)
115862               .attr('height', h)
115863               .attr('viewBox', ("0 0 " + w + " " + h))
115864               .append('circle')
115865               .attr('cx', w / 2)
115866               .attr('cy', h / 2)
115867               .attr('r', d / 2);
115868           }
115869
115870
115871           function renderSquareFill(fillEnter) {
115872             var d = isSmall() ? 40 : 60;
115873             var w = d;
115874             var h = d;
115875             var l = d * 2/3;
115876             var c1 = (w-l) / 2;
115877             var c2 = c1 + l;
115878
115879             fillEnter = fillEnter
115880               .append('svg')
115881               .attr('class', 'preset-icon-fill preset-icon-fill-area')
115882               .attr('width', w)
115883               .attr('height', h)
115884               .attr('viewBox', ("0 0 " + w + " " + h));
115885
115886             ['fill', 'stroke'].forEach(function (klass) {
115887               fillEnter
115888                 .append('path')
115889                 .attr('d', ("M" + c1 + " " + c1 + " L" + c1 + " " + c2 + " L" + c2 + " " + c2 + " L" + c2 + " " + c1 + " Z"))
115890                 .attr('class', ("line area " + klass));
115891             });
115892
115893             var rVertex = 2.5;
115894             [[c1, c1], [c1, c2], [c2, c2], [c2, c1]].forEach(function (point) {
115895               fillEnter
115896                 .append('circle')
115897                 .attr('class', 'vertex')
115898                 .attr('cx', point[0])
115899                 .attr('cy', point[1])
115900                 .attr('r', rVertex);
115901             });
115902
115903             if (!isSmall()) {
115904               var rMidpoint = 1.25;
115905               [[c1, w/2], [c2, w/2], [h/2, c1], [h/2, c2]].forEach(function (point) {
115906                 fillEnter
115907                   .append('circle')
115908                   .attr('class', 'midpoint')
115909                   .attr('cx', point[0])
115910                   .attr('cy', point[1])
115911                   .attr('r', rMidpoint);
115912               });
115913             }
115914           }
115915
115916
115917           function renderLine(lineEnter) {
115918             var d = isSmall() ? 40 : 60;
115919             // draw the line parametrically
115920             var w = d;
115921             var h = d;
115922             var y = Math.round(d * 0.72);
115923             var l = Math.round(d * 0.6);
115924             var r = 2.5;
115925             var x1 = (w - l) / 2;
115926             var x2 = x1 + l;
115927
115928             lineEnter = lineEnter
115929               .append('svg')
115930               .attr('class', 'preset-icon-line')
115931               .attr('width', w)
115932               .attr('height', h)
115933               .attr('viewBox', ("0 0 " + w + " " + h));
115934
115935             ['casing', 'stroke'].forEach(function (klass) {
115936               lineEnter
115937                 .append('path')
115938                 .attr('d', ("M" + x1 + " " + y + " L" + x2 + " " + y))
115939                 .attr('class', ("line " + klass));
115940             });
115941
115942             [[x1-1, y], [x2+1, y]].forEach(function (point) {
115943               lineEnter
115944                 .append('circle')
115945                 .attr('class', 'vertex')
115946                 .attr('cx', point[0])
115947                 .attr('cy', point[1])
115948                 .attr('r', r);
115949             });
115950           }
115951
115952
115953           function renderRoute(routeEnter) {
115954             var d = isSmall() ? 40 : 60;
115955             // draw the route parametrically
115956             var w = d;
115957             var h = d;
115958             var y1 = Math.round(d * 0.80);
115959             var y2 = Math.round(d * 0.68);
115960             var l = Math.round(d * 0.6);
115961             var r = 2;
115962             var x1 = (w - l) / 2;
115963             var x2 = x1 + l / 3;
115964             var x3 = x2 + l / 3;
115965             var x4 = x3 + l / 3;
115966
115967             routeEnter = routeEnter
115968               .append('svg')
115969               .attr('class', 'preset-icon-route')
115970               .attr('width', w)
115971               .attr('height', h)
115972               .attr('viewBox', ("0 0 " + w + " " + h));
115973
115974             ['casing', 'stroke'].forEach(function (klass) {
115975               routeEnter
115976                 .append('path')
115977                 .attr('d', ("M" + x1 + " " + y1 + " L" + x2 + " " + y2))
115978                 .attr('class', ("segment0 line " + klass));
115979               routeEnter
115980                 .append('path')
115981                 .attr('d', ("M" + x2 + " " + y2 + " L" + x3 + " " + y1))
115982                 .attr('class', ("segment1 line " + klass));
115983               routeEnter
115984                 .append('path')
115985                 .attr('d', ("M" + x3 + " " + y1 + " L" + x4 + " " + y2))
115986                 .attr('class', ("segment2 line " + klass));
115987             });
115988
115989             [[x1, y1], [x2, y2], [x3, y1], [x4, y2]].forEach(function (point) {
115990               routeEnter
115991                 .append('circle')
115992                 .attr('class', 'vertex')
115993                 .attr('cx', point[0])
115994                 .attr('cy', point[1])
115995                 .attr('r', r);
115996             });
115997           }
115998
115999
116000           // Route icons are drawn with a zigzag annotation underneath:
116001           //     o   o
116002           //    / \ /
116003           //   o   o
116004           // This dataset defines the styles that are used to draw the zigzag segments.
116005           var routeSegments = {
116006             bicycle: ['highway/cycleway', 'highway/cycleway', 'highway/cycleway'],
116007             bus: ['highway/unclassified', 'highway/secondary', 'highway/primary'],
116008             detour: ['highway/tertiary', 'highway/residential', 'highway/unclassified'],
116009             ferry: ['route/ferry', 'route/ferry', 'route/ferry'],
116010             foot: ['highway/footway', 'highway/footway', 'highway/footway'],
116011             hiking: ['highway/path', 'highway/path', 'highway/path'],
116012             horse: ['highway/bridleway', 'highway/bridleway', 'highway/bridleway'],
116013             light_rail: ['railway/light_rail', 'railway/light_rail', 'railway/light_rail'],
116014             monorail: ['railway/monorail', 'railway/monorail', 'railway/monorail'],
116015             pipeline: ['man_made/pipeline', 'man_made/pipeline', 'man_made/pipeline'],
116016             piste: ['piste/downhill', 'piste/hike', 'piste/nordic'],
116017             power: ['power/line', 'power/line', 'power/line'],
116018             road: ['highway/secondary', 'highway/primary', 'highway/trunk'],
116019             subway: ['railway/subway', 'railway/subway', 'railway/subway'],
116020             train: ['railway/rail', 'railway/rail', 'railway/rail'],
116021             tram: ['railway/tram', 'railway/tram', 'railway/tram'],
116022             waterway: ['waterway/stream', 'waterway/stream', 'waterway/stream']
116023           };
116024
116025
116026           function render() {
116027             var p = _preset.apply(this, arguments);
116028             var geom = _geometry ? _geometry.apply(this, arguments) : null;
116029             if (geom === 'relation' && p.tags && ((p.tags.type === 'route' && p.tags.route && routeSegments[p.tags.route]) || p.tags.type === 'waterway')) {
116030               geom = 'route';
116031             }
116032
116033             var showThirdPartyIcons = context.storage('preferences.privacy.thirdpartyicons') || 'true';
116034             var isFallback = isSmall() && p.isFallback && p.isFallback();
116035             var imageURL = (showThirdPartyIcons === 'true') && p.imageURL;
116036             var picon = getIcon(p, geom);
116037             var isMaki = picon && /^maki-/.test(picon);
116038             var isTemaki = picon && /^temaki-/.test(picon);
116039             var isFa = picon && /^fa[srb]-/.test(picon);
116040             var isTnp = picon && /^tnp-/.test(picon);
116041             var isiDIcon = picon && !(isMaki || isTemaki || isFa || isTnp);
116042             var isCategory = !p.setTags;
116043             var drawPoint = picon && geom === 'point' && isSmall() && !isFallback;
116044             var drawVertex = picon !== null && geom === 'vertex' && (!isSmall() || !isFallback);
116045             var drawLine = picon && geom === 'line' && !isFallback && !isCategory;
116046             var drawArea = picon && geom === 'area' && !isFallback;
116047             var drawRoute = picon && geom === 'route';
116048             var isFramed = (drawVertex || drawArea || drawLine || drawRoute);
116049
116050             var tags = !isCategory ? p.setTags({}, geom) : {};
116051             for (var k in tags) {
116052               if (tags[k] === '*') {
116053                 tags[k] = 'yes';
116054               }
116055             }
116056
116057             var tagClasses = svgTagClasses().getClassesString(tags, '');
116058             var selection = d3_select(this);
116059
116060             var container = selection.selectAll('.preset-icon-container')
116061               .data([0]);
116062
116063             container = container.enter()
116064               .append('div')
116065               .attr('class', ("preset-icon-container " + _sizeClass))
116066               .merge(container);
116067
116068             container
116069               .classed('showing-img', !!imageURL)
116070               .classed('fallback', isFallback);
116071
116072
116073             var pointBorder = container.selectAll('.preset-icon-point-border')
116074               .data(drawPoint ? [0] : []);
116075
116076             pointBorder.exit()
116077               .remove();
116078
116079             var pointBorderEnter = pointBorder.enter();
116080             renderPointBorder(pointBorderEnter);
116081             pointBorder = pointBorderEnter.merge(pointBorder);
116082
116083
116084             var vertexFill = container.selectAll('.preset-icon-fill-vertex')
116085               .data(drawVertex ? [0] : []);
116086
116087             vertexFill.exit()
116088               .remove();
116089
116090             var vertexFillEnter = vertexFill.enter();
116091             renderCircleFill(vertexFillEnter);
116092             vertexFill = vertexFillEnter.merge(vertexFill);
116093
116094
116095             var fill = container.selectAll('.preset-icon-fill-area')
116096               .data(drawArea ? [0] : []);
116097
116098             fill.exit()
116099               .remove();
116100
116101             var fillEnter = fill.enter();
116102             renderSquareFill(fillEnter);
116103             fill = fillEnter.merge(fill);
116104
116105             fill.selectAll('path.stroke')
116106               .attr('class', ("area stroke " + tagClasses));
116107             fill.selectAll('path.fill')
116108               .attr('class', ("area fill " + tagClasses));
116109
116110
116111             var line = container.selectAll('.preset-icon-line')
116112               .data(drawLine ? [0] : []);
116113
116114             line.exit()
116115               .remove();
116116
116117             var lineEnter = line.enter();
116118             renderLine(lineEnter);
116119             line = lineEnter.merge(line);
116120
116121             line.selectAll('path.stroke')
116122               .attr('class', ("line stroke " + tagClasses));
116123             line.selectAll('path.casing')
116124               .attr('class', ("line casing " + tagClasses));
116125
116126
116127             var route = container.selectAll('.preset-icon-route')
116128               .data(drawRoute ? [0] : []);
116129
116130             route.exit()
116131               .remove();
116132
116133             var routeEnter = route.enter();
116134             renderRoute(routeEnter);
116135             route = routeEnter.merge(route);
116136
116137             if (drawRoute) {
116138               var routeType = p.tags.type === 'waterway' ? 'waterway' : p.tags.route;
116139               var segmentPresetIDs = routeSegments[routeType];
116140               for (var i in segmentPresetIDs) {
116141                 var segmentPreset = context.presets().item(segmentPresetIDs[i]);
116142                 var segmentTagClasses = svgTagClasses().getClassesString(segmentPreset.tags, '');
116143                 route.selectAll(("path.stroke.segment" + i))
116144                   .attr('class', ("segment" + i + " line stroke " + segmentTagClasses));
116145                 route.selectAll(("path.casing.segment" + i))
116146                   .attr('class', ("segment" + i + " line casing " + segmentTagClasses));
116147               }
116148             }
116149
116150
116151             var icon = container.selectAll('.preset-icon')
116152               .data(picon ? [0] : []);
116153
116154             icon.exit()
116155               .remove();
116156
116157             icon = icon.enter()
116158               .append('div')
116159               .attr('class', 'preset-icon')
116160               .call(svgIcon(''))
116161               .merge(icon);
116162
116163             icon
116164               .attr('class', 'preset-icon ' + (geom ? geom + '-geom' : ''))
116165               .classed('framed', isFramed)
116166               .classed('preset-icon-iD', isiDIcon);
116167
116168             icon.selectAll('svg')
116169               .attr('class', 'icon ' + picon + ' ' + (!isiDIcon && geom !== 'line'  ? '' : tagClasses));
116170
116171             icon.selectAll('use')
116172               .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : ''));
116173
116174             var imageIcon = container.selectAll('img.image-icon')
116175               .data(imageURL ? [0] : []);
116176
116177             imageIcon.exit()
116178               .remove();
116179
116180             imageIcon = imageIcon.enter()
116181               .append('img')
116182               .attr('class', 'image-icon')
116183               .on('load', function () { return container.classed('showing-img', true); } )
116184               .on('error', function () { return container.classed('showing-img', false); } )
116185               .merge(imageIcon);
116186
116187             imageIcon
116188               .attr('src', imageURL);
116189           }
116190
116191
116192           presetIcon.preset = function (val) {
116193             if (!arguments$1.length) { return _preset; }
116194             _preset = utilFunctor(val);
116195             return presetIcon;
116196           };
116197
116198
116199           presetIcon.geometry = function (val) {
116200             if (!arguments$1.length) { return _geometry; }
116201             _geometry = utilFunctor(val);
116202             return presetIcon;
116203           };
116204
116205
116206           presetIcon.sizeClass = function (val) {
116207             if (!arguments$1.length) { return _sizeClass; }
116208             _sizeClass = val;
116209             return presetIcon;
116210           };
116211
116212           return presetIcon;
116213         }
116214
116215         function uiRawMemberEditor(context) {
116216             var taginfo = services$1.taginfo;
116217             var _entityID;
116218             var _contentSelection = d3_select(null);
116219             var _maxMembers = 1000;
116220
116221             function downloadMember(d) {
116222                 event.preventDefault();
116223
116224                 // display the loading indicator
116225                 d3_select(this.parentNode).classed('tag-reference-loading', true);
116226                 context.loadEntity(d.id, function() {
116227                     updateDisclosureContent(_contentSelection);
116228                 });
116229             }
116230
116231             function zoomToMember(d) {
116232                 event.preventDefault();
116233
116234                 var entity = context.entity(d.id);
116235                 context.map().zoomTo(entity);
116236
116237                 // highlight the feature in case it wasn't previously on-screen
116238                 utilHighlightEntities([d.id], true, context);
116239             }
116240
116241
116242             function selectMember(d) {
116243                 event.preventDefault();
116244
116245                 // remove the hover-highlight styling
116246                 utilHighlightEntities([d.id], false, context);
116247
116248                 var entity = context.entity(d.id);
116249                 var mapExtent = context.map().extent();
116250                 if (!entity.intersects(mapExtent, context.graph())) {
116251                     // zoom to the entity if its extent is not visible now
116252                     context.map().zoomToEase(entity);
116253                 }
116254
116255                 context.enter(modeSelect(context, [d.id]));
116256             }
116257
116258
116259             function changeRole(d) {
116260                 var oldRole = d.role;
116261                 var newRole = d3_select(this).property('value');
116262
116263                 if (oldRole !== newRole) {
116264                     var member = { id: d.id, type: d.type, role: newRole };
116265                     context.perform(
116266                         actionChangeMember(d.relation.id, member, d.index),
116267                         t('operations.change_role.annotation')
116268                     );
116269                 }
116270             }
116271
116272
116273             function deleteMember(d) {
116274
116275                 // remove the hover-highlight styling
116276                 utilHighlightEntities([d.id], false, context);
116277
116278                 context.perform(
116279                     actionDeleteMember(d.relation.id, d.index),
116280                     t('operations.delete_member.annotation')
116281                 );
116282
116283                 if (!context.hasEntity(d.relation.id)) {
116284                     context.enter(modeBrowse(context));
116285                 }
116286             }
116287
116288             function updateDisclosureContent(selection) {
116289                 _contentSelection = selection;
116290
116291                 var memberships = [];
116292                 var entity = context.entity(_entityID);
116293                 entity.members.slice(0, _maxMembers).forEach(function(member, index) {
116294                     memberships.push({
116295                         index: index,
116296                         id: member.id,
116297                         type: member.type,
116298                         role: member.role,
116299                         relation: entity,
116300                         member: context.hasEntity(member.id)
116301                     });
116302                 });
116303
116304                 var list = selection.selectAll('.member-list')
116305                     .data([0]);
116306
116307                 list = list.enter()
116308                     .append('ul')
116309                     .attr('class', 'member-list')
116310                     .merge(list);
116311
116312
116313                 var items = list.selectAll('li')
116314                     .data(memberships, function(d) {
116315                         return osmEntity.key(d.relation) + ',' + d.index + ',' +
116316                             (d.member ? osmEntity.key(d.member) : 'incomplete');
116317                     });
116318
116319                 items.exit()
116320                     .each(unbind)
116321                     .remove();
116322
116323                 var itemsEnter = items.enter()
116324                     .append('li')
116325                     .attr('class', 'member-row form-field')
116326                     .classed('member-incomplete', function(d) { return !d.member; });
116327
116328                 itemsEnter
116329                     .each(function(d) {
116330                         var item = d3_select(this);
116331
116332                         var label = item
116333                             .append('label')
116334                             .attr('class', 'field-label');
116335
116336                         if (d.member) {
116337                             // highlight the member feature in the map while hovering on the list item
116338                             item
116339                                 .on('mouseover', function() {
116340                                     utilHighlightEntities([d.id], true, context);
116341                                 })
116342                                 .on('mouseout', function() {
116343                                     utilHighlightEntities([d.id], false, context);
116344                                 });
116345
116346                             var labelLink = label
116347                                 .append('span')
116348                                 .attr('class', 'label-text')
116349                                 .append('a')
116350                                 .attr('href', '#')
116351                                 .on('click', selectMember);
116352
116353                             labelLink
116354                                 .append('span')
116355                                 .attr('class', 'member-entity-type')
116356                                 .text(function(d) {
116357                                     var matched = context.presets().match(d.member, context.graph());
116358                                     return (matched && matched.name()) || utilDisplayType(d.member.id);
116359                                 });
116360
116361                             labelLink
116362                                 .append('span')
116363                                 .attr('class', 'member-entity-name')
116364                                 .text(function(d) { return utilDisplayName(d.member); });
116365
116366                             label
116367                                 .append('button')
116368                                 .attr('class', 'member-zoom')
116369                                 .attr('title', t('icons.zoom_to'))
116370                                 .call(svgIcon('#iD-icon-geolocate'))
116371                                 .on('click', zoomToMember);
116372
116373                         } else {
116374                             var labelText = label
116375                                 .append('span')
116376                                 .attr('class', 'label-text');
116377
116378                             labelText
116379                                 .append('span')
116380                                 .attr('class', 'member-entity-type')
116381                                 .text(t('inspector.' + d.type, { id: d.id }));
116382
116383                             labelText
116384                                 .append('span')
116385                                 .attr('class', 'member-entity-name')
116386                                 .text(t('inspector.incomplete', { id: d.id }));
116387
116388                             label
116389                                 .append('button')
116390                                 .attr('class', 'member-download')
116391                                 .attr('title', t('icons.download'))
116392                                 .attr('tabindex', -1)
116393                                 .call(svgIcon('#iD-icon-load'))
116394                                 .on('click', downloadMember);
116395                         }
116396                     });
116397
116398                 var wrapEnter = itemsEnter
116399                     .append('div')
116400                     .attr('class', 'form-field-input-wrap form-field-input-member');
116401
116402                 wrapEnter
116403                     .append('input')
116404                     .attr('class', 'member-role')
116405                     .property('type', 'text')
116406                     .attr('maxlength', 255)
116407                     .attr('placeholder', t('inspector.role'))
116408                     .call(utilNoAuto);
116409
116410                 wrapEnter
116411                     .append('button')
116412                     .attr('tabindex', -1)
116413                     .attr('title', t('icons.remove'))
116414                     .attr('class', 'remove form-field-button member-delete')
116415                     .call(svgIcon('#iD-operation-delete'));
116416
116417                 if (taginfo) {
116418                     wrapEnter.each(bindTypeahead);
116419                 }
116420
116421                 var dragOrigin, targetIndex;
116422
116423                 itemsEnter.call(d3_drag()
116424                     .on('start', function() {
116425                         dragOrigin = {
116426                             x: event.x,
116427                             y: event.y
116428                         };
116429                         targetIndex = null;
116430                     })
116431                     .on('drag', function(d, index) {
116432                         var x = event.x - dragOrigin.x,
116433                             y = event.y - dragOrigin.y;
116434
116435                         if (!d3_select(this).classed('dragging') &&
116436                             // don't display drag until dragging beyond a distance threshold
116437                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) { return; }
116438
116439                         d3_select(this)
116440                             .classed('dragging', true);
116441
116442                         targetIndex = null;
116443
116444                         selection.selectAll('li.member-row')
116445                             .style('transform', function(d2, index2) {
116446                                 var node = d3_select(this).node();
116447                                 if (index === index2) {
116448                                     return 'translate(' + x + 'px, ' + y + 'px)';
116449                                 } else if (index2 > index && event.y > node.offsetTop - node.offsetHeight) {
116450                                     if (targetIndex === null || index2 > targetIndex) {
116451                                         targetIndex = index2;
116452                                     }
116453                                     return 'translateY(-100%)';
116454                                 } else if (index2 < index && event.y < node.offsetTop) {
116455                                     if (targetIndex === null || index2 < targetIndex) {
116456                                         targetIndex = index2;
116457                                     }
116458                                     return 'translateY(100%)';
116459                                 }
116460                                 return null;
116461                             });
116462                     })
116463                     .on('end', function(d, index) {
116464
116465                         if (!d3_select(this).classed('dragging')) {
116466                             return;
116467                         }
116468
116469                         d3_select(this)
116470                             .classed('dragging', false);
116471
116472                         selection.selectAll('li.member-row')
116473                             .style('transform', null);
116474
116475                         if (targetIndex !== null) {
116476                             // dragged to a new position, reorder
116477                             context.perform(
116478                                 actionMoveMember(d.relation.id, index, targetIndex),
116479                                 t('operations.reorder_members.annotation')
116480                             );
116481                         }
116482                     })
116483                 );
116484
116485
116486                 // update
116487                 items = items
116488                     .merge(itemsEnter);
116489
116490                 items.select('input.member-role')
116491                     .property('value', function(d) { return d.role; })
116492                     .on('blur', changeRole)
116493                     .on('change', changeRole);
116494
116495                 items.select('button.member-delete')
116496                     .on('click', deleteMember);
116497
116498
116499
116500                 function bindTypeahead(d) {
116501                     var row = d3_select(this);
116502                     var role = row.selectAll('input.member-role');
116503                     var origValue = role.property('value');
116504
116505                     function sort(value, data) {
116506                         var sameletter = [];
116507                         var other = [];
116508                         for (var i = 0; i < data.length; i++) {
116509                             if (data[i].value.substring(0, value.length) === value) {
116510                                 sameletter.push(data[i]);
116511                             } else {
116512                                 other.push(data[i]);
116513                             }
116514                         }
116515                         return sameletter.concat(other);
116516                     }
116517
116518                     role.call(uiCombobox(context, 'member-role')
116519                         .fetcher(function(role, callback) {
116520                             // The `geometry` param is used in the `taginfo.js` interface for
116521                             // filtering results, as a key into the `tag_members_fractions`
116522                             // object.  If we don't know the geometry because the member is
116523                             // not yet downloaded, it's ok to guess based on type.
116524                             var geometry;
116525                             if (d.member) {
116526                                 geometry = context.geometry(d.member.id);
116527                             } else if (d.type === 'relation') {
116528                                 geometry = 'relation';
116529                             } else if (d.type === 'way') {
116530                                 geometry = 'line';
116531                             } else {
116532                                 geometry = 'point';
116533                             }
116534
116535                             var rtype = entity.tags.type;
116536                             taginfo.roles({
116537                                 debounce: true,
116538                                 rtype: rtype || '',
116539                                 geometry: geometry,
116540                                 query: role
116541                             }, function(err, data) {
116542                                 if (!err) { callback(sort(role, data)); }
116543                             });
116544                         })
116545                         .on('cancel', function() {
116546                             role.property('value', origValue);
116547                         })
116548                     );
116549                 }
116550
116551
116552                 function unbind() {
116553                     var row = d3_select(this);
116554
116555                     row.selectAll('input.member-role')
116556                         .call(uiCombobox.off);
116557                 }
116558             }
116559
116560             function rawMemberEditor(selection) {
116561                 var entity = context.entity(_entityID);
116562
116563                 var gt = entity.members.length > _maxMembers ? '>' : '';
116564                 selection.call(uiDisclosure(context, 'raw_member_editor', true)
116565                     .title(t('inspector.members_count', { count: gt + entity.members.slice(0, _maxMembers).length }))
116566                     .expanded(true)
116567                     .updatePreference(false)
116568                     .on('toggled', function(expanded) {
116569                         if (expanded) {
116570                             selection.node().parentNode.scrollTop += 200;
116571                         }
116572                     })
116573                     .content(updateDisclosureContent)
116574                 );
116575             }
116576
116577             rawMemberEditor.entityID = function(val) {
116578                 if (!arguments.length) { return _entityID; }
116579                 _entityID = val;
116580                 return rawMemberEditor;
116581             };
116582
116583
116584             return rawMemberEditor;
116585         }
116586
116587         function uiRawMembershipEditor(context) {
116588             var taginfo = services$1.taginfo;
116589             var nearbyCombo = uiCombobox(context, 'parent-relation')
116590                 .minItems(1)
116591                 .fetcher(fetchNearbyRelations)
116592                 .itemsMouseEnter(function(d) {
116593                     if (d.relation) { utilHighlightEntities([d.relation.id], true, context); }
116594                 })
116595                 .itemsMouseLeave(function(d) {
116596                     if (d.relation) { utilHighlightEntities([d.relation.id], false, context); }
116597                 });
116598             var _inChange = false;
116599             var _entityID;
116600             var _showBlank;
116601
116602
116603             function selectRelation(d) {
116604                 event.preventDefault();
116605
116606                 // remove the hover-highlight styling
116607                 utilHighlightEntities([d.relation.id], false, context);
116608
116609                 context.enter(modeSelect(context, [d.relation.id]));
116610             }
116611
116612
116613             function changeRole(d) {
116614                 if (d === 0) { return; }    // called on newrow (shoudn't happen)
116615                 if (_inChange) { return; }  // avoid accidental recursive call #5731
116616
116617                 var oldRole = d.member.role;
116618                 var newRole = d3_select(this).property('value');
116619
116620                 if (oldRole !== newRole) {
116621                     _inChange = true;
116622                     context.perform(
116623                         actionChangeMember(d.relation.id, Object.assign({}, d.member, { role: newRole }), d.index),
116624                         t('operations.change_role.annotation')
116625                     );
116626                 }
116627                 _inChange = false;
116628             }
116629
116630
116631             function addMembership(d, role) {
116632                 this.blur();           // avoid keeping focus on the button
116633                 _showBlank = false;
116634
116635                 var member = { id: _entityID, type: context.entity(_entityID).type, role: role };
116636
116637                 if (d.relation) {
116638                     context.perform(
116639                         actionAddMember(d.relation.id, member),
116640                         t('operations.add_member.annotation')
116641                     );
116642
116643                 } else {
116644                     var relation = osmRelation();
116645                     context.perform(
116646                         actionAddEntity(relation),
116647                         actionAddMember(relation.id, member),
116648                         t('operations.add.annotation.relation')
116649                     );
116650
116651                     context.enter(modeSelect(context, [relation.id]).newFeature(true));
116652                 }
116653             }
116654
116655
116656             function deleteMembership(d) {
116657                 this.blur();           // avoid keeping focus on the button
116658                 if (d === 0) { return; }   // called on newrow (shoudn't happen)
116659
116660                 // remove the hover-highlight styling
116661                 utilHighlightEntities([d.relation.id], false, context);
116662
116663                 context.perform(
116664                     actionDeleteMember(d.relation.id, d.index),
116665                     t('operations.delete_member.annotation')
116666                 );
116667             }
116668
116669
116670             function fetchNearbyRelations(q, callback) {
116671                 var newRelation = { relation: null, value: t('inspector.new_relation') };
116672
116673                 var result = [];
116674
116675                 var graph = context.graph();
116676
116677                 function baseDisplayLabel(entity) {
116678                     var matched = context.presets().match(entity, graph);
116679                     var presetName = (matched && matched.name()) || t('inspector.relation');
116680                     var entityName = utilDisplayName(entity) || '';
116681
116682                     return presetName + ' ' + entityName;
116683                 }
116684
116685                 var explicitRelation = q && context.hasEntity(q.toLowerCase());
116686                 if (explicitRelation && explicitRelation.type === 'relation' && explicitRelation.id !== _entityID) {
116687                     // loaded relation is specified explicitly, only show that
116688
116689                     result.push({
116690                         relation: explicitRelation,
116691                         value: baseDisplayLabel(explicitRelation) + ' ' + explicitRelation.id
116692                     });
116693                 } else {
116694
116695                     context.intersects(context.extent()).forEach(function(entity) {
116696                         if (entity.type !== 'relation' || entity.id === _entityID) { return; }
116697
116698                         var value = baseDisplayLabel(entity);
116699                         if (q && (value + ' ' + entity.id).toLowerCase().indexOf(q.toLowerCase()) === -1) { return; }
116700
116701                         result.push({ relation: entity, value: value });
116702                     });
116703
116704                     result.sort(function(a, b) {
116705                         return osmRelation.creationOrder(a.relation, b.relation);
116706                     });
116707
116708                     // Dedupe identical names by appending relation id - see #2891
116709                     var dupeGroups = Object.values(utilArrayGroupBy(result, 'value'))
116710                         .filter(function(v) { return v.length > 1; });
116711
116712                     dupeGroups.forEach(function(group) {
116713                         group.forEach(function(obj) {
116714                             obj.value += ' ' + obj.relation.id;
116715                         });
116716                     });
116717                 }
116718
116719                 result.forEach(function(obj) {
116720                     obj.title = obj.value;
116721                 });
116722
116723                 result.unshift(newRelation);
116724                 callback(result);
116725             }
116726
116727
116728             function rawMembershipEditor(selection) {
116729                 var entity = context.entity(_entityID);
116730                 var parents = context.graph().parentRelations(entity);
116731                 var memberships = [];
116732
116733                 parents.slice(0, 1000).forEach(function(relation) {
116734                     relation.members.forEach(function(member, index) {
116735                         if (member.id === entity.id) {
116736                             memberships.push({ relation: relation, member: member, index: index });
116737                         }
116738                     });
116739                 });
116740
116741                 var gt = parents.length > 1000 ? '>' : '';
116742                 selection.call(uiDisclosure(context, 'raw_membership_editor', true)
116743                     .title(t('inspector.relations_count', { count: gt + memberships.length }))
116744                     .expanded(true)
116745                     .updatePreference(false)
116746                     .on('toggled', function(expanded) {
116747                         if (expanded) { selection.node().parentNode.scrollTop += 200; }
116748                     })
116749                     .content(content)
116750                 );
116751
116752
116753                 function content(selection) {
116754                     var list = selection.selectAll('.member-list')
116755                         .data([0]);
116756
116757                     list = list.enter()
116758                         .append('ul')
116759                         .attr('class', 'member-list')
116760                         .merge(list);
116761
116762
116763                     var items = list.selectAll('li.member-row-normal')
116764                         .data(memberships, function(d) {
116765                             return osmEntity.key(d.relation) + ',' + d.index;
116766                         });
116767
116768                     items.exit()
116769                         .each(unbind)
116770                         .remove();
116771
116772                     // Enter
116773                     var itemsEnter = items.enter()
116774                         .append('li')
116775                         .attr('class', 'member-row member-row-normal form-field');
116776
116777                     // highlight the relation in the map while hovering on the list item
116778                     itemsEnter.on('mouseover', function(d) {
116779                             utilHighlightEntities([d.relation.id], true, context);
116780                         })
116781                         .on('mouseout', function(d) {
116782                             utilHighlightEntities([d.relation.id], false, context);
116783                         });
116784
116785                     var labelEnter = itemsEnter
116786                         .append('label')
116787                         .attr('class', 'field-label')
116788                         .append('span')
116789                         .attr('class', 'label-text')
116790                         .append('a')
116791                         .attr('href', '#')
116792                         .on('click', selectRelation);
116793
116794                     labelEnter
116795                         .append('span')
116796                         .attr('class', 'member-entity-type')
116797                         .text(function(d) {
116798                             var matched = context.presets().match(d.relation, context.graph());
116799                             return (matched && matched.name()) || t('inspector.relation');
116800                         });
116801
116802                     labelEnter
116803                         .append('span')
116804                         .attr('class', 'member-entity-name')
116805                         .text(function(d) { return utilDisplayName(d.relation); });
116806
116807                     var wrapEnter = itemsEnter
116808                         .append('div')
116809                         .attr('class', 'form-field-input-wrap form-field-input-member');
116810
116811                     wrapEnter
116812                         .append('input')
116813                         .attr('class', 'member-role')
116814                         .property('type', 'text')
116815                         .attr('maxlength', 255)
116816                         .attr('placeholder', t('inspector.role'))
116817                         .call(utilNoAuto)
116818                         .property('value', function(d) { return d.member.role; })
116819                         .on('blur', changeRole)
116820                         .on('change', changeRole);
116821
116822                     wrapEnter
116823                         .append('button')
116824                         .attr('tabindex', -1)
116825                         .attr('class', 'remove form-field-button member-delete')
116826                         .call(svgIcon('#iD-operation-delete'))
116827                         .on('click', deleteMembership);
116828
116829                     if (taginfo) {
116830                         wrapEnter.each(bindTypeahead);
116831                     }
116832
116833
116834                     var newMembership = list.selectAll('.member-row-new')
116835                         .data(_showBlank ? [0] : []);
116836
116837                     // Exit
116838                     newMembership.exit()
116839                         .remove();
116840
116841                     // Enter
116842                     var newMembershipEnter = newMembership.enter()
116843                         .append('li')
116844                         .attr('class', 'member-row member-row-new form-field');
116845
116846                     newMembershipEnter
116847                         .append('label')
116848                         .attr('class', 'field-label')
116849                         .append('input')
116850                         .attr('placeholder', t('inspector.choose_relation'))
116851                         .attr('type', 'text')
116852                         .attr('class', 'member-entity-input')
116853                         .call(utilNoAuto);
116854
116855                     var newWrapEnter = newMembershipEnter
116856                         .append('div')
116857                         .attr('class', 'form-field-input-wrap form-field-input-member');
116858
116859                     newWrapEnter
116860                         .append('input')
116861                         .attr('class', 'member-role')
116862                         .property('type', 'text')
116863                         .attr('maxlength', 255)
116864                         .attr('placeholder', t('inspector.role'))
116865                         .call(utilNoAuto);
116866
116867                     newWrapEnter
116868                         .append('button')
116869                         .attr('tabindex', -1)
116870                         .attr('class', 'remove form-field-button member-delete')
116871                         .call(svgIcon('#iD-operation-delete'))
116872                         .on('click', function() {
116873                             list.selectAll('.member-row-new')
116874                                 .remove();
116875                         });
116876
116877                     // Update
116878                     newMembership = newMembership
116879                         .merge(newMembershipEnter);
116880
116881                     newMembership.selectAll('.member-entity-input')
116882                         .on('blur', cancelEntity)   // if it wasn't accepted normally, cancel it
116883                         .call(nearbyCombo
116884                             .on('accept', acceptEntity)
116885                             .on('cancel', cancelEntity)
116886                         );
116887
116888
116889                     // Container for the Add button
116890                     var addRow = selection.selectAll('.add-row')
116891                         .data([0]);
116892
116893                     // enter
116894                     var addRowEnter = addRow.enter()
116895                         .append('div')
116896                         .attr('class', 'add-row');
116897
116898                     var addRelationButton = addRowEnter
116899                         .append('button')
116900                         .attr('class', 'add-relation');
116901
116902                     addRelationButton
116903                         .call(svgIcon('#iD-icon-plus', 'light'));
116904                     addRelationButton
116905                         .call(tooltip().title(t('inspector.add_to_relation')).placement(textDirection === 'ltr' ? 'right' : 'left'));
116906
116907                     addRowEnter
116908                         .append('div')
116909                         .attr('class', 'space-value');   // preserve space
116910
116911                     addRowEnter
116912                         .append('div')
116913                         .attr('class', 'space-buttons');  // preserve space
116914
116915                     // update
116916                     addRow = addRow
116917                         .merge(addRowEnter);
116918
116919                     addRow.select('.add-relation')
116920                         .on('click', function() {
116921                             _showBlank = true;
116922                             content(selection);
116923                             list.selectAll('.member-entity-input').node().focus();
116924                         });
116925
116926
116927                     function acceptEntity(d) {
116928                         if (!d) {
116929                             cancelEntity();
116930                             return;
116931                         }
116932                         // remove hover-higlighting
116933                         if (d.relation) { utilHighlightEntities([d.relation.id], false, context); }
116934
116935                         var role = list.selectAll('.member-row-new .member-role').property('value');
116936                         addMembership(d, role);
116937                     }
116938
116939
116940                     function cancelEntity() {
116941                         var input = newMembership.selectAll('.member-entity-input');
116942                         input.property('value', '');
116943
116944                         // remove hover-higlighting
116945                         context.surface().selectAll('.highlighted')
116946                             .classed('highlighted', false);
116947                     }
116948
116949
116950                     function bindTypeahead(d) {
116951                         var row = d3_select(this);
116952                         var role = row.selectAll('input.member-role');
116953                         var origValue = role.property('value');
116954
116955                         function sort(value, data) {
116956                             var sameletter = [];
116957                             var other = [];
116958                             for (var i = 0; i < data.length; i++) {
116959                                 if (data[i].value.substring(0, value.length) === value) {
116960                                     sameletter.push(data[i]);
116961                                 } else {
116962                                     other.push(data[i]);
116963                                 }
116964                             }
116965                             return sameletter.concat(other);
116966                         }
116967
116968                         role.call(uiCombobox(context, 'member-role')
116969                             .fetcher(function(role, callback) {
116970                                 var rtype = d.relation.tags.type;
116971                                 taginfo.roles({
116972                                     debounce: true,
116973                                     rtype: rtype || '',
116974                                     geometry: context.geometry(_entityID),
116975                                     query: role
116976                                 }, function(err, data) {
116977                                     if (!err) { callback(sort(role, data)); }
116978                                 });
116979                             })
116980                             .on('cancel', function() {
116981                                 role.property('value', origValue);
116982                             })
116983                         );
116984                     }
116985
116986
116987                     function unbind() {
116988                         var row = d3_select(this);
116989
116990                         row.selectAll('input.member-role')
116991                             .call(uiCombobox.off);
116992                     }
116993                 }
116994             }
116995
116996
116997             rawMembershipEditor.entityID = function(val) {
116998                 if (!arguments.length) { return _entityID; }
116999                 _entityID = val;
117000                 _showBlank = false;
117001                 return rawMembershipEditor;
117002             };
117003
117004
117005             return rawMembershipEditor;
117006         }
117007
117008         // This currently only works with the 'restrictions' field
117009         // It borrows some code from uiHelp
117010
117011         function uiFieldHelp(context, fieldName) {
117012             var fieldHelp = {};
117013             var _inspector = d3_select(null);
117014             var _wrap = d3_select(null);
117015             var _body = d3_select(null);
117016
117017             var fieldHelpKeys = {
117018                 restrictions: [
117019                     ['about',[
117020                         'about',
117021                         'from_via_to',
117022                         'maxdist',
117023                         'maxvia'
117024                     ]],
117025                     ['inspecting',[
117026                         'about',
117027                         'from_shadow',
117028                         'allow_shadow',
117029                         'restrict_shadow',
117030                         'only_shadow',
117031                         'restricted',
117032                         'only'
117033                     ]],
117034                     ['modifying',[
117035                         'about',
117036                         'indicators',
117037                         'allow_turn',
117038                         'restrict_turn',
117039                         'only_turn'
117040                     ]],
117041                     ['tips',[
117042                         'simple',
117043                         'simple_example',
117044                         'indirect',
117045                         'indirect_example',
117046                         'indirect_noedit'
117047                     ]]
117048                 ]
117049             };
117050
117051             var fieldHelpHeadings = {};
117052
117053             var replacements = {
117054                 distField: t('restriction.controls.distance'),
117055                 viaField: t('restriction.controls.via'),
117056                 fromShadow: icon('#iD-turn-shadow', 'pre-text shadow from'),
117057                 allowShadow: icon('#iD-turn-shadow', 'pre-text shadow allow'),
117058                 restrictShadow: icon('#iD-turn-shadow', 'pre-text shadow restrict'),
117059                 onlyShadow: icon('#iD-turn-shadow', 'pre-text shadow only'),
117060                 allowTurn: icon('#iD-turn-yes', 'pre-text turn'),
117061                 restrictTurn: icon('#iD-turn-no', 'pre-text turn'),
117062                 onlyTurn: icon('#iD-turn-only', 'pre-text turn')
117063             };
117064
117065
117066             // For each section, squash all the texts into a single markdown document
117067             var docs = fieldHelpKeys[fieldName].map(function(key) {
117068                 var helpkey = 'help.field.' + fieldName + '.' + key[0];
117069                 var text = key[1].reduce(function(all, part) {
117070                     var subkey = helpkey + '.' + part;
117071                     var depth = fieldHelpHeadings[subkey];                     // is this subkey a heading?
117072                     var hhh = depth ? Array(depth + 1).join('#') + ' ' : '';   // if so, prepend with some ##'s
117073                     return all + hhh + t(subkey, replacements) + '\n\n';
117074                 }, '');
117075
117076                 return {
117077                     key: helpkey,
117078                     title: t(helpkey + '.title'),
117079                     html: marked_1(text.trim())
117080                 };
117081             });
117082
117083
117084             function show() {
117085                 updatePosition();
117086
117087                 _body
117088                     .classed('hide', false)
117089                     .style('opacity', '0')
117090                     .transition()
117091                     .duration(200)
117092                     .style('opacity', '1');
117093             }
117094
117095
117096             function hide() {
117097                 _body
117098                     .classed('hide', true)
117099                     .transition()
117100                     .duration(200)
117101                     .style('opacity', '0')
117102                     .on('end', function () {
117103                         _body.classed('hide', true);
117104                     });
117105             }
117106
117107
117108             function clickHelp(index) {
117109                 var d = docs[index];
117110                 var tkeys = fieldHelpKeys[fieldName][index][1];
117111
117112                 _body.selectAll('.field-help-nav-item')
117113                     .classed('active', function(d, i) { return i === index; });
117114
117115                 var content = _body.selectAll('.field-help-content')
117116                     .html(d.html);
117117
117118                 // class the paragraphs so we can find and style them
117119                 content.selectAll('p')
117120                     .attr('class', function(d, i) { return tkeys[i]; });
117121
117122                 // insert special content for certain help sections
117123                 if (d.key === 'help.field.restrictions.inspecting') {
117124                     content
117125                         .insert('img', 'p.from_shadow')
117126                         .attr('class', 'field-help-image cf')
117127                         .attr('src', context.imagePath('tr_inspect.gif'));
117128
117129                 } else if (d.key === 'help.field.restrictions.modifying') {
117130                     content
117131                         .insert('img', 'p.allow_turn')
117132                         .attr('class', 'field-help-image cf')
117133                         .attr('src', context.imagePath('tr_modify.gif'));
117134                 }
117135             }
117136
117137
117138             fieldHelp.button = function(selection) {
117139                 if (_body.empty()) { return; }
117140
117141                 var button = selection.selectAll('.field-help-button')
117142                     .data([0]);
117143
117144                 // enter/update
117145                 button.enter()
117146                     .append('button')
117147                     .attr('class', 'field-help-button')
117148                     .attr('tabindex', -1)
117149                     .call(svgIcon('#iD-icon-help'))
117150                     .merge(button)
117151                     .on('click', function () {
117152                         event.stopPropagation();
117153                         event.preventDefault();
117154                         if (_body.classed('hide')) {
117155                             show();
117156                         } else {
117157                             hide();
117158                         }
117159                     });
117160             };
117161
117162
117163             function updatePosition() {
117164                 var wrap = _wrap.node();
117165                 var inspector = _inspector.node();
117166                 var wRect = wrap.getBoundingClientRect();
117167                 var iRect = inspector.getBoundingClientRect();
117168
117169                 _body
117170                     .style('top', wRect.top + inspector.scrollTop - iRect.top + 'px');
117171             }
117172
117173
117174             fieldHelp.body = function(selection) {
117175                 // This control expects the field to have a form-field-input-wrap div
117176                 _wrap = selection.selectAll('.form-field-input-wrap');
117177                 if (_wrap.empty()) { return; }
117178
117179                 // absolute position relative to the inspector, so it "floats" above the fields
117180                 _inspector = d3_select('#sidebar .entity-editor-pane .inspector-body');
117181                 if (_inspector.empty()) { return; }
117182
117183                 _body = _inspector.selectAll('.field-help-body')
117184                     .data([0]);
117185
117186                 var enter = _body.enter()
117187                     .append('div')
117188                     .attr('class', 'field-help-body hide');   // initially hidden
117189
117190                 var titleEnter = enter
117191                     .append('div')
117192                     .attr('class', 'field-help-title cf');
117193
117194                 titleEnter
117195                     .append('h2')
117196                     .attr('class', ((textDirection === 'rtl') ? 'fr' : 'fl'))
117197                     .text(t('help.field.' + fieldName + '.title'));
117198
117199                 titleEnter
117200                     .append('button')
117201                     .attr('class', 'fr close')
117202                     .on('click', function() {
117203                         event.stopPropagation();
117204                         event.preventDefault();
117205                         hide();
117206                     })
117207                     .call(svgIcon('#iD-icon-close'));
117208
117209                 var navEnter = enter
117210                     .append('div')
117211                     .attr('class', 'field-help-nav cf');
117212
117213                 var titles = docs.map(function(d) { return d.title; });
117214                 navEnter.selectAll('.field-help-nav-item')
117215                     .data(titles)
117216                     .enter()
117217                     .append('div')
117218                     .attr('class', 'field-help-nav-item')
117219                     .text(function(d) { return d; })
117220                     .on('click', function(d, i) {
117221                         event.stopPropagation();
117222                         event.preventDefault();
117223                         clickHelp(i);
117224                     });
117225
117226                 enter
117227                     .append('div')
117228                     .attr('class', 'field-help-content');
117229
117230                 _body = _body
117231                     .merge(enter);
117232
117233                 clickHelp(0);
117234             };
117235
117236
117237             return fieldHelp;
117238         }
117239
117240         function uiFieldCheck(field, context) {
117241             var dispatch$1 = dispatch('change');
117242             var options = field.strings && field.strings.options;
117243             var values = [];
117244             var texts = [];
117245
117246             var input = d3_select(null);
117247             var text = d3_select(null);
117248             var label = d3_select(null);
117249             var reverser = d3_select(null);
117250
117251             var _impliedYes;
117252             var _entityID;
117253             var _value;
117254
117255
117256             if (options) {
117257                 for (var k in options) {
117258                     values.push(k === 'undefined' ? undefined : k);
117259                     texts.push(field.t('options.' + k, { 'default': options[k] }));
117260                 }
117261             } else {
117262                 values = [undefined, 'yes'];
117263                 texts = [t('inspector.unknown'), t('inspector.check.yes')];
117264                 if (field.type !== 'defaultCheck') {
117265                     values.push('no');
117266                     texts.push(t('inspector.check.no'));
117267                 }
117268             }
117269
117270
117271             // Checks tags to see whether an undefined value is "Assumed to be Yes"
117272             function checkImpliedYes() {
117273                 _impliedYes = (field.id === 'oneway_yes');
117274
117275                 // hack: pretend `oneway` field is a `oneway_yes` field
117276                 // where implied oneway tag exists (e.g. `junction=roundabout`) #2220, #1841
117277                 if (field.id === 'oneway') {
117278                     var entity = context.entity(_entityID);
117279                     for (var key in entity.tags) {
117280                         if (key in osmOneWayTags && (entity.tags[key] in osmOneWayTags[key])) {
117281                             _impliedYes = true;
117282                             texts[0] = t('presets.fields.oneway_yes.options.undefined');
117283                             break;
117284                         }
117285                     }
117286                 }
117287             }
117288
117289
117290             function reverserHidden() {
117291                 if (!d3_select('div.inspector-hover').empty()) { return true; }
117292                 return !(_value === 'yes' || (_impliedYes && !_value));
117293             }
117294
117295
117296             function reverserSetText(selection) {
117297                 var entity = context.hasEntity(_entityID);
117298                 if (reverserHidden() || !entity) { return selection; }
117299
117300                 var first = entity.first();
117301                 var last = entity.isClosed() ? entity.nodes[entity.nodes.length - 2] : entity.last();
117302                 var pseudoDirection = first < last;
117303                 var icon = pseudoDirection ? '#iD-icon-forward' : '#iD-icon-backward';
117304
117305                 selection.selectAll('.reverser-span')
117306                     .text(t('inspector.check.reverser'))
117307                     .call(svgIcon(icon, 'inline'));
117308
117309                 return selection;
117310             }
117311
117312
117313             var check = function(selection) {
117314                 checkImpliedYes();
117315
117316                 label = selection.selectAll('.form-field-input-wrap')
117317                     .data([0]);
117318
117319                 var enter = label.enter()
117320                     .append('label')
117321                     .attr('class', 'form-field-input-wrap form-field-input-check');
117322
117323                 enter
117324                     .append('input')
117325                     .property('indeterminate', field.type !== 'defaultCheck')
117326                     .attr('type', 'checkbox')
117327                     .attr('id', 'preset-input-' + field.safeid);
117328
117329                 enter
117330                     .append('span')
117331                     .text(texts[0])
117332                     .attr('class', 'value');
117333
117334                 if (field.type === 'onewayCheck') {
117335                     enter
117336                         .append('a')
117337                         .attr('id', 'preset-input-' + field.safeid + '-reverser')
117338                         .attr('class', 'reverser button' + (reverserHidden() ? ' hide' : ''))
117339                         .attr('href', '#')
117340                         .append('span')
117341                         .attr('class', 'reverser-span');
117342                 }
117343
117344                 label = label.merge(enter);
117345                 input = label.selectAll('input');
117346                 text = label.selectAll('span.value');
117347
117348                 input
117349                     .on('click', function() {
117350                         event.stopPropagation();
117351                         var t = {};
117352                         t[field.key] = values[(values.indexOf(_value) + 1) % values.length];
117353
117354                         // Don't cycle through `alternating` or `reversible` states - #4970
117355                         // (They are supported as translated strings, but should not toggle with clicks)
117356                         if (t[field.key] === 'reversible' || t[field.key] === 'alternating') {
117357                             t[field.key] = values[0];
117358                         }
117359
117360                         dispatch$1.call('change', this, t);
117361                     });
117362
117363                 if (field.type === 'onewayCheck') {
117364                     reverser = label.selectAll('.reverser');
117365
117366                     reverser
117367                         .call(reverserSetText)
117368                         .on('click', function() {
117369                             event.preventDefault();
117370                             event.stopPropagation();
117371                             context.perform(
117372                                 actionReverse(_entityID),
117373                                 t('operations.reverse.annotation')
117374                             );
117375                             
117376                             // must manually revalidate since no 'change' event was called
117377                             context.validator().validate();
117378
117379                             d3_select(this)
117380                                 .call(reverserSetText);
117381                         });
117382                 }
117383             };
117384
117385
117386             check.entity = function(_) {
117387                 if (!arguments.length) { return context.hasEntity(_entityID); }
117388                 _entityID = _.id;
117389                 return check;
117390             };
117391
117392
117393             check.tags = function(tags) {
117394
117395                 function isChecked(val) {
117396                     return val !== 'no' && val !== '' && val !== undefined && val !== null;
117397                 }
117398
117399                 function textFor(val) {
117400                     if (val === '') { val = undefined; }
117401                     var index = values.indexOf(val);
117402                     return (index !== -1 ? texts[index] : ('"' + val + '"'));
117403                 }
117404
117405                 checkImpliedYes();
117406                 _value = tags[field.key] && tags[field.key].toLowerCase();
117407
117408                 if (field.type === 'onewayCheck' && (_value === '1' || _value === '-1')) {
117409                     _value = 'yes';
117410                 }
117411
117412                 input
117413                     .property('indeterminate', field.type !== 'defaultCheck' && !_value)
117414                     .property('checked', isChecked(_value));
117415
117416                 text
117417                     .text(textFor(_value));
117418
117419                 label
117420                     .classed('set', !!_value);
117421
117422                 if (field.type === 'onewayCheck') {
117423                     reverser
117424                         .classed('hide', reverserHidden())
117425                         .call(reverserSetText);
117426                 }
117427             };
117428
117429
117430             check.focus = function() {
117431                 input.node().focus();
117432             };
117433
117434             return utilRebind(check, dispatch$1, 'on');
117435         }
117436
117437         function uiFieldCombo(field, context) {
117438             var dispatch$1 = dispatch('change');
117439             var taginfo = services$1.taginfo;
117440             var isMulti = (field.type === 'multiCombo');
117441             var isNetwork = (field.type === 'networkCombo');
117442             var isSemi = (field.type === 'semiCombo');
117443             var optstrings = field.strings && field.strings.options;
117444             var optarray = field.options;
117445             var snake_case = (field.snake_case || (field.snake_case === undefined));
117446             var caseSensitive = field.caseSensitive;
117447             var combobox = uiCombobox(context, 'combo-' + field.safeid)
117448                 .caseSensitive(caseSensitive)
117449                 .minItems(isMulti || isSemi ? 1 : 2);
117450             var container = d3_select(null);
117451             var inputWrap = d3_select(null);
117452             var input = d3_select(null);
117453             var _comboData = [];
117454             var _multiData = [];
117455             var _entity;
117456             var _countryCode;
117457
117458             // ensure multiCombo field.key ends with a ':'
117459             if (isMulti && /[^:]$/.test(field.key)) {
117460                 field.key += ':';
117461             }
117462
117463
117464             function snake(s) {
117465                 return s.replace(/\s+/g, '_');
117466             }
117467
117468             function unsnake(s) {
117469                 return s.replace(/_+/g, ' ');
117470             }
117471
117472             function clean(s) {
117473                 return s.split(';')
117474                     .map(function(s) { return s.trim(); })
117475                     .join(';');
117476             }
117477
117478
117479             // returns the tag value for a display value
117480             // (for multiCombo, dval should be the key suffix, not the entire key)
117481             function tagValue(dval) {
117482                 dval = clean(dval || '');
117483
117484                 if (optstrings) {
117485                     var found = _comboData.find(function(o) {
117486                         return o.key && clean(o.value) === dval;
117487                     });
117488                     if (found) {
117489                         return found.key;
117490                     }
117491                 }
117492
117493                 if (field.type === 'typeCombo' && !dval) {
117494                     return 'yes';
117495                 }
117496
117497                 return (snake_case ? snake(dval) : dval) || undefined;
117498             }
117499
117500
117501             // returns the display value for a tag value
117502             // (for multiCombo, tval should be the key suffix, not the entire key)
117503             function displayValue(tval) {
117504                 tval = tval || '';
117505
117506                 if (optstrings) {
117507                     var found = _comboData.find(function(o) {
117508                         return o.key === tval && o.value;
117509                     });
117510                     if (found) {
117511                         return found.value;
117512                     }
117513                 }
117514
117515                 if (field.type === 'typeCombo' && tval.toLowerCase() === 'yes') {
117516                     return '';
117517                 }
117518
117519                 return snake_case ? unsnake(tval) : tval;
117520             }
117521
117522
117523             // Compute the difference between arrays of objects by `value` property
117524             //
117525             // objectDifference([{value:1}, {value:2}, {value:3}], [{value:2}])
117526             // > [{value:1}, {value:3}]
117527             //
117528             function objectDifference(a, b) {
117529                 return a.filter(function(d1) {
117530                     return !b.some(function(d2) { return d1.value === d2.value; });
117531                 });
117532             }
117533
117534
117535             function initCombo(selection, attachTo) {
117536                 if (optstrings) {
117537                     selection.attr('readonly', 'readonly');
117538                     selection.call(combobox, attachTo);
117539                     setStaticValues(setPlaceholder);
117540
117541                 } else if (optarray) {
117542                     selection.call(combobox, attachTo);
117543                     setStaticValues(setPlaceholder);
117544
117545                 } else if (taginfo) {
117546                     selection.call(combobox.fetcher(setTaginfoValues), attachTo);
117547                     setTaginfoValues('', setPlaceholder);
117548                 }
117549             }
117550
117551
117552             function setStaticValues(callback) {
117553                 if (!(optstrings || optarray)) { return; }
117554
117555                 if (optstrings) {
117556                     _comboData = Object.keys(optstrings).map(function(k) {
117557                         var v = field.t('options.' + k, { 'default': optstrings[k] });
117558                         return {
117559                             key: k,
117560                             value: v,
117561                             title: v
117562                         };
117563                     });
117564
117565                 } else if (optarray) {
117566                     _comboData = optarray.map(function(k) {
117567                         var v = snake_case ? unsnake(k) : k;
117568                         return {
117569                             key: k,
117570                             value: v,
117571                             title: v
117572                         };
117573                     });
117574                 }
117575
117576                 combobox.data(objectDifference(_comboData, _multiData));
117577                 if (callback) { callback(_comboData); }
117578             }
117579
117580
117581             function setTaginfoValues(q, callback) {
117582                 var fn = isMulti ? 'multikeys' : 'values';
117583                 var query = (isMulti ? field.key : '') + q;
117584                 var hasCountryPrefix = isNetwork && _countryCode && _countryCode.indexOf(q.toLowerCase()) === 0;
117585                 if (hasCountryPrefix) {
117586                     query = _countryCode + ':';
117587                 }
117588
117589                 var params = {
117590                     debounce: (q !== ''),
117591                     key: field.key,
117592                     query: query
117593                 };
117594
117595                 if (_entity) {
117596                     params.geometry = context.geometry(_entity.id);
117597                 }
117598
117599                 taginfo[fn](params, function(err, data) {
117600                     if (err) { return; }
117601
117602                     data = data.filter(function(d) {
117603
117604                         if (field.type === 'typeCombo' && d.value === 'yes') {
117605                             // don't show the fallback value
117606                             return false;
117607                         }
117608
117609                         // don't show values with very low usage
117610                         return !d.count || d.count > 10;
117611                     });
117612
117613                     var deprecatedValues = osmEntity.deprecatedTagValuesByKey()[field.key];
117614                     if (deprecatedValues) {
117615                         // don't suggest deprecated tag values
117616                         data = data.filter(function(d) {
117617                             return deprecatedValues.indexOf(d.value) === -1;
117618                         });
117619                     }
117620
117621                     if (hasCountryPrefix) {
117622                         data = data.filter(function(d) {
117623                             return d.value.toLowerCase().indexOf(_countryCode + ':') === 0;
117624                         });
117625                     }
117626
117627                     // hide the caret if there are no suggestions
117628                     container.classed('empty-combobox', data.length === 0);
117629
117630                     _comboData = data.map(function(d) {
117631                         var k = d.value;
117632                         if (isMulti) { k = k.replace(field.key, ''); }
117633                         var v = snake_case ? unsnake(k) : k;
117634                         return {
117635                             key: k,
117636                             value: v,
117637                             title: isMulti ? v : d.title
117638                         };
117639                     });
117640
117641                     _comboData = objectDifference(_comboData, _multiData);
117642                     if (callback) { callback(_comboData); }
117643                 });
117644             }
117645
117646
117647             function setPlaceholder(values) {
117648                 var ph;
117649
117650                 if (isMulti || isSemi) {
117651                     ph = field.placeholder() || t('inspector.add');
117652                 } else {
117653                     var vals = values
117654                         .map(function(d) { return d.value; })
117655                         .filter(function(s) { return s.length < 20; });
117656
117657                     var placeholders = vals.length > 1 ? vals : values.map(function(d) { return d.key; });
117658                     ph = field.placeholder() || placeholders.slice(0, 3).join(', ');
117659                 }
117660
117661                 if (!/(…|\.\.\.)$/.test(ph)) {
117662                     ph += '…';
117663                 }
117664
117665                 container.selectAll('input')
117666                     .attr('placeholder', ph);
117667             }
117668
117669
117670             function change() {
117671                 var t = {};
117672                 var val;
117673
117674                 if (isMulti || isSemi) {
117675                     val = tagValue(utilGetSetValue(input).replace(/,/g, ';')) || '';
117676                     container.classed('active', false);
117677                     utilGetSetValue(input, '');
117678
117679                     var vals = val.split(';').filter(Boolean);
117680                     if (!vals.length) { return; }
117681
117682                     if (isMulti) {
117683                         utilArrayUniq(vals).forEach(function(v) {
117684                             var key = field.key + v;
117685                             if (_entity) {
117686                                 // don't set a multicombo value to 'yes' if it already has a non-'no' value
117687                                 // e.g. `language:de=main`
117688                                 var old = _entity.tags[key] || '';
117689                                 if (old && old.toLowerCase() !== 'no') { return; }
117690                             }
117691                             field.keys.push(key);
117692                             t[key] = 'yes';
117693                         });
117694
117695                     } else if (isSemi) {
117696                         var arr = _multiData.map(function(d) { return d.key; });
117697                         arr = arr.concat(vals);
117698                         t[field.key] = utilArrayUniq(arr).filter(Boolean).join(';');
117699                     }
117700
117701                     window.setTimeout(function() { input.node().focus(); }, 10);
117702
117703                 } else {
117704                     val = tagValue(utilGetSetValue(input));
117705                     t[field.key] = val;
117706                 }
117707
117708                 dispatch$1.call('change', this, t);
117709             }
117710
117711
117712             function removeMultikey(d) {
117713                 event.stopPropagation();
117714                 var t = {};
117715                 if (isMulti) {
117716                     t[d.key] = undefined;
117717                 } else if (isSemi) {
117718                     var arr = _multiData.map(function(md) {
117719                         return md.key === d.key ? null : md.key;
117720                     }).filter(Boolean);
117721
117722                     arr = utilArrayUniq(arr);
117723                     t[field.key] = arr.length ? arr.join(';') : undefined;
117724                 }
117725                 dispatch$1.call('change', this, t);
117726             }
117727
117728
117729             function combo(selection) {
117730                 container = selection.selectAll('.form-field-input-wrap')
117731                     .data([0]);
117732
117733                 var type = (isMulti || isSemi) ? 'multicombo': 'combo';
117734                 container = container.enter()
117735                     .append('div')
117736                     .attr('class', 'form-field-input-wrap form-field-input-' + type)
117737                     .merge(container);
117738
117739                 if (isMulti || isSemi) {
117740                     container = container.selectAll('.chiplist')
117741                         .data([0]);
117742
117743                     var listClass = 'chiplist';
117744
117745                     // Use a separate line for each value in the Destinations field
117746                     // to mimic highway exit signs
117747                     if (field.id === 'destination_oneway') {
117748                         listClass += ' full-line-chips';
117749                     }
117750
117751                     container = container.enter()
117752                         .append('ul')
117753                         .attr('class', listClass)
117754                         .on('click', function() {
117755                             window.setTimeout(function() { input.node().focus(); }, 10);
117756                         })
117757                         .merge(container);
117758
117759
117760                     inputWrap = container.selectAll('.input-wrap')
117761                         .data([0]);
117762
117763                     inputWrap = inputWrap.enter()
117764                         .append('li')
117765                         .attr('class', 'input-wrap')
117766                         .merge(inputWrap);
117767
117768                     input = inputWrap.selectAll('input')
117769                         .data([0]);
117770                 } else {
117771                     input = container.selectAll('input')
117772                         .data([0]);
117773                 }
117774
117775                 input = input.enter()
117776                     .append('input')
117777                     .attr('type', 'text')
117778                     .attr('id', 'preset-input-' + field.safeid)
117779                     .call(utilNoAuto)
117780                     .call(initCombo, selection)
117781                     .merge(input);
117782
117783                 if (isNetwork && _entity) {
117784                     var center = _entity.extent(context.graph()).center();
117785                     var countryCode = iso1A2Code(center);
117786                     _countryCode = countryCode && countryCode.toLowerCase();
117787                 }
117788
117789                 input
117790                     .on('change', change)
117791                     .on('blur', change);
117792
117793                 input
117794                     .on('keydown.field', function() {
117795                         switch (event.keyCode) {
117796                             case 13: // ↩ Return
117797                                 input.node().blur(); // blurring also enters the value
117798                                 event.stopPropagation();
117799                                 break;
117800                         }
117801                     });
117802
117803                 if (isMulti || isSemi) {
117804                     combobox
117805                         .on('accept', function() {
117806                             input.node().blur();
117807                             input.node().focus();
117808                         });
117809
117810                     input
117811                         .on('focus', function() { container.classed('active', true); });
117812                 }
117813             }
117814
117815
117816             combo.tags = function(tags) {
117817                 if (isMulti || isSemi) {
117818                     _multiData = [];
117819
117820                     if (isMulti) {
117821                         // Build _multiData array containing keys already set..
117822                         for (var k in tags) {
117823                             if (k.indexOf(field.key) !== 0) { continue; }
117824                             var v = (tags[k] || '').toLowerCase();
117825                             if (v === '' || v === 'no') { continue; }
117826
117827                             var suffix = k.substring(field.key.length);
117828                             _multiData.push({
117829                                 key: k,
117830                                 value: displayValue(suffix)
117831                             });
117832                         }
117833
117834                         // Set keys for form-field modified (needed for undo and reset buttons)..
117835                         field.keys = _multiData.map(function(d) { return d.key; });
117836
117837                     } else if (isSemi) {
117838                         var arr = utilArrayUniq((tags[field.key] || '').split(';')).filter(Boolean);
117839                         _multiData = arr.map(function(k) {
117840                             return {
117841                                 key: k,
117842                                 value: displayValue(k)
117843                             };
117844                         });
117845                     }
117846
117847                     // Exclude existing multikeys from combo options..
117848                     var available = objectDifference(_comboData, _multiData);
117849                     combobox.data(available);
117850
117851                     // Hide 'Add' button if this field uses fixed set of
117852                     // translateable optstrings and they're all currently used..
117853                     container.selectAll('.combobox-input, .combobox-caret')
117854                         .classed('hide', optstrings && !available.length);
117855
117856
117857                     // Render chips
117858                     var chips = container.selectAll('.chip')
117859                         .data(_multiData);
117860
117861                     chips.exit()
117862                         .remove();
117863
117864                     var enter = chips.enter()
117865                         .insert('li', '.input-wrap')
117866                         .attr('class', 'chip')
117867                         .classed('draggable', isSemi);
117868
117869                     enter.append('span');
117870                     enter.append('a');
117871
117872                     chips = chips.merge(enter)
117873                         .order();
117874
117875                     if (isSemi) { // only semiCombo values are ordered
117876                         registerDragAndDrop(chips);
117877                     }
117878
117879                     chips.select('span')
117880                         .text(function(d) { return d.value; });
117881
117882                     chips.select('a')
117883                         .on('click', removeMultikey)
117884                         .attr('class', 'remove')
117885                         .text('×');
117886
117887                 } else {
117888                     utilGetSetValue(input, displayValue(tags[field.key]));
117889                 }
117890             };
117891
117892             function registerDragAndDrop(selection) {
117893
117894                 // allow drag and drop re-ordering of chips
117895                 var dragOrigin, targetIndex;
117896                 selection.call(d3_drag()
117897                     .on('start', function() {
117898                         dragOrigin = {
117899                             x: event.x,
117900                             y: event.y
117901                         };
117902                         targetIndex = null;
117903                     })
117904                     .on('drag', function(d, index) {
117905                         var x = event.x - dragOrigin.x,
117906                             y = event.y - dragOrigin.y;
117907
117908                         if (!d3_select(this).classed('dragging') &&
117909                             // don't display drag until dragging beyond a distance threshold
117910                             Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)) <= 5) { return; }
117911
117912                         d3_select(this)
117913                             .classed('dragging', true);
117914
117915                         targetIndex = null;
117916                         var targetIndexOffsetTop = null;
117917                         var draggedTagWidth = d3_select(this).node().offsetWidth;
117918
117919                         if (field.id === 'destination_oneway') { // meaning tags are full width
117920                             container.selectAll('.chip')
117921                                 .style('transform', function(d2, index2) {
117922                                     var node = d3_select(this).node();
117923
117924                                     if (index === index2) {
117925                                         return 'translate(' + x + 'px, ' + y + 'px)';
117926                                     // move the dragged tag up the order
117927                                     } else if (index2 > index && event.y > node.offsetTop) {
117928                                         if (targetIndex === null || index2 > targetIndex) {
117929                                             targetIndex = index2;
117930                                         }
117931                                         return 'translateY(-100%)';
117932                                     // move the dragged tag down the order
117933                                     } else if (index2 < index && event.y < node.offsetTop + node.offsetHeight) {
117934                                         if (targetIndex === null || index2 < targetIndex) {
117935                                             targetIndex = index2;
117936                                         }
117937                                         return 'translateY(100%)';
117938                                     }
117939                                     return null;
117940                                 });
117941                         } else {
117942                             container.selectAll('.chip')
117943                                 .each(function(d2, index2) {
117944                                     var node = d3_select(this).node();
117945
117946                                     // check the cursor is in the bounding box
117947                                     if (
117948                                         index !== index2 &&
117949                                         event.x < node.offsetLeft + node.offsetWidth + 5 &&
117950                                         event.x > node.offsetLeft &&
117951                                         event.y < node.offsetTop + node.offsetHeight &&
117952                                         event.y > node.offsetTop
117953                                     ) {
117954                                         targetIndex = index2;
117955                                         targetIndexOffsetTop = node.offsetTop;
117956                                     }
117957                                 })
117958                                 .style('transform', function(d2, index2) {
117959                                     var node = d3_select(this).node();
117960
117961                                     if (index === index2) {
117962                                         return 'translate(' + x + 'px, ' + y + 'px)';
117963                                     }
117964
117965                                     // only translate tags in the same row
117966                                     if (node.offsetTop === targetIndexOffsetTop) {
117967                                         if (index2 < index && index2 >= targetIndex) {
117968                                             return 'translateX(' + draggedTagWidth + 'px)';
117969                                         } else if (index2 > index && index2 <= targetIndex) {
117970                                             return 'translateX(-' + draggedTagWidth + 'px)';
117971                                         }
117972                                     }
117973                                     return null;
117974                                 });
117975                             }
117976                     })
117977                     .on('end', function(d, index) {
117978                         if (!d3_select(this).classed('dragging')) {
117979                             return;
117980                         }
117981
117982                         d3_select(this)
117983                             .classed('dragging', false);
117984
117985                         container.selectAll('.chip')
117986                             .style('transform', null);
117987
117988                         if (typeof targetIndex === 'number') {
117989                             var element = _multiData[index];
117990                             _multiData.splice(index, 1);
117991                             _multiData.splice(targetIndex, 0, element);
117992
117993                             var t = {};
117994
117995                             if (_multiData.length) {
117996                                 t[field.key] = _multiData.map(function(element) {
117997                                     return element.key;
117998                                 }).join(';');
117999                             } else {
118000                                 t[field.key] = undefined;
118001                             }
118002
118003                             dispatch$1.call('change', this, t);
118004                         }
118005                         dragOrigin = undefined;
118006                         targetIndex = undefined;
118007                     })
118008                 );
118009             }
118010
118011
118012             combo.focus = function() {
118013                 input.node().focus();
118014             };
118015
118016
118017             combo.entity = function(val) {
118018                 if (!arguments.length) { return _entity; }
118019                 _entity = val;
118020                 return combo;
118021             };
118022
118023
118024             return utilRebind(combo, dispatch$1, 'on');
118025         }
118026
118027         function uiFieldText(field, context) {
118028             var dispatch$1 = dispatch('change');
118029             var input = d3_select(null);
118030             var outlinkButton = d3_select(null);
118031             var _entity;
118032
118033             function i(selection) {
118034                 var preset = _entity && context.presets().match(_entity, context.graph());
118035                 var isLocked = preset && preset.suggestion && field.id === 'brand';
118036                 field.locked(isLocked);
118037
118038                 var wrap = selection.selectAll('.form-field-input-wrap')
118039                     .data([0]);
118040
118041                 wrap = wrap.enter()
118042                     .append('div')
118043                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118044                     .merge(wrap);
118045
118046                 var fieldID = 'preset-input-' + field.safeid;
118047
118048                 input = wrap.selectAll('input')
118049                     .data([0]);
118050
118051                 input = input.enter()
118052                     .append('input')
118053                     .attr('type', field.type === 'identifier' ? 'text' : field.type)
118054                     .attr('id', fieldID)
118055                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
118056                     .classed(field.type, true)
118057                     .call(utilNoAuto)
118058                     .merge(input);
118059
118060                 input
118061                     .classed('disabled', !!isLocked)
118062                     .attr('readonly', isLocked || null)
118063                     .on('input', change(true))
118064                     .on('blur', change())
118065                     .on('change', change());
118066
118067
118068                 if (field.type === 'tel' && _entity) {
118069                     var center = _entity.extent(context.graph()).center();
118070                     var countryCode = iso1A2Code(center);
118071                     var format = countryCode && dataPhoneFormats[countryCode.toLowerCase()];
118072                     if (format) {
118073                         wrap.selectAll('#' + fieldID)
118074                             .attr('placeholder', format);
118075                     }
118076
118077                 } else if (field.type === 'number') {
118078                     var rtl = (textDirection === 'rtl');
118079
118080                     input.attr('type', 'text');
118081
118082                     var buttons = wrap.selectAll('.increment, .decrement')
118083                         .data(rtl ? [1, -1] : [-1, 1]);
118084
118085                     buttons.enter()
118086                         .append('button')
118087                         .attr('tabindex', -1)
118088                         .attr('class', function(d) {
118089                             var which = (d === 1 ? 'increment' : 'decrement');
118090                             return 'form-field-button ' + which;
118091                         })
118092                         .merge(buttons)
118093                         .on('click', function(d) {
118094                             event.preventDefault();
118095                             var raw_vals = input.node().value || '0';
118096                             var vals = raw_vals.split(';');
118097                             vals = vals.map(function(v) {
118098                                 var num = parseFloat(v.trim(), 10);
118099                                 return isFinite(num) ? clamped(num + d) : v.trim();
118100                             });
118101                             input.node().value = vals.join(';');
118102                             change()();
118103                         });
118104                 } else if (field.type === 'identifier' && field.urlFormat && field.pattern) {
118105
118106                     input.attr('type', 'text');
118107
118108                     outlinkButton = wrap.selectAll('.foreign-id-permalink')
118109                         .data([0]);
118110
118111                     outlinkButton.enter()
118112                         .append('button')
118113                         .attr('tabindex', -1)
118114                         .call(svgIcon('#iD-icon-out-link'))
118115                         .attr('class', 'form-field-button foreign-id-permalink')
118116                         .classed('disabled', !validIdentifierValueForLink())
118117                         .attr('title', function() {
118118                             var domainResults = /^https?:\/\/(.{1,}?)\//.exec(field.urlFormat);
118119                             if (domainResults.length >= 2 && domainResults[1]) {
118120                                 var domain = domainResults[1];
118121                                 return t('icons.view_on', { domain: domain });
118122                             }
118123                             return '';
118124                         })
118125                         .on('click', function() {
118126                             event.preventDefault();
118127
118128                             var value = validIdentifierValueForLink();
118129                             if (value) {
118130                                 var url = field.urlFormat.replace(/{value}/, encodeURIComponent(value));
118131                                 window.open(url, '_blank');
118132                             }
118133                         })
118134                         .merge(outlinkButton);
118135                 }
118136             }
118137
118138
118139             function validIdentifierValueForLink() {
118140                 if (field.type === 'identifier' && field.pattern) {
118141                     var value = utilGetSetValue(input).trim().split(';')[0];
118142                     return value && value.match(new RegExp(field.pattern));
118143                 }
118144                 return null;
118145             }
118146
118147
118148             // clamp number to min/max
118149             function clamped(num) {
118150                 if (field.minValue !== undefined) {
118151                     num = Math.max(num, field.minValue);
118152                 }
118153                 if (field.maxValue !== undefined) {
118154                     num = Math.min(num, field.maxValue);
118155                 }
118156                 return num;
118157             }
118158
118159
118160             function change(onInput) {
118161                 return function() {
118162                     var t = {};
118163                     var val = utilGetSetValue(input).trim() || undefined;
118164
118165                     if (!onInput) {
118166                         if (field.type === 'number' && val !== undefined) {
118167                             var vals = val.split(';');
118168                             vals = vals.map(function(v) {
118169                                 var num = parseFloat(v.trim(), 10);
118170                                 return isFinite(num) ? clamped(num) : v.trim();
118171                             });
118172                             val = vals.join(';');
118173                         }
118174                         utilGetSetValue(input, val || '');
118175                     }
118176                     t[field.key] = val;
118177                     dispatch$1.call('change', this, t, onInput);
118178                 };
118179             }
118180
118181
118182             i.entity = function(val) {
118183                 if (!arguments.length) { return _entity; }
118184                 _entity = val;
118185                 return i;
118186             };
118187
118188
118189             i.tags = function(tags) {
118190                 utilGetSetValue(input, tags[field.key] || '');
118191
118192                 if (outlinkButton && !outlinkButton.empty()) {
118193                     var disabled = !validIdentifierValueForLink();
118194                     outlinkButton.classed('disabled', disabled);
118195                 }
118196             };
118197
118198
118199             i.focus = function() {
118200                 var node = input.node();
118201                 if (node) { node.focus(); }
118202             };
118203
118204             return utilRebind(i, dispatch$1, 'on');
118205         }
118206
118207         function uiFieldAccess(field, context) {
118208             var dispatch$1 = dispatch('change');
118209             var items = d3_select(null);
118210
118211             function access(selection) {
118212                 var wrap = selection.selectAll('.form-field-input-wrap')
118213                     .data([0]);
118214
118215                 wrap = wrap.enter()
118216                     .append('div')
118217                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118218                     .merge(wrap);
118219
118220                 var list = wrap.selectAll('ul')
118221                     .data([0]);
118222
118223                 list = list.enter()
118224                     .append('ul')
118225                     .attr('class', 'rows')
118226                     .merge(list);
118227
118228
118229                 items = list.selectAll('li')
118230                     .data(field.keys);
118231
118232                 // Enter
118233                 var enter = items.enter()
118234                     .append('li')
118235                     .attr('class', function(d) { return 'labeled-input preset-access-' + d; });
118236
118237                 enter
118238                     .append('span')
118239                     .attr('class', 'label preset-label-access')
118240                     .attr('for', function(d) { return 'preset-input-access-' + d; })
118241                     .text(function(d) { return field.t('types.' + d); });
118242
118243                 enter
118244                     .append('div')
118245                     .attr('class', 'preset-input-access-wrap')
118246                     .append('input')
118247                     .attr('type', 'text')
118248                     .attr('class', function(d) { return 'preset-input-access preset-input-access-' + d; })
118249                     .call(utilNoAuto)
118250                     .each(function(d) {
118251                         d3_select(this)
118252                             .call(uiCombobox(context, 'access-' + d)
118253                                 .data(access.options(d))
118254                             );
118255                     });
118256
118257
118258                 // Update
118259                 items = items.merge(enter);
118260
118261                 wrap.selectAll('.preset-input-access')
118262                     .on('change', change)
118263                     .on('blur', change);
118264             }
118265
118266
118267             function change(d) {
118268                 var tag = {};
118269                 tag[d] = utilGetSetValue(d3_select(this)) || undefined;
118270                 dispatch$1.call('change', this, tag);
118271             }
118272
118273
118274             access.options = function(type) {
118275                 var options = ['no', 'permissive', 'private', 'permit', 'destination'];
118276
118277                 if (type !== 'access') {
118278                     options.unshift('yes');
118279                     options.push('designated');
118280
118281                     if (type === 'bicycle') {
118282                         options.push('dismount');
118283                     }
118284                 }
118285
118286                 return options.map(function(option) {
118287                     return {
118288                         title: field.t('options.' + option + '.description'),
118289                         value: option
118290                     };
118291                 });
118292             };
118293
118294
118295             var placeholders = {
118296                 footway: {
118297                     foot: 'designated',
118298                     motor_vehicle: 'no'
118299                 },
118300                 steps: {
118301                     foot: 'yes',
118302                     motor_vehicle: 'no',
118303                     bicycle: 'no',
118304                     horse: 'no'
118305                 },
118306                 pedestrian: {
118307                     foot: 'yes',
118308                     motor_vehicle: 'no'
118309                 },
118310                 cycleway: {
118311                     motor_vehicle: 'no',
118312                     bicycle: 'designated'
118313                 },
118314                 bridleway: {
118315                     motor_vehicle: 'no',
118316                     horse: 'designated'
118317                 },
118318                 path: {
118319                     foot: 'yes',
118320                     motor_vehicle: 'no',
118321                     bicycle: 'yes',
118322                     horse: 'yes'
118323                 },
118324                 motorway: {
118325                     foot: 'no',
118326                     motor_vehicle: 'yes',
118327                     bicycle: 'no',
118328                     horse: 'no'
118329                 },
118330                 trunk: {
118331                     motor_vehicle: 'yes'
118332                 },
118333                 primary: {
118334                     foot: 'yes',
118335                     motor_vehicle: 'yes',
118336                     bicycle: 'yes',
118337                     horse: 'yes'
118338                 },
118339                 secondary: {
118340                     foot: 'yes',
118341                     motor_vehicle: 'yes',
118342                     bicycle: 'yes',
118343                     horse: 'yes'
118344                 },
118345                 tertiary: {
118346                     foot: 'yes',
118347                     motor_vehicle: 'yes',
118348                     bicycle: 'yes',
118349                     horse: 'yes'
118350                 },
118351                 residential: {
118352                     foot: 'yes',
118353                     motor_vehicle: 'yes',
118354                     bicycle: 'yes',
118355                     horse: 'yes'
118356                 },
118357                 unclassified: {
118358                     foot: 'yes',
118359                     motor_vehicle: 'yes',
118360                     bicycle: 'yes',
118361                     horse: 'yes'
118362                 },
118363                 service: {
118364                     foot: 'yes',
118365                     motor_vehicle: 'yes',
118366                     bicycle: 'yes',
118367                     horse: 'yes'
118368                 },
118369                 motorway_link: {
118370                     foot: 'no',
118371                     motor_vehicle: 'yes',
118372                     bicycle: 'no',
118373                     horse: 'no'
118374                 },
118375                 trunk_link: {
118376                     motor_vehicle: 'yes'
118377                 },
118378                 primary_link: {
118379                     foot: 'yes',
118380                     motor_vehicle: 'yes',
118381                     bicycle: 'yes',
118382                     horse: 'yes'
118383                 },
118384                 secondary_link: {
118385                     foot: 'yes',
118386                     motor_vehicle: 'yes',
118387                     bicycle: 'yes',
118388                     horse: 'yes'
118389                 },
118390                 tertiary_link: {
118391                     foot: 'yes',
118392                     motor_vehicle: 'yes',
118393                     bicycle: 'yes',
118394                     horse: 'yes'
118395                 }
118396             };
118397
118398
118399             access.tags = function(tags) {
118400                 utilGetSetValue(items.selectAll('.preset-input-access'),
118401                     function(d) { return tags[d] || ''; })
118402                     .attr('placeholder', function() {
118403                         return tags.access ? tags.access : field.placeholder();
118404                     });
118405
118406                 items.selectAll('.preset-input-access-access')
118407                     .attr('placeholder', 'yes');
118408
118409                 var which = tags.highway;
118410                 if (!placeholders[which]) { return; }
118411
118412                 var keys = Object.keys(placeholders[which]);
118413                 keys.forEach(function(k) {
118414                     var v = placeholders[which][k];
118415                     items.selectAll('.preset-input-access-' + k)
118416                         .attr('placeholder', tags.access || v);
118417                 });
118418             };
118419
118420
118421             access.focus = function() {
118422                 items.selectAll('.preset-input-access')
118423                     .node().focus();
118424             };
118425
118426
118427             return utilRebind(access, dispatch$1, 'on');
118428         }
118429
118430         function uiFieldAddress(field, context) {
118431             var dispatch$1 = dispatch('init', 'change');
118432             var wrap = d3_select(null);
118433             var _isInitialized = false;
118434             var _entity;
118435             // needed for placeholder strings
118436             var addrField = context.presets().field('address');
118437
118438             function getNearStreets() {
118439                 var extent = _entity.extent(context.graph());
118440                 var l = extent.center();
118441                 var box = geoExtent(l).padByMeters(200);
118442
118443                 var streets = context.intersects(box)
118444                     .filter(isAddressable)
118445                     .map(function(d) {
118446                         var loc = context.projection([
118447                             (extent[0][0] + extent[1][0]) / 2,
118448                             (extent[0][1] + extent[1][1]) / 2
118449                         ]);
118450                         var choice = geoChooseEdge(context.childNodes(d), loc, context.projection);
118451
118452                         return {
118453                             title: d.tags.name,
118454                             value: d.tags.name,
118455                             dist: choice.distance
118456                         };
118457                     })
118458                     .sort(function(a, b) {
118459                         return a.dist - b.dist;
118460                     });
118461
118462                 return utilArrayUniqBy(streets, 'value');
118463
118464                 function isAddressable(d) {
118465                     return d.tags.highway && d.tags.name && d.type === 'way';
118466                 }
118467             }
118468
118469
118470             function getNearCities() {
118471                 var extent = _entity.extent(context.graph());
118472                 var l = extent.center();
118473                 var box = geoExtent(l).padByMeters(200);
118474
118475                 var cities = context.intersects(box)
118476                     .filter(isAddressable)
118477                     .map(function(d) {
118478                         return {
118479                             title: d.tags['addr:city'] || d.tags.name,
118480                             value: d.tags['addr:city'] || d.tags.name,
118481                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
118482                         };
118483                     })
118484                     .sort(function(a, b) {
118485                         return a.dist - b.dist;
118486                     });
118487
118488                 return utilArrayUniqBy(cities, 'value');
118489
118490
118491                 function isAddressable(d) {
118492                     if (d.tags.name) {
118493                         if (d.tags.admin_level === '8' && d.tags.boundary === 'administrative')
118494                             { return true; }
118495                         if (d.tags.border_type === 'city')
118496                             { return true; }
118497                         if (d.tags.place === 'city' || d.tags.place === 'town' || d.tags.place === 'village')
118498                             { return true; }
118499                     }
118500
118501                     if (d.tags['addr:city'])
118502                         { return true; }
118503
118504                     return false;
118505                 }
118506             }
118507
118508             function getNearValues(key) {
118509                 var extent = _entity.extent(context.graph());
118510                 var l = extent.center();
118511                 var box = geoExtent(l).padByMeters(200);
118512
118513                 var results = context.intersects(box)
118514                     .filter(function hasTag(d) { return d.id !== _entity.id && d.tags[key]; })
118515                     .map(function(d) {
118516                         return {
118517                             title: d.tags[key],
118518                             value: d.tags[key],
118519                             dist: geoSphericalDistance(d.extent(context.graph()).center(), l)
118520                         };
118521                     })
118522                     .sort(function(a, b) {
118523                         return a.dist - b.dist;
118524                     });
118525
118526                 return utilArrayUniqBy(results, 'value');
118527             }
118528
118529
118530             function updateForCountryCode(countryCode) {
118531                 countryCode = countryCode.toLowerCase();
118532
118533                 var addressFormat;
118534                 for (var i = 0; i < dataAddressFormats.length; i++) {
118535                     var format = dataAddressFormats[i];
118536                     if (!format.countryCodes) {
118537                         addressFormat = format;   // choose the default format, keep going
118538                     } else if (format.countryCodes.indexOf(countryCode) !== -1) {
118539                         addressFormat = format;   // choose the country format, stop here
118540                         break;
118541                     }
118542                 }
118543
118544                 var dropdowns = addressFormat.dropdowns || [
118545                     'city', 'county', 'country', 'district', 'hamlet',
118546                     'neighbourhood', 'place', 'postcode', 'province',
118547                     'quarter', 'state', 'street', 'subdistrict', 'suburb'
118548                 ];
118549
118550                 var widths = addressFormat.widths || {
118551                     housenumber: 1/3, street: 2/3,
118552                     city: 2/3, state: 1/4, postcode: 1/3
118553                 };
118554
118555                 function row(r) {
118556                     // Normalize widths.
118557                     var total = r.reduce(function(sum, key) {
118558                         return sum + (widths[key] || 0.5);
118559                     }, 0);
118560
118561                     return r.map(function(key) {
118562                         return {
118563                             id: key,
118564                             width: (widths[key] || 0.5) / total
118565                         };
118566                     });
118567                 }
118568
118569                 wrap.selectAll('.addr-row')
118570                     .data(addressFormat.format)
118571                     .enter()
118572                     .append('div')
118573                     .attr('class', 'addr-row')
118574                     .selectAll('input')
118575                     .data(row)
118576                     .enter()
118577                     .append('input')
118578                     .property('type', 'text')
118579                     .attr('placeholder', function (d) {
118580                         var localkey = d.id + '!' + countryCode;
118581                         var tkey = addrField.strings.placeholders[localkey] ? localkey : d.id;
118582                         return addrField.t('placeholders.' + tkey);
118583                     })
118584                     .attr('class', function (d) { return 'addr-' + d.id; })
118585                     .call(utilNoAuto)
118586                     .each(addDropdown)
118587                     .style('width', function (d) { return d.width * 100 + '%'; });
118588
118589
118590                 function addDropdown(d) {
118591                     if (dropdowns.indexOf(d.id) === -1) { return; }  // not a dropdown
118592
118593                     var nearValues = (d.id === 'street') ? getNearStreets
118594                         : (d.id === 'city') ? getNearCities
118595                         : getNearValues;
118596
118597                     d3_select(this)
118598                         .call(uiCombobox(context, 'address-' + d.id)
118599                             .minItems(1)
118600                             .caseSensitive(true)
118601                             .fetcher(function(value, callback) {
118602                                 callback(nearValues('addr:' + d.id));
118603                             })
118604                         );
118605                 }
118606
118607                 wrap.selectAll('input')
118608                     .on('blur', change())
118609                     .on('change', change());
118610
118611                 wrap.selectAll('input:not(.combobox-input)')
118612                     .on('input', change(true));
118613
118614                 dispatch$1.call('init');
118615                 _isInitialized = true;
118616             }
118617
118618
118619             function address(selection) {
118620                 _isInitialized = false;
118621
118622                 wrap = selection.selectAll('.form-field-input-wrap')
118623                     .data([0]);
118624
118625                 wrap = wrap.enter()
118626                     .append('div')
118627                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118628                     .merge(wrap);
118629
118630                 if (_entity) {
118631                     var countryCode;
118632                     if (context.inIntro()) {
118633                         // localize the address format for the walkthrough
118634                         countryCode = t('intro.graph.countrycode');
118635                     } else {
118636                         var center = _entity.extent(context.graph()).center();
118637                         countryCode = iso1A2Code(center);
118638                     }
118639                     if (countryCode) { updateForCountryCode(countryCode); }
118640                 }
118641             }
118642
118643
118644             function change(onInput) {
118645                 return function() {
118646                     var tags = {};
118647
118648                     wrap.selectAll('input')
118649                         .each(function (subfield) {
118650                             tags[field.key + ':' + subfield.id] = this.value || undefined;
118651                         });
118652
118653                     dispatch$1.call('change', this, tags, onInput);
118654                 };
118655             }
118656
118657
118658             function updateTags(tags) {
118659                 utilGetSetValue(wrap.selectAll('input'), function (subfield) {
118660                     return tags[field.key + ':' + subfield.id] || '';
118661                 });
118662             }
118663
118664
118665             address.entity = function(val) {
118666                 if (!arguments.length) { return _entity; }
118667                 _entity = val;
118668                 return address;
118669             };
118670
118671
118672             address.tags = function(tags) {
118673                 if (_isInitialized) {
118674                     updateTags(tags);
118675                 } else {
118676                     dispatch$1.on('init', function () {
118677                         dispatch$1.on('init', null);
118678                         updateTags(tags);
118679                     });
118680                 }
118681             };
118682
118683
118684             address.focus = function() {
118685                 var node = wrap.selectAll('input').node();
118686                 if (node) { node.focus(); }
118687             };
118688
118689
118690             return utilRebind(address, dispatch$1, 'on');
118691         }
118692
118693         function uiFieldCycleway(field, context) {
118694             var dispatch$1 = dispatch('change');
118695             var items = d3_select(null);
118696             var wrap = d3_select(null);
118697
118698             function cycleway(selection) {
118699
118700                 function stripcolon(s) {
118701                     return s.replace(':', '');
118702                 }
118703
118704
118705                 wrap = selection.selectAll('.form-field-input-wrap')
118706                     .data([0]);
118707
118708                 wrap = wrap.enter()
118709                     .append('div')
118710                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118711                     .merge(wrap);
118712
118713
118714                 var div = wrap.selectAll('ul')
118715                     .data([0]);
118716
118717                 div = div.enter()
118718                     .append('ul')
118719                     .attr('class', 'rows')
118720                     .merge(div);
118721
118722                 var keys = ['cycleway:left', 'cycleway:right'];
118723
118724                 items = div.selectAll('li')
118725                     .data(keys);
118726
118727                 var enter = items.enter()
118728                     .append('li')
118729                     .attr('class', function(d) { return 'labeled-input preset-cycleway-' + stripcolon(d); });
118730
118731                 enter
118732                     .append('span')
118733                     .attr('class', 'label preset-label-cycleway')
118734                     .attr('for', function(d) { return 'preset-input-cycleway-' + stripcolon(d); })
118735                     .text(function(d) { return field.t('types.' + d); });
118736
118737                 enter
118738                     .append('div')
118739                     .attr('class', 'preset-input-cycleway-wrap')
118740                     .append('input')
118741                     .attr('type', 'text')
118742                     .attr('class', function(d) { return 'preset-input-cycleway preset-input-' + stripcolon(d); })
118743                     .call(utilNoAuto)
118744                     .each(function(d) {
118745                         d3_select(this)
118746                             .call(uiCombobox(context, 'cycleway-' + stripcolon(d))
118747                                 .data(cycleway.options(d))
118748                             );
118749                     });
118750
118751                 items = items.merge(enter);
118752
118753                 // Update
118754                 wrap.selectAll('.preset-input-cycleway')
118755                     .on('change', change)
118756                     .on('blur', change);
118757             }
118758
118759
118760             function change() {
118761                 var left = utilGetSetValue(d3_select('.preset-input-cyclewayleft'));
118762                 var right = utilGetSetValue(d3_select('.preset-input-cyclewayright'));
118763                 var tag = {};
118764
118765                 if (left === 'none' || left === '') { left = undefined; }
118766                 if (right === 'none' || right === '') { right = undefined; }
118767
118768                 // Always set both left and right as changing one can affect the other
118769                 tag = {
118770                     cycleway: undefined,
118771                     'cycleway:left': left,
118772                     'cycleway:right': right
118773                 };
118774
118775                 // If the left and right tags match, use the cycleway tag to tag both
118776                 // sides the same way
118777                 if (left === right) {
118778                     tag = {
118779                         cycleway: left,
118780                         'cycleway:left': undefined,
118781                         'cycleway:right': undefined
118782                     };
118783                 }
118784
118785                 dispatch$1.call('change', this, tag);
118786             }
118787
118788
118789             cycleway.options = function() {
118790                 return Object.keys(field.strings.options).map(function(option) {
118791                     return {
118792                         title: field.t('options.' + option + '.description'),
118793                         value: option
118794                     };
118795                 });
118796             };
118797
118798
118799             cycleway.tags = function(tags) {
118800                 utilGetSetValue(items.selectAll('.preset-input-cycleway'), function(d) {
118801                         // If cycleway is set, always return that
118802                         if (tags.cycleway) {
118803                             return tags.cycleway;
118804                         }
118805                         return tags[d] || '';
118806                     })
118807                     .attr('placeholder', field.placeholder());
118808             };
118809
118810
118811             cycleway.focus = function() {
118812                 var node = wrap.selectAll('input').node();
118813                 if (node) { node.focus(); }
118814             };
118815
118816
118817             return utilRebind(cycleway, dispatch$1, 'on');
118818         }
118819
118820         function uiFieldLanes(field, context) {
118821             var dispatch$1 = dispatch('change');
118822             var LANE_WIDTH = 40;
118823             var LANE_HEIGHT = 200;
118824             var _entityID;
118825
118826             function lanes(selection) {
118827                 var lanesData = context.entity(_entityID).lanes();
118828
118829                 if (!d3_select('.inspector-wrap.inspector-hidden').empty() || !selection.node().parentNode) {
118830                     selection.call(lanes.off);
118831                     return;
118832                 }
118833
118834                 var wrap = selection.selectAll('.form-field-input-wrap')
118835                     .data([0]);
118836
118837                 wrap = wrap.enter()
118838                     .append('div')
118839                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
118840                     .merge(wrap);
118841
118842                 var surface =  wrap.selectAll('.surface')
118843                     .data([0]);
118844
118845                 var d = utilGetDimensions(wrap);
118846                 var freeSpace = d[0] - lanesData.lanes.length * LANE_WIDTH * 1.5 + LANE_WIDTH * 0.5;
118847
118848                 surface = surface.enter()
118849                     .append('svg')
118850                     .attr('width', d[0])
118851                     .attr('height', 300)
118852                     .attr('class', 'surface')
118853                     .merge(surface);
118854
118855
118856                 var lanesSelection = surface.selectAll('.lanes')
118857                     .data([0]);
118858
118859                 lanesSelection = lanesSelection.enter()
118860                     .append('g')
118861                     .attr('class', 'lanes')
118862                     .merge(lanesSelection);
118863
118864                 lanesSelection
118865                     .attr('transform', function () {
118866                         return 'translate(' + (freeSpace / 2) + ', 0)';
118867                     });
118868
118869
118870                 var lane = lanesSelection.selectAll('.lane')
118871                    .data(lanesData.lanes);
118872
118873                 lane.exit()
118874                     .remove();
118875
118876                 var enter = lane.enter()
118877                     .append('g')
118878                     .attr('class', 'lane');
118879
118880                 enter
118881                     .append('g')
118882                     .append('rect')
118883                     .attr('y', 50)
118884                     .attr('width', LANE_WIDTH)
118885                     .attr('height', LANE_HEIGHT);
118886
118887                 enter
118888                     .append('g')
118889                     .attr('class', 'forward')
118890                     .append('text')
118891                     .attr('y', 40)
118892                     .attr('x', 14)
118893                     .text('▲');
118894
118895                 enter
118896                     .append('g')
118897                     .attr('class', 'bothways')
118898                     .append('text')
118899                     .attr('y', 40)
118900                     .attr('x', 14)
118901                     .text('▲▼');
118902
118903                 enter
118904                     .append('g')
118905                     .attr('class', 'backward')
118906                     .append('text')
118907                     .attr('y', 40)
118908                     .attr('x', 14)
118909                     .text('▼');
118910
118911
118912                 lane = lane
118913                     .merge(enter);
118914
118915                 lane
118916                     .attr('transform', function(d) {
118917                         return 'translate(' + (LANE_WIDTH * d.index * 1.5) + ', 0)';
118918                     });
118919
118920                 lane.select('.forward')
118921                     .style('visibility', function(d) {
118922                         return d.direction === 'forward' ? 'visible' : 'hidden';
118923                     });
118924
118925                 lane.select('.bothways')
118926                     .style('visibility', function(d) {
118927                         return d.direction === 'bothways' ? 'visible' : 'hidden';
118928                     });
118929
118930                 lane.select('.backward')
118931                     .style('visibility', function(d) {
118932                         return d.direction === 'backward' ? 'visible' : 'hidden';
118933                     });
118934             }
118935
118936
118937             lanes.entity = function(val) {
118938                 if (!_entityID || _entityID !== val.id) {
118939                     _entityID = val.id;
118940                 }
118941             };
118942
118943             lanes.tags = function() {};
118944             lanes.focus = function() {};
118945             lanes.off = function() {};
118946
118947             return utilRebind(lanes, dispatch$1, 'on');
118948         }
118949
118950         var languagesArray = [];
118951         function loadLanguagesArray() {
118952             if (languagesArray.length !== 0) { return; }
118953
118954             // some conversion is needed to ensure correct OSM tags are used
118955             var replacements = {
118956                 sr: 'sr-Cyrl',      // in OSM, `sr` implies Cyrillic
118957                 'sr-Cyrl': false    // `sr-Cyrl` isn't used in OSM
118958             };
118959
118960             for (var code in dataLanguages) {
118961                 if (replacements[code] === false) { continue; }
118962                 var metaCode = code;
118963                 if (replacements[code]) { metaCode = replacements[code]; }
118964
118965                 languagesArray.push({
118966                     localName: languageName(metaCode, { localOnly: true }),
118967                     nativeName: dataLanguages[metaCode].nativeName,
118968                     code: code,
118969                     label: languageName(metaCode)
118970                 });
118971             }
118972         }
118973
118974
118975         function uiFieldLocalized(field, context) {
118976             var dispatch$1 = dispatch('change', 'input');
118977             var wikipedia = services$1.wikipedia;
118978             var input = d3_select(null);
118979             var localizedInputs = d3_select(null);
118980             var _countryCode;
118981
118982             var allSuggestions = context.presets().collection.filter(function(p) {
118983                 return p.suggestion === true;
118984             });
118985
118986             // reuse these combos
118987             var langCombo = uiCombobox(context, 'localized-lang')
118988                 .fetcher(fetchLanguages)
118989                 .minItems(0);
118990
118991             var brandCombo = uiCombobox(context, 'localized-brand')
118992                 .canAutocomplete(false)
118993                 .minItems(1);
118994
118995             var _selection = d3_select(null);
118996             var _multilingual = [];
118997             var _buttonTip = tooltip()
118998                 .title(t('translate.translate'))
118999                 .placement('left');
119000             var _wikiTitles;
119001             var _entity;
119002
119003
119004             function calcLocked() {
119005                 if (!_entity) {    // the original entity
119006                     field.locked(false);
119007                     return;
119008                 }
119009
119010                 var latest = context.hasEntity(_entity.id);
119011                 if (!latest) {    // get current entity, possibly edited
119012                     field.locked(false);
119013                     return;
119014                 }
119015
119016                 var hasOriginalName = (latest.tags.name && latest.tags.name === _entity.tags.name);
119017                 var hasWikidata = latest.tags.wikidata || latest.tags['name:etymology:wikidata'];
119018                 var preset = context.presets().match(latest, context.graph());
119019                 var isSuggestion = preset && preset.suggestion;
119020                 var showsBrand = preset && preset.fields
119021                     .filter(function(d) { return d.id === 'brand'; }).length;
119022
119023                 var isLocked = !!(field.id === 'name' && hasOriginalName &&
119024                     (hasWikidata || (isSuggestion && !showsBrand)));
119025
119026                 field.locked(isLocked);
119027             }
119028
119029             // update _multilingual, maintaining the existing order
119030             function calcMultilingual(tags) {
119031                 var existingLangsOrdered = _multilingual.map(function(item) {
119032                     return item.lang;
119033                 });
119034                 var existingLangs = new Set(existingLangsOrdered.filter(Boolean));
119035
119036                 for (var k in tags) {
119037                     var m = k.match(/^(.*):([a-zA-Z_-]+)$/);
119038                     if (m && m[1] === field.key && m[2]) {
119039                         var item = { lang: m[2], value: tags[k] };
119040                         if (existingLangs.has(item.lang)) {
119041                             // update the value
119042                             _multilingual[existingLangsOrdered.indexOf(item.lang)].value = item.value;
119043                             existingLangs.delete(item.lang);
119044                         } else {
119045                             _multilingual.push(item);
119046                         }
119047                     }
119048                 }
119049
119050                 _multilingual = _multilingual.filter(function(item) {
119051                     return !item.lang || !existingLangs.has(item.lang);
119052                 });
119053             }
119054
119055
119056             function localized(selection) {
119057                 // load if needed
119058                 loadLanguagesArray();
119059
119060                 _selection = selection;
119061                 calcLocked();
119062                 var isLocked = field.locked();
119063                 var entity = _entity && context.hasEntity(_entity.id);  // get latest
119064                 var preset = entity && context.presets().match(entity, context.graph());
119065
119066                 var wrap = selection.selectAll('.form-field-input-wrap')
119067                     .data([0]);
119068
119069                 // enter/update
119070                 wrap = wrap.enter()
119071                     .append('div')
119072                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
119073                     .merge(wrap);
119074
119075                 input = wrap.selectAll('.localized-main')
119076                     .data([0]);
119077
119078                 // enter/update
119079                 input = input.enter()
119080                     .append('input')
119081                     .attr('type', 'text')
119082                     .attr('id', 'preset-input-' + field.safeid)
119083                     .attr('class', 'localized-main')
119084                     .attr('placeholder', field.placeholder())
119085                     .call(utilNoAuto)
119086                     .merge(input);
119087
119088                 if (preset && field.id === 'name') {
119089                     var pTag = preset.id.split('/', 2);
119090                     var pKey = pTag[0];
119091                     var pValue = pTag[1];
119092
119093                     if (!preset.suggestion) {
119094                         // Not a suggestion preset - Add a suggestions dropdown if it makes sense to.
119095                         // This code attempts to determine if the matched preset is the
119096                         // kind of preset that even can benefit from name suggestions..
119097                         // - true = shops, cafes, hotels, etc. (also generic and fallback presets)
119098                         // - false = churches, parks, hospitals, etc. (things not in the index)
119099                         var isFallback = preset.isFallback();
119100                         var goodSuggestions = allSuggestions.filter(function(s) {
119101                             if (isFallback) { return true; }
119102                             var sTag = s.id.split('/', 2);
119103                             var sKey = sTag[0];
119104                             var sValue = sTag[1];
119105                             return pKey === sKey && (!pValue || pValue === sValue);
119106                         });
119107
119108                         // Show the suggestions.. If the user picks one, change the tags..
119109                         if (allSuggestions.length && goodSuggestions.length) {
119110                             input
119111                                 .on('blur.localized', checkBrandOnBlur)
119112                                 .call(brandCombo
119113                                     .fetcher(fetchBrandNames(preset, allSuggestions))
119114                                     .on('accept', acceptBrand)
119115                                     .on('cancel', cancelBrand)
119116                                 );
119117                         }
119118                     }
119119                 }
119120
119121                 input
119122                     .classed('disabled', !!isLocked)
119123                     .attr('readonly', isLocked || null)
119124                     .on('input', change(true))
119125                     .on('blur', change())
119126                     .on('change', change());
119127
119128
119129                 var translateButton = wrap.selectAll('.localized-add')
119130                     .data([0]);
119131
119132                 translateButton = translateButton.enter()
119133                     .append('button')
119134                     .attr('class', 'localized-add form-field-button')
119135                     .attr('tabindex', -1)
119136                     .call(svgIcon('#iD-icon-plus'))
119137                     .merge(translateButton);
119138
119139                 translateButton
119140                     .classed('disabled', !!isLocked)
119141                     .call(isLocked ? _buttonTip.destroy : _buttonTip)
119142                     .on('click', addNew);
119143
119144
119145                 if (entity && !_multilingual.length) {
119146                     calcMultilingual(entity.tags);
119147                 }
119148
119149                 localizedInputs = selection.selectAll('.localized-multilingual')
119150                     .data([0]);
119151
119152                 localizedInputs = localizedInputs.enter()
119153                     .append('div')
119154                     .attr('class', 'localized-multilingual')
119155                     .merge(localizedInputs);
119156
119157                 localizedInputs
119158                     .call(renderMultilingual);
119159
119160                 localizedInputs.selectAll('button, input')
119161                     .classed('disabled', !!isLocked)
119162                     .attr('readonly', isLocked || null);
119163
119164
119165
119166                 // We are not guaranteed to get an `accept` or `cancel` when blurring the field.
119167                 // (This can happen if the user actives the combo, arrows down, and then clicks off to blur)
119168                 // So compare the current field value against the suggestions one last time.
119169                 function checkBrandOnBlur() {
119170                     var latest = context.hasEntity(_entity.id);
119171                     if (!latest) { return; }   // deleting the entity blurred the field?
119172
119173                     var preset = context.presets().match(latest, context.graph());
119174                     if (preset && preset.suggestion) { return; }   // already accepted
119175
119176                     // note: here we are testing against "decorated" names, i.e. 'Starbucks – Cafe'
119177                     var name = utilGetSetValue(input).trim();
119178                     var matched = allSuggestions.filter(function(s) { return name === s.name(); });
119179
119180                     if (matched.length === 1) {
119181                         acceptBrand({ suggestion: matched[0] });
119182                     } else {
119183                         cancelBrand();
119184                     }
119185                 }
119186
119187
119188                 function acceptBrand(d) {
119189                     if (!d) {
119190                         cancelBrand();
119191                         return;
119192                     }
119193
119194                     var entity = context.entity(_entity.id);  // get latest
119195                     var tags = entity.tags;
119196                     var geometry = entity.geometry(context.graph());
119197                     var removed = preset.unsetTags(tags, geometry);
119198                     for (var k in tags) {
119199                         tags[k] = removed[k];  // set removed tags to `undefined`
119200                     }
119201                     tags = d.suggestion.setTags(tags, geometry);
119202                     utilGetSetValue(input, tags.name);
119203                     dispatch$1.call('change', this, tags);
119204                 }
119205
119206
119207                 // user hit escape, clean whatever preset name appears after the last ' – '
119208                 function cancelBrand() {
119209                     var name = utilGetSetValue(input);
119210                     var clean = cleanName(name);
119211                     if (clean !== name) {
119212                         utilGetSetValue(input, clean);
119213                         dispatch$1.call('change', this, { name: clean });
119214                     }
119215                 }
119216
119217                 // Remove whatever is after the last ' – '
119218                 // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
119219                 function cleanName(name) {
119220                     var parts = name.split(' – ');
119221                     if (parts.length > 1) {
119222                         parts.pop();
119223                         name = parts.join(' – ');
119224                     }
119225                     return name;
119226                 }
119227
119228
119229                 function fetchBrandNames(preset, suggestions) {
119230                     var pTag = preset.id.split('/', 2);
119231                     var pKey = pTag[0];
119232                     var pValue = pTag[1];
119233
119234                     return function(value, callback) {
119235                         var results = [];
119236                         if (value && value.length > 2) {
119237                             for (var i = 0; i < suggestions.length; i++) {
119238                                 var s = suggestions[i];
119239
119240                                 // don't suggest brands from incompatible countries
119241                                 if (_countryCode && s.countryCodes &&
119242                                     s.countryCodes.indexOf(_countryCode) === -1) { continue; }
119243
119244                                 var sTag = s.id.split('/', 2);
119245                                 var sKey = sTag[0];
119246                                 var sValue = sTag[1];
119247                                 var name = s.name();
119248                                 var dist = utilEditDistance(value, name.substring(0, value.length));
119249                                 var matchesPreset = (pKey === sKey && (!pValue || pValue === sValue));
119250
119251                                 if (dist < 1 || (matchesPreset && dist < 3)) {
119252                                     var obj = {
119253                                         title: name,
119254                                         value: name,
119255                                         suggestion: s,
119256                                         dist: dist + (matchesPreset ? 0 : 1)  // penalize if not matched preset
119257                                     };
119258                                     results.push(obj);
119259                                 }
119260                             }
119261                             results.sort(function(a, b) { return a.dist - b.dist; });
119262                         }
119263                         results = results.slice(0, 10);
119264                         callback(results);
119265                     };
119266                 }
119267
119268
119269                 function addNew() {
119270                     event.preventDefault();
119271                     if (field.locked()) { return; }
119272
119273                     var defaultLang = utilDetect().locale.toLowerCase().split('-')[0];
119274                     var langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
119275                     var isLangEn = defaultLang.indexOf('en') > -1;
119276                     if (isLangEn || langExists) {
119277                         defaultLang = '';
119278                         langExists = _multilingual.find(function(datum) { return datum.lang === defaultLang; });
119279                     }
119280
119281                     if (!langExists) {
119282                         // prepend the value so it appears at the top
119283                         _multilingual.unshift({ lang: defaultLang, value: '' });
119284
119285                         localizedInputs
119286                             .call(renderMultilingual);
119287                     }
119288                 }
119289
119290
119291                 function change(onInput) {
119292                     return function() {
119293                         if (field.locked()) {
119294                             event.preventDefault();
119295                             return;
119296                         }
119297                         var t = {};
119298                         t[field.key] = utilGetSetValue(d3_select(this)) || undefined;
119299                         dispatch$1.call('change', this, t, onInput);
119300                     };
119301                 }
119302             }
119303
119304
119305             function key(lang) {
119306                 return field.key + ':' + lang;
119307             }
119308
119309
119310             function changeLang(d) {
119311                 var lang = utilGetSetValue(d3_select(this));
119312                 var t = {};
119313                 var language = languagesArray.find(function(d) {
119314                     return (d.localName && d.localName.toLowerCase() === lang.toLowerCase()) ||
119315                         d.label.toLowerCase() === lang.toLowerCase() ||
119316                         (d.nativeName && d.nativeName.toLowerCase() === lang.toLowerCase());
119317                 });
119318
119319                 if (language) { lang = language.code; }
119320
119321                 if (d.lang && d.lang !== lang) {
119322                     t[key(d.lang)] = undefined;
119323                 }
119324
119325                 var value = utilGetSetValue(d3_select(this.parentNode)
119326                     .selectAll('.localized-value'));
119327
119328                 if (lang && value) {
119329                     t[key(lang)] = value;
119330                 } else if (lang && _wikiTitles && _wikiTitles[d.lang]) {
119331                     t[key(lang)] = _wikiTitles[d.lang];
119332                 }
119333
119334                 d.lang = lang;
119335                 dispatch$1.call('change', this, t);
119336             }
119337
119338
119339             function changeValue(d) {
119340                 if (!d.lang) { return; }
119341                 var value = utilGetSetValue(d3_select(this)) || undefined;
119342                 var t = {};
119343                 t[key(d.lang)] = value;
119344                 d.value = value;
119345                 dispatch$1.call('change', this, t);
119346             }
119347
119348
119349             function fetchLanguages(value, cb) {
119350                 var v = value.toLowerCase();
119351
119352                 // show the user's language first
119353                 var langCodes = [currentLocale, currentLocale.split('-')[0]];
119354
119355                 if (_countryCode && dataTerritoryLanguages[_countryCode]) {
119356                     langCodes = langCodes.concat(dataTerritoryLanguages[_countryCode]);
119357                 }
119358
119359                 var langItems = [];
119360                 langCodes.forEach(function(code) {
119361                     var langItem = languagesArray.find(function(item) {
119362                         return item.code === code;
119363                     });
119364                     if (langItem) { langItems.push(langItem); }
119365                 });
119366                 langItems = utilArrayUniq(langItems.concat(languagesArray));
119367
119368                 cb(langItems.filter(function(d) {
119369                     return d.label.toLowerCase().indexOf(v) >= 0 ||
119370                         (d.localName && d.localName.toLowerCase().indexOf(v) >= 0) ||
119371                         (d.nativeName && d.nativeName.toLowerCase().indexOf(v) >= 0) ||
119372                         d.code.toLowerCase().indexOf(v) >= 0;
119373                 }).map(function(d) {
119374                     return { value: d.label };
119375                 }));
119376             }
119377
119378
119379             function renderMultilingual(selection) {
119380                 var entries = selection.selectAll('div.entry')
119381                     .data(_multilingual, function(d) { return d.lang; });
119382
119383                 entries.exit()
119384                     .style('top', '0')
119385                     .style('max-height', '240px')
119386                     .transition()
119387                     .duration(200)
119388                     .style('opacity', '0')
119389                     .style('max-height', '0px')
119390                     .remove();
119391
119392                 var entriesEnter = entries.enter()
119393                     .append('div')
119394                     .attr('class', 'entry')
119395                     .each(function() {
119396                         var wrap = d3_select(this);
119397
119398                         var label = wrap
119399                             .append('label')
119400                             .attr('class', 'field-label');
119401
119402                         var text = label
119403                             .append('span')
119404                             .attr('class', 'label-text');
119405
119406                         text
119407                             .append('span')
119408                             .attr('class', 'label-textvalue')
119409                             .text(t('translate.localized_translation_label'));
119410
119411                         text
119412                             .append('span')
119413                             .attr('class', 'label-textannotation');
119414
119415                         label
119416                             .append('button')
119417                             .attr('class', 'remove-icon-multilingual')
119418                             .on('click', function(d, index) {
119419                                 if (field.locked()) { return; }
119420                                 event.preventDefault();
119421
119422                                 if (!d.lang || !d.value) {
119423                                     _multilingual.splice(index, 1);
119424                                     renderMultilingual(selection);
119425                                 } else {
119426                                     // remove from entity tags
119427                                     var t = {};
119428                                     t[key(d.lang)] = undefined;
119429                                     dispatch$1.call('change', this, t);
119430                                 }
119431
119432                             })
119433                             .call(svgIcon('#iD-operation-delete'));
119434
119435                         wrap
119436                             .append('input')
119437                             .attr('class', 'localized-lang')
119438                             .attr('type', 'text')
119439                             .attr('placeholder', t('translate.localized_translation_language'))
119440                             .on('blur', changeLang)
119441                             .on('change', changeLang)
119442                             .call(langCombo);
119443
119444                         wrap
119445                             .append('input')
119446                             .attr('type', 'text')
119447                             .attr('placeholder', t('translate.localized_translation_name'))
119448                             .attr('class', 'localized-value')
119449                             .on('blur', changeValue)
119450                             .on('change', changeValue);
119451                     });
119452
119453                 entriesEnter
119454                     .style('margin-top', '0px')
119455                     .style('max-height', '0px')
119456                     .style('opacity', '0')
119457                     .transition()
119458                     .duration(200)
119459                     .style('margin-top', '10px')
119460                     .style('max-height', '240px')
119461                     .style('opacity', '1')
119462                     .on('end', function() {
119463                         d3_select(this)
119464                             .style('max-height', '')
119465                             .style('overflow', 'visible');
119466                     });
119467
119468                 entries = entries.merge(entriesEnter);
119469
119470                 entries.order();
119471
119472                 utilGetSetValue(entries.select('.localized-lang'), function(d) {
119473                     return languageName(d.lang);
119474                 });
119475
119476                 utilGetSetValue(entries.select('.localized-value'),
119477                     function(d) { return d.value; });
119478             }
119479
119480
119481             localized.tags = function(tags) {
119482                 // Fetch translations from wikipedia
119483                 if (tags.wikipedia && !_wikiTitles) {
119484                     _wikiTitles = {};
119485                     var wm = tags.wikipedia.match(/([^:]+):(.+)/);
119486                     if (wm && wm[0] && wm[1]) {
119487                         wikipedia.translations(wm[1], wm[2], function(err, d) {
119488                             if (err || !d) { return; }
119489                             _wikiTitles = d;
119490                         });
119491                     }
119492                 }
119493
119494                 utilGetSetValue(input, tags[field.key] || '');
119495
119496                 calcMultilingual(tags);
119497
119498                 _selection
119499                     .call(localized);
119500             };
119501
119502
119503             localized.focus = function() {
119504                 input.node().focus();
119505             };
119506
119507
119508             localized.entity = function(val) {
119509                 if (!arguments.length) { return _entity; }
119510                 _entity = val;
119511                 _multilingual = [];
119512                 loadCountryCode();
119513                 return localized;
119514             };
119515
119516             function loadCountryCode() {
119517                 var center = _entity.extent(context.graph()).center();
119518                 var countryCode = iso1A2Code(center);
119519                 _countryCode = countryCode && countryCode.toLowerCase();
119520             }
119521
119522             return utilRebind(localized, dispatch$1, 'on');
119523         }
119524
119525         function uiFieldMaxspeed(field, context) {
119526             var dispatch$1 = dispatch('change');
119527             var unitInput = d3_select(null);
119528             var input = d3_select(null);
119529             var _entity;
119530             var _isImperial;
119531
119532             var speedCombo = uiCombobox(context, 'maxspeed');
119533             var unitCombo = uiCombobox(context, 'maxspeed-unit')
119534                     .data(['km/h', 'mph'].map(comboValues));
119535
119536             var metricValues = [20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120];
119537             var imperialValues = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80];
119538
119539
119540             function maxspeed(selection) {
119541
119542                 var wrap = selection.selectAll('.form-field-input-wrap')
119543                     .data([0]);
119544
119545                 wrap = wrap.enter()
119546                     .append('div')
119547                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
119548                     .merge(wrap);
119549
119550
119551                 input = wrap.selectAll('#preset-input-' + field.safeid)
119552                     .data([0]);
119553
119554                 input = input.enter()
119555                     .append('input')
119556                     .attr('type', 'text')
119557                     .attr('id', 'preset-input-' + field.safeid)
119558                     .attr('placeholder', field.placeholder())
119559                     .call(utilNoAuto)
119560                     .call(speedCombo)
119561                     .merge(input);
119562
119563                 input
119564                     .on('change', change)
119565                     .on('blur', change);
119566
119567                 var loc = _entity.extent(context.graph()).center();
119568
119569                 _isImperial = roadSpeedUnit(loc) === 'mph';
119570
119571                 unitInput = wrap.selectAll('input.maxspeed-unit')
119572                     .data([0]);
119573
119574                 unitInput = unitInput.enter()
119575                     .append('input')
119576                     .attr('type', 'text')
119577                     .attr('class', 'maxspeed-unit')
119578                     .call(unitCombo)
119579                     .merge(unitInput);
119580
119581                 unitInput
119582                     .on('blur', changeUnits)
119583                     .on('change', changeUnits);
119584
119585
119586                 function changeUnits() {
119587                     _isImperial = utilGetSetValue(unitInput) === 'mph';
119588                     utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
119589                     setSuggestions();
119590                     change();
119591                 }
119592             }
119593
119594
119595             function setSuggestions() {
119596                 speedCombo.data((_isImperial ? imperialValues : metricValues).map(comboValues));
119597                 utilGetSetValue(unitInput, _isImperial ? 'mph' : 'km/h');
119598             }
119599
119600
119601             function comboValues(d) {
119602                 return {
119603                     value: d.toString(),
119604                     title: d.toString()
119605                 };
119606             }
119607
119608
119609             function change() {
119610                 var tag = {};
119611                 var value = utilGetSetValue(input);
119612
119613                 if (!value) {
119614                     tag[field.key] = undefined;
119615                 } else if (isNaN(value) || !_isImperial) {
119616                     tag[field.key] = value;
119617                 } else {
119618                     tag[field.key] = value + ' mph';
119619                 }
119620
119621                 dispatch$1.call('change', this, tag);
119622             }
119623
119624
119625             maxspeed.tags = function(tags) {
119626                 var value = tags[field.key];
119627
119628                 if (value && value.indexOf('mph') >= 0) {
119629                     value = parseInt(value, 10);
119630                     _isImperial = true;
119631                 } else if (value) {
119632                     _isImperial = false;
119633                 }
119634
119635                 setSuggestions();
119636                 utilGetSetValue(input, value || '');
119637             };
119638
119639
119640             maxspeed.focus = function() {
119641                 input.node().focus();
119642             };
119643
119644
119645             maxspeed.entity = function(val) {
119646                 _entity = val;
119647             };
119648
119649
119650             return utilRebind(maxspeed, dispatch$1, 'on');
119651         }
119652
119653         function uiFieldRadio(field, context) {
119654             var dispatch$1 = dispatch('change');
119655             var placeholder = d3_select(null);
119656             var wrap = d3_select(null);
119657             var labels = d3_select(null);
119658             var radios = d3_select(null);
119659             var radioData = (field.options || (field.strings && field.strings.options && Object.keys(field.strings.options)) || field.keys).slice();  // shallow copy
119660             var typeField;
119661             var layerField;
119662             var _oldType = {};
119663             var _entity;
119664
119665
119666             function selectedKey() {
119667                 var node = wrap.selectAll('.form-field-input-radio label.active input');
119668                 return !node.empty() && node.datum();
119669             }
119670
119671
119672             function radio(selection) {
119673                 selection.classed('preset-radio', true);
119674
119675                 wrap = selection.selectAll('.form-field-input-wrap')
119676                     .data([0]);
119677
119678                 var enter = wrap.enter()
119679                     .append('div')
119680                     .attr('class', 'form-field-input-wrap form-field-input-radio');
119681
119682                 enter
119683                     .append('span')
119684                     .attr('class', 'placeholder');
119685
119686                 wrap = wrap
119687                     .merge(enter);
119688
119689
119690                 placeholder = wrap.selectAll('.placeholder');
119691
119692                 labels = wrap.selectAll('label')
119693                     .data(radioData);
119694
119695                 enter = labels.enter()
119696                     .append('label');
119697
119698                 enter
119699                     .append('input')
119700                     .attr('type', 'radio')
119701                     .attr('name', field.id)
119702                     .attr('value', function(d) { return field.t('options.' + d, { 'default': d }); })
119703                     .attr('checked', false);
119704
119705                 enter
119706                     .append('span')
119707                     .text(function(d) { return field.t('options.' + d, { 'default': d }); });
119708
119709                 labels = labels
119710                     .merge(enter);
119711
119712                 radios = labels.selectAll('input')
119713                     .on('change', changeRadio);
119714
119715             }
119716
119717
119718             function structureExtras(selection, tags) {
119719                 var selected = selectedKey() || tags.layer !== undefined;
119720                 var type = context.presets().field(selected);
119721                 var layer = context.presets().field('layer');
119722                 var showLayer = (selected === 'bridge' || selected === 'tunnel' || tags.layer !== undefined);
119723
119724
119725                 var extrasWrap = selection.selectAll('.structure-extras-wrap')
119726                     .data(selected ? [0] : []);
119727
119728                 extrasWrap.exit()
119729                     .remove();
119730
119731                 extrasWrap = extrasWrap.enter()
119732                     .append('div')
119733                     .attr('class', 'structure-extras-wrap')
119734                     .merge(extrasWrap);
119735
119736                 var list = extrasWrap.selectAll('ul')
119737                     .data([0]);
119738
119739                 list = list.enter()
119740                     .append('ul')
119741                     .attr('class', 'rows')
119742                     .merge(list);
119743
119744
119745                 // Type
119746                 if (type) {
119747                     if (!typeField || typeField.id !== selected) {
119748                         typeField = uiField(context, type, _entity, { wrap: false })
119749                             .on('change', changeType);
119750                     }
119751                     typeField.tags(tags);
119752                 } else {
119753                     typeField = null;
119754                 }
119755
119756                 var typeItem = list.selectAll('.structure-type-item')
119757                     .data(typeField ? [typeField] : [], function(d) { return d.id; });
119758
119759                 // Exit
119760                 typeItem.exit()
119761                     .remove();
119762
119763                 // Enter
119764                 var typeEnter = typeItem.enter()
119765                     .insert('li', ':first-child')
119766                     .attr('class', 'labeled-input structure-type-item');
119767
119768                 typeEnter
119769                     .append('span')
119770                     .attr('class', 'label structure-label-type')
119771                     .attr('for', 'preset-input-' + selected)
119772                     .text(t('inspector.radio.structure.type'));
119773
119774                 typeEnter
119775                     .append('div')
119776                     .attr('class', 'structure-input-type-wrap');
119777
119778                 // Update
119779                 typeItem = typeItem
119780                     .merge(typeEnter);
119781
119782                 if (typeField) {
119783                     typeItem.selectAll('.structure-input-type-wrap')
119784                         .call(typeField.render);
119785                 }
119786
119787
119788                 // Layer
119789                 if (layer && showLayer) {
119790                     if (!layerField) {
119791                         layerField = uiField(context, layer, _entity, { wrap: false })
119792                             .on('change', changeLayer);
119793                     }
119794                     layerField.tags(tags);
119795                     field.keys = utilArrayUnion(field.keys, ['layer']);
119796                 } else {
119797                     layerField = null;
119798                     field.keys = field.keys.filter(function(k) { return k !== 'layer'; });
119799                 }
119800
119801                 var layerItem = list.selectAll('.structure-layer-item')
119802                     .data(layerField ? [layerField] : []);
119803
119804                 // Exit
119805                 layerItem.exit()
119806                     .remove();
119807
119808                 // Enter
119809                 var layerEnter = layerItem.enter()
119810                     .append('li')
119811                     .attr('class', 'labeled-input structure-layer-item');
119812
119813                 layerEnter
119814                     .append('span')
119815                     .attr('class', 'label structure-label-layer')
119816                     .attr('for', 'preset-input-layer')
119817                     .text(t('inspector.radio.structure.layer'));
119818
119819                 layerEnter
119820                     .append('div')
119821                     .attr('class', 'structure-input-layer-wrap');
119822
119823                 // Update
119824                 layerItem = layerItem
119825                     .merge(layerEnter);
119826
119827                 if (layerField) {
119828                     layerItem.selectAll('.structure-input-layer-wrap')
119829                         .call(layerField.render);
119830                 }
119831             }
119832
119833
119834             function changeType(t, onInput) {
119835                 var key = selectedKey();
119836                 if (!key) { return; }
119837
119838                 var val = t[key];
119839                 if (val !== 'no') {
119840                     _oldType[key] = val;
119841                 }
119842
119843                 if (field.type === 'structureRadio') {
119844                     // remove layer if it should not be set
119845                     if (val === 'no' ||
119846                         (key !== 'bridge' && key !== 'tunnel') ||
119847                         (key === 'tunnel' && val === 'building_passage')) {
119848                         t.layer = undefined;
119849                     }
119850                     // add layer if it should be set
119851                     if (t.layer === undefined) {
119852                         if (key === 'bridge' && val !== 'no') {
119853                             t.layer = '1';
119854                         }
119855                         if (key === 'tunnel' && val !== 'no' && val !== 'building_passage') {
119856                             t.layer = '-1';
119857                         }
119858                     }
119859                  }
119860
119861                 dispatch$1.call('change', this, t, onInput);
119862             }
119863
119864
119865             function changeLayer(t, onInput) {
119866                 if (t.layer === '0') {
119867                     t.layer = undefined;
119868                 }
119869                 dispatch$1.call('change', this, t, onInput);
119870             }
119871
119872
119873             function changeRadio() {
119874                 var t = {};
119875                 var activeKey;
119876
119877                 if (field.key) {
119878                     t[field.key] = undefined;
119879                 }
119880
119881                 radios.each(function(d) {
119882                     var active = d3_select(this).property('checked');
119883                     if (active) { activeKey = d; }
119884
119885                     if (field.key) {
119886                         if (active) { t[field.key] = d; }
119887                     } else {
119888                         var val = _oldType[activeKey] || 'yes';
119889                         t[d] = active ? val : undefined;
119890                     }
119891                 });
119892
119893                 if (field.type === 'structureRadio') {
119894                     if (activeKey === 'bridge') {
119895                         t.layer = '1';
119896                     } else if (activeKey === 'tunnel' && t.tunnel !== 'building_passage') {
119897                         t.layer = '-1';
119898                     } else {
119899                         t.layer = undefined;
119900                     }
119901                 }
119902
119903                 dispatch$1.call('change', this, t);
119904             }
119905
119906
119907             radio.tags = function(tags) {
119908                 function checked(d) {
119909                     if (field.key) {
119910                         return tags[field.key] === d;
119911                     } else {
119912                         return !!(tags[d] && tags[d].toLowerCase() !== 'no');
119913                     }
119914                 }
119915
119916                 labels.classed('active', checked);
119917                 radios.property('checked', checked);
119918
119919                 var selection = radios.filter(function() { return this.checked; });
119920
119921                 if (selection.empty()) {
119922                     placeholder.text(t('inspector.none'));
119923                 } else {
119924                     placeholder.text(selection.attr('value'));
119925                     _oldType[selection.datum()] = tags[selection.datum()];
119926                 }
119927
119928                 if (field.type === 'structureRadio') {
119929                     // For waterways without a tunnel tag, set 'culvert' as
119930                     // the _oldType to default to if the user picks 'tunnel'
119931                     if (!!tags.waterway && !_oldType.tunnel) {
119932                         _oldType.tunnel = 'culvert';
119933                     }
119934
119935                     wrap.call(structureExtras, tags);
119936                 }
119937             };
119938
119939
119940             radio.focus = function() {
119941                 radios.node().focus();
119942             };
119943
119944
119945             radio.entity = function(val) {
119946                 if (!arguments.length) { return _entity; }
119947                 _entity = val;
119948                 _oldType = {};
119949                 return radio;
119950             };
119951
119952
119953             return utilRebind(radio, dispatch$1, 'on');
119954         }
119955
119956         function uiFieldRestrictions(field, context) {
119957             var dispatch$1 = dispatch('change');
119958             var breathe = behaviorBreathe();
119959
119960             context.storage('turn-restriction-via-way', null);                 // remove old key
119961             var storedViaWay = context.storage('turn-restriction-via-way0');   // use new key #6922
119962             var storedDistance = context.storage('turn-restriction-distance');
119963
119964             var _maxViaWay = storedViaWay !== null ? (+storedViaWay) : 0;
119965             var _maxDistance = storedDistance ? (+storedDistance) : 30;
119966             var _initialized = false;
119967             var _parent = d3_select(null);       // the entire field
119968             var _container = d3_select(null);    // just the map
119969             var _oldTurns;
119970             var _graph;
119971             var _vertexID;
119972             var _intersection;
119973             var _fromWayID;
119974
119975             var _lastXPos;
119976
119977
119978             function restrictions(selection) {
119979                 _parent = selection;
119980
119981                 // try to reuse the intersection, but always rebuild it if the graph has changed
119982                 if (_vertexID && (context.graph() !== _graph || !_intersection)) {
119983                     _graph = context.graph();
119984                     _intersection = osmIntersection(_graph, _vertexID, _maxDistance);
119985                 }
119986
119987                 // It's possible for there to be no actual intersection here.
119988                 // for example, a vertex of two `highway=path`
119989                 // In this case, hide the field.
119990                 var isOK = (
119991                     _intersection &&
119992                     _intersection.vertices.length &&           // has vertices
119993                     _intersection.vertices                     // has the vertex that the user selected
119994                         .filter(function(vertex) { return vertex.id === _vertexID; }).length &&
119995                     _intersection.ways.length > 2 &&           // has more than 2 ways
119996                     _intersection.ways                         // has more than 1 TO way
119997                         .filter(function(way) { return way.__to; }).length > 1
119998                 );
119999
120000                 // Also hide in the case where
120001                 d3_select(selection.node().parentNode).classed('hide', !isOK);
120002
120003                 // if form field is hidden or has detached from dom, clean up.
120004                 if (!isOK ||
120005                     !d3_select('.inspector-wrap.inspector-hidden').empty() ||
120006                     !selection.node().parentNode ||
120007                     !selection.node().parentNode.parentNode) {
120008                     selection.call(restrictions.off);
120009                     return;
120010                 }
120011
120012
120013                 var wrap = selection.selectAll('.form-field-input-wrap')
120014                     .data([0]);
120015
120016                 wrap = wrap.enter()
120017                     .append('div')
120018                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
120019                     .merge(wrap);
120020
120021                 var container = wrap.selectAll('.restriction-container')
120022                     .data([0]);
120023
120024                 // enter
120025                 var containerEnter = container.enter()
120026                     .append('div')
120027                     .attr('class', 'restriction-container');
120028
120029                 containerEnter
120030                     .append('div')
120031                     .attr('class', 'restriction-help');
120032
120033                 // update
120034                 _container = containerEnter
120035                     .merge(container)
120036                     .call(renderViewer);
120037
120038                 var controls = wrap.selectAll('.restriction-controls')
120039                     .data([0]);
120040
120041                 // enter/update
120042                 controls.enter()
120043                     .append('div')
120044                     .attr('class', 'restriction-controls-container')
120045                     .append('div')
120046                     .attr('class', 'restriction-controls')
120047                     .merge(controls)
120048                     .call(renderControls);
120049             }
120050
120051
120052             function renderControls(selection) {
120053                 var distControl = selection.selectAll('.restriction-distance')
120054                     .data([0]);
120055
120056                 distControl.exit()
120057                     .remove();
120058
120059                 var distControlEnter = distControl.enter()
120060                     .append('div')
120061                     .attr('class', 'restriction-control restriction-distance');
120062
120063                 distControlEnter
120064                     .append('span')
120065                     .attr('class', 'restriction-control-label restriction-distance-label')
120066                     .text(t('restriction.controls.distance') + ':');
120067
120068                 distControlEnter
120069                     .append('input')
120070                     .attr('class', 'restriction-distance-input')
120071                     .attr('type', 'range')
120072                     .attr('min', '20')
120073                     .attr('max', '50')
120074                     .attr('step', '5');
120075
120076                 distControlEnter
120077                     .append('span')
120078                     .attr('class', 'restriction-distance-text');
120079
120080                 // update
120081                 selection.selectAll('.restriction-distance-input')
120082                     .property('value', _maxDistance)
120083                     .on('input', function() {
120084                         var val = d3_select(this).property('value');
120085                         _maxDistance = +val;
120086                         _intersection = null;
120087                         _container.selectAll('.layer-osm .layer-turns *').remove();
120088                         context.storage('turn-restriction-distance', _maxDistance);
120089                         _parent.call(restrictions);
120090                     });
120091
120092                 selection.selectAll('.restriction-distance-text')
120093                     .text(displayMaxDistance(_maxDistance));
120094
120095
120096                 var viaControl = selection.selectAll('.restriction-via-way')
120097                     .data([0]);
120098
120099                 viaControl.exit()
120100                     .remove();
120101
120102                 var viaControlEnter = viaControl.enter()
120103                     .append('div')
120104                     .attr('class', 'restriction-control restriction-via-way');
120105
120106                 viaControlEnter
120107                     .append('span')
120108                     .attr('class', 'restriction-control-label restriction-via-way-label')
120109                     .text(t('restriction.controls.via') + ':');
120110
120111                 viaControlEnter
120112                     .append('input')
120113                     .attr('class', 'restriction-via-way-input')
120114                     .attr('type', 'range')
120115                     .attr('min', '0')
120116                     .attr('max', '2')
120117                     .attr('step', '1');
120118
120119                 viaControlEnter
120120                     .append('span')
120121                     .attr('class', 'restriction-via-way-text');
120122
120123                 // update
120124                 selection.selectAll('.restriction-via-way-input')
120125                     .property('value', _maxViaWay)
120126                     .on('input', function() {
120127                         var val = d3_select(this).property('value');
120128                         _maxViaWay = +val;
120129                         _container.selectAll('.layer-osm .layer-turns *').remove();
120130                         context.storage('turn-restriction-via-way0', _maxViaWay);
120131                         _parent.call(restrictions);
120132                     });
120133
120134                 selection.selectAll('.restriction-via-way-text')
120135                     .text(displayMaxVia(_maxViaWay));
120136             }
120137
120138
120139             function renderViewer(selection) {
120140                 if (!_intersection) { return; }
120141
120142                 var vgraph = _intersection.graph;
120143                 var filter = utilFunctor(true);
120144                 var projection = geoRawMercator();
120145
120146                 // Reflow warning: `utilGetDimensions` calls `getBoundingClientRect`
120147                 // Instead of asking the restriction-container for its dimensions,
120148                 //  we can ask the #sidebar, which can have its dimensions cached.
120149                 // width: calc as sidebar - padding
120150                 // height: hardcoded (from `80_app.css`)
120151                 // var d = utilGetDimensions(selection);
120152                 var sdims = utilGetDimensions(d3_select('#sidebar'));
120153                 var d = [ sdims[0] - 50, 370 ];
120154                 var c = geoVecScale(d, 0.5);
120155                 var z = 22;
120156
120157                 projection.scale(geoZoomToScale(z));
120158
120159                 // Calculate extent of all key vertices
120160                 var extent = geoExtent();
120161                 for (var i = 0; i < _intersection.vertices.length; i++) {
120162                     extent._extend(_intersection.vertices[i].extent());
120163                 }
120164
120165                 // If this is a large intersection, adjust zoom to fit extent
120166                 if (_intersection.vertices.length > 1) {
120167                     var padding = 180;   // in z22 pixels
120168                     var tl = projection([extent[0][0], extent[1][1]]);
120169                     var br = projection([extent[1][0], extent[0][1]]);
120170                     var hFactor = (br[0] - tl[0]) / (d[0] - padding);
120171                     var vFactor = (br[1] - tl[1]) / (d[1] - padding);
120172                     var hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2;
120173                     var vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2;
120174                     z = z - Math.max(hZoomDiff, vZoomDiff);
120175                     projection.scale(geoZoomToScale(z));
120176                 }
120177
120178                 var padTop = 35;   // reserve top space for hint text
120179                 var extentCenter = projection(extent.center());
120180                 extentCenter[1] = extentCenter[1] - padTop;
120181
120182                 projection
120183                     .translate(geoVecSubtract(c, extentCenter))
120184                     .clipExtent([[0, 0], d]);
120185
120186                 var drawLayers = svgLayers(projection, context).only(['osm','touch']).dimensions(d);
120187                 var drawVertices = svgVertices(projection, context);
120188                 var drawLines = svgLines(projection, context);
120189                 var drawTurns = svgTurns(projection, context);
120190
120191                 var firstTime = selection.selectAll('.surface').empty();
120192
120193                 selection
120194                     .call(drawLayers);
120195
120196                 var surface = selection.selectAll('.surface')
120197                     .classed('tr', true);
120198
120199                 if (firstTime) {
120200                     _initialized = true;
120201
120202                     surface
120203                         .call(breathe);
120204                 }
120205
120206                 // This can happen if we've lowered the detail while a FROM way
120207                 // is selected, and that way is no longer part of the intersection.
120208                 if (_fromWayID && !vgraph.hasEntity(_fromWayID)) {
120209                     _fromWayID = null;
120210                     _oldTurns = null;
120211                 }
120212
120213                 surface
120214                     .call(utilSetDimensions, d)
120215                     .call(drawVertices, vgraph, _intersection.vertices, filter, extent, z)
120216                     .call(drawLines, vgraph, _intersection.ways, filter)
120217                     .call(drawTurns, vgraph, _intersection.turns(_fromWayID, _maxViaWay));
120218
120219                 surface
120220                     .on('click.restrictions', click)
120221                     .on('mouseover.restrictions', mouseover);
120222
120223                 surface
120224                     .selectAll('.selected')
120225                     .classed('selected', false);
120226
120227                 surface
120228                     .selectAll('.related')
120229                     .classed('related', false);
120230
120231                 if (_fromWayID) {
120232                     var way = vgraph.entity(_fromWayID);
120233                     surface
120234                         .selectAll('.' + _fromWayID)
120235                         .classed('selected', true)
120236                         .classed('related', true);
120237                 }
120238
120239                 document.addEventListener('resizeWindow', function () {
120240                     utilSetDimensions(_container, null);
120241                     redraw(1);
120242                 }, false);
120243
120244                 updateHints(null);
120245
120246
120247                 function click() {
120248                     surface
120249                         .call(breathe.off)
120250                         .call(breathe);
120251
120252                     var datum = event.target.__data__;
120253                     var entity = datum && datum.properties && datum.properties.entity;
120254                     if (entity) {
120255                         datum = entity;
120256                     }
120257
120258                     if (datum instanceof osmWay && (datum.__from || datum.__via)) {
120259                         _fromWayID = datum.id;
120260                         _oldTurns = null;
120261                         redraw();
120262
120263                     } else if (datum instanceof osmTurn) {
120264                         var actions, extraActions, turns, i;
120265                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
120266
120267                         if (datum.restrictionID && !datum.direct) {
120268                             return;
120269
120270                         } else if (datum.restrictionID && !datum.only) {    // NO -> ONLY
120271                             var seen = {};
120272                             var datumOnly = JSON.parse(JSON.stringify(datum));   // deep clone the datum
120273                             datumOnly.only = true;                               // but change this property
120274                             restrictionType = restrictionType.replace(/^no/, 'only');
120275
120276                             // Adding an ONLY restriction should destroy all other direct restrictions from the FROM towards the VIA.
120277                             // We will remember them in _oldTurns, and restore them if the user clicks again.
120278                             turns = _intersection.turns(_fromWayID, 2);
120279                             extraActions = [];
120280                             _oldTurns = [];
120281                             for (i = 0; i < turns.length; i++) {
120282                                 var turn = turns[i];
120283                                 if (seen[turn.restrictionID]) { continue; }  // avoid deleting the turn twice (#4968, #4928)
120284
120285                                 if (turn.direct && turn.path[1] === datum.path[1]) {
120286                                     seen[turns[i].restrictionID] = true;
120287                                     turn.restrictionType = osmInferRestriction(vgraph, turn, projection);
120288                                     _oldTurns.push(turn);
120289                                     extraActions.push(actionUnrestrictTurn(turn));
120290                                 }
120291                             }
120292
120293                             actions = _intersection.actions.concat(extraActions, [
120294                                 actionRestrictTurn(datumOnly, restrictionType),
120295                                 t('operations.restriction.annotation.create')
120296                             ]);
120297
120298                         } else if (datum.restrictionID) {   // ONLY -> Allowed
120299                             // Restore whatever restrictions we might have destroyed by cycling thru the ONLY state.
120300                             // This relies on the assumption that the intersection was already split up when we
120301                             // performed the previous action (NO -> ONLY), so the IDs in _oldTurns shouldn't have changed.
120302                             turns = _oldTurns || [];
120303                             extraActions = [];
120304                             for (i = 0; i < turns.length; i++) {
120305                                 if (turns[i].key !== datum.key) {
120306                                     extraActions.push(actionRestrictTurn(turns[i], turns[i].restrictionType));
120307                                 }
120308                             }
120309                             _oldTurns = null;
120310
120311                             actions = _intersection.actions.concat(extraActions, [
120312                                 actionUnrestrictTurn(datum),
120313                                 t('operations.restriction.annotation.delete')
120314                             ]);
120315
120316                         } else {    // Allowed -> NO
120317                             actions = _intersection.actions.concat([
120318                                 actionRestrictTurn(datum, restrictionType),
120319                                 t('operations.restriction.annotation.create')
120320                             ]);
120321                         }
120322
120323                         context.perform.apply(context, actions);
120324
120325                         // At this point the datum will be changed, but will have same key..
120326                         // Refresh it and update the help..
120327                         var s = surface.selectAll('.' + datum.key);
120328                         datum = s.empty() ? null : s.datum();
120329                         updateHints(datum);
120330
120331                     } else {
120332                         _fromWayID = null;
120333                         _oldTurns = null;
120334                         redraw();
120335                     }
120336                 }
120337
120338
120339                 function mouseover() {
120340                     var datum = event.target.__data__;
120341                     updateHints(datum);
120342                 }
120343
120344                 _lastXPos = _lastXPos || sdims[0];
120345
120346                 function redraw(minChange) {
120347                     var xPos = -1;
120348
120349                     if (minChange) {
120350                         xPos = utilGetDimensions(d3_select('#sidebar'))[0];
120351                     }
120352
120353                     if (!minChange || (minChange && Math.abs(xPos - _lastXPos) >= minChange)) {
120354                         if (context.hasEntity(_vertexID)) {
120355                             _lastXPos = xPos;
120356                             _container.call(renderViewer);
120357                         }
120358                     }
120359                 }
120360
120361
120362                 function highlightPathsFrom(wayID) {
120363                     surface.selectAll('.related')
120364                         .classed('related', false)
120365                         .classed('allow', false)
120366                         .classed('restrict', false)
120367                         .classed('only', false);
120368
120369                     surface.selectAll('.' + wayID)
120370                         .classed('related', true);
120371
120372                     if (wayID) {
120373                         var turns = _intersection.turns(wayID, _maxViaWay);
120374                         for (var i = 0; i < turns.length; i++) {
120375                             var turn = turns[i];
120376                             var ids = [turn.to.way];
120377                             var klass = (turn.no ? 'restrict' : (turn.only ? 'only' : 'allow'));
120378
120379                             if (turn.only || turns.length === 1) {
120380                                 if (turn.via.ways) {
120381                                     ids = ids.concat(turn.via.ways);
120382                                 }
120383                             } else if (turn.to.way === wayID) {
120384                                 continue;
120385                             }
120386
120387                             surface.selectAll(utilEntitySelector(ids))
120388                                 .classed('related', true)
120389                                 .classed('allow', (klass === 'allow'))
120390                                 .classed('restrict', (klass === 'restrict'))
120391                                 .classed('only', (klass === 'only'));
120392                         }
120393                     }
120394                 }
120395
120396
120397                 function updateHints(datum) {
120398                     var help = _container.selectAll('.restriction-help').html('');
120399
120400                     var placeholders = {};
120401                     ['from', 'via', 'to'].forEach(function(k) {
120402                         placeholders[k] = '<span class="qualifier">' + t('restriction.help.' + k) + '</span>';
120403                     });
120404
120405                     var entity = datum && datum.properties && datum.properties.entity;
120406                     if (entity) {
120407                         datum = entity;
120408                     }
120409
120410                     if (_fromWayID) {
120411                         way = vgraph.entity(_fromWayID);
120412                         surface
120413                             .selectAll('.' + _fromWayID)
120414                             .classed('selected', true)
120415                             .classed('related', true);
120416                     }
120417
120418                     // Hovering a way
120419                     if (datum instanceof osmWay && datum.__from) {
120420                         way = datum;
120421
120422                         highlightPathsFrom(_fromWayID ? null : way.id);
120423                         surface.selectAll('.' + way.id)
120424                             .classed('related', true);
120425
120426                         var clickSelect = (!_fromWayID || _fromWayID !== way.id);
120427                         help
120428                             .append('div')      // "Click to select FROM {fromName}." / "FROM {fromName}"
120429                             .html(t('restriction.help.' + (clickSelect ? 'select_from_name' : 'from_name'), {
120430                                 from: placeholders.from,
120431                                 fromName: displayName(way.id, vgraph)
120432                             }));
120433
120434
120435                     // Hovering a turn arrow
120436                     } else if (datum instanceof osmTurn) {
120437                         var restrictionType = osmInferRestriction(vgraph, datum, projection);
120438                         var turnType = restrictionType.replace(/^(only|no)\_/, '');
120439                         var indirect = (datum.direct === false ? t('restriction.help.indirect') : '');
120440                         var klass, turnText, nextText;
120441
120442                         if (datum.no) {
120443                             klass = 'restrict';
120444                             turnText = t('restriction.help.turn.no_' + turnType, { indirect: indirect });
120445                             nextText = t('restriction.help.turn.only_' + turnType, { indirect: '' });
120446                         } else if (datum.only) {
120447                             klass = 'only';
120448                             turnText = t('restriction.help.turn.only_' + turnType, { indirect: indirect });
120449                             nextText = t('restriction.help.turn.allowed_' + turnType, { indirect: '' });
120450                         } else {
120451                             klass = 'allow';
120452                             turnText = t('restriction.help.turn.allowed_' + turnType, { indirect: indirect });
120453                             nextText = t('restriction.help.turn.no_' + turnType, { indirect: '' });
120454                         }
120455
120456                         help
120457                             .append('div')      // "NO Right Turn (indirect)"
120458                             .attr('class', 'qualifier ' + klass)
120459                             .text(turnText);
120460
120461                         help
120462                             .append('div')      // "FROM {fromName} TO {toName}"
120463                             .html(t('restriction.help.from_name_to_name', {
120464                                 from: placeholders.from,
120465                                 fromName: displayName(datum.from.way, vgraph),
120466                                 to: placeholders.to,
120467                                 toName: displayName(datum.to.way, vgraph)
120468                             }));
120469
120470                         if (datum.via.ways && datum.via.ways.length) {
120471                             var names = [];
120472                             for (var i = 0; i < datum.via.ways.length; i++) {
120473                                 var prev = names[names.length - 1];
120474                                 var curr = displayName(datum.via.ways[i], vgraph);
120475                                 if (!prev || curr !== prev)   // collapse identical names
120476                                     { names.push(curr); }
120477                             }
120478
120479                             help
120480                                 .append('div')      // "VIA {viaNames}"
120481                                 .html(t('restriction.help.via_names', {
120482                                     via: placeholders.via,
120483                                     viaNames: names.join(', ')
120484                                 }));
120485                         }
120486
120487                         if (!indirect) {
120488                             help
120489                                 .append('div')      // Click for "No Right Turn"
120490                                 .text(t('restriction.help.toggle', { turn: nextText.trim() }));
120491                         }
120492
120493                         highlightPathsFrom(null);
120494                         var alongIDs = datum.path.slice();
120495                         surface.selectAll(utilEntitySelector(alongIDs))
120496                             .classed('related', true)
120497                             .classed('allow', (klass === 'allow'))
120498                             .classed('restrict', (klass === 'restrict'))
120499                             .classed('only', (klass === 'only'));
120500
120501
120502                     // Hovering empty surface
120503                     } else {
120504                         highlightPathsFrom(null);
120505                         if (_fromWayID) {
120506                             help
120507                                 .append('div')      // "FROM {fromName}"
120508                                 .html(t('restriction.help.from_name', {
120509                                     from: placeholders.from,
120510                                     fromName: displayName(_fromWayID, vgraph)
120511                                 }));
120512
120513                         } else {
120514                             help
120515                                 .append('div')      // "Click to select a FROM segment."
120516                                 .html(t('restriction.help.select_from', {
120517                                     from: placeholders.from
120518                                 }));
120519                         }
120520                     }
120521                 }
120522             }
120523
120524
120525             function displayMaxDistance(maxDist) {
120526                 var isImperial = (utilDetect().locale.toLowerCase() === 'en-us');
120527                 var opts;
120528
120529                 if (isImperial) {
120530                     var distToFeet = {   // imprecise conversion for prettier display
120531                         20: 70, 25: 85, 30: 100, 35: 115, 40: 130, 45: 145, 50: 160
120532                     }[maxDist];
120533                     opts = { distance: t('units.feet', { quantity: distToFeet }) };
120534                 } else {
120535                     opts = { distance: t('units.meters', { quantity: maxDist }) };
120536                 }
120537
120538                 return t('restriction.controls.distance_up_to', opts);
120539             }
120540
120541
120542             function displayMaxVia(maxVia) {
120543                 return maxVia === 0 ? t('restriction.controls.via_node_only')
120544                     : maxVia === 1 ? t('restriction.controls.via_up_to_one')
120545                     : t('restriction.controls.via_up_to_two');
120546             }
120547
120548
120549             function displayName(entityID, graph) {
120550                 var entity = graph.entity(entityID);
120551                 var name = utilDisplayName(entity) || '';
120552                 var matched = context.presets().match(entity, graph);
120553                 var type = (matched && matched.name()) || utilDisplayType(entity.id);
120554                 return name || type;
120555             }
120556
120557
120558             restrictions.entity = function(val) {
120559                 _intersection = null;
120560                 _fromWayID = null;
120561                 _oldTurns = null;
120562                 _vertexID = val.id;
120563             };
120564
120565
120566             restrictions.tags = function() {};
120567             restrictions.focus = function() {};
120568
120569
120570             restrictions.off = function(selection) {
120571                 if (!_initialized) { return; }
120572
120573                 selection.selectAll('.surface')
120574                     .call(breathe.off)
120575                     .on('click.restrictions', null)
120576                     .on('mouseover.restrictions', null);
120577
120578                 d3_select(window)
120579                     .on('resize.restrictions', null);
120580             };
120581
120582
120583             return utilRebind(restrictions, dispatch$1, 'on');
120584         }
120585
120586         function uiFieldTextarea(field) {
120587             var dispatch$1 = dispatch('change');
120588             var input = d3_select(null);
120589
120590
120591             function textarea(selection) {
120592                 var wrap = selection.selectAll('.form-field-input-wrap')
120593                     .data([0]);
120594
120595                 wrap = wrap.enter()
120596                     .append('div')
120597                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
120598                     .merge(wrap);
120599
120600                 input = wrap.selectAll('textarea')
120601                     .data([0]);
120602
120603                 input = input.enter()
120604                     .append('textarea')
120605                     .attr('id', 'preset-input-' + field.safeid)
120606                     .attr('placeholder', field.placeholder() || t('inspector.unknown'))
120607                     .attr('maxlength', 255)
120608                     .call(utilNoAuto)
120609                     .on('input', change(true))
120610                     .on('blur', change())
120611                     .on('change', change())
120612                     .merge(input);
120613             }
120614
120615
120616             function change(onInput) {
120617                 return function() {
120618                     var t = {};
120619                     t[field.key] = utilGetSetValue(input) || undefined;
120620                     dispatch$1.call('change', this, t, onInput);
120621                 };
120622             }
120623
120624
120625             textarea.tags = function(tags) {
120626                 utilGetSetValue(input, tags[field.key] || '');
120627             };
120628
120629
120630             textarea.focus = function() {
120631                 input.node().focus();
120632             };
120633
120634
120635             return utilRebind(textarea, dispatch$1, 'on');
120636         }
120637
120638         function uiFieldWikidata(field, context) {
120639             var wikidata = services$1.wikidata;
120640             var dispatch$1 = dispatch('change');
120641             var searchInput = d3_select(null);
120642             var _qid = null;
120643             var _wikidataEntity = null;
120644             var _wikiURL = '';
120645             var _entity;
120646
120647             var _wikipediaKey = field.keys && field.keys.find(function(key) {
120648                     return key.includes('wikipedia');
120649                 }),
120650                 _hintKey = field.key === 'wikidata' ? 'name' : field.key.split(':')[0];
120651
120652             var combobox = uiCombobox(context, 'combo-' + field.safeid)
120653                 .caseSensitive(true)
120654                 .minItems(1);
120655
120656             function wiki(selection) {
120657
120658                 var wrap = selection.selectAll('.form-field-input-wrap')
120659                     .data([0]);
120660
120661                 wrap = wrap.enter()
120662                     .append('div')
120663                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
120664                     .merge(wrap);
120665
120666
120667                 var list = wrap.selectAll('ul')
120668                     .data([0]);
120669
120670                 list = list.enter()
120671                     .append('ul')
120672                     .attr('class', 'rows')
120673                     .merge(list);
120674
120675                 var searchRow = list.selectAll('li.wikidata-search')
120676                     .data([0]);
120677
120678                 var searchRowEnter = searchRow.enter()
120679                     .append('li')
120680                     .attr('class', 'wikidata-search');
120681
120682                 searchInput = searchRowEnter
120683                     .append('input')
120684                     .attr('type', 'text')
120685                     .style('flex', '1')
120686                     .call(utilNoAuto);
120687
120688                 searchInput
120689                     .on('focus', function() {
120690                         var node = d3_select(this).node();
120691                         node.setSelectionRange(0, node.value.length);
120692                     })
120693                     .on('blur', function() {
120694                         setLabelForEntity();
120695                     })
120696                     .call(combobox.fetcher(fetchWikidataItems));
120697
120698                 combobox.on('accept', function(d) {
120699                     _qid = d.id;
120700                     change();
120701                 }).on('cancel', function() {
120702                     setLabelForEntity();
120703                 });
120704
120705                 searchRowEnter
120706                     .append('button')
120707                     .attr('class', 'form-field-button wiki-link')
120708                     .attr('title', t('icons.view_on', { domain: 'wikidata.org' }))
120709                     .attr('tabindex', -1)
120710                     .call(svgIcon('#iD-icon-out-link'))
120711                     .on('click', function() {
120712                         event.preventDefault();
120713                         if (_wikiURL) { window.open(_wikiURL, '_blank'); }
120714                     });
120715
120716                 var wikidataProperties = ['description', 'identifier'];
120717
120718                 var items = list.selectAll('li.labeled-input')
120719                     .data(wikidataProperties);
120720
120721                 // Enter
120722                 var enter = items.enter()
120723                     .append('li')
120724                     .attr('class', function(d) { return 'labeled-input preset-wikidata-' + d; });
120725
120726                 enter
120727                     .append('span')
120728                     .attr('class', 'label')
120729                     .attr('for', function(d) { return 'preset-input-wikidata-' + d; })
120730                     .text(function(d) { return t('wikidata.' + d); });
120731
120732                 enter
120733                     .append('input')
120734                     .attr('type', 'text')
120735                     .attr('id', function(d) { return 'preset-input-wikidata-' + d; })
120736                     .call(utilNoAuto)
120737                     .classed('disabled', 'true')
120738                     .attr('readonly', 'true');
120739
120740                 enter
120741                     .append('button')
120742                     .attr('class', 'form-field-button')
120743                     .attr('title', t('icons.copy'))
120744                     .attr('tabindex', -1)
120745                     .call(svgIcon('#iD-operation-copy'))
120746                     .on('click', function() {
120747                         event.preventDefault();
120748                         d3_select(this.parentNode)
120749                             .select('input')
120750                             .node()
120751                             .select();
120752                         document.execCommand('copy');
120753                     });
120754
120755             }
120756
120757             function fetchWikidataItems(q, callback) {
120758
120759                 if (!q && _entity) {
120760                     q = (_hintKey && context.entity(_entity.id).tags[_hintKey]) || '';
120761                 }
120762
120763                 wikidata.itemsForSearchQuery(q, function(err, data) {
120764                     if (err) { return; }
120765
120766                     for (var i in data) {
120767                         data[i].value = data[i].label + ' (' +  data[i].id + ')';
120768                         data[i].title = data[i].description;
120769                     }
120770
120771                     if (callback) { callback(data); }
120772                 });
120773             }
120774
120775
120776             function change() {
120777                 var syncTags = {};
120778                 syncTags[field.key] = _qid;
120779                 dispatch$1.call('change', this, syncTags);
120780
120781                 // attempt asynchronous update of wikidata tag..
120782                 var initGraph = context.graph();
120783                 var initEntityID = _entity.id;
120784
120785                 wikidata.entityByQID(_qid, function(err, entity) {
120786                     if (err) { return; }
120787
120788                     // If graph has changed, we can't apply this update.
120789                     if (context.graph() !== initGraph) { return; }
120790
120791                     if (!entity.sitelinks) { return; }
120792
120793                     var langs = wikidata.languagesToQuery();
120794                     // use the label and description languages as fallbacks
120795                     ['labels', 'descriptions'].forEach(function(key) {
120796                         if (!entity[key]) { return; }
120797
120798                         var valueLangs = Object.keys(entity[key]);
120799                         if (valueLangs.length === 0) { return; }
120800                         var valueLang = valueLangs[0];
120801
120802                         if (langs.indexOf(valueLang) === -1) {
120803                             langs.push(valueLang);
120804                         }
120805                     });
120806
120807                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
120808
120809                     if (_wikipediaKey) {
120810                         var foundPreferred;
120811                         for (var i in langs) {
120812                             var lang = langs[i];
120813                             var siteID = lang.replace('-', '_') + 'wiki';
120814                             if (entity.sitelinks[siteID]) {
120815                                 foundPreferred = true;
120816                                 currTags[_wikipediaKey] = lang + ':' + entity.sitelinks[siteID].title;
120817                                 // use the first match
120818                                 break;
120819                             }
120820                         }
120821
120822                         if (!foundPreferred) {
120823                             // No wikipedia sites available in the user's language or the fallback languages,
120824                             // default to any wikipedia sitelink
120825
120826                             var wikiSiteKeys = Object.keys(entity.sitelinks).filter(function(site) {
120827                                 return site.endsWith('wiki');
120828                             });
120829
120830                             if (wikiSiteKeys.length === 0) {
120831                                 // if no wikipedia pages are linked to this wikidata entity, delete that tag
120832                                 if (currTags[_wikipediaKey]) {
120833                                     delete currTags[_wikipediaKey];
120834                                 }
120835                             } else {
120836                                 var wikiLang = wikiSiteKeys[0].slice(0, -4).replace('_', '-');
120837                                 var wikiTitle = entity.sitelinks[wikiSiteKeys[0]].title;
120838                                 currTags[_wikipediaKey] = wikiLang + ':' + wikiTitle;
120839                             }
120840                         }
120841                     }
120842
120843                     // Coalesce the update of wikidata tag into the previous tag change
120844                     context.overwrite(
120845                         actionChangeTags(initEntityID, currTags),
120846                         context.history().undoAnnotation()
120847                     );
120848
120849                     // do not dispatch.call('change') here, because entity_editor
120850                     // changeTags() is not intended to be called asynchronously
120851
120852                 });
120853             }
120854
120855             function setLabelForEntity() {
120856                 var label = '';
120857                 if (_wikidataEntity) {
120858                     label = entityPropertyForDisplay(_wikidataEntity, 'labels');
120859                     if (label.length === 0) {
120860                         label = _wikidataEntity.id.toString();
120861                     }
120862                 }
120863                 utilGetSetValue(d3_select('li.wikidata-search input'), label);
120864             }
120865
120866
120867             wiki.tags = function(tags) {
120868                 _qid = tags[field.key] || '';
120869
120870                 if (!/^Q[0-9]*$/.test(_qid)) {   // not a proper QID
120871                     unrecognized();
120872                     return;
120873                 }
120874
120875                 // QID value in correct format
120876                 _wikiURL = 'https://wikidata.org/wiki/' + _qid;
120877                 wikidata.entityByQID(_qid, function(err, entity) {
120878                     if (err) {
120879                         unrecognized();
120880                         return;
120881                     }
120882                     _wikidataEntity = entity;
120883
120884                     setLabelForEntity();
120885
120886                     var description = entityPropertyForDisplay(entity, 'descriptions');
120887
120888                     d3_select('.form-field-wikidata button.wiki-link')
120889                         .classed('disabled', false);
120890
120891                     d3_select('.preset-wikidata-description')
120892                         .style('display', function(){
120893                             return description.length > 0 ? 'flex' : 'none';
120894                         })
120895                         .select('input')
120896                         .attr('value', description);
120897
120898                     d3_select('.preset-wikidata-identifier')
120899                         .style('display', function(){
120900                             return entity.id ? 'flex' : 'none';
120901                         })
120902                         .select('input')
120903                         .attr('value', entity.id);
120904                 });
120905
120906
120907                 // not a proper QID
120908                 function unrecognized() {
120909                     _wikidataEntity = null;
120910                     setLabelForEntity();
120911
120912                     d3_select('.preset-wikidata-description')
120913                         .style('display', 'none');
120914                     d3_select('.preset-wikidata-identifier')
120915                         .style('display', 'none');
120916
120917                     d3_select('.form-field-wikidata button.wiki-link')
120918                         .classed('disabled', true);
120919
120920                     if (_qid && _qid !== '') {
120921                         _wikiURL = 'https://wikidata.org/wiki/Special:Search?search=' + _qid;
120922                     } else {
120923                         _wikiURL = '';
120924                     }
120925                 }
120926             };
120927
120928             function entityPropertyForDisplay(wikidataEntity, propKey) {
120929                 if (!wikidataEntity[propKey]) { return ''; }
120930                 var propObj = wikidataEntity[propKey];
120931                 var langKeys = Object.keys(propObj);
120932                 if (langKeys.length === 0) { return ''; }
120933                 // sorted by priority, since we want to show the user's language first if possible
120934                 var langs = wikidata.languagesToQuery();
120935                 for (var i in langs) {
120936                     var lang = langs[i];
120937                     var valueObj = propObj[lang];
120938                     if (valueObj && valueObj.value && valueObj.value.length > 0) { return valueObj.value; }
120939                 }
120940                 // default to any available value
120941                 return propObj[langKeys[0]].value;
120942             }
120943
120944
120945             wiki.entity = function(val) {
120946                 if (!arguments.length) { return _entity; }
120947                 _entity = val;
120948                 return wiki;
120949             };
120950
120951
120952             wiki.focus = function() {
120953                 searchInput.node().focus();
120954             };
120955
120956
120957             return utilRebind(wiki, dispatch$1, 'on');
120958         }
120959
120960         function uiFieldWikipedia(field, context) {
120961             var dispatch$1 = dispatch('change');
120962             var wikipedia = services$1.wikipedia;
120963             var wikidata = services$1.wikidata;
120964             var lang = d3_select(null);
120965             var title = d3_select(null);
120966             var _wikiURL = '';
120967             var _entity;
120968
120969             var langCombo = uiCombobox(context, 'wikipedia-lang')
120970                 .fetcher(function(value, cb) {
120971                     var v = value.toLowerCase();
120972
120973                     cb(wikipedia$2.filter(function(d) {
120974                         return d[0].toLowerCase().indexOf(v) >= 0 ||
120975                             d[1].toLowerCase().indexOf(v) >= 0 ||
120976                             d[2].toLowerCase().indexOf(v) >= 0;
120977                     }).map(function(d) {
120978                         return { value: d[1] };
120979                     }));
120980                 });
120981
120982             var titleCombo = uiCombobox(context, 'wikipedia-title')
120983                 .fetcher(function(value, cb) {
120984                     if (!value && _entity) {
120985                         value = context.entity(_entity.id).tags.name || '';
120986                     }
120987
120988                     var searchfn = value.length > 7 ? wikipedia.search : wikipedia.suggestions;
120989                     searchfn(language()[2], value, function(query, data) {
120990                         cb(data.map(function(d) {
120991                             return { value: d };
120992                         }));
120993                     });
120994                 });
120995
120996
120997             function wiki(selection) {
120998                 var wrap = selection.selectAll('.form-field-input-wrap')
120999                     .data([0]);
121000
121001                 wrap = wrap.enter()
121002                     .append('div')
121003                     .attr('class', 'form-field-input-wrap form-field-input-' + field.type)
121004                     .merge(wrap);
121005
121006
121007                 var langRow = wrap.selectAll('.wiki-lang-container')
121008                     .data([0]);
121009
121010                 langRow = langRow.enter()
121011                     .append('div')
121012                     .attr('class', 'wiki-lang-container')
121013                     .merge(langRow);
121014
121015
121016                 lang = langRow.selectAll('input.wiki-lang')
121017                     .data([0]);
121018
121019                 lang = lang.enter()
121020                     .append('input')
121021                     .attr('type', 'text')
121022                     .attr('class', 'wiki-lang')
121023                     .attr('placeholder', t('translate.localized_translation_language'))
121024                     .call(utilNoAuto)
121025                     .call(langCombo)
121026                     .merge(lang);
121027
121028                 utilGetSetValue(lang, language()[1]);
121029
121030                 lang
121031                     .on('blur', changeLang)
121032                     .on('change', changeLang);
121033
121034
121035                 var titleRow = wrap.selectAll('.wiki-title-container')
121036                     .data([0]);
121037
121038                 titleRow = titleRow.enter()
121039                     .append('div')
121040                     .attr('class', 'wiki-title-container')
121041                     .merge(titleRow);
121042
121043                 title = titleRow.selectAll('input.wiki-title')
121044                     .data([0]);
121045
121046                 title = title.enter()
121047                     .append('input')
121048                     .attr('type', 'text')
121049                     .attr('class', 'wiki-title')
121050                     .attr('id', 'preset-input-' + field.safeid)
121051                     .call(utilNoAuto)
121052                     .call(titleCombo)
121053                     .merge(title);
121054
121055                 title
121056                     .on('blur', blur)
121057                     .on('change', change);
121058
121059
121060                 var link = titleRow.selectAll('.wiki-link')
121061                     .data([0]);
121062
121063                 link = link.enter()
121064                     .append('button')
121065                     .attr('class', 'form-field-button wiki-link')
121066                     .attr('tabindex', -1)
121067                     .attr('title', t('icons.view_on', { domain: 'wikipedia.org' }))
121068                     .call(svgIcon('#iD-icon-out-link'))
121069                     .merge(link);
121070
121071                 link
121072                     .on('click', function() {
121073                         event.preventDefault();
121074                         if (_wikiURL) { window.open(_wikiURL, '_blank'); }
121075                     });
121076             }
121077
121078
121079             function language() {
121080                 var value = utilGetSetValue(lang).toLowerCase();
121081                 var locale = utilDetect().locale.toLowerCase();
121082                 var localeLanguage;
121083                 return wikipedia$2.find(function(d) {
121084                     if (d[2] === locale) { localeLanguage = d; }
121085                     return d[0].toLowerCase() === value ||
121086                         d[1].toLowerCase() === value ||
121087                         d[2] === value;
121088                 }) || localeLanguage || ['English', 'English', 'en'];
121089             }
121090
121091
121092             function changeLang() {
121093                 utilGetSetValue(lang, language()[1]);
121094                 change(true);
121095             }
121096
121097
121098             function blur() {
121099                 change(true);
121100             }
121101
121102
121103             function change(skipWikidata) {
121104                 var value = utilGetSetValue(title);
121105                 var m = value.match(/https?:\/\/([-a-z]+)\.wikipedia\.org\/(?:wiki|\1-[-a-z]+)\/([^#]+)(?:#(.+))?/);
121106                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
121107                 var syncTags = {};
121108
121109                 if (l) {
121110                     // Normalize title http://www.mediawiki.org/wiki/API:Query#Title_normalization
121111                     value = decodeURIComponent(m[2]).replace(/_/g, ' ');
121112                     if (m[3]) {
121113                         var anchor;
121114                         // try {
121115                         // leave this out for now - #6232
121116                             // Best-effort `anchordecode:` implementation
121117                             // anchor = decodeURIComponent(m[3].replace(/\.([0-9A-F]{2})/g, '%$1'));
121118                         // } catch (e) {
121119                             anchor = decodeURIComponent(m[3]);
121120                         // }
121121                         value += '#' + anchor.replace(/_/g, ' ');
121122                     }
121123                     value = value.slice(0, 1).toUpperCase() + value.slice(1);
121124                     utilGetSetValue(lang, l[1]);
121125                     utilGetSetValue(title, value);
121126                 }
121127
121128                 if (value) {
121129                     syncTags.wikipedia = language()[2] + ':' + value;
121130                 } else {
121131                     syncTags.wikipedia = undefined;
121132                 }
121133
121134                 dispatch$1.call('change', this, syncTags);
121135
121136
121137                 if (skipWikidata || !value || !language()[2]) { return; }
121138
121139                 // attempt asynchronous update of wikidata tag..
121140                 var initGraph = context.graph();
121141                 var initEntityID = _entity.id;
121142
121143                 wikidata.itemsByTitle(language()[2], value, function(err, data) {
121144                     if (err) { return; }
121145
121146                     // If graph has changed, we can't apply this update.
121147                     if (context.graph() !== initGraph) { return; }
121148
121149                     if (!data || !Object.keys(data).length) { return; }
121150
121151                     var qids = Object.keys(data);
121152                     var value = qids && qids.find(function(id) { return id.match(/^Q\d+$/); });
121153                     var currTags = Object.assign({}, context.entity(initEntityID).tags);  // shallow copy
121154
121155                     currTags.wikidata = value;
121156
121157                     // Coalesce the update of wikidata tag into the previous tag change
121158                     context.overwrite(
121159                         actionChangeTags(initEntityID, currTags),
121160                         context.history().undoAnnotation()
121161                     );
121162
121163                     // do not dispatch.call('change') here, because entity_editor
121164                     // changeTags() is not intended to be called asynchronously
121165                 });
121166             }
121167
121168
121169             wiki.tags = function(tags) {
121170                 var value = tags[field.key] || '';
121171                 var m = value.match(/([^:]+):([^#]+)(?:#(.+))?/);
121172                 var l = m && wikipedia$2.find(function(d) { return m[1] === d[2]; });
121173                 var anchor = m && m[3];
121174
121175                 // value in correct format
121176                 if (l) {
121177                     utilGetSetValue(lang, l[1]);
121178                     utilGetSetValue(title, m[2] + (anchor ? ('#' + anchor) : ''));
121179                     if (anchor) {
121180                         try {
121181                             // Best-effort `anchorencode:` implementation
121182                             anchor = encodeURIComponent(anchor.replace(/ /g, '_')).replace(/%/g, '.');
121183                         } catch (e) {
121184                             anchor = anchor.replace(/ /g, '_');
121185                         }
121186                     }
121187                     _wikiURL = 'https://' + m[1] + '.wikipedia.org/wiki/' +
121188                         m[2].replace(/ /g, '_') + (anchor ? ('#' + anchor) : '');
121189
121190                 // unrecognized value format
121191                 } else {
121192                     utilGetSetValue(title, value);
121193                     if (value && value !== '') {
121194                         utilGetSetValue(lang, '');
121195                         _wikiURL = 'https://en.wikipedia.org/wiki/Special:Search?search=' + value;
121196                     } else {
121197                         _wikiURL = '';
121198                     }
121199                 }
121200             };
121201
121202
121203             wiki.entity = function(val) {
121204                 if (!arguments.length) { return _entity; }
121205                 _entity = val;
121206                 return wiki;
121207             };
121208
121209
121210             wiki.focus = function() {
121211                 title.node().focus();
121212             };
121213
121214
121215             return utilRebind(wiki, dispatch$1, 'on');
121216         }
121217
121218         var uiFields = {
121219             access: uiFieldAccess,
121220             address: uiFieldAddress,
121221             check: uiFieldCheck,
121222             combo: uiFieldCombo,
121223             cycleway: uiFieldCycleway,
121224             defaultCheck: uiFieldCheck,
121225             email: uiFieldText,
121226             identifier: uiFieldText,
121227             lanes: uiFieldLanes,
121228             localized: uiFieldLocalized,
121229             maxspeed: uiFieldMaxspeed,
121230             multiCombo: uiFieldCombo,
121231             networkCombo: uiFieldCombo,
121232             number: uiFieldText,
121233             onewayCheck: uiFieldCheck,
121234             radio: uiFieldRadio,
121235             restrictions: uiFieldRestrictions,
121236             semiCombo: uiFieldCombo,
121237             structureRadio: uiFieldRadio,
121238             tel: uiFieldText,
121239             text: uiFieldText,
121240             textarea: uiFieldTextarea,
121241             typeCombo: uiFieldCombo,
121242             url: uiFieldText,
121243             wikidata: uiFieldWikidata,
121244             wikipedia: uiFieldWikipedia
121245         };
121246
121247         function uiField(context, presetField, entity, options) {
121248             options = Object.assign({
121249                 show: true,
121250                 wrap: true,
121251                 remove: true,
121252                 revert: true,
121253                 info: true
121254             }, options);
121255
121256             var dispatch$1 = dispatch('change');
121257             var field = Object.assign({}, presetField);   // shallow copy
121258             var _show = options.show;
121259             var _state = '';
121260             var _tags = {};
121261
121262             var _locked = false;
121263             var _lockedTip = tooltip()
121264                 .title(t('inspector.lock.suggestion', { label: field.label }))
121265                 .placement('bottom');
121266
121267
121268             field.keys = field.keys || [field.key];
121269
121270             // only create the fields that are actually being shown
121271             if (_show && !field.impl) {
121272                 createField();
121273             }
121274
121275             // Creates the field.. This is done lazily,
121276             // once we know that the field will be shown.
121277             function createField() {
121278                 field.impl = uiFields[field.type](field, context)
121279                     .on('change', function(t, onInput) {
121280                         dispatch$1.call('change', field, t, onInput);
121281                     });
121282
121283                 if (entity) {
121284                     field.entityID = entity.id;
121285                     // if this field cares about the entity, pass it along
121286                     if (field.impl.entity) {
121287                         field.impl.entity(entity);
121288                     }
121289                 }
121290             }
121291
121292
121293             function isModified() {
121294                 if (!entity) { return false; }
121295                 var original = context.graph().base().entities[entity.id];
121296                 return field.keys.some(function(key) {
121297                     return original ? _tags[key] !== original.tags[key] : _tags[key];
121298                 });
121299             }
121300
121301
121302             function tagsContainFieldKey() {
121303                 return field.keys.some(function(key) {
121304                     if (field.type === 'multiCombo') {
121305                         for (var tagKey in _tags) {
121306                             if (tagKey.indexOf(key) === 0) {
121307                                 return true;
121308                             }
121309                         }
121310                         return false;
121311                     }
121312                     return _tags[key] !== undefined;
121313                 });
121314             }
121315
121316
121317             function revert(d) {
121318                 event.stopPropagation();
121319                 event.preventDefault();
121320                 if (!entity || _locked) { return; }
121321
121322                 var original = context.graph().base().entities[entity.id];
121323                 var t = {};
121324                 d.keys.forEach(function(key) {
121325                     t[key] = original ? original.tags[key] : undefined;
121326                 });
121327
121328                 dispatch$1.call('change', d, t);
121329             }
121330
121331
121332             function remove(d) {
121333                 event.stopPropagation();
121334                 event.preventDefault();
121335                 if (_locked) { return; }
121336
121337                 var t = {};
121338                 d.keys.forEach(function(key) {
121339                     t[key] = undefined;
121340                 });
121341
121342                 dispatch$1.call('change', d, t);
121343             }
121344
121345
121346             field.render = function(selection) {
121347                 var container = selection.selectAll('.form-field')
121348                     .data([field]);
121349
121350                 // Enter
121351                 var enter = container.enter()
121352                     .append('div')
121353                     .attr('class', function(d) { return 'form-field form-field-' + d.safeid; })
121354                     .classed('nowrap', !options.wrap);
121355
121356                 if (options.wrap) {
121357                     var labelEnter = enter
121358                         .append('label')
121359                         .attr('class', 'field-label')
121360                         .attr('for', function(d) { return 'preset-input-' + d.safeid; });
121361
121362                     var textEnter = labelEnter
121363                         .append('span')
121364                         .attr('class', 'label-text');
121365
121366                     textEnter
121367                         .append('span')
121368                         .attr('class', 'label-textvalue')
121369                         .text(function(d) { return d.label(); });
121370
121371                     textEnter
121372                         .append('span')
121373                         .attr('class', 'label-textannotation');
121374
121375                     if (options.remove) {
121376                         labelEnter
121377                             .append('button')
121378                             .attr('class', 'remove-icon')
121379                             .attr('title', t('icons.remove'))
121380                             .attr('tabindex', -1)
121381                             .call(svgIcon('#iD-operation-delete'));
121382                     }
121383
121384                     if (options.revert) {
121385                         labelEnter
121386                             .append('button')
121387                             .attr('class', 'modified-icon')
121388                             .attr('title', t('icons.undo'))
121389                             .attr('tabindex', -1)
121390                             .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-redo' : '#iD-icon-undo'));
121391                     }
121392                 }
121393
121394
121395                 // Update
121396                 container = container
121397                     .merge(enter);
121398
121399                 container.select('.field-label > .remove-icon')  // propagate bound data
121400                     .on('click', remove);
121401
121402                 container.select('.field-label > .modified-icon')  // propagate bound data
121403                     .on('click', revert);
121404
121405                 container
121406                     .each(function(d) {
121407                         var selection = d3_select(this);
121408
121409                         if (!d.impl) {
121410                             createField();
121411                         }
121412
121413                         var reference, help;
121414
121415                         // instantiate field help
121416                         if (options.wrap && field.type === 'restrictions') {
121417                             help = uiFieldHelp(context, 'restrictions');
121418                         }
121419
121420                         // instantiate tag reference
121421                         if (options.wrap && options.info) {
121422                             var referenceKey = d.key;
121423                             if (d.type === 'multiCombo') {   // lookup key without the trailing ':'
121424                                 referenceKey = referenceKey.replace(/:$/, '');
121425                             }
121426
121427                             reference = uiTagReference(d.reference || { key: referenceKey });
121428                             if (_state === 'hover') {
121429                                 reference.showing(false);
121430                             }
121431                         }
121432
121433                         selection
121434                             .call(d.impl);
121435
121436                         // add field help components
121437                         if (help) {
121438                             selection
121439                                 .call(help.body)
121440                                 .select('.field-label')
121441                                 .call(help.button);
121442                         }
121443
121444                         // add tag reference components
121445                         if (reference) {
121446                             selection
121447                                 .call(reference.body)
121448                                 .select('.field-label')
121449                                 .call(reference.button);
121450                         }
121451
121452                         d.impl.tags(_tags);
121453                     });
121454
121455
121456                     container
121457                         .classed('locked', _locked)
121458                         .classed('modified', isModified())
121459                         .classed('present', tagsContainFieldKey());
121460
121461
121462                     // show a tip and lock icon if the field is locked
121463                     var annotation = container.selectAll('.field-label .label-textannotation');
121464                     var icon = annotation.selectAll('.icon')
121465                         .data(_locked ? [0]: []);
121466
121467                     icon.exit()
121468                         .remove();
121469
121470                     icon.enter()
121471                         .append('svg')
121472                         .attr('class', 'icon')
121473                         .append('use')
121474                         .attr('xlink:href', '#fas-lock');
121475
121476                     container.call(_locked ? _lockedTip : _lockedTip.destroy);
121477             };
121478
121479
121480             field.state = function(val) {
121481                 if (!arguments.length) { return _state; }
121482                 _state = val;
121483                 return field;
121484             };
121485
121486
121487             field.tags = function(val) {
121488                 if (!arguments.length) { return _tags; }
121489                 _tags = val;
121490
121491                 if (tagsContainFieldKey() && !_show) {
121492                     // always show a field if it has a value to display
121493                     _show = true;
121494                     if (!field.impl) {
121495                         createField();
121496                     }
121497                 }
121498
121499                 return field;
121500             };
121501
121502
121503             field.locked = function(val) {
121504                 if (!arguments.length) { return _locked; }
121505                 _locked = val;
121506                 return field;
121507             };
121508
121509
121510             field.show = function() {
121511                 _show = true;
121512                 if (!field.impl) {
121513                     createField();
121514                 }
121515                 if (field.default && field.key && _tags[field.key] !== field.default) {
121516                     var t = {};
121517                     t[field.key] = field.default;
121518                     dispatch$1.call('change', this, t);
121519                 }
121520             };
121521
121522             // A shown field has a visible UI, a non-shown field is in the 'Add field' dropdown
121523             field.isShown = function() {
121524                 return _show;
121525             };
121526
121527
121528             // An allowed field can appear in the UI or in the 'Add field' dropdown.
121529             // A non-allowed field is hidden from the user altogether
121530             field.isAllowed = function() {
121531
121532                 var latest = entity && context.hasEntity(entity.id);   // check the most current copy of the entity
121533                 if (!latest) { return true; }
121534
121535                 if (field.countryCodes || field.notCountryCodes) {
121536                     var center = latest.extent(context.graph()).center();
121537                     var countryCode = iso1A2Code(center);
121538
121539                     if (!countryCode) { return false; }
121540
121541                     countryCode = countryCode.toLowerCase();
121542
121543                     if (field.countryCodes && field.countryCodes.indexOf(countryCode) === -1) {
121544                         return false;
121545                     }
121546                     if (field.notCountryCodes && field.notCountryCodes.indexOf(countryCode) !== -1) {
121547                         return false;
121548                     }
121549                 }
121550
121551                 var prerequisiteTag = field.prerequisiteTag;
121552
121553                 if (!tagsContainFieldKey() && // ignore tagging prerequisites if a value is already present
121554                     prerequisiteTag) {
121555                     if (prerequisiteTag.key) {
121556                         var value = latest.tags[prerequisiteTag.key];
121557                         if (!value) { return false; }
121558
121559                         if (prerequisiteTag.valueNot) {
121560                             return prerequisiteTag.valueNot !== value;
121561                         }
121562                         if (prerequisiteTag.value) {
121563                             return prerequisiteTag.value === value;
121564                         }
121565                     } else if (prerequisiteTag.keyNot) {
121566                         if (latest.tags[prerequisiteTag.keyNot]) { return false; }
121567                     }
121568                 }
121569
121570                 return true;
121571             };
121572
121573
121574             field.focus = function() {
121575                 if (field.impl) {
121576                     field.impl.focus();
121577                 }
121578             };
121579
121580
121581             return utilRebind(field, dispatch$1, 'on');
121582         }
121583
121584         function uiFormFields(context) {
121585             var moreCombo = uiCombobox(context, 'more-fields').minItems(1);
121586             var _fieldsArr = [];
121587             var _lastPlaceholder = '';
121588             var _state = '';
121589             var _klass = '';
121590
121591
121592             function formFields(selection) {
121593                 var allowedFields = _fieldsArr.filter(function(field) { return field.isAllowed(); });
121594                 var shown = allowedFields.filter(function(field) { return field.isShown(); });
121595                 var notShown = allowedFields.filter(function(field) { return !field.isShown(); });
121596
121597                 var container = selection.selectAll('.form-fields-container')
121598                     .data([0]);
121599
121600                 container = container.enter()
121601                     .append('div')
121602                     .attr('class', 'form-fields-container ' + (_klass || ''))
121603                     .merge(container);
121604
121605
121606                 var fields = container.selectAll('.wrap-form-field')
121607                     .data(shown, function(d) { return d.id + (d.entityID || ''); });
121608
121609                 fields.exit()
121610                     .remove();
121611
121612                 // Enter
121613                 var enter = fields.enter()
121614                     .append('div')
121615                     .attr('class', function(d) { return 'wrap-form-field wrap-form-field-' + d.safeid; });
121616
121617                 // Update
121618                 fields = fields
121619                     .merge(enter);
121620
121621                 fields
121622                     .order()
121623                     .each(function(d) {
121624                         d3_select(this)
121625                             .call(d.render);
121626                     });
121627
121628
121629                 var titles = [];
121630                 var moreFields = notShown.map(function(field) {
121631                     var label = field.label();
121632                     titles.push(label);
121633                     
121634                     var terms = field.terms();
121635                     if (field.key) { terms.push(field.key); }
121636                     if (field.keys) { terms = terms.concat(field.keys); }
121637
121638                     return {
121639                         title: label,
121640                         value: label,
121641                         field: field,
121642                         terms: terms
121643                     };
121644                 });
121645
121646                 var placeholder = titles.slice(0,3).join(', ') + ((titles.length > 3) ? '…' : '');
121647
121648
121649                 var more = selection.selectAll('.more-fields')
121650                     .data((_state === 'hover' || moreFields.length === 0) ? [] : [0]);
121651
121652                 more.exit()
121653                     .remove();
121654
121655                 more = more.enter()
121656                     .append('div')
121657                     .attr('class', 'more-fields')
121658                     .append('label')
121659                     .text(t('inspector.add_fields'))
121660                     .merge(more);
121661
121662
121663                 var input = more.selectAll('.value')
121664                     .data([0]);
121665
121666                 input.exit()
121667                     .remove();
121668
121669                 input = input.enter()
121670                     .append('input')
121671                     .attr('class', 'value')
121672                     .attr('type', 'text')
121673                     .attr('placeholder', placeholder)
121674                     .call(utilNoAuto)
121675                     .merge(input);
121676
121677                 input
121678                     .call(utilGetSetValue, '')
121679                     .call(moreCombo
121680                         .data(moreFields)
121681                         .on('accept', function (d) {
121682                             if (!d) { return; }  // user entered something that was not matched
121683                             var field = d.field;
121684                             field.show();
121685                             selection.call(formFields);  // rerender
121686                             if (field.type !== 'semiCombo' && field.type !== 'multiCombo') {
121687                                 field.focus();
121688                             }
121689                         })
121690                     );
121691
121692                 // avoid updating placeholder excessively (triggers style recalc)
121693                 if (_lastPlaceholder !== placeholder) {
121694                     input.attr('placeholder', placeholder);
121695                     _lastPlaceholder = placeholder;
121696                 }
121697             }
121698
121699
121700             formFields.fieldsArr = function(val) {
121701                 if (!arguments.length) { return _fieldsArr; }
121702                 _fieldsArr = val || [];
121703                 return formFields;
121704             };
121705
121706             formFields.state = function(val) {
121707                 if (!arguments.length) { return _state; }
121708                 _state = val;
121709                 return formFields;
121710             };
121711
121712             formFields.klass = function(val) {
121713                 if (!arguments.length) { return _klass; }
121714                 _klass = val;
121715                 return formFields;
121716             };
121717
121718
121719             return formFields;
121720         }
121721
121722         function uiPresetEditor(context) {
121723             var dispatch$1 = dispatch('change');
121724             var formFields = uiFormFields(context);
121725             var _state;
121726             var _fieldsArr;
121727             var _preset;
121728             var _tags;
121729             var _entityID;
121730
121731
121732             function presetEditor(selection) {
121733                 selection.call(uiDisclosure(context, 'preset_fields', true)
121734                     .title(t('inspector.fields'))
121735                     .content(render)
121736                 );
121737             }
121738
121739
121740             function render(selection) {
121741                 if (!_fieldsArr) {
121742                     var entity = context.entity(_entityID);
121743                     var geometry = context.geometry(_entityID);
121744                     var presets = context.presets();
121745
121746                     _fieldsArr = [];
121747
121748                     _preset.fields.forEach(function(field) {
121749                         if (field.matchGeometry(geometry)) {
121750                             _fieldsArr.push(
121751                                 uiField(context, field, entity)
121752                             );
121753                         }
121754                     });
121755
121756                     if (entity.isHighwayIntersection(context.graph()) && presets.field('restrictions')) {
121757                         _fieldsArr.push(
121758                             uiField(context, presets.field('restrictions'), entity)
121759                         );
121760                     }
121761
121762                     var additionalFields = utilArrayUnion(_preset.moreFields, presets.universal());
121763                     additionalFields.sort(function(field1, field2) {
121764                         return field1.label().localeCompare(field2.label(), currentLocale);
121765                     });
121766
121767                     additionalFields.forEach(function(field) {
121768                         if (_preset.fields.indexOf(field) === -1 &&
121769                             field.matchGeometry(geometry)) {
121770                             _fieldsArr.push(
121771                                 uiField(context, field, entity, { show: false })
121772                             );
121773                         }
121774                     });
121775
121776                     _fieldsArr.forEach(function(field) {
121777                         field
121778                             .on('change', function(t, onInput) {
121779                                 dispatch$1.call('change', field, t, onInput);
121780                             });
121781                     });
121782                 }
121783
121784                 _fieldsArr.forEach(function(field) {
121785                     field
121786                         .state(_state)
121787                         .tags(_tags);
121788                 });
121789
121790
121791                 selection
121792                     .call(formFields
121793                         .fieldsArr(_fieldsArr)
121794                         .state(_state)
121795                         .klass('inspector-inner fillL3')
121796                     );
121797
121798
121799                 selection.selectAll('.wrap-form-field input')
121800                     .on('keydown', function() {
121801                         // if user presses enter, and combobox is not active, accept edits..
121802                         if (event.keyCode === 13 && d3_select('.combobox').empty()) {
121803                             context.enter(modeBrowse(context));
121804                         }
121805                     });
121806             }
121807
121808
121809             presetEditor.preset = function(val) {
121810                 if (!arguments.length) { return _preset; }
121811                 if (_preset && _preset.id === val.id) { return presetEditor; }
121812                 _preset = val;
121813                 _fieldsArr = null;
121814                 return presetEditor;
121815             };
121816
121817
121818             presetEditor.state = function(val) {
121819                 if (!arguments.length) { return _state; }
121820                 _state = val;
121821                 return presetEditor;
121822             };
121823
121824
121825             presetEditor.tags = function(val) {
121826                 if (!arguments.length) { return _tags; }
121827                 _tags = val;
121828                 // Don't reset _fieldsArr here.
121829                 return presetEditor;
121830             };
121831
121832
121833             presetEditor.entityID = function(val) {
121834                 if (!arguments.length) { return _entityID; }
121835                 if (_entityID === val) { return presetEditor; }
121836                 _entityID = val;
121837                 _fieldsArr = null;
121838                 return presetEditor;
121839             };
121840
121841
121842             return utilRebind(presetEditor, dispatch$1, 'on');
121843         }
121844
121845         function uiEntityIssues(context) {
121846             var _selection = d3_select(null);
121847             var _activeIssueID;
121848             var _entityID;
121849
121850             // Refresh on validated events
121851             context.validator()
121852                 .on('validated.entity_issues', function() {
121853                      _selection.selectAll('.disclosure-wrap-entity_issues')
121854                          .call(render);
121855
121856                     update();
121857                 })
121858                 .on('focusedIssue.entity_issues', function(issue) {
121859                      makeActiveIssue(issue.id);
121860                 });
121861
121862
121863             function entityIssues(selection) {
121864                 _selection = selection;
121865
121866                 selection
121867                     .call(uiDisclosure(context, 'entity_issues', true)
121868                         .content(render)
121869                     );
121870
121871                 update();
121872             }
121873
121874             function getIssues() {
121875                 return context.validator().getEntityIssues(_entityID, { includeDisabledRules: true });
121876             }
121877
121878             function makeActiveIssue(issueID) {
121879                 _activeIssueID = issueID;
121880                 _selection.selectAll('.issue-container')
121881                     .classed('active', function(d) { return d.id === _activeIssueID; });
121882             }
121883
121884             function update() {
121885
121886                 var issues = getIssues();
121887
121888                 _selection
121889                     .classed('hide', issues.length === 0);
121890
121891                 _selection.selectAll('.hide-toggle-entity_issues span')
121892                     .text(t('issues.list_title', { count: issues.length }));
121893             }
121894
121895
121896             function render(selection) {
121897                 var issues = getIssues();
121898                 _activeIssueID = issues.length > 0 ? issues[0].id : null;
121899
121900
121901                 var containers = selection.selectAll('.issue-container')
121902                     .data(issues, function(d) { return d.id; });
121903
121904                 // Exit
121905                 containers.exit()
121906                     .remove();
121907
121908                 // Enter
121909                 var containersEnter = containers.enter()
121910                     .append('div')
121911                     .attr('class', 'issue-container');
121912
121913
121914                 var itemsEnter = containersEnter
121915                     .append('div')
121916                     .attr('class', function(d) { return 'issue severity-' + d.severity; })
121917                     .on('mouseover.highlight', function(d) {
121918                         // don't hover-highlight the selected entity
121919                         var ids = d.entityIds
121920                             .filter(function(e) { return e !== _entityID; });
121921
121922                         utilHighlightEntities(ids, true, context);
121923                     })
121924                     .on('mouseout.highlight', function(d) {
121925                         var ids = d.entityIds
121926                             .filter(function(e) { return e !== _entityID; });
121927
121928                         utilHighlightEntities(ids, false, context);
121929                     });
121930
121931                 var labelsEnter = itemsEnter
121932                     .append('div')
121933                     .attr('class', 'issue-label')
121934                     .on('click', function(d) {
121935
121936                         makeActiveIssue(d.id); // expand only the clicked item
121937
121938                         var extent = d.extent(context.graph());
121939                         if (extent) {
121940                             var setZoom = Math.max(context.map().zoom(), 19);
121941                             context.map().unobscuredCenterZoomEase(extent.center(), setZoom);
121942                         }
121943                     });
121944
121945                 var textEnter = labelsEnter
121946                     .append('span')
121947                     .attr('class', 'issue-text');
121948
121949                 textEnter
121950                     .append('span')
121951                     .attr('class', 'issue-icon')
121952                     .each(function(d) {
121953                         var iconName = '#iD-icon-' + (d.severity === 'warning' ? 'alert' : 'error');
121954                         d3_select(this)
121955                             .call(svgIcon(iconName));
121956                     });
121957
121958                 textEnter
121959                     .append('span')
121960                     .attr('class', 'issue-message');
121961
121962
121963                 var infoButton = labelsEnter
121964                     .append('button')
121965                     .attr('class', 'issue-info-button')
121966                     .attr('title', t('icons.information'))
121967                     .attr('tabindex', -1)
121968                     .call(svgIcon('#iD-icon-inspect'));
121969
121970                 infoButton
121971                     .on('click', function () {
121972                         event.stopPropagation();
121973                         event.preventDefault();
121974                         this.blur();    // avoid keeping focus on the button - #4641
121975
121976                         var container = d3_select(this.parentNode.parentNode.parentNode);
121977                         var info = container.selectAll('.issue-info');
121978                         var isExpanded = info.classed('expanded');
121979
121980                         if (isExpanded) {
121981                             info
121982                                 .transition()
121983                                 .duration(200)
121984                                 .style('max-height', '0px')
121985                                 .style('opacity', '0')
121986                                 .on('end', function () {
121987                                     info.classed('expanded', false);
121988                                 });
121989                         } else {
121990                             info
121991                                 .classed('expanded', true)
121992                                 .transition()
121993                                 .duration(200)
121994                                 .style('max-height', '200px')
121995                                 .style('opacity', '1')
121996                                 .on('end', function () {
121997                                     info.style('max-height', null);
121998                                 });
121999                         }
122000                     });
122001
122002                 itemsEnter
122003                     .append('ul')
122004                     .attr('class', 'issue-fix-list');
122005
122006                 containersEnter
122007                     .append('div')
122008                     .attr('class', 'issue-info')
122009                     .style('max-height', '0')
122010                     .style('opacity', '0')
122011                     .each(function(d) {
122012                         if (typeof d.reference === 'function') {
122013                             d3_select(this)
122014                                 .call(d.reference);
122015                         } else {
122016                             d3_select(this)
122017                                 .text(t('inspector.no_documentation_key'));
122018                         }
122019                     });
122020
122021
122022                 // Update
122023                 containers = containers
122024                     .merge(containersEnter)
122025                     .classed('active', function(d) { return d.id === _activeIssueID; });
122026
122027                 containers.selectAll('.issue-message')
122028                     .text(function(d) {
122029                         return d.message(context);
122030                     });
122031
122032                 // fixes
122033                 var fixLists = containers.selectAll('.issue-fix-list');
122034
122035                 var fixes = fixLists.selectAll('.issue-fix-item')
122036                     .data(function(d) { return d.fixes ? d.fixes(context) : []; }, function(fix) { return fix.id; });
122037
122038                 fixes.exit()
122039                     .remove();
122040
122041                 var fixesEnter = fixes.enter()
122042                     .append('li')
122043                     .attr('class', 'issue-fix-item')
122044                     .on('click', function(d) {
122045                         // not all fixes are actionable
122046                         if (!d3_select(this).classed('actionable') || !d.onClick) { return; }
122047
122048                         // Don't run another fix for this issue within a second of running one
122049                         // (Necessary for "Select a feature type" fix. Most fixes should only ever run once)
122050                         if (d.issue.dateLastRanFix && new Date() - d.issue.dateLastRanFix < 1000) { return; }
122051                         d.issue.dateLastRanFix = new Date();
122052
122053                         // remove hover-highlighting
122054                         utilHighlightEntities(d.issue.entityIds.concat(d.entityIds), false, context);
122055
122056                         new Promise(function(resolve, reject) {
122057                             d.onClick(context, resolve, reject);
122058                             if (d.onClick.length <= 1) {
122059                                 // if the fix doesn't take any completion parameters then consider it resolved
122060                                 resolve();
122061                             }
122062                         })
122063                         .then(function() {
122064                             // revalidate whenever the fix has finished running successfully
122065                             context.validator().validate();
122066                         });
122067                     })
122068                     .on('mouseover.highlight', function(d) {
122069                         utilHighlightEntities(d.entityIds, true, context);
122070                     })
122071                     .on('mouseout.highlight', function(d) {
122072                         utilHighlightEntities(d.entityIds, false, context);
122073                     });
122074
122075                 fixesEnter
122076                     .append('span')
122077                     .attr('class', 'fix-icon')
122078                     .each(function(d) {
122079                         var iconName = d.icon || 'iD-icon-wrench';
122080                         if (iconName.startsWith('maki')) {
122081                             iconName += '-15';
122082                         }
122083                         d3_select(this).call(svgIcon('#' + iconName));
122084                     });
122085
122086                 fixesEnter
122087                     .append('span')
122088                     .attr('class', 'fix-message')
122089                     .text(function(d) { return d.title; });
122090
122091                 fixesEnter.merge(fixes)
122092                     .classed('actionable', function(d) {
122093                         return d.onClick;
122094                     })
122095                     .attr('title', function(d) {
122096                         if (d.disabledReason) {
122097                             return d.disabledReason;
122098                         }
122099                         return null;
122100                     });
122101             }
122102
122103
122104             entityIssues.entityID = function(val) {
122105                 if (!arguments.length) { return _entityID; }
122106                 if (_entityID !== val) {
122107                     _entityID = val;
122108                     _activeIssueID = null;
122109                 }
122110                 return entityIssues;
122111             };
122112
122113
122114             return entityIssues;
122115         }
122116
122117         function uiEntityEditor(context) {
122118             var dispatch$1 = dispatch('choose');
122119             var _state = 'select';
122120             var _coalesceChanges = false;
122121             var _modified = false;
122122             var _scrolled = false;
122123             var _base;
122124             var _entityID;
122125             var _activePreset;
122126             var _tagReference;
122127
122128             var entityIssues = uiEntityIssues(context);
122129             var quickLinks = uiQuickLinks();
122130             var presetEditor = uiPresetEditor(context).on('change', changeTags);
122131             var rawTagEditor = uiRawTagEditor(context).on('change', changeTags);
122132             var rawMemberEditor = uiRawMemberEditor(context);
122133             var rawMembershipEditor = uiRawMembershipEditor(context);
122134
122135             function entityEditor(selection) {
122136                 var entity = context.entity(_entityID);
122137                 var tags = Object.assign({}, entity.tags);  // shallow copy
122138
122139                 // Header
122140                 var header = selection.selectAll('.header')
122141                     .data([0]);
122142
122143                 // Enter
122144                 var headerEnter = header.enter()
122145                     .append('div')
122146                     .attr('class', 'header fillL cf');
122147
122148                 headerEnter
122149                     .append('button')
122150                     .attr('class', 'fl preset-reset preset-choose')
122151                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-forward' : '#iD-icon-backward'));
122152
122153                 headerEnter
122154                     .append('button')
122155                     .attr('class', 'fr preset-close')
122156                     .on('click', function() { context.enter(modeBrowse(context)); })
122157                     .call(svgIcon(_modified ? '#iD-icon-apply' : '#iD-icon-close'));
122158
122159                 headerEnter
122160                     .append('h3')
122161                     .text(t('inspector.edit'));
122162
122163                 // Update
122164                 header = header
122165                     .merge(headerEnter);
122166
122167                 header.selectAll('.preset-reset')
122168                     .on('click', function() {
122169                         dispatch$1.call('choose', this, _activePreset);
122170                     });
122171
122172
122173                 // Body
122174                 var body = selection.selectAll('.inspector-body')
122175                     .data([0]);
122176
122177                 // Enter
122178                 var bodyEnter = body.enter()
122179                     .append('div')
122180                     .attr('class', 'inspector-body')
122181                     .on('scroll.entity-editor', function() { _scrolled = true; });
122182
122183                 bodyEnter
122184                     .append('div')
122185                     .attr('class', 'preset-list-item inspector-inner')
122186                     .append('div')
122187                     .attr('class', 'preset-list-button-wrap')
122188                     .append('button')
122189                     .attr('class', 'preset-list-button preset-reset')
122190                     .call(tooltip().title(t('inspector.back_tooltip')).placement('bottom'))
122191                     .append('div')
122192                     .attr('class', 'label')
122193                     .append('div')
122194                     .attr('class', 'label-inner');
122195
122196                 bodyEnter
122197                     .append('div')
122198                     .attr('class', 'preset-quick-links');
122199
122200                 bodyEnter
122201                     .append('div')
122202                     .attr('class', 'entity-issues');
122203
122204                 bodyEnter
122205                     .append('div')
122206                     .attr('class', 'preset-editor');
122207
122208                 bodyEnter
122209                     .append('div')
122210                     .attr('class', 'raw-tag-editor inspector-inner');
122211
122212                 bodyEnter
122213                     .append('div')
122214                     .attr('class', 'raw-member-editor inspector-inner');
122215
122216                 bodyEnter
122217                     .append('div')
122218                     .attr('class', 'raw-membership-editor inspector-inner');
122219
122220                 bodyEnter
122221                     .append('input')
122222                     .attr('type', 'text')
122223                     .attr('class', 'key-trap');
122224
122225
122226                 // Update
122227                 body = body
122228                     .merge(bodyEnter);
122229
122230                 // update header
122231                 if (_tagReference) {
122232                     body.selectAll('.preset-list-button-wrap')
122233                         .call(_tagReference.button);
122234
122235                     body.selectAll('.preset-list-item')
122236                         .call(_tagReference.body);
122237                 }
122238
122239                 body.selectAll('.preset-reset')
122240                     .on('click', function() {
122241                         dispatch$1.call('choose', this, _activePreset);
122242                     });
122243
122244                 body.select('.preset-list-item button')
122245                     .call(uiPresetIcon(context)
122246                         .geometry(context.geometry(_entityID))
122247                         .preset(_activePreset)
122248                     );
122249
122250                 // NOTE: split on en-dash, not a hypen (to avoid conflict with hyphenated names)
122251                 var label = body.select('.label-inner');
122252                 var nameparts = label.selectAll('.namepart')
122253                     .data(_activePreset.name().split(' – '), function(d) { return d; });
122254
122255                 nameparts.exit()
122256                     .remove();
122257
122258                 nameparts
122259                     .enter()
122260                     .append('div')
122261                     .attr('class', 'namepart')
122262                     .text(function(d) { return d; });
122263
122264                 // update quick links
122265                 var choices = [{
122266                     id: 'zoom_to',
122267                     label: 'inspector.zoom_to.title',
122268                     tooltip: function() {
122269                         return uiTooltipHtml(t('inspector.zoom_to.tooltip_feature'), t('inspector.zoom_to.key'));
122270                     },
122271                     click: function zoomTo() {
122272                         context.mode().zoomToSelected();
122273                     }
122274                 }];
122275
122276                 body.select('.preset-quick-links')
122277                     .call(quickLinks.choices(choices));
122278
122279
122280                 // update editor sections
122281                 body.select('.entity-issues')
122282                     .call(entityIssues
122283                         .entityID(_entityID)
122284                     );
122285
122286                 body.select('.preset-editor')
122287                     .call(presetEditor
122288                         .preset(_activePreset)
122289                         .entityID(_entityID)
122290                         .tags(tags)
122291                         .state(_state)
122292                     );
122293
122294                 body.select('.raw-tag-editor')
122295                     .call(rawTagEditor
122296                         .preset(_activePreset)
122297                         .entityID(_entityID)
122298                         .tags(tags)
122299                         .state(_state)
122300                     );
122301
122302                 if (entity.type === 'relation') {
122303                     body.select('.raw-member-editor')
122304                         .style('display', 'block')
122305                         .call(rawMemberEditor
122306                             .entityID(_entityID)
122307                         );
122308                 } else {
122309                     body.select('.raw-member-editor')
122310                         .style('display', 'none');
122311                 }
122312
122313                 body.select('.raw-membership-editor')
122314                     .call(rawMembershipEditor
122315                         .entityID(_entityID)
122316                     );
122317
122318                 body.select('.key-trap')
122319                     .on('keydown.key-trap', function() {
122320                         // On tabbing, send focus back to the first field on the inspector-body
122321                         // (probably the `name` field) #4159
122322                         if (event.keyCode === 9 && !event.shiftKey) {
122323                             event.preventDefault();
122324                             body.select('input').node().focus();
122325                         }
122326                     });
122327
122328                 context.history()
122329                     .on('change.entity-editor', historyChanged);
122330
122331
122332                 function historyChanged(difference) {
122333                     if (_state === 'hide') { return; }
122334                     var significant = !difference ||
122335                             difference.didChange.properties ||
122336                             difference.didChange.addition ||
122337                             difference.didChange.deletion;
122338                     if (!significant) { return; }
122339
122340                     var entity = context.hasEntity(_entityID);
122341                     var graph = context.graph();
122342                     if (!entity) { return; }
122343
122344                     var match = context.presets().match(entity, graph);
122345                     var activePreset = entityEditor.preset();
122346                     var weakPreset = activePreset &&
122347                         Object.keys(activePreset.addTags || {}).length === 0;
122348
122349                     // A "weak" preset doesn't set any tags. (e.g. "Address")
122350                     // Don't replace a weak preset with a fallback preset (e.g. "Point")
122351                     if (!(weakPreset && match.isFallback())) {
122352                         entityEditor.preset(match);
122353
122354                         if (match.id !== activePreset.id) {
122355                             // flash the button to indicate the preset changed
122356                             selection
122357                                 .selectAll('button.preset-reset .label')
122358                                 .style('background-color', '#fff')
122359                                 .transition()
122360                                 .duration(500)
122361                                 .style('background-color', null);
122362                         }
122363                     }
122364                     entityEditor.modified(_base !== graph);
122365                     entityEditor(selection);
122366                 }
122367             }
122368
122369
122370             // Tag changes that fire on input can all get coalesced into a single
122371             // history operation when the user leaves the field.  #2342
122372             function changeTags(changed, onInput) {
122373                 var entity = context.entity(_entityID);
122374                 var annotation = t('operations.change_tags.annotation');
122375                 var tags = Object.assign({}, entity.tags);   // shallow copy
122376
122377                 for (var k in changed) {
122378                     if (!k) { continue; }
122379                     var v = changed[k];
122380                     if (v !== undefined || tags.hasOwnProperty(k)) {
122381                         tags[k] = v;
122382                     }
122383                 }
122384
122385                 if (!onInput) {
122386                     tags = utilCleanTags(tags);
122387                 }
122388
122389                 if (!fastDeepEqual(entity.tags, tags)) {
122390                     if (_coalesceChanges) {
122391                         context.overwrite(actionChangeTags(_entityID, tags), annotation);
122392                     } else {
122393                         context.perform(actionChangeTags(_entityID, tags), annotation);
122394                         _coalesceChanges = !!onInput;
122395                     }
122396                 }
122397
122398                 // if leaving field (blur event), rerun validation
122399                 if (!onInput) {
122400                     context.validator().validate();
122401                 }
122402             }
122403
122404
122405             entityEditor.modified = function(val) {
122406                 if (!arguments.length) { return _modified; }
122407                 _modified = val;
122408                 d3_selectAll('button.preset-close use')
122409                     .attr('xlink:href', (_modified ? '#iD-icon-apply' : '#iD-icon-close'));
122410                 return entityEditor;
122411             };
122412
122413
122414             entityEditor.state = function(val) {
122415                 if (!arguments.length) { return _state; }
122416                 _state = val;
122417                 return entityEditor;
122418             };
122419
122420
122421             entityEditor.entityID = function(val) {
122422                 if (!arguments.length) { return _entityID; }
122423                 if (_entityID === val) { return entityEditor; }  // exit early if no change
122424
122425                 _entityID = val;
122426                 _base = context.graph();
122427                 _coalesceChanges = false;
122428
122429                 // reset the scroll to the top of the inspector (warning: triggers reflow)
122430                 if (_scrolled) {
122431                     window.requestIdleCallback(function() {
122432                         var body = d3_selectAll('.entity-editor-pane .inspector-body');
122433                         if (!body.empty()) {
122434                             _scrolled = false;
122435                             body.node().scrollTop = 0;
122436                         }
122437                     });
122438                 }
122439
122440                 var presetMatch = context.presets().match(context.entity(_entityID), _base);
122441
122442                 return entityEditor
122443                     .preset(presetMatch)
122444                     .modified(false);
122445             };
122446
122447
122448             entityEditor.preset = function(val) {
122449                 if (!arguments.length) { return _activePreset; }
122450                 if (val !== _activePreset) {
122451                     _activePreset = val;
122452                     _tagReference = uiTagReference(_activePreset.reference(context.geometry(_entityID)))
122453                         .showing(false);
122454                 }
122455                 return entityEditor;
122456             };
122457
122458
122459             return utilRebind(entityEditor, dispatch$1, 'on');
122460         }
122461
122462         function uiPresetList(context) {
122463             var dispatch$1 = dispatch('choose');
122464             var _entityID;
122465             var _currentPreset;
122466             var _autofocus = false;
122467
122468
122469             function presetList(selection) {
122470                 var entity = context.entity(_entityID);
122471                 var geometry = context.geometry(_entityID);
122472
122473                 // Treat entities on addr:interpolation lines as points, not vertices (#3241)
122474                 if (geometry === 'vertex' && entity.isOnAddressLine(context.graph())) {
122475                     geometry = 'point';
122476                 }
122477
122478                 var presets = context.presets().matchGeometry(geometry);
122479
122480                 selection.html('');
122481
122482                 var messagewrap = selection
122483                     .append('div')
122484                     .attr('class', 'header fillL');
122485
122486                 var message = messagewrap
122487                     .append('h3')
122488                     .text(t('inspector.choose'));
122489
122490                 messagewrap
122491                     .append('button')
122492                     .attr('class', 'preset-choose')
122493                     .on('click', function() { dispatch$1.call('choose', this, _currentPreset); })
122494                     .call(svgIcon((textDirection === 'rtl') ? '#iD-icon-backward' : '#iD-icon-forward'));
122495
122496                 function initialKeydown() {
122497                     // hack to let delete shortcut work when search is autofocused
122498                     if (search.property('value').length === 0 &&
122499                         (event.keyCode === utilKeybinding.keyCodes['⌫'] ||
122500                          event.keyCode === utilKeybinding.keyCodes['⌦'])) {
122501                         event.preventDefault();
122502                         event.stopPropagation();
122503                         operationDelete([_entityID], context)();
122504
122505                     // hack to let undo work when search is autofocused
122506                     } else if (search.property('value').length === 0 &&
122507                         (event.ctrlKey || event.metaKey) &&
122508                         event.keyCode === utilKeybinding.keyCodes.z) {
122509                         event.preventDefault();
122510                         event.stopPropagation();
122511                         context.undo();
122512                     } else if (!event.ctrlKey && !event.metaKey) {
122513                         // don't check for delete/undo hack on future keydown events
122514                         d3_select(this).on('keydown', keydown);
122515                         keydown.call(this);
122516                     }
122517                 }
122518
122519                 function keydown() {
122520                     // down arrow
122521                     if (event.keyCode === utilKeybinding.keyCodes['↓'] &&
122522                         // if insertion point is at the end of the string
122523                         search.node().selectionStart === search.property('value').length) {
122524                         event.preventDefault();
122525                         event.stopPropagation();
122526                         // move focus to the first item in the preset list
122527                         var buttons = list.selectAll('.preset-list-button');
122528                         if (!buttons.empty()) { buttons.nodes()[0].focus(); }
122529                     }
122530                 }
122531
122532                 function keypress() {
122533                     // enter
122534                     var value = search.property('value');
122535                     if (event.keyCode === 13 && value.length) {
122536                         list.selectAll('.preset-list-item:first-child')
122537                             .each(function(d) { d.choose.call(this); });
122538                     }
122539                 }
122540
122541                 function inputevent() {
122542                     var value = search.property('value');
122543                     list.classed('filtered', value.length);
122544                     var entity = context.entity(_entityID);
122545                     var results, messageText;
122546                     if (value.length && entity) {
122547                         var center = entity.extent(context.graph()).center();
122548                         var countryCode = iso1A2Code(center);
122549
122550                         results = presets.search(value, geometry, countryCode && countryCode.toLowerCase());
122551                         messageText = t('inspector.results', {
122552                             n: results.collection.length,
122553                             search: value
122554                         });
122555                     } else {
122556                         results = context.presets().defaults(geometry, 36);
122557                         messageText = t('inspector.choose');
122558                     }
122559                     list.call(drawList, results);
122560                     message.text(messageText);
122561                 }
122562
122563                 var searchWrap = selection
122564                     .append('div')
122565                     .attr('class', 'search-header');
122566
122567                 var search = searchWrap
122568                     .append('input')
122569                     .attr('class', 'preset-search-input')
122570                     .attr('placeholder', t('inspector.search'))
122571                     .attr('type', 'search')
122572                     .call(utilNoAuto)
122573                     .on('keydown', initialKeydown)
122574                     .on('keypress', keypress)
122575                     .on('input', inputevent);
122576
122577                 searchWrap
122578                     .call(svgIcon('#iD-icon-search', 'pre-text'));
122579
122580                 if (_autofocus) {
122581                     search.node().focus();
122582                 }
122583
122584                 var listWrap = selection
122585                     .append('div')
122586                     .attr('class', 'inspector-body');
122587
122588                 var list = listWrap
122589                     .append('div')
122590                     .attr('class', 'preset-list fillL cf')
122591                     .call(drawList, context.presets().defaults(geometry, 36));
122592
122593                 context.features().on('change.preset-list', updateForFeatureHiddenState);
122594             }
122595
122596
122597             function drawList(list, presets) {
122598                 var collection = presets.collection.reduce(function(collection, preset) {
122599                     if (preset.members) {
122600                         if (preset.members.collection.filter(function(preset) {
122601                             return preset.addable();
122602                         }).length > 1) {
122603                             collection.push(CategoryItem(preset));
122604                         }
122605                     } else if (preset.addable()) {
122606                         collection.push(PresetItem(preset));
122607                     }
122608                     return collection;
122609                 }, []);
122610
122611                 var items = list.selectAll('.preset-list-item')
122612                     .data(collection, function(d) { return d.preset.id; });
122613
122614                 items.order();
122615
122616                 items.exit()
122617                     .remove();
122618
122619                 items.enter()
122620                     .append('div')
122621                     .attr('class', function(item) { return 'preset-list-item preset-' + item.preset.id.replace('/', '-'); })
122622                     .classed('current', function(item) { return item.preset === _currentPreset; })
122623                     .each(function(item) { d3_select(this).call(item); })
122624                     .style('opacity', 0)
122625                     .transition()
122626                     .style('opacity', 1);
122627
122628                 updateForFeatureHiddenState();
122629             }
122630
122631             function itemKeydown(){
122632                 // the actively focused item
122633                 var item = d3_select(this.closest('.preset-list-item'));
122634                 var parentItem = d3_select(item.node().parentNode.closest('.preset-list-item'));
122635
122636                 // arrow down, move focus to the next, lower item
122637                 if (event.keyCode === utilKeybinding.keyCodes['↓']) {
122638                     event.preventDefault();
122639                     event.stopPropagation();
122640                     // the next item in the list at the same level
122641                     var nextItem = d3_select(item.node().nextElementSibling);
122642                     // if there is no next item in this list
122643                     if (nextItem.empty()) {
122644                         // if there is a parent item
122645                         if (!parentItem.empty()) {
122646                             // the item is the last item of a sublist,
122647                             // select the next item at the parent level
122648                             nextItem = d3_select(parentItem.node().nextElementSibling);
122649                         }
122650                     // if the focused item is expanded
122651                     } else if (d3_select(this).classed('expanded')) {
122652                         // select the first subitem instead
122653                         nextItem = item.select('.subgrid .preset-list-item:first-child');
122654                     }
122655                     if (!nextItem.empty()) {
122656                         // focus on the next item
122657                         nextItem.select('.preset-list-button').node().focus();
122658                     }
122659
122660                 // arrow up, move focus to the previous, higher item
122661                 } else if (event.keyCode === utilKeybinding.keyCodes['↑']) {
122662                     event.preventDefault();
122663                     event.stopPropagation();
122664                     // the previous item in the list at the same level
122665                     var previousItem = d3_select(item.node().previousElementSibling);
122666
122667                     // if there is no previous item in this list
122668                     if (previousItem.empty()) {
122669                         // if there is a parent item
122670                         if (!parentItem.empty()) {
122671                             // the item is the first subitem of a sublist select the parent item
122672                             previousItem = parentItem;
122673                         }
122674                     // if the previous item is expanded
122675                     } else if (previousItem.select('.preset-list-button').classed('expanded')) {
122676                         // select the last subitem of the sublist of the previous item
122677                         previousItem = previousItem.select('.subgrid .preset-list-item:last-child');
122678                     }
122679
122680                     if (!previousItem.empty()) {
122681                         // focus on the previous item
122682                         previousItem.select('.preset-list-button').node().focus();
122683                     } else {
122684                         // the focus is at the top of the list, move focus back to the search field
122685                         var search = d3_select(this.closest('.preset-list-pane')).select('.preset-search-input');
122686                         search.node().focus();
122687                     }
122688
122689                 // arrow left, move focus to the parent item if there is one
122690                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
122691                     event.preventDefault();
122692                     event.stopPropagation();
122693                     // if there is a parent item, focus on the parent item
122694                     if (!parentItem.empty()) {
122695                         parentItem.select('.preset-list-button').node().focus();
122696                     }
122697
122698                 // arrow right, choose this item
122699                 } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
122700                     event.preventDefault();
122701                     event.stopPropagation();
122702                     item.datum().choose.call(d3_select(this).node());
122703                 }
122704             }
122705
122706
122707             function CategoryItem(preset) {
122708                 var box, sublist, shown = false;
122709
122710                 function item(selection) {
122711                     var wrap = selection.append('div')
122712                         .attr('class', 'preset-list-button-wrap category');
122713
122714                     function click() {
122715                         var isExpanded = d3_select(this).classed('expanded');
122716                         var iconName = isExpanded ?
122717                             (textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward') : '#iD-icon-down';
122718                         d3_select(this)
122719                             .classed('expanded', !isExpanded);
122720                         d3_select(this).selectAll('div.label-inner svg.icon use')
122721                             .attr('href', iconName);
122722                         item.choose();
122723                     }
122724
122725                     var button = wrap
122726                         .append('button')
122727                         .attr('class', 'preset-list-button')
122728                         .classed('expanded', false)
122729                         .call(uiPresetIcon(context)
122730                             .geometry(context.geometry(_entityID))
122731                             .preset(preset))
122732                         .on('click', click)
122733                         .on('keydown', function() {
122734                             // right arrow, expand the focused item
122735                             if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '←' : '→']) {
122736                                 event.preventDefault();
122737                                 event.stopPropagation();
122738                                 // if the item isn't expanded
122739                                 if (!d3_select(this).classed('expanded')) {
122740                                     // toggle expansion (expand the item)
122741                                     click.call(this);
122742                                 }
122743                             // left arrow, collapse the focused item
122744                             } else if (event.keyCode === utilKeybinding.keyCodes[(textDirection === 'rtl') ? '→' : '←']) {
122745                                 event.preventDefault();
122746                                 event.stopPropagation();
122747                                 // if the item is expanded
122748                                 if (d3_select(this).classed('expanded')) {
122749                                     // toggle expansion (collapse the item)
122750                                     click.call(this);
122751                                 }
122752                             } else {
122753                                 itemKeydown.call(this);
122754                             }
122755                         });
122756
122757                     var label = button
122758                         .append('div')
122759                         .attr('class', 'label')
122760                         .append('div')
122761                         .attr('class', 'label-inner');
122762
122763                     label
122764                         .append('div')
122765                         .attr('class', 'namepart')
122766                         .call(svgIcon((textDirection === 'rtl' ? '#iD-icon-backward' : '#iD-icon-forward'), 'inline'))
122767                         .append('span')
122768                         .html(function() { return preset.name() + '&hellip;'; });
122769
122770                     box = selection.append('div')
122771                         .attr('class', 'subgrid')
122772                         .style('max-height', '0px')
122773                         .style('opacity', 0);
122774
122775                     box.append('div')
122776                         .attr('class', 'arrow');
122777
122778                     sublist = box.append('div')
122779                         .attr('class', 'preset-list fillL3');
122780                 }
122781
122782
122783                 item.choose = function() {
122784                     if (!box || !sublist) { return; }
122785
122786                     if (shown) {
122787                         shown = false;
122788                         box.transition()
122789                             .duration(200)
122790                             .style('opacity', '0')
122791                             .style('max-height', '0px')
122792                             .style('padding-bottom', '0px');
122793                     } else {
122794                         shown = true;
122795                         var members = preset.members.matchGeometry(context.geometry(_entityID));
122796                         sublist.call(drawList, members);
122797                         box.transition()
122798                             .duration(200)
122799                             .style('opacity', '1')
122800                             .style('max-height', 200 + members.collection.length * 190 + 'px')
122801                             .style('padding-bottom', '10px');
122802                     }
122803                 };
122804
122805                 item.preset = preset;
122806                 return item;
122807             }
122808
122809
122810             function PresetItem(preset) {
122811                 function item(selection) {
122812                     var wrap = selection.append('div')
122813                         .attr('class', 'preset-list-button-wrap');
122814
122815                     var button = wrap.append('button')
122816                         .attr('class', 'preset-list-button')
122817                         .call(uiPresetIcon(context)
122818                             .geometry(context.geometry(_entityID))
122819                             .preset(preset))
122820                         .on('click', item.choose)
122821                         .on('keydown', itemKeydown);
122822
122823                     var label = button
122824                         .append('div')
122825                         .attr('class', 'label')
122826                         .append('div')
122827                         .attr('class', 'label-inner');
122828
122829                     // NOTE: split/join on en-dash, not a hypen (to avoid conflict with fr - nl names in Brussels etc)
122830                     label.selectAll('.namepart')
122831                         .data(preset.name().split(' – '))
122832                         .enter()
122833                         .append('div')
122834                         .attr('class', 'namepart')
122835                         .text(function(d) { return d; });
122836
122837                     wrap.call(item.reference.button);
122838                     selection.call(item.reference.body);
122839                 }
122840
122841                 item.choose = function() {
122842                     if (d3_select(this).classed('disabled')) { return; }
122843
122844                     context.presets().setMostRecent(preset, context.geometry(_entityID));
122845                     context.perform(
122846                         actionChangePreset(_entityID, _currentPreset, preset),
122847                         t('operations.change_tags.annotation')
122848                     );
122849
122850                     context.validator().validate();  // rerun validation
122851                     dispatch$1.call('choose', this, preset);
122852                 };
122853
122854                 item.help = function() {
122855                     event.stopPropagation();
122856                     item.reference.toggle();
122857                 };
122858
122859                 item.preset = preset;
122860                 item.reference = uiTagReference(preset.reference(context.geometry(_entityID)));
122861
122862                 return item;
122863             }
122864
122865
122866             function updateForFeatureHiddenState() {
122867                 if (!context.hasEntity(_entityID)) { return; }
122868
122869                 var geometry = context.geometry(_entityID);
122870                 var button = d3_selectAll('.preset-list .preset-list-button');
122871
122872                 // remove existing tooltips
122873                 button.call(tooltip().destroyAny);
122874
122875                 button.each(function(item, index) {
122876                     var hiddenPresetFeaturesId = context.features().isHiddenPreset(item.preset, geometry);
122877                     var isHiddenPreset = !context.inIntro() &&
122878                         !!hiddenPresetFeaturesId &&
122879                         item.preset !== _currentPreset;
122880
122881                     d3_select(this)
122882                         .classed('disabled', isHiddenPreset);
122883
122884                     if (isHiddenPreset) {
122885                         var isAutoHidden = context.features().autoHidden(hiddenPresetFeaturesId);
122886                         var tooltipIdSuffix = isAutoHidden ? 'zoom' : 'manual';
122887                         var tooltipObj = { features: t('feature.' + hiddenPresetFeaturesId + '.description') };
122888                         d3_select(this).call(tooltip()
122889                             .title(t('inspector.hidden_preset.' + tooltipIdSuffix, tooltipObj))
122890                             .placement(index < 2 ? 'bottom' : 'top')
122891                         );
122892                     }
122893                 });
122894             }
122895
122896             presetList.autofocus = function(val) {
122897                 if (!arguments.length) { return _autofocus; }
122898                 _autofocus = val;
122899                 return presetList;
122900             };
122901
122902
122903             presetList.entityID = function(val) {
122904                 if (!arguments.length) { return _entityID; }
122905                 _entityID = val;
122906                 presetList.preset(context.presets().match(context.entity(_entityID), context.graph()));
122907                 return presetList;
122908             };
122909
122910
122911             presetList.preset = function(val) {
122912                 if (!arguments.length) { return _currentPreset; }
122913                 _currentPreset = val;
122914                 return presetList;
122915             };
122916
122917
122918             return utilRebind(presetList, dispatch$1, 'on');
122919         }
122920
122921         function uiInspector(context) {
122922             var presetList = uiPresetList(context);
122923             var entityEditor = uiEntityEditor(context);
122924             var wrap = d3_select(null),
122925                 presetPane = d3_select(null),
122926                 editorPane = d3_select(null);
122927             var _state = 'select';
122928             var _entityID;
122929             var _newFeature = false;
122930
122931
122932             function inspector(selection, newFeature) {
122933                 presetList
122934                     .entityID(_entityID)
122935                     .autofocus(_newFeature)
122936                     .on('choose', inspector.setPreset);
122937
122938                 entityEditor
122939                     .state(_state)
122940                     .entityID(_entityID)
122941                     .on('choose', inspector.showList);
122942
122943                 wrap = selection.selectAll('.panewrap')
122944                     .data([0]);
122945
122946                 var enter = wrap.enter()
122947                     .append('div')
122948                     .attr('class', 'panewrap');
122949
122950                 enter
122951                     .append('div')
122952                     .attr('class', 'preset-list-pane pane');
122953
122954                 enter
122955                     .append('div')
122956                     .attr('class', 'entity-editor-pane pane');
122957
122958                 wrap = wrap.merge(enter);
122959                 presetPane = wrap.selectAll('.preset-list-pane');
122960                 editorPane = wrap.selectAll('.entity-editor-pane');
122961
122962                 var entity = context.entity(_entityID);
122963
122964                 var hasNonGeometryTags = entity.hasNonGeometryTags();
122965                 var isTaglessOrIntersectionVertex = entity.geometry(context.graph()) === 'vertex' &&
122966                     (!hasNonGeometryTags && !entity.isHighwayIntersection(context.graph()));
122967                 var issues = context.validator().getEntityIssues(_entityID);
122968                 // start with the preset list if the feature is new and untagged or is an uninteresting vertex
122969                 var showPresetList = (newFeature && !hasNonGeometryTags) || (isTaglessOrIntersectionVertex && !issues.length);
122970
122971                 if (showPresetList) {
122972                     wrap.style('right', '-100%');
122973                     presetPane.call(presetList);
122974                 } else {
122975                     wrap.style('right', '0%');
122976                     editorPane.call(entityEditor);
122977                 }
122978
122979                 var footer = selection.selectAll('.footer')
122980                     .data([0]);
122981
122982                 footer = footer.enter()
122983                     .append('div')
122984                     .attr('class', 'footer')
122985                     .merge(footer);
122986
122987                 footer
122988                     .call(uiViewOnOSM(context)
122989                         .what(context.hasEntity(_entityID))
122990                     );
122991             }
122992
122993             inspector.showList = function(preset) {
122994                 wrap.transition()
122995                     .styleTween('right', function() { return d3_interpolate('0%', '-100%'); });
122996
122997                 presetPane
122998                     .call(presetList.preset(preset).autofocus(true));
122999             };
123000
123001             inspector.setPreset = function(preset) {
123002
123003                 // upon setting multipolygon, go to the area preset list instead of the editor
123004                 if (preset.id === 'type/multipolygon') {
123005                     presetPane
123006                         .call(presetList.preset(preset).autofocus(true));
123007
123008                 } else {
123009                     wrap.transition()
123010                         .styleTween('right', function() { return d3_interpolate('-100%', '0%'); });
123011
123012                     editorPane
123013                         .call(entityEditor.preset(preset));
123014                 }
123015
123016             };
123017
123018             inspector.state = function(val) {
123019                 if (!arguments.length) { return _state; }
123020                 _state = val;
123021                 entityEditor.state(_state);
123022
123023                 // remove any old field help overlay that might have gotten attached to the inspector
123024                 d3_selectAll('.field-help-body').remove();
123025
123026                 return inspector;
123027             };
123028
123029
123030             inspector.entityID = function(val) {
123031                 if (!arguments.length) { return _entityID; }
123032                 _entityID = val;
123033                 return inspector;
123034             };
123035
123036
123037             inspector.newFeature = function(val) {
123038                 if (!arguments.length) { return _newFeature; }
123039                 _newFeature = val;
123040                 return inspector;
123041             };
123042
123043
123044             return inspector;
123045         }
123046
123047         function uiSidebar(context) {
123048             var inspector = uiInspector(context);
123049             var dataEditor = uiDataEditor(context);
123050             var noteEditor = uiNoteEditor(context);
123051             var improveOsmEditor = uiImproveOsmEditor(context);
123052             var keepRightEditor = uiKeepRightEditor(context);
123053             var _current;
123054             var _wasData = false;
123055             var _wasNote = false;
123056             var _wasQAError = false;
123057
123058
123059             function sidebar(selection) {
123060                 var container = context.container();
123061                 var minWidth = 280;
123062                 var sidebarWidth;
123063                 var containerWidth;
123064                 var dragOffset;
123065
123066                 var resizer = selection
123067                     .append('div')
123068                     .attr('id', 'sidebar-resizer');
123069
123070                 // Set the initial width constraints
123071                 selection
123072                     .style('min-width', minWidth + 'px')
123073                     .style('max-width', '400px')
123074                     .style('width', '33.3333%');
123075
123076                 resizer.call(d3_drag()
123077                     .container(container.node())
123078                     .on('start', function() {
123079                         // offset from edge of sidebar-resizer
123080                         dragOffset = event.sourceEvent.offsetX - 1;
123081
123082                         sidebarWidth = selection.node().getBoundingClientRect().width;
123083                         containerWidth = container.node().getBoundingClientRect().width;
123084                         var widthPct = (sidebarWidth / containerWidth) * 100;
123085                         selection
123086                             .style('width', widthPct + '%')    // lock in current width
123087                             .style('max-width', '85%');        // but allow larger widths
123088
123089                         resizer.classed('dragging', true);
123090                     })
123091                     .on('drag', function() {
123092                         var isRTL = (textDirection === 'rtl');
123093                         var scaleX = isRTL ? 0 : 1;
123094                         var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
123095
123096                         var x = event.x - dragOffset;
123097                         sidebarWidth = isRTL ? containerWidth - x : x;
123098
123099                         var isCollapsed = selection.classed('collapsed');
123100                         var shouldCollapse = sidebarWidth < minWidth;
123101
123102                         selection.classed('collapsed', shouldCollapse);
123103
123104                         if (shouldCollapse) {
123105                             if (!isCollapsed) {
123106                                 selection
123107                                     .style(xMarginProperty, '-400px')
123108                                     .style('width', '400px');
123109
123110                                 context.ui().onResize([(sidebarWidth - event.dx) * scaleX, 0]);
123111                             }
123112
123113                         } else {
123114                             var widthPct = (sidebarWidth / containerWidth) * 100;
123115                             selection
123116                                 .style(xMarginProperty, null)
123117                                 .style('width', widthPct + '%');
123118
123119                             if (isCollapsed) {
123120                                 context.ui().onResize([-sidebarWidth * scaleX, 0]);
123121                             } else {
123122                                 context.ui().onResize([-event.dx * scaleX, 0]);
123123                             }
123124                         }
123125                     })
123126                     .on('end', function() {
123127                         resizer.classed('dragging', false);
123128                     })
123129                 );
123130
123131                 var featureListWrap = selection
123132                     .append('div')
123133                     .attr('class', 'feature-list-pane')
123134                     .call(uiFeatureList(context));
123135
123136                 var inspectorWrap = selection
123137                     .append('div')
123138                     .attr('class', 'inspector-hidden inspector-wrap fr');
123139
123140
123141                 function hover(datum) {
123142                     if (datum && datum.__featurehash__) {   // hovering on data
123143                         _wasData = true;
123144                         sidebar
123145                             .show(dataEditor.datum(datum));
123146
123147                         selection.selectAll('.sidebar-component')
123148                             .classed('inspector-hover', true);
123149
123150                     } else if (datum instanceof osmNote) {
123151                         if (context.mode().id === 'drag-note') { return; }
123152                         _wasNote = true;
123153
123154                         var osm = services$1.osm;
123155                         if (osm) {
123156                             datum = osm.getNote(datum.id);   // marker may contain stale data - get latest
123157                         }
123158
123159                         sidebar
123160                             .show(noteEditor.note(datum));
123161
123162                         selection.selectAll('.sidebar-component')
123163                             .classed('inspector-hover', true);
123164
123165                     } else if (datum instanceof qaError) {
123166                         _wasQAError = true;
123167
123168                         var errService = services$1[datum.service];
123169                         if (errService) {
123170                             // marker may contain stale data - get latest
123171                             datum = errService.getError(datum.id);
123172                         }
123173
123174                         // Temporary solution while only two services
123175                         var errEditor = (datum.service === 'keepRight') ? keepRightEditor : improveOsmEditor;
123176
123177                         d3_selectAll('.qa_error.' + datum.service)
123178                             .classed('hover', function(d) { return d.id === datum.id; });
123179
123180                         sidebar
123181                             .show(errEditor.error(datum));
123182
123183                         selection.selectAll('.sidebar-component')
123184                             .classed('inspector-hover', true);
123185
123186                     } else if (!_current && (datum instanceof osmEntity)) {
123187                         featureListWrap
123188                             .classed('inspector-hidden', true);
123189
123190                         inspectorWrap
123191                             .classed('inspector-hidden', false)
123192                             .classed('inspector-hover', true);
123193
123194                         if (inspector.entityID() !== datum.id || inspector.state() !== 'hover') {
123195                             inspector
123196                                 .state('hover')
123197                                 .entityID(datum.id);
123198
123199                             inspectorWrap
123200                                 .call(inspector);
123201                         }
123202
123203                     } else if (!_current) {
123204                         featureListWrap
123205                             .classed('inspector-hidden', false);
123206                         inspectorWrap
123207                             .classed('inspector-hidden', true);
123208                         inspector
123209                             .state('hide');
123210
123211                     } else if (_wasData || _wasNote || _wasQAError) {
123212                         _wasNote = false;
123213                         _wasData = false;
123214                         _wasQAError = false;
123215                         d3_selectAll('.note').classed('hover', false);
123216                         d3_selectAll('.qa_error').classed('hover', false);
123217                         sidebar.hide();
123218                     }
123219                 }
123220
123221                 sidebar.hover = throttle(hover, 200);
123222
123223
123224                 sidebar.intersects = function(extent) {
123225                     var rect = selection.node().getBoundingClientRect();
123226                     return extent.intersects([
123227                         context.projection.invert([0, rect.height]),
123228                         context.projection.invert([rect.width, 0])
123229                     ]);
123230                 };
123231
123232
123233                 sidebar.select = function(id, newFeature) {
123234                     sidebar.hide();
123235
123236                     if (id) {
123237                         var entity = context.entity(id);
123238                         // uncollapse the sidebar
123239                         if (selection.classed('collapsed')) {
123240                             if (newFeature) {
123241                                 var extent = entity.extent(context.graph());
123242                                 sidebar.expand(sidebar.intersects(extent));
123243                             }
123244                         }
123245
123246                         featureListWrap
123247                             .classed('inspector-hidden', true);
123248
123249                         inspectorWrap
123250                             .classed('inspector-hidden', false)
123251                             .classed('inspector-hover', false);
123252
123253                         if (inspector.entityID() !== id || inspector.state() !== 'select') {
123254                             inspector
123255                                 .state('select')
123256                                 .entityID(id)
123257                                 .newFeature(newFeature);
123258
123259                             inspectorWrap
123260                                 .call(inspector, newFeature);
123261                         }
123262
123263                         sidebar.showPresetList = function() {
123264                             inspector.showList(context.presets().match(entity, context.graph()));
123265                         };
123266
123267                     } else {
123268                         inspector
123269                             .state('hide');
123270                     }
123271                 };
123272
123273
123274                 sidebar.show = function(component, element) {
123275                     featureListWrap
123276                         .classed('inspector-hidden', true);
123277                     inspectorWrap
123278                         .classed('inspector-hidden', true);
123279
123280                     if (_current) { _current.remove(); }
123281                     _current = selection
123282                         .append('div')
123283                         .attr('class', 'sidebar-component')
123284                         .call(component, element);
123285                 };
123286
123287
123288                 sidebar.hide = function() {
123289                     featureListWrap
123290                         .classed('inspector-hidden', false);
123291                     inspectorWrap
123292                         .classed('inspector-hidden', true);
123293
123294                     if (_current) { _current.remove(); }
123295                     _current = null;
123296                 };
123297
123298
123299                 sidebar.expand = function(moveMap) {
123300                     if (selection.classed('collapsed')) {
123301                         sidebar.toggle(moveMap);
123302                     }
123303                 };
123304
123305
123306                 sidebar.collapse = function(moveMap) {
123307                     if (!selection.classed('collapsed')) {
123308                         sidebar.toggle(moveMap);
123309                     }
123310                 };
123311
123312
123313                 sidebar.toggle = function(moveMap) {
123314                     var e = event;
123315                     if (e && e.sourceEvent) {
123316                         e.sourceEvent.preventDefault();
123317                     } else if (e) {
123318                         e.preventDefault();
123319                     }
123320
123321                     // Don't allow sidebar to toggle when the user is in the walkthrough.
123322                     if (context.inIntro()) { return; }
123323
123324                     var isCollapsed = selection.classed('collapsed');
123325                     var isCollapsing = !isCollapsed;
123326                     var isRTL = (textDirection === 'rtl');
123327                     var scaleX = isRTL ? 0 : 1;
123328                     var xMarginProperty = isRTL ? 'margin-right' : 'margin-left';
123329
123330                     sidebarWidth = selection.node().getBoundingClientRect().width;
123331
123332                     // switch from % to px
123333                     selection.style('width', sidebarWidth + 'px');
123334
123335                     var startMargin, endMargin, lastMargin;
123336                     if (isCollapsing) {
123337                         startMargin = lastMargin = 0;
123338                         endMargin = -sidebarWidth;
123339                     } else {
123340                         startMargin = lastMargin = -sidebarWidth;
123341                         endMargin = 0;
123342                     }
123343
123344                     selection.transition()
123345                         .style(xMarginProperty, endMargin + 'px')
123346                         .tween('panner', function() {
123347                             var i = d3_interpolateNumber(startMargin, endMargin);
123348                             return function(t) {
123349                                 var dx = lastMargin - Math.round(i(t));
123350                                 lastMargin = lastMargin - dx;
123351                                 context.ui().onResize(moveMap ? undefined : [dx * scaleX, 0]);
123352                             };
123353                         })
123354                         .on('end', function() {
123355                             selection.classed('collapsed', isCollapsing);
123356
123357                             // switch back from px to %
123358                             if (!isCollapsing) {
123359                                 var containerWidth = container.node().getBoundingClientRect().width;
123360                                 var widthPct = (sidebarWidth / containerWidth) * 100;
123361                                 selection
123362                                     .style(xMarginProperty, null)
123363                                     .style('width', widthPct + '%');
123364                             }
123365                         });
123366                 };
123367
123368                 // toggle the sidebar collapse when double-clicking the resizer
123369                 resizer.on('dblclick', sidebar.toggle);
123370             }
123371
123372             sidebar.showPresetList = function() {};
123373             sidebar.hover = function() {};
123374             sidebar.hover.cancel = function() {};
123375             sidebar.intersects = function() {};
123376             sidebar.select = function() {};
123377             sidebar.show = function() {};
123378             sidebar.hide = function() {};
123379             sidebar.expand = function() {};
123380             sidebar.collapse = function() {};
123381             sidebar.toggle = function() {};
123382
123383             return sidebar;
123384         }
123385
123386         function uiSpinner(context) {
123387             var osm = context.connection();
123388
123389
123390             return function(selection) {
123391                 var img = selection
123392                     .append('img')
123393                     .attr('src', context.imagePath('loader-black.gif'))
123394                     .style('opacity', 0);
123395
123396                 if (osm) {
123397                     osm
123398                         .on('loading.spinner', function() {
123399                             img.transition()
123400                                 .style('opacity', 1);
123401                         })
123402                         .on('loaded.spinner', function() {
123403                             img.transition()
123404                                 .style('opacity', 0);
123405                         });
123406                 }
123407             };
123408         }
123409
123410         function uiSplash(context) {
123411           return function (selection) {
123412             // Exception - if there are restorable changes, skip this splash screen.
123413             // This is because we currently only support one `uiModal` at a time
123414             //  and we need to show them `uiRestore`` instead of this one.
123415             if (context.history().hasRestorableChanges()) { return; }
123416
123417             // If user has not seen this version of the privacy policy, show the splash again.
123418             var updateMessage = '';
123419             var sawPrivacyVersion = context.storage('sawPrivacyVersion');
123420             if (sawPrivacyVersion !== context.privacyVersion) {
123421               updateMessage = t('splash.privacy_update');
123422               context.storage('sawSplash', null);
123423             }
123424
123425             if (context.storage('sawSplash')) { return; }
123426
123427             context.storage('sawSplash', true);
123428             context.storage('sawPrivacyVersion', context.privacyVersion);
123429
123430             var modalSelection = uiModal(selection);
123431
123432             modalSelection.select('.modal')
123433               .attr('class', 'modal-splash modal');
123434
123435             var introModal = modalSelection.select('.content')
123436               .append('div')
123437               .attr('class', 'fillL');
123438
123439             introModal
123440               .append('div')
123441               .attr('class','modal-section')
123442               .append('h3')
123443               .text(t('splash.welcome'));
123444
123445             var modalSection = introModal
123446               .append('div')
123447               .attr('class','modal-section');
123448
123449             modalSection
123450               .append('p')
123451               .html(t('splash.text', {
123452                 version: context.version,
123453                 website: '<a target="_blank" href="http://ideditor.blog/">ideditor.blog</a>',
123454                 github: '<a target="_blank" href="https://github.com/openstreetmap/iD">github.com</a>'
123455               }));
123456
123457             modalSection
123458               .append('p')
123459               .html(t('splash.privacy', {
123460                 updateMessage: updateMessage,
123461                 privacyLink: '<a target="_blank" href="https://github.com/openstreetmap/iD/blob/release/PRIVACY.md">' +
123462                   t('splash.privacy_policy') + '</a>'
123463               }));
123464
123465             var buttonWrap = introModal
123466               .append('div')
123467               .attr('class', 'modal-actions');
123468
123469             var walkthrough = buttonWrap
123470               .append('button')
123471               .attr('class', 'walkthrough')
123472               .on('click', function () {
123473                 context.container().call(uiIntro(context));
123474                 modalSelection.close();
123475               });
123476
123477             walkthrough
123478               .append('svg')
123479               .attr('class', 'logo logo-walkthrough')
123480               .append('use')
123481               .attr('xlink:href', '#iD-logo-walkthrough');
123482
123483             walkthrough
123484               .append('div')
123485               .text(t('splash.walkthrough'));
123486
123487             var startEditing = buttonWrap
123488               .append('button')
123489               .attr('class', 'start-editing')
123490               .on('click', modalSelection.close);
123491
123492             startEditing
123493               .append('svg')
123494               .attr('class', 'logo logo-features')
123495               .append('use')
123496               .attr('xlink:href', '#iD-logo-features');
123497
123498             startEditing
123499               .append('div')
123500               .text(t('splash.start'));
123501
123502             modalSelection.select('button.close')
123503               .attr('class','hide');
123504           };
123505         }
123506
123507         function uiStatus(context) {
123508             var osm = context.connection();
123509
123510
123511             return function(selection) {
123512                 if (!osm) { return; }
123513
123514                 function update(err, apiStatus) {
123515                     selection.html('');
123516
123517                     if (err) {
123518                         if (apiStatus === 'connectionSwitched') {
123519                             // if the connection was just switched, we can't rely on
123520                             // the status (we're getting the status of the previous api)
123521                             return;
123522
123523                         } else if (apiStatus === 'rateLimited') {
123524                             selection
123525                                 .text(t('osm_api_status.message.rateLimit'))
123526                                 .append('a')
123527                                 .attr('class', 'api-status-login')
123528                                 .attr('target', '_blank')
123529                                 .call(svgIcon('#iD-icon-out-link', 'inline'))
123530                                 .append('span')
123531                                 .text(t('login'))
123532                                 .on('click.login', function() {
123533                                     event.preventDefault();
123534                                     osm.authenticate();
123535                                 });
123536                         } else {
123537
123538                             // don't allow retrying too rapidly
123539                             var throttledRetry = throttle(function() {
123540                                 // try loading the visible tiles
123541                                 context.loadTiles(context.projection);
123542                                 // manually reload the status too in case all visible tiles were already loaded
123543                                 osm.reloadApiStatus();
123544                             }, 2000);
123545
123546                             // eslint-disable-next-line no-warning-comments
123547                             // TODO: nice messages for different error types
123548                             selection
123549                                 .text(t('osm_api_status.message.error') + ' ')
123550                                 .append('a')
123551                                 // let the user manually retry their connection directly
123552                                 .text(t('osm_api_status.retry'))
123553                                 .on('click.retry', function() {
123554                                     event.preventDefault();
123555                                     throttledRetry();
123556                                 });
123557                         }
123558
123559                     } else if (apiStatus === 'readonly') {
123560                         selection.text(t('osm_api_status.message.readonly'));
123561                     } else if (apiStatus === 'offline') {
123562                         selection.text(t('osm_api_status.message.offline'));
123563                     }
123564
123565                     selection.attr('class', 'api-status ' + (err ? 'error' : apiStatus));
123566                 }
123567
123568                 osm.on('apiStatusChange.uiStatus', update);
123569
123570                 // reload the status periodically regardless of other factors
123571                 window.setInterval(function() {
123572                     osm.reloadApiStatus();
123573                 }, 90000);
123574
123575                 // load the initial status in case no OSM data was loaded yet
123576                 osm.reloadApiStatus();
123577             };
123578         }
123579
123580         function modeDrawArea(context, wayID, startGraph, baselineGraph, button) {
123581             var mode = {
123582                 button: button,
123583                 id: 'draw-area'
123584             };
123585
123586             var behavior;
123587
123588             mode.wayID = wayID;
123589
123590             mode.enter = function() {
123591                 var way = context.entity(wayID);
123592
123593                 behavior = behaviorDrawWay(context, wayID, undefined, mode, startGraph, baselineGraph)
123594                     .tail(t('modes.draw_area.tail'));
123595
123596                 var addNode = behavior.addNode;
123597
123598                 behavior.addNode = function(node, d) {
123599                     var length = way.nodes.length;
123600                     var penultimate = length > 2 ? way.nodes[length - 2] : null;
123601
123602                     if (node.id === way.first() || node.id === penultimate) {
123603                         behavior.finish();
123604                     } else {
123605                         addNode(node, d);
123606                     }
123607                 };
123608
123609                 context.install(behavior);
123610             };
123611
123612
123613             mode.exit = function() {
123614                 context.uninstall(behavior);
123615             };
123616
123617
123618             mode.selectedIDs = function() {
123619                 return [wayID];
123620             };
123621
123622
123623             mode.activeID = function() {
123624                 return (behavior && behavior.activeID()) || [];
123625             };
123626
123627
123628             return mode;
123629         }
123630
123631         function modeAddArea(context, mode) {
123632             mode.id = 'add-area';
123633
123634             var behavior = behaviorAddWay(context)
123635                 .tail(t('modes.add_area.tail'))
123636                 .on('start', start)
123637                 .on('startFromWay', startFromWay)
123638                 .on('startFromNode', startFromNode);
123639
123640             var defaultTags = { area: 'yes' };
123641             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'area'); }
123642
123643
123644             function actionClose(wayId) {
123645                 return function (graph) {
123646                     return graph.replace(graph.entity(wayId).close());
123647                 };
123648             }
123649
123650
123651             function start(loc) {
123652                 var startGraph = context.graph();
123653                 var node = osmNode({ loc: loc });
123654                 var way = osmWay({ tags: defaultTags });
123655
123656                 context.perform(
123657                     actionAddEntity(node),
123658                     actionAddEntity(way),
123659                     actionAddVertex(way.id, node.id),
123660                     actionClose(way.id)
123661                 );
123662
123663                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
123664             }
123665
123666
123667             function startFromWay(loc, edge) {
123668                 var startGraph = context.graph();
123669                 var node = osmNode({ loc: loc });
123670                 var way = osmWay({ tags: defaultTags });
123671
123672                 context.perform(
123673                     actionAddEntity(node),
123674                     actionAddEntity(way),
123675                     actionAddVertex(way.id, node.id),
123676                     actionClose(way.id),
123677                     actionAddMidpoint({ loc: loc, edge: edge }, node)
123678                 );
123679
123680                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
123681             }
123682
123683
123684             function startFromNode(node) {
123685                 var startGraph = context.graph();
123686                 var way = osmWay({ tags: defaultTags });
123687
123688                 context.perform(
123689                     actionAddEntity(way),
123690                     actionAddVertex(way.id, node.id),
123691                     actionClose(way.id)
123692                 );
123693
123694                 context.enter(modeDrawArea(context, way.id, startGraph, context.graph(), mode.button));
123695             }
123696
123697
123698             mode.enter = function() {
123699                 context.install(behavior);
123700             };
123701
123702
123703             mode.exit = function() {
123704                 context.uninstall(behavior);
123705             };
123706
123707
123708             return mode;
123709         }
123710
123711         function modeAddLine(context, mode) {
123712             mode.id = 'add-line';
123713
123714             var behavior = behaviorAddWay(context)
123715                 .tail(t('modes.add_line.tail'))
123716                 .on('start', start)
123717                 .on('startFromWay', startFromWay)
123718                 .on('startFromNode', startFromNode);
123719
123720             var defaultTags = {};
123721             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'line'); }
123722
123723
123724             function start(loc) {
123725                 var startGraph = context.graph();
123726                 var node = osmNode({ loc: loc });
123727                 var way = osmWay({ tags: defaultTags });
123728
123729                 context.perform(
123730                     actionAddEntity(node),
123731                     actionAddEntity(way),
123732                     actionAddVertex(way.id, node.id)
123733                 );
123734
123735                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
123736             }
123737
123738
123739             function startFromWay(loc, edge) {
123740                 var startGraph = context.graph();
123741                 var node = osmNode({ loc: loc });
123742                 var way = osmWay({ tags: defaultTags });
123743
123744                 context.perform(
123745                     actionAddEntity(node),
123746                     actionAddEntity(way),
123747                     actionAddVertex(way.id, node.id),
123748                     actionAddMidpoint({ loc: loc, edge: edge }, node)
123749                 );
123750
123751                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
123752             }
123753
123754
123755             function startFromNode(node) {
123756                 var startGraph = context.graph();
123757                 var way = osmWay({ tags: defaultTags });
123758
123759                 context.perform(
123760                     actionAddEntity(way),
123761                     actionAddVertex(way.id, node.id)
123762                 );
123763
123764                 context.enter(modeDrawLine(context, way.id, startGraph, context.graph(), mode.button));
123765             }
123766
123767
123768             mode.enter = function() {
123769                 context.install(behavior);
123770             };
123771
123772
123773             mode.exit = function() {
123774                 context.uninstall(behavior);
123775             };
123776
123777             return mode;
123778         }
123779
123780         function modeAddPoint(context, mode) {
123781
123782             mode.id = 'add-point';
123783
123784             var behavior = behaviorDraw(context)
123785                 .tail(t('modes.add_point.tail'))
123786                 .on('click', add)
123787                 .on('clickWay', addWay)
123788                 .on('clickNode', addNode)
123789                 .on('cancel', cancel)
123790                 .on('finish', cancel);
123791
123792             var defaultTags = {};
123793             if (mode.preset) { defaultTags = mode.preset.setTags(defaultTags, 'point'); }
123794
123795
123796             function add(loc) {
123797                 var node = osmNode({ loc: loc, tags: defaultTags });
123798
123799                 context.perform(
123800                     actionAddEntity(node),
123801                     t('operations.add.annotation.point')
123802                 );
123803
123804                 enterSelectMode(node);
123805             }
123806
123807
123808             function addWay(loc, edge) {
123809                 var node = osmNode({ tags: defaultTags });
123810
123811                 context.perform(
123812                     actionAddMidpoint({loc: loc, edge: edge}, node),
123813                     t('operations.add.annotation.vertex')
123814                 );
123815
123816                 enterSelectMode(node);
123817             }
123818
123819             function enterSelectMode(node) {
123820                 context.enter(
123821                     modeSelect(context, [node.id]).newFeature(true)
123822                 );
123823             }
123824
123825
123826             function addNode(node) {
123827                 if (Object.keys(defaultTags).length === 0) {
123828                     enterSelectMode(node);
123829                     return;
123830                 }
123831
123832                 var tags = Object.assign({}, node.tags);  // shallow copy
123833                 for (var key in defaultTags) {
123834                     tags[key] = defaultTags[key];
123835                 }
123836
123837                 context.perform(
123838                     actionChangeTags(node.id, tags),
123839                     t('operations.add.annotation.point')
123840                 );
123841
123842                 enterSelectMode(node);
123843             }
123844
123845
123846             function cancel() {
123847                 context.enter(modeBrowse(context));
123848             }
123849
123850
123851             mode.enter = function() {
123852                 context.install(behavior);
123853             };
123854
123855
123856             mode.exit = function() {
123857                 context.uninstall(behavior);
123858             };
123859
123860
123861             return mode;
123862         }
123863
123864         function modeAddNote(context) {
123865             var mode = {
123866                 id: 'add-note',
123867                 button: 'note',
123868                 title: t('modes.add_note.title'),
123869                 description: t('modes.add_note.description'),
123870                 key: t('modes.add_note.key')
123871             };
123872
123873             var behavior = behaviorDraw(context)
123874                 .tail(t('modes.add_note.tail'))
123875                 .on('click', add)
123876                 .on('cancel', cancel)
123877                 .on('finish', cancel);
123878
123879
123880             function add(loc) {
123881                 var osm = services$1.osm;
123882                 if (!osm) { return; }
123883
123884                 var note = osmNote({ loc: loc, status: 'open', comments: [] });
123885                 osm.replaceNote(note);
123886
123887                 // force a reraw (there is no history change that would otherwise do this)
123888                 context.pan([0,0]);
123889
123890                 context
123891                     .selectedNoteID(note.id)
123892                     .enter(modeSelectNote(context, note.id).newFeature(true));
123893             }
123894
123895
123896             function cancel() {
123897                 context.enter(modeBrowse(context));
123898             }
123899
123900
123901             mode.enter = function() {
123902                 context.install(behavior);
123903             };
123904
123905
123906             mode.exit = function() {
123907                 context.uninstall(behavior);
123908             };
123909
123910
123911             return mode;
123912         }
123913
123914         function uiConflicts(context) {
123915             var dispatch$1 = dispatch('cancel', 'save');
123916             var keybinding = utilKeybinding('conflicts');
123917             var _origChanges;
123918             var _conflictList;
123919
123920
123921             function keybindingOn() {
123922                 d3_select(document)
123923                     .call(keybinding.on('⎋', cancel, true));
123924             }
123925
123926             function keybindingOff() {
123927                 d3_select(document)
123928                     .call(keybinding.unbind);
123929             }
123930
123931             function tryAgain() {
123932                 keybindingOff();
123933                 dispatch$1.call('save');
123934             }
123935
123936             function cancel() {
123937                 keybindingOff();
123938                 dispatch$1.call('cancel');
123939             }
123940
123941
123942             function conflicts(selection) {
123943                 keybindingOn();
123944
123945                 var headerEnter = selection.selectAll('.header')
123946                     .data([0])
123947                     .enter()
123948                     .append('div')
123949                     .attr('class', 'header fillL');
123950
123951                 headerEnter
123952                     .append('button')
123953                     .attr('class', 'fr')
123954                     .on('click', cancel)
123955                     .call(svgIcon('#iD-icon-close'));
123956
123957                 headerEnter
123958                     .append('h3')
123959                     .text(t('save.conflict.header'));
123960
123961                 var bodyEnter = selection.selectAll('.body')
123962                     .data([0])
123963                     .enter()
123964                     .append('div')
123965                     .attr('class', 'body fillL');
123966
123967                 var conflictsHelpEnter = bodyEnter
123968                     .append('div')
123969                     .attr('class', 'conflicts-help')
123970                     .text(t('save.conflict.help'));
123971
123972
123973                 // Download changes link
123974                 var detected = utilDetect();
123975                 var changeset = new osmChangeset();
123976
123977                 delete changeset.id;  // Export without changeset_id
123978
123979                 var data = JXON.stringify(changeset.osmChangeJXON(_origChanges));
123980                 var blob = new Blob([data], { type: 'text/xml;charset=utf-8;' });
123981                 var fileName = 'changes.osc';
123982
123983                 var linkEnter = conflictsHelpEnter.selectAll('.download-changes')
123984                     .append('a')
123985                     .attr('class', 'download-changes');
123986
123987                 if (detected.download) {      // All except IE11 and Edge
123988                     linkEnter                 // download the data as a file
123989                         .attr('href', window.URL.createObjectURL(blob))
123990                         .attr('download', fileName);
123991
123992                 } else {                      // IE11 and Edge
123993                     linkEnter                 // open data uri in a new tab
123994                         .attr('target', '_blank')
123995                         .on('click.download', function() {
123996                             navigator.msSaveBlob(blob, fileName);
123997                         });
123998                 }
123999
124000                 linkEnter
124001                     .call(svgIcon('#iD-icon-load', 'inline'))
124002                     .append('span')
124003                     .text(t('save.conflict.download_changes'));
124004
124005
124006                 bodyEnter
124007                     .append('div')
124008                     .attr('class', 'conflict-container fillL3')
124009                     .call(showConflict, 0);
124010
124011                 bodyEnter
124012                     .append('div')
124013                     .attr('class', 'conflicts-done')
124014                     .attr('opacity', 0)
124015                     .style('display', 'none')
124016                     .text(t('save.conflict.done'));
124017
124018                 var buttonsEnter = bodyEnter
124019                     .append('div')
124020                     .attr('class','buttons col12 joined conflicts-buttons');
124021
124022                 buttonsEnter
124023                     .append('button')
124024                     .attr('disabled', _conflictList.length > 1)
124025                     .attr('class', 'action conflicts-button col6')
124026                     .text(t('save.title'))
124027                     .on('click.try_again', tryAgain);
124028
124029                 buttonsEnter
124030                     .append('button')
124031                     .attr('class', 'secondary-action conflicts-button col6')
124032                     .text(t('confirm.cancel'))
124033                     .on('click.cancel', cancel);
124034             }
124035
124036
124037             function showConflict(selection, index) {
124038                 index = utilWrap(index, _conflictList.length);
124039
124040                 var parent = d3_select(selection.node().parentNode);
124041
124042                 // enable save button if this is the last conflict being reviewed..
124043                 if (index === _conflictList.length - 1) {
124044                     window.setTimeout(function() {
124045                         parent.select('.conflicts-button')
124046                             .attr('disabled', null);
124047
124048                         parent.select('.conflicts-done')
124049                             .transition()
124050                             .attr('opacity', 1)
124051                             .style('display', 'block');
124052                     }, 250);
124053                 }
124054
124055                 var conflict = selection
124056                     .selectAll('.conflict')
124057                     .data([_conflictList[index]]);
124058
124059                 conflict.exit()
124060                     .remove();
124061
124062                 var conflictEnter = conflict.enter()
124063                     .append('div')
124064                     .attr('class', 'conflict');
124065
124066                 conflictEnter
124067                     .append('h4')
124068                     .attr('class', 'conflict-count')
124069                     .text(t('save.conflict.count', { num: index + 1, total: _conflictList.length }));
124070
124071                 conflictEnter
124072                     .append('a')
124073                     .attr('class', 'conflict-description')
124074                     .attr('href', '#')
124075                     .text(function(d) { return d.name; })
124076                     .on('click', function(d) {
124077                         event.preventDefault();
124078                         zoomToEntity(d.id);
124079                     });
124080
124081                 var details = conflictEnter
124082                     .append('div')
124083                     .attr('class', 'conflict-detail-container');
124084
124085                 details
124086                     .append('ul')
124087                     .attr('class', 'conflict-detail-list')
124088                     .selectAll('li')
124089                     .data(function(d) { return d.details || []; })
124090                     .enter()
124091                     .append('li')
124092                     .attr('class', 'conflict-detail-item')
124093                     .html(function(d) { return d; });
124094
124095                 details
124096                     .append('div')
124097                     .attr('class', 'conflict-choices')
124098                     .call(addChoices);
124099
124100                 details
124101                     .append('div')
124102                     .attr('class', 'conflict-nav-buttons joined cf')
124103                     .selectAll('button')
124104                     .data(['previous', 'next'])
124105                     .enter()
124106                     .append('button')
124107                     .text(function(d) { return t('save.conflict.' + d); })
124108                     .attr('class', 'conflict-nav-button action col6')
124109                     .attr('disabled', function(d, i) {
124110                         return (i === 0 && index === 0) ||
124111                             (i === 1 && index === _conflictList.length - 1) || null;
124112                     })
124113                     .on('click', function(d, i) {
124114                         event.preventDefault();
124115
124116                         var container = parent.selectAll('.conflict-container');
124117                         var sign = (i === 0 ? -1 : 1);
124118
124119                         container
124120                             .selectAll('.conflict')
124121                             .remove();
124122
124123                         container
124124                             .call(showConflict, index + sign);
124125                     });
124126
124127             }
124128
124129
124130             function addChoices(selection) {
124131                 var choices = selection
124132                     .append('ul')
124133                     .attr('class', 'layer-list')
124134                     .selectAll('li')
124135                     .data(function(d) { return d.choices || []; });
124136
124137                 // enter
124138                 var choicesEnter = choices.enter()
124139                     .append('li')
124140                     .attr('class', 'layer');
124141
124142                 var labelEnter = choicesEnter
124143                     .append('label');
124144
124145                 labelEnter
124146                     .append('input')
124147                     .attr('type', 'radio')
124148                     .attr('name', function(d) { return d.id; })
124149                     .on('change', function(d, i) {
124150                         var ul = this.parentNode.parentNode.parentNode;
124151                         ul.__data__.chosen = i;
124152                         choose(ul, d);
124153                     });
124154
124155                 labelEnter
124156                     .append('span')
124157                     .text(function(d) { return d.text; });
124158
124159                 // update
124160                 choicesEnter
124161                     .merge(choices)
124162                     .each(function(d, i) {
124163                         var ul = this.parentNode;
124164                         if (ul.__data__.chosen === i) {
124165                             choose(ul, d);
124166                         }
124167                     });
124168             }
124169
124170
124171             function choose(ul, datum) {
124172                 if (event) { event.preventDefault(); }
124173
124174                 d3_select(ul)
124175                     .selectAll('li')
124176                     .classed('active', function(d) { return d === datum; })
124177                     .selectAll('input')
124178                     .property('checked', function(d) { return d === datum; });
124179
124180                 var extent = geoExtent();
124181                 var entity;
124182
124183                 entity = context.graph().hasEntity(datum.id);
124184                 if (entity) { extent._extend(entity.extent(context.graph())); }
124185
124186                 datum.action();
124187
124188                 entity = context.graph().hasEntity(datum.id);
124189                 if (entity) { extent._extend(entity.extent(context.graph())); }
124190
124191                 zoomToEntity(datum.id, extent);
124192             }
124193
124194
124195             function zoomToEntity(id, extent) {
124196                 context.surface().selectAll('.hover')
124197                     .classed('hover', false);
124198
124199                 var entity = context.graph().hasEntity(id);
124200                 if (entity) {
124201                     if (extent) {
124202                         context.map().trimmedExtent(extent);
124203                     } else {
124204                         context.map().zoomToEase(entity);
124205                     }
124206                     context.surface().selectAll(utilEntityOrMemberSelector([entity.id], context.graph()))
124207                         .classed('hover', true);
124208                 }
124209             }
124210
124211
124212             // The conflict list should be an array of objects like:
124213             // {
124214             //     id: id,
124215             //     name: entityName(local),
124216             //     details: merge.conflicts(),
124217             //     chosen: 1,
124218             //     choices: [
124219             //         choice(id, keepMine, forceLocal),
124220             //         choice(id, keepTheirs, forceRemote)
124221             //     ]
124222             // }
124223             conflicts.conflictList = function(_) {
124224                 if (!arguments.length) { return _conflictList; }
124225                 _conflictList = _;
124226                 return conflicts;
124227             };
124228
124229
124230             conflicts.origChanges = function(_) {
124231                 if (!arguments.length) { return _origChanges; }
124232                 _origChanges = _;
124233                 return conflicts;
124234             };
124235
124236
124237             return utilRebind(conflicts, dispatch$1, 'on');
124238         }
124239
124240         function uiChangesetEditor(context) {
124241             var dispatch$1 = dispatch('change');
124242             var formFields = uiFormFields(context);
124243             var commentCombo = uiCombobox(context, 'comment').caseSensitive(true);
124244             var _fieldsArr;
124245             var _tags;
124246             var _changesetID;
124247
124248
124249             function changesetEditor(selection) {
124250                 render(selection);
124251             }
124252
124253
124254             function render(selection) {
124255                 var initial = false;
124256
124257                 if (!_fieldsArr) {
124258                     initial = true;
124259                     var presets = context.presets();
124260
124261                     _fieldsArr = [
124262                         uiField(context, presets.field('comment'), null, { show: true, revert: false }),
124263                         uiField(context, presets.field('source'), null, { show: false, revert: false }),
124264                         uiField(context, presets.field('hashtags'), null, { show: false, revert: false }) ];
124265
124266                     _fieldsArr.forEach(function(field) {
124267                         field
124268                             .on('change', function(t, onInput) {
124269                                 dispatch$1.call('change', field, t, onInput);
124270                             });
124271                     });
124272                 }
124273
124274                 _fieldsArr.forEach(function(field) {
124275                     field
124276                         .tags(_tags);
124277                 });
124278
124279
124280                 selection
124281                     .call(formFields.fieldsArr(_fieldsArr));
124282
124283
124284                 if (initial) {
124285                     var commentField = selection.select('#preset-input-comment');
124286                     var commentNode = commentField.node();
124287
124288                     if (commentNode) {
124289                         commentNode.focus();
124290                         commentNode.select();
124291                     }
124292
124293                     // trigger a 'blur' event so that comment field can be cleaned
124294                     // and checked for hashtags, even if retrieved from localstorage
124295                     utilTriggerEvent(commentField, 'blur');
124296
124297                     var osm = context.connection();
124298                     if (osm) {
124299                         osm.userChangesets(function (err, changesets) {
124300                             if (err) { return; }
124301
124302                             var comments = changesets.map(function(changeset) {
124303                                 var comment = changeset.tags.comment;
124304                                 return comment ? { title: comment, value: comment } : null;
124305                             }).filter(Boolean);
124306
124307                             commentField
124308                                 .call(commentCombo
124309                                     .data(utilArrayUniqBy(comments, 'title'))
124310                                 );
124311                         });
124312                     }
124313                 }
124314
124315                 // Add warning if comment mentions Google
124316                 var hasGoogle = _tags.comment.match(/google/i);
124317                 var commentWarning = selection.select('.form-field-comment').selectAll('.comment-warning')
124318                     .data(hasGoogle ? [0] : []);
124319
124320                 commentWarning.exit()
124321                     .transition()
124322                     .duration(200)
124323                     .style('opacity', 0)
124324                     .remove();
124325
124326                 var commentEnter = commentWarning.enter()
124327                     .insert('div', '.tag-reference-body')
124328                     .attr('class', 'field-warning comment-warning')
124329                     .style('opacity', 0);
124330
124331                 commentEnter
124332                     .append('a')
124333                     .attr('target', '_blank')
124334                     .attr('tabindex', -1)
124335                     .call(svgIcon('#iD-icon-alert', 'inline'))
124336                     .attr('href', t('commit.google_warning_link'))
124337                     .append('span')
124338                     .text(t('commit.google_warning'));
124339
124340                 commentEnter
124341                     .transition()
124342                     .duration(200)
124343                     .style('opacity', 1);
124344             }
124345
124346
124347             changesetEditor.tags = function(_) {
124348                 if (!arguments.length) { return _tags; }
124349                 _tags = _;
124350                 // Don't reset _fieldsArr here.
124351                 return changesetEditor;
124352             };
124353
124354
124355             changesetEditor.changesetID = function(_) {
124356                 if (!arguments.length) { return _changesetID; }
124357                 if (_changesetID === _) { return changesetEditor; }
124358                 _changesetID = _;
124359                 _fieldsArr = null;
124360                 return changesetEditor;
124361             };
124362
124363
124364             return utilRebind(changesetEditor, dispatch$1, 'on');
124365         }
124366
124367         function uiCommitChanges(context) {
124368             var detected = utilDetect();
124369             var _entityID;
124370
124371
124372             function commitChanges(selection) {
124373                 var history = context.history();
124374                 var summary = history.difference().summary();
124375
124376                 var container = selection.selectAll('.modal-section.commit-section')
124377                     .data([0]);
124378
124379                 var containerEnter = container.enter()
124380                     .append('div')
124381                     .attr('class', 'commit-section modal-section fillL2');
124382
124383                 containerEnter
124384                     .append('h3')
124385                     .text(t('commit.changes', { count: summary.length }));
124386
124387                 containerEnter
124388                     .append('ul')
124389                     .attr('class', 'changeset-list');
124390
124391                 container = containerEnter
124392                     .merge(container);
124393
124394
124395                 var items = container.select('ul').selectAll('li')
124396                     .data(summary);
124397
124398                 var itemsEnter = items.enter()
124399                     .append('li')
124400                     .attr('class', 'change-item');
124401
124402                 itemsEnter
124403                     .each(function(d) {
124404                         d3_select(this)
124405                             .call(svgIcon('#iD-icon-' + d.entity.geometry(d.graph), 'pre-text ' + d.changeType));
124406                     });
124407
124408                 itemsEnter
124409                     .append('span')
124410                     .attr('class', 'change-type')
124411                     .text(function(d) { return t('commit.' + d.changeType) + ' '; });
124412
124413                 itemsEnter
124414                     .append('strong')
124415                     .attr('class', 'entity-type')
124416                     .text(function(d) {
124417                         var matched = context.presets().match(d.entity, d.graph);
124418                         return (matched && matched.name()) || utilDisplayType(d.entity.id);
124419                     });
124420
124421                 itemsEnter
124422                     .append('span')
124423                     .attr('class', 'entity-name')
124424                     .text(function(d) {
124425                         var name = utilDisplayName(d.entity) || '',
124426                             string = '';
124427                         if (name !== '') {
124428                             string += ':';
124429                         }
124430                         return string += ' ' + name;
124431                     });
124432
124433                 itemsEnter
124434                     .style('opacity', 0)
124435                     .transition()
124436                     .style('opacity', 1);
124437
124438                 items = itemsEnter
124439                     .merge(items);
124440
124441                 items
124442                     .on('mouseover', mouseover)
124443                     .on('mouseout', mouseout)
124444                     .on('click', click);
124445
124446
124447                 // Download changeset link
124448                 var changeset = new osmChangeset().update({ id: undefined });
124449                 var changes = history.changes(actionDiscardTags(history.difference()));
124450
124451                 delete changeset.id;  // Export without chnageset_id
124452
124453                 var data = JXON.stringify(changeset.osmChangeJXON(changes));
124454                 var blob = new Blob([data], {type: 'text/xml;charset=utf-8;'});
124455                 var fileName = 'changes.osc';
124456
124457                 var linkEnter = container.selectAll('.download-changes')
124458                     .data([0])
124459                     .enter()
124460                     .append('a')
124461                     .attr('class', 'download-changes');
124462
124463                 if (detected.download) {      // All except IE11 and Edge
124464                     linkEnter                 // download the data as a file
124465                         .attr('href', window.URL.createObjectURL(blob))
124466                         .attr('download', fileName);
124467
124468                 } else {                      // IE11 and Edge
124469                     linkEnter                 // open data uri in a new tab
124470                         .attr('target', '_blank')
124471                         .on('click.download', function() {
124472                             navigator.msSaveBlob(blob, fileName);
124473                         });
124474                 }
124475
124476                 linkEnter
124477                     .call(svgIcon('#iD-icon-load', 'inline'))
124478                     .append('span')
124479                     .text(t('commit.download_changes'));
124480
124481
124482                 function mouseover(d) {
124483                     if (d.entity) {
124484                         context.surface().selectAll(
124485                             utilEntityOrMemberSelector([d.entity.id], context.graph())
124486                         ).classed('hover', true);
124487                     }
124488                 }
124489
124490
124491                 function mouseout() {
124492                     context.surface().selectAll('.hover')
124493                         .classed('hover', false);
124494                 }
124495
124496
124497                 function click(change) {
124498                     if (change.changeType === 'deleted') {
124499                         _entityID = null;
124500                     } else {
124501                         var entity = change.entity;
124502                         _entityID = change.entity.id;
124503                         context.map().zoomToEase(entity);
124504                         context.surface().selectAll(utilEntityOrMemberSelector([_entityID], context.graph()))
124505                             .classed('hover', true);
124506                     }
124507                 }
124508             }
124509
124510
124511             commitChanges.entityID = function(_) {
124512                 if (!arguments.length) { return _entityID; }
124513                 _entityID = _;
124514                 return commitChanges;
124515             };
124516
124517
124518             return commitChanges;
124519         }
124520
124521         function uiCommitWarnings(context) {
124522
124523             function commitWarnings(selection) {
124524                 var issuesBySeverity = context.validator()
124525                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeDisabledRules: true });
124526
124527                 for (var severity in issuesBySeverity) {
124528                     var issues = issuesBySeverity[severity];
124529                     var section = severity + '-section';
124530                     var issueItem = severity + '-item';
124531
124532                     var container = selection.selectAll('.' + section)
124533                         .data(issues.length ? [0] : []);
124534
124535                     container.exit()
124536                         .remove();
124537
124538                     var containerEnter = container.enter()
124539                         .append('div')
124540                         .attr('class', 'modal-section ' + section + ' fillL2');
124541
124542                     containerEnter
124543                         .append('h3')
124544                         .text(severity === 'warning' ? t('commit.warnings') : t('commit.errors'));
124545
124546                     containerEnter
124547                         .append('ul')
124548                         .attr('class', 'changeset-list');
124549
124550                     container = containerEnter
124551                         .merge(container);
124552
124553
124554                     var items = container.select('ul').selectAll('li')
124555                         .data(issues, function(d) { return d.id; });
124556
124557                     items.exit()
124558                         .remove();
124559
124560                     var itemsEnter = items.enter()
124561                         .append('li')
124562                         .attr('class', issueItem);
124563
124564                     itemsEnter
124565                         .call(svgIcon('#iD-icon-alert', 'pre-text'));
124566
124567                     itemsEnter
124568                         .append('strong')
124569                         .attr('class', 'issue-message');
124570
124571                     itemsEnter.filter(function(d) { return d.tooltip; })
124572                         .call(tooltip()
124573                             .title(function(d) { return d.tooltip; })
124574                             .placement('top')
124575                         );
124576
124577                     items = itemsEnter
124578                         .merge(items);
124579
124580                     items.selectAll('.issue-message')
124581                         .text(function(d) {
124582                             return d.message(context);
124583                         });
124584
124585                     items
124586                         .on('mouseover', function(d) {
124587                             if (d.entityIds) {
124588                                 context.surface().selectAll(
124589                                     utilEntityOrMemberSelector(
124590                                         d.entityIds,
124591                                         context.graph()
124592                                     )
124593                                 ).classed('hover', true);
124594                             }
124595                         })
124596                         .on('mouseout', function() {
124597                             context.surface().selectAll('.hover')
124598                                 .classed('hover', false);
124599                         })
124600                         .on('click', function(d) {
124601                             context.validator().focusIssue(d);
124602                         });
124603                 }
124604             }
124605
124606
124607             return commitWarnings;
124608         }
124609
124610         var _changeset$1;
124611         var readOnlyTags = [
124612             /^changesets_count$/,
124613             /^created_by$/,
124614             /^ideditor:/,
124615             /^imagery_used$/,
124616             /^host$/,
124617             /^locale$/,
124618             /^warnings:/,
124619             /^resolved:/
124620         ];
124621
124622         // treat most punctuation (except -, _, +, &) as hashtag delimiters - #4398
124623         // from https://stackoverflow.com/a/25575009
124624         var hashtagRegex = /(#[^\u2000-\u206F\u2E00-\u2E7F\s\\'!"#$%()*,.\/:;<=>?@\[\]^`{|}~]+)/g;
124625
124626
124627         function uiCommit(context) {
124628             var dispatch$1 = dispatch('cancel', 'save');
124629             var _userDetails;
124630             var _selection;
124631
124632             var changesetEditor = uiChangesetEditor(context)
124633                 .on('change', changeTags);
124634             var rawTagEditor = uiRawTagEditor(context)
124635                 .on('change', changeTags);
124636             var commitChanges = uiCommitChanges(context);
124637             var commitWarnings = uiCommitWarnings(context);
124638
124639
124640             function commit(selection) {
124641                 _selection = selection;
124642
124643                 var osm = context.connection();
124644                 if (!osm) { return; }
124645
124646                 // expire stored comment, hashtags, source after cutoff datetime - #3947 #4899
124647                 var commentDate = +context.storage('commentDate') || 0;
124648                 var currDate = Date.now();
124649                 var cutoff = 2 * 86400 * 1000;   // 2 days
124650                 if (commentDate > currDate || currDate - commentDate > cutoff) {
124651                     context.storage('comment', null);
124652                     context.storage('hashtags', null);
124653                     context.storage('source', null);
124654                 }
124655
124656                 var tags;
124657                 // Initialize changeset if one does not exist yet.
124658                 // Also pull values from local storage.
124659                 if (!_changeset$1) {
124660
124661                     // load in the URL hash values, if any
124662                     if (context.initialHashParams.comment) {
124663                         context.storage('comment', context.initialHashParams.comment);
124664                         context.storage('commentDate', Date.now());
124665                     }
124666                     if (context.initialHashParams.source) {
124667                         context.storage('source', context.initialHashParams.source);
124668                         context.storage('commentDate', Date.now());
124669                     }
124670                     if (context.initialHashParams.hashtags) {
124671                         context.storage('hashtags', context.initialHashParams.hashtags);
124672                     }
124673
124674                     var detected = utilDetect();
124675                     tags = {
124676                         comment: context.storage('comment') || '',
124677                         created_by: ('iD ' + context.version).substr(0, 255),
124678                         host: detected.host.substr(0, 255),
124679                         locale: detected.locale.substr(0, 255)
124680                     };
124681
124682                     // call findHashtags initially - this will remove stored
124683                     // hashtags if any hashtags are found in the comment - #4304
124684                     findHashtags(tags, true);
124685
124686                     var hashtags = context.storage('hashtags');
124687                     if (hashtags) {
124688                         tags.hashtags = hashtags;
124689                     }
124690
124691                     var source = context.storage('source');
124692                     if (source) {
124693                         tags.source = source;
124694                     }
124695                     var photoOverlaysUsed = context.history().photoOverlaysUsed();
124696                     if (photoOverlaysUsed.length) {
124697                         var sources = (tags.source || '').split(';');
124698
124699                         // include this tag for any photo layer
124700                         if (sources.indexOf('streetlevel imagery') === -1) {
124701                             sources.push('streetlevel imagery');
124702                         }
124703
124704                         // add the photo overlays used during editing as sources
124705                         photoOverlaysUsed.forEach(function(photoOverlay) {
124706                             if (sources.indexOf(photoOverlay) === -1) {
124707                                 sources.push(photoOverlay);
124708                             }
124709                         });
124710
124711                         tags.source = sources.join(';').substr(0, 255);
124712                     }
124713
124714                     _changeset$1 = new osmChangeset({ tags: tags });
124715                 }
124716
124717                 tags = Object.assign({}, _changeset$1.tags);   // shallow copy
124718
124719                 // assign tags for imagery used
124720                 var imageryUsed = context.history().imageryUsed().join(';').substr(0, 255);
124721                 tags.imagery_used = imageryUsed || 'None';
124722
124723                 // assign tags for closed issues and notes
124724                 var osmClosed = osm.getClosedIDs();
124725                 if (osmClosed.length) {
124726                     tags['closed:note'] = osmClosed.join(';').substr(0, 255);
124727                 }
124728                 if (services$1.keepRight) {
124729                     var krClosed = services$1.keepRight.getClosedIDs();
124730                     if (krClosed.length) {
124731                         tags['closed:keepright'] = krClosed.join(';').substr(0, 255);
124732                     }
124733                 }
124734                 if (services$1.improveOSM) {
124735                     var iOsmClosed = services$1.improveOSM.getClosedIDs();
124736                     if (iOsmClosed.length) {
124737                         tags['closed:improveosm'] = iOsmClosed.join(';').substr(0, 255);
124738                     }
124739                 }
124740
124741                 // remove existing issue counts
124742                 for (var key in tags) {
124743                     if (key.match(/(^warnings:)|(^resolved:)/)) {
124744                         delete tags[key];
124745                     }
124746                 }
124747
124748                 function addIssueCounts(issues, prefix) {
124749                     var issuesByType = utilArrayGroupBy(issues, 'type');
124750                     for (var issueType in issuesByType) {
124751                         var issuesOfType = issuesByType[issueType];
124752                         if (issuesOfType[0].subtype) {
124753                             var issuesBySubtype = utilArrayGroupBy(issuesOfType, 'subtype');
124754                             for (var issueSubtype in issuesBySubtype) {
124755                                 var issuesOfSubtype = issuesBySubtype[issueSubtype];
124756                                 tags[prefix + ':' + issueType + ':' + issueSubtype] = issuesOfSubtype.length.toString().substr(0, 255);
124757                             }
124758                         } else {
124759                             tags[prefix + ':' + issueType] = issuesOfType.length.toString().substr(0, 255);
124760                         }
124761                     }
124762                 }
124763
124764                 // add counts of warnings generated by the user's edits
124765                 var warnings = context.validator()
124766                     .getIssuesBySeverity({ what: 'edited', where: 'all', includeIgnored: true, includeDisabledRules: true }).warning;
124767                 addIssueCounts(warnings, 'warnings');
124768
124769                 // add counts of issues resolved by the user's edits
124770                 var resolvedIssues = context.validator().getResolvedIssues();
124771                 addIssueCounts(resolvedIssues, 'resolved');
124772
124773                 _changeset$1 = _changeset$1.update({ tags: tags });
124774
124775                 var header = selection.selectAll('.header')
124776                     .data([0]);
124777
124778                 var headerTitle = header.enter()
124779                     .append('div')
124780                     .attr('class', 'header fillL header-container');
124781
124782                 headerTitle
124783                     .append('div')
124784                     .attr('class', 'header-block header-block-outer');
124785
124786                 headerTitle
124787                     .append('div')
124788                     .attr('class', 'header-block')
124789                     .append('h3')
124790                     .text(t('commit.title'));
124791
124792                 headerTitle
124793                     .append('div')
124794                     .attr('class', 'header-block header-block-outer header-block-close')
124795                     .append('button')
124796                     .attr('class', 'close')
124797                     .on('click', function() { context.enter(modeBrowse(context)); })
124798                     .call(svgIcon('#iD-icon-close'));
124799
124800                 var body = selection.selectAll('.body')
124801                     .data([0]);
124802
124803                 body = body.enter()
124804                     .append('div')
124805                     .attr('class', 'body')
124806                     .merge(body);
124807
124808
124809                 // Changeset Section
124810                 var changesetSection = body.selectAll('.changeset-editor')
124811                     .data([0]);
124812
124813                 changesetSection = changesetSection.enter()
124814                     .append('div')
124815                     .attr('class', 'modal-section changeset-editor')
124816                     .merge(changesetSection);
124817
124818                 changesetSection
124819                     .call(changesetEditor
124820                         .changesetID(_changeset$1.id)
124821                         .tags(tags)
124822                     );
124823
124824
124825                 // Warnings
124826                 body.call(commitWarnings);
124827
124828
124829                 // Upload Explanation
124830                 var saveSection = body.selectAll('.save-section')
124831                     .data([0]);
124832
124833                 saveSection = saveSection.enter()
124834                     .append('div')
124835                     .attr('class','modal-section save-section fillL cf')
124836                     .merge(saveSection);
124837
124838                 var prose = saveSection.selectAll('.commit-info')
124839                     .data([0]);
124840
124841                 if (prose.enter().size()) {   // first time, make sure to update user details in prose
124842                     _userDetails = null;
124843                 }
124844
124845                 prose = prose.enter()
124846                     .append('p')
124847                     .attr('class', 'commit-info')
124848                     .text(t('commit.upload_explanation'))
124849                     .merge(prose);
124850
124851                 // always check if this has changed, but only update prose.html()
124852                 // if needed, because it can trigger a style recalculation
124853                 osm.userDetails(function(err, user) {
124854                     if (err) { return; }
124855
124856                     if (_userDetails === user) { return; }  // no change
124857                     _userDetails = user;
124858
124859                     var userLink = d3_select(document.createElement('div'));
124860
124861                     if (user.image_url) {
124862                         userLink
124863                             .append('img')
124864                             .attr('src', user.image_url)
124865                             .attr('class', 'icon pre-text user-icon');
124866                     }
124867
124868                     userLink
124869                         .append('a')
124870                         .attr('class', 'user-info')
124871                         .text(user.display_name)
124872                         .attr('href', osm.userURL(user.display_name))
124873                         .attr('target', '_blank');
124874
124875                     prose
124876                         .html(t('commit.upload_explanation_with_user', { user: userLink.html() }));
124877                 });
124878
124879
124880                 // Request Review
124881                 var requestReview = saveSection.selectAll('.request-review')
124882                     .data([0]);
124883
124884                 // Enter
124885                 var requestReviewEnter = requestReview.enter()
124886                     .append('div')
124887                     .attr('class', 'request-review');
124888
124889                 var labelEnter = requestReviewEnter
124890                     .append('label')
124891                     .attr('for', 'commit-input-request-review');
124892
124893                 labelEnter
124894                     .append('input')
124895                     .attr('type', 'checkbox')
124896                     .attr('id', 'commit-input-request-review');
124897
124898                 labelEnter
124899                     .append('span')
124900                     .text(t('commit.request_review'));
124901
124902                 // Update
124903                 requestReview = requestReview
124904                     .merge(requestReviewEnter);
124905
124906                 var requestReviewInput = requestReview.selectAll('input')
124907                     .property('checked', isReviewRequested(_changeset$1.tags))
124908                     .on('change', toggleRequestReview);
124909
124910
124911                 // Buttons
124912                 var buttonSection = saveSection.selectAll('.buttons')
124913                     .data([0]);
124914
124915                 // enter
124916                 var buttonEnter = buttonSection.enter()
124917                     .append('div')
124918                     .attr('class', 'buttons fillL cf');
124919
124920                 buttonEnter
124921                     .append('button')
124922                     .attr('class', 'secondary-action button cancel-button')
124923                     .append('span')
124924                     .attr('class', 'label')
124925                     .text(t('commit.cancel'));
124926
124927                 var uploadButton = buttonEnter
124928                     .append('button')
124929                     .attr('class', 'action button save-button');
124930
124931                 uploadButton.append('span')
124932                     .attr('class', 'label')
124933                     .text(t('commit.save'));
124934
124935                 var uploadBlockerTooltipText = getUploadBlockerMessage();
124936
124937                 // update
124938                 buttonSection = buttonSection
124939                     .merge(buttonEnter);
124940
124941                 buttonSection.selectAll('.cancel-button')
124942                     .on('click.cancel', function() {
124943                         var selectedID = commitChanges.entityID();
124944                         dispatch$1.call('cancel', this, selectedID);
124945                     });
124946
124947                 buttonSection.selectAll('.save-button')
124948                     .classed('disabled', uploadBlockerTooltipText !== null)
124949                     .on('click.save', function() {
124950                         if (!d3_select(this).classed('disabled')) {
124951                             this.blur();    // avoid keeping focus on the button - #4641
124952                             dispatch$1.call('save', this, _changeset$1);
124953                         }
124954                     });
124955
124956                 // remove any existing tooltip
124957                 tooltip().destroyAny(buttonSection.selectAll('.save-button'));
124958
124959                 if (uploadBlockerTooltipText) {
124960                     buttonSection.selectAll('.save-button')
124961                         .call(tooltip().title(uploadBlockerTooltipText).placement('top'));
124962                 }
124963
124964                 // Raw Tag Editor
124965                 var tagSection = body.selectAll('.tag-section.raw-tag-editor')
124966                     .data([0]);
124967
124968                 tagSection = tagSection.enter()
124969                     .append('div')
124970                     .attr('class', 'modal-section tag-section raw-tag-editor')
124971                     .merge(tagSection);
124972
124973                 var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
124974                 tagSection
124975                     .call(rawTagEditor
124976                         .expanded(expanded)
124977                         .readOnlyTags(readOnlyTags)
124978                         .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
124979                     );
124980
124981
124982                 // Change summary
124983                 body.call(commitChanges);
124984
124985
124986                 function toggleRequestReview() {
124987                     var rr = requestReviewInput.property('checked');
124988                     updateChangeset({ review_requested: (rr ? 'yes' : undefined) });
124989
124990                     var expanded = !tagSection.selectAll('a.hide-toggle.expanded').empty();
124991                     tagSection
124992                         .call(rawTagEditor
124993                             .expanded(expanded)
124994                             .readOnlyTags(readOnlyTags)
124995                             .tags(Object.assign({}, _changeset$1.tags))   // shallow copy
124996                         );
124997                 }
124998             }
124999
125000
125001             function getUploadBlockerMessage() {
125002                 var errors = context.validator()
125003                     .getIssuesBySeverity({ what: 'edited', where: 'all' }).error;
125004
125005                 if (errors.length) {
125006                     return t('commit.outstanding_errors_message', { count: errors.length });
125007
125008                 } else {
125009                     var n = d3_select('#preset-input-comment').node();
125010                     var hasChangesetComment = n && n.value.length > 0;
125011                     if (!hasChangesetComment) {
125012                         return t('commit.comment_needed_message');
125013                     }
125014                 }
125015                 return null;
125016             }
125017
125018
125019             function changeTags(changed, onInput) {
125020                 if (changed.hasOwnProperty('comment')) {
125021                     if (changed.comment === undefined) {
125022                         changed.comment = '';
125023                     }
125024                     if (!onInput) {
125025                         context.storage('comment', changed.comment);
125026                         context.storage('commentDate', Date.now());
125027                     }
125028                 }
125029                 if (changed.hasOwnProperty('source')) {
125030                     if (changed.source === undefined) {
125031                         context.storage('source', null);
125032                     } else if (!onInput) {
125033                         context.storage('source', changed.source);
125034                         context.storage('commentDate', Date.now());
125035                     }
125036                 }
125037
125038                 updateChangeset(changed, onInput);
125039
125040                 if (_selection) {
125041                     _selection.call(commit);
125042                 }
125043             }
125044
125045
125046             function findHashtags(tags, commentOnly) {
125047                 var detectedHashtags = commentHashtags();
125048
125049                 if (detectedHashtags.length) {
125050                     // always remove stored hashtags if there are hashtags in the comment - #4304
125051                     context.storage('hashtags', null);
125052                 }
125053                 if (!detectedHashtags.length || !commentOnly) {
125054                     detectedHashtags = detectedHashtags.concat(hashtagHashtags());
125055                 }
125056
125057                 var allLowerCase = new Set();
125058                 return detectedHashtags.filter(function(hashtag) {
125059                     // Compare tags as lowercase strings, but keep original case tags
125060                     var lowerCase = hashtag.toLowerCase();
125061                     if (!allLowerCase.has(lowerCase)) {
125062                         allLowerCase.add(lowerCase);
125063                         return true;
125064                     }
125065                     return false;
125066                 });
125067
125068                 // Extract hashtags from `comment`
125069                 function commentHashtags() {
125070                     var matches = (tags.comment || '')
125071                         .replace(/http\S*/g, '')  // drop anything that looks like a URL - #4289
125072                         .match(hashtagRegex);
125073
125074                     return matches || [];
125075                 }
125076
125077                 // Extract and clean hashtags from `hashtags`
125078                 function hashtagHashtags() {
125079                     var matches = (tags.hashtags || '')
125080                         .split(/[,;\s]+/)
125081                         .map(function (s) {
125082                             if (s[0] !== '#') { s = '#' + s; }    // prepend '#'
125083                             var matched = s.match(hashtagRegex);
125084                             return matched && matched[0];
125085                         }).filter(Boolean);                       // exclude falsy
125086
125087                     return matches || [];
125088                 }
125089             }
125090
125091
125092             function isReviewRequested(tags) {
125093                 var rr = tags.review_requested;
125094                 if (rr === undefined) { return false; }
125095                 rr = rr.trim().toLowerCase();
125096                 return !(rr === '' || rr === 'no');
125097             }
125098
125099
125100             function updateChangeset(changed, onInput) {
125101                 var tags = Object.assign({}, _changeset$1.tags);   // shallow copy
125102
125103                 Object.keys(changed).forEach(function(k) {
125104                     var v = changed[k];
125105                     k = k.trim().substr(0, 255);
125106                     if (readOnlyTags.indexOf(k) !== -1) { return; }
125107
125108                     if (k !== '' && v !== undefined) {
125109                         if (onInput) {
125110                             tags[k] = v;
125111                         } else {
125112                             tags[k] = v.trim().substr(0, 255);
125113                         }
125114                     } else {
125115                         delete tags[k];
125116                     }
125117                 });
125118
125119                 if (!onInput) {
125120                     // when changing the comment, override hashtags with any found in comment.
125121                     var commentOnly = changed.hasOwnProperty('comment') && (changed.comment !== '');
125122                     var arr = findHashtags(tags, commentOnly);
125123                     if (arr.length) {
125124                         tags.hashtags = arr.join(';').substr(0, 255);
125125                         context.storage('hashtags', tags.hashtags);
125126                     } else {
125127                         delete tags.hashtags;
125128                         context.storage('hashtags', null);
125129                     }
125130                 }
125131
125132                 // always update userdetails, just in case user reauthenticates as someone else
125133                 if (_userDetails && _userDetails.changesets_count !== undefined) {
125134                     var changesetsCount = parseInt(_userDetails.changesets_count, 10) + 1;  // #4283
125135                     tags.changesets_count = String(changesetsCount);
125136
125137                     // first 100 edits - new user
125138                     if (changesetsCount <= 100) {
125139                         var s;
125140                         s = context.storage('walkthrough_completed');
125141                         if (s) {
125142                             tags['ideditor:walkthrough_completed'] = s;
125143                         }
125144
125145                         s = context.storage('walkthrough_progress');
125146                         if (s) {
125147                             tags['ideditor:walkthrough_progress'] = s;
125148                         }
125149
125150                         s = context.storage('walkthrough_started');
125151                         if (s) {
125152                             tags['ideditor:walkthrough_started'] = s;
125153                         }
125154                     }
125155                 } else {
125156                     delete tags.changesets_count;
125157                 }
125158
125159                 if (!fastDeepEqual(_changeset$1.tags, tags)) {
125160                     _changeset$1 = _changeset$1.update({ tags: tags });
125161                 }
125162             }
125163
125164
125165             commit.reset = function() {
125166                 _changeset$1 = null;
125167             };
125168
125169
125170             return utilRebind(commit, dispatch$1, 'on');
125171         }
125172
125173         function uiSuccess(context) {
125174           var arguments$1 = arguments;
125175
125176           var MAXEVENTS = 2;
125177           var detected = utilDetect();
125178           var dispatch$1 = dispatch('cancel');
125179           var _changeset;
125180           var _location;
125181
125182
125183           // string-to-date parsing in JavaScript is weird
125184           function parseEventDate(when) {
125185             if (!when) { return; }
125186
125187             var raw = when.trim();
125188             if (!raw) { return; }
125189
125190             if (!/Z$/.test(raw)) {   // if no trailing 'Z', add one
125191               raw += 'Z';            // this forces date to be parsed as a UTC date
125192             }
125193
125194             var parsed = new Date(raw);
125195             return new Date(parsed.toUTCString().substr(0, 25));  // convert to local timezone
125196           }
125197
125198
125199           function success(selection) {
125200             var header = selection
125201               .append('div')
125202               .attr('class', 'header fillL');
125203
125204             header
125205               .append('button')
125206               .attr('class', 'fr')
125207               .on('click', function () { return dispatch$1.call('cancel'); })
125208               .call(svgIcon('#iD-icon-close'));
125209
125210             header
125211               .append('h3')
125212               .text(t('success.just_edited'));
125213
125214             var body = selection
125215               .append('div')
125216               .attr('class', 'body save-success fillL');
125217
125218             var summary = body
125219               .append('div')
125220               .attr('class', 'save-summary');
125221
125222             summary
125223               .append('h3')
125224               .text(t('success.thank_you' + (_location ? '_location' : ''), { where: _location }));
125225
125226             summary
125227               .append('p')
125228               .text(t('success.help_html'))
125229               .append('a')
125230               .attr('class', 'link-out')
125231               .attr('target', '_blank')
125232               .attr('tabindex', -1)
125233               .attr('href', t('success.help_link_url'))
125234               .call(svgIcon('#iD-icon-out-link', 'inline'))
125235               .append('span')
125236               .text(t('success.help_link_text'));
125237
125238             var osm = context.connection();
125239             if (!osm) { return; }
125240
125241             var changesetURL = osm.changesetURL(_changeset.id);
125242
125243             var table = summary
125244               .append('table')
125245               .attr('class', 'summary-table');
125246
125247             var row = table
125248               .append('tr')
125249               .attr('class', 'summary-row');
125250
125251             row
125252               .append('td')
125253               .attr('class', 'cell-icon summary-icon')
125254               .append('a')
125255               .attr('target', '_blank')
125256               .attr('href', changesetURL)
125257               .append('svg')
125258               .attr('class', 'logo-small')
125259               .append('use')
125260               .attr('xlink:href', '#iD-logo-osm');
125261
125262             var summaryDetail = row
125263               .append('td')
125264               .attr('class', 'cell-detail summary-detail');
125265
125266             summaryDetail
125267               .append('a')
125268               .attr('class', 'cell-detail summary-view-on-osm')
125269               .attr('target', '_blank')
125270               .attr('href', changesetURL)
125271               .text(t('success.view_on_osm'));
125272
125273             summaryDetail
125274               .append('div')
125275               .html(t('success.changeset_id', {
125276                 changeset_id: ("<a href=\"" + changesetURL + "\" target=\"_blank\">" + (_changeset.id) + "</a>")
125277               }));
125278
125279
125280             // Get community index features intersecting the map..
125281             var communities = [];
125282             var properties = data.community.query(context.map().center(), true) || [];
125283
125284             // Gather the communities from the result
125285             properties.forEach(function (props) {
125286               var resourceIDs = Array.from(props.resourceIDs);
125287               resourceIDs.forEach(function (resourceID) {
125288                 var resource = data.community.resources[resourceID];
125289                 communities.push({
125290                   area: props.area || Infinity,
125291                   order: resource.order || 0,
125292                   resource: resource
125293                 });
125294               });
125295             });
125296
125297             // sort communities by feature area ascending, community order descending
125298             communities.sort(function (a, b) { return a.area - b.area || b.order - a.order; });
125299
125300             body
125301               .call(showCommunityLinks, communities.map(function (c) { return c.resource; }));
125302           }
125303
125304
125305           function showCommunityLinks(selection, resources) {
125306             var communityLinks = selection
125307               .append('div')
125308               .attr('class', 'save-communityLinks');
125309
125310             communityLinks
125311               .append('h3')
125312               .text(t('success.like_osm'));
125313
125314             var table = communityLinks
125315               .append('table')
125316               .attr('class', 'community-table');
125317
125318             var row = table.selectAll('.community-row')
125319               .data(resources);
125320
125321             var rowEnter = row.enter()
125322               .append('tr')
125323               .attr('class', 'community-row');
125324
125325             rowEnter
125326               .append('td')
125327               .attr('class', 'cell-icon community-icon')
125328               .append('a')
125329               .attr('target', '_blank')
125330               .attr('href', function (d) { return d.url; })
125331               .append('svg')
125332               .attr('class', 'logo-small')
125333               .append('use')
125334               .attr('xlink:href', function (d) { return ("#community-" + (d.type)); });
125335
125336             var communityDetail = rowEnter
125337               .append('td')
125338               .attr('class', 'cell-detail community-detail');
125339
125340             communityDetail
125341               .each(showCommunityDetails);
125342
125343             communityLinks
125344               .append('div')
125345               .attr('class', 'community-missing')
125346               .text(t('success.missing'))
125347               .append('a')
125348               .attr('class', 'link-out')
125349               .attr('target', '_blank')
125350               .attr('tabindex', -1)
125351               .call(svgIcon('#iD-icon-out-link', 'inline'))
125352               .attr('href', 'https://github.com/osmlab/osm-community-index/issues')
125353               .append('span')
125354               .text(t('success.tell_us'));
125355           }
125356
125357
125358           function showCommunityDetails(d) {
125359             var selection = d3_select(this);
125360             var communityID = d.id;
125361             var replacements = {
125362               url: linkify(d.url),
125363               signupUrl: linkify(d.signupUrl || d.url)
125364             };
125365
125366             selection
125367               .append('div')
125368               .attr('class', 'community-name')
125369               .append('a')
125370               .attr('target', '_blank')
125371               .attr('href', d.url)
125372               .text(t(("community." + (d.id) + ".name")));
125373
125374             var descriptionHTML = t(("community." + (d.id) + ".description"), replacements);
125375
125376             if (d.type === 'reddit') {   // linkify subreddits  #4997
125377               descriptionHTML = descriptionHTML
125378                 .replace(/(\/r\/\w*\/*)/i, function (match) { return linkify(d.url, match); });
125379             }
125380
125381             selection
125382               .append('div')
125383               .attr('class', 'community-description')
125384               .html(descriptionHTML);
125385
125386             if (d.extendedDescription || (d.languageCodes && d.languageCodes.length)) {
125387               selection
125388                 .append('div')
125389                 .call(uiDisclosure(context, ("community-more-" + (d.id)), false)
125390                   .expanded(false)
125391                   .updatePreference(false)
125392                   .title(t('success.more'))
125393                   .content(showMore)
125394                 );
125395             }
125396
125397             var nextEvents = (d.events || [])
125398               .map(function (event) {
125399                 event.date = parseEventDate(event.when);
125400                 return event;
125401               })
125402               .filter(function (event) {      // date is valid and future (or today)
125403                 var t = event.date.getTime();
125404                 var now = (new Date()).setHours(0,0,0,0);
125405                 return !isNaN(t) && t >= now;
125406               })
125407               .sort(function (a, b) {       // sort by date ascending
125408                 return a.date < b.date ? -1 : a.date > b.date ? 1 : 0;
125409               })
125410               .slice(0, MAXEVENTS);   // limit number of events shown
125411
125412             if (nextEvents.length) {
125413               selection
125414                 .append('div')
125415                 .call(uiDisclosure(context, ("community-events-" + (d.id)), false)
125416                   .expanded(false)
125417                   .updatePreference(false)
125418                   .title(t('success.events'))
125419                   .content(showNextEvents)
125420                 )
125421                 .select('.hide-toggle')
125422                 .append('span')
125423                 .attr('class', 'badge-text')
125424                 .text(nextEvents.length);
125425             }
125426
125427
125428             function showMore(selection) {
125429               var more = selection.selectAll('.community-more')
125430                 .data([0]);
125431
125432               var moreEnter = more.enter()
125433                 .append('div')
125434                 .attr('class', 'community-more');
125435
125436               if (d.extendedDescription) {
125437                 moreEnter
125438                   .append('div')
125439                   .attr('class', 'community-extended-description')
125440                   .html(t(("community." + (d.id) + ".extendedDescription"), replacements));
125441               }
125442
125443               if (d.languageCodes && d.languageCodes.length) {
125444                 var languageList = d.languageCodes
125445                   .map(function (code) { return languageName(code); })
125446                   .join(', ');
125447
125448                 moreEnter
125449                   .append('div')
125450                   .attr('class', 'community-languages')
125451                   .text(t('success.languages', { languages: languageList }));
125452               }
125453             }
125454
125455
125456             function showNextEvents(selection) {
125457               var events = selection
125458                 .append('div')
125459                 .attr('class', 'community-events');
125460
125461               var item = events.selectAll('.community-event')
125462                 .data(nextEvents);
125463
125464               var itemEnter = item.enter()
125465                 .append('div')
125466                 .attr('class', 'community-event');
125467
125468               itemEnter
125469                 .append('div')
125470                 .attr('class', 'community-event-name')
125471                 .append('a')
125472                 .attr('target', '_blank')
125473                 .attr('href', function (d) { return d.url; })
125474                 .text(function (d) {
125475                   var name = d.name;
125476                   if (d.i18n && d.id) {
125477                     name = t(("community." + communityID + ".events." + (d.id) + ".name"), { default: name });
125478                   }
125479                   return name;
125480                 });
125481
125482               itemEnter
125483                 .append('div')
125484                 .attr('class', 'community-event-when')
125485                 .text(function (d) {
125486                   var options = { weekday: 'short', day: 'numeric', month: 'short', year: 'numeric' };
125487                   if (d.date.getHours() || d.date.getMinutes()) {   // include time if it has one
125488                     options.hour = 'numeric';
125489                     options.minute = 'numeric';
125490                   }
125491                   return d.date.toLocaleString(detected.locale, options);
125492                 });
125493
125494               itemEnter
125495                 .append('div')
125496                 .attr('class', 'community-event-where')
125497                 .text(function (d) {
125498                   var where = d.where;
125499                   if (d.i18n && d.id) {
125500                     where = t(("community." + communityID + ".events." + (d.id) + ".where"), { default: where });
125501                   }
125502                   return where;
125503                 });
125504
125505               itemEnter
125506                 .append('div')
125507                 .attr('class', 'community-event-description')
125508                 .text(function (d) {
125509                   var description = d.description;
125510                   if (d.i18n && d.id) {
125511                     description = t(("community." + communityID + ".events." + (d.id) + ".description"), { default: description });
125512                   }
125513                   return description;
125514                 });
125515             }
125516
125517
125518             function linkify(url, text) {
125519               text = text || url;
125520               return ("<a target=\"_blank\" href=\"" + url + "\">" + text + "</a>");
125521             }
125522           }
125523
125524
125525           success.changeset = function (val) {
125526             if (!arguments$1.length) { return _changeset; }
125527             _changeset = val;
125528             return success;
125529           };
125530
125531
125532           success.location = function (val) {
125533             if (!arguments$1.length) { return _location; }
125534             _location = val;
125535             return success;
125536           };
125537
125538
125539           return utilRebind(success, dispatch$1, 'on');
125540         }
125541
125542         var _isSaving = false;
125543
125544
125545         function modeSave(context) {
125546             var mode = { id: 'save' };
125547             var keybinding = utilKeybinding('modeSave');
125548
125549             var loading = uiLoading(context)
125550                 .message(t('save.uploading'))
125551                 .blocking(true);
125552
125553             var commit = uiCommit(context)
125554                 .on('cancel', cancel)
125555                 .on('save', save);
125556
125557             var _toCheck = [];
125558             var _toLoad = [];
125559             var _loaded = {};
125560             var _toLoadCount = 0;
125561             var _toLoadTotal = 0;
125562
125563             var _conflicts = [];
125564             var _errors = [];
125565             var _origChanges;
125566             var _location;
125567
125568
125569             function cancel(selectedID) {
125570                 if (selectedID) {
125571                     context.enter(modeSelect(context, [selectedID]));
125572                 } else {
125573                     context.enter(modeBrowse(context));
125574                 }
125575             }
125576
125577
125578             function save(changeset, tryAgain, checkConflicts) {
125579                 // Guard against accidentally entering save code twice - #4641
125580                 if (_isSaving && !tryAgain) {
125581                     return;
125582                 }
125583
125584                 var osm = context.connection();
125585                 if (!osm) {
125586                     cancel();
125587                     return;
125588                 }
125589
125590                 // If user somehow got logged out mid-save, try to reauthenticate..
125591                 // This can happen if they were logged in from before, but the tokens are no longer valid.
125592                 if (!osm.authenticated()) {
125593                     osm.authenticate(function(err) {
125594                         if (err) {
125595                             cancel();   // quit save mode..
125596                         } else {
125597                             save(changeset, tryAgain, checkConflicts);  // continue where we left off..
125598                         }
125599                     });
125600                     return;
125601                 }
125602
125603                 if (!_isSaving) {
125604                     keybindingOff();
125605                     context.container().call(loading);  // block input
125606                     _isSaving = true;
125607                 }
125608
125609                 var history = context.history();
125610                 var localGraph = context.graph();
125611                 var remoteGraph = coreGraph(history.base(), true);
125612
125613                 _conflicts = [];
125614                 _errors = [];
125615
125616                 // Store original changes, in case user wants to download them as an .osc file
125617                 _origChanges = history.changes(actionDiscardTags(history.difference()));
125618
125619                 // First time, `history.perform` a no-op action.
125620                 // Any conflict resolutions will be done as `history.replace`
125621                 if (!tryAgain) {
125622                     history.perform(actionNoop());
125623                 }
125624
125625                 // Attempt a fast upload.. If there are conflicts, re-enter with `checkConflicts = true`
125626                 if (!checkConflicts) {
125627                     upload(changeset);
125628
125629                 // Do the full (slow) conflict check..
125630                 } else {
125631                     var summary = history.difference().summary();
125632                     _toCheck = [];
125633                     for (var i = 0; i < summary.length; i++) {
125634                         var item = summary[i];
125635                         if (item.changeType === 'modified') {
125636                             _toCheck.push(item.entity.id);
125637                         }
125638                     }
125639
125640                     _toLoad = withChildNodes(_toCheck, localGraph);
125641                     _loaded = {};
125642                     _toLoadCount = 0;
125643                     _toLoadTotal = _toLoad.length;
125644
125645                     if (_toCheck.length) {
125646                         showProgress(_toLoadCount, _toLoadTotal);
125647                         _toLoad.forEach(function(id) { _loaded[id] = false; });
125648                         osm.loadMultiple(_toLoad, loaded);
125649                     } else {
125650                         upload(changeset);
125651                     }
125652                 }
125653
125654                 return;
125655
125656
125657                 function withChildNodes(ids, graph) {
125658                     var s = new Set(ids);
125659                     ids.forEach(function(id) {
125660                         var entity = graph.entity(id);
125661                         if (entity.type !== 'way') { return; }
125662
125663                         graph.childNodes(entity).forEach(function(child) {
125664                             if (child.version !== undefined) {
125665                                 s.add(child.id);
125666                             }
125667                         });
125668                     });
125669
125670                     return Array.from(s);
125671                 }
125672
125673
125674                 // Reload modified entities into an alternate graph and check for conflicts..
125675                 function loaded(err, result) {
125676                     if (_errors.length) { return; }
125677
125678                     if (err) {
125679                         _errors.push({
125680                             msg: err.message || err.responseText,
125681                             details: [ t('save.status_code', { code: err.status }) ]
125682                         });
125683                         showErrors();
125684
125685                     } else {
125686                         var loadMore = [];
125687
125688                         result.data.forEach(function(entity) {
125689                             remoteGraph.replace(entity);
125690                             _loaded[entity.id] = true;
125691                             _toLoad = _toLoad.filter(function(val) { return val !== entity.id; });
125692
125693                             if (!entity.visible) { return; }
125694
125695                             // Because loadMultiple doesn't download /full like loadEntity,
125696                             // need to also load children that aren't already being checked..
125697                             var i, id;
125698                             if (entity.type === 'way') {
125699                                 for (i = 0; i < entity.nodes.length; i++) {
125700                                     id = entity.nodes[i];
125701                                     if (_loaded[id] === undefined) {
125702                                         _loaded[id] = false;
125703                                         loadMore.push(id);
125704                                     }
125705                                 }
125706                             } else if (entity.type === 'relation' && entity.isMultipolygon()) {
125707                                 for (i = 0; i < entity.members.length; i++) {
125708                                     id = entity.members[i].id;
125709                                     if (_loaded[id] === undefined) {
125710                                         _loaded[id] = false;
125711                                         loadMore.push(id);
125712                                     }
125713                                 }
125714                             }
125715                         });
125716
125717                         _toLoadCount += result.data.length;
125718                         _toLoadTotal += loadMore.length;
125719                         showProgress(_toLoadCount, _toLoadTotal);
125720
125721                         if (loadMore.length) {
125722                             _toLoad.push.apply(_toLoad, loadMore);
125723                             osm.loadMultiple(loadMore, loaded);
125724                         }
125725
125726                         if (!_toLoad.length) {
125727                             detectConflicts();
125728                         }
125729                     }
125730                 }
125731
125732
125733                 function detectConflicts() {
125734                     function choice(id, text, action) {
125735                         return { id: id, text: text, action: function() { history.replace(action); } };
125736                     }
125737                     function formatUser(d) {
125738                         return '<a href="' + osm.userURL(d) + '" target="_blank">' + d + '</a>';
125739                     }
125740                     function entityName(entity) {
125741                         return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
125742                     }
125743
125744                     function sameVersions(local, remote) {
125745                         if (local.version !== remote.version) { return false; }
125746
125747                         if (local.type === 'way') {
125748                             var children = utilArrayUnion(local.nodes, remote.nodes);
125749                             for (var i = 0; i < children.length; i++) {
125750                                 var a = localGraph.hasEntity(children[i]);
125751                                 var b = remoteGraph.hasEntity(children[i]);
125752                                 if (a && b && a.version !== b.version) { return false; }
125753                             }
125754                         }
125755
125756                         return true;
125757                     }
125758
125759                     _toCheck.forEach(function(id) {
125760                         var local = localGraph.entity(id);
125761                         var remote = remoteGraph.entity(id);
125762
125763                         if (sameVersions(local, remote)) { return; }
125764
125765                         var action = actionMergeRemoteChanges;
125766                         var merge = action(id, localGraph, remoteGraph, formatUser);
125767
125768                         history.replace(merge);
125769
125770                         var mergeConflicts = merge.conflicts();
125771                         if (!mergeConflicts.length) { return; }  // merged safely
125772
125773                         var forceLocal = action(id, localGraph, remoteGraph).withOption('force_local');
125774                         var forceRemote = action(id, localGraph, remoteGraph).withOption('force_remote');
125775                         var keepMine = t('save.conflict.' + (remote.visible ? 'keep_local' : 'restore'));
125776                         var keepTheirs = t('save.conflict.' + (remote.visible ? 'keep_remote' : 'delete'));
125777
125778                         _conflicts.push({
125779                             id: id,
125780                             name: entityName(local),
125781                             details: mergeConflicts,
125782                             chosen: 1,
125783                             choices: [
125784                                 choice(id, keepMine, forceLocal),
125785                                 choice(id, keepTheirs, forceRemote)
125786                             ]
125787                         });
125788                     });
125789
125790                     upload(changeset);
125791                 }
125792             }
125793
125794
125795             function upload(changeset) {
125796                 var osm = context.connection();
125797                 if (!osm) {
125798                     _errors.push({ msg: 'No OSM Service' });
125799                 }
125800
125801                 if (_conflicts.length) {
125802                     _conflicts.sort(function(a, b) { return b.id.localeCompare(a.id); });
125803                     showConflicts(changeset);
125804
125805                 } else if (_errors.length) {
125806                     showErrors();
125807
125808                 } else {
125809                     var history = context.history();
125810                     var changes = history.changes(actionDiscardTags(history.difference()));
125811                     if (changes.modified.length || changes.created.length || changes.deleted.length) {
125812                         loadLocation();  // so it is ready when we display the save screen
125813                         osm.putChangeset(changeset, changes, uploadCallback);
125814                     } else {        // changes were insignificant or reverted by user
125815                         d3_select('.inspector-wrap *').remove();
125816                         loading.close();
125817                         _isSaving = false;
125818                         context.flush();
125819                         cancel();
125820                     }
125821                 }
125822             }
125823
125824
125825             function uploadCallback(err, changeset) {
125826                 if (err) {
125827                     if (err.status === 409) {          // 409 Conflict
125828                         save(changeset, true, true);   // tryAgain = true, checkConflicts = true
125829                     } else {
125830                         _errors.push({
125831                             msg: err.message || err.responseText,
125832                             details: [ t('save.status_code', { code: err.status }) ]
125833                         });
125834                         showErrors();
125835                     }
125836
125837                 } else {
125838                     context.history().clearSaved();
125839                     success(changeset);
125840                     // Add delay to allow for postgres replication #1646 #2678
125841                     window.setTimeout(function() {
125842                         d3_select('.inspector-wrap *').remove();
125843                         loading.close();
125844                         _isSaving = false;
125845                         context.flush();
125846                     }, 2500);
125847                 }
125848             }
125849
125850
125851             function showProgress(num, total) {
125852                 var modal = context.container().select('.loading-modal .modal-section');
125853                 var progress = modal.selectAll('.progress')
125854                     .data([0]);
125855
125856                 // enter/update
125857                 progress.enter()
125858                     .append('div')
125859                     .attr('class', 'progress')
125860                     .merge(progress)
125861                     .text(t('save.conflict_progress', { num: num, total: total }));
125862             }
125863
125864
125865             function showConflicts(changeset) {
125866                 var history = context.history();
125867                 var selection = context.container()
125868                     .select('#sidebar')
125869                     .append('div')
125870                     .attr('class','sidebar-component');
125871
125872                 loading.close();
125873                 _isSaving = false;
125874
125875                 var ui = uiConflicts(context)
125876                     .conflictList(_conflicts)
125877                     .origChanges(_origChanges)
125878                     .on('cancel', function() {
125879                         history.pop();
125880                         selection.remove();
125881                         keybindingOn();
125882                     })
125883                     .on('save', function() {
125884                         for (var i = 0; i < _conflicts.length; i++) {
125885                             if (_conflicts[i].chosen === 1) {  // user chose "keep theirs"
125886                                 var entity = context.hasEntity(_conflicts[i].id);
125887                                 if (entity && entity.type === 'way') {
125888                                     var children = utilArrayUniq(entity.nodes);
125889                                     for (var j = 0; j < children.length; j++) {
125890                                         history.replace(actionRevert(children[j]));
125891                                     }
125892                                 }
125893                                 history.replace(actionRevert(_conflicts[i].id));
125894                             }
125895                         }
125896
125897                         selection.remove();
125898                         save(changeset, true, false);  // tryAgain = true, checkConflicts = false
125899                     });
125900
125901                 selection.call(ui);
125902             }
125903
125904
125905             function showErrors() {
125906                 keybindingOn();
125907                 context.history().pop();
125908                 loading.close();
125909                 _isSaving = false;
125910
125911                 var selection = uiConfirm(context.container());
125912                 selection
125913                     .select('.modal-section.header')
125914                     .append('h3')
125915                     .text(t('save.error'));
125916
125917                 addErrors(selection, _errors);
125918                 selection.okButton();
125919             }
125920
125921
125922             function addErrors(selection, data) {
125923                 var message = selection
125924                     .select('.modal-section.message-text');
125925
125926                 var items = message
125927                     .selectAll('.error-container')
125928                     .data(data);
125929
125930                 var enter = items.enter()
125931                     .append('div')
125932                     .attr('class', 'error-container');
125933
125934                 enter
125935                     .append('a')
125936                     .attr('class', 'error-description')
125937                     .attr('href', '#')
125938                     .classed('hide-toggle', true)
125939                     .text(function(d) { return d.msg || t('save.unknown_error_details'); })
125940                     .on('click', function() {
125941                         event.preventDefault();
125942
125943                         var error = d3_select(this);
125944                         var detail = d3_select(this.nextElementSibling);
125945                         var exp = error.classed('expanded');
125946
125947                         detail.style('display', exp ? 'none' : 'block');
125948                         error.classed('expanded', !exp);
125949                     });
125950
125951                 var details = enter
125952                     .append('div')
125953                     .attr('class', 'error-detail-container')
125954                     .style('display', 'none');
125955
125956                 details
125957                     .append('ul')
125958                     .attr('class', 'error-detail-list')
125959                     .selectAll('li')
125960                     .data(function(d) { return d.details || []; })
125961                     .enter()
125962                     .append('li')
125963                     .attr('class', 'error-detail-item')
125964                     .text(function(d) { return d; });
125965
125966                 items.exit()
125967                     .remove();
125968             }
125969
125970
125971             function success(changeset) {
125972                 commit.reset();
125973
125974                 var ui = uiSuccess(context)
125975                     .changeset(changeset)
125976                     .location(_location)
125977                     .on('cancel', function() { context.ui().sidebar.hide(); });
125978
125979                 context.enter(modeBrowse(context).sidebar(ui));
125980             }
125981
125982
125983             function keybindingOn() {
125984                 d3_select(document)
125985                     .call(keybinding.on('⎋', cancel, true));
125986             }
125987
125988
125989             function keybindingOff() {
125990                 d3_select(document)
125991                     .call(keybinding.unbind);
125992             }
125993
125994
125995             // Reverse geocode current map location so we can display a message on
125996             // the success screen like "Thank you for editing around place, region."
125997             function loadLocation() {
125998                 _location = null;
125999                 if (!services$1.geocoder) { return; }
126000
126001                 services$1.geocoder.reverse(context.map().center(), function(err, result) {
126002                     if (err || !result || !result.address) { return; }
126003
126004                     var addr = result.address;
126005                     var place = (addr && (addr.town || addr.city || addr.county)) || '';
126006                     var region = (addr && (addr.state || addr.country)) || '';
126007                     var separator = (place && region) ? t('success.thank_you_where.separator') : '';
126008
126009                     _location = t('success.thank_you_where.format',
126010                         { place: place, separator: separator, region: region }
126011                     );
126012                 });
126013             }
126014
126015
126016             mode.enter = function() {
126017                 // Show sidebar
126018                 context.ui().sidebar.expand();
126019
126020                 function done() {
126021                     context.ui().sidebar.show(commit);
126022                 }
126023
126024                 keybindingOn();
126025
126026                 context.container().selectAll('#content')
126027                     .attr('class', 'inactive');
126028
126029                 var osm = context.connection();
126030                 if (!osm) {
126031                     cancel();
126032                     return;
126033                 }
126034
126035                 if (osm.authenticated()) {
126036                     done();
126037                 } else {
126038                     osm.authenticate(function(err) {
126039                         if (err) {
126040                             cancel();
126041                         } else {
126042                             done();
126043                         }
126044                     });
126045                 }
126046             };
126047
126048
126049             mode.exit = function() {
126050                 _isSaving = false;
126051
126052                 keybindingOff();
126053
126054                 context.container().selectAll('#content')
126055                     .attr('class', 'active');
126056
126057                 context.ui().sidebar.hide();
126058             };
126059
126060             return mode;
126061         }
126062
126063         function uiToolOldDrawModes(context) {
126064
126065             var tool = {
126066                 id: 'old_modes',
126067                 label: t('toolbar.add_feature')
126068             };
126069
126070             var modes = [
126071                 modeAddPoint(context, {
126072                     title: t('modes.add_point.title'),
126073                     button: 'point',
126074                     description: t('modes.add_point.description'),
126075                     preset: context.presets().item('point'),
126076                     key: '1'
126077                 }),
126078                 modeAddLine(context, {
126079                     title: t('modes.add_line.title'),
126080                     button: 'line',
126081                     description: t('modes.add_line.description'),
126082                     preset: context.presets().item('line'),
126083                     key: '2'
126084                 }),
126085                 modeAddArea(context, {
126086                     title: t('modes.add_area.title'),
126087                     button: 'area',
126088                     description: t('modes.add_area.description'),
126089                     preset: context.presets().item('area'),
126090                     key: '3'
126091                 })
126092             ];
126093
126094
126095             function enabled() {
126096                 return osmEditable();
126097             }
126098
126099             function osmEditable() {
126100                 return context.editable();
126101             }
126102
126103             modes.forEach(function(mode) {
126104                 context.keybinding().on(mode.key, function() {
126105                     if (!enabled()) { return; }
126106
126107                     if (mode.id === context.mode().id) {
126108                         context.enter(modeBrowse(context));
126109                     } else {
126110                         context.enter(mode);
126111                     }
126112                 });
126113             });
126114
126115             tool.render = function(selection) {
126116
126117                 var wrap = selection
126118                     .append('div')
126119                     .attr('class', 'joined')
126120                     .style('display', 'flex');
126121
126122                 context
126123                     .on('enter.editor', function(entered) {
126124                         selection.selectAll('button.add-button')
126125                             .classed('active', function(mode) { return entered.button === mode.button; });
126126                         context.container()
126127                             .classed('mode-' + entered.id, true);
126128                     });
126129
126130                 context
126131                     .on('exit.editor', function(exited) {
126132                         context.container()
126133                             .classed('mode-' + exited.id, false);
126134                     });
126135
126136
126137                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
126138
126139                 context.map()
126140                     .on('move.modes', debouncedUpdate)
126141                     .on('drawn.modes', debouncedUpdate);
126142
126143                 context
126144                     .on('enter.modes', update);
126145
126146                 update();
126147
126148
126149                 function update() {
126150
126151                     var buttons = wrap.selectAll('button.add-button')
126152                         .data(modes, function(d) { return d.id; });
126153
126154                     // exit
126155                     buttons.exit()
126156                         .remove();
126157
126158                     // enter
126159                     var buttonsEnter = buttons.enter()
126160                         .append('button')
126161                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
126162                         .on('click.mode-buttons', function(d) {
126163                             if (!enabled()) { return; }
126164
126165                             // When drawing, ignore accidental clicks on mode buttons - #4042
126166                             var currMode = context.mode().id;
126167                             if (/^draw/.test(currMode)) { return; }
126168
126169                             if (d.id === currMode) {
126170                                 context.enter(modeBrowse(context));
126171                             } else {
126172                                 context.enter(d);
126173                             }
126174                         })
126175                         .call(tooltip()
126176                             .placement('bottom')
126177                             .html(true)
126178                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
126179                             .scrollContainer(d3_select('#bar'))
126180                         );
126181
126182                     buttonsEnter
126183                         .each(function(d) {
126184                             d3_select(this)
126185                                 .call(svgIcon('#iD-icon-' + d.button));
126186                         });
126187
126188                     buttonsEnter
126189                         .append('span')
126190                         .attr('class', 'label')
126191                         .text(function(mode) { return mode.title; });
126192
126193                     // if we are adding/removing the buttons, check if toolbar has overflowed
126194                     if (buttons.enter().size() || buttons.exit().size()) {
126195                         context.ui().checkOverflow('#bar', true);
126196                     }
126197
126198                     // update
126199                     buttons = buttons
126200                         .merge(buttonsEnter)
126201                         .classed('disabled', function(d) { return !enabled(); });
126202                 }
126203             };
126204
126205             return tool;
126206         }
126207
126208         function uiToolNotes(context) {
126209
126210             var tool = {
126211                 id: 'notes',
126212                 label: t('modes.add_note.label')
126213             };
126214
126215             var mode = modeAddNote(context);
126216
126217             function enabled() {
126218                 return notesEnabled() && notesEditable();
126219             }
126220
126221             function notesEnabled() {
126222                 var noteLayer = context.layers().layer('notes');
126223                 return noteLayer && noteLayer.enabled();
126224             }
126225
126226             function notesEditable() {
126227                 var mode = context.mode();
126228                 return context.map().notesEditable() && mode && mode.id !== 'save';
126229             }
126230
126231             context.keybinding().on(mode.key, function() {
126232                 if (!enabled()) { return; }
126233
126234                 if (mode.id === context.mode().id) {
126235                     context.enter(modeBrowse(context));
126236                 } else {
126237                     context.enter(mode);
126238                 }
126239             });
126240
126241             tool.render = function(selection) {
126242
126243                 context
126244                     .on('enter.editor.notes', function(entered) {
126245                         selection.selectAll('button.add-button')
126246                             .classed('active', function(mode) { return entered.button === mode.button; });
126247                         context.container()
126248                             .classed('mode-' + entered.id, true);
126249                     });
126250
126251                 context
126252                     .on('exit.editor.notes', function(exited) {
126253                         context.container()
126254                             .classed('mode-' + exited.id, false);
126255                     });
126256
126257
126258                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
126259
126260                 context.map()
126261                     .on('move.notes', debouncedUpdate)
126262                     .on('drawn.notes', debouncedUpdate);
126263
126264                 context
126265                     .on('enter.notes', update);
126266
126267                 update();
126268
126269
126270                 function update() {
126271                     var showNotes = notesEnabled();
126272                     var data = showNotes ? [mode] : [];
126273
126274                     var buttons = selection.selectAll('button.add-button')
126275                         .data(data, function(d) { return d.id; });
126276
126277                     // exit
126278                     buttons.exit()
126279                         .remove();
126280
126281                     // enter
126282                     var buttonsEnter = buttons.enter()
126283                         .append('button')
126284                         .attr('tabindex', -1)
126285                         .attr('class', function(d) { return d.id + ' add-button bar-button'; })
126286                         .on('click.notes', function(d) {
126287                             if (!enabled()) { return; }
126288
126289                             // When drawing, ignore accidental clicks on mode buttons - #4042
126290                             var currMode = context.mode().id;
126291                             if (/^draw/.test(currMode)) { return; }
126292
126293                             if (d.id === currMode) {
126294                                 context.enter(modeBrowse(context));
126295                             } else {
126296                                 context.enter(d);
126297                             }
126298                         })
126299                         .call(tooltip()
126300                             .placement('bottom')
126301                             .html(true)
126302                             .title(function(d) { return uiTooltipHtml(d.description, d.key); })
126303                             .scrollContainer(d3_select('#bar'))
126304                         );
126305
126306                     buttonsEnter
126307                         .each(function(d) {
126308                             d3_select(this)
126309                                 .call(svgIcon(d.icon || '#iD-icon-' + d.button));
126310                         });
126311
126312                     // if we are adding/removing the buttons, check if toolbar has overflowed
126313                     if (buttons.enter().size() || buttons.exit().size()) {
126314                         context.ui().checkOverflow('#bar', true);
126315                     }
126316
126317                     // update
126318                     buttons = buttons
126319                         .merge(buttonsEnter)
126320                         .classed('disabled', function(d) { return !enabled(); });
126321                 }
126322             };
126323
126324             tool.uninstall = function() {
126325                 context
126326                     .on('enter.editor.notes', null)
126327                     .on('exit.editor.notes', null)
126328                     .on('enter.notes', null);
126329
126330                 context.map()
126331                     .on('move.notes', null)
126332                     .on('drawn.notes', null);
126333             };
126334
126335             return tool;
126336         }
126337
126338         function uiToolSave(context) {
126339
126340             var tool = {
126341                 id: 'save',
126342                 label: t('save.title')
126343             };
126344
126345             var button = null;
126346             var tooltipBehavior = null;
126347             var history = context.history();
126348             var key = uiCmd('⌘S');
126349             var _numChanges = 0;
126350
126351             function isSaving() {
126352                 var mode = context.mode();
126353                 return mode && mode.id === 'save';
126354             }
126355
126356             function isDisabled() {
126357                 return _numChanges === 0 || isSaving();
126358             }
126359
126360             function save() {
126361                 event.preventDefault();
126362                 if (!context.inIntro() && !isSaving() && history.hasChanges()) {
126363                     context.enter(modeSave(context));
126364                 }
126365             }
126366
126367             function bgColor() {
126368                 var step;
126369                 if (_numChanges === 0) {
126370                     return null;
126371                 } else if (_numChanges <= 50) {
126372                     step = _numChanges / 50;
126373                     return d3_interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
126374                 } else {
126375                     step = Math.min((_numChanges - 50) / 50, 1.0);
126376                     return d3_interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
126377                 }
126378             }
126379
126380
126381             function updateCount() {
126382                 var val = history.difference().summary().length;
126383                 if (val === _numChanges) { return; }
126384                 _numChanges = val;
126385
126386                 if (tooltipBehavior) {
126387                     tooltipBehavior
126388                         .title(uiTooltipHtml(
126389                             t(_numChanges > 0 ? 'save.help' : 'save.no_changes'), key)
126390                         );
126391                 }
126392
126393                 if (button) {
126394                     button
126395                         .classed('disabled', isDisabled())
126396                         .style('background', bgColor());
126397
126398                     button.select('span.count')
126399                         .text(_numChanges);
126400                 }
126401             }
126402
126403
126404             tool.render = function(selection) {
126405                 tooltipBehavior = tooltip()
126406                     .placement('bottom')
126407                     .html(true)
126408                     .title(uiTooltipHtml(t('save.no_changes'), key))
126409                     .scrollContainer(d3_select('#bar'));
126410
126411                 button = selection
126412                     .append('button')
126413                     .attr('class', 'save disabled bar-button')
126414                     .on('click', save)
126415                     .call(tooltipBehavior);
126416
126417                 button
126418                     .call(svgIcon('#iD-icon-save'));
126419
126420                 button
126421                     .append('span')
126422                     .attr('class', 'count')
126423                     .attr('aria-hidden', 'true')
126424                     .text('0');
126425
126426                 updateCount();
126427
126428
126429                 context.keybinding()
126430                     .on(key, save, true);
126431
126432
126433                 context.history()
126434                     .on('change.save', updateCount);
126435
126436                 context
126437                     .on('enter.save', function() {
126438                         if (button) {
126439                             button
126440                                 .classed('disabled', isDisabled());
126441
126442                             if (isSaving()) {
126443                                 button.call(tooltipBehavior.hide);
126444                             }
126445                         }
126446                     });
126447             };
126448
126449
126450             tool.uninstall = function() {
126451                 context.keybinding()
126452                     .off(key, true);
126453
126454                 context.history()
126455                     .on('change.save', null);
126456
126457                 context
126458                     .on('enter.save', null);
126459
126460                 button = null;
126461                 tooltipBehavior = null;
126462             };
126463
126464             return tool;
126465         }
126466
126467         function uiToolSidebarToggle(context) {
126468
126469             var tool = {
126470                 id: 'sidebar_toggle',
126471                 label: t('toolbar.inspect')
126472             };
126473
126474             tool.render = function(selection) {
126475                 selection
126476                     .append('button')
126477                     .attr('class', 'bar-button')
126478                     .on('click', function() {
126479                         context.ui().sidebar.toggle();
126480                     })
126481                     .call(tooltip()
126482                         .placement('bottom')
126483                         .html(true)
126484                         .title(uiTooltipHtml(t('sidebar.tooltip'), t('sidebar.key')))
126485                         .scrollContainer(d3_select('#bar'))
126486                     )
126487                     .call(svgIcon('#iD-icon-sidebar-' + (textDirection === 'rtl' ? 'right' : 'left')));
126488             };
126489
126490             return tool;
126491         }
126492
126493         function uiToolUndoRedo(context) {
126494
126495             var tool = {
126496                 id: 'undo_redo',
126497                 label: t('toolbar.undo_redo')
126498             };
126499
126500             var commands = [{
126501                 id: 'undo',
126502                 cmd: uiCmd('⌘Z'),
126503                 action: function() { if (editable()) { context.undo(); } },
126504                 annotation: function() { return context.history().undoAnnotation(); }
126505             }, {
126506                 id: 'redo',
126507                 cmd: uiCmd('⌘⇧Z'),
126508                 action: function() { if (editable()) { context.redo(); } },
126509                 annotation: function() { return context.history().redoAnnotation(); }
126510             }];
126511
126512
126513             function editable() {
126514                 return context.mode() && context.mode().id !== 'save' && context.map().editableDataEnabled(true /* ignore min zoom */);
126515             }
126516
126517
126518             tool.render = function(selection) {
126519                 var tooltipBehavior = tooltip()
126520                     .placement('bottom')
126521                     .html(true)
126522                     .title(function (d) {
126523                         return uiTooltipHtml(d.annotation() ?
126524                             t(d.id + '.tooltip', {action: d.annotation()}) :
126525                             t(d.id + '.nothing'), d.cmd);
126526                     })
126527                     .scrollContainer(d3_select('#bar'));
126528
126529                 var buttons = selection.selectAll('button')
126530                     .data(commands)
126531                     .enter()
126532                     .append('button')
126533                     .attr('class', function(d) { return 'disabled ' + d.id + '-button bar-button'; })
126534                     .on('click', function(d) { return d.action(); })
126535                     .call(tooltipBehavior);
126536
126537                 buttons.each(function(d) {
126538                     var iconName = d.id;
126539                     if (textDirection === 'rtl') {
126540                         if (iconName === 'undo') {
126541                             iconName = 'redo';
126542                         } else if (iconName === 'redo') {
126543                             iconName = 'undo';
126544                         }
126545                     }
126546                     d3_select(this)
126547                         .call(svgIcon('#iD-icon-' + iconName));
126548                 });
126549
126550                 context.keybinding()
126551                     .on(commands[0].cmd, function() { event.preventDefault(); commands[0].action(); })
126552                     .on(commands[1].cmd, function() { event.preventDefault(); commands[1].action(); });
126553
126554
126555                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
126556
126557                 context.map()
126558                     .on('move.undo_redo', debouncedUpdate)
126559                     .on('drawn.undo_redo', debouncedUpdate);
126560
126561                 context.history()
126562                     .on('change.undo_redo', function(difference) {
126563                         if (difference) { update(); }
126564                     });
126565
126566                 context
126567                     .on('enter.undo_redo', update);
126568
126569
126570                 function update() {
126571                     buttons
126572                         .property('disabled', !editable())
126573                         .classed('disabled', function(d) {
126574                             return !editable() || !d.annotation();
126575                         })
126576                         .each(function() {
126577                             var selection = d3_select(this);
126578                             if (!selection.select('.tooltip.in').empty()) {
126579                                 selection.call(tooltipBehavior.updateContent);
126580                             }
126581                         });
126582                 }
126583             };
126584
126585             tool.uninstall = function() {
126586                 context.keybinding()
126587                     .off(commands[0].cmd)
126588                     .off(commands[1].cmd);
126589
126590                 context.map()
126591                     .on('move.undo_redo', null)
126592                     .on('drawn.undo_redo', null);
126593
126594                 context.history()
126595                     .on('change.undo_redo', null);
126596
126597                 context
126598                     .on('enter.undo_redo', null);
126599             };
126600
126601             return tool;
126602         }
126603
126604         function uiTopToolbar(context) {
126605
126606             var sidebarToggle = uiToolSidebarToggle(context),
126607                 modes = uiToolOldDrawModes(context),
126608                 notes = uiToolNotes(context),
126609                 undoRedo = uiToolUndoRedo(context),
126610                 save = uiToolSave(context);
126611
126612             function notesEnabled() {
126613                 var noteLayer = context.layers().layer('notes');
126614                 return noteLayer && noteLayer.enabled();
126615             }
126616
126617             function topToolbar(bar) {
126618
126619                 bar.on('wheel.topToolbar', function() {
126620                     if (!event.deltaX) {
126621                         // translate vertical scrolling into horizontal scrolling in case
126622                         // the user doesn't have an input device that can scroll horizontally
126623                         bar.node().scrollLeft += event.deltaY;
126624                     }
126625                 });
126626
126627                 var debouncedUpdate = debounce(update, 500, { leading: true, trailing: true });
126628                 context.layers()
126629                     .on('change.topToolbar', debouncedUpdate);
126630
126631                 update();
126632
126633                 function update() {
126634
126635                     var tools = [
126636                         sidebarToggle,
126637                         'spacer',
126638                         modes
126639                     ];
126640
126641                     tools.push('spacer');
126642
126643                     if (notesEnabled()) {
126644                         tools = tools.concat([notes, 'spacer']);
126645                     }
126646
126647                     tools = tools.concat([undoRedo, save]);
126648
126649                     var toolbarItems = bar.selectAll('.toolbar-item')
126650                         .data(tools, function(d) {
126651                             return d.id || d;
126652                         });
126653
126654                     toolbarItems.exit()
126655                         .each(function(d) {
126656                             if (d.uninstall) {
126657                                 d.uninstall();
126658                             }
126659                         })
126660                         .remove();
126661
126662                     var itemsEnter = toolbarItems
126663                         .enter()
126664                         .append('div')
126665                         .attr('class', function(d) {
126666                             var classes = 'toolbar-item ' + (d.id || d).replace('_', '-');
126667                             if (d.klass) { classes += ' ' + d.klass; }
126668                             return classes;
126669                         });
126670
126671                     var actionableItems = itemsEnter.filter(function(d) { return d !== 'spacer'; });
126672
126673                     actionableItems
126674                         .append('div')
126675                         .attr('class', 'item-content')
126676                         .each(function(d) {
126677                             d3_select(this).call(d.render, bar);
126678                         });
126679
126680                     actionableItems
126681                         .append('div')
126682                         .attr('class', 'item-label')
126683                         .text(function(d) {
126684                             return d.label;
126685                         });
126686                 }
126687
126688             }
126689
126690             return topToolbar;
126691         }
126692
126693         // these are module variables so they are preserved through a ui.restart()
126694         var sawVersion = null;
126695         var isNewVersion = false;
126696         var isNewUser = false;
126697
126698
126699         function uiVersion(context) {
126700
126701             var currVersion = context.version;
126702             var matchedVersion = currVersion.match(/\d+\.\d+\.\d+.*/);
126703
126704             if (sawVersion === null && matchedVersion !== null) {
126705                 isNewVersion = (context.storage('sawVersion') !== currVersion);
126706                 isNewUser = !context.storage('sawSplash');
126707                 context.storage('sawVersion', currVersion);
126708                 sawVersion = currVersion;
126709             }
126710
126711             return function(selection) {
126712                 selection
126713                     .append('a')
126714                     .attr('target', '_blank')
126715                     .attr('href', 'https://github.com/openstreetmap/iD')
126716                     .text(currVersion);
126717
126718                 // only show new version indicator to users that have used iD before
126719                 if (isNewVersion && !isNewUser) {
126720                     selection
126721                         .append('div')
126722                         .attr('class', 'badge')
126723                         .append('a')
126724                         .attr('target', '_blank')
126725                         .attr('href', 'https://github.com/openstreetmap/iD/blob/release/CHANGELOG.md#whats-new')
126726                         .call(svgIcon('#maki-gift-11'))
126727                         .call(tooltip()
126728                             .title(t('version.whats_new', { version: currVersion }))
126729                             .placement('top')
126730                         );
126731                 }
126732             };
126733         }
126734
126735         function uiZoom(context) {
126736             var zooms = [{
126737                 id: 'zoom-in',
126738                 icon: 'plus',
126739                 title: t('zoom.in'),
126740                 action: context.zoomIn,
126741                 key: '+'
126742             }, {
126743                 id: 'zoom-out',
126744                 icon: 'minus',
126745                 title: t('zoom.out'),
126746                 action: context.zoomOut,
126747                 key: '-'
126748             }];
126749
126750
126751             function zoomIn() {
126752                 event.preventDefault();
126753                 context.zoomIn();
126754             }
126755
126756
126757             function zoomOut() {
126758                 event.preventDefault();
126759                 context.zoomOut();
126760             }
126761
126762
126763             function zoomInFurther() {
126764                 event.preventDefault();
126765                 context.zoomInFurther();
126766             }
126767
126768
126769             function zoomOutFurther() {
126770                 event.preventDefault();
126771                 context.zoomOutFurther();
126772             }
126773
126774
126775             return function(selection) {
126776                 var button = selection.selectAll('button')
126777                     .data(zooms)
126778                     .enter()
126779                     .append('button')
126780                     .attr('class', function(d) { return d.id; })
126781                     .on('click.editor', function(d) {
126782                         if (!d3_select(this).classed('disabled')) {
126783                             d.action();
126784                         }
126785                     })
126786                     .call(tooltip()
126787                         .placement((textDirection === 'rtl') ? 'right' : 'left')
126788                         .html(true)
126789                         .title(function(d) {
126790                             return uiTooltipHtml(d.title, d.key);
126791                         })
126792                     );
126793
126794                 button.each(function(d) {
126795                     d3_select(this)
126796                         .call(svgIcon('#iD-icon-' + d.icon, 'light'));
126797                 });
126798
126799                 ['plus', 'ffplus', '=', 'ffequals'].forEach(function(key) {
126800                     context.keybinding().on([key], zoomIn);
126801                     context.keybinding().on([uiCmd('⌘' + key)], zoomInFurther);
126802                 });
126803
126804                 ['_', '-', 'ffminus', 'dash'].forEach(function(key) {
126805                     context.keybinding().on([key], zoomOut);
126806                     context.keybinding().on([uiCmd('⌘' + key)], zoomOutFurther);
126807                 });
126808
126809                 function updateButtonStates() {
126810                     var canZoomIn = context.map().canZoomIn();
126811                     selection.select('button.zoom-in')
126812                         .classed('disabled', !canZoomIn);
126813
126814                     var canZoomOut = context.map().canZoomOut();
126815                     selection.select('button.zoom-out')
126816                         .classed('disabled', !canZoomOut);
126817                 }
126818
126819                 updateButtonStates();
126820
126821                 context.map().on('move.uiZoom', updateButtonStates);
126822             };
126823         }
126824
126825         function uiInit(context) {
126826             var _initCounter = 0;
126827             var _initCallback;
126828             var _needWidth = {};
126829
126830
126831             function render(container) {
126832                 container
126833                     .attr('dir', textDirection);
126834
126835                 // setup fullscreen keybindings (no button shown at this time)
126836                 container
126837                     .call(uiFullScreen(context));
126838
126839                 var map = context.map();
126840                 map.redrawEnable(false);  // don't draw until we've set zoom/lat/long
126841
126842                 container
126843                     .append('svg')
126844                     .attr('id', 'defs')
126845                     .call(svgDefs(context));
126846
126847                 container
126848                     .append('div')
126849                     .attr('id', 'sidebar')
126850                     .call(ui.sidebar);
126851
126852                 var content = container
126853                     .append('div')
126854                     .attr('id', 'content')
126855                     .attr('class', 'active');
126856
126857                 // Top toolbar
126858                 content
126859                     .append('div')
126860                     .attr('id', 'bar-wrap')
126861                     .append('div')
126862                     .attr('id', 'bar')
126863                     .attr('class', 'fillD')
126864                     .call(uiTopToolbar(context));
126865
126866                 content
126867                     .append('div')
126868                     .attr('id', 'map')
126869                     .attr('dir', 'ltr')
126870                     .call(map);
126871
126872
126873                 // Map controls
126874                 var controls = content
126875                     .append('div')
126876                     .attr('class', 'map-controls');
126877
126878                 controls
126879                     .append('div')
126880                     .attr('class', 'map-control zoombuttons')
126881                     .call(uiZoom(context));
126882
126883                 controls
126884                     .append('div')
126885                     .attr('class', 'map-control geolocate-control')
126886                     .call(uiGeolocate(context));
126887
126888                 var background = uiBackground(context);
126889                 controls
126890                     .append('div')
126891                     .attr('class', 'map-control background-control')
126892                     .call(background.renderToggleButton);
126893
126894                 var mapData = uiMapData(context);
126895                 controls
126896                     .append('div')
126897                     .attr('class', 'map-control map-data-control')
126898                     .call(mapData.renderToggleButton);
126899
126900                 var issues = uiIssues(context);
126901                 controls
126902                     .append('div')
126903                     .attr('class', 'map-control map-issues-control')
126904                     .call(issues.renderToggleButton);
126905
126906                 var preferences = uiPreferences(context);
126907                 controls
126908                     .append('div')
126909                     .attr('class', 'map-control preferences-control')
126910                     .call(preferences.renderToggleButton);
126911
126912                 var help = uiHelp(context);
126913                 controls
126914                     .append('div')
126915                     .attr('class', 'map-control help-control')
126916                     .call(help.renderToggleButton);
126917
126918                 content
126919                     .append('div')
126920                     .attr('class', 'spinner')
126921                     .call(uiSpinner(context));
126922
126923                 // Add attribution and footer
126924                 var about = content
126925                     .append('div')
126926                     .attr('id', 'about');
126927
126928                 about
126929                     .append('div')
126930                     .attr('id', 'attrib')
126931                     .attr('dir', 'ltr')
126932                     .call(uiAttribution(context));
126933
126934                 about
126935                     .append('div')
126936                     .attr('class', 'api-status')
126937                     .call(uiStatus(context));
126938
126939
126940                 var footer = about
126941                     .append('div')
126942                     .attr('id', 'footer')
126943                     .attr('class', 'fillD');
126944
126945                 footer
126946                     .append('div')
126947                     .attr('id', 'flash-wrap')
126948                     .attr('class', 'footer-hide');
126949
126950                 var footerWrap = footer
126951                     .append('div')
126952                     .attr('id', 'footer-wrap')
126953                     .attr('class', 'footer-show');
126954
126955                 footerWrap
126956                     .append('div')
126957                     .attr('id', 'scale-block')
126958                     .call(uiScale(context));
126959
126960                 var aboutList = footerWrap
126961                     .append('div')
126962                     .attr('id', 'info-block')
126963                     .append('ul')
126964                     .attr('id', 'about-list');
126965
126966                 if (!context.embed()) {
126967                     aboutList
126968                         .call(uiAccount(context));
126969                 }
126970
126971                 aboutList
126972                     .append('li')
126973                     .attr('class', 'version')
126974                     .call(uiVersion(context));
126975
126976                 var issueLinks = aboutList
126977                     .append('li');
126978
126979                 issueLinks
126980                     .append('a')
126981                     .attr('target', '_blank')
126982                     .attr('href', 'https://github.com/openstreetmap/iD/issues')
126983                     .call(svgIcon('#iD-icon-bug', 'light'))
126984                     .call(tooltip().title(t('report_a_bug')).placement('top'));
126985
126986                 issueLinks
126987                     .append('a')
126988                     .attr('target', '_blank')
126989                     .attr('href', 'https://github.com/openstreetmap/iD/blob/develop/CONTRIBUTING.md#translating')
126990                     .call(svgIcon('#iD-icon-translate', 'light'))
126991                     .call(tooltip().title(t('help_translate')).placement('top'));
126992
126993                 aboutList
126994                     .append('li')
126995                     .attr('class', 'feature-warning')
126996                     .attr('tabindex', -1)
126997                     .call(uiFeatureInfo(context));
126998
126999                 aboutList
127000                     .append('li')
127001                     .attr('class', 'issues-info')
127002                     .attr('tabindex', -1)
127003                     .call(uiIssuesInfo(context));
127004
127005                 aboutList
127006                     .append('li')
127007                     .attr('class', 'user-list')
127008                     .attr('tabindex', -1)
127009                     .call(uiContributors(context));
127010
127011
127012                 // Setup map dimensions and move map to initial center/zoom.
127013                 // This should happen after #content and toolbars exist.
127014                 ui.onResize();
127015                 map.redrawEnable(true);
127016
127017                 ui.hash = behaviorHash(context);
127018                 ui.hash();
127019                 if (!ui.hash.hadHash) {
127020                     map.centerZoom([0, 0], 2);
127021                 }
127022
127023
127024                 var overMap = content
127025                     .append('div')
127026                     .attr('class', 'over-map');
127027
127028                 // Add panes
127029                 // This should happen after map is initialized, as some require surface()
127030                 var panes = overMap
127031                     .append('div')
127032                     .attr('class', 'map-panes');
127033
127034                 panes
127035                     .call(background.renderPane)
127036                     .call(mapData.renderPane)
127037                     .call(issues.renderPane)
127038                     .call(preferences.renderPane)
127039                     .call(help.renderPane);
127040
127041                 ui.info = uiInfo(context);
127042
127043                 // Add absolutely-positioned elements that sit on top of the map
127044                 // This should happen after the map is ready (center/zoom)
127045                 overMap
127046                     .call(uiMapInMap(context))
127047                     .call(ui.info)
127048                     .call(uiNotice(context));
127049
127050
127051                 overMap
127052                     .append('div')
127053                     .attr('id', 'photoviewer')
127054                     .classed('al', true)       // 'al'=left,  'ar'=right
127055                     .classed('hide', true)
127056                     .call(ui.photoviewer);
127057
127058
127059                 // Bind events
127060                 window.onbeforeunload = function() {
127061                     return context.save();
127062                 };
127063                 window.onunload = function() {
127064                     context.history().unlock();
127065                 };
127066
127067                 d3_select(window)
127068                     .on('gesturestart.editor', eventCancel)
127069                     .on('gesturechange.editor', eventCancel)
127070                     .on('gestureend.editor', eventCancel)
127071                     .on('resize.editor', ui.onResize);
127072
127073
127074                 var panPixels = 80;
127075                 context.keybinding()
127076                     .on('⌫', function() { event.preventDefault(); })
127077                     .on([t('sidebar.key'), '`', '²', '@'], ui.sidebar.toggle)   // #5663, #6864 - common QWERTY, AZERTY
127078                     .on('←', pan([panPixels, 0]))
127079                     .on('↑', pan([0, panPixels]))
127080                     .on('→', pan([-panPixels, 0]))
127081                     .on('↓', pan([0, -panPixels]))
127082                     .on(['⇧←', uiCmd('⌘←')], pan([map.dimensions()[0], 0]))
127083                     .on(['⇧↑', uiCmd('⌘↑')], pan([0, map.dimensions()[1]]))
127084                     .on(['⇧→', uiCmd('⌘→')], pan([-map.dimensions()[0], 0]))
127085                     .on(['⇧↓', uiCmd('⌘↓')], pan([0, -map.dimensions()[1]]));
127086
127087                 context.enter(modeBrowse(context));
127088
127089                 if (!_initCounter++) {
127090                     if (!ui.hash.startWalkthrough) {
127091                         context.container()
127092                             .call(uiSplash(context))
127093                             .call(uiRestore(context));
127094                     }
127095
127096                     context.container()
127097                         .call(uiShortcuts(context));
127098                 }
127099
127100                 var osm = context.connection();
127101                 var auth = uiLoading(context).message(t('loading_auth')).blocking(true);
127102
127103                 if (osm && auth) {
127104                     osm
127105                         .on('authLoading.ui', function() {
127106                             context.container()
127107                                 .call(auth);
127108                         })
127109                         .on('authDone.ui', function() {
127110                             auth.close();
127111                         });
127112                 }
127113
127114                 _initCounter++;
127115
127116                 if (ui.hash.startWalkthrough) {
127117                     ui.hash.startWalkthrough = false;
127118                     context.container().call(uiIntro(context));
127119                 }
127120
127121
127122                 function pan(d) {
127123                     return function() {
127124                         if (d3_select('.combobox').size()) { return; }
127125                         event.preventDefault();
127126                         context.pan(d, 100);
127127                     };
127128                 }
127129
127130                 function eventCancel() {
127131                     event.preventDefault();
127132                 }
127133             }
127134
127135
127136             function ui(node, callback) {
127137                 _initCallback = callback;
127138                 var container = d3_select(node);
127139                 context.container(container);
127140                 context.loadLocale(function(err) {
127141                     if (!err) {
127142                         render(container);
127143                     }
127144                     if (callback) {
127145                         callback(err);
127146                     }
127147                 });
127148             }
127149
127150
127151             ui.restart = function(arg) {
127152                 context.keybinding().clear();
127153                 context.locale(arg);
127154                 context.loadLocale(function(err) {
127155                     if (!err) {
127156                         context.container().selectAll('*').remove();
127157                         render(context.container());
127158                         if (_initCallback) { _initCallback(); }
127159                     }
127160                 });
127161             };
127162
127163             ui.sidebar = uiSidebar(context);
127164
127165             ui.photoviewer = uiPhotoviewer(context);
127166
127167             ui.onResize = function(withPan) {
127168                 var map = context.map();
127169
127170                 // Recalc dimensions of map and sidebar.. (`true` = force recalc)
127171                 // This will call `getBoundingClientRect` and trigger reflow,
127172                 //  but the values will be cached for later use.
127173                 var mapDimensions = utilGetDimensions(d3_select('#content'), true);
127174                 utilGetDimensions(d3_select('#sidebar'), true);
127175
127176                 if (withPan !== undefined) {
127177                     map.redrawEnable(false);
127178                     map.pan(withPan);
127179                     map.redrawEnable(true);
127180                 }
127181                 map.dimensions(mapDimensions);
127182
127183                 ui.photoviewer.onMapResize();
127184
127185                 // check if header or footer have overflowed
127186                 ui.checkOverflow('#bar');
127187                 ui.checkOverflow('#footer');
127188
127189                 // Use outdated code so it works on Explorer
127190                 var resizeWindowEvent = document.createEvent('Event');
127191
127192                 resizeWindowEvent.initEvent('resizeWindow', true, true);
127193
127194                 document.dispatchEvent(resizeWindowEvent);
127195             };
127196
127197
127198             // Call checkOverflow when resizing or whenever the contents change.
127199             ui.checkOverflow = function(selector, reset) {
127200                 if (reset) {
127201                     delete _needWidth[selector];
127202                 }
127203
127204                 var element = d3_select(selector);
127205                 var scrollWidth = element.property('scrollWidth');
127206                 var clientWidth = element.property('clientWidth');
127207                 var needed = _needWidth[selector] || scrollWidth;
127208
127209                 if (scrollWidth > clientWidth) {    // overflow happening
127210                     element.classed('narrow', true);
127211                     if (!_needWidth[selector]) {
127212                         _needWidth[selector] = scrollWidth;
127213                     }
127214
127215                 } else if (scrollWidth >= needed) {
127216                     element.classed('narrow', false);
127217                 }
127218             };
127219
127220             ui.togglePanes = function(showPane) {
127221                 var shownPanes = d3_selectAll('.map-pane.shown');
127222
127223                 var side = textDirection === 'ltr' ? 'right' : 'left';
127224
127225                 shownPanes
127226                     .classed('shown', false);
127227
127228                 d3_selectAll('.map-control button')
127229                     .classed('active', false);
127230
127231                 if (showPane) {
127232                     shownPanes
127233                         .style('display', 'none')
127234                         .style(side, '-500px');
127235
127236                     d3_selectAll('.' + showPane.attr('pane') + '-control button')
127237                         .classed('active', true);
127238
127239                     showPane
127240                         .classed('shown', true)
127241                         .style('display', 'block');
127242                     if (shownPanes.empty()) {
127243                         showPane
127244                             .style('display', 'block')
127245                             .style(side, '-500px')
127246                             .transition()
127247                             .duration(200)
127248                             .style(side, '0px');
127249                     } else {
127250                         showPane
127251                             .style(side, '0px');
127252                     }
127253                 } else {
127254                     shownPanes
127255                         .style('display', 'block')
127256                         .style(side, '0px')
127257                         .transition()
127258                         .duration(200)
127259                         .style(side, '-500px')
127260                         .on('end', function() {
127261                             d3_select(this).style('display', 'none');
127262                         });
127263                 }
127264             };
127265
127266             return ui;
127267         }
127268
127269         function coreContext() {
127270             var dispatch$1 = dispatch('enter', 'exit', 'change');
127271             var context = utilRebind({}, dispatch$1, 'on');
127272             var _deferred = new Set();
127273
127274             context.version = '2.17.3';
127275             context.privacyVersion = '20200407';
127276
127277             // iD will alter the hash so cache the parameters intended to setup the session
127278             context.initialHashParams = window.location.hash ? utilStringQs(window.location.hash) : {};
127279
127280             // create a special translation that contains the keys in place of the strings
127281             var tkeys = JSON.parse(JSON.stringify(en));  // clone deep
127282             var parents = [];
127283
127284             function traverser(v, k, obj) {
127285                 parents.push(k);
127286                 if (typeof v === 'object') {
127287                     forOwn(v, traverser);
127288                 } else if (typeof v === 'string') {
127289                     obj[k] = parents.join('.');
127290                 }
127291                 parents.pop();
127292             }
127293
127294             function forOwn(obj, fn) {
127295                 Object.keys(obj).forEach(function(k) { fn(obj[k], k, obj); });
127296             }
127297
127298             forOwn(tkeys, traverser);
127299             addTranslation('_tkeys_', tkeys);
127300
127301             addTranslation('en', en);
127302             setLocale('en');
127303
127304
127305             // https://github.com/openstreetmap/iD/issues/772
127306             // http://mathiasbynens.be/notes/localstorage-pattern#comment-9
127307             var storage;
127308             try { storage = localStorage; } catch (e) {}  // eslint-disable-line no-empty
127309             storage = storage || (function() {
127310                 var s = {};
127311                 return {
127312                     getItem: function(k) { return s[k]; },
127313                     setItem: function(k, v) { s[k] = v; },
127314                     removeItem: function(k) { delete s[k]; }
127315                 };
127316             })();
127317
127318             context.storage = function(k, v) {
127319                 try {
127320                     if (arguments.length === 1) { return storage.getItem(k); }
127321                     else if (v === null) { storage.removeItem(k); }
127322                     else { storage.setItem(k, v); }
127323                 } catch (e) {
127324                     // localstorage quota exceeded
127325                     /* eslint-disable no-console */
127326                     if (typeof console !== 'undefined') { console.error('localStorage quota exceeded'); }
127327                     /* eslint-enable no-console */
127328                 }
127329             };
127330
127331
127332             /* User interface and keybinding */
127333             var ui;
127334             context.ui = function() { return ui; };
127335
127336             var keybinding = utilKeybinding('context');
127337             context.keybinding = function() { return keybinding; };
127338             d3_select(document).call(keybinding);
127339
127340
127341             /* Straight accessors. Avoid using these if you can. */
127342             var connection, history, validator;
127343             context.connection = function() { return connection; };
127344             context.history = function() { return history; };
127345             context.validator = function() { return validator; };
127346
127347             /* Connection */
127348             context.preauth = function(options) {
127349                 if (connection) {
127350                     connection.switch(options);
127351                 }
127352                 return context;
127353             };
127354
127355
127356             function afterLoad(cid, callback) {
127357                 return function(err, result) {
127358                     if (err) {
127359                         // 400 Bad Request, 401 Unauthorized, 403 Forbidden..
127360                         if (err.status === 400 || err.status === 401 || err.status === 403) {
127361                             if (connection) {
127362                                 connection.logout();
127363                             }
127364                         }
127365                         if (typeof callback === 'function') {
127366                             callback(err);
127367                         }
127368                         return;
127369
127370                     } else if (connection && connection.getConnectionId() !== cid) {
127371                         if (typeof callback === 'function') {
127372                             callback({ message: 'Connection Switched', status: -1 });
127373                         }
127374                         return;
127375
127376                     } else {
127377                         history.merge(result.data, result.extent);
127378                         if (typeof callback === 'function') {
127379                             callback(err, result);
127380                         }
127381                         return;
127382                     }
127383                 };
127384             }
127385
127386
127387             context.loadTiles = function(projection, callback) {
127388                 var handle = window.requestIdleCallback(function() {
127389                     _deferred.delete(handle);
127390                     if (connection && context.editableDataEnabled()) {
127391                         var cid = connection.getConnectionId();
127392                         connection.loadTiles(projection, afterLoad(cid, callback));
127393                     }
127394                 });
127395                 _deferred.add(handle);
127396             };
127397
127398             context.loadTileAtLoc = function(loc, callback) {
127399                 var handle = window.requestIdleCallback(function() {
127400                     _deferred.delete(handle);
127401                     if (connection && context.editableDataEnabled()) {
127402                         var cid = connection.getConnectionId();
127403                         connection.loadTileAtLoc(loc, afterLoad(cid, callback));
127404                     }
127405                 });
127406                 _deferred.add(handle);
127407             };
127408
127409             context.loadEntity = function(entityID, callback) {
127410                 if (connection) {
127411                     var cid = connection.getConnectionId();
127412                     connection.loadEntity(entityID, afterLoad(cid, callback));
127413                 }
127414             };
127415
127416             context.zoomToEntity = function(entityID, zoomTo) {
127417                 if (zoomTo !== false) {
127418                     this.loadEntity(entityID, function(err, result) {
127419                         if (err) { return; }
127420                         var entity = result.data.find(function(e) { return e.id === entityID; });
127421                         if (entity) {
127422                             map.zoomTo(entity);
127423                         }
127424                     });
127425                 }
127426
127427                 map.on('drawn.zoomToEntity', function() {
127428                     if (!context.hasEntity(entityID)) { return; }
127429                     map.on('drawn.zoomToEntity', null);
127430                     context.on('enter.zoomToEntity', null);
127431                     context.enter(modeSelect(context, [entityID]));
127432                 });
127433
127434                 context.on('enter.zoomToEntity', function() {
127435                     if (mode.id !== 'browse') {
127436                         map.on('drawn.zoomToEntity', null);
127437                         context.on('enter.zoomToEntity', null);
127438                     }
127439                 });
127440             };
127441
127442             var minEditableZoom = 16;
127443             context.minEditableZoom = function(val) {
127444                 if (!arguments.length) { return minEditableZoom; }
127445                 minEditableZoom = val;
127446                 if (connection) {
127447                     connection.tileZoom(val);
127448                 }
127449                 return context;
127450             };
127451
127452
127453             /* History */
127454             var inIntro = false;
127455             context.inIntro = function(val) {
127456                 if (!arguments.length) { return inIntro; }
127457                 inIntro = val;
127458                 return context;
127459             };
127460
127461             context.save = function() {
127462                 // no history save, no message onbeforeunload
127463                 if (inIntro || d3_select('.modal').size()) { return; }
127464
127465                 var canSave;
127466                 if (mode && mode.id === 'save') {
127467                     canSave = false;
127468
127469                     // Attempt to prevent user from creating duplicate changes - see #5200
127470                     if (services$1.osm && services$1.osm.isChangesetInflight()) {
127471                         history.clearSaved();
127472                         return;
127473                     }
127474
127475                 } else {
127476                     canSave = context.selectedIDs().every(function(id) {
127477                         var entity = context.hasEntity(id);
127478                         return entity && !entity.isDegenerate();
127479                     });
127480                 }
127481
127482                 if (canSave) {
127483                     history.save();
127484                 }
127485                 if (history.hasChanges()) {
127486                     return t('save.unsaved_changes');
127487                 }
127488             };
127489
127490
127491             /* Graph */
127492             context.hasEntity = function(id) {
127493                 return history.graph().hasEntity(id);
127494             };
127495             context.entity = function(id) {
127496                 return history.graph().entity(id);
127497             };
127498             context.childNodes = function(way) {
127499                 return history.graph().childNodes(way);
127500             };
127501             context.geometry = function(id) {
127502                 return context.entity(id).geometry(history.graph());
127503             };
127504
127505
127506             /* Modes */
127507             var mode;
127508             context.mode = function() {
127509                 return mode;
127510             };
127511             context.enter = function(newMode) {
127512                 if (mode) {
127513                     mode.exit();
127514                     dispatch$1.call('exit', this, mode);
127515                 }
127516
127517                 mode = newMode;
127518                 mode.enter();
127519                 dispatch$1.call('enter', this, mode);
127520             };
127521
127522             context.selectedIDs = function() {
127523                 if (mode && mode.selectedIDs) {
127524                     return mode.selectedIDs();
127525                 } else {
127526                     return [];
127527                 }
127528             };
127529
127530             context.activeID = function() {
127531                 return mode && mode.activeID && mode.activeID();
127532             };
127533
127534             var _selectedNoteID;
127535             context.selectedNoteID = function(noteID) {
127536                 if (!arguments.length) { return _selectedNoteID; }
127537                 _selectedNoteID = noteID;
127538                 return context;
127539             };
127540
127541             var _selectedErrorID;
127542             context.selectedErrorID = function(errorID) {
127543                 if (!arguments.length) { return _selectedErrorID; }
127544                 _selectedErrorID = errorID;
127545                 return context;
127546             };
127547
127548
127549             /* Behaviors */
127550             context.install = function(behavior) {
127551                 context.surface().call(behavior);
127552             };
127553             context.uninstall = function(behavior) {
127554                 context.surface().call(behavior.off);
127555             };
127556
127557
127558             /* Copy/Paste */
127559             var copyIDs = [], copyGraph;
127560             context.copyGraph = function() { return copyGraph; };
127561             context.copyIDs = function(val) {
127562                 if (!arguments.length) { return copyIDs; }
127563                 copyIDs = val;
127564                 copyGraph = history.graph();
127565                 return context;
127566             };
127567
127568
127569             /* Background */
127570             var background;
127571             context.background = function() { return background; };
127572
127573
127574             /* Features */
127575             var features;
127576             context.features = function() { return features; };
127577             context.hasHiddenConnections = function(id) {
127578                 var graph = history.graph();
127579                 var entity = graph.entity(id);
127580                 return features.hasHiddenConnections(entity, graph);
127581             };
127582
127583
127584             /* Photos */
127585             var photos;
127586             context.photos = function() { return photos; };
127587
127588
127589             /* Presets */
127590             var presets;
127591             context.presets = function() { return presets; };
127592
127593
127594             /* Map */
127595             var map;
127596             context.map = function() { return map; };
127597             context.layers = function() { return map.layers; };
127598             context.surface = function() { return map.surface; };
127599             context.editableDataEnabled = function() { return map.editableDataEnabled(); };
127600             context.editable = function() {
127601
127602                // don't allow editing during save
127603                var mode = context.mode();
127604                if (!mode || mode.id === 'save') { return false; }
127605
127606                return map.editableDataEnabled();
127607             };
127608             context.surfaceRect = function() {
127609                 return map.surface.node().getBoundingClientRect();
127610             };
127611
127612
127613             /* Debug */
127614             var debugFlags = {
127615                 tile: false,        // tile boundaries
127616                 collision: false,   // label collision bounding boxes
127617                 imagery: false,     // imagery bounding polygons
127618                 community: false,   // community bounding polygons
127619                 imperial: false,    // imperial (not metric) bounding polygons
127620                 driveLeft: false,   // driveLeft bounding polygons
127621                 target: false,      // touch targets
127622                 downloaded: false   // downloaded data from osm
127623             };
127624             context.debugFlags = function() {
127625                 return debugFlags;
127626             };
127627             context.setDebug = function(flag, val) {
127628                 if (arguments.length === 1) { val = true; }
127629                 debugFlags[flag] = val;
127630                 dispatch$1.call('change');
127631                 return context;
127632             };
127633             context.getDebug = function(flag) {
127634                 return flag && debugFlags[flag];
127635             };
127636
127637
127638             /* Container */
127639             var container = d3_select(null);
127640             context.container = function(val) {
127641                 if (!arguments.length) { return container; }
127642                 container = val;
127643                 container.classed('ideditor', true);
127644                 return context;
127645             };
127646             var embed;
127647             context.embed = function(val) {
127648                 if (!arguments.length) { return embed; }
127649                 embed = val;
127650                 return context;
127651             };
127652
127653
127654             /* Assets */
127655             var assetPath = '';
127656             context.assetPath = function(val) {
127657                 if (!arguments.length) { return assetPath; }
127658                 assetPath = val;
127659                 return context;
127660             };
127661
127662             var assetMap = {};
127663             context.assetMap = function(val) {
127664                 if (!arguments.length) { return assetMap; }
127665                 assetMap = val;
127666                 return context;
127667             };
127668
127669             context.asset = function(val) {
127670                 var filename = assetPath + val;
127671                 return assetMap[filename] || filename;
127672             };
127673
127674             context.imagePath = function(val) {
127675                 return context.asset('img/' + val);
127676             };
127677
127678
127679             /* locales */
127680             // `locale` variable contains a "requested locale".
127681             // It won't become the `currentLocale` until after loadLocale() is called.
127682             var locale, localePath;
127683
127684             context.locale = function(loc, path) {
127685                 if (!arguments.length) { return currentLocale; }
127686                 locale = loc;
127687                 localePath = path;
127688                 return context;
127689             };
127690
127691             context.loadLocale = function(callback) {
127692                 if (locale && locale !== 'en' && dataLocales.hasOwnProperty(locale)) {
127693                     localePath = localePath || context.asset('locales/' + locale + '.json');
127694                     d3_json(localePath)
127695                         .then(function(result) {
127696                             addTranslation(locale, result[locale]);
127697                             setLocale(locale);
127698                             utilDetect(true);
127699                             if (callback) { callback(); }
127700                         })
127701                         .catch(function(err) {
127702                             if (callback) { callback(err.message); }
127703                         });
127704                 } else {
127705                     if (locale) {
127706                         setLocale(locale);
127707                         utilDetect(true);
127708                     }
127709                     if (callback) {
127710                         callback();
127711                     }
127712                 }
127713             };
127714
127715
127716             /* reset (aka flush) */
127717             context.reset = context.flush = function() {
127718                 context.debouncedSave.cancel();
127719
127720                 Array.from(_deferred).forEach(function(handle) {
127721                     window.cancelIdleCallback(handle);
127722                     _deferred.delete(handle);
127723                 });
127724
127725                 Object.values(services$1).forEach(function(service) {
127726                     if (service && typeof service.reset === 'function') {
127727                         service.reset(context);
127728                     }
127729                 });
127730
127731                 validator.reset();
127732                 features.reset();
127733                 history.reset();
127734
127735                 return context;
127736             };
127737
127738
127739             /* Init */
127740
127741             context.projection = geoRawMercator();
127742             context.curtainProjection = geoRawMercator();
127743
127744             locale = utilDetect().locale;
127745             if (locale && !dataLocales.hasOwnProperty(locale)) {
127746                 locale = locale.split('-')[0];
127747             }
127748
127749             history = coreHistory(context);
127750             validator = coreValidator(context);
127751
127752             context.graph = history.graph;
127753             context.changes = history.changes;
127754             context.intersects = history.intersects;
127755             context.pauseChangeDispatch = history.pauseChangeDispatch;
127756             context.resumeChangeDispatch = history.resumeChangeDispatch;
127757
127758             // Debounce save, since it's a synchronous localStorage write,
127759             // and history changes can happen frequently (e.g. when dragging).
127760             context.debouncedSave = debounce(context.save, 350);
127761             function withDebouncedSave(fn) {
127762                 return function() {
127763                     var result = fn.apply(history, arguments);
127764                     context.debouncedSave();
127765                     return result;
127766                 };
127767             }
127768
127769             context.perform = withDebouncedSave(history.perform);
127770             context.replace = withDebouncedSave(history.replace);
127771             context.pop = withDebouncedSave(history.pop);
127772             context.overwrite = withDebouncedSave(history.overwrite);
127773             context.undo = withDebouncedSave(history.undo);
127774             context.redo = withDebouncedSave(history.redo);
127775
127776             ui = uiInit(context);
127777
127778             connection = services$1.osm;
127779             background = rendererBackground(context);
127780             features = rendererFeatures(context);
127781             photos = rendererPhotos(context);
127782             presets = presetIndex(context);
127783
127784             if (services$1.maprules && context.initialHashParams.maprules) {
127785                 var maprules = context.initialHashParams.maprules;
127786                 d3_json(maprules)
127787                     .then(function(mapcss) {
127788                         services$1.maprules.init();
127789                         mapcss.forEach(function(mapcssSelector) {
127790                             return services$1.maprules.addRule(mapcssSelector);
127791                         });
127792                     })
127793                     .catch(function() {
127794                         /* ignore */
127795                     });
127796             }
127797
127798             map = rendererMap(context);
127799             context.mouse = map.mouse;
127800             context.extent = map.extent;
127801             context.pan = map.pan;
127802             context.zoomIn = map.zoomIn;
127803             context.zoomOut = map.zoomOut;
127804             context.zoomInFurther = map.zoomInFurther;
127805             context.zoomOutFurther = map.zoomOutFurther;
127806             context.redrawEnable = map.redrawEnable;
127807
127808             Object.values(services$1).forEach(function(service) {
127809                 if (service && typeof service.init === 'function') {
127810                     service.init(context);
127811                 }
127812             });
127813
127814             validator.init();
127815             background.init();
127816             features.init();
127817             photos.init();
127818
127819             var presetsParameter = context.initialHashParams.presets;
127820             if (presetsParameter && presetsParameter.indexOf('://') !== -1) {
127821                 // assume URL of external presets file
127822
127823                 presets.fromExternal(external, function(externalPresets) {
127824                     context.presets = function() { return externalPresets; }; // default + external presets...
127825                     osmSetAreaKeys(presets.areaKeys());
127826                     osmSetPointTags(presets.pointTags());
127827                     osmSetVertexTags(presets.vertexTags());
127828                 });
127829             } else {
127830                 var addablePresetIDs;
127831                 if (presetsParameter) {
127832                     // assume list of allowed preset IDs
127833                     addablePresetIDs = presetsParameter.split(',');
127834                 }
127835                 presets.init(addablePresetIDs);
127836                 osmSetAreaKeys(presets.areaKeys());
127837                 osmSetPointTags(presets.pointTags());
127838                 osmSetVertexTags(presets.vertexTags());
127839             }
127840
127841             return context;
127842         }
127843
127844         function uiSourceSwitch(context) {
127845             var keys;
127846
127847
127848             function click() {
127849                 event.preventDefault();
127850
127851                 var osm = context.connection();
127852                 if (!osm) { return; }
127853
127854                 if (context.inIntro()) { return; }
127855
127856                 if (context.history().hasChanges() &&
127857                     !window.confirm(t('source_switch.lose_changes'))) { return; }
127858
127859                 var isLive = d3_select(this)
127860                     .classed('live');
127861
127862                 isLive = !isLive;
127863                 context.enter(modeBrowse(context));
127864                 context.history().clearSaved();          // remove saved history
127865                 context.flush();                         // remove stored data
127866
127867                 d3_select(this)
127868                     .text(isLive ? t('source_switch.live') : t('source_switch.dev'))
127869                     .classed('live', isLive)
127870                     .classed('chip', isLive);
127871
127872                 osm.switch(isLive ? keys[0] : keys[1]);  // switch connection (warning: dispatches 'change' event)
127873             }
127874
127875             var sourceSwitch = function(selection) {
127876                 selection
127877                     .append('a')
127878                     .attr('href', '#')
127879                     .text(t('source_switch.live'))
127880                     .attr('class', 'live chip')
127881                     .on('click', click);
127882             };
127883
127884
127885             sourceSwitch.keys = function(_) {
127886                 if (!arguments.length) { return keys; }
127887                 keys = _;
127888                 return sourceSwitch;
127889             };
127890
127891
127892             return sourceSwitch;
127893         }
127894
127895         var Connection = services$1.osm;
127896
127897         var debug = false;
127898
127899         var iD = /*#__PURE__*/Object.freeze({
127900                 __proto__: null,
127901                 Connection: Connection,
127902                 debug: debug,
127903                 d3: index$3,
127904                 Context: coreContext,
127905                 setAreaKeys: osmSetAreaKeys,
127906                 get areaKeys () { return osmAreaKeys; },
127907                 Difference: coreDifference,
127908                 Graph: coreGraph,
127909                 History: coreHistory,
127910                 Tree: coreTree,
127911                 geoCross: geoVecCross,
127912                 geoInterp: geoVecInterp,
127913                 geoRoundCoordinates: geoVecFloor,
127914                 geoEuclideanDistance: geoVecLength,
127915                 Entity: osmEntity,
127916                 Node: osmNode,
127917                 Relation: osmRelation,
127918                 Way: osmWay,
127919                 BackgroundSource: rendererBackgroundSource,
127920                 Background: rendererBackground,
127921                 Features: rendererFeatures,
127922                 Map: rendererMap,
127923                 TileLayer: rendererTileLayer,
127924                 Detect: utilDetect,
127925                 uiPreset: uiPresetEditor,
127926                 actionAddEntity: actionAddEntity,
127927                 actionAddMember: actionAddMember,
127928                 actionAddMidpoint: actionAddMidpoint,
127929                 actionAddVertex: actionAddVertex,
127930                 actionChangeMember: actionChangeMember,
127931                 actionChangePreset: actionChangePreset,
127932                 actionChangeTags: actionChangeTags,
127933                 actionCircularize: actionCircularize,
127934                 actionConnect: actionConnect,
127935                 actionCopyEntities: actionCopyEntities,
127936                 actionDeleteMember: actionDeleteMember,
127937                 actionDeleteMultiple: actionDeleteMultiple,
127938                 actionDeleteNode: actionDeleteNode,
127939                 actionDeleteRelation: actionDeleteRelation,
127940                 actionDeleteWay: actionDeleteWay,
127941                 actionDiscardTags: actionDiscardTags,
127942                 actionDisconnect: actionDisconnect,
127943                 actionExtract: actionExtract,
127944                 actionJoin: actionJoin,
127945                 actionMerge: actionMerge,
127946                 actionMergeNodes: actionMergeNodes,
127947                 actionMergePolygon: actionMergePolygon,
127948                 actionMergeRemoteChanges: actionMergeRemoteChanges,
127949                 actionMove: actionMove,
127950                 actionMoveMember: actionMoveMember,
127951                 actionMoveNode: actionMoveNode,
127952                 actionNoop: actionNoop,
127953                 actionOrthogonalize: actionOrthogonalize,
127954                 actionRestrictTurn: actionRestrictTurn,
127955                 actionReverse: actionReverse,
127956                 actionRevert: actionRevert,
127957                 actionRotate: actionRotate,
127958                 actionSplit: actionSplit,
127959                 actionStraightenNodes: actionStraightenNodes,
127960                 actionStraightenWay: actionStraightenWay,
127961                 actionUnrestrictTurn: actionUnrestrictTurn,
127962                 actionReflect: actionReflect,
127963                 actionUpgradeTags: actionUpgradeTags,
127964                 behaviorAddWay: behaviorAddWay,
127965                 behaviorBreathe: behaviorBreathe,
127966                 behaviorCopy: behaviorCopy,
127967                 behaviorDrag: behaviorDrag,
127968                 behaviorDrawWay: behaviorDrawWay,
127969                 behaviorDraw: behaviorDraw,
127970                 behaviorEdit: behaviorEdit,
127971                 behaviorHash: behaviorHash,
127972                 behaviorHover: behaviorHover,
127973                 behaviorLasso: behaviorLasso,
127974                 behaviorOperation: behaviorOperation,
127975                 behaviorPaste: behaviorPaste,
127976                 behaviorSelect: behaviorSelect,
127977                 behaviorTail: behaviorTail,
127978                 coreContext: coreContext,
127979                 coreDifference: coreDifference,
127980                 coreGraph: coreGraph,
127981                 coreHistory: coreHistory,
127982                 coreTree: coreTree,
127983                 coreValidator: coreValidator,
127984                 data: data,
127985                 dataWikipedia: wikipedia$2,
127986                 dataAddressFormats: dataAddressFormats,
127987                 dataDeprecated: dataDeprecated,
127988                 dataDiscarded: dataDiscarded,
127989                 dataLanguages: dataLanguages,
127990                 dataLocales: dataLocales,
127991                 dataPhoneFormats: dataPhoneFormats,
127992                 dataShortcuts: dataShortcuts,
127993                 dataTerritoryLanguages: dataTerritoryLanguages,
127994                 dataEn: en,
127995                 geoExtent: geoExtent,
127996                 geoLatToMeters: geoLatToMeters,
127997                 geoLonToMeters: geoLonToMeters,
127998                 geoMetersToLat: geoMetersToLat,
127999                 geoMetersToLon: geoMetersToLon,
128000                 geoMetersToOffset: geoMetersToOffset,
128001                 geoOffsetToMeters: geoOffsetToMeters,
128002                 geoScaleToZoom: geoScaleToZoom,
128003                 geoSphericalClosestNode: geoSphericalClosestNode,
128004                 geoSphericalDistance: geoSphericalDistance,
128005                 geoZoomToScale: geoZoomToScale,
128006                 geoAngle: geoAngle,
128007                 geoChooseEdge: geoChooseEdge,
128008                 geoEdgeEqual: geoEdgeEqual,
128009                 geoGetSmallestSurroundingRectangle: geoGetSmallestSurroundingRectangle,
128010                 geoHasLineIntersections: geoHasLineIntersections,
128011                 geoHasSelfIntersections: geoHasSelfIntersections,
128012                 geoRotate: geoRotate,
128013                 geoLineIntersection: geoLineIntersection,
128014                 geoPathHasIntersections: geoPathHasIntersections,
128015                 geoPathIntersections: geoPathIntersections,
128016                 geoPathLength: geoPathLength,
128017                 geoPointInPolygon: geoPointInPolygon,
128018                 geoPolygonContainsPolygon: geoPolygonContainsPolygon,
128019                 geoPolygonIntersectsPolygon: geoPolygonIntersectsPolygon,
128020                 geoViewportEdge: geoViewportEdge,
128021                 geoRawMercator: geoRawMercator,
128022                 geoVecAdd: geoVecAdd,
128023                 geoVecAngle: geoVecAngle,
128024                 geoVecCross: geoVecCross,
128025                 geoVecDot: geoVecDot,
128026                 geoVecEqual: geoVecEqual,
128027                 geoVecFloor: geoVecFloor,
128028                 geoVecInterp: geoVecInterp,
128029                 geoVecLength: geoVecLength,
128030                 geoVecLengthSquare: geoVecLengthSquare,
128031                 geoVecNormalize: geoVecNormalize,
128032                 geoVecNormalizedDot: geoVecNormalizedDot,
128033                 geoVecProject: geoVecProject,
128034                 geoVecSubtract: geoVecSubtract,
128035                 geoVecScale: geoVecScale,
128036                 geoOrthoNormalizedDotProduct: geoOrthoNormalizedDotProduct,
128037                 geoOrthoCalcScore: geoOrthoCalcScore,
128038                 geoOrthoMaxOffsetAngle: geoOrthoMaxOffsetAngle,
128039                 geoOrthoCanOrthogonalize: geoOrthoCanOrthogonalize,
128040                 modeAddArea: modeAddArea,
128041                 modeAddLine: modeAddLine,
128042                 modeAddPoint: modeAddPoint,
128043                 modeAddNote: modeAddNote,
128044                 modeBrowse: modeBrowse,
128045                 modeDragNode: modeDragNode,
128046                 modeDragNote: modeDragNote,
128047                 modeDrawArea: modeDrawArea,
128048                 modeDrawLine: modeDrawLine,
128049                 modeMove: modeMove,
128050                 modeRotate: modeRotate,
128051                 modeSave: modeSave,
128052                 modeSelect: modeSelect,
128053                 modeSelectData: modeSelectData,
128054                 modeSelectError: modeSelectError,
128055                 modeSelectNote: modeSelectNote,
128056                 operationCircularize: operationCircularize,
128057                 operationContinue: operationContinue,
128058                 operationDelete: operationDelete,
128059                 operationDisconnect: operationDisconnect,
128060                 operationDowngrade: operationDowngrade,
128061                 operationExtract: operationExtract,
128062                 operationMerge: operationMerge,
128063                 operationMove: operationMove,
128064                 operationOrthogonalize: operationOrthogonalize,
128065                 operationReflectShort: operationReflectShort,
128066                 operationReflectLong: operationReflectLong,
128067                 operationReverse: operationReverse,
128068                 operationRotate: operationRotate,
128069                 operationSplit: operationSplit,
128070                 operationStraighten: operationStraighten,
128071                 osmChangeset: osmChangeset,
128072                 osmEntity: osmEntity,
128073                 osmNode: osmNode,
128074                 osmNote: osmNote,
128075                 osmRelation: osmRelation,
128076                 osmWay: osmWay,
128077                 qaError: qaError,
128078                 osmIntersection: osmIntersection,
128079                 osmTurn: osmTurn,
128080                 osmInferRestriction: osmInferRestriction,
128081                 osmLanes: osmLanes,
128082                 osmOldMultipolygonOuterMemberOfRelation: osmOldMultipolygonOuterMemberOfRelation,
128083                 osmIsOldMultipolygonOuterMember: osmIsOldMultipolygonOuterMember,
128084                 osmOldMultipolygonOuterMember: osmOldMultipolygonOuterMember,
128085                 osmJoinWays: osmJoinWays,
128086                 get osmAreaKeys () { return osmAreaKeys; },
128087                 osmSetAreaKeys: osmSetAreaKeys,
128088                 get osmPointTags () { return osmPointTags; },
128089                 osmSetPointTags: osmSetPointTags,
128090                 get osmVertexTags () { return osmVertexTags; },
128091                 osmSetVertexTags: osmSetVertexTags,
128092                 osmNodeGeometriesForTags: osmNodeGeometriesForTags,
128093                 osmOneWayTags: osmOneWayTags,
128094                 osmPavedTags: osmPavedTags,
128095                 osmIsInterestingTag: osmIsInterestingTag,
128096                 osmRoutableHighwayTagValues: osmRoutableHighwayTagValues,
128097                 osmFlowingWaterwayTagValues: osmFlowingWaterwayTagValues,
128098                 osmRailwayTrackTagValues: osmRailwayTrackTagValues,
128099                 presetCategory: presetCategory,
128100                 presetCollection: presetCollection,
128101                 presetField: presetField,
128102                 presetPreset: presetPreset,
128103                 presetIndex: presetIndex,
128104                 rendererBackgroundSource: rendererBackgroundSource,
128105                 rendererBackground: rendererBackground,
128106                 rendererFeatures: rendererFeatures,
128107                 rendererMap: rendererMap,
128108                 rendererPhotos: rendererPhotos,
128109                 rendererTileLayer: rendererTileLayer,
128110                 services: services$1,
128111                 serviceKeepRight: serviceKeepRight,
128112                 serviceImproveOSM: serviceImproveOSM,
128113                 serviceMapillary: serviceMapillary,
128114                 serviceMapRules: serviceMapRules,
128115                 serviceNominatim: serviceNominatim,
128116                 serviceOpenstreetcam: serviceOpenstreetcam,
128117                 serviceOsm: serviceOsm,
128118                 serviceOsmWikibase: serviceOsmWikibase,
128119                 serviceStreetside: serviceStreetside,
128120                 serviceTaginfo: serviceTaginfo,
128121                 serviceVectorTile: serviceVectorTile,
128122                 serviceWikidata: serviceWikidata,
128123                 serviceWikipedia: serviceWikipedia,
128124                 svgAreas: svgAreas,
128125                 svgData: svgData,
128126                 svgDebug: svgDebug,
128127                 svgDefs: svgDefs,
128128                 svgKeepRight: svgKeepRight,
128129                 svgIcon: svgIcon,
128130                 svgGeolocate: svgGeolocate,
128131                 svgLabels: svgLabels,
128132                 svgLayers: svgLayers,
128133                 svgLines: svgLines,
128134                 svgMapillaryImages: svgMapillaryImages,
128135                 svgMapillarySigns: svgMapillarySigns,
128136                 svgMidpoints: svgMidpoints,
128137                 svgNotes: svgNotes,
128138                 svgMarkerSegments: svgMarkerSegments,
128139                 svgOpenstreetcamImages: svgOpenstreetcamImages,
128140                 svgOsm: svgOsm,
128141                 svgPassiveVertex: svgPassiveVertex,
128142                 svgPath: svgPath,
128143                 svgPointTransform: svgPointTransform,
128144                 svgPoints: svgPoints,
128145                 svgRelationMemberTags: svgRelationMemberTags,
128146                 svgSegmentWay: svgSegmentWay,
128147                 svgStreetside: svgStreetside,
128148                 svgTagClasses: svgTagClasses,
128149                 svgTagPattern: svgTagPattern,
128150                 svgTouch: svgTouch,
128151                 svgTurns: svgTurns,
128152                 svgVertices: svgVertices,
128153                 uiFields: uiFields,
128154                 uiFieldDefaultCheck: uiFieldCheck,
128155                 uiFieldOnewayCheck: uiFieldCheck,
128156                 uiFieldCheck: uiFieldCheck,
128157                 uiFieldMultiCombo: uiFieldCombo,
128158                 uiFieldNetworkCombo: uiFieldCombo,
128159                 uiFieldSemiCombo: uiFieldCombo,
128160                 uiFieldTypeCombo: uiFieldCombo,
128161                 uiFieldCombo: uiFieldCombo,
128162                 uiFieldUrl: uiFieldText,
128163                 uiFieldIdentifier: uiFieldText,
128164                 uiFieldNumber: uiFieldText,
128165                 uiFieldTel: uiFieldText,
128166                 uiFieldEmail: uiFieldText,
128167                 uiFieldText: uiFieldText,
128168                 uiFieldAccess: uiFieldAccess,
128169                 uiFieldAddress: uiFieldAddress,
128170                 uiFieldCycleway: uiFieldCycleway,
128171                 uiFieldLanes: uiFieldLanes,
128172                 uiFieldLocalized: uiFieldLocalized,
128173                 uiFieldMaxspeed: uiFieldMaxspeed,
128174                 uiFieldStructureRadio: uiFieldRadio,
128175                 uiFieldRadio: uiFieldRadio,
128176                 uiFieldRestrictions: uiFieldRestrictions,
128177                 uiFieldTextarea: uiFieldTextarea,
128178                 uiFieldWikidata: uiFieldWikidata,
128179                 uiFieldWikipedia: uiFieldWikipedia,
128180                 uiIntro: uiIntro,
128181                 uiInfoPanels: uiInfoPanels,
128182                 uiPanelBackground: uiPanelBackground,
128183                 uiPanelHistory: uiPanelHistory,
128184                 uiPanelLocation: uiPanelLocation,
128185                 uiPanelMeasurement: uiPanelMeasurement,
128186                 uiSettingsCustomBackground: uiSettingsCustomBackground,
128187                 uiSettingsCustomData: uiSettingsCustomData,
128188                 uiInit: uiInit,
128189                 uiAccount: uiAccount,
128190                 uiAttribution: uiAttribution,
128191                 uiBackground: uiBackground,
128192                 uiBackgroundDisplayOptions: uiBackgroundDisplayOptions,
128193                 uiBackgroundOffset: uiBackgroundOffset,
128194                 uiChangesetEditor: uiChangesetEditor,
128195                 uiCmd: uiCmd,
128196                 uiCombobox: uiCombobox,
128197                 uiCommit: uiCommit,
128198                 uiCommitChanges: uiCommitChanges,
128199                 uiCommitWarnings: uiCommitWarnings,
128200                 uiConfirm: uiConfirm,
128201                 uiConflicts: uiConflicts,
128202                 uiContributors: uiContributors,
128203                 uiCurtain: uiCurtain,
128204                 uiDataEditor: uiDataEditor,
128205                 uiDataHeader: uiDataHeader,
128206                 uiDisclosure: uiDisclosure,
128207                 uiEditMenu: uiEditMenu,
128208                 uiEntityEditor: uiEntityEditor,
128209                 uiFeatureInfo: uiFeatureInfo,
128210                 uiFeatureList: uiFeatureList,
128211                 uiField: uiField,
128212                 uiFieldHelp: uiFieldHelp,
128213                 uiFlash: uiFlash,
128214                 uiFormFields: uiFormFields,
128215                 uiFullScreen: uiFullScreen,
128216                 uiGeolocate: uiGeolocate,
128217                 uiHelp: uiHelp,
128218                 uiImproveOsmComments: uiImproveOsmComments,
128219                 uiImproveOsmDetails: uiImproveOsmDetails,
128220                 uiImproveOsmEditor: uiImproveOsmEditor,
128221                 uiImproveOsmHeader: uiImproveOsmHeader,
128222                 uiInfo: uiInfo,
128223                 uiInspector: uiInspector,
128224                 uiIssuesInfo: uiIssuesInfo,
128225                 uiKeepRightDetails: uiKeepRightDetails,
128226                 uiKeepRightEditor: uiKeepRightEditor,
128227                 uiKeepRightHeader: uiKeepRightHeader,
128228                 uiLasso: uiLasso,
128229                 uiLoading: uiLoading,
128230                 uiMapData: uiMapData,
128231                 uiMapInMap: uiMapInMap,
128232                 uiModal: uiModal,
128233                 uiNotice: uiNotice,
128234                 uiNoteComments: uiNoteComments,
128235                 uiNoteEditor: uiNoteEditor,
128236                 uiNoteHeader: uiNoteHeader,
128237                 uiNoteReport: uiNoteReport,
128238                 uiPreferences: uiPreferences,
128239                 uiPresetEditor: uiPresetEditor,
128240                 uiPresetIcon: uiPresetIcon,
128241                 uiPresetList: uiPresetList,
128242                 uiQuickLinks: uiQuickLinks,
128243                 uiRadialMenu: uiRadialMenu,
128244                 uiRawMemberEditor: uiRawMemberEditor,
128245                 uiRawMembershipEditor: uiRawMembershipEditor,
128246                 uiRawTagEditor: uiRawTagEditor,
128247                 uiRestore: uiRestore,
128248                 uiScale: uiScale,
128249                 uiSelectionList: uiSelectionList,
128250                 uiSidebar: uiSidebar,
128251                 uiSourceSwitch: uiSourceSwitch,
128252                 uiSpinner: uiSpinner,
128253                 uiSplash: uiSplash,
128254                 uiStatus: uiStatus,
128255                 uiSuccess: uiSuccess,
128256                 uiTagReference: uiTagReference,
128257                 uiToggle: uiToggle,
128258                 uiTooltipHtml: uiTooltipHtml,
128259                 uiVersion: uiVersion,
128260                 uiViewOnOSM: uiViewOnOSM,
128261                 uiViewOnKeepRight: uiViewOnKeepRight,
128262                 uiZoom: uiZoom,
128263                 utilAesEncrypt: utilAesEncrypt,
128264                 utilAesDecrypt: utilAesDecrypt,
128265                 utilArrayChunk: utilArrayChunk,
128266                 utilArrayDifference: utilArrayDifference,
128267                 utilArrayFlatten: utilArrayFlatten,
128268                 utilArrayGroupBy: utilArrayGroupBy,
128269                 utilArrayIntersection: utilArrayIntersection,
128270                 utilArrayUnion: utilArrayUnion,
128271                 utilArrayUniq: utilArrayUniq,
128272                 utilArrayUniqBy: utilArrayUniqBy,
128273                 utilAsyncMap: utilAsyncMap,
128274                 utilCleanTags: utilCleanTags,
128275                 utilDeepMemberSelector: utilDeepMemberSelector,
128276                 utilDetect: utilDetect,
128277                 utilDisplayName: utilDisplayName,
128278                 utilDisplayNameForPath: utilDisplayNameForPath,
128279                 utilDisplayType: utilDisplayType,
128280                 utilDisplayLabel: utilDisplayLabel,
128281                 utilEntityRoot: utilEntityRoot,
128282                 utilEditDistance: utilEditDistance,
128283                 utilEntitySelector: utilEntitySelector,
128284                 utilEntityOrMemberSelector: utilEntityOrMemberSelector,
128285                 utilEntityOrDeepMemberSelector: utilEntityOrDeepMemberSelector,
128286                 utilFastMouse: utilFastMouse,
128287                 utilFunctor: utilFunctor,
128288                 utilGetAllNodes: utilGetAllNodes,
128289                 utilGetSetValue: utilGetSetValue,
128290                 utilHashcode: utilHashcode,
128291                 utilHighlightEntities: utilHighlightEntities,
128292                 utilKeybinding: utilKeybinding,
128293                 utilNoAuto: utilNoAuto,
128294                 utilObjectOmit: utilObjectOmit,
128295                 utilPrefixCSSProperty: utilPrefixCSSProperty,
128296                 utilPrefixDOMProperty: utilPrefixDOMProperty,
128297                 utilPreset: utilPreset,
128298                 utilQsString: utilQsString,
128299                 utilRebind: utilRebind,
128300                 utilSafeClassName: utilSafeClassName,
128301                 utilSetTransform: utilSetTransform,
128302                 utilSessionMutex: utilSessionMutex,
128303                 utilStringQs: utilStringQs,
128304                 utilTagDiff: utilTagDiff,
128305                 utilTagText: utilTagText,
128306                 utilTiler: utilTiler,
128307                 utilTriggerEvent: utilTriggerEvent,
128308                 utilWrap: utilWrap,
128309                 validationAlmostJunction: validationAlmostJunction,
128310                 validationCloseNodes: validationCloseNodes,
128311                 validationCrossingWays: validationCrossingWays,
128312                 validationDisconnectedWay: validationDisconnectedWay,
128313                 validationFormatting: validationFormatting,
128314                 validationHelpRequest: validationHelpRequest,
128315                 validationImpossibleOneway: validationImpossibleOneway,
128316                 validationIncompatibleSource: validationIncompatibleSource,
128317                 validationMaprules: validationMaprules,
128318                 validationMismatchedGeometry: validationMismatchedGeometry,
128319                 validationMissingRole: validationMissingRole,
128320                 validationMissingTag: validationMissingTag,
128321                 validationOutdatedTags: validationOutdatedTags,
128322                 validationPrivateData: validationPrivateData,
128323                 validationSuspiciousName: validationSuspiciousName,
128324                 validationUnsquareWay: validationUnsquareWay
128325         });
128326
128327         // polyfill requestIdleCallback
128328         window.requestIdleCallback = window.requestIdleCallback ||
128329             function(cb) {
128330                 var start = Date.now();
128331                 return window.requestAnimationFrame(function() {
128332                     cb({
128333                         didTimeout: false,
128334                         timeRemaining: function() {
128335                             return Math.max(0, 50 - (Date.now() - start));
128336                         }
128337                     });
128338                 });
128339             };
128340
128341         window.cancelIdleCallback = window.cancelIdleCallback ||
128342             function(id) {
128343                 window.cancelAnimationFrame(id);
128344             };
128345         window.iD = iD;
128346
128347 }());
128348 //# sourceMappingURL=iD.js.map