PageSourceSearch

https://www.rfd.com/themes/user/reinos_maps/dist/maps.production.bundle.js

js rfd.com collected 2026-10-04 03:23:44 UTC 1,681,873 bytes, 55,291 lines download raw bytes

vendor: 5,598 bytes, lines 1-171
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
4/***/ 9669:
5/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6
7module.exports = __webpack_require__(51609);
8
9/***/ }),
10
11/***/ 55448:
12/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
13
14"use strict";
15
16
17var utils = __webpack_require__(64867);
18var settle = __webpack_require__(36026);
19var cookies = __webpack_require__(4372);
20var buildURL = __webpack_require__(15327);
21var buildFullPath = __webpack_require__(94097);
22var parseHeaders = __webpack_require__(84109);
23var isURLSameOrigin = __webpack_require__(67985);
24var transitionalDefaults = __webpack_require__(77874);
25var AxiosError = __webpack_require__(82648);
26var CanceledError = __webpack_require__(60644);
27var parseProtocol = __webpack_require__(90205);
28
29module.exports = function xhrAdapter(config) {
30  return new Promise(function dispatchXhrRequest(resolve, reject) {
31    var requestData = config.data;
32    var requestHeaders = config.headers;
33    var responseType = config.responseType;
34    var onCanceled;
35    function done() {
36      if (config.cancelToken) {
37        config.cancelToken.unsubscribe(onCanceled);
38      }
39
40      if (config.signal) {
41        config.signal.removeEventListener('abort', onCanceled);
42      }
43    }
44
45    if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) {
46      delete requestHeaders['Content-Type']; // Let the browser set it
47    }
48
49    var request = new XMLHttpRequest();
50
51    // HTTP basic authentication
52    if (config.auth) {
53      var username = config.auth.username || '';
54      var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
55      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
56    }
57
58    var fullPath = buildFullPath(config.baseURL, config.url);
59
60    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
61
62    // Set the request timeout in MS
63    request.timeout = config.timeout;
64
65    function onloadend() {
66      if (!request) {
67        return;
68      }
69      // Prepare the response
70      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
71      var responseData = !responseType || responseType === 'text' ||  responseType === 'json' ?
72        request.responseText : request.response;
73      var response = {
74        data: responseData,
75        status: request.status,
76        statusText: request.statusText,
77        headers: responseHeaders,
78        config: config,
79        request: request
80      };
81
82      settle(function _resolve(value) {
83        resolve(value);
84        done();
85      }, function _reject(err) {
86        reject(err);
87        done();
88      }, response);
89
90      // Clean up request
91      request = null;
92    }
93
94    if ('onloadend' in request) {
95      // Use onloadend if available
96      request.onloadend = onloadend;
97    } else {
98      // Listen for ready state to emulate onloadend
99      request.onreadystatechange = function handleLoad() {
100        if (!request || request.readyState !== 4) {
101          return;
102        }
103
104        // The request errored out and we didn't get a response, this will be
105        // handled by onerror instead
106        // With one exception: request that using file: protocol, most browsers
107        // will return status as 0 even though it's a successful request
108        if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
109          return;
110        }
111        // readystate handler is calling before onerror or ontimeout handlers,
112        // so we should call onloadend on the next 'tick'
113        setTimeout(onloadend);
114      };
115    }
116
117    // Handle browser request cancellation (as opposed to a manual cancellation)
118    request.onabort = function handleAbort() {
119      if (!request) {
120        return;
121      }
122
123      reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
124
125      // Clean up request
126      request = null;
127    };
128
129    // Handle low level network errors
130    request.onerror = function handleError() {
131      // Real errors are hidden from us by the browser
132      // onerror should only fire if it's a network error
133      reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request));
134
135      // Clean up request
136      request = null;
137    };
138
139    // Handle timeout
140    request.ontimeout = function handleTimeout() {
141      var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
142      var transitional = config.transitional || transitionalDefaults;
143      if (config.timeoutErrorMessage) {
144        timeoutErrorMessage = config.timeoutErrorMessage;
145      }
146      reject(new AxiosError(
147        timeoutErrorMessage,
148        transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
149        config,
150        request));
151
152      // Clean up request
153      request = null;
154    };
155
156    // Add xsrf header
157    // This is only done if running in a standard browser environment.
158    // Specifically not if we're in a web worker, or react-native.
159    if (utils.isStandardBrowserEnv()) {
160      // Add xsrf header
161      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
162        cookies.read(config.xsrfCookieName) :
163        undefined;
164
165      if (xsrfValue) {
166        requestHeaders[config.xsrfHeaderName] = xsrfValue;
167      }
168    }
169
170    // Add headers to the request
171    if ('setRequestHeader' in request) {
172      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
173        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
174          // Remove Content-Type if data is undefined
175          delete requestHeaders[key];
176        } else {
177          // Otherwise add header to the request
178          request.setRequestHeader(key, val);
179        }
180      });
181    }
182
183    // Add withCredentials to request if needed
184    if (!utils.isUndefined(config.withCredentials)) {
185      request.withCredentials = !!config.withCredentials;
186    }
187
188    // Add responseType to request if needed
189    if (responseType && responseType !== 'json') {
190      request.responseType = config.responseType;
191    }
192
193    // Handle progress if needed
194    if (typeof config.onDownloadProgress === 'function') {
195      request.addEventListener('progress', config.onDownloadProgress);
196    }
197
198    // Not all browsers support upload events
199    if (typeof config.onUploadProgress === 'function' && request.upload) {
200      request.upload.addEventListener('progress', config.onUploadProgress);
201    }
202
203    if (config.cancelToken || config.signal) {
204      // Handle cancellation
205      // eslint-disable-next-line func-names
206      onCanceled = function(cancel) {
207        if (!request) {
208          return;
209        }
210        reject(!cancel || (cancel && cancel.type) ? new CanceledError() : cancel);
211        request.abort();
212        request = null;
213      };
214
215      config.cancelToken && config.cancelToken.subscribe(onCanceled);
216      if (config.signal) {
217        config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
218      }
219    }
220
221    if (!requestData) {
222      requestData = null;
223    }
224
225    var protocol = parseProtocol(fullPath);
226
227    if (protocol && [ 'http', 'https', 'file' ].indexOf(protocol) === -1) {
228      reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
229      return;
230    }
231
232
233    // Send the request
234    request.send(requestData);
235  });
236};
237
238
239/***/ }),
240
241/***/ 51609:
242/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
243
244"use strict";
245
246
247var utils = __webpack_require__(64867);
248var bind = __webpack_require__(91849);
249var Axios = __webpack_require__(30321);
250var mergeConfig = __webpack_require__(47185);
251var defaults = __webpack_require__(45546);
252
253/**
254 * Create an instance of Axios
255 *
256 * @param {Object} defaultConfig The default config for the instance
257 * @return {Axios} A new instance of Axios
258 */
259function createInstance(defaultConfig) {
260  var context = new Axios(defaultConfig);
261  var instance = bind(Axios.prototype.request, context);
262
263  // Copy axios.prototype to instance
264  utils.extend(instance, Axios.prototype, context);
265
266  // Copy context to instance
267  utils.extend(instance, context);
268
269  // Factory for creating new instances
270  instance.create = function create(instanceConfig) {
271    return createInstance(mergeConfig(defaultConfig, instanceConfig));
272  };
273
274  return instance;
275}
276
277// Create the default instance to be exported
278var axios = createInstance(defaults);
279
280// Expose Axios class to allow class inheritance
281axios.Axios = Axios;
282
283// Expose Cancel & CancelToken
284axios.CanceledError = __webpack_require__(60644);
285axios.CancelToken = __webpack_require__(14972);
286axios.isCancel = __webpack_require__(26502);
287axios.VERSION = (__webpack_require__(97288).version);
288axios.toFormData = __webpack_require__(47675);
289
290// Expose AxiosError class
291axios.AxiosError = __webpack_require__(82648);
292
293// alias for CanceledError for backward compatibility
294axios.Cancel = axios.CanceledError;
295
296// Expose all/spread
297axios.all = function all(promises) {
298  return Promise.all(promises);
299};
300axios.spread = __webpack_require__(8713);
301
302// Expose isAxiosError
303axios.isAxiosError = __webpack_require__(16268);
304
305module.exports = axios;
306
307// Allow use of default import syntax in TypeScript
308module.exports["default"] = axios;
309
310
311/***/ }),
312
313/***/ 14972:
314/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
315
316"use strict";
317
318
319var CanceledError = __webpack_require__(60644);
320
321/**
322 * A `CancelToken` is an object that can be used to request cancellation of an operation.
323 *
324 * @class
325 * @param {Function} executor The executor function.
326 */
327function CancelToken(executor) {
328  if (typeof executor !== 'function') {
329    throw new TypeError('executor must be a function.');
330  }
331
332  var resolvePromise;
333
334  this.promise = new Promise(function promiseExecutor(resolve) {
335    resolvePromise = resolve;
336  });
337
338  var token = this;
339
340  // eslint-disable-next-line func-names
341  this.promise.then(function(cancel) {
342    if (!token._listeners) return;
343
344    var i;
345    var l = token._listeners.length;
346
347    for (i = 0; i < l; i++) {
348      token._listeners[i](cancel);
349    }
350    token._listeners = null;
351  });
352
353  // eslint-disable-next-line func-names
354  this.promise.then = function(onfulfilled) {
355    var _resolve;
356    // eslint-disable-next-line func-names
357    var promise = new Promise(function(resolve) {
358      token.subscribe(resolve);
359      _resolve = resolve;
360    }).then(onfulfilled);
361
362    promise.cancel = function reject() {
363      token.unsubscribe(_resolve);
364    };
365
366    return promise;
367  };
368
369  executor(function cancel(message) {
370    if (token.reason) {
371      // Cancellation has already been requested
372      return;
373    }
374
375    token.reason = new CanceledError(message);
376    resolvePromise(token.reason);
377  });
378}
379
380/**
381 * Throws a `CanceledError` if cancellation has been requested.
382 */
383CancelToken.prototype.throwIfRequested = function throwIfRequested() {
384  if (this.reason) {
385    throw this.reason;
386  }
387};
388
389/**
390 * Subscribe to the cancel signal
391 */
392
393CancelToken.prototype.subscribe = function subscribe(listener) {
394  if (this.reason) {
395    listener(this.reason);
396    return;
397  }
398
399  if (this._listeners) {
400    this._listeners.push(listener);
401  } else {
402    this._listeners = [listener];
403  }
404};
405
406/**
407 * Unsubscribe from the cancel signal
408 */
409
410CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
411  if (!this._listeners) {
412    return;
413  }
414  var index = this._listeners.indexOf(listener);
415  if (index !== -1) {
416    this._listeners.splice(index, 1);
417  }
418};
419
420/**
421 * Returns an object that contains a new `CancelToken` and a function that, when called,
422 * cancels the `CancelToken`.
423 */
424CancelToken.source = function source() {
425  var cancel;
426  var token = new CancelToken(function executor(c) {
427    cancel = c;
428  });
429  return {
430    token: token,
431    cancel: cancel
432  };
433};
434
435module.exports = CancelToken;
436
437
438/***/ }),
439
440/***/ 60644:
441/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
442
443"use strict";
444
445
446var AxiosError = __webpack_require__(82648);
447var utils = __webpack_require__(64867);
448
449/**
450 * A `CanceledError` is an object that is thrown when an operation is canceled.
451 *
452 * @class
453 * @param {string=} message The message.
454 */
455function CanceledError(message) {
456  // eslint-disable-next-line no-eq-null,eqeqeq
457  AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED);
458  this.name = 'CanceledError';
459}
460
461utils.inherits(CanceledError, AxiosError, {
462  __CANCEL__: true
463});
464
465module.exports = CanceledError;
466
467
468/***/ }),
469
470/***/ 26502:
471/***/ ((module) => {
472
473"use strict";
474
475
476module.exports = function isCancel(value) {
477  return !!(value && value.__CANCEL__);
478};
479
480
481/***/ }),
482
483/***/ 30321:
484/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
485
486"use strict";
487
488
489var utils = __webpack_require__(64867);
490var buildURL = __webpack_require__(15327);
491var InterceptorManager = __webpack_require__(80782);
492var dispatchRequest = __webpack_require__(13572);
493var mergeConfig = __webpack_require__(47185);
vendor: 5,570 bytes, lines 494-694
494var buildFullPath = __webpack_require__(94097);
495var validator = __webpack_require__(54875);
496
497var validators = validator.validators;
498/**
499 * Create a new instance of Axios
500 *
501 * @param {Object} instanceConfig The default config for the instance
502 */
503function Axios(instanceConfig) {
504  this.defaults = instanceConfig;
505  this.interceptors = {
506    request: new InterceptorManager(),
507    response: new InterceptorManager()
508  };
509}
510
511/**
512 * Dispatch a request
513 *
514 * @param {Object} config The config specific for this request (merged with this.defaults)
515 */
516Axios.prototype.request = function request(configOrUrl, config) {
517  /*eslint no-param-reassign:0*/
518  // Allow for axios('example/url'[, config]) a la fetch API
519  if (typeof configOrUrl === 'string') {
520    config = config || {};
521    config.url = configOrUrl;
522  } else {
523    config = configOrUrl || {};
524  }
525
526  config = mergeConfig(this.defaults, config);
527
528  // Set config.method
529  if (config.method) {
530    config.method = config.method.toLowerCase();
531  } else if (this.defaults.method) {
532    config.method = this.defaults.method.toLowerCase();
533  } else {
534    config.method = 'get';
535  }
536
537  var transitional = config.transitional;
538
539  if (transitional !== undefined) {
540    validator.assertOptions(transitional, {
541      silentJSONParsing: validators.transitional(validators.boolean),
542      forcedJSONParsing: validators.transitional(validators.boolean),
543      clarifyTimeoutError: validators.transitional(validators.boolean)
544    }, false);
545  }
546
547  // filter out skipped interceptors
548  var requestInterceptorChain = [];
549  var synchronousRequestInterceptors = true;
550  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
551    if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
552      return;
553    }
554
555    synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
556
557    requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
558  });
559
560  var responseInterceptorChain = [];
561  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
562    responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
563  });
564
565  var promise;
566
567  if (!synchronousRequestInterceptors) {
568    var chain = [dispatchRequest, undefined];
569
570    Array.prototype.unshift.apply(chain, requestInterceptorChain);
571    chain = chain.concat(responseInterceptorChain);
572
573    promise = Promise.resolve(config);
574    while (chain.length) {
575      promise = promise.then(chain.shift(), chain.shift());
576    }
577
578    return promise;
579  }
580
581
582  var newConfig = config;
583  while (requestInterceptorChain.length) {
584    var onFulfilled = requestInterceptorChain.shift();
585    var onRejected = requestInterceptorChain.shift();
586    try {
587      newConfig = onFulfilled(newConfig);
588    } catch (error) {
589      onRejected(error);
590      break;
591    }
592  }
593
594  try {
595    promise = dispatchRequest(newConfig);
596  } catch (error) {
597    return Promise.reject(error);
598  }
599
600  while (responseInterceptorChain.length) {
601    promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
602  }
603
604  return promise;
605};
606
607Axios.prototype.getUri = function getUri(config) {
608  config = mergeConfig(this.defaults, config);
609  var fullPath = buildFullPath(config.baseURL, config.url);
610  return buildURL(fullPath, config.params, config.paramsSerializer);
611};
612
613// Provide aliases for supported request methods
614utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
615  /*eslint func-names:0*/
616  Axios.prototype[method] = function(url, config) {
617    return this.request(mergeConfig(config || {}, {
618      method: method,
619      url: url,
620      data: (config || {}).data
621    }));
622  };
623});
624
625utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
626  /*eslint func-names:0*/
627
628  function generateHTTPMethod(isForm) {
629    return function httpMethod(url, data, config) {
630      return this.request(mergeConfig(config || {}, {
631        method: method,
632        headers: isForm ? {
633          'Content-Type': 'multipart/form-data'
634        } : {},
635        url: url,
636        data: data
637      }));
638    };
639  }
640
641  Axios.prototype[method] = generateHTTPMethod();
642
643  Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
644});
645
646module.exports = Axios;
647
648
649/***/ }),
650
651/***/ 82648:
652/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
653
654"use strict";
655
656
657var utils = __webpack_require__(64867);
658
659/**
660 * Create an Error with the specified message, config, error code, request and response.
661 *
662 * @param {string} message The error message.
663 * @param {string} [code] The error code (for example, 'ECONNABORTED').
664 * @param {Object} [config] The config.
665 * @param {Object} [request] The request.
666 * @param {Object} [response] The response.
667 * @returns {Error} The created error.
668 */
669function AxiosError(message, code, config, request, response) {
670  Error.call(this);
671  this.message = message;
672  this.name = 'AxiosError';
673  code && (this.code = code);
674  config && (this.config = config);
675  request && (this.request = request);
676  response && (this.response = response);
677}
678
679utils.inherits(AxiosError, Error, {
680  toJSON: function toJSON() {
681    return {
682      // Standard
683      message: this.message,
684      name: this.name,
685      // Microsoft
686      description: this.description,
687      number: this.number,
688      // Mozilla
689      fileName: this.fileName,
690      lineNumber: this.lineNumber,
691      columnNumber: this.columnNumber,
692      stack: this.stack,
693      // Axios
694      config: this.config,
vendor: 9,384 bytes, lines 695-1053
695      code: this.code,
696      status: this.response && this.response.status ? this.response.status : null
697    };
698  }
699});
700
701var prototype = AxiosError.prototype;
702var descriptors = {};
703
704[
705  'ERR_BAD_OPTION_VALUE',
706  'ERR_BAD_OPTION',
707  'ECONNABORTED',
708  'ETIMEDOUT',
709  'ERR_NETWORK',
710  'ERR_FR_TOO_MANY_REDIRECTS',
711  'ERR_DEPRECATED',
712  'ERR_BAD_RESPONSE',
713  'ERR_BAD_REQUEST',
714  'ERR_CANCELED'
715// eslint-disable-next-line func-names
716].forEach(function(code) {
717  descriptors[code] = {value: code};
718});
719
720Object.defineProperties(AxiosError, descriptors);
721Object.defineProperty(prototype, 'isAxiosError', {value: true});
722
723// eslint-disable-next-line func-names
724AxiosError.from = function(error, code, config, request, response, customProps) {
725  var axiosError = Object.create(prototype);
726
727  utils.toFlatObject(error, axiosError, function filter(obj) {
728    return obj !== Error.prototype;
729  });
730
731  AxiosError.call(axiosError, error.message, code, config, request, response);
732
733  axiosError.name = error.name;
734
735  customProps && Object.assign(axiosError, customProps);
736
737  return axiosError;
738};
739
740module.exports = AxiosError;
741
742
743/***/ }),
744
745/***/ 80782:
746/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
747
748"use strict";
749
750
751var utils = __webpack_require__(64867);
752
753function InterceptorManager() {
754  this.handlers = [];
755}
756
757/**
758 * Add a new interceptor to the stack
759 *
760 * @param {Function} fulfilled The function to handle `then` for a `Promise`
761 * @param {Function} rejected The function to handle `reject` for a `Promise`
762 *
763 * @return {Number} An ID used to remove interceptor later
764 */
765InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
766  this.handlers.push({
767    fulfilled: fulfilled,
768    rejected: rejected,
769    synchronous: options ? options.synchronous : false,
770    runWhen: options ? options.runWhen : null
771  });
772  return this.handlers.length - 1;
773};
774
775/**
776 * Remove an interceptor from the stack
777 *
778 * @param {Number} id The ID that was returned by `use`
779 */
780InterceptorManager.prototype.eject = function eject(id) {
781  if (this.handlers[id]) {
782    this.handlers[id] = null;
783  }
784};
785
786/**
787 * Iterate over all the registered interceptors
788 *
789 * This method is particularly useful for skipping over any
790 * interceptors that may have become `null` calling `eject`.
791 *
792 * @param {Function} fn The function to call for each interceptor
793 */
794InterceptorManager.prototype.forEach = function forEach(fn) {
795  utils.forEach(this.handlers, function forEachHandler(h) {
796    if (h !== null) {
797      fn(h);
798    }
799  });
800};
801
802module.exports = InterceptorManager;
803
804
805/***/ }),
806
807/***/ 94097:
808/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
809
810"use strict";
811
812
813var isAbsoluteURL = __webpack_require__(91793);
814var combineURLs = __webpack_require__(7303);
815
816/**
817 * Creates a new URL by combining the baseURL with the requestedURL,
818 * only when the requestedURL is not already an absolute URL.
819 * If the requestURL is absolute, this function returns the requestedURL untouched.
820 *
821 * @param {string} baseURL The base URL
822 * @param {string} requestedURL Absolute or relative URL to combine
823 * @returns {string} The combined full path
824 */
825module.exports = function buildFullPath(baseURL, requestedURL) {
826  if (baseURL && !isAbsoluteURL(requestedURL)) {
827    return combineURLs(baseURL, requestedURL);
828  }
829  return requestedURL;
830};
831
832
833/***/ }),
834
835/***/ 13572:
836/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
837
838"use strict";
839
840
841var utils = __webpack_require__(64867);
842var transformData = __webpack_require__(18527);
843var isCancel = __webpack_require__(26502);
844var defaults = __webpack_require__(45546);
845var CanceledError = __webpack_require__(60644);
846
847/**
848 * Throws a `CanceledError` if cancellation has been requested.
849 */
850function throwIfCancellationRequested(config) {
851  if (config.cancelToken) {
852    config.cancelToken.throwIfRequested();
853  }
854
855  if (config.signal && config.signal.aborted) {
856    throw new CanceledError();
857  }
858}
859
860/**
861 * Dispatch a request to the server using the configured adapter.
862 *
863 * @param {object} config The config that is to be used for the request
864 * @returns {Promise} The Promise to be fulfilled
865 */
866module.exports = function dispatchRequest(config) {
867  throwIfCancellationRequested(config);
868
869  // Ensure headers exist
870  config.headers = config.headers || {};
871
872  // Transform request data
873  config.data = transformData.call(
874    config,
875    config.data,
876    config.headers,
877    config.transformRequest
878  );
879
880  // Flatten headers
881  config.headers = utils.merge(
882    config.headers.common || {},
883    config.headers[config.method] || {},
884    config.headers
885  );
886
887  utils.forEach(
888    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
889    function cleanHeaderConfig(method) {
890      delete config.headers[method];
891    }
892  );
893
894  var adapter = config.adapter || defaults.adapter;
895
896  return adapter(config).then(function onAdapterResolution(response) {
897    throwIfCancellationRequested(config);
898
899    // Transform response data
900    response.data = transformData.call(
901      config,
902      response.data,
903      response.headers,
904      config.transformResponse
905    );
906
907    return response;
908  }, function onAdapterRejection(reason) {
909    if (!isCancel(reason)) {
910      throwIfCancellationRequested(config);
911
912      // Transform response data
913      if (reason && reason.response) {
914        reason.response.data = transformData.call(
915          config,
916          reason.response.data,
917          reason.response.headers,
918          config.transformResponse
919        );
920      }
921    }
922
923    return Promise.reject(reason);
924  });
925};
926
927
928/***/ }),
929
930/***/ 47185:
931/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
932
933"use strict";
934
935
936var utils = __webpack_require__(64867);
937
938/**
939 * Config-specific merge-function which creates a new config-object
940 * by merging two configuration objects together.
941 *
942 * @param {Object} config1
943 * @param {Object} config2
944 * @returns {Object} New object resulting from merging config2 to config1
945 */
946module.exports = function mergeConfig(config1, config2) {
947  // eslint-disable-next-line no-param-reassign
948  config2 = config2 || {};
949  var config = {};
950
951  function getMergedValue(target, source) {
952    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
953      return utils.merge(target, source);
954    } else if (utils.isPlainObject(source)) {
955      return utils.merge({}, source);
956    } else if (utils.isArray(source)) {
957      return source.slice();
958    }
959    return source;
960  }
961
962  // eslint-disable-next-line consistent-return
963  function mergeDeepProperties(prop) {
964    if (!utils.isUndefined(config2[prop])) {
965      return getMergedValue(config1[prop], config2[prop]);
966    } else if (!utils.isUndefined(config1[prop])) {
967      return getMergedValue(undefined, config1[prop]);
968    }
969  }
970
971  // eslint-disable-next-line consistent-return
972  function valueFromConfig2(prop) {
973    if (!utils.isUndefined(config2[prop])) {
974      return getMergedValue(undefined, config2[prop]);
975    }
976  }
977
978  // eslint-disable-next-line consistent-return
979  function defaultToConfig2(prop) {
980    if (!utils.isUndefined(config2[prop])) {
981      return getMergedValue(undefined, config2[prop]);
982    } else if (!utils.isUndefined(config1[prop])) {
983      return getMergedValue(undefined, config1[prop]);
984    }
985  }
986
987  // eslint-disable-next-line consistent-return
988  function mergeDirectKeys(prop) {
989    if (prop in config2) {
990      return getMergedValue(config1[prop], config2[prop]);
991    } else if (prop in config1) {
992      return getMergedValue(undefined, config1[prop]);
993    }
994  }
995
996  var mergeMap = {
997    'url': valueFromConfig2,
998    'method': valueFromConfig2,
999    'data': valueFromConfig2,
1000    'baseURL': defaultToConfig2,
1001    'transformRequest': defaultToConfig2,
1002    'transformResponse': defaultToConfig2,
1003    'paramsSerializer': defaultToConfig2,
1004    'timeout': defaultToConfig2,
1005    'timeoutMessage': defaultToConfig2,
1006    'withCredentials': defaultToConfig2,
1007    'adapter': defaultToConfig2,
1008    'responseType': defaultToConfig2,
1009    'xsrfCookieName': defaultToConfig2,
1010    'xsrfHeaderName': defaultToConfig2,
1011    'onUploadProgress': defaultToConfig2,
1012    'onDownloadProgress': defaultToConfig2,
1013    'decompress': defaultToConfig2,
1014    'maxContentLength': defaultToConfig2,
1015    'maxBodyLength': defaultToConfig2,
1016    'beforeRedirect': defaultToConfig2,
1017    'transport': defaultToConfig2,
1018    'httpAgent': defaultToConfig2,
1019    'httpsAgent': defaultToConfig2,
1020    'cancelToken': defaultToConfig2,
1021    'socketPath': defaultToConfig2,
1022    'responseEncoding': defaultToConfig2,
1023    'validateStatus': mergeDirectKeys
1024  };
1025
1026  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
1027    var merge = mergeMap[prop] || mergeDeepProperties;
1028    var configValue = merge(prop);
1029    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
1030  });
1031
1032  return config;
1033};
1034
1035
1036/***/ }),
1037
1038/***/ 36026:
1039/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1040
1041"use strict";
1042
1043
1044var AxiosError = __webpack_require__(82648);
1045
1046/**
1047 * Resolve or reject a Promise based on response status.
1048 *
1049 * @param {Function} resolve A function that resolves the promise.
1050 * @param {Function} reject A function that rejects the promise.
1051 * @param {object} response The response.
1052 */
1053module.exports = function settle(resolve, reject, response) {
1054  var validateStatus = response.config.validateStatus;
1055  if (!response.status || !validateStatus || validateStatus(response.status)) {
1056    resolve(response);
1057  } else {
1058    reject(new AxiosError(
1059      'Request failed with status code ' + response.status,
1060      [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
1061      response.config,
1062      response.request,
1063      response
1064    ));
1065  }
1066};
1067
1068
1069/***/ }),
1070
1071/***/ 18527:
1072/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1073
1074"use strict";
1075
1076
1077var utils = __webpack_require__(64867);
1078var defaults = __webpack_require__(45546);
1079
1080/**
1081 * Transform the data for a request or a response
1082 *
1083 * @param {Object|String} data The data to be transformed
1084 * @param {Array} headers The headers for the request or response
1085 * @param {Array|Function} fns A single function or Array of functions
1086 * @returns {*} The resulting transformed data
1087 */
1088module.exports = function transformData(data, headers, fns) {
1089  var context = this || defaults;
1090  /*eslint no-param-reassign:0*/
1091  utils.forEach(fns, function transform(fn) {
1092    data = fn.call(context, data, headers);
1093  });
1094
1095  return data;
1096};
1097
1098
1099/***/ }),
1100
1101/***/ 45546:
1102/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1103
1104"use strict";
1105
1106
1107var utils = __webpack_require__(64867);
1108var normalizeHeaderName = __webpack_require__(16016);
1109var AxiosError = __webpack_require__(82648);
1110var transitionalDefaults = __webpack_require__(77874);
1111var toFormData = __webpack_require__(47675);
1112
1113var DEFAULT_CONTENT_TYPE = {
1114  'Content-Type': 'application/x-www-form-urlencoded'
1115};
1116
1117function setContentTypeIfUnset(headers, value) {
1118  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
1119    headers['Content-Type'] = value;
1120  }
1121}
1122
1123function getDefaultAdapter() {
1124  var adapter;
1125  if (typeof XMLHttpRequest !== 'undefined') {
1126    // For browsers use XHR adapter
1127    adapter = __webpack_require__(55448);
1128  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
1129    // For node use HTTP adapter
1130    adapter = __webpack_require__(55448);
1131  }
1132  return adapter;
1133}
1134
1135function stringifySafely(rawValue, parser, encoder) {
1136  if (utils.isString(rawValue)) {
1137    try {
1138      (parser || JSON.parse)(rawValue);
1139      return utils.trim(rawValue);
1140    } catch (e) {
1141      if (e.name !== 'SyntaxError') {
1142        throw e;
1143      }
1144    }
1145  }
1146
1147  return (encoder || JSON.stringify)(rawValue);
1148}
1149
1150var defaults = {
1151
1152  transitional: transitionalDefaults,
1153
1154  adapter: getDefaultAdapter(),
1155
1156  transformRequest: [function transformRequest(data, headers) {
1157    normalizeHeaderName(headers, 'Accept');
1158    normalizeHeaderName(headers, 'Content-Type');
1159
1160    if (utils.isFormData(data) ||
1161      utils.isArrayBuffer(data) ||
1162      utils.isBuffer(data) ||
1163      utils.isStream(data) ||
1164      utils.isFile(data) ||
1165      utils.isBlob(data)
1166    ) {
1167      return data;
1168    }
1169    if (utils.isArrayBufferView(data)) {
1170      return data.buffer;
1171    }
1172    if (utils.isURLSearchParams(data)) {
1173      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
1174      return data.toString();
1175    }
1176
1177    var isObjectPayload = utils.isObject(data);
1178    var contentType = headers && headers['Content-Type'];
1179
1180    var isFileList;
1181
1182    if ((isFileList = utils.isFileList(data)) || (isObjectPayload && contentType === 'multipart/form-data')) {
1183      var _FormData = this.env && this.env.FormData;
1184      return toFormData(isFileList ? {'files[]': data} : data, _FormData && new _FormData());
1185    } else if (isObjectPayload || contentType === 'application/json') {
1186      setContentTypeIfUnset(headers, 'application/json');
1187      return stringifySafely(data);
1188    }
1189
1190    return data;
1191  }],
1192
1193  transformResponse: [function transformResponse(data) {
1194    var transitional = this.transitional || defaults.transitional;
1195    var silentJSONParsing = transitional && transitional.silentJSONParsing;
1196    var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
1197    var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
1198
1199    if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
1200      try {
1201        return JSON.parse(data);
1202      } catch (e) {
1203        if (strictJSONParsing) {
1204          if (e.name === 'SyntaxError') {
1205            throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
1206          }
1207          throw e;
1208        }
1209      }
1210    }
1211
1212    return data;
1213  }],
1214
1215  /**
1216   * A timeout in milliseconds to abort a request. If set to 0 (default) a
1217   * timeout is not created.
1218   */
1219  timeout: 0,
1220
1221  xsrfCookieName: 'XSRF-TOKEN',
1222  xsrfHeaderName: 'X-XSRF-TOKEN',
1223
1224  maxContentLength: -1,
1225  maxBodyLength: -1,
1226
1227  env: {
1228    FormData: __webpack_require__(91623)
1229  },
1230
1231  validateStatus: function validateStatus(status) {
1232    return status >= 200 && status < 300;
1233  },
1234
1235  headers: {
1236    common: {
1237      'Accept': 'application/json, text/plain, */*'
1238    }
1239  }
1240};
1241
1242utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
1243  defaults.headers[method] = {};
1244});
1245
1246utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
1247  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
1248});
1249
1250module.exports = defaults;
1251
1252
1253/***/ }),
1254
1255/***/ 77874:
1256/***/ ((module) => {
1257
1258"use strict";
1259
1260
1261module.exports = {
1262  silentJSONParsing: true,
1263  forcedJSONParsing: true,
1264  clarifyTimeoutError: false
1265};
1266
1267
1268/***/ }),
1269
1270/***/ 97288:
1271/***/ ((module) => {
1272
1273module.exports = {
1274  "version": "0.27.2"
1275};
1276
1277/***/ }),
1278
1279/***/ 91849:
1280/***/ ((module) => {
1281
1282"use strict";
1283
1284
1285module.exports = function bind(fn, thisArg) {
1286  return function wrap() {
1287    var args = new Array(arguments.length);
1288    for (var i = 0; i < args.length; i++) {
1289      args[i] = arguments[i];
1290    }
1291    return fn.apply(thisArg, args);
1292  };
1293};
1294
1295
1296/***/ }),
1297
1298/***/ 15327:
1299/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1300
1301"use strict";
1302
1303
1304var utils = __webpack_require__(64867);
1305
1306function encode(val) {
1307  return encodeURIComponent(val).
1308    replace(/%3A/gi, ':').
1309    replace(/%24/g, '$').
1310    replace(/%2C/gi, ',').
1311    replace(/%20/g, '+').
1312    replace(/%5B/gi, '[').
1313    replace(/%5D/gi, ']');
1314}
1315
1316/**
1317 * Build a URL by appending params to the end
1318 *
1319 * @param {string} url The base of the url (e.g., http://www.google.com)
1320 * @param {object} [params] The params to be appended
1321 * @returns {string} The formatted url
1322 */
1323module.exports = function buildURL(url, params, paramsSerializer) {
1324  /*eslint no-param-reassign:0*/
1325  if (!params) {
1326    return url;
1327  }
1328
1329  var serializedParams;
1330  if (paramsSerializer) {
1331    serializedParams = paramsSerializer(params);
1332  } else if (utils.isURLSearchParams(params)) {
1333    serializedParams = params.toString();
1334  } else {
1335    var parts = [];
1336
1337    utils.forEach(params, function serialize(val, key) {
1338      if (val === null || typeof val === 'undefined') {
1339        return;
1340      }
1341
1342      if (utils.isArray(val)) {
1343        key = key + '[]';
1344      } else {
1345        val = [val];
1346      }
1347
1348      utils.forEach(val, function parseValue(v) {
1349        if (utils.isDate(v)) {
1350          v = v.toISOString();
1351        } else if (utils.isObject(v)) {
1352          v = JSON.stringify(v);
1353        }
1354        parts.push(encode(key) + '=' + encode(v));
1355      });
1356    });
1357
1358    serializedParams = parts.join('&');
1359  }
1360
1361  if (serializedParams) {
1362    var hashmarkIndex = url.indexOf('#');
1363    if (hashmarkIndex !== -1) {
1364      url = url.slice(0, hashmarkIndex);
1365    }
1366
1367    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
1368  }
1369
1370  return url;
1371};
1372
1373
1374/***/ }),
1375
1376/***/ 7303:
1377/***/ ((module) => {
1378
1379"use strict";
1380
1381
1382/**
1383 * Creates a new URL by combining the specified URLs
1384 *
1385 * @param {string} baseURL The base URL
1386 * @param {string} relativeURL The relative URL
1387 * @returns {string} The combined URL
1388 */
1389module.exports = function combineURLs(baseURL, relativeURL) {
1390  return relativeURL
1391    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
1392    : baseURL;
1393};
1394
1395
1396/***/ }),
1397
1398/***/ 4372:
1399/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1400
1401"use strict";
1402
1403
1404var utils = __webpack_require__(64867);
1405
1406module.exports = (
1407  utils.isStandardBrowserEnv() ?
1408
1409  // Standard browser envs support document.cookie
1410    (function standardBrowserEnv() {
1411      return {
1412        write: function write(name, value, expires, path, domain, secure) {
1413          var cookie = [];
1414          cookie.push(name + '=' + encodeURIComponent(value));
1415
1416          if (utils.isNumber(expires)) {
1417            cookie.push('expires=' + new Date(expires).toGMTString());
1418          }
1419
1420          if (utils.isString(path)) {
1421            cookie.push('path=' + path);
1422          }
1423
1424          if (utils.isString(domain)) {
1425            cookie.push('domain=' + domain);
1426          }
1427
1428          if (secure === true) {
1429            cookie.push('secure');
1430          }
1431
1432          document.cookie = cookie.join('; ');
1433        },
1434
1435        read: function read(name) {
1436          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
1437          return (match ? decodeURIComponent(match[3]) : null);
1438        },
1439
1440        remove: function remove(name) {
1441          this.write(name, '', Date.now() - 86400000);
1442        }
1443      };
1444    })() :
1445
1446  // Non standard browser env (web workers, react-native) lack needed support.
1447    (function nonStandardBrowserEnv() {
1448      return {
1449        write: function write() {},
1450        read: function read() { return null; },
1451        remove: function remove() {}
1452      };
1453    })()
1454);
1455
1456
1457/***/ }),
1458
1459/***/ 91793:
1460/***/ ((module) => {
1461
1462"use strict";
1463
1464
1465/**
1466 * Determines whether the specified URL is absolute
1467 *
1468 * @param {string} url The URL to test
1469 * @returns {boolean} True if the specified URL is absolute, otherwise false
1470 */
1471module.exports = function isAbsoluteURL(url) {
1472  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
1473  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
1474  // by any combination of letters, digits, plus, period, or hyphen.
1475  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
1476};
1477
1478
1479/***/ }),
1480
1481/***/ 16268:
1482/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1483
1484"use strict";
1485
1486
1487var utils = __webpack_require__(64867);
1488
1489/**
1490 * Determines whether the payload is an error thrown by Axios
1491 *
1492 * @param {*} payload The value to test
1493 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
1494 */
1495module.exports = function isAxiosError(payload) {
1496  return utils.isObject(payload) && (payload.isAxiosError === true);
1497};
1498
1499
1500/***/ }),
1501
1502/***/ 67985:
1503/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1504
1505"use strict";
1506
1507
1508var utils = __webpack_require__(64867);
1509
1510module.exports = (
1511  utils.isStandardBrowserEnv() ?
1512
vendor: 3,832 bytes, lines 1513-1646
1513  // Standard browser envs have full support of the APIs needed to test
1514  // whether the request URL is of the same origin as current location.
1515    (function standardBrowserEnv() {
1516      var msie = /(msie|trident)/i.test(navigator.userAgent);
1517      var urlParsingNode = document.createElement('a');
1518      var originURL;
1519
1520      /**
1521    * Parse a URL to discover it's components
1522    *
1523    * @param {String} url The URL to be parsed
1524    * @returns {Object}
1525    */
1526      function resolveURL(url) {
1527        var href = url;
1528
1529        if (msie) {
1530        // IE needs attribute set twice to normalize properties
1531          urlParsingNode.setAttribute('href', href);
1532          href = urlParsingNode.href;
1533        }
1534
1535        urlParsingNode.setAttribute('href', href);
1536
1537        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
1538        return {
1539          href: urlParsingNode.href,
1540          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
1541          host: urlParsingNode.host,
1542          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
1543          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
1544          hostname: urlParsingNode.hostname,
1545          port: urlParsingNode.port,
1546          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
1547            urlParsingNode.pathname :
1548            '/' + urlParsingNode.pathname
1549        };
1550      }
1551
1552      originURL = resolveURL(window.location.href);
1553
1554      /**
1555    * Determine if a URL shares the same origin as the current location
1556    *
1557    * @param {String} requestURL The URL to test
1558    * @returns {boolean} True if URL shares the same origin, otherwise false
1559    */
1560      return function isURLSameOrigin(requestURL) {
1561        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
1562        return (parsed.protocol === originURL.protocol &&
1563            parsed.host === originURL.host);
1564      };
1565    })() :
1566
1567  // Non standard browser envs (web workers, react-native) lack needed support.
1568    (function nonStandardBrowserEnv() {
1569      return function isURLSameOrigin() {
1570        return true;
1571      };
1572    })()
1573);
1574
1575
1576/***/ }),
1577
1578/***/ 16016:
1579/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1580
1581"use strict";
1582
1583
1584var utils = __webpack_require__(64867);
1585
1586module.exports = function normalizeHeaderName(headers, normalizedName) {
1587  utils.forEach(headers, function processHeader(value, name) {
1588    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
1589      headers[normalizedName] = value;
1590      delete headers[name];
1591    }
1592  });
1593};
1594
1595
1596/***/ }),
1597
1598/***/ 91623:
1599/***/ ((module) => {
1600
1601// eslint-disable-next-line strict
1602module.exports = null;
1603
1604
1605/***/ }),
1606
1607/***/ 84109:
1608/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1609
1610"use strict";
1611
1612
1613var utils = __webpack_require__(64867);
1614
1615// Headers whose duplicates are ignored by node
1616// c.f. https://nodejs.org/api/http.html#http_message_headers
1617var ignoreDuplicateOf = [
1618  'age', 'authorization', 'content-length', 'content-type', 'etag',
1619  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
1620  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
1621  'referer', 'retry-after', 'user-agent'
1622];
1623
1624/**
1625 * Parse headers into an object
1626 *
1627 * ```
1628 * Date: Wed, 27 Aug 2014 08:58:49 GMT
1629 * Content-Type: application/json
1630 * Connection: keep-alive
1631 * Transfer-Encoding: chunked
1632 * ```
1633 *
1634 * @param {String} headers Headers needing to be parsed
1635 * @returns {Object} Headers parsed into an object
1636 */
1637module.exports = function parseHeaders(headers) {
1638  var parsed = {};
1639  var key;
1640  var val;
1641  var i;
1642
1643  if (!headers) { return parsed; }
1644
1645  utils.forEach(headers.split('\n'), function parser(line) {
1646    i = line.indexOf(':');
1647    key = utils.trim(line.substr(0, i)).toLowerCase();
1648    val = utils.trim(line.substr(i + 1));
1649
1650    if (key) {
1651      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
1652        return;
1653      }
1654      if (key === 'set-cookie') {
1655        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
1656      } else {
1657        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
1658      }
1659    }
1660  });
1661
1662  return parsed;
1663};
1664
1665
1666/***/ }),
1667
1668/***/ 90205:
1669/***/ ((module) => {
1670
1671"use strict";
1672
1673
1674module.exports = function parseProtocol(url) {
1675  var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
1676  return match && match[1] || '';
1677};
1678
1679
1680/***/ }),
1681
1682/***/ 8713:
1683/***/ ((module) => {
1684
1685"use strict";
1686
1687
1688/**
1689 * Syntactic sugar for invoking a function and expanding an array for arguments.
1690 *
1691 * Common use case would be to use `Function.prototype.apply`.
1692 *
1693 *  ```js
1694 *  function f(x, y, z) {}
1695 *  var args = [1, 2, 3];
1696 *  f.apply(null, args);
1697 *  ```
1698 *
1699 * With `spread` this example can be re-written.
1700 *
1701 *  ```js
1702 *  spread(function(x, y, z) {})([1, 2, 3]);
1703 *  ```
1704 *
1705 * @param {Function} callback
1706 * @returns {Function}
1707 */
1708module.exports = function spread(callback) {
1709  return function wrap(arr) {
1710    return callback.apply(null, arr);
1711  };
1712};
1713
1714
1715/***/ }),
1716
1717/***/ 47675:
1718/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1719
1720"use strict";
1721
1722
1723var utils = __webpack_require__(64867);
1724
1725/**
1726 * Convert a data object to FormData
1727 * @param {Object} obj
1728 * @param {?Object} [formData]
1729 * @returns {Object}
1730 **/
1731
1732function toFormData(obj, formData) {
1733  // eslint-disable-next-line no-param-reassign
1734  formData = formData || new FormData();
1735
1736  var stack = [];
1737
1738  function convertValue(value) {
1739    if (value === null) return '';
1740
1741    if (utils.isDate(value)) {
1742      return value.toISOString();
1743    }
1744
1745    if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
1746      return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
1747    }
1748
1749    return value;
1750  }
1751
1752  function build(data, parentKey) {
1753    if (utils.isPlainObject(data) || utils.isArray(data)) {
1754      if (stack.indexOf(data) !== -1) {
1755        throw Error('Circular reference detected in ' + parentKey);
1756      }
1757
1758      stack.push(data);
1759
1760      utils.forEach(data, function each(value, key) {
1761        if (utils.isUndefined(value)) return;
1762        var fullKey = parentKey ? parentKey + '.' + key : key;
1763        var arr;
1764
1765        if (value && !parentKey && typeof value === 'object') {
1766          if (utils.endsWith(key, '{}')) {
1767            // eslint-disable-next-line no-param-reassign
1768            value = JSON.stringify(value);
1769          } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) {
1770            // eslint-disable-next-line func-names
1771            arr.forEach(function(el) {
1772              !utils.isUndefined(el) && formData.append(fullKey, convertValue(el));
1773            });
1774            return;
1775          }
1776        }
1777
1778        build(value, fullKey);
1779      });
1780
1781      stack.pop();
1782    } else {
1783      formData.append(parentKey, convertValue(data));
1784    }
1785  }
1786
1787  build(obj);
1788
1789  return formData;
1790}
1791
1792module.exports = toFormData;
1793
1794
1795/***/ }),
1796
1797/***/ 54875:
1798/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1799
1800"use strict";
1801
1802
1803var VERSION = (__webpack_require__(97288).version);
1804var AxiosError = __webpack_require__(82648);
1805
1806var validators = {};
1807
1808// eslint-disable-next-line func-names
1809['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
1810  validators[type] = function validator(thing) {
1811    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
1812  };
1813});
1814
1815var deprecatedWarnings = {};
1816
1817/**
1818 * Transitional option validator
1819 * @param {function|boolean?} validator - set to false if the transitional option has been removed
1820 * @param {string?} version - deprecated version / removed since version
1821 * @param {string?} message - some message with additional info
1822 * @returns {function}
1823 */
1824validators.transitional = function transitional(validator, version, message) {
1825  function formatMessage(opt, desc) {
1826    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
1827  }
1828
1829  // eslint-disable-next-line func-names
1830  return function(value, opt, opts) {
1831    if (validator === false) {
1832      throw new AxiosError(
1833        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
1834        AxiosError.ERR_DEPRECATED
1835      );
1836    }
1837
1838    if (version && !deprecatedWarnings[opt]) {
1839      deprecatedWarnings[opt] = true;
1840      // eslint-disable-next-line no-console
1841      console.warn(
1842        formatMessage(
1843          opt,
1844          ' has been deprecated since v' + version + ' and will be removed in the near future'
1845        )
1846      );
1847    }
1848
1849    return validator ? validator(value, opt, opts) : true;
1850  };
1851};
1852
1853/**
1854 * Assert object's properties type
1855 * @param {object} options
1856 * @param {object} schema
1857 * @param {boolean?} allowUnknown
1858 */
1859
1860function assertOptions(options, schema, allowUnknown) {
1861  if (typeof options !== 'object') {
1862    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
1863  }
1864  var keys = Object.keys(options);
1865  var i = keys.length;
1866  while (i-- > 0) {
1867    var opt = keys[i];
vendor: 9,569 bytes, lines 1868-2244
1868    var validator = schema[opt];
1869    if (validator) {
1870      var value = options[opt];
1871      var result = value === undefined || validator(value, opt, options);
1872      if (result !== true) {
1873        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
1874      }
1875      continue;
1876    }
1877    if (allowUnknown !== true) {
1878      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
1879    }
1880  }
1881}
1882
1883module.exports = {
1884  assertOptions: assertOptions,
1885  validators: validators
1886};
1887
1888
1889/***/ }),
1890
1891/***/ 64867:
1892/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1893
1894"use strict";
1895
1896
1897var bind = __webpack_require__(91849);
1898
1899// utils is a library of generic helper functions non-specific to axios
1900
1901var toString = Object.prototype.toString;
1902
1903// eslint-disable-next-line func-names
1904var kindOf = (function(cache) {
1905  // eslint-disable-next-line func-names
1906  return function(thing) {
1907    var str = toString.call(thing);
1908    return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
1909  };
1910})(Object.create(null));
1911
1912function kindOfTest(type) {
1913  type = type.toLowerCase();
1914  return function isKindOf(thing) {
1915    return kindOf(thing) === type;
1916  };
1917}
1918
1919/**
1920 * Determine if a value is an Array
1921 *
1922 * @param {Object} val The value to test
1923 * @returns {boolean} True if value is an Array, otherwise false
1924 */
1925function isArray(val) {
1926  return Array.isArray(val);
1927}
1928
1929/**
1930 * Determine if a value is undefined
1931 *
1932 * @param {Object} val The value to test
1933 * @returns {boolean} True if the value is undefined, otherwise false
1934 */
1935function isUndefined(val) {
1936  return typeof val === 'undefined';
1937}
1938
1939/**
1940 * Determine if a value is a Buffer
1941 *
1942 * @param {Object} val The value to test
1943 * @returns {boolean} True if value is a Buffer, otherwise false
1944 */
1945function isBuffer(val) {
1946  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
1947    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
1948}
1949
1950/**
1951 * Determine if a value is an ArrayBuffer
1952 *
1953 * @function
1954 * @param {Object} val The value to test
1955 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
1956 */
1957var isArrayBuffer = kindOfTest('ArrayBuffer');
1958
1959
1960/**
1961 * Determine if a value is a view on an ArrayBuffer
1962 *
1963 * @param {Object} val The value to test
1964 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
1965 */
1966function isArrayBufferView(val) {
1967  var result;
1968  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
1969    result = ArrayBuffer.isView(val);
1970  } else {
1971    result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
1972  }
1973  return result;
1974}
1975
1976/**
1977 * Determine if a value is a String
1978 *
1979 * @param {Object} val The value to test
1980 * @returns {boolean} True if value is a String, otherwise false
1981 */
1982function isString(val) {
1983  return typeof val === 'string';
1984}
1985
1986/**
1987 * Determine if a value is a Number
1988 *
1989 * @param {Object} val The value to test
1990 * @returns {boolean} True if value is a Number, otherwise false
1991 */
1992function isNumber(val) {
1993  return typeof val === 'number';
1994}
1995
1996/**
1997 * Determine if a value is an Object
1998 *
1999 * @param {Object} val The value to test
2000 * @returns {boolean} True if value is an Object, otherwise false
2001 */
2002function isObject(val) {
2003  return val !== null && typeof val === 'object';
2004}
2005
2006/**
2007 * Determine if a value is a plain Object
2008 *
2009 * @param {Object} val The value to test
2010 * @return {boolean} True if value is a plain Object, otherwise false
2011 */
2012function isPlainObject(val) {
2013  if (kindOf(val) !== 'object') {
2014    return false;
2015  }
2016
2017  var prototype = Object.getPrototypeOf(val);
2018  return prototype === null || prototype === Object.prototype;
2019}
2020
2021/**
2022 * Determine if a value is a Date
2023 *
2024 * @function
2025 * @param {Object} val The value to test
2026 * @returns {boolean} True if value is a Date, otherwise false
2027 */
2028var isDate = kindOfTest('Date');
2029
2030/**
2031 * Determine if a value is a File
2032 *
2033 * @function
2034 * @param {Object} val The value to test
2035 * @returns {boolean} True if value is a File, otherwise false
2036 */
2037var isFile = kindOfTest('File');
2038
2039/**
2040 * Determine if a value is a Blob
2041 *
2042 * @function
2043 * @param {Object} val The value to test
2044 * @returns {boolean} True if value is a Blob, otherwise false
2045 */
2046var isBlob = kindOfTest('Blob');
2047
2048/**
2049 * Determine if a value is a FileList
2050 *
2051 * @function
2052 * @param {Object} val The value to test
2053 * @returns {boolean} True if value is a File, otherwise false
2054 */
2055var isFileList = kindOfTest('FileList');
2056
2057/**
2058 * Determine if a value is a Function
2059 *
2060 * @param {Object} val The value to test
2061 * @returns {boolean} True if value is a Function, otherwise false
2062 */
2063function isFunction(val) {
2064  return toString.call(val) === '[object Function]';
2065}
2066
2067/**
2068 * Determine if a value is a Stream
2069 *
2070 * @param {Object} val The value to test
2071 * @returns {boolean} True if value is a Stream, otherwise false
2072 */
2073function isStream(val) {
2074  return isObject(val) && isFunction(val.pipe);
2075}
2076
2077/**
2078 * Determine if a value is a FormData
2079 *
2080 * @param {Object} thing The value to test
2081 * @returns {boolean} True if value is an FormData, otherwise false
2082 */
2083function isFormData(thing) {
2084  var pattern = '[object FormData]';
2085  return thing && (
2086    (typeof FormData === 'function' && thing instanceof FormData) ||
2087    toString.call(thing) === pattern ||
2088    (isFunction(thing.toString) && thing.toString() === pattern)
2089  );
2090}
2091
2092/**
2093 * Determine if a value is a URLSearchParams object
2094 * @function
2095 * @param {Object} val The value to test
2096 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
2097 */
2098var isURLSearchParams = kindOfTest('URLSearchParams');
2099
2100/**
2101 * Trim excess whitespace off the beginning and end of a string
2102 *
2103 * @param {String} str The String to trim
2104 * @returns {String} The String freed of excess whitespace
2105 */
2106function trim(str) {
2107  return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
2108}
2109
2110/**
2111 * Determine if we're running in a standard browser environment
2112 *
2113 * This allows axios to run in a web worker, and react-native.
2114 * Both environments support XMLHttpRequest, but not fully standard globals.
2115 *
2116 * web workers:
2117 *  typeof window -> undefined
2118 *  typeof document -> undefined
2119 *
2120 * react-native:
2121 *  navigator.product -> 'ReactNative'
2122 * nativescript
2123 *  navigator.product -> 'NativeScript' or 'NS'
2124 */
2125function isStandardBrowserEnv() {
2126  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
2127                                           navigator.product === 'NativeScript' ||
2128                                           navigator.product === 'NS')) {
2129    return false;
2130  }
2131  return (
2132    typeof window !== 'undefined' &&
2133    typeof document !== 'undefined'
2134  );
2135}
2136
2137/**
2138 * Iterate over an Array or an Object invoking a function for each item.
2139 *
2140 * If `obj` is an Array callback will be called passing
2141 * the value, index, and complete array for each item.
2142 *
2143 * If 'obj' is an Object callback will be called passing
2144 * the value, key, and complete object for each property.
2145 *
2146 * @param {Object|Array} obj The object to iterate
2147 * @param {Function} fn The callback to invoke for each item
2148 */
2149function forEach(obj, fn) {
2150  // Don't bother if no value provided
2151  if (obj === null || typeof obj === 'undefined') {
2152    return;
2153  }
2154
2155  // Force an array if not already something iterable
2156  if (typeof obj !== 'object') {
2157    /*eslint no-param-reassign:0*/
2158    obj = [obj];
2159  }
2160
2161  if (isArray(obj)) {
2162    // Iterate over array values
2163    for (var i = 0, l = obj.length; i < l; i++) {
2164      fn.call(null, obj[i], i, obj);
2165    }
2166  } else {
2167    // Iterate over object keys
2168    for (var key in obj) {
2169      if (Object.prototype.hasOwnProperty.call(obj, key)) {
2170        fn.call(null, obj[key], key, obj);
2171      }
2172    }
2173  }
2174}
2175
2176/**
2177 * Accepts varargs expecting each argument to be an object, then
2178 * immutably merges the properties of each object and returns result.
2179 *
2180 * When multiple objects contain the same key the later object in
2181 * the arguments list will take precedence.
2182 *
2183 * Example:
2184 *
2185 * ```js
2186 * var result = merge({foo: 123}, {foo: 456});
2187 * console.log(result.foo); // outputs 456
2188 * ```
2189 *
2190 * @param {Object} obj1 Object to merge
2191 * @returns {Object} Result of all merge properties
2192 */
2193function merge(/* obj1, obj2, obj3, ... */) {
2194  var result = {};
2195  function assignValue(val, key) {
2196    if (isPlainObject(result[key]) && isPlainObject(val)) {
2197      result[key] = merge(result[key], val);
2198    } else if (isPlainObject(val)) {
2199      result[key] = merge({}, val);
2200    } else if (isArray(val)) {
2201      result[key] = val.slice();
2202    } else {
2203      result[key] = val;
2204    }
2205  }
2206
2207  for (var i = 0, l = arguments.length; i < l; i++) {
2208    forEach(arguments[i], assignValue);
2209  }
2210  return result;
2211}
2212
2213/**
2214 * Extends object a by mutably adding to it the properties of object b.
2215 *
2216 * @param {Object} a The object to be extended
2217 * @param {Object} b The object to copy properties from
2218 * @param {Object} thisArg The object to bind function to
2219 * @return {Object} The resulting value of object a
2220 */
2221function extend(a, b, thisArg) {
2222  forEach(b, function assignValue(val, key) {
2223    if (thisArg && typeof val === 'function') {
2224      a[key] = bind(val, thisArg);
2225    } else {
2226      a[key] = val;
2227    }
2228  });
2229  return a;
2230}
2231
2232/**
2233 * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
2234 *
2235 * @param {string} content with BOM
2236 * @return {string} content value without BOM
2237 */
2238function stripBOM(content) {
2239  if (content.charCodeAt(0) === 0xFEFF) {
2240    content = content.slice(1);
2241  }
2242  return content;
2243}
2244
2245/**
2246 * Inherit the prototype methods from one constructor into another
2247 * @param {function} constructor
2248 * @param {function} superConstructor
2249 * @param {object} [props]
2250 * @param {object} [descriptors]
2251 */
2252
2253function inherits(constructor, superConstructor, props, descriptors) {
2254  constructor.prototype = Object.create(superConstructor.prototype, descriptors);
2255  constructor.prototype.constructor = constructor;
2256  props && Object.assign(constructor.prototype, props);
2257}
2258
2259/**
2260 * Resolve object with deep prototype chain to a flat object
2261 * @param {Object} sourceObj source object
2262 * @param {Object} [destObj]
2263 * @param {Function} [filter]
2264 * @returns {Object}
2265 */
2266
2267function toFlatObject(sourceObj, destObj, filter) {
2268  var props;
2269  var i;
2270  var prop;
2271  var merged = {};
2272
2273  destObj = destObj || {};
2274
2275  do {
2276    props = Object.getOwnPropertyNames(sourceObj);
2277    i = props.length;
2278    while (i-- > 0) {
2279      prop = props[i];
2280      if (!merged[prop]) {
2281        destObj[prop] = sourceObj[prop];
2282        merged[prop] = true;
2283      }
2284    }
2285    sourceObj = Object.getPrototypeOf(sourceObj);
2286  } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
2287
2288  return destObj;
2289}
2290
2291/*
2292 * determines whether a string ends with the characters of a specified string
2293 * @param {String} str
2294 * @param {String} searchString
2295 * @param {Number} [position= 0]
2296 * @returns {boolean}
2297 */
2298function endsWith(str, searchString, position) {
2299  str = String(str);
2300  if (position === undefined || position > str.length) {
2301    position = str.length;
2302  }
2303  position -= searchString.length;
2304  var lastIndex = str.indexOf(searchString, position);
2305  return lastIndex !== -1 && lastIndex === position;
2306}
2307
2308
2309/**
2310 * Returns new array from array like object
2311 * @param {*} [thing]
2312 * @returns {Array}
2313 */
2314function toArray(thing) {
2315  if (!thing) return null;
2316  var i = thing.length;
2317  if (isUndefined(i)) return null;
2318  var arr = new Array(i);
2319  while (i-- > 0) {
2320    arr[i] = thing[i];
2321  }
2322  return arr;
2323}
2324
2325// eslint-disable-next-line func-names
2326var isTypedArray = (function(TypedArray) {
2327  // eslint-disable-next-line func-names
2328  return function(thing) {
2329    return TypedArray && thing instanceof TypedArray;
2330  };
2331})(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array));
2332
2333module.exports = {
2334  isArray: isArray,
2335  isArrayBuffer: isArrayBuffer,
2336  isBuffer: isBuffer,
2337  isFormData: isFormData,
2338  isArrayBufferView: isArrayBufferView,
2339  isString: isString,
2340  isNumber: isNumber,
2341  isObject: isObject,
2342  isPlainObject: isPlainObject,
2343  isUndefined: isUndefined,
2344  isDate: isDate,
2345  isFile: isFile,
2346  isBlob: isBlob,
2347  isFunction: isFunction,
2348  isStream: isStream,
2349  isURLSearchParams: isURLSearchParams,
2350  isStandardBrowserEnv: isStandardBrowserEnv,
2351  forEach: forEach,
2352  merge: merge,
2353  extend: extend,
2354  trim: trim,
2355  stripBOM: stripBOM,
2356  inherits: inherits,
2357  toFlatObject: toFlatObject,
2358  kindOf: kindOf,
2359  kindOfTest: kindOfTest,
2360  endsWith: endsWith,
2361  toArray: toArray,
2362  isTypedArray: isTypedArray,
2363  isFileList: isFileList
2364};
2365
2366
2367/***/ }),
2368
2369/***/ 94713:
2370/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2371
2372"use strict";
2373/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2374/* harmony export */   "N": () => (/* binding */ ReinosMaps)
2375/* harmony export */ });
2376/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(76386);
2377function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2378
2379function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
2380
2381function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
2382
2383function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2384
2385
2386var ReinosMaps = /*#__PURE__*/function () {
2387  function ReinosMaps() {
2388    _classCallCheck(this, ReinosMaps);
2389
2390    _defineProperty(this, "author_url", 'https://addons.reinos.nl/maps/');
2391
2392    _defineProperty(this, "def", {
2393      lat: 34.5133,
2394      lng: -94.1629,
2395      circle: {
2396        'fit_circle': true,
2397        'stroke_color': '#BBD8E9',
2398        'stroke_opacity': 1,
2399        'stroke_weight': 3,
2400        'fill_color': '#BBD8E9',
2401        'fill_opacity': 0.6,
2402        'radius': 1000
2403      }
2404    });
2405
2406    _defineProperty(this, "maps", new Map());
2407
2408    _defineProperty(this, "positions", ['topleft', 'topright', 'bottomleft', 'bottomright']);
2409
2410    _defineProperty(this, "_firedEvents", {});
2411
2412    _defineProperty(this, "latlngs", new Set());
2413
2414    _defineProperty(this, "markers", new Map());
2415
2416    _defineProperty(this, "polygons", new Map());
2417
2418    _defineProperty(this, "polylines", new Map());
2419
2420    _defineProperty(this, "rectangles", new Map());
2421
2422    _defineProperty(this, "circles", new Map());
2423
2424    _defineProperty(this, "apiLog", new Set());
2425
2426    _defineProperty(this, "crs", _utils__WEBPACK_IMPORTED_MODULE_0__/* .crsCollection */ .gY);
2427
2428    _defineProperty(this, "_geojson", {
2429      style: {}
2430    });
2431
2432    _defineProperty(this, "leaflet", window.L);
2433  }
2434
2435  _createClass(ReinosMaps, [{
2436    key: "setConfig",
2437    value: function setConfig() {
2438      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2439      var _options$version = options.version;
2440      this.version = _options$version === void 0 ? '0.0.0' : _options$version;
2441      this.api_path = options.api_path;
2442      this.theme_path = options.theme_path;
2443      var _options$dev_mode = options.dev_mode;
2444      this.isDevMode = _options$dev_mode === void 0 ? false : _options$dev_mode;
2445      this.isDevMode = this.isDevMode === '1' || location.hash === '#maps_debug';
2446    }
2447  }]);
2448
2449  return ReinosMaps;
2450}();
2451
2452/***/ }),
2453
2454/***/ 99161:
2455/***/ ((__unused_webpack_module, __unused_webpack___webpack_exports__, __webpack_require__) => {
2456
2457"use strict";
2458/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66534);
2459/* harmony import */ var _marker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(67174);
2460/* harmony import */ var _circle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83623);
2461/* harmony import */ var _rectangle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22048);
2462/* harmony import */ var _polygon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(68354);
2463/* harmony import */ var _polyline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(28612);
2464/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(57112);
2465/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(94713);
2466/* harmony import */ var _map_zoomOut__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(70644);
2467/* harmony import */ var _map_zoomIn__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(20566);
2468/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(76386);
2469function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2470
2471function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
2472
2473function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
2474
2475function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
2476
2477function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
2478
2479function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
2480
2481function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2482
2483function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
2483 i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2484
2485function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499_core__WEBPACK_IMPORTED_MODULE_7__/* .ReinosMaps.prototype.api */ .N.prototype.api = function (type, options, callback) {
2500  var self = this; //no type
2501
2502  if (type === '') {
2503    (0,_utils__WEBPACK_IMPORTED_MODULE_8__/* .throwError */ ._y)('Type not defined');
2504    return false;
2505  } //options
2506
2507
2508  options = _objectSpread({
2509    mapID: '',
2510    key: ''
2511  }, options);
2512  Object.entries(options).forEach(function (_ref) {
2513    var _ref2 = _slicedToArray(_ref, 2),
2514        index = _ref2[0],
2515        v = _ref2[1];
2516
2517    if (typeof v === 'string' && v.match('function:')) {
2518      var value = v;
2519
2520      options[index] = function () {
2521        eval(value.replace('function:', ''));
2522      };
2523    }
2524  }); //set the vars
2525
2526  var mapID;
2527  var map; //set a default return value
2528
2529  var __returnValue; //set the mapID
2530
2531
2532  if (options.mapID !== '') {
2533    //set the mapID
2534    mapID = options.mapID; //delete options.mapID;
2535    //get the map
2536
2537    map = self.getMap(mapID);
2538  } //default callback function
2539
2540
2541  var executeCallback = function executeCallback(callback) {
2542    if (typeof callback === 'function') {
2543      callback();
2544    }
2545  }; // log API Call in DEV mode
2546
2547
2548  if (self.isDevMode) {
2549    var stack = new Error();
2550    self.apiLog.add({
2551      method: type,
2552      options: _objectSpread({}, options),
2553      mapId: mapID,
2554      mapExists: !!map,
2555      code: "REINOS.api('".concat(type, "', ").concat(JSON.stringify(_objectSpread({}, options)), ")"),
2556      stack: stack.stack
2557    });
2558  } //what do we do
2559
2560
2561  switch (type) {
2562    //------------------------------------------------------------------------
2563    // Global map api
2564    //------------------------------------------------------------------------
2565    // refresh the map
2566    case 'refresh':
2567    case 'redraw':
2568      (0,_map__WEBPACK_IMPORTED_MODULE_0__/* .apiRefresh */ .Xe)(map);
2569      break;
2570    // set Zoom level
2571
2572    case 'setZoom':
2573      //is there a map
2574      (0,_map__WEBPACK_IMPORTED_MODULE_0__/* .apiSetZoom */ .QP)(map, options);
2575      break;
2576    // ZoomOut
2577
2578    case 'zoomOut':
2579      //is there a map
2580      (0,_map_zoomOut__WEBPACK_IMPORTED_MODULE_9__/* .apiZoomOut */ .J)(map, options);
2581      break;
2582    // ZoomOut
2583
2584    case 'zoomIn':
2585      //is there a map
2586      (0,_map_zoomIn__WEBPACK_IMPORTED_MODULE_10__/* .apiZoomIn */ .q)(map, options);
2587      break;
2588    // set Zoom level
2589
2590    case 'fitMap':
2591      //is there a map
2592      (0,_map__WEBPACK_IMPORTED_MODULE_0__/* .apiFitMap */ .Fg)(map, options);
2593      break;
2594    // Center a map
2595
2596    case 'center':
2597      //is there a map
2598      (0,_map__WEBPACK_IMPORTED_MODULE_0__/* .apiCenter */ .X6)(map, options);
2599      break;
2600    // Get the map object
2601
2602    case 'getMap':
2603      //is there a map
2604      if (map) {
2605        __returnValue = map;
2606      }
2607
2608      break;
2609    // Get the map object
2610
2611    case 'removeMap':
2612      __returnValue = (0,_map__WEBPACK_IMPORTED_MODULE_0__/* .apiRemoveMap */ .qq)(map, options);
2613      break;
2614    // Update a map with new settings
2615
2616    case 'updateMap':
2617      (0,_map__WEBPACK_IMPORTED_MODULE_0__/* .apiUpdateMap */ .C2)(map, options);
2618      break;
2619    //------------------------------------------------------------------------
2620    // End Global map api
2621    //------------------------------------------------------------------------
2622    //------------------------------------------------------------------------
2623    // Marker api
2624    //------------------------------------------------------------------------
2625    // add Marker, and return the marker numbers
2626
2627    case 'addMarker':
2628      //is there a map
2629      __returnValue = (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiAddMarker */ ._A)(map, options, mapID);
2630      break;
2631    // Update a marker
2632
2633    case 'updateMarker':
2634      __returnValue = (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiUpdateMarker */ .EL)(map, options, mapID);
2635      break;
2636    //Get the marker array
2637
2638    case 'getAllMarkers':
2639      __returnValue = self.markers;
2640      break;
2641    //Get the marker array
2642
2643    case 'getMarkers':
2644      __returnValue = self.markers[mapID];
2645      break;
2646    // Get the marker
2647
2648    case 'getMarker':
2649      __returnValue = (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiGetMarker */ ._p)(map, options, mapID);
2650      break;
2651    //remove marker
2652
2653    case 'removeMarker':
2654      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiRemoveMarker */ .xn)(map, options, mapID);
2655      break;
2656    // hide existing Marker
2657
2658    case 'hideMarker':
2659      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiHideMarker */ .Xi)(map, options, mapID);
2660      break;
2661    // show existing Marker
2662
2663    case 'showMarker':
2664      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiShowMarker */ .qW)(map, options, mapID);
2665      break;
2666    // Remove all markers
2667
2668    case 'removeMarkers':
2669      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiRemoveMarkers */ .pZ)(map, mapID);
2670      break;
2671    // Hide all markers
2672
2673    case 'hideMarkers':
2674      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiHideMarkers */ .Gx)(ma
2674p, mapID);
2675      break;
2676    // Show all markers
2677
2678    case 'showMarkers':
2679      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiShowMarkers */ .KD)(map, mapID);
2680      break;
2681    //marker click
2682
2683    case 'markerClick':
2684      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiMarkerClick */ .wM)(map, options, mapID);
2685      break;
2686    //Open Marker Popup
2687
2688    case 'openMarkerPopup':
2689      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiOpenMarkerPopup */ .U9)(options, mapID);
2690      break;
2691    //Open Marker Popup
2692
2693    case 'closeMarkerPopup':
2694      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiCloseMarkerPopup */ .sZ)(options, mapID);
2695      break;
2696    //Open Marker Popup
2697
2698    case 'toggleMarkerPopup':
2699      (0,_marker__WEBPACK_IMPORTED_MODULE_1__/* .apiToggleMarkerPopup */ .ME)(options, mapID);
2700      break;
2701    //------------------------------------------------------------------------
2702    // End Marker api
2703    //------------------------------------------------------------------------
2704    //------------------------------------------------------------------------
2705    // Layers
2706    //------------------------------------------------------------------------
2707    // Add a layer
2708    // case 'addLayer':
2709    //     //is there a map
2710    //     if(map) {
2711    //         if(options.layerName != undefined) {
2712    //             map.addLayer(options.layerName);
2713    //         }
2714    //     }
2715    //     break;
2716    // Remove a layer
2717    // case 'removeLayer':
2718    //     //is there a map
2719    //     if(map) {
2720    //         if(options.layerName != undefined) {
2721    //             map.removeLayer(options.layerName);
2722    //         }
2723    //     }
2724    //     break;
2725    //------------------------------------------------------------------------
2726    // End layers
2727    //------------------------------------------------------------------------
2728    //------------------------------------------------------------------------
2729    // Circle api
2730    //------------------------------------------------------------------------
2731    // Create a circle
2732
2733    case 'addCircle':
2734      __returnValue = (0,_circle__WEBPACK_IMPORTED_MODULE_2__/* .apiAddCircle */ .u0)(map, options, mapID);
2735      break;
2736    // Get the polygon
2737
2738    case 'getCircle':
2739      __returnValue = (0,_circle__WEBPACK_IMPORTED_MODULE_2__/* .apiGetCircle */ .Jt)(map, options, mapID);
2740      break;
2741    // update a polygon
2742
2743    case 'updateCircle':
2744      (0,_circle__WEBPACK_IMPORTED_MODULE_2__/* .apiUpdateCircle */ ._Y)(map, options, mapID);
2745      break;
2746    //remove polygon
2747
2748    case 'removeCircle':
2749      (0,_circle__WEBPACK_IMPORTED_MODULE_2__/* .apiRemoveCircle */ .hc)(map, options, mapID);
2750      break;
2751    //------------------------------------------------------------------------
2752    // End circle api
2753    //------------------------------------------------------------------------
2754    //------------------------------------------------------------------------
2755    // Rectangle api
2756    //------------------------------------------------------------------------
2757    // Create a Rectangle
2758
2759    case 'addRectangle':
2760      __returnValue = (0,_rectangle__WEBPACK_IMPORTED_MODULE_3__/* .apiAddRectangle */ .bU)(map, options, mapID);
2761      break;
2762    // Get the polygon
2763
2764    case 'getRectangle':
2765      __returnValue = (0,_rectangle__WEBPACK_IMPORTED_MODULE_3__/* .apiGetRectangle */ .mZ)(map, options, mapID);
2766      break;
2767    // update a polygon
2768
2769    case 'updateRectangle':
2770      (0,_rectangle__WEBPACK_IMPORTED_MODULE_3__/* .apiUpdateRectangle */ .oG)(map, options, mapID);
2771      break;
2772    //remove polygon
2773
2774    case 'removeRectangle':
2775      (0,_rectangle__WEBPACK_IMPORTED_MODULE_3__/* .apiRemoveRectangle */ .T4)(map, options, mapID);
2776      break;
2777    //------------------------------------------------------------------------
2778    // End rectangle api
2779    //------------------------------------------------------------------------
2780    //------------------------------------------------------------------------
2781    // Polygon api
2782    //------------------------------------------------------------------------
2783    // Create a Polygon
2784
2785    case 'addPolygon':
2786      __returnValue = (0,_polygon__WEBPACK_IMPORTED_MODULE_4__/* .apiAddPolygon */ .MD)(map, options, mapID);
2787      break;
2788    // Get the polygon
2789
2790    case 'getPolygon':
2791      __returnValue = (0,_polygon__WEBPACK_IMPORTED_MODULE_4__/* .apiGetPolygon */ .FD)(map, options, mapID);
2792      break;
2793    // update a polygon
2794
2795    case 'updatePolygon':
2796      (0,_polygon__WEBPACK_IMPORTED_MODULE_4__/* .apiUpdatePolygon */ .N0)(map, options, mapID);
2797      break;
2798    //remove polygon
2799
2800    case 'removePolygon':
2801      (0,_polygon__WEBPACK_IMPORTED_MODULE_4__/* .apiRemovePolygon */ .G_)(map, options, mapID);
2802      break;
2803    //------------------------------------------------------------------------
2804    // End polygon api
2805    //------------------------------------------------------------------------
2806    //------------------------------------------------------------------------
2807    // Polyline api
2808    //------------------------------------------------------------------------
2809    // Create a Polyline
2810
2811    case 'addPolyline':
2812      __returnValue = (0,_polyline__WEBPACK_IMPORTED_MODULE_5__/* .apiAddPolyline */ .cT)(map, options, mapID);
2813      break;
2814    // Get the polyline
2815
2816    case 'getPolyline':
2817      __returnValue = (0,_polyline__WEBPACK_IMPORTED_MODULE_5__/* .apiGetPolyline */ .tv)(map, options, mapID);
2818      break;
2819    // Get the polyline
2820
2821    case 'updatePolyline':
2822      (0,_polyline__WEBPACK_IMPORTED_MODULE_5__/* .apiUpdatePolyline */ .ww)(map, options, mapID);
2823      break;
2824    //remove marker
2825
2826    case 'removePolyline':
2827      (0,_polyline__WEBPACK_IMPORTED_MODULE_5__/* .apiRemovePolyline */ .Xr)(map, options, mapID);
2828      break;
2829    //------------------------------------------------------------------------
2830    // End polyline api
2831    //------------------------------------------------------------------------
2832    //------------------------------------------------------------------------
2833    // geoJson api
2834    //------------------------------------------------------------------------
2835
2836    case 'addGeojson':
2837      (0,_utils__WEBPACK_IMPORTED_MODULE_6__/* .apiAddGeoJson */ .SJ)(map, options);
2838      break;
2839    //------------------------------------------------------------------------
2840    // END geoJson api
2841    //------------------------------------------------------------------------
2842    //------------------------------------------------------------------------
2843    // KML
2844    //------------------------------------------------------------------------
2845
2846    case 'addKml':
2847      (0,_utils__WEBPACK_IMPORTED_MODULE_6__/* .apiAddKml */ .T5)(map, options);
2848      break;
2849    //------------------------------------------------------------------------
2850    // KML
2851    //------------------------------------------------------------------------
2852    //------------------------------------------------------------------------
2853    // Geolocation api, only working for SSL sites
2854    //------------------------------------------------------------------------
2855
2856    case 'geolocation':
2857      (0,_utils__WEBPACK_IMPORTED_MODULE_6__/* .apiGeoLocation */ .tL)(options);
2858      break;
2859    //------------------------------------------------------------------------
2860    // Geocode api
2861    //------------------------------------------------------------------------
2862    //
2863    // Geocode using the API way to cache all addresses
2864
2865    case 'geocode':
2866      (0,_utils__WEBPACK_IMPORTED_MODULE_6__/* .apiGeocode */ .Bc)(options);
2867      break;
2868    //------------------------------------------------------------------------
2869    // End geocode api
2870    //------------------------------------------------------------------------
2871
2872    default:
2873      (0,_utils__WEBPACK_IMPORTED_MODULE_8__/* .throwError */ ._y)("unknown method: \"".concat(type, "\""));
2874      break;
2875  }
2876
2877  executeCallback(callback);
2878  return __returnValue;
2879}; // aliases
2880
2881
2882_core__WEBPACK_IMPORTED_MODULE_7__/* .ReinosMaps.prototype.trigger */ .N.prototype.trigger = _core__WEBPACK_IMPORTED_MODULE_7__/* .ReinosMaps.prototype.api */ .N.prototype.api;
2883_core__WEBPACK_IMPORTED_MODULE_7__/* .ReinosMaps.prototype.triggerEvent */ .N.prototype.triggerEvent = _core__WEBPACK_IMPORTED_MODULE_7__/* .ReinosMaps.prototype.api */ .N.prototype.api;
2884
2885/***/ }),
2886
2887/***/ 83623:
2888/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2889
2890"use strict";
2891
2892// EXPORTS
2893__webpack_require__.d(__webpack_exports__, {
2894  "u0": () => (/* reexport */ apiAddCircle),
2895  "Jt": () => (/* reexport */ apiGetCircle),
2896  "hc": () => (/* reexport */ apiRemoveCircle),
2897  "_Y": () => (/* reexport */ apiUpdateCircle)
2898});
2899
2900// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
2901var leaflet_src = __webpack_require__(45243);
2902var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
2903// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
2904var utils = __webpack_require__(76386);
2905;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/circle/addCircle.js
2906function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2907
2908function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2909
2910function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2911
2912
2913
2914var apiAddCircle = function apiAddCircle(map, options, mapID) {
2915  // eslint-disable-next-line
2916  var self = REINOS_MAPS;
2917
2918  if (map) {
2919    //merge default settings with given settings
2920    options = _objectSpread({
2921      'radius': 0,
2922      'stroke': true,
2923      'color': '#3388ff',
2924      'weight': 3,
2925      'opacity': 1.0,
2926      'fill': true,
2927      'fillColor': '#3388ff',
2928      'fillOpacity': 0.2,
2929      'className': 'maps_circle',
2930      'tooltip': {},
2931      popup: {}
2932    }, options);
2933
2934    var _catchEvents = (0,utils/* catchEvents */.DK)(options),
2935        events = _catchEvents.events,
2936        optionsWithoutEvents = _catchEvents.options;
2937
2938    options = optionsWithoutEvents; //set the user options
2939
2940    var userOptions = _objectSpread({}, options);
2941
2942    var popupOptions = options.popup;
2943    delete options.popup; //add bound
2944
2945    map.bounds.circles.push([options.lat, options.lng]); //reset the tooltip options
2946
2947    var tooltipOptions = options.tooltip;
2948    delete options.tooltip; //set the keys
2949
2950    var keys = typeof options.keys === 'string' ? options.keys : ''; //add circle to the map
2951
2952    var new_circle = leaflet_src_default().circle([options.lat, options.lng], options).addTo(map.map); //custom property and method to handle the userOptions
2953
2954    new_circle.userOptions = userOptions;
2955
2956    new_circle.setUserOptions = function (newUserOptions) {
2957      this.userOptions = _objectSpread(_objectSpread({}, this.userOptions), newUserOptions);
2958    }; //set the tooltip
2959
2960
2961    self.addTooltip(tooltipOptions, new_circle); // assign the events to the feature
2962
2963    (0,utils/* executeEvent */.bP)(events, new_circle); //init the popup
2964
2965    new_circle = self.initPopup(new_circle, popupOptions); //save to the cache
2966
2967    var __returnValue = self.saveCircle(mapID, new_circle, keys); //fit map
2968
2969
2970    self.fitBounds(map);
2971    return __returnValue;
2972  }
2973};
2974;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/circle/getCircle.js
2975var apiGetCircle = function apiGetCircle(map, options, mapID) {
2976  // eslint-disable-next-line
2977  var self = REINOS_MAPS;
2978  var circle = self.searchCircle(mapID, options.key); //is there a map
2979
2980  if (map && circle !== undefined) {
2981    return circle;
2982  }
2983};
2984;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/circle/updateCircle.js
2985
2986var apiUpdateCircle = function apiUpdateCircle(map, options, mapID) {
2987  // eslint-disable-next-line
2988  var self = REINOS_MAPS;
2989  var circle = self.searchCircle(mapID, options.key); //is there a map
2990
2991  if (map && circle !== undefined) {
2992    //remove key
2993    delete options.key; //set the new user options
2994
2995    circle.setUserOptions(options); //update tooltip
2996
2997    if (options.tooltip !== undefined) {
2998      //set the tooltip
2999      self.updateTooltip(options.tooltip, circle);
3000      delete options.tooltip;
3001    } //if latlngs is found in the options, use that for redraw the line
3002
3003
3004    if (typeof options.latlng !== 'undefined') {
3005      circle.setLatLng(options.latlngs);
3006      delete options.latlng;
3007    } //update radius
3008
3009
3010    if (typeof options.radius !== 'undefined') {
3011      circle.setRadius(options.radius);
3012      delete options.radius;
3013    } //set the new options
3014
3015
3016    circle.setStyle(options); //set the popup content
3017
3018    if (options.popup !== undefined && options.popup.popupContent !== undefined) {
3019      if (circle.getPopup() === undefined) {
3020        //init the popup
3021        circle = self.initPopup(circle, options.popup);
3022      } else {
3023        var decodedContent = (0,utils/* decodeContent */.vN)(options.popup.popupContent);
3024        circle.getPopup().setContent(decodedContent);
3025      }
3026
3027      delete options.popup.popupContent;
3028    }
3029
3030    return circle;
3031  }
3032};
3033;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/circle/removeCircle.js
3034var apiRemoveCircle = function apiRemoveCircle(map, options, mapID) {
3035  // eslint-disable-next-line
3036  var self = REINOS_MAPS;
3037  var circle = self.searchCircle(mapID, options.key); //is there a map
3038
3039  if (map && circle !== undefined) {
3040    // remove from map
3041    circle.remove(); //remove from the cache
3042
3043    self.removeCircle(mapID, options.key); //remove from the bounds
3044
3045    map.bounds.circles = map.bounds.circles.filter(function (value) {
3046      return circle.getLatLng().lat !== value[0] && circle.getLatLng().lng !== value[1];
3047    });
3048  }
3049};
3050;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/circle/index.js
3051
3052
3053
3054
3055
3056/***/ }),
3057
3058/***/ 66534:
3059/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3060
3061"use strict";
3062
3063// EXPORTS
3064__webpack_require__.d(__webpack_exports__, {
3065  "X6": () => (/* reexport */ apiCenter),
3066  "Fg": () => (/* reexport */ apiFitMap),
3067  "Xe": () => (/* reexport */ apiRefresh),
3068  "qq": () => (/* reexport */ apiRemoveMap),
3069  "QP": () => (/* reexport */ apiSetZoom),
3070  "C2": () => (/* reexport */ apiUpdateMap)
3071});
3072
3073// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
3074var leaflet_src = __webpack_require__(45243);
3075var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
3076;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/ce
3076nter.js
3077
3078var apiCenter = function apiCenter(map, options) {
3079  if (map) {
3080    map.map.panTo(new (leaflet_src_default()).LatLng(options.lat, options.lng));
3081  }
3082};
3083;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/fitMap.js
3084function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3085
3086function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3087
3088function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3089
3090var apiFitMap = function apiFitMap(map, options) {
3091  if (map) {
3092    options.type = options.type || '';
3093
3094    switch (options.type) {
3095      case 'markers':
3096      case 'marker':
3097        map.map.fitBounds(map.bounds.markers);
3098        break;
3099
3100      case 'circle':
3101      case 'circles':
3102        map.map.fitBounds(map.bounds.circles);
3103        break;
3104
3105      case 'rectangle':
3106      case 'rectangles':
3107        map.map.fitBounds(map.bounds.rectangles);
3108        break;
3109
3110      case 'polylines':
3111      case 'polyline':
3112      case 'route': //routes are infact polylines
3113
3114      case 'routes':
3115        //routes are infact polylines
3116        map.map.fitBounds(map.bounds.polylines);
3117        break;
3118
3119      case 'polygons':
3120      case 'polygon':
3121        map.map.fitBounds(map.bounds.polygons);
3122        break;
3123
3124      default:
3125        map.map.fitBounds(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, map.bounds.markers), map.bounds.circles), map.bounds.rectangles), map.bounds.polylines), map.bounds.polygons));
3126        break;
3127    }
3128  }
3129};
3130;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/refresh.js
3131var apiRefresh = function apiRefresh(map) {
3132  if (map) {
3133    map.map.invalidateSize();
3134  }
3135};
3136;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/removeMap.js
3137var apiRemoveMap = function apiRemoveMap(map, options) {
3138  // eslint-disable-next-line
3139  var self = REINOS_MAPS;
3140
3141  if (map) {
3142    self.maps["delete"](options.mapID);
3143    self.polygons["delete"](options.mapID);
3144    self.polylines["delete"](options.mapID);
3145    self.rectangles["delete"](options.mapID);
3146    self.circles["delete"](options.mapID);
3147    self.markers["delete"](options.mapID);
3148    return map;
3149  }
3150};
3151;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/setZoom.js
3152var apiSetZoom = function apiSetZoom(map, options) {
3153  if (map) {
3154    if (options.zoom !== undefined) {
3155      map.map.setZoom(options.zoom);
3156      map.raw_options.zoom = options.zoom;
3157    }
3158  }
3159};
3160// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
3161var utils = __webpack_require__(76386);
3162// EXTERNAL MODULE: ./node_modules/domtastic/src/index.js + 19 modules
3163var src = __webpack_require__(2239);
3164;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/updateMap.js
3165
3166
3167
3168var apiUpdateMap = function apiUpdateMap(map, options) {
3169  // eslint-disable-next-line
3170  var self = REINOS_MAPS;
3171
3172  if (map) {
3173    if (options.center !== undefined) {
3174      var center = (0,utils/* base64Decode */.tV)(options.center);
3175      center = center.split(',');
3176      map.map.setView([center[0], center[1]]);
3177      map.raw_options.center = options.center;
3178      delete options.center;
3179    }
3180
3181    if (options.zoom !== undefined) {
3182      map.map.setZoom(options.zoom);
3183      map.raw_options.zoom = options.zoom;
3184      delete options.zoom;
3185    }
3186
3187    if (options.max_zoom) {
3188      map.map.setMaxZoom(options.max_zoom);
3189      map.raw_options.max_zoom = options.max_zoom;
3190      delete options.max_zoom;
3191    }
3192
3193    if (options.scroll_wheel) {
3194      if ((0,utils/* strToBool */.UC)(options.scroll_wheel)) {
3195        map.map.scrollWheelZoom.enable();
3196      } else {
3197        map.map.scrollWheelZoom.disable();
3198      }
3199
3200      map.raw_options.scroll_wheel = (0,utils/* strToBool */.UC)(options.scroll_wheel);
3201      delete options.scroll_wheel;
3202    }
3203
3204    if (options.zoom_control) {
3205      if ((0,utils/* strToBool */.UC)(options.zoom_control)) {
3206        map.map.zoomControl.enable();
3207      } else {
3208        map.map.zoomControl.disable();
3209      }
3210
3211      map.raw_options.zoom_control = (0,utils/* strToBool */.UC)(options.zoom_control);
3212      delete options.zoomControl;
3213    }
3214
3215    if (options.zoom_control_position) {
3216      if (self.positions.indexOf(options.zoom_control_position) !== -1) {
3217        map.map.zoomControl.setPosition(options.zoom_control_position);
3218        map.raw_options.zoom_control_position = options.zoom_control_position;
3219        delete options.zoom_control_position;
3220      }
3221    }
3222
3223    if (options.scale_control) {
3224      if ((0,utils/* strToBool */.UC)(options.scale_control) && map.scaleControl === null) {
3225        map.scaleControl = leaflet_src_default().control.scale({
3226          position: map.raw_options.scale_control_position
3227        }).addTo(map.map);
3228      } else if (!(0,utils/* strToBool */.UC)(options.scale_control) && map.scaleControl !== null) {
3229        map.scaleControl.remove();
3230        map.scaleControl = null;
3231      }
3232
3233      map.raw_options.scale_control = (0,utils/* strToBool */.UC)(options.scale_control);
3234      delete options.scale_control;
3235    }
3236
3237    if (options.scale_control_position) {
3238      if (map.scaleControl !== null) {
3239        map.scaleControl.setPosition(options.scale_control_position);
3240      }
3241
3242      map.raw_options.scale_control_position = options.scale_control_position;
3243      delete options.scale_control_position;
3244    }
3245
3246    if (options.overlay_html) {
3247      self.updateOverlay(map, {
3248        overlay_html: options.overlay_html,
3249        overlay_position: options.overlay_position
3250      });
3251      map.raw_options.overlay_html = options.overlay_html;
3252      map.raw_options.overlay_position = options.overlay_position;
3253      delete options.overlay_html;
3254      delete options.overlay_position;
3255    } //update the widths
3256
3257
3258    if (options.height || options.width) {
3259      //get the container
3260      var $container = (0,src/* default */.Z)(map.map.getContainer()); //update width
3261
3262      if (options.width) {
3263        $container.css('width', options.width);
3264      } //update height
3265
3266
3267      if (options.height) {
3268        $container.css('height', options.height);
3269      } //redraw the map
3270
3271
3272      map.map.invalidateSize();
3273    }
3274
3275    if (options.tiles && options.tiles !== '' && options.tiles !== null) {
3276      //remove the current ones
3277      Object.values(map.tiles).forEach(function (tile) {
3278        return tile.remove();
3279      }); //remove the controlTile if needed
3280
3281      if (map.tileControl !== null) {
3282        map.tileControl.remove();
3283      } //add the new ones
3284
3285
3286      self.addTiles(map, options.tiles);
3287    }
3288  }
3289};
3290;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/map/index.js
3291
3292
3293
3294
3295
3296
3297
3298/***/ }),
3299
3300/***/ 20566:
3301/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3302
3303"use strict";
3304/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3305/* harmony export */   "q": () => (/* binding */ apiZoomIn)
3306/* harmony export */ });
3307var apiZoomIn = function apiZoomIn(map) {
3308  if (map) {
3309    map.map.zoomIn();
3310  }
3311};
3312
3313/***/ }),
3314
3315/***/ 70644:
3316/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3317
3318"use strict";
3319/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3320/* harmony export */   "J": () => (/* binding */ apiZoomOut)
3321/* harmony export */ });
3322var apiZoomOut = function apiZoomOut(map) {
3323  if (map) {
3324    map.map.zoomOut();
3325  }
3326};
3327
3328/***/ }),
3329
3330/***/ 67174:
3331/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3332
3333"use strict";
3334
3335// EXPORTS
3336__webpack_require__.d(__webpack_exports__, {
3337  "_A": () => (/* reexport */ apiAddMarker),
3338  "sZ": () => (/* reexport */ apiCloseMarkerPopup),
3339  "_p": () => (/* reexport */ apiGetMarker),
3340  "Xi": () => (/* reexport */ apiHideMarker),
3341  "Gx": () => (/* reexport */ apiHideMarkers),
3342  "wM": () => (/* reexport */ apiMarkerClick),
3343  "U9": () => (/* reexport */ apiOpenMarkerPopup),
3344  "xn": () => (/* reexport */ apiRemoveMarker),
3345  "pZ": () => (/* reexport */ apiRemoveMarkers),
3346  "qW": () => (/* reexport */ apiShowMarker),
3347  "KD": () => (/* reexport */ apiShowMarkers),
3348  "ME": () => (/* reexport */ apiToggleMarkerPopup),
3349  "EL": () => (/* reexport */ apiUpdateMarker)
3350});
3351
3352// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
3353var leaflet_src = __webpack_require__(45243);
3354var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
3355// EXTERNAL MODULE: ./node_modules/leaflet.icon.glyph/Leaflet.Icon.Glyph.js
3356var Leaflet_Icon_Glyph = __webpack_require__(52797);
3357// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
3358var utils = __webpack_require__(76386);
3359;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/addMarker.js
3360function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
3361
3362function _nonIterableRest() { throw new TypeError("Invalid attempt to de
3362structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3363
3364function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
3365
3366function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
3367
3368function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
3369
3370function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
3371
3372function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3373
3374function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3375
3376function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3377
3378
3379
3380
3381var apiAddMarker = function apiAddMarker(map, options, mapID) {
3382  // eslint-disable-next-line
3383  var self = REINOS_MAPS;
3384
3385  if (map) {
3386    //merge default settings with given settings
3387    options = _objectSpread({
3388      //defaults
3389      'icon': null,
3390      'shadow': null,
3391      'draggable': false,
3392      'autoPan': false,
3393      'autoPanPadding': leaflet_src_default().point(50, 50),
3394      //'autoPanSpeed': 10,
3395      'keyboard': true,
3396      'title': '',
3397      'alt': '',
3398      'zIndexOffset': 0,
3399      'opacity': 1,
3400      'riseOnHover': false,
3401      'riseOffset': 250,
3402      'pane': 'markerPane',
3403      'bubblingMouseEvents': false,
3404      'tooltip': {},
3405      'glyph': {},
3406      'assign': {},
3407      //bounce options from https://github.com/maximeh/leaflet.bouncemarker
3408      // 'bounceOnAdd' : false,
3409      //other
3410      'lat': null,
3411      'lng': null,
3412      'fitBounds': true,
3413      popup: {}
3414    }, options); //check for for a valid latlng
3415
3416    if (options.lat === null || options.lat === '' || options.lng === null || options.lng === '') {
3417      console.error('Maps Error: Lat and/or Lng coordinate is invalid');
3418      return;
3419    }
3420
3421    var _catchEvents = (0,utils/* catchEvents */.DK)(options),
3422        events = _catchEvents.events,
3423        optionsWithoutEvents = _catchEvents.options;
3424
3425    options = optionsWithoutEvents; //set the user options
3426
3427    var userOptions = _objectSpread({}, options);
3428
3429    var popupOptions = options.popup;
3430    delete options.popup; //set the assign data for assign to the marker object
3431
3432    var assignData = options.assign;
3433    delete options.assign; //reset the tooltip options
3434
3435    var tooltipOptions = options.tooltip;
3436    delete options.tooltip; //set the default options from the default object
3437
3438    var iconDefault = _objectSpread({}, (leaflet_src_default()).Icon.Default.prototype.options); //reset some values
3439
3440
3441    iconDefault.iconUrl = null;
3442    iconDefault.iconRetinaUrl = null;
3443    iconDefault.shadowUrl = null; //merge default icon settings with given settings
3444
3445    options.icon = _objectSpread(_objectSpread({}, iconDefault), options.icon); //check if we need to use the default icon? of if Glyph icon is enabled
3446
3447    if (options.glyph.enabled !== undefined && options.glyph.enabled) {
3448      options.icon = leaflet_src_default().icon.glyph({
3449        prefix: options.glyph.prefix,
3450        glyph: options.glyph.name,
3451        className: options.glyph.className,
3452        glyphColor: options.glyph.color,
3453        iconUrl: self.theme_path + 'dist/images/glyph-marker-icon.svg'
3454      });
3455    } else if (options.icon.iconUrl === null || options.icon.iconUrl === '') {
3456      //remove the default icon
3457      delete options.icon.iconUrl;
3458      delete options.icon.iconRetinaUrl;
3459      delete options.icon.shadowUrl; // //set some defaults to the default icon
3460
3461      (leaflet_src_default()).Icon.Default.prototype.options = _objectSpread(_objectSpread({}, (leaflet_src_default()).Icon.Default.prototype.options), options.icon); //init the default icon
3462
3463      options.icon = new (leaflet_src_default()).Icon.Default();
3464    } else {
3465      options.icon = leaflet_src_default().icon(options.icon);
3466    } //get the keys
3467
3468
3469    var keys = typeof options.keys === 'string' ? options.keys : ''; //init a marker class
3470
3471    var marker = leaflet_src_default().marker([options.lat, options.lng], options); //assign the assignData to the marker
3472
3473    Object.entries(assignData).forEach(function (_ref) {
3474      var _ref2 = _slicedToArray(_ref, 2),
3475          key = _ref2[0],
3476          val = _ref2[1];
3477
3478      if (marker.extra === undefined) {
3479        marker.extra = {};
3480      } //set the data
3481
3482
3483      marker['extra'][key] = val;
3484    }); //custom property and method to handle the userOptions
3485
3486    marker.userOptions = userOptions;
3487
3488    marker.setUserOptions = function (newUserOptions) {
3489      this.userOptions = _objectSpread(_objectSpread({}, this.userOptions), newUserOptions);
3490    }; //set the tooltip
3491
3492
3493    self.addTooltip(tooltipOptions, marker); // assign the events to the feature
3494
3495    (0,utils/* executeEvent */.bP)(events, marker); //check if we have to deal with a marker cluster?
3496
3497    if (map.marker_cluster.enabled) {
3498      map.marker_cluster.markers.addLayer(marker);
3499      map.map.addLayer(map.marker_cluster.markers);
3500    } else {
3501      marker.addTo(map.map);
3502    } //add bound
3503
3504
3505    map.bounds.markers.push([marker.getLatLng().lat, marker.getLatLng().lng]); //init the popup
3506
3507    marker = self.initPopup(marker, popupOptions);
3508    self.saveMarker(mapID, marker, keys); //fit map
3509
3510    if (options.fitBounds) {
3511      self.fitBounds(map);
3512    } //open by default?
3513
3514
3515    if (typeof options.open_by_default === 'boolean' && options.open_by_default) {
3516      marker.openPopup();
3517    } //callback
3518
3519
3520    if (options.callback && typeof options.callback === 'function') {
3521      setTimeout(function () {
3522        options.callback();
3523      }, 200);
3524    }
3525
3526    return marker;
3527  }
3528};
3529;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/closeMarkerPopup.js
3530var apiCloseMarkerPopup = function apiCloseMarkerPopup(options, mapID) {
3531  // eslint-disable-next-line
3532  var self = REINOS_MAPS;
3533  var marker = self.searchMarker(mapID, options.key); //close infoWindow
3534
3535  if (marker !== undefined) {
3536    marker.closePopup();
3537  }
3538};
3539;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/getMarker.js
3540var apiGetMarker = function apiGetMarker(map, options, mapID) {
3541  // eslint-disable-next-line
3542  var self = REINOS_MAPS;
3543  var marker;
3544
3545  if (options.multiple !== undefined && options.multiple) {
3546    marker = self.searchMarker(mapID, options.key, true);
3547  } else {
3548    marker = self.searchMarker(mapID, options.key);
3549  } //is there a map
3550
3551
3552  if (map && marker !== undefined) {
3553    //remove from map
3554    return marker;
3555  }
3556};
3557;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/hideMarker.js
3558var apiHideMarker = function apiHideMarker(map, options, mapID) {
3559  // eslint-disable-next-line
3560  var self = REINOS_MAPS;
3561  var marker = self.searchMarker(mapID, options.key); //is there a map
3562
3563  if (map && marker !== undefined) {
3564    marker.closePopup();
3565    marker.closeTooltip();
3566    marker._icon.style.display = 'none';
3567    marker._shadow.style.display = 'none';
3568  }
3569};
3570;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/hideMarkers.js
3571var apiHideMarkers = function apiHideMarkers(map, mapID) {
3572  // eslint-disable-next-line
3573  var self = REINOS_MAPS;
3574  var cachedMarkers = self.markers.get(mapID);
3575
3576  if (map && cachedMarkers !== undefined) {
3577    cachedMarkers.forEach(function (_ref) {
3578      var marker = _ref.marker;
3579      //remove from map
3580      marker.closePopup();
3581      marker.closeTooltip();
3582      marker._icon.style.display = 'none';
3583      marker._shadow.style.display = 'none';
3584    });
3585  }
3586};
3587;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/markerClick.js
3588var apiMarkerClick = function apiMarkerClick(map, options, mapID) {
3589  // eslint-disable-next-line
3590  var self = REINOS_MAPS;
3591  var marker = self.searchMarker(mapID, options.key); //trigger the click
3592
3593  if (marker !== undefined) {
3594    //trigger
3595    marker.fire('click'); //callback
3596
3597    if (typeof options.callback === 'function') {
3598      options.callback(map.map, marker);
3599    }
3600  }
3601};
3602;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/openMarkerPopup.js
3603var apiOpenMarkerPopup = function apiOpenMarkerPopup(options, mapID) {
3604  // eslint-disable-next-line
3605  var self = REINOS_MAPS;
3606  var marker = self.searchMarker(mapID, options.key); //close infoWindow
3607
3608  if (marker !== undefined) {
3609    marker.openPopup();
3610  }
3611};
3612;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/removeMarker.js
3613var apiRemoveMarker = function apiRemoveMarker(map, options, mapID) {
3614  // eslint-disable-next-line
3615  var self = REINOS_MAPS;
3616  var marker = self.searchMarker(mapID, options.key);
3617
3618  if (map && marker !== undefined) {
3619    //remove the marker
3620    map.map.removeLayer(marker); //remove from the cache
3621
3622    self.removeMarker(mapID, options.key); //also removing from the cluster if needed
3623
3624    if (map.marker_cluster.enabled) {
3625      map.marker_cluster.markers.removeLayer(marker);
3626    } //remove from the bounds
3627
3628
3629    map.bounds.markers = map.bounds.markers.filter(function (value) {
3630      return marker.getLatLng().lat !== value[0] && marker.getLatLng().lng !== value[1];
3631    });
3632  }
3633};
3634;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/removeMarkers.js
3635var apiRemoveMarkers = function apiRemoveMarkers(map, mapID) {
3636  // eslint-disable-next-line
3637  var self = REINOS_MAPS;
3638  var cachedMarkers = self.markers.get(mapID);
3639
3640  if (map && cachedMarkers !== undefined) {
3641    //remove markers
3642    cachedMarkers.forEach(function (_ref) {
3643      var marker = _ref.marker;
3644      return map.map.removeLayer(marker);
3645    }); //also removing from the cluster if needed
3646
3647    if (map.marker_cluster.enabled) {
3648      map.marker_cluster.markers.clearLayers();
3649    } //reset marker cache
3650
3651
3652    self.markers.set(mapID, []); //reset the marker bounds
3653
3654    map.bounds.markers = [];
3655  }
3656};
3657;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/showMarker.js
3658var apiShowMarker = function apiShowMarker(map, options, mapID) {
3659  // eslint-disable-next-line
3660  var self = REINOS_MAPS;
3661  var marker = self.searchMarker(mapID, options.key);
3662
3663  if (map && marker !== undefined) {
3664    marker._icon.style.display = 'block';
3665    marker._shadow.style.display = 'block';
3666  }
3667};
3668;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/showMarkers.js
3669var apiShowMarkers = function apiShowMarkers(map, mapID) {
3670  // eslint-disable-next-line
3671  var self = REINOS_MAPS;
3672  var cachedMarkers = self.markers.get(mapID);
3673
3674  if (map && cachedMarkers !== undefined) {
3675    cachedMarkers.forEach(function (_ref) {
3676      var marker = _ref.marker;
3677      marker._icon.style.display = 'block';
3678      marker._icon.style.display = 'block';
3679    });
3680  }
3681};
3682;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/toggleMarkerPopup.js
3683var apiToggleMarkerPopup = function apiToggleMarkerPopup(options, mapID) {
3684  // eslint-disable-next-line
3685  var self = REINOS_MAPS;
3686  var marker = self.searchMarker(mapID, options.key); //close infoWindow
3687
3688  if (marker !== undefined) {
3689    marker.togglePopup();
3690  }
3691};
3692;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/updateMarker.js
3693function updateMarker_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3694
3695function updateMarker_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
3695 i % 2 ? updateMarker_ownKeys(Object(source), !0).forEach(function (key) { updateMarker_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : updateMarker_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3696
3697function updateMarker_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3698
3699
3700
3701var apiUpdateMarker = function apiUpdateMarker(map, options, mapID) {
3702  // eslint-disable-next-line
3703  var self = REINOS_MAPS;
3704  var marker = self.searchMarker(mapID, options.key); //is there a map
3705
3706  if (map && marker !== undefined) {
3707    //remove key
3708    delete options.key; //set the new user options
3709
3710    marker.setUserOptions(options); //update the icon
3711
3712    if (options.icon !== undefined) {
3713      options.icon = updateMarker_objectSpread({
3714        //defaults
3715        'iconUrl': null,
3716        'iconSize': null,
3717        'className': ''
3718      }, options.icon); //empty icon, fallback to the default one
3719
3720      if (options.icon.iconUrl !== '') {
3721        marker.setIcon(leaflet_src_default().icon(options.icon));
3722      } else {
3723        marker.setIcon(new (leaflet_src_default()).Icon.Default());
3724      }
3725
3726      delete options.icon;
3727    } //update tooltip
3728
3729
3730    if (options.tooltip !== undefined) {
3731      //set the tooltip
3732      self.updateTooltip(options.tooltip, marker);
3733      delete options.tooltip;
3734    } //set the popup content
3735
3736
3737    if (options.popup !== undefined && options.popup.popupContent !== undefined) {
3738      if (marker.getPopup() === undefined) {
3739        //init the popup
3740        marker = self.initPopup(marker, options.popup);
3741      } else {
3742        var decodedContent = (0,utils/* decodeContent */.vN)(options.popup.popupContent);
3743        marker.getPopup().setContent(decodedContent);
3744      }
3745
3746      delete options.popup.popupContent;
3747    }
3748
3749    return marker;
3750  }
3751};
3752;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/marker/index.js
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767/***/ }),
3768
3769/***/ 68354:
3770/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3771
3772"use strict";
3773
3774// EXPORTS
3775__webpack_require__.d(__webpack_exports__, {
3776  "MD": () => (/* reexport */ apiAddPolygon),
3777  "FD": () => (/* reexport */ apiGetPolygon),
3778  "G_": () => (/* reexport */ apiRemovePolygon),
3779  "N0": () => (/* reexport */ apiUpdatePolygon)
3780});
3781
3782// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
3783var leaflet_src = __webpack_require__(45243);
3784var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
3785// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
3786var utils = __webpack_require__(76386);
3787;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polygon/addPolygon.js
3788function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3789
3790function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3791
3792function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3793
3794
3795
3796var apiAddPolygon = function apiAddPolygon(map, options, mapID) {
3797  // eslint-disable-next-line
3798  var self = REINOS_MAPS;
3799
3800  if (map) {
3801    //merge default settings with given settings
3802    options = _objectSpread({
3803      'stroke': true,
3804      'color': '#3388ff',
3805      'weight': 3,
3806      'opacity': 1.0,
3807      'fill': true,
3808      'fillColor': '#3388ff',
3809      'fillOpacity': 0.2,
3810      'className': 'maps_rectangle',
3811      'tooltip': {},
3812      popup: {}
3813    }, options);
3814
3815    var _catchEvents = (0,utils/* catchEvents */.DK)(options),
3816        events = _catchEvents.events,
3817        optionsWithoutEvents = _catchEvents.options;
3818
3819    options = optionsWithoutEvents; //set the user options
3820
3821    var userOptions = _objectSpread({}, options);
3822
3823    var popupOptions = options.popup;
3824    delete options.popup; //reset the tooltip options
3825
3826    var tooltipOptions = options.tooltip;
3827    delete options.tooltip;
3828    var latlngs = options.latlngs;
3829    delete options.latlngs; //add bound
3830
3831    latlngs.forEach(function (latlng) {
3832      return map.bounds.polygons.push([latlng[0], latlng[1]]);
3833    });
3834    var keys = typeof options.keys == 'string' ? options.keys : '';
3835    var new_polygon = leaflet_src_default().polygon(latlngs, options).addTo(map.map); //custom property and method to handle the userOptions
3836
3837    new_polygon.userOptions = userOptions;
3838
3839    new_polygon.setUserOptions = function (newUserOptions) {
3840      this.userOptions = _objectSpread(_objectSpread({}, this.userOptions), newUserOptions);
3841    }; //set the tooltip
3842
3843
3844    self.addTooltip(tooltipOptions, new_polygon); // assign the events to the feature
3845
3846    (0,utils/* executeEvent */.bP)(events, new_polygon); //init the popup
3847
3848    new_polygon = self.initPopup(new_polygon, popupOptions); //set the return value
3849
3850    var __returnValue = self.savePolygon(mapID, new_polygon, keys); //fit map
3851
3852
3853    self.fitBounds(map);
3854    return __returnValue;
3855  }
3856};
3857;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polygon/getPolygon.js
3858var apiGetPolygon = function apiGetPolygon(map, options, mapID) {
3859  // eslint-disable-next-line
3860  var self = REINOS_MAPS; //get the marker
3861
3862  var polygon = self.searchPolygon(mapID, options.key); //is there a map
3863
3864  if (map && polygon !== undefined) {
3865    return polygon;
3866  }
3867};
3868;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polygon/updatePolygon.js
3869
3870var apiUpdatePolygon = function apiUpdatePolygon(map, options, mapID) {
3871  // eslint-disable-next-line
3872  var self = REINOS_MAPS;
3873  var polygon = self.searchPolygon(mapID, options.key);
3874
3875  if (map && polygon !== undefined) {
3876    //remove key
3877    delete options.key; //set the new user options
3878
3879    polygon.setUserOptions(options); //update tooltip
3880
3881    if (options.tooltip !== undefined) {
3882      //set the tooltip
3883      self.updateTooltip(options.tooltip, polygon);
3884      delete options.tooltip;
3885    } //if latlngs is found in the options, use that for redraw the line
3886
3887
3888    if (typeof options.latlngs !== 'undefined') {
3889      polygon.setLatLngs(options.latlngs);
3890      delete options.latlngs;
3891    } //set the new options
3892
3893
3894    polygon.setStyle(options); //set the popup content
3895
3896    if (options.popup !== undefined && options.popup.popupContent !== undefined) {
3897      if (polygon.getPopup() === undefined) {
3898        //init the popup
3899        polygon = self.initPopup(polygon, options.popup);
3900      } else {
3901        var decodedContent = (0,utils/* decodeContent */.vN)(options.popup.popupContent);
3902        polygon.getPopup().setContent(decodedContent);
3903      }
3904
3905      delete options.popup.popupContent;
3906    }
3907
3908    return polygon;
3909  }
3910};
3911;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polygon/removePolygon.js
3912var apiRemovePolygon = function apiRemovePolygon(map, options, mapID) {
3913  // eslint-disable-next-line
3914  var self = REINOS_MAPS;
3915  var polygon = self.searchPolygon(mapID, options.key);
3916
3917  if (map && polygon !== undefined) {
3918    polygon.remove(); //remove from the cache
3919
3920    self.removePolygon(mapID, options.key);
3921    polygon.getLatLngs().forEach(function (latlngs) {
3922      latlngs.forEach(function (latlng) {
3923        map.bounds.polygons = map.bounds.polygons.filter(function (val) {
3924          return val[0] !== latlng.lat && val[1] !== latlng.lng;
3925        });
3926      });
3927    });
3928  }
3929};
3930;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polygon/index.js
3931
3932
3933
3934
3935
3936/***/ }),
3937
3938/***/ 28612:
3939/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3940
3941"use strict";
3942
3943// EXPORTS
3944__webpack_require__.d(__webpack_exports__, {
3945  "cT": () => (/* reexport */ apiAddPolyline),
3946  "tv": () => (/* reexport */ apiGetPolyline),
3947  "Xr": () => (/* reexport */ apiRemovePolyline),
3948  "ww": () => (/* reexport */ apiUpdatePolyline)
3949});
3950
3951// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
3952var leaflet_src = __webpack_require__(45243);
3953var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
3954// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
3955var utils = __webpack_require__(76386);
3956;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polyline/addPolyline.js
3957function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3958
3959function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3960
3961function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
3962
3963
3964
3965var apiAddPolyline = function apiAddPolyline(map, options, mapID) {
3966  // eslint-disable-next-line
3967  var self = REINOS_MAPS;
3968
3969  if (map) {
3970    //merge default settings with given settings
3971    options = _objectSpread({
3972      'stroke': true,
3973      'color': '#3388ff',
3974      'weight': 3,
3975      'opacity': 1.0,
3976      'className': 'maps_rectangle',
3977      'tooltip': {},
3978      popup: {}
3979    }, options);
3980
3981    var _catchEvents = (0,utils/* catchEvents */.DK)(options),
3982        events = _catchEvents.events,
3983        optionsWithoutEvents = _catchEvents.options;
3984
3985    options = optionsWithoutEvents; //set the user options
3986
3987    var userOptions = _objectSpread({}, options);
3988
3989    var popupOptions = options.popup;
3990    delete options.popup; //reset the tooltip options
3991
3992    var tooltipOptions = options.tooltip;
3993    delete options.tooltip;
3994    var latlngs = options.latlngs;
3995    delete options.latlngs; //add bound
3996
3997    latlngs.forEach(function (v) {
3998      return map.bounds.polylines.push([v[0], v[1]]);
3999    });
4000    var keys = typeof options.keys === 'string' ? options.keys : '';
4001    var new_polyline = leaflet_src_default().polyline(latlngs, options).addTo(map.map); //custom property and method to handle the userOptions
4002
4003    new_polyline.userOptions = userOptions;
4004
4005    new_polyline.setUserOptions = function (newUserOptions) {
4006      this.userOptions = _objectSpread(_objectSpread({}, this.userOptions), newUserOptions);
4007    }; //set the tooltip
4008
4009
4010    self.addTooltip(tooltipOptions, new_polyline); // assign the events to the feature
4011
4012    (0,utils/* executeEvent */.bP)(events, new_polyline); //init the popup
4013
4014    new_polyline = self.initPopup(new_polyline, popupOptions); //set the return value
4015
4016    var __returnValue = self.savePolyline(mapID, new_polyline, keys); //fit map
4017
4018
4019    self.fitBounds(map);
4020    return __returnValue;
4021  }
4022};
4023;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polyline/getPolyline.js
4024var apiGetPolyline = function apiGetPolyline(map, options, mapID) {
4025  // eslint-disable-next-line
4026  var self = REINOS_MAPS;
4027  var polyline = self.searchPolyline(mapID, options.key);
4028
4029  if (map && polyline !== undefined) {
4030    return polyline;
4031  }
4032};
4033;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polyline/updatePolyline.js
4034
4035var apiUpdatePolyline = function apiUpdatePolyline(map, options, mapID) {
4036  // eslint-disable-next-line
4037  var self = REINOS_MAPS;
4038  var polyline = self.searchPolyline(mapID, options.key);
4039
4040  if (map && polyline !== undefined) {
4041    //remove key
4042    delete options.key; //set the new user options
4043
4044    polyline.setUserOptions(options); //update tooltip
4045
4046    if (options.tooltip !== undefined) {
4047      //set the tooltip
4048      self.updateTooltip(options.tooltip, polyline);
4049      delete options.tooltip;
4050    } //if latlngs is found in the options, use that for redraw the line
4051
4052
4053    if (typeof options.latlngs !== 'undefined') {
4054      polyline.setLatLngs(options.latlngs);
4055      delete options.latlngs;
4056    } //set the new options
4057
4058
4059    polyline.setStyle(options); //set the popup content
4060
4061    if (options.popup !== undefined && options.popup.popupContent !== undefined) {
4062      if (polyline.getPopup() === undefined) {
4063        //init the popup
4064        polyline = self.initPopup(polyline, options.popup);
4065      } else {
4066        var decodedContent = (0,utils/* decodeContent */.vN)(options.popup.popupContent);
4067        polyline.getPopup().setContent(decodedContent);
4068      }
4069
4070      delete options.popup.popupContent;
4071    }
4072
4073    return polyline;
4074  }
4075};
4076;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polyline/removePolyline.js
4077var apiRemovePolyline = function apiRemovePolyline(map, options, mapID) {
4078  // eslint-disable-next-line
4079  var self = REINOS_MAPS;
4080  var polyline = self.searchPolyline(mapID, options.key);
4081
4082  if (map && polyline !== undefined) {
4083    polyline.remove(); //remove from the cache
4084
4085    self.removePolyline(mapID, options.key); //rebuild the bounds
4086
4087    polyline.getLatLngs().forEach(function (latlng) {
4088      map.bounds.polylines = map.bounds.polylines.filter(function (val) {
4089        return val[0] !== latlng.lat && val[1] !== latlng.lng;
4090      });
4091    });
4092  }
4093};
4094;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/polyline/index.js
4095
4096
4097
4098
4099
4100/***/ }),
4101
4102/***/ 22048:
4103/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4104
4105"use strict";
4106
4107// EXPORTS
4108__webpack_require__.d(__webpack_exports__, {
4109  "bU": () => (/* reexport */ apiAddRectangle),
4110  "mZ": () => (/* reexport */ apiGetRectangle),
4111  "T4": () => (/* reexport */ apiRemoveRectangle),
4112  "oG": () => (/* reexport */ apiUpdateRectangle)
4113});
4114
4115// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
4116var leaflet_src = __webpack_require__(45243);
4117var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
4118// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
4119var utils = __webpack_require__(76386);
4120;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/rectangle/addRectangle.js
4121function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4122
4123function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4124
4125function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4126
4127
4128
4129var apiAddRectangle = function apiAddRectangle(map, options, mapID) {
4130  // eslint-disable-next-line
4131  var self = REINOS_MAPS;
4132
4133  if (map) {
4134    //merge default settings with given settings
4135    options = _objectSpread({
4136      'stroke': true,
4137      'color': '#3388ff',
4138      'weight': 3,
4139      'opacity': 1.0,
4140      'fill': true,
4141      'fillColor': '#3388ff',
4142      'fillOpacity': 0.2,
4143      'className': 'maps_rectangle',
4144      'tooltip': {},
4145      popup: {}
4146    }, options);
4147
4148    var _catchEvents = (0,utils/* catchEvents */.DK)(options),
4149        events = _catchEvents.events,
4150        optionsWithoutEvents = _catchEvents.options;
4151
4152    options = optionsWithoutEvents; //set the user options
4153
4154    var userOptions = _objectSpread({}, options);
4155
4156    var popupOptions = options.popup;
4157    delete options.popup; //reset the tooltip options
4158
4159    var tooltipOptions = options.tooltip;
4160    delete options.tooltip;
4161    var bounds = options.bounds;
4162    delete options.bounds; //add bound
4163
4164    map.bounds.rectangles.push([bounds[0][0], bounds[0][1]], [bounds[1][0], bounds[1][1]]);
4165    var keys = typeof options.keys === 'string' ? options.keys : '';
4166    var new_rectangle = leaflet_src_default().rectangle(bounds, options).addTo(map.map); //custom property and method to handle the userOptions
4167
4168    new_rectangle.userOptions = userOptions;
4169
4170    new_rectangle.setUserOptions = function (newUserOptions) {
4171      this.userOptions = _objectSpread(_objectSpread({}, this.userOptions), newUserOptions);
4172    }; //set the tooltip
4173
4174
4175    self.addTooltip(tooltipOptions, new_rectangle); // assign the events to the feature
4176
4177    (0,utils/* executeEvent */.bP)(events, new_rectangle); //init the popup
4178
4179    new_rectangle = self.initPopup(new_rectangle, popupOptions); //set the return value
4180
4181    var __returnValue = self.saveRectangle(mapID, new_rectangle, keys); //fit map
4182
4183
4184    self.fitBounds(map);
4185    return __returnValue;
4186  }
4187};
4188;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/rectangle/getRectangle.js
4189var apiGetRectangle = function apiGetRectangle(map, options, mapID) {
4190  // eslint-disable-next-line
4191  var self = REINOS_MAPS;
4192  var rectangle = self.searchRectangle(mapID, options.key); //is there a map
4193
4194  if (map && rectangle !== undefined) {
4195    return rectangle;
4196  }
4197};
4198;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/rectangle/updateRectangle.js
4199
4200var apiUpdateRectangle = function apiUpdateRectangle(map, options, mapID) {
4201  // eslint-disable-next-line
4202  var self = REINOS_MAPS;
4203  var rectangle = self.searchRectangle(mapID, options.key); //is there a map
4204
4205  if (map && rectangle !== undefined) {
4206    //remove key
4207    delete options.key; //set the new user options
4208
4209    rectangle.setUserOptions(options); //update tooltip
4210
4211    if (options.tooltip !== undefined) {
4212      //set the tooltip
4213      self.updateTooltip(options.tooltip, rectangle);
4214      delete options.tooltip;
4215    } //if latlngs is found in the options, use that for redraw the line
4216
4217
4218    if (typeof options.latlngs !== 'undefined') {
4219      rectangle.setLatLngs(options.latlngs);
4220      delete options.latlngs;
4221    } //set the new options
4222
4223
4224    rectangle.setStyle(options); //set the popup content
4225
4226    if (options.popup !== undefined && options.popup.popupContent !== undefined) {
4227      if (rectangle.getPopup() === undefined) {
4228        //init the popup
4229        rectangle = self.initPopup(rectangle, options.popup);
4230      } else {
4231        var decodedContent = (0,utils/* decodeContent */.vN)(options.popup.popupContent);
4232        rectangle.getPopup().setContent(decodedContent);
4233      }
4234
4235      delete options.popup.popupContent;
4236    }
4237
4238    return rectangle;
4239  }
4240};
4241;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/rectangle/removeRectangle.js
4242var apiRemoveRectangle = function apiRemoveRectangle(map, options, mapID) {
4243  // eslint-disable-next-line
4244  var self = REINOS_MAPS;
4245  var rectangle = self.searchRectangle(mapID, options.key); //is there a map
4246
4247  if (map && rectangle !== undefined) {
4248    rectangle.remove(); //remove from the cache
4249
4250    self.removeRectangle(mapID, options.key); //remove from the bounds
4251
4252    var northEast = rectangle.getBounds().getNorthEast();
4253    var southWest = rectangle.getBounds().getSouthWest();
4254    map.bounds.rectangles = map.bounds.rectangles.filter(function (value) {
4255      return northEast.lat !== value[0] && northEast.lng !== value[1] || southWest.lat !== value[0] && southWest.lng !== value[1];
4256    });
4257  }
4258};
4259;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/rectangle/index.js
4260
4261
4262
4263
4264
4265/***/ }),
4266
4267/***/ 57112:
4268/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4269
4270"use strict";
4271
4272// EXPORTS
4273__webpack_require__.d(__webpack_exports__, {
4274  "SJ": () => (/* reexport */ apiAddGeoJson),
4275  "T5": () => (/* reexport */ apiAddKml),
4276  "tL": () => (/* reexport */ apiGeoLocation),
4277  "Bc": () => (/* reexport */ apiGeocode)
4278});
4279
4280// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
4281var leaflet_src = __webpack_require__(45243);
4282var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
4283;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/utils/addGeoJson.js
4284
4285var apiAddGeoJson = function apiAddGeoJson(map, options) {
4286  // eslint-disable-next-line
4287  var self = REINOS_MAPS;
4288
4289  if (map) {
4290    //is there a dynamic given function for the styling?
4291
4292    /*
4293    REINOS_MAPS.setGeoJsonStyle(function(feature) {
4294        switch (feature.properties.party) {
4295            case 'Republican': return {color: "#ff0000"};
4296            case 'Democrat':   return {color: "#0000ff"};
4297        });
4298    */
4299    if (typeof self._geojson.style === 'function') {
4300      options.style = self._geojson.style;
4301    } //call the geoJson function
4302
4303
4304    leaflet_src_default().geoJSON(options.json, {
4305      style: options.style,
4306      onEachFeature: function onEachFeature(feature, layer) {
4307        //enable the popup
4308        if (feature.properties && feature.properties.popupContent) {
4309          layer.bindPopup(feature.properties.popupContent);
4310        } //enable the tooltip
4311
4312
4313        if (feature.properties && feature.properties.name) {
4314          layer.bindTooltip(feature.properties.name);
4315        } //save the bounds
4316
4317
4318        if (typeof layer.getLatLngs === 'function') {
4319          layer.getLatLngs().flat().forEach(function (location) {
4320            map.bounds.geojson.push([location.lat, location.lng]);
4321          });
4322        } else {
4323          var location = layer.getLatLng();
4324          map.bounds.geojson.push([location.lat, location.lng]);
4325        }
4326      }
4327    }).addTo(map.map); //fit map
4328
4329    self.fitBounds(map);
4330  }
4331};
4332// EXTERNAL MODULE: ./node_modules/axios/index.js
4333var axios = __webpack_require__(9669);
4334var axios_default = /*#__PURE__*/__webpack_require__.n(axios);
4335;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/libs/leaflet-kml.js
4336
4337
4338(leaflet_src_default()).KML = leaflet_src_default().FeatureGroup.extend({
4339  options: {},
4340  initialize: function initialize(kml, options) {
4341    leaflet_src_default().Util.setOptions(this, options);
4342    this._kml = kml;
4343    this._layers = {};
4344
4345    if (kml) {
4346      this.addKML(kml, options);
4347    }
4348  },
4349  loadXML: function loadXML(url, cb, options) {
4350    if (options === undefined) {
4351      options = this.options;
4352    }
4353
4354    axios_default().get(url, {
4355      responseType: 'xml'
4356    }).then(function (response) {
4357      cb(response.request.responseXML, options);
4358    });
4359  },
4360  addKML: function addKML(url, options) {
4361    var _this = this;
4362
4363    var cb = function cb(gpx, options) {
4364      _this._addKML(gpx, options);
4365    };
4366
4367    this.loadXML(url, cb, options);
4368  },
4369  _addKML: function _addKML(xml) {
4370    var layers = leaflet_src_default().KML.parseKML(xml);
4371
4372    if (!layers || !layers.length) {
4373      return;
4374    }
4375
4376    for (var i = 0; i < layers.length; i++) {
4377      this.fire('addlayer', {
4378        layer: layers[i]
4379      });
4380      this.addLayer(layers[i]);
4381    }
4382
4383    this.latLngs = leaflet_src_default().KML.getLatLngs(xml);
4384    this.fire('loaded');
4385  },
4386  latLngs: []
4387});
4388leaflet_src_default().Util.extend((leaflet_src_default()).KML, {
4389  parseKML: function parseKML(xml) {
4390    var style = this.parseStyle(xml);
4391    var el = xml.getElementsByTagName('Folder');
4392    var layers = [];
4393    var l;
4394
4395    for (var i = 0; i < el.length; i++) {
4396      if (!this._check_folder(el[i])) {
4397        continue;
4398      }
4399
4400      l = this.parseFolder(el[i], style);
4401
4402      if (l) {
4403        layers.push(l);
4404      }
4405    }
4406
4407    el = xml.getElementsByTagName('Placemark');
4408
4409    for (var j = 0; j < el.length; j++) {
4410      if (!this._check_folder(el[j])) {
4411        continue;
4412      }
4413
4414      l = this.parsePlacemark(el[j], xml, style);
4415
4416      if (l) {
4417        layers.push(l);
4418      }
4419    }
4420
4421    return layers;
4422  },
4423  // Return false if e's first parent Folder is not [folder]
4424  // - returns true if no parent Folders
4425  _check_folder: function _check_folder(e, folder) {
4426    e = e.parentElement;
4427
4428    while (e && e.tagName !== 'Folder') {
4429      e = e.parentElement;
4430    }
4431
4432    return !e || e === folder;
4433  },
4434  parseStyle: function parseStyle(xml) {
4435    var style = {};
4436    var sl = xml.getElementsByTagName('Style'); //for (var i = 0; i < sl.length; i++) {
4437
4438    var attributes = {
4439      color: true,
4440      width: true,
4441      Icon: true,
4442      href: true,
4443      hotSpot: true
4444    };
4445
4446    function _parse(xml) {
4447      var options = {};
4448
4449      for (var i = 0; i < xml.childNodes.length; i++) {
4450        var e = xml.childNodes[i];
4451        var key = e.tagName;
4452
4453        if (!attributes[key]) {
4454          continue;
4455        }
4456
4457        if (key === 'hotSpot') {
4458          for (var j = 0; j < e.attributes.length; j++) {
4459            options[e.attributes[j].name] = e.attributes[j].nodeValue;
4460          }
4461        } else {
4462          var value = e.childNodes[0].nodeValue;
4463
4464          if (key === 'color') {
4465            options.opacity = parseInt(value.substring(0, 2), 16) / 25
44655.0;
4466            options.color = '#' + value.substring(2, 8);
4467          } else if (key === 'width') {
4468            options.weight = value;
4469          } else if (key === 'Icon') {
4470            var ioptions = _parse(e);
4471
4472            if (ioptions.href) {
4473              options.href = ioptions.href;
4474            }
4475          } else if (key === 'href') {
4476            options.href = value;
4477          }
4478        }
4479      }
4480
4481      return options;
4482    }
4483
4484    for (var i = 0; i < sl.length; i++) {
4485      var e = sl[i];
4486      var el = void 0;
4487      var options = {},
4488          poptions = {},
4489          ioptions = {};
4490      el = e.getElementsByTagName('LineStyle');
4491
4492      if (el && el[0]) {
4493        options = _parse(el[0]);
4494      }
4495
4496      el = e.getElementsByTagName('PolyStyle');
4497
4498      if (el && el[0]) {
4499        poptions = _parse(el[0]);
4500      }
4501
4502      if (poptions.color) {
4503        options.fillColor = poptions.color;
4504      }
4505
4506      if (poptions.opacity) {
4507        options.fillOpacity = poptions.opacity;
4508      }
4509
4510      el = e.getElementsByTagName('IconStyle');
4511
4512      if (el && el[0]) {
4513        ioptions = _parse(el[0]);
4514      }
4515
4516      if (ioptions.href) {
4517        // save anchor info until the image is loaded
4518        options.icon = new (leaflet_src_default()).KMLIcon({
4519          iconUrl: ioptions.href,
4520          shadowUrl: null,
4521          iconAnchorRef: {
4522            x: ioptions.x,
4523            y: ioptions.y
4524          },
4525          iconAnchorType: {
4526            x: ioptions.xunits,
4527            y: ioptions.yunits
4528          }
4529        });
4530      }
4531
4532      style['#' + e.getAttribute('id')] = options;
4533    }
4534
4535    return style;
4536  },
4537  parseFolder: function parseFolder(xml, style) {
4538    var el;
4539    var layers = [];
4540    var l;
4541    el = xml.getElementsByTagName('Folder');
4542
4543    for (var i = 0; i < el.length; i++) {
4544      if (!this._check_folder(el[i], xml)) {
4545        continue;
4546      }
4547
4548      l = this.parseFolder(el[i], style);
4549
4550      if (l) {
4551        layers.push(l);
4552      }
4553    }
4554
4555    el = xml.getElementsByTagName('Placemark');
4556
4557    for (var j = 0; j < el.length; j++) {
4558      if (!this._check_folder(el[j], xml)) {
4559        continue;
4560      }
4561
4562      l = this.parsePlacemark(el[j], xml, style);
4563
4564      if (l) {
4565        layers.push(l);
4566      }
4567    }
4568
4569    if (!layers.length) {
4570      return;
4571    }
4572
4573    if (layers.length === 1) {
4574      return layers[0];
4575    }
4576
4577    return new (leaflet_src_default()).FeatureGroup(layers);
4578  },
4579  parsePlacemark: function parsePlacemark(place, xml, style) {
4580    var i, j, el;
4581    var options = {};
4582    el = place.getElementsByTagName('styleUrl');
4583
4584    for (i = 0; i < el.length; i++) {
4585      var url = el[i].childNodes[0].nodeValue;
4586
4587      for (var a in style[url]) {
4588        options[a] = style[url][a];
4589      }
4590    }
4591
4592    var layers = [];
4593    var parse = ['LineString', 'Polygon', 'Point'];
4594
4595    for (j in parse) {
4596      var tag = parse[j];
4597      el = place.getElementsByTagName(tag);
4598
4599      for (i = 0; i < el.length; i++) {
4600        var l = this['parse' + tag](el[i], xml, options);
4601
4602        if (l) {
4603          layers.push(l);
4604        }
4605      }
4606    }
4607
4608    if (!layers.length) {
4609      return;
4610    }
4611
4612    var layer = layers[0];
4613
4614    if (layers.length > 1) {
4615      layer = new (leaflet_src_default()).FeatureGroup(layers);
4616    }
4617
4618    var name,
4619        descr = '';
4620    el = place.getElementsByTagName('name');
4621
4622    if (el.length) {
4623      name = el[0].childNodes[0].nodeValue;
4624    }
4625
4626    el = place.getElementsByTagName('description');
4627
4628    for (i = 0; i < el.length; i++) {
4629      for (j = 0; j < el[i].childNodes.length; j++) {
4630        descr = descr + el[i].childNodes[j].nodeValue;
4631      }
4632    }
4633
4634    if (name) {
4635      layer.bindPopup('<h2>' + name + '</h2>' + descr);
4636    }
4637
4638    return layer;
4639  },
4640  parseCoords: function parseCoords(xml) {
4641    var el = xml.getElementsByTagName('coordinates');
4642    return this._read_coords(el[0]);
4643  },
4644  parseLineString: function parseLineString(line, xml, options) {
4645    var coords = this.parseCoords(line);
4646
4647    if (!coords.length) {
4648      return;
4649    }
4650
4651    return new (leaflet_src_default()).Polyline(coords, options);
4652  },
4653  parsePoint: function parsePoint(line, xml, options) {
4654    var el = line.getElementsByTagName('coordinates');
4655
4656    if (!el.length) {
4657      return;
4658    }
4659
4660    var ll = el[0].childNodes[0].nodeValue.split(',');
4661    return new (leaflet_src_default()).KMLMarker(new (leaflet_src_default()).LatLng(ll[1], ll[0]), options);
4662  },
4663  parsePolygon: function parsePolygon(line, xml, options) {
4664    var el,
4665        inner = [],
4666        coords;
4667    var polys = [];
4668    el = line.getElementsByTagName('outerBoundaryIs');
4669
4670    for (var i = 0; i < el.length; i++) {
4671      coords = this.parseCoords(el[i]);
4672
4673      if (coords) {
4674        polys.push(coords);
4675      }
4676    }
4677
4678    el = line.getElementsByTagName('innerBoundaryIs');
4679
4680    for (var _i = 0; _i < el.length; _i++) {
4681      coords = this.parseCoords(el[_i]);
4682
4683      if (coords) {
4684        inner.push(coords);
4685      }
4686    }
4687
4688    if (!polys.length) {
4689      return;
4690    }
4691
4692    if (options.fillColor) {
4693      options.fill = true;
4694    }
4695
4696    if (polys.length === 1) {
4697      return new (leaflet_src_default()).Polygon(polys.concat(inner), options);
4698    }
4699
4700    return new (leaflet_src_default()).MultiPolygon(polys, options);
4701  },
4702  getLatLngs: function getLatLngs(xml) {
4703    var el = xml.getElementsByTagName('coordinates');
4704    var coords = [];
4705
4706    for (var j = 0; j < el.length; j++) {
4707      // text might span many childnodes
4708      coords = coords.concat(this._read_coords(el[j]));
4709    }
4710
4711    return coords;
4712  },
4713  _read_coords: function _read_coords(el) {
4714    var text = '',
4715        coords = [];
4716
4717    for (var i = 0; i < el.childNodes.length; i++) {
4718      text = text + el.childNodes[i].nodeValue;
4719    }
4720
4721    text = text.split(/[\s\n]+/);
4722
4723    for (var _i2 = 0; _i2 < text.length; _i2++) {
4724      var ll = text[_i2].split(',');
4725
4726      if (ll.length < 2) {
4727        continue;
4728      }
4729
4730      coords.push(new (leaflet_src_default()).LatLng(ll[1], ll[0]));
4731    }
4732
4733    return coords;
4734  }
4735});
4736(leaflet_src_default()).KMLIcon = leaflet_src_default().Icon.extend({
4737  createIcon: function createIcon() {
4738    var img = this._createIcon('icon');
4739
4740    img.onload = function () {
4741      var i = new Image();
4742      i.src = this.src;
4743      this.style.width = i.width + 'px';
4744      this.style.height = i.height + 'px';
4745
4746      if (this.anchorType.x === 'UNITS_FRACTION' || this.anchorType.x === 'fraction') {
4747        img.style.marginLeft = -this.anchor.x * i.width + 'px';
4748      }
4749
4750      if (this.anchorType.y === 'UNITS_FRACTION' || this.anchorType.x === 'fraction') {
4751        img.style.marginTop = -(1 - this.anchor.y) * i.height + 'px';
4752      }
4753
4754      this.style.display = '';
4755    };
4756
4757    return img;
4758  },
4759  _setIconStyles: function _setIconStyles(img, name) {
4760    leaflet_src_default().Icon.prototype._setIconStyles.apply(this, [img, name]); // save anchor information to the image
4761
4762
4763    img.anchor = this.options.iconAnchorRef;
4764    img.anchorType = this.options.iconAnchorType;
4765  }
4766});
4767(leaflet_src_default()).KMLMarker = leaflet_src_default().Marker.extend({
4768  options: {
4769    icon: new (leaflet_src_default()).KMLIcon.Default()
4770  }
4771});
4772;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/utils/addKml.js
4773
4774
4775var apiAddKml = function apiAddKml(map, options) {
4776  var kmlLayer = new (leaflet_src_default()).KML(options.url);
4777  kmlLayer.on('loaded', function (e) {
4778    map.map.fitBounds(e.target.getBounds());
4779  });
4780  map.map.addLayer(kmlLayer);
4781};
4782;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/utils/geoLocation.js
4783var _this = undefined;
4784
4785var apiGeoLocation = function apiGeoLocation(options) {
4786  _this.geolocate({
4787    success: function success(pos) {
4788      if (typeof options.callback === 'function') {
4789        options.callback(pos);
4790      }
4791    }
4792  });
4793};
4794// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
4795var utils = __webpack_require__(76386);
4796;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/utils/geocode.js
4797
4798
4799var search = function search(type, options, baseUrl) {
4800  var sessionKey = (0,utils/* createUUID */.Lk)();
4801  return fetch("".concat(baseUrl, "&type=").concat(type), {
4802    method: 'post',
4803    headers: {
4804      'Content-Type': 'application/x-www-form-urlencoded'
4805    },
4806    body: "input=".concat(options[type])
4807  }).then(function (res) {
4808    return res.json();
4809  }).then(function (result) {
4810    if (options.callback && typeof options.callback === 'function') {
4811      options.callback(result, type, sessionKey);
4812    }
4813  });
4814};
4815
4816var apiGeocode = function apiGeocode(options) {
4817  if (options.latlng !== undefined) {
4818    search('latlng', options, window.REINOS_MAPS.api_path);
4819  }
4820
4821  if (options.address !== undefined) {
4822    search('address', options, window.REINOS_MAPS.api_path);
4823  }
4824
4825  if (options.ip !== undefined) {
4826    search('ip', options, window.REINOS_MAPS.api_path);
4827  }
4828};
4829;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/utils/index.js
4830
4831
4832
4833
4834
4835/***/ }),
4836
4837/***/ 66779:
4838/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4839
4840"use strict";
4841/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4842/* harmony export */   "D": () => (/* binding */ catchEvents),
4843/* harmony export */   "b": () => (/* binding */ executeEvent)
4844/* harmony export */ });
4845function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4846
4847function _nonIterableRest() { throw new TypeError("Invalid attempt to de
4847structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4848
4849function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4850
4851function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4852
4853function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
4854
4855function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4856
4857/**
4858 * Catch events and return them. But also return the options without the events back
4859 *
4860 * @param options
4861 * @returns {{options, events: *[]}}
4862 */
4863function catchEvents(options) {
4864  var events = [];
4865  Object.entries(options).forEach(function (_ref) {
4866    var _ref2 = _slicedToArray(_ref, 2),
4867        index = _ref2[0],
4868        v = _ref2[1];
4869
4870    if (typeof v === 'string' && index.match('event_')) {
4871      events.push({
4872        name: index.replace('event_', ''),
4873        value: v
4874      });
4875      delete options[index];
4876    }
4877  });
4878  return {
4879    events: events,
4880    options: options
4881  };
4882}
4883function executeEvent(events, feature) {
4884  //add events from the option array
4885  events.forEach(function (event) {
vendor: 2,956 bytes, lines 4886-4937
4886    feature.on(event.name, function () {
4887      //because we get the data as string, we need eval()
4888      eval(event.value);
4889    });
4890  });
4891}
4892
4893/***/ }),
4894
4895/***/ 76386:
4896/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4897
4898"use strict";
4899
4900// EXPORTS
4901__webpack_require__.d(__webpack_exports__, {
4902  "kb": () => (/* reexport */ arrayToLatLng),
4903  "tV": () => (/* reexport */ base64_base64Decode),
4904  "DK": () => (/* reexport */ catchEvents/* catchEvents */.D),
4905  "Rv": () => (/* reexport */ cleanArray),
4906  "Lk": () => (/* reexport */ createUUID),
4907  "gY": () => (/* reexport */ crsCollection),
4908  "vN": () => (/* reexport */ decodeContent),
4909  "bP": () => (/* reexport */ catchEvents/* executeEvent */.b),
4910  "NY": () => (/* reexport */ reParseLatLngArray),
4911  "ko": () => (/* reexport */ replaceAll/* replaceAll */.k),
4912  "np": () => (/* reexport */ reverseLatLngArray),
4913  "UC": () => (/* reexport */ strToBool),
4914  "_y": () => (/* reexport */ throwError)
4915});
4916
4917// UNUSED EXPORTS: base64Encode, parseToJsArray, removeEmptyProps, setInfoWindowUrl, uniqueArray
4918
4919// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
4920var leaflet_src = __webpack_require__(45243);
4921var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
4922;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/arrayToLatLng.js
4923function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
4924
4925function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4926
4927function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4928
4929function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
4930
4931function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
4932
4933function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
4934
4935
4936var arrayToLatLng = function arrayToLatLng(coords) {
4937  var new_coords = [];
vendor: 6,405 bytes, lines 4938-5110
4938  Object.entries(coords).forEach(function (_ref) {
4939    var _ref2 = _slicedToArray(_ref, 2),
4940        val = _ref2[1];
4941
4942    if (typeof val === 'string') {
4943      val = val.split(',');
4944    }
4945
4946    var lat = parseFloat(val[0].trim());
4947    var lng = parseFloat(val[1].trim());
4948    new_coords.push(leaflet_src_default().latLng(lat, lng));
4949  });
4950  return new_coords;
4951};
4952;// CONCATENATED MODULE: ./node_modules/js-base64/base64.mjs
4953/**
4954 *  base64.ts
4955 *
4956 *  Licensed under the BSD 3-Clause License.
4957 *    http://opensource.org/licenses/BSD-3-Clause
4958 *
4959 *  References:
4960 *    http://en.wikipedia.org/wiki/Base64
4961 *
4962 * @author Dan Kogai (https://github.com/dankogai)
4963 */
4964const version = '3.7.2';
4965/**
4966 * @deprecated use lowercase `version`.
4967 */
4968const VERSION = version;
4969const _hasatob = typeof atob === 'function';
4970const _hasbtoa = typeof btoa === 'function';
4971const _hasBuffer = typeof Buffer === 'function';
4972const _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;
4973const _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;
4974const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
4975const b64chs = Array.prototype.slice.call(b64ch);
4976const b64tab = ((a) => {
4977    let tab = {};
4978    a.forEach((c, i) => tab[c] = i);
4979    return tab;
4980})(b64chs);
4981const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
4982const _fromCC = String.fromCharCode.bind(String);
4983const _U8Afrom = typeof Uint8Array.from === 'function'
4984    ? Uint8Array.from.bind(Uint8Array)
4985    : (it, fn = (x) => x) => new Uint8Array(Array.prototype.slice.call(it, 0).map(fn));
4986const _mkUriSafe = (src) => src
4987    .replace(/=/g, '').replace(/[+\/]/g, (m0) => m0 == '+' ? '-' : '_');
4988const _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\+\/]/g, '');
4989/**
4990 * polyfill version of `btoa`
4991 */
4992const btoaPolyfill = (bin) => {
4993    // console.log('polyfilled');
4994    let u32, c0, c1, c2, asc = '';
4995    const pad = bin.length % 3;
4996    for (let i = 0; i < bin.length;) {
4997        if ((c0 = bin.charCodeAt(i++)) > 255 ||
4998            (c1 = bin.charCodeAt(i++)) > 255 ||
4999            (c2 = bin.charCodeAt(i++)) > 255)
5000            throw new TypeError('invalid character found');
5001        u32 = (c0 << 16) | (c1 << 8) | c2;
5002        asc += b64chs[u32 >> 18 & 63]
5003            + b64chs[u32 >> 12 & 63]
5004            + b64chs[u32 >> 6 & 63]
5005            + b64chs[u32 & 63];
5006    }
5007    return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc;
5008};
5009/**
5010 * does what `window.btoa` of web browsers do.
5011 * @param {String} bin binary string
5012 * @returns {string} Base64-encoded string
5013 */
5014const _btoa = _hasbtoa ? (bin) => btoa(bin)
5015    : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')
5016        : btoaPolyfill;
5017const _fromUint8Array = _hasBuffer
5018    ? (u8a) => Buffer.from(u8a).toString('base64')
5019    : (u8a) => {
5020        // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326
5021        const maxargs = 0x1000;
5022        let strs = [];
5023        for (let i = 0, l = u8a.length; i < l; i += maxargs) {
5024            strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));
5025        }
5026        return _btoa(strs.join(''));
5027    };
5028/**
5029 * converts a Uint8Array to a Base64 string.
5030 * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5
5031 * @returns {string} Base64 string
5032 */
5033const fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);
5034// This trick is found broken https://github.com/dankogai/js-base64/issues/130
5035// const utob = (src: string) => unescape(encodeURIComponent(src));
5036// reverting good old fationed regexp
5037const cb_utob = (c) => {
5038    if (c.length < 2) {
5039        var cc = c.charCodeAt(0);
5040        return cc < 0x80 ? c
5041            : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))
5042                + _fromCC(0x80 | (cc & 0x3f)))
5043                : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))
5044                    + _fromCC(0x80 | ((cc >>> 6) & 0x3f))
5045                    + _fromCC(0x80 | (cc & 0x3f)));
5046    }
5047    else {
5048        var cc = 0x10000
5049            + (c.charCodeAt(0) - 0xD800) * 0x400
5050            + (c.charCodeAt(1) - 0xDC00);
5051        return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))
5052            + _fromCC(0x80 | ((cc >>> 12) & 0x3f))
5053            + _fromCC(0x80 | ((cc >>> 6) & 0x3f))
5054            + _fromCC(0x80 | (cc & 0x3f)));
5055    }
5056};
5057const re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
5058/**
5059 * @deprecated should have been internal use only.
5060 * @param {string} src UTF-8 string
5061 * @returns {string} UTF-16 string
5062 */
5063const utob = (u) => u.replace(re_utob, cb_utob);
5064//
5065const _encode = _hasBuffer
5066    ? (s) => Buffer.from(s, 'utf8').toString('base64')
5067    : _TE
5068        ? (s) => _fromUint8Array(_TE.encode(s))
5069        : (s) => _btoa(utob(s));
5070/**
5071 * converts a UTF-8-encoded string to a Base64 string.
5072 * @param {boolean} [urlsafe] if `true` make the result URL-safe
5073 * @returns {string} Base64 string
5074 */
5075const base64_encode = (src, urlsafe = false) => urlsafe
5076    ? _mkUriSafe(_encode(src))
5077    : _encode(src);
5078/**
5079 * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.
5080 * @returns {string} Base64 string
5081 */
5082const base64_encodeURI = (src) => base64_encode(src, true);
5083// This trick is found broken https://github.com/dankogai/js-base64/issues/130
5084// const btou = (src: string) => decodeURIComponent(escape(src));
5085// reverting good old fationed regexp
5086const re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g;
5087const cb_btou = (cccc) => {
5088    switch (cccc.length) {
5089        case 4:
5090            var cp = ((0x07 & cccc.charCodeAt(0)) << 18)
5091                | ((0x3f & cccc.charCodeAt(1)) << 12)
5092                | ((0x3f & cccc.charCodeAt(2)) << 6)
5093                | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;
5094            return (_fromCC((offset >>> 10) + 0xD800)
5095                + _fromCC((offset & 0x3FF) + 0xDC00));
5096        case 3:
5097            return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)
5098                | ((0x3f & cccc.charCodeAt(1)) << 6)
5099                | (0x3f & cccc.charCodeAt(2)));
5100        default:
5101            return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)
5102                | (0x3f & cccc.charCodeAt(1)));
5103    }
5104};
5105/**
5106 * @deprecated should have been internal use only.
5107 * @param {string} src UTF-16 string
5108 * @returns {string} UTF-8 string
5109 */
5110const btou = (b) =>
5110 b.replace(re_btou, cb_btou);
5111/**
5112 * polyfill version of `atob`
5113 */
5114const atobPolyfill = (asc) => {
5115    // console.log('polyfilled');
5116    asc = asc.replace(/\s+/g, '');
5117    if (!b64re.test(asc))
5118        throw new TypeError('malformed base64.');
5119    asc += '=='.slice(2 - (asc.length & 3));
5120    let u24, bin = '', r1, r2;
5121    for (let i = 0; i < asc.length;) {
5122        u24 = b64tab[asc.charAt(i++)] << 18
5123            | b64tab[asc.charAt(i++)] << 12
5124            | (r1 = b64tab[asc.charAt(i++)]) << 6
5125            | (r2 = b64tab[asc.charAt(i++)]);
5126        bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)
5127            : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)
5128                : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);
5129    }
5130    return bin;
5131};
5132/**
5133 * does what `window.atob` of web browsers do.
5134 * @param {String} asc Base64-encoded string
5135 * @returns {string} binary string
5136 */
5137const _atob = _hasatob ? (asc) => atob(_tidyB64(asc))
5138    : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')
5139        : atobPolyfill;
5140//
5141const _toUint8Array = _hasBuffer
5142    ? (a) => _U8Afrom(Buffer.from(a, 'base64'))
5143    : (a) => _U8Afrom(_atob(a), c => c.charCodeAt(0));
5144/**
5145 * converts a Base64 string to a Uint8Array.
5146 */
5147const toUint8Array = (a) => _toUint8Array(_unURI(a));
5148//
5149const _decode = _hasBuffer
5150    ? (a) => Buffer.from(a, 'base64').toString('utf8')
5151    : _TD
5152        ? (a) => _TD.decode(_toUint8Array(a))
5153        : (a) => btou(_atob(a));
5154const _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));
5155/**
5156 * converts a Base64 string to a UTF-8 string.
5157 * @param {String} src Base64 string.  Both normal and URL-safe are supported
5158 * @returns {string} UTF-8 string
5159 */
5160const decode = (src) => _decode(_unURI(src));
5161/**
5162 * check if a value is a valid Base64 string
5163 * @param {String} src a value to check
5164  */
5165const isValid = (src) => {
5166    if (typeof src !== 'string')
5167        return false;
5168    const s = src.replace(/\s+/g, '').replace(/={0,2}$/, '');
5169    return !/[^\s0-9a-zA-Z\+/]/.test(s) || !/[^\s0-9a-zA-Z\-_]/.test(s);
5170};
5171//
5172const _noEnum = (v) => {
5173    return {
5174        value: v, enumerable: false, writable: true, configurable: true
5175    };
5176};
5177/**
5178 * extend String.prototype with relevant methods
5179 */
5180const extendString = function () {
5181    const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));
5182    _add('fromBase64', function () { return decode(this); });
5183    _add('toBase64', function (urlsafe) { return base64_encode(this, urlsafe); });
5184    _add('toBase64URI', function () { return base64_encode(this, true); });
5185    _add('toBase64URL', function () { return base64_encode(this, true); });
5186    _add('toUint8Array', function () { return toUint8Array(this); });
5187};
5188/**
5189 * extend Uint8Array.prototype with relevant methods
5190 */
5191const extendUint8Array = function () {
5192    const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));
5193    _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });
5194    _add('toBase64URI', function () { return fromUint8Array(this, true); });
5195    _add('toBase64URL', function () { return fromUint8Array(this, true); });
5196};
5197/**
5198 * extend Builtin prototypes with relevant methods
5199 */
5200const extendBuiltins = () => {
5201    extendString();
5202    extendUint8Array();
5203};
5204const gBase64 = {
5205    version: version,
5206    VERSION: VERSION,
5207    atob: _atob,
5208    atobPolyfill: atobPolyfill,
5209    btoa: _btoa,
5210    btoaPolyfill: btoaPolyfill,
5211    fromBase64: decode,
5212    toBase64: base64_encode,
5213    encode: base64_encode,
5214    encodeURI: base64_encodeURI,
5215    encodeURL: base64_encodeURI,
5216    utob: utob,
5217    btou: btou,
5218    decode: decode,
5219    isValid: isValid,
5220    fromUint8Array: fromUint8Array,
5221    toUint8Array: toUint8Array,
5222    extendString: extendString,
5223    extendUint8Array: extendUint8Array,
5224    extendBuiltins: extendBuiltins,
5225};
5226// makecjs:CUT //
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247// and finally,
5248
5249
5250;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/base64.js
5251
5252var base64_base64Decode = function base64Decode(string) {
5253  return decode(string);
5254};
5255var base64Encode = function base64Encode(string) {
5256  return encode(string);
5257};
5258;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/cleanArray.js
5259var cleanArray = function cleanArray(arr) {
5260  return arr.filter(function (v) {
5261    return v !== '';
5262  });
5263};
5264;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/createUuid.js
5265var createUUID = function createUUID() {
5266  // http://www.ietf.org/rfc/rfc4122.txt
5267  var s = [];
5268  var hexDigits = '0123456789abcdef';
5269
5270  for (var i = 0; i < 36; i++) {
5271    s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
5272  }
5273
5274  s[14] = '4';
5274 // bits 12-15 of the time_hi_and_version field to 0010
5275
5276  s[19] = hexDigits.substr(s[19] & 0x3 | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
5277
5278  s[8] = s[13] = s[18] = s[23] = '-';
5279  return s.join('');
5280};
5281;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/parseToJsArray.js
5282
5283
5284var parseToJsArray = function parseToJsArray(string, split) {
5285  string = base64Decode(string);
5286
5287  if (typeof string === 'string' && string !== '' && string === '[]') {
5288    // disabled because some language give error on this
5289    // russia for example
5290    // https://devot-ee.com/add-ons/support/gmaps/viewthread/15970
5291    // string = decodeURIComponent(escape(string));
5292    if (split || split === undefined) {
5293      return removeEmptyProps(string.split('|'));
5294    } else {
5295      return string;
5296    }
5297  }
5298
5299  return '';
5300};
5301// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/replaceAll.js
5302var replaceAll = __webpack_require__(35197);
5303;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/strToBool.js
5304var strToBool = function strToBool(s) {
5305  var regex = /^\s*(true|1|on)\s*$/i;
5306  return regex.test(s);
5307};
5308;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/reverseLatLngArray.js
5309var reverseLatLngArray = function reverseLatLngArray(array) {
5310  var points = [];
5311  array.forEach(function (val) {
5312    return points.push([parseFloat(val[1]), parseFloat(val[0])]);
5313  });
5314  return points;
5315};
5316;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/reParseLatLngArray.js
5317var reParseLatLngArray = function reParseLatLngArray(array) {
5318  var points = [];
5319  array.forEach(function (val) {
5320    return points.push([parseFloat(val[0]), parseFloat(val[1])]);
5321  });
5322  return points;
5323};
5324;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/throwError.js
5325var throwError = function throwError(message) {
5326  return console.error("REINOS_MAPS: ".concat(message));
5327};
5328// EXTERNAL MODULE: ./node_modules/proj4leaflet/src/proj4leaflet.js
5329var proj4leaflet = __webpack_require__(41751);
5330var proj4leaflet_default = /*#__PURE__*/__webpack_require__.n(proj4leaflet);
5331;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/crs.js
5332
5333
5334var crsCollection = new Map(); // This is the important task, where we set the map projection to EPSG:3006
5335
5336crsCollection.set('EPSG:3006', new (proj4leaflet_default()).CRS('EPSG:3006', '+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs', {
5337  resolutions: [4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8],
5338  origin: [-1200000.000000, 8500000.000000],
5339  bounds: leaflet_src_default().bounds([-1200000.000000, 8500000.000000], [4305696.000000, 2994304.000000])
5340}));
5341crsCollection.set('default', (leaflet_src_default()).CRS.EPSG3857);
5342;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/decodeContent.js
5343
5344function decodeContent(content) {
5345  //convert, if the content is base64 encoded
5346  var isBase64Encoded = content && content.startsWith('base64:');
5347  return isBase64Encoded ? base64_base64Decode(content.replace('base64:', '')) : content;
5348}
5349// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/catchEvents.js
5350var catchEvents = __webpack_require__(66779);
5351;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/index.js
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369/***/ }),
5370
5371/***/ 35197:
5372/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5373
5374"use strict";
5375/* harmony export */ __webpack_require__.d(__webpack_exports__, {
5376/* harmony export */   "k": () => (/* binding */ replaceAll)
5377/* harmony export */ });
5378var replaceAll = function replaceAll(str, search, replace) {
5379  return str.split(search).join(replace);
5380};
5381
5382/***/ }),
5383
5384/***/ 19662:
5385/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5386
5387var isCallable = __webpack_require__(60614);
5388var tryToString = __webpack_require__(66330);
5389
5390var $TypeError = TypeError;
5391
5392// `Assert: IsCallable(argument) is true`
5393module.exports = function (argument) {
5394  if (isCallable(argument)) return argument;
5395  throw $TypeError(tryToString(argument) + ' is not a function');
5396};
5397
5398
5399/***/ }),
5400
5401/***/ 39483:
5402/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5403
5404var isConstructor = __webpack_require__(4411);
5405var tryToString = __webpack_require__(66330);
5406
5407var $TypeError = TypeError;
5408
5409// `Assert: IsConstructor(argument) is true`
5410module.exports = function (argument) {
5411  if (isConstructor(argument)) return argument;
5412  throw $TypeError(tryToString(argument) + ' is not a constructor');
5413};
5414
5415
5416/***/ }),
5417
5418/***/ 96077:
5419/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5420
5421var isCallable = __webpack_require__(60614);
5422
5423var $String = String;
5424var $TypeError = TypeError;
5425
5426module.exports = function (argument) {
5427  if (typeof argument == 'object' || isCallable(argument)) return argument;
5428  throw $TypeError("Can't set " + $String(argument) + ' as a prototype');
5429};
5430
5431
5432/***/ }),
5433
5434/***/ 51223:
5435/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5436
5437var wellKnownSymbol = __webpack_require__(5112);
5438var create = __webpack_require__(70030);
5439var defineProperty = (__webpack_require__(3070).f);
5440
5441var UNSCOPABLES = wellKnownSymbol('unscopables');
5442var ArrayPrototype = Array.prototype;
5443
5444// Array.prototype[@@unscopables]
5445// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
5446if (ArrayPrototype[UNSCOPABLES] == undefined) {
5447  defineProperty(ArrayPrototype, UNSCOPABLES, {
5448    configurable: true,
5449    value: create(null)
5450  });
5451}
5452
5453// add a key to Array.prototype[@@unscopables]
5454module.exports = function (key) {
5455  ArrayPrototype[UNSCOPABLES][key] = true;
5456};
5457
5458
5459/***/ }),
5460
5461/***/ 31530:
5462/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5463
5464"use strict";
5465
5466var charAt = (__webpack_require__(28710).charAt);
5467
5468// `AdvanceStringIndex` abstract operation
5469// https://tc39.es/ecma262/#sec-advancestringindex
5470module.exports = function (S, index, unicode) {
5471  return index + (unicode ? charAt(S, index).length : 1);
5472};
5473
5474
5475/***/ }),
5476
5477/***/ 25787:
5478/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5479
5480var isPrototypeOf = __webpack_require__(47976);
5481
5482var $TypeError = TypeError;
5483
5484module.exports = function (it, Prototype) {
5485  if (isPrototypeOf(Prototype, it)) return it;
5486  throw $TypeError('Incorrect invocation');
5487};
5488
5489
5490/***/ }),
5491
5492/***/ 19670:
5493/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5494
5495var isObject = __webpack_require__(70111);
5496
5497var $String = String;
5498var $TypeError = TypeError;
5499
5500// `Assert: Type(argument) is Object`
5501module.exports = function (argument) {
5502  if (isObject(argument)) return argument;
5503  throw $TypeError($String(argument) + ' is not an object');
5504};
5505
5506
5507/***/ }),
5508
5509/***/ 23013:
5510/***/ ((module) => {
5511
5512// eslint-disable-next-line es-x/no-typed-arrays -- safe
5513module.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';
5514
5515
5516/***/ }),
5517
5518/***/ 7556:
5519/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5520
5521// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it
5522var fails = __webpack_require__(47293);
5523
5524module.exports = fails(function () {
5525  if (typeof ArrayBuffer == 'function') {
5526    var buffer = new ArrayBuffer(8);
5527    // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-defineproperty -- safe
5528    if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });
5529  }
5530});
5531
5532
5533/***/ }),
5534
5535/***/ 90260:
5536/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5537
5538"use strict";
5539
5540var NATIVE_ARRAY_BUFFER = __webpack_require__(23013);
5541var DESCRIPTORS = __webpack_require__(19781);
5542var global = __webpack_require__(17854);
5543var isCallable = __webpack_require__(60614);
5544var isObject = __webpack_require__(70111);
5545var hasOwn = __webpack_require__(92597);
5546var classof = __webpack_require__(70648);
5547var tryToString = __webpack_require__(66330);
5548var createNonEnumerableProperty = __webpack_require__(68880);
5549var defineBuiltIn = __webpack_require__(98052);
5550var defineProperty = (__webpack_require__(3070).f);
5551var isPrototypeOf = __webpack_require__(47976);
5552var getPrototypeOf = __webpack_require__(79518);
5553var setPrototypeOf = __webpack_require__(27674);
5554var wellKnownSymbol = __webpack_require__(5112);
5555var uid = __webpack_require__(69711);
5556var InternalStateModule = __webpack_require__(29909);
5557
5558var enforceInternalState = InternalStateModule.enforce;
5559var getInternalState = InternalStateModule.get;
5560var Int8Array = global.Int8Array;
5561var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
5562var Uint8ClampedArray = global.Uint8ClampedArray;
5563var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;
5564var TypedArray = Int8Array && getPrototypeOf(Int8Array);
5565var TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);
5566var ObjectPrototype = Object.prototype;
5567var TypeError = global.TypeError;
5568
5569var TO_STRING_TAG = wellKnownSymbol('toStringTag');
5570var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');
5571var TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';
vendor: 6,285 bytes, lines 5572-5747
5572// Fixing native typed arrays in Opera Presto crashes the browser, see #595
5573var NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';
5574var TYPED_ARRAY_TAG_REQUIRED = false;
5575var NAME, Constructor, Prototype;
5576
5577var TypedArrayConstructorsList = {
5578  Int8Array: 1,
5579  Uint8Array: 1,
5580  Uint8ClampedArray: 1,
5581  Int16Array: 2,
5582  Uint16Array: 2,
5583  Int32Array: 4,
5584  Uint32Array: 4,
5585  Float32Array: 4,
5586  Float64Array: 8
5587};
5588
5589var BigIntArrayConstructorsList = {
5590  BigInt64Array: 8,
5591  BigUint64Array: 8
5592};
5593
5594var isView = function isView(it) {
5595  if (!isObject(it)) return false;
5596  var klass = classof(it);
5597  return klass === 'DataView'
5598    || hasOwn(TypedArrayConstructorsList, klass)
5599    || hasOwn(BigIntArrayConstructorsList, klass);
5600};
5601
5602var getTypedArrayConstructor = function (it) {
5603  var proto = getPrototypeOf(it);
5604  if (!isObject(proto)) return;
5605  var state = getInternalState(proto);
5606  return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);
5607};
5608
5609var isTypedArray = function (it) {
5610  if (!isObject(it)) return false;
5611  var klass = classof(it);
5612  return hasOwn(TypedArrayConstructorsList, klass)
5613    || hasOwn(BigIntArrayConstructorsList, klass);
5614};
5615
5616var aTypedArray = function (it) {
5617  if (isTypedArray(it)) return it;
5618  throw TypeError('Target is not a typed array');
5619};
5620
5621var aTypedArrayConstructor = function (C) {
5622  if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;
5623  throw TypeError(tryToString(C) + ' is not a typed array constructor');
5624};
5625
5626var exportTypedArrayMethod = function (KEY, property, forced, options) {
5627  if (!DESCRIPTORS) return;
5628  if (forced) for (var ARRAY in TypedArrayConstructorsList) {
5629    var TypedArrayConstructor = global[ARRAY];
5630    if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {
5631      delete TypedArrayConstructor.prototype[KEY];
5632    } catch (error) {
5633      // old WebKit bug - some methods are non-configurable
5634      try {
5635        TypedArrayConstructor.prototype[KEY] = property;
5636      } catch (error2) { /* empty */ }
5637    }
5638  }
5639  if (!TypedArrayPrototype[KEY] || forced) {
5640    defineBuiltIn(TypedArrayPrototype, KEY, forced ? property
5641      : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);
5642  }
5643};
5644
5645var exportTypedArrayStaticMethod = function (KEY, property, forced) {
5646  var ARRAY, TypedArrayConstructor;
5647  if (!DESCRIPTORS) return;
5648  if (setPrototypeOf) {
5649    if (forced) for (ARRAY in TypedArrayConstructorsList) {
5650      TypedArrayConstructor = global[ARRAY];
5651      if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {
5652        delete TypedArrayConstructor[KEY];
5653      } catch (error) { /* empty */ }
5654    }
5655    if (!TypedArray[KEY] || forced) {
5656      // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable
5657      try {
5658        return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);
5659      } catch (error) { /* empty */ }
5660    } else return;
5661  }
5662  for (ARRAY in TypedArrayConstructorsList) {
5663    TypedArrayConstructor = global[ARRAY];
5664    if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {
5665      defineBuiltIn(TypedArrayConstructor, KEY, property);
5666    }
5667  }
5668};
5669
5670for (NAME in TypedArrayConstructorsList) {
5671  Constructor = global[NAME];
5672  Prototype = Constructor && Constructor.prototype;
5673  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
5674  else NATIVE_ARRAY_BUFFER_VIEWS = false;
5675}
5676
5677for (NAME in BigIntArrayConstructorsList) {
5678  Constructor = global[NAME];
5679  Prototype = Constructor && Constructor.prototype;
5680  if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;
5681}
5682
5683// WebKit bug - typed arrays constructors prototype is Object.prototype
5684if (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {
5685  // eslint-disable-next-line no-shadow -- safe
5686  TypedArray = function TypedArray() {
5687    throw TypeError('Incorrect invocation');
5688  };
5689  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {
5690    if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);
5691  }
5692}
5693
5694if (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {
5695  TypedArrayPrototype = TypedArray.prototype;
5696  if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {
5697    if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);
5698  }
5699}
5700
5701// WebKit bug - one more object in Uint8ClampedArray prototype chain
5702if (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {
5703  setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);
5704}
5705
5706if (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {
5707  TYPED_ARRAY_TAG_REQUIRED = true;
5708  defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {
5709    return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;
5710  } });
5711  for (NAME in TypedArrayConstructorsList) if (global[NAME]) {
5712    createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);
5713  }
5714}
5715
5716module.exports = {
5717  NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,
5718  TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,
5719  aTypedArray: aTypedArray,
5720  aTypedArrayConstructor: aTypedArrayConstructor,
5721  exportTypedArrayMethod: exportTypedArrayMethod,
5722  exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,
5723  getTypedArrayConstructor: getTypedArrayConstructor,
5724  isView: isView,
5725  isTypedArray: isTypedArray,
5726  TypedArray: TypedArray,
5727  TypedArrayPrototype: TypedArrayPrototype
5728};
5729
5730
5731/***/ }),
5732
5733/***/ 13331:
5734/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5735
5736"use strict";
5737
5738var global = __webpack_require__(17854);
5739var uncurryThis = __webpack_require__(1702);
5740var DESCRIPTORS = __webpack_require__(19781);
5741var NATIVE_ARRAY_BUFFER = __webpack_require__(23013);
5742var FunctionName = __webpack_require__(76530);
5743var createNonEnumerableProperty = __webpack_require__(68880);
5744var defineBuiltIns = __webpack_require__(89190);
5745var fails = __webpack_require__(47293);
5746var anInstance = __webpack_require__(25787);
5747var toIntegerOrInfinity = __webpack_require__(19303);
vendor: 4,702 bytes, lines 5748-5881
5748var toLength = __webpack_require__(17466);
5749var toIndex = __webpack_require__(57067);
5750var IEEE754 = __webpack_require__(11179);
5751var getPrototypeOf = __webpack_require__(79518);
5752var setPrototypeOf = __webpack_require__(27674);
5753var getOwnPropertyNames = (__webpack_require__(8006).f);
5754var defineProperty = (__webpack_require__(3070).f);
5755var arrayFill = __webpack_require__(21285);
5756var arraySlice = __webpack_require__(41589);
5757var setToStringTag = __webpack_require__(58003);
5758var InternalStateModule = __webpack_require__(29909);
5759
5760var PROPER_FUNCTION_NAME = FunctionName.PROPER;
5761var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
5762var getInternalState = InternalStateModule.get;
5763var setInternalState = InternalStateModule.set;
5764var ARRAY_BUFFER = 'ArrayBuffer';
5765var DATA_VIEW = 'DataView';
5766var PROTOTYPE = 'prototype';
5767var WRONG_LENGTH = 'Wrong length';
5768var WRONG_INDEX = 'Wrong index';
5769var NativeArrayBuffer = global[ARRAY_BUFFER];
5770var $ArrayBuffer = NativeArrayBuffer;
5771var ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];
5772var $DataView = global[DATA_VIEW];
5773var DataViewPrototype = $DataView && $DataView[PROTOTYPE];
5774var ObjectPrototype = Object.prototype;
5775var Array = global.Array;
5776var RangeError = global.RangeError;
5777var fill = uncurryThis(arrayFill);
5778var reverse = uncurryThis([].reverse);
5779
5780var packIEEE754 = IEEE754.pack;
5781var unpackIEEE754 = IEEE754.unpack;
5782
5783var packInt8 = function (number) {
5784  return [number & 0xFF];
5785};
5786
5787var packInt16 = function (number) {
5788  return [number & 0xFF, number >> 8 & 0xFF];
5789};
5790
5791var packInt32 = function (number) {
5792  return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];
5793};
5794
5795var unpackInt32 = function (buffer) {
5796  return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
5797};
5798
5799var packFloat32 = function (number) {
5800  return packIEEE754(number, 23, 4);
5801};
5802
5803var packFloat64 = function (number) {
5804  return packIEEE754(number, 52, 8);
5805};
5806
5807var addGetter = function (Constructor, key) {
5808  defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });
5809};
5810
5811var get = function (view, count, index, isLittleEndian) {
5812  var intIndex = toIndex(index);
5813  var store = getInternalState(view);
5814  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);
5815  var bytes = getInternalState(store.buffer).bytes;
5816  var start = intIndex + store.byteOffset;
5817  var pack = arraySlice(bytes, start, start + count);
5818  return isLittleEndian ? pack : reverse(pack);
5819};
5820
5821var set = function (view, count, index, conversion, value, isLittleEndian) {
5822  var intIndex = toIndex(index);
5823  var store = getInternalState(view);
5824  if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);
5825  var bytes = getInternalState(store.buffer).bytes;
5826  var start = intIndex + store.byteOffset;
5827  var pack = conversion(+value);
5828  for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
5829};
5830
5831if (!NATIVE_ARRAY_BUFFER) {
5832  $ArrayBuffer = function ArrayBuffer(length) {
5833    anInstance(this, ArrayBufferPrototype);
5834    var byteLength = toIndex(length);
5835    setInternalState(this, {
5836      bytes: fill(Array(byteLength), 0),
5837      byteLength: byteLength
5838    });
5839    if (!DESCRIPTORS) this.byteLength = byteLength;
5840  };
5841
5842  ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];
5843
5844  $DataView = function DataView(buffer, byteOffset, byteLength) {
5845    anInstance(this, DataViewPrototype);
5846    anInstance(buffer, ArrayBufferPrototype);
5847    var bufferLength = getInternalState(buffer).byteLength;
5848    var offset = toIntegerOrInfinity(byteOffset);
5849    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');
5850    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
5851    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
5852    setInternalState(this, {
5853      buffer: buffer,
5854      byteLength: byteLength,
5855      byteOffset: offset
5856    });
5857    if (!DESCRIPTORS) {
5858      this.buffer = buffer;
5859      this.byteLength = byteLength;
5860      this.byteOffset = offset;
5861    }
5862  };
5863
5864  DataViewPrototype = $DataView[PROTOTYPE];
5865
5866  if (DESCRIPTORS) {
5867    addGetter($ArrayBuffer, 'byteLength');
5868    addGetter($DataView, 'buffer');
5869    addGetter($DataView, 'byteLength');
5870    addGetter($DataView, 'byteOffset');
5871  }
5872
5873  defineBuiltIns(DataViewPrototype, {
5874    getInt8: function getInt8(byteOffset) {
5875      return get(this, 1, byteOffset)[0] << 24 >> 24;
5876    },
5877    getUint8: function getUint8(byteOffset) {
5878      return get(this, 1, byteOffset)[0];
5879    },
5880    getInt16: function getInt16(byteOffset /* , littleEndian */) {
5881      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
vendor: 5,271 bytes, lines 5882-6008
5882      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
5883    },
5884    getUint16: function getUint16(byteOffset /* , littleEndian */) {
5885      var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);
5886      return bytes[1] << 8 | bytes[0];
5887    },
5888    getInt32: function getInt32(byteOffset /* , littleEndian */) {
5889      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));
5890    },
5891    getUint32: function getUint32(byteOffset /* , littleEndian */) {
5892      return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;
5893    },
5894    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
5895      return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);
5896    },
5897    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
5898      return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);
5899    },
5900    setInt8: function setInt8(byteOffset, value) {
5901      set(this, 1, byteOffset, packInt8, value);
5902    },
5903    setUint8: function setUint8(byteOffset, value) {
5904      set(this, 1, byteOffset, packInt8, value);
5905    },
5906    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
5907      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
5908    },
5909    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
5910      set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);
5911    },
5912    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
5913      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
5914    },
5915    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
5916      set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);
5917    },
5918    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
5919      set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);
5920    },
5921    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
5922      set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);
5923    }
5924  });
5925} else {
5926  var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;
5927  /* eslint-disable no-new -- required for testing */
5928  if (!fails(function () {
5929    NativeArrayBuffer(1);
5930  }) || !fails(function () {
5931    new NativeArrayBuffer(-1);
5932  }) || fails(function () {
5933    new NativeArrayBuffer();
5934    new NativeArrayBuffer(1.5);
5935    new NativeArrayBuffer(NaN);
5936    return NativeArrayBuffer.length != 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;
5937  })) {
5938    /* eslint-enable no-new -- required for testing */
5939    $ArrayBuffer = function ArrayBuffer(length) {
5940      anInstance(this, ArrayBufferPrototype);
5941      return new NativeArrayBuffer(toIndex(length));
5942    };
5943
5944    $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;
5945
5946    for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {
5947      if (!((key = keys[j++]) in $ArrayBuffer)) {
5948        createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);
5949      }
5950    }
5951
5952    ArrayBufferPrototype.constructor = $ArrayBuffer;
5953  } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {
5954    createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);
5955  }
5956
5957  // WebKit bug - the same parent prototype for typed arrays and data view
5958  if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {
5959    setPrototypeOf(DataViewPrototype, ObjectPrototype);
5960  }
5961
5962  // iOS Safari 7.x bug
5963  var testView = new $DataView(new $ArrayBuffer(2));
5964  var $setInt8 = uncurryThis(DataViewPrototype.setInt8);
5965  testView.setInt8(0, 2147483648);
5966  testView.setInt8(1, 2147483649);
5967  if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns(DataViewPrototype, {
5968    setInt8: function setInt8(byteOffset, value) {
5969      $setInt8(this, byteOffset, value << 24 >> 24);
5970    },
5971    setUint8: function setUint8(byteOffset, value) {
5972      $setInt8(this, byteOffset, value << 24 >> 24);
5973    }
5974  }, { unsafe: true });
5975}
5976
5977setToStringTag($ArrayBuffer, ARRAY_BUFFER);
5978setToStringTag($DataView, DATA_VIEW);
5979
5980module.exports = {
5981  ArrayBuffer: $ArrayBuffer,
5982  DataView: $DataView
5983};
5984
5985
5986/***/ }),
5987
5988/***/ 1048:
5989/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5990
5991"use strict";
5992
5993var toObject = __webpack_require__(47908);
5994var toAbsoluteIndex = __webpack_require__(51400);
5995var lengthOfArrayLike = __webpack_require__(26244);
5996var deletePropertyOrThrow = __webpack_require__(85117);
5997
5998var min = Math.min;
5999
6000// `Array.prototype.copyWithin` method implementation
6001// https://tc39.es/ecma262/#sec-array.prototype.copywithin
6002// eslint-disable-next-line es-x/no-array-prototype-copywithin -- safe
6003module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
6004  var O = toObject(this);
6005  var len = lengthOfArrayLike(O);
6006  var to = toAbsoluteIndex(target, len);
6007  var from = toAbsoluteIndex(start, len);
6008  var end = arguments.length > 2 ? arguments[2] : undefined;
vendor: 4,866 bytes, lines 6009-6157
6009  var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
6010  var inc = 1;
6011  if (from < to && to < from + count) {
6012    inc = -1;
6013    from += count - 1;
6014    to += count - 1;
6015  }
6016  while (count-- > 0) {
6017    if (from in O) O[to] = O[from];
6018    else deletePropertyOrThrow(O, to);
6019    to += inc;
6020    from += inc;
6021  } return O;
6022};
6023
6024
6025/***/ }),
6026
6027/***/ 21285:
6028/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6029
6030"use strict";
6031
6032var toObject = __webpack_require__(47908);
6033var toAbsoluteIndex = __webpack_require__(51400);
6034var lengthOfArrayLike = __webpack_require__(26244);
6035
6036// `Array.prototype.fill` method implementation
6037// https://tc39.es/ecma262/#sec-array.prototype.fill
6038module.exports = function fill(value /* , start = 0, end = @length */) {
6039  var O = toObject(this);
6040  var length = lengthOfArrayLike(O);
6041  var argumentsLength = arguments.length;
6042  var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);
6043  var end = argumentsLength > 2 ? arguments[2] : undefined;
6044  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
6045  while (endPos > index) O[index++] = value;
6046  return O;
6047};
6048
6049
6050/***/ }),
6051
6052/***/ 18533:
6053/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6054
6055"use strict";
6056
6057var $forEach = (__webpack_require__(42092).forEach);
6058var arrayMethodIsStrict = __webpack_require__(9341);
6059
6060var STRICT_METHOD = arrayMethodIsStrict('forEach');
6061
6062// `Array.prototype.forEach` method implementation
6063// https://tc39.es/ecma262/#sec-array.prototype.foreach
6064module.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {
6065  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
6066// eslint-disable-next-line es-x/no-array-prototype-foreach -- safe
6067} : [].forEach;
6068
6069
6070/***/ }),
6071
6072/***/ 97745:
6073/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6074
6075var lengthOfArrayLike = __webpack_require__(26244);
6076
6077module.exports = function (Constructor, list) {
6078  var index = 0;
6079  var length = lengthOfArrayLike(list);
6080  var result = new Constructor(length);
6081  while (length > index) result[index] = list[index++];
6082  return result;
6083};
6084
6085
6086/***/ }),
6087
6088/***/ 48457:
6089/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6090
6091"use strict";
6092
6093var bind = __webpack_require__(49974);
6094var call = __webpack_require__(46916);
6095var toObject = __webpack_require__(47908);
6096var callWithSafeIterationClosing = __webpack_require__(53411);
6097var isArrayIteratorMethod = __webpack_require__(97659);
6098var isConstructor = __webpack_require__(4411);
6099var lengthOfArrayLike = __webpack_require__(26244);
6100var createProperty = __webpack_require__(86135);
6101var getIterator = __webpack_require__(18554);
6102var getIteratorMethod = __webpack_require__(71246);
6103
6104var $Array = Array;
6105
6106// `Array.from` method implementation
6107// https://tc39.es/ecma262/#sec-array.from
6108module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
6109  var O = toObject(arrayLike);
6110  var IS_CONSTRUCTOR = isConstructor(this);
6111  var argumentsLength = arguments.length;
6112  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
6113  var mapping = mapfn !== undefined;
6114  if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
6115  var iteratorMethod = getIteratorMethod(O);
6116  var index = 0;
6117  var length, result, step, iterator, next, value;
6118  // if the target is not iterable or it's an array with the default iterator - use a simple case
6119  if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {
6120    iterator = getIterator(O, iteratorMethod);
6121    next = iterator.next;
6122    result = IS_CONSTRUCTOR ? new this() : [];
6123    for (;!(step = call(next, iterator)).done; index++) {
6124      value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
6125      createProperty(result, index, value);
6126    }
6127  } else {
6128    length = lengthOfArrayLike(O);
6129    result = IS_CONSTRUCTOR ? new this(length) : $Array(length);
6130    for (;length > index; index++) {
6131      value = mapping ? mapfn(O[index], index) : O[index];
6132      createProperty(result, index, value);
6133    }
6134  }
6135  result.length = index;
6136  return result;
6137};
6138
6139
6140/***/ }),
6141
6142/***/ 41318:
6143/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6144
6145var toIndexedObject = __webpack_require__(45656);
6146var toAbsoluteIndex = __webpack_require__(51400);
6147var lengthOfArrayLike = __webpack_require__(26244);
6148
6149// `Array.prototype.{ indexOf, includes }` methods implementation
6150var createMethod = function (IS_INCLUDES) {
6151  return function ($this, el, fromIndex) {
6152    var O = toIndexedObject($this);
6153    var length = lengthOfArrayLike(O);
6154    var index = toAbsoluteIndex(fromIndex, length);
6155    var value;
6156    // Array#includes uses SameValueZero equality algorithm
6157    // eslint-disable-next-line no-self-compare -- NaN check
vendor: 13,207 bytes, lines 6158-6595
6158    if (IS_INCLUDES && el != el) while (length > index) {
6159      value = O[index++];
6160      // eslint-disable-next-line no-self-compare -- NaN check
6161      if (value != value) return true;
6162    // Array#indexOf ignores holes, Array#includes - not
6163    } else for (;length > index; index++) {
6164      if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
6165    } return !IS_INCLUDES && -1;
6166  };
6167};
6168
6169module.exports = {
6170  // `Array.prototype.includes` method
6171  // https://tc39.es/ecma262/#sec-array.prototype.includes
6172  includes: createMethod(true),
6173  // `Array.prototype.indexOf` method
6174  // https://tc39.es/ecma262/#sec-array.prototype.indexof
6175  indexOf: createMethod(false)
6176};
6177
6178
6179/***/ }),
6180
6181/***/ 9671:
6182/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6183
6184var bind = __webpack_require__(49974);
6185var IndexedObject = __webpack_require__(68361);
6186var toObject = __webpack_require__(47908);
6187var lengthOfArrayLike = __webpack_require__(26244);
6188
6189// `Array.prototype.{ findLast, findLastIndex }` methods implementation
6190var createMethod = function (TYPE) {
6191  var IS_FIND_LAST_INDEX = TYPE == 1;
6192  return function ($this, callbackfn, that) {
6193    var O = toObject($this);
6194    var self = IndexedObject(O);
6195    var boundFunction = bind(callbackfn, that);
6196    var index = lengthOfArrayLike(self);
6197    var value, result;
6198    while (index-- > 0) {
6199      value = self[index];
6200      result = boundFunction(value, index, O);
6201      if (result) switch (TYPE) {
6202        case 0: return value; // findLast
6203        case 1: return index; // findLastIndex
6204      }
6205    }
6206    return IS_FIND_LAST_INDEX ? -1 : undefined;
6207  };
6208};
6209
6210module.exports = {
6211  // `Array.prototype.findLast` method
6212  // https://github.com/tc39/proposal-array-find-from-last
6213  findLast: createMethod(0),
6214  // `Array.prototype.findLastIndex` method
6215  // https://github.com/tc39/proposal-array-find-from-last
6216  findLastIndex: createMethod(1)
6217};
6218
6219
6220/***/ }),
6221
6222/***/ 42092:
6223/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6224
6225var bind = __webpack_require__(49974);
6226var uncurryThis = __webpack_require__(1702);
6227var IndexedObject = __webpack_require__(68361);
6228var toObject = __webpack_require__(47908);
6229var lengthOfArrayLike = __webpack_require__(26244);
6230var arraySpeciesCreate = __webpack_require__(65417);
6231
6232var push = uncurryThis([].push);
6233
6234// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation
6235var createMethod = function (TYPE) {
6236  var IS_MAP = TYPE == 1;
6237  var IS_FILTER = TYPE == 2;
6238  var IS_SOME = TYPE == 3;
6239  var IS_EVERY = TYPE == 4;
6240  var IS_FIND_INDEX = TYPE == 6;
6241  var IS_FILTER_REJECT = TYPE == 7;
6242  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
6243  return function ($this, callbackfn, that, specificCreate) {
6244    var O = toObject($this);
6245    var self = IndexedObject(O);
6246    var boundFunction = bind(callbackfn, that);
6247    var length = lengthOfArrayLike(self);
6248    var index = 0;
6249    var create = specificCreate || arraySpeciesCreate;
6250    var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
6251    var value, result;
6252    for (;length > index; index++) if (NO_HOLES || index in self) {
6253      value = self[index];
6254      result = boundFunction(value, index, O);
6255      if (TYPE) {
6256        if (IS_MAP) target[index] = result; // map
6257        else if (result) switch (TYPE) {
6258          case 3: return true;              // some
6259          case 5: return value;             // find
6260          case 6: return index;             // findIndex
6261          case 2: push(target, value);      // filter
6262        } else switch (TYPE) {
6263          case 4: return false;             // every
6264          case 7: push(target, value);      // filterReject
6265        }
6266      }
6267    }
6268    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
6269  };
6270};
6271
6272module.exports = {
6273  // `Array.prototype.forEach` method
6274  // https://tc39.es/ecma262/#sec-array.prototype.foreach
6275  forEach: createMethod(0),
6276  // `Array.prototype.map` method
6277  // https://tc39.es/ecma262/#sec-array.prototype.map
6278  map: createMethod(1),
6279  // `Array.prototype.filter` method
6280  // https://tc39.es/ecma262/#sec-array.prototype.filter
6281  filter: createMethod(2),
6282  // `Array.prototype.some` method
6283  // https://tc39.es/ecma262/#sec-array.prototype.some
6284  some: createMethod(3),
6285  // `Array.prototype.every` method
6286  // https://tc39.es/ecma262/#sec-array.prototype.every
6287  every: createMethod(4),
6288  // `Array.prototype.find` method
6289  // https://tc39.es/ecma262/#sec-array.prototype.find
6290  find: createMethod(5),
6291  // `Array.prototype.findIndex` method
6292  // https://tc39.es/ecma262/#sec-array.prototype.findIndex
6293  findIndex: createMethod(6),
6294  // `Array.prototype.filterReject` method
6295  // https://github.com/tc39/proposal-array-filtering
6296  filterReject: createMethod(7)
6297};
6298
6299
6300/***/ }),
6301
6302/***/ 86583:
6303/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6304
6305"use strict";
6306
6307/* eslint-disable es-x/no-array-prototype-lastindexof -- safe */
6308var apply = __webpack_require__(22104);
6309var toIndexedObject = __webpack_require__(45656);
6310var toIntegerOrInfinity = __webpack_require__(19303);
6311var lengthOfArrayLike = __webpack_require__(26244);
6312var arrayMethodIsStrict = __webpack_require__(9341);
6313
6314var min = Math.min;
6315var $lastIndexOf = [].lastIndexOf;
6316var NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;
6317var STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');
6318var FORCED = NEGATIVE_ZERO || !STRICT_METHOD;
6319
6320// `Array.prototype.lastIndexOf` method implementation
6321// https://tc39.es/ecma262/#sec-array.prototype.lastindexof
6322module.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
6323  // convert -0 to +0
6324  if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;
6325  var O = toIndexedObject(this);
6326  var length = lengthOfArrayLike(O);
6327  var index = length - 1;
6328  if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));
6329  if (index < 0) index = length + index;
6330  for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;
6331  return -1;
6332} : $lastIndexOf;
6333
6334
6335/***/ }),
6336
6337/***/ 81194:
6338/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6339
6340var fails = __webpack_require__(47293);
6341var wellKnownSymbol = __webpack_require__(5112);
6342var V8_VERSION = __webpack_require__(7392);
6343
6344var SPECIES = wellKnownSymbol('species');
6345
6346module.exports = function (METHOD_NAME) {
6347  // We can't use this feature detection in V8 since it causes
6348  // deoptimization and serious performance degradation
6349  // https://github.com/zloirock/core-js/issues/677
6350  return V8_VERSION >= 51 || !fails(function () {
6351    var array = [];
6352    var constructor = array.constructor = {};
6353    constructor[SPECIES] = function () {
6354      return { foo: 1 };
6355    };
6356    return array[METHOD_NAME](Boolean).foo !== 1;
6357  });
6358};
6359
6360
6361/***/ }),
6362
6363/***/ 9341:
6364/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6365
6366"use strict";
6367
6368var fails = __webpack_require__(47293);
6369
6370module.exports = function (METHOD_NAME, argument) {
6371  var method = [][METHOD_NAME];
6372  return !!method && fails(function () {
6373    // eslint-disable-next-line no-useless-call -- required for testing
6374    method.call(null, argument || function () { return 1; }, 1);
6375  });
6376};
6377
6378
6379/***/ }),
6380
6381/***/ 53671:
6382/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6383
6384var aCallable = __webpack_require__(19662);
6385var toObject = __webpack_require__(47908);
6386var IndexedObject = __webpack_require__(68361);
6387var lengthOfArrayLike = __webpack_require__(26244);
6388
6389var $TypeError = TypeError;
6390
6391// `Array.prototype.{ reduce, reduceRight }` methods implementation
6392var createMethod = function (IS_RIGHT) {
6393  return function (that, callbackfn, argumentsLength, memo) {
6394    aCallable(callbackfn);
6395    var O = toObject(that);
6396    var self = IndexedObject(O);
6397    var length = lengthOfArrayLike(O);
6398    var index = IS_RIGHT ? length - 1 : 0;
6399    var i = IS_RIGHT ? -1 : 1;
6400    if (argumentsLength < 2) while (true) {
6401      if (index in self) {
6402        memo = self[index];
6403        index += i;
6404        break;
6405      }
6406      index += i;
6407      if (IS_RIGHT ? index < 0 : length <= index) {
6408        throw $TypeError('Reduce of empty array with no initial value');
6409      }
6410    }
6411    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {
6412      memo = callbackfn(memo, self[index], index, O);
6413    }
6414    return memo;
6415  };
6416};
6417
6418module.exports = {
6419  // `Array.prototype.reduce` method
6420  // https://tc39.es/ecma262/#sec-array.prototype.reduce
6421  left: createMethod(false),
6422  // `Array.prototype.reduceRight` method
6423  // https://tc39.es/ecma262/#sec-array.prototype.reduceright
6424  right: createMethod(true)
6425};
6426
6427
6428/***/ }),
6429
6430/***/ 83658:
6431/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6432
6433"use strict";
6434
6435var DESCRIPTORS = __webpack_require__(19781);
6436var isArray = __webpack_require__(43157);
6437
6438var $TypeError = TypeError;
6439// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
6440var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
6441
6442// Safari < 13 does not throw an error in this case
6443var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {
6444  // makes no sense without proper strict mode support
6445  if (this !== undefined) return true;
6446  try {
6447    // eslint-disable-next-line es-x/no-object-defineproperty -- safe
6448    Object.defineProperty([], 'length', { writable: false }).length = 1;
6449  } catch (error) {
6450    return error instanceof TypeError;
6451  }
6452}();
6453
6454module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {
6455  if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {
6456    throw $TypeError('Cannot set read only .length');
6457  } return O.length = length;
6458} : function (O, length) {
6459  return O.length = length;
6460};
6461
6462
6463/***/ }),
6464
6465/***/ 41589:
6466/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6467
6468var toAbsoluteIndex = __webpack_require__(51400);
6469var lengthOfArrayLike = __webpack_require__(26244);
6470var createProperty = __webpack_require__(86135);
6471
6472var $Array = Array;
6473var max = Math.max;
6474
6475module.exports = function (O, start, end) {
6476  var length = lengthOfArrayLike(O);
6477  var k = toAbsoluteIndex(start, length);
6478  var fin = toAbsoluteIndex(end === undefined ? length : end, length);
6479  var result = $Array(max(fin - k, 0));
6480  for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);
6481  result.length = n;
6482  return result;
6483};
6484
6485
6486/***/ }),
6487
6488/***/ 50206:
6489/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6490
6491var uncurryThis = __webpack_require__(1702);
6492
6493module.exports = uncurryThis([].slice);
6494
6495
6496/***/ }),
6497
6498/***/ 94362:
6499/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6500
6501var arraySlice = __webpack_require__(41589);
6502
6503var floor = Math.floor;
6504
6505var mergeSort = function (array, comparefn) {
6506  var length = array.length;
6507  var middle = floor(length / 2);
6508  return length < 8 ? insertionSort(array, comparefn) : merge(
6509    array,
6510    mergeSort(arraySlice(array, 0, middle), comparefn),
6511    mergeSort(arraySlice(array, middle), comparefn),
6512    comparefn
6513  );
6514};
6515
6516var insertionSort = function (array, comparefn) {
6517  var length = array.length;
6518  var i = 1;
6519  var element, j;
6520
6521  while (i < length) {
6522    j = i;
6523    element = array[i];
6524    while (j && comparefn(array[j - 1], element) > 0) {
6525      array[j] = array[--j];
6526    }
6527    if (j !== i++) array[j] = element;
6528  } return array;
6529};
6530
6531var merge = function (array, left, right, comparefn) {
6532  var llength = left.length;
6533  var rlength = right.length;
6534  var lindex = 0;
6535  var rindex = 0;
6536
6537  while (lindex < llength || rindex < rlength) {
6538    array[lindex + rindex] = (lindex < llength && rindex < rlength)
6539      ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]
6540      : lindex < llength ? left[lindex++] : right[rindex++];
6541  } return array;
6542};
6543
6544module.exports = mergeSort;
6545
6546
6547/***/ }),
6548
6549/***/ 77475:
6550/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6551
6552var isArray = __webpack_require__(43157);
6553var isConstructor = __webpack_require__(4411);
6554var isObject = __webpack_require__(70111);
6555var wellKnownSymbol = __webpack_require__(5112);
6556
6557var SPECIES = wellKnownSymbol('species');
6558var $Array = Array;
6559
6560// a part of `ArraySpeciesCreate` abstract operation
6561// https://tc39.es/ecma262/#sec-arrayspeciescreate
6562module.exports = function (originalArray) {
6563  var C;
6564  if (isArray(originalArray)) {
6565    C = originalArray.constructor;
6566    // cross-realm fallback
6567    if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;
6568    else if (isObject(C)) {
6569      C = C[SPECIES];
6570      if (C === null) C = undefined;
6571    }
6572  } return C === undefined ? $Array : C;
6573};
6574
6575
6576/***/ }),
6577
6578/***/ 65417:
6579/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6580
6581var arraySpeciesConstructor = __webpack_require__(77475);
6582
6583// `ArraySpeciesCreate` abstract operation
6584// https://tc39.es/ecma262/#sec-arrayspeciescreate
6585module.exports = function (originalArray, length) {
6586  return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
6587};
6588
6589
6590/***/ }),
6591
6592/***/ 14170:
6593/***/ ((module) => {
6594
6595var itoc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
vendor: 11,809 bytes, lines 6595-6958
6595+/=';
6596var ctoi = {};
6597
6598for (var index = 0; index < 66; index++) ctoi[itoc.charAt(index)] = index;
6599
6600module.exports = {
6601  itoc: itoc,
6602  ctoi: ctoi
6603};
6604
6605
6606/***/ }),
6607
6608/***/ 53411:
6609/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6610
6611var anObject = __webpack_require__(19670);
6612var iteratorClose = __webpack_require__(99212);
6613
6614// call something on iterator step with safe closing on error
6615module.exports = function (iterator, fn, value, ENTRIES) {
6616  try {
6617    return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
6618  } catch (error) {
6619    iteratorClose(iterator, 'throw', error);
6620  }
6621};
6622
6623
6624/***/ }),
6625
6626/***/ 17072:
6627/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6628
6629var wellKnownSymbol = __webpack_require__(5112);
6630
6631var ITERATOR = wellKnownSymbol('iterator');
6632var SAFE_CLOSING = false;
6633
6634try {
6635  var called = 0;
6636  var iteratorWithReturn = {
6637    next: function () {
6638      return { done: !!called++ };
6639    },
6640    'return': function () {
6641      SAFE_CLOSING = true;
6642    }
6643  };
6644  iteratorWithReturn[ITERATOR] = function () {
6645    return this;
6646  };
6647  // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing
6648  Array.from(iteratorWithReturn, function () { throw 2; });
6649} catch (error) { /* empty */ }
6650
6651module.exports = function (exec, SKIP_CLOSING) {
6652  if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
6653  var ITERATION_SUPPORT = false;
6654  try {
6655    var object = {};
6656    object[ITERATOR] = function () {
6657      return {
6658        next: function () {
6659          return { done: ITERATION_SUPPORT = true };
6660        }
6661      };
6662    };
6663    exec(object);
6664  } catch (error) { /* empty */ }
6665  return ITERATION_SUPPORT;
6666};
6667
6668
6669/***/ }),
6670
6671/***/ 84326:
6672/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6673
6674var uncurryThis = __webpack_require__(1702);
6675
6676var toString = uncurryThis({}.toString);
6677var stringSlice = uncurryThis(''.slice);
6678
6679module.exports = function (it) {
6680  return stringSlice(toString(it), 8, -1);
6681};
6682
6683
6684/***/ }),
6685
6686/***/ 70648:
6687/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6688
6689var TO_STRING_TAG_SUPPORT = __webpack_require__(51694);
6690var isCallable = __webpack_require__(60614);
6691var classofRaw = __webpack_require__(84326);
6692var wellKnownSymbol = __webpack_require__(5112);
6693
6694var TO_STRING_TAG = wellKnownSymbol('toStringTag');
6695var $Object = Object;
6696
6697// ES3 wrong here
6698var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
6699
6700// fallback for IE11 Script Access Denied error
6701var tryGet = function (it, key) {
6702  try {
6703    return it[key];
6704  } catch (error) { /* empty */ }
6705};
6706
6707// getting tag from ES6+ `Object.prototype.toString`
6708module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
6709  var O, tag, result;
6710  return it === undefined ? 'Undefined' : it === null ? 'Null'
6711    // @@toStringTag case
6712    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag
6713    // builtinTag case
6714    : CORRECT_ARGUMENTS ? classofRaw(O)
6715    // ES3 arguments fallback
6716    : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;
6717};
6718
6719
6720/***/ }),
6721
6722/***/ 95631:
6723/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6724
6725"use strict";
6726
6727var defineProperty = (__webpack_require__(3070).f);
6728var create = __webpack_require__(70030);
6729var defineBuiltIns = __webpack_require__(89190);
6730var bind = __webpack_require__(49974);
6731var anInstance = __webpack_require__(25787);
6732var isNullOrUndefined = __webpack_require__(68554);
6733var iterate = __webpack_require__(20408);
6734var defineIterator = __webpack_require__(51656);
6735var setSpecies = __webpack_require__(96340);
6736var DESCRIPTORS = __webpack_require__(19781);
6737var fastKey = (__webpack_require__(62423).fastKey);
6738var InternalStateModule = __webpack_require__(29909);
6739
6740var setInternalState = InternalStateModule.set;
6741var internalStateGetterFor = InternalStateModule.getterFor;
6742
6743module.exports = {
6744  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
6745    var Constructor = wrapper(function (that, iterable) {
6746      anInstance(that, Prototype);
6747      setInternalState(that, {
6748        type: CONSTRUCTOR_NAME,
6749        index: create(null),
6750        first: undefined,
6751        last: undefined,
6752        size: 0
6753      });
6754      if (!DESCRIPTORS) that.size = 0;
6755      if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
6756    });
6757
6758    var Prototype = Constructor.prototype;
6759
6760    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
6761
6762    var define = function (that, key, value) {
6763      var state = getInternalState(that);
6764      var entry = getEntry(that, key);
6765      var previous, index;
6766      // change existing entry
6767      if (entry) {
6768        entry.value = value;
6769      // create new entry
6770      } else {
6771        state.last = entry = {
6772          index: index = fastKey(key, true),
6773          key: key,
6774          value: value,
6775          previous: previous = state.last,
6776          next: undefined,
6777          removed: false
6778        };
6779        if (!state.first) state.first = entry;
6780        if (previous) previous.next = entry;
6781        if (DESCRIPTORS) state.size++;
6782        else that.size++;
6783        // add to index
6784        if (index !== 'F') state.index[index] = entry;
6785      } return that;
6786    };
6787
6788    var getEntry = function (that, key) {
6789      var state = getInternalState(that);
6790      // fast case
6791      var index = fastKey(key);
6792      var entry;
6793      if (index !== 'F') return state.index[index];
6794      // frozen object case
6795      for (entry = state.first; entry; entry = entry.next) {
6796        if (entry.key == key) return entry;
6797      }
6798    };
6799
6800    defineBuiltIns(Prototype, {
6801      // `{ Map, Set }.prototype.clear()` methods
6802      // https://tc39.es/ecma262/#sec-map.prototype.clear
6803      // https://tc39.es/ecma262/#sec-set.prototype.clear
6804      clear: function clear() {
6805        var that = this;
6806        var state = getInternalState(that);
6807        var data = state.index;
6808        var entry = state.first;
6809        while (entry) {
6810          entry.removed = true;
6811          if (entry.previous) entry.previous = entry.previous.next = undefined;
6812          delete data[entry.index];
6813          entry = entry.next;
6814        }
6815        state.first = state.last = undefined;
6816        if (DESCRIPTORS) state.size = 0;
6817        else that.size = 0;
6818      },
6819      // `{ Map, Set }.prototype.delete(key)` methods
6820      // https://tc39.es/ecma262/#sec-map.prototype.delete
6821      // https://tc39.es/ecma262/#sec-set.prototype.delete
6822      'delete': function (key) {
6823        var that = this;
6824        var state = getInternalState(that);
6825        var entry = getEntry(that, key);
6826        if (entry) {
6827          var next = entry.next;
6828          var prev = entry.previous;
6829          delete state.index[entry.index];
6830          entry.removed = true;
6831          if (prev) prev.next = next;
6832          if (next) next.previous = prev;
6833          if (state.first == entry) state.first = next;
6834          if (state.last == entry) state.last = prev;
6835          if (DESCRIPTORS) state.size--;
6836          else that.size--;
6837        } return !!entry;
6838      },
6839      // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods
6840      // https://tc39.es/ecma262/#sec-map.prototype.foreach
6841      // https://tc39.es/ecma262/#sec-set.prototype.foreach
6842      forEach: function forEach(callbackfn /* , that = undefined */) {
6843        var state = getInternalState(this);
6844        var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);
6845        var entry;
6846        while (entry = entry ? entry.next : state.first) {
6847          boundFunction(entry.value, entry.key, this);
6848          // revert to the last existing entry
6849          while (entry && entry.removed) entry = entry.previous;
6850        }
6851      },
6852      // `{ Map, Set}.prototype.has(key)` methods
6853      // https://tc39.es/ecma262/#sec-map.prototype.has
6854      // https://tc39.es/ecma262/#sec-set.prototype.has
6855      has: function has(key) {
6856        return !!getEntry(this, key);
6857      }
6858    });
6859
6860    defineBuiltIns(Prototype, IS_MAP ? {
6861      // `Map.prototype.get(key)` method
6862      // https://tc39.es/ecma262/#sec-map.prototype.get
6863      get: function get(key) {
6864        var entry = getEntry(this, key);
6865        return entry && entry.value;
6866      },
6867      // `Map.prototype.set(key, value)` method
6868      // https://tc39.es/ecma262/#sec-map.prototype.set
6869      set: function set(key, value) {
6870        return define(this, key === 0 ? 0 : key, value);
6871      }
6872    } : {
6873      // `Set.prototype.add(value)` method
6874      // https://tc39.es/ecma262/#sec-set.prototype.add
6875      add: function add(value) {
6876        return define(this, value = value === 0 ? 0 : value, value);
6877      }
6878    });
6879    if (DESCRIPTORS) defineProperty(Prototype, 'size', {
6880      get: function () {
6881        return getInternalState(this).size;
6882      }
6883    });
6884    return Constructor;
6885  },
6886  setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {
6887    var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';
6888    var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
6889    var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
6890    // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods
6891    // https://tc39.es/ecma262/#sec-map.prototype.entries
6892    // https://tc39.es/ecma262/#sec-map.prototype.keys
6893    // https://tc39.es/ecma262/#sec-map.prototype.values
6894    // https://tc39.es/ecma262/#sec-map.prototype-@@iterator
6895    // https://tc39.es/ecma262/#sec-set.prototype.entries
6896    // https://tc39.es/ecma262/#sec-set.prototype.keys
6897    // https://tc39.es/ecma262/#sec-set.prototype.values
6898    // https://tc39.es/ecma262/#sec-set.prototype-@@iterator
6899    defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {
6900      setInternalState(this, {
6901        type: ITERATOR_NAME,
6902        target: iterated,
6903        state: getInternalCollectionState(iterated),
6904        kind: kind,
6905        last: undefined
6906      });
6907    }, function () {
6908      var state = getInternalIteratorState(this);
6909      var kind = state.kind;
6910      var entry = state.last;
6911      // revert to the last existing entry
6912      while (entry && entry.removed) entry = entry.previous;
6913      // get next entry
6914      if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
6915        // or finish the iteration
6916        state.target = undefined;
6917        return { value: undefined, done: true };
6918      }
6919      // return step by kind
6920      if (kind == 'keys') return { value: entry.key, done: false };
6921      if (kind == 'values') return { value: entry.value, done: false };
6922      return { value: [entry.key, entry.value], done: false };
6923    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
6924
6925    // `{ Map, Set }.prototype[@@species]` accessors
6926    // https://tc39.es/ecma262/#sec-get-map-@@species
6927    // https://tc39.es/ecma262/#sec-get-set-@@species
6928    setSpecies(CONSTRUCTOR_NAME);
6929  }
6930};
6931
6932
6933/***/ }),
6934
6935/***/ 29320:
6936/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6937
6938"use strict";
6939
6940var uncurryThis = __webpack_require__(1702);
6941var defineBuiltIns = __webpack_require__(89190);
6942var getWeakData = (__webpack_require__(62423).getWeakData);
6943var anInstance = __webpack_require__(25787);
6944var anObject = __webpack_require__(19670);
6945var isNullOrUndefined = __webpack_require__(68554);
6946var isObject = __webpack_require__(70111);
6947var iterate = __webpack_require__(20408);
6948var ArrayIterationModule = __webpack_require__(42092);
6949var hasOwn = __webpack_require__(92597);
6950var InternalStateModule = __webpack_require__(29909);
6951
6952var setInternalState = InternalStateModule.set;
6953var internalStateGetterFor = InternalStateModule.getterFor;
6954var find = ArrayIterationModule.find;
6955var findIndex = ArrayIterationModule.findIndex;
6956var splice = uncurryThis([].splice);
6957var id = 0;
6958
vendor: 10,285 bytes, lines 6959-7264
6959// fallback for uncaught frozen keys
6960var uncaughtFrozenStore = function (store) {
6961  return store.frozen || (store.frozen = new UncaughtFrozenStore());
6962};
6963
6964var UncaughtFrozenStore = function () {
6965  this.entries = [];
6966};
6967
6968var findUncaughtFrozen = function (store, key) {
6969  return find(store.entries, function (it) {
6970    return it[0] === key;
6971  });
6972};
6973
6974UncaughtFrozenStore.prototype = {
6975  get: function (key) {
6976    var entry = findUncaughtFrozen(this, key);
6977    if (entry) return entry[1];
6978  },
6979  has: function (key) {
6980    return !!findUncaughtFrozen(this, key);
6981  },
6982  set: function (key, value) {
6983    var entry = findUncaughtFrozen(this, key);
6984    if (entry) entry[1] = value;
6985    else this.entries.push([key, value]);
6986  },
6987  'delete': function (key) {
6988    var index = findIndex(this.entries, function (it) {
6989      return it[0] === key;
6990    });
6991    if (~index) splice(this.entries, index, 1);
6992    return !!~index;
6993  }
6994};
6995
6996module.exports = {
6997  getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
6998    var Constructor = wrapper(function (that, iterable) {
6999      anInstance(that, Prototype);
7000      setInternalState(that, {
7001        type: CONSTRUCTOR_NAME,
7002        id: id++,
7003        frozen: undefined
7004      });
7005      if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
7006    });
7007
7008    var Prototype = Constructor.prototype;
7009
7010    var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
7011
7012    var define = function (that, key, value) {
7013      var state = getInternalState(that);
7014      var data = getWeakData(anObject(key), true);
7015      if (data === true) uncaughtFrozenStore(state).set(key, value);
7016      else data[state.id] = value;
7017      return that;
7018    };
7019
7020    defineBuiltIns(Prototype, {
7021      // `{ WeakMap, WeakSet }.prototype.delete(key)` methods
7022      // https://tc39.es/ecma262/#sec-weakmap.prototype.delete
7023      // https://tc39.es/ecma262/#sec-weakset.prototype.delete
7024      'delete': function (key) {
7025        var state = getInternalState(this);
7026        if (!isObject(key)) return false;
7027        var data = getWeakData(key);
7028        if (data === true) return uncaughtFrozenStore(state)['delete'](key);
7029        return data && hasOwn(data, state.id) && delete data[state.id];
7030      },
7031      // `{ WeakMap, WeakSet }.prototype.has(key)` methods
7032      // https://tc39.es/ecma262/#sec-weakmap.prototype.has
7033      // https://tc39.es/ecma262/#sec-weakset.prototype.has
7034      has: function has(key) {
7035        var state = getInternalState(this);
7036        if (!isObject(key)) return false;
7037        var data = getWeakData(key);
7038        if (data === true) return uncaughtFrozenStore(state).has(key);
7039        return data && hasOwn(data, state.id);
7040      }
7041    });
7042
7043    defineBuiltIns(Prototype, IS_MAP ? {
7044      // `WeakMap.prototype.get(key)` method
7045      // https://tc39.es/ecma262/#sec-weakmap.prototype.get
7046      get: function get(key) {
7047        var state = getInternalState(this);
7048        if (isObject(key)) {
7049          var data = getWeakData(key);
7050          if (data === true) return uncaughtFrozenStore(state).get(key);
7051          return data ? data[state.id] : undefined;
7052        }
7053      },
7054      // `WeakMap.prototype.set(key, value)` method
7055      // https://tc39.es/ecma262/#sec-weakmap.prototype.set
7056      set: function set(key, value) {
7057        return define(this, key, value);
7058      }
7059    } : {
7060      // `WeakSet.prototype.add(value)` method
7061      // https://tc39.es/ecma262/#sec-weakset.prototype.add
7062      add: function add(value) {
7063        return define(this, value, true);
7064      }
7065    });
7066
7067    return Constructor;
7068  }
7069};
7070
7071
7072/***/ }),
7073
7074/***/ 77710:
7075/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7076
7077"use strict";
7078
7079var $ = __webpack_require__(82109);
7080var global = __webpack_require__(17854);
7081var uncurryThis = __webpack_require__(1702);
7082var isForced = __webpack_require__(54705);
7083var defineBuiltIn = __webpack_require__(98052);
7084var InternalMetadataModule = __webpack_require__(62423);
7085var iterate = __webpack_require__(20408);
7086var anInstance = __webpack_require__(25787);
7087var isCallable = __webpack_require__(60614);
7088var isNullOrUndefined = __webpack_require__(68554);
7089var isObject = __webpack_require__(70111);
7090var fails = __webpack_require__(47293);
7091var checkCorrectnessOfIteration = __webpack_require__(17072);
7092var setToStringTag = __webpack_require__(58003);
7093var inheritIfRequired = __webpack_require__(79587);
7094
7095module.exports = function (CONSTRUCTOR_NAME, wrapper, common) {
7096  var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;
7097  var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;
7098  var ADDER = IS_MAP ? 'set' : 'add';
7099  var NativeConstructor = global[CONSTRUCTOR_NAME];
7100  var NativePrototype = NativeConstructor && NativeConstructor.prototype;
7101  var Constructor = NativeConstructor;
7102  var exported = {};
7103
7104  var fixMethod = function (KEY) {
7105    var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);
7106    defineBuiltIn(NativePrototype, KEY,
7107      KEY == 'add' ? function add(value) {
7108        uncurriedNativeMethod(this, value === 0 ? 0 : value);
7109        return this;
7110      } : KEY == 'delete' ? function (key) {
7111        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
7112      } : KEY == 'get' ? function get(key) {
7113        return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);
7114      } : KEY == 'has' ? function has(key) {
7115        return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
7116      } : function set(key, value) {
7117        uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
7118        return this;
7119      }
7120    );
7121  };
7122
7123  var REPLACE = isForced(
7124    CONSTRUCTOR_NAME,
7125    !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
7126      new NativeConstructor().entries().next();
7127    }))
7128  );
7129
7130  if (REPLACE) {
7131    // create collection constructor
7132    Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
7133    InternalMetadataModule.enable();
7134  } else if (isForced(CONSTRUCTOR_NAME, true)) {
7135    var instance = new Constructor();
7136    // early implementations not supports chaining
7137    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
7138    // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
7139    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
7140    // most early implementations doesn't supports iterables, most modern - not close it correctly
7141    // eslint-disable-next-line no-new -- required for testing
7142    var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });
7143    // for early implementations -0 and +0 not the same
7144    var BUGGY_ZERO = !IS_WEAK && fails(function () {
7145      // V8 ~ Chromium 42- fails only with 5+ elements
7146      var $instance = new NativeConstructor();
7147      var index = 5;
7148      while (index--) $instance[ADDER](index, index);
7149      return !$instance.has(-0);
7150    });
7151
7152    if (!ACCEPT_ITERABLES) {
7153      Constructor = wrapper(function (dummy, iterable) {
7154        anInstance(dummy, NativePrototype);
7155        var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
7156        if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });
7157        return that;
7158      });
7159      Constructor.prototype = NativePrototype;
7160      NativePrototype.constructor = Constructor;
7161    }
7162
7163    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
7164      fixMethod('delete');
7165      fixMethod('has');
7166      IS_MAP && fixMethod('get');
7167    }
7168
7169    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
7170
7171    // weak collections should not contains .clear method
7172    if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
7173  }
7174
7175  exported[CONSTRUCTOR_NAME] = Constructor;
7176  $({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);
7177
7178  setToStringTag(Constructor, CONSTRUCTOR_NAME);
7179
7180  if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
7181
7182  return Constructor;
7183};
7184
7185
7186/***/ }),
7187
7188/***/ 99920:
7189/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7190
7191var hasOwn = __webpack_require__(92597);
7192var ownKeys = __webpack_require__(53887);
7193var getOwnPropertyDescriptorModule = __webpack_require__(31236);
7194var definePropertyModule = __webpack_require__(3070);
7195
7196module.exports = function (target, source, exceptions) {
7197  var keys = ownKeys(source);
7198  var defineProperty = definePropertyModule.f;
7199  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
7200  for (var i = 0; i < keys.length; i++) {
7201    var key = keys[i];
7202    if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
7203      defineProperty(target, key, getOwnPropertyDescriptor(source, key));
7204    }
7205  }
7206};
7207
7208
7209/***/ }),
7210
7211/***/ 84964:
7212/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7213
7214var wellKnownSymbol = __webpack_require__(5112);
7215
7216var MATCH = wellKnownSymbol('match');
7217
7218module.exports = function (METHOD_NAME) {
7219  var regexp = /./;
7220  try {
7221    '/./'[METHOD_NAME](regexp);
7222  } catch (error1) {
7223    try {
7224      regexp[MATCH] = false;
7225      return '/./'[METHOD_NAME](regexp);
7226    } catch (error2) { /* empty */ }
7227  } return false;
7228};
7229
7230
7231/***/ }),
7232
7233/***/ 49920:
7234/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7235
7236var fails = __webpack_require__(47293);
7237
7238module.exports = !fails(function () {
7239  function F() { /* empty */ }
7240  F.prototype.constructor = null;
7241  // eslint-disable-next-line es-x/no-object-getprototypeof -- required for testing
7242  return Object.getPrototypeOf(new F()) !== F.prototype;
7243});
7244
7245
7246/***/ }),
7247
7248/***/ 14230:
7249/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7250
7251var uncurryThis = __webpack_require__(1702);
7252var requireObjectCoercible = __webpack_require__(84488);
7253var toString = __webpack_require__(41340);
7254
7255var quot = /"/g;
7256var replace = uncurryThis(''.replace);
7257
7258// `CreateHTML` abstract operation
7259// https://tc39.es/ecma262/#sec-createhtml
7260module.exports = function (string, tag, attribute, value) {
7261  var S = toString(requireObjectCoercible(string));
7262  var p1 = '<' + tag;
7263  if (attribute !== '') p1 += ' ' + attribute + '="' + replace(toString(value), quot, '&quot;') + '"';
7264  return p1 + '>
vendor: 7,386 bytes, lines 7264-7534
7264' + S + '</' + tag + '>';
7265};
7266
7267
7268/***/ }),
7269
7270/***/ 68880:
7271/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7272
7273var DESCRIPTORS = __webpack_require__(19781);
7274var definePropertyModule = __webpack_require__(3070);
7275var createPropertyDescriptor = __webpack_require__(79114);
7276
7277module.exports = DESCRIPTORS ? function (object, key, value) {
7278  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
7279} : function (object, key, value) {
7280  object[key] = value;
7281  return object;
7282};
7283
7284
7285/***/ }),
7286
7287/***/ 79114:
7288/***/ ((module) => {
7289
7290module.exports = function (bitmap, value) {
7291  return {
7292    enumerable: !(bitmap & 1),
7293    configurable: !(bitmap & 2),
7294    writable: !(bitmap & 4),
7295    value: value
7296  };
7297};
7298
7299
7300/***/ }),
7301
7302/***/ 86135:
7303/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7304
7305"use strict";
7306
7307var toPropertyKey = __webpack_require__(34948);
7308var definePropertyModule = __webpack_require__(3070);
7309var createPropertyDescriptor = __webpack_require__(79114);
7310
7311module.exports = function (object, key, value) {
7312  var propertyKey = toPropertyKey(key);
7313  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));
7314  else object[propertyKey] = value;
7315};
7316
7317
7318/***/ }),
7319
7320/***/ 85573:
7321/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7322
7323"use strict";
7324
7325var uncurryThis = __webpack_require__(1702);
7326var fails = __webpack_require__(47293);
7327var padStart = (__webpack_require__(76650).start);
7328
7329var $RangeError = RangeError;
7330var $isFinite = isFinite;
7331var abs = Math.abs;
7332var DatePrototype = Date.prototype;
7333var nativeDateToISOString = DatePrototype.toISOString;
7334var thisTimeValue = uncurryThis(DatePrototype.getTime);
7335var getUTCDate = uncurryThis(DatePrototype.getUTCDate);
7336var getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear);
7337var getUTCHours = uncurryThis(DatePrototype.getUTCHours);
7338var getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds);
7339var getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes);
7340var getUTCMonth = uncurryThis(DatePrototype.getUTCMonth);
7341var getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds);
7342
7343// `Date.prototype.toISOString` method implementation
7344// https://tc39.es/ecma262/#sec-date.prototype.toisostring
7345// PhantomJS / old WebKit fails here:
7346module.exports = (fails(function () {
7347  return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
7348}) || !fails(function () {
7349  nativeDateToISOString.call(new Date(NaN));
7350})) ? function toISOString() {
7351  if (!$isFinite(thisTimeValue(this))) throw $RangeError('Invalid time value');
7352  var date = this;
7353  var year = getUTCFullYear(date);
7354  var milliseconds = getUTCMilliseconds(date);
7355  var sign = year < 0 ? '-' : year > 9999 ? '+' : '';
7356  return sign + padStart(abs(year), sign ? 6 : 4, 0) +
7357    '-' + padStart(getUTCMonth(date) + 1, 2, 0) +
7358    '-' + padStart(getUTCDate(date), 2, 0) +
7359    'T' + padStart(getUTCHours(date), 2, 0) +
7360    ':' + padStart(getUTCMinutes(date), 2, 0) +
7361    ':' + padStart(getUTCSeconds(date), 2, 0) +
7362    '.' + padStart(milliseconds, 3, 0) +
7363    'Z';
7364} : nativeDateToISOString;
7365
7366
7367/***/ }),
7368
7369/***/ 38709:
7370/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7371
7372"use strict";
7373
7374var anObject = __webpack_require__(19670);
7375var ordinaryToPrimitive = __webpack_require__(92140);
7376
7377var $TypeError = TypeError;
7378
7379// `Date.prototype[@@toPrimitive](hint)` method implementation
7380// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive
7381module.exports = function (hint) {
7382  anObject(this);
7383  if (hint === 'string' || hint === 'default') hint = 'string';
7384  else if (hint !== 'number') throw $TypeError('Incorrect hint');
7385  return ordinaryToPrimitive(this, hint);
7386};
7387
7388
7389/***/ }),
7390
7391/***/ 47045:
7392/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7393
7394var makeBuiltIn = __webpack_require__(56339);
7395var defineProperty = __webpack_require__(3070);
7396
7397module.exports = function (target, name, descriptor) {
7398  if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
7399  if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
7400  return defineProperty.f(target, name, descriptor);
7401};
7402
7403
7404/***/ }),
7405
7406/***/ 98052:
7407/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7408
7409var isCallable = __webpack_require__(60614);
7410var definePropertyModule = __webpack_require__(3070);
7411var makeBuiltIn = __webpack_require__(56339);
7412var defineGlobalProperty = __webpack_require__(13072);
7413
7414module.exports = function (O, key, value, options) {
7415  if (!options) options = {};
7416  var simple = options.enumerable;
7417  var name = options.name !== undefined ? options.name : key;
7418  if (isCallable(value)) makeBuiltIn(value, name, options);
7419  if (options.global) {
7420    if (simple) O[key] = value;
7421    else defineGlobalProperty(key, value);
7422  } else {
7423    try {
7424      if (!options.unsafe) delete O[key];
7425      else if (O[key]) simple = true;
7426    } catch (error) { /* empty */ }
7427    if (simple) O[key] = value;
7428    else definePropertyModule.f(O, key, {
7429      value: value,
7430      enumerable: false,
7431      configurable: !options.nonConfigurable,
7432      writable: !options.nonWritable
7433    });
7434  } return O;
7435};
7436
7437
7438/***/ }),
7439
7440/***/ 89190:
7441/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7442
7443var defineBuiltIn = __webpack_require__(98052);
7444
7445module.exports = function (target, src, options) {
7446  for (var key in src) defineBuiltIn(target, key, src[key], options);
7447  return target;
7448};
7449
7450
7451/***/ }),
7452
7453/***/ 13072:
7454/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7455
7456var global = __webpack_require__(17854);
7457
7458// eslint-disable-next-line es-x/no-object-defineproperty -- safe
7459var defineProperty = Object.defineProperty;
7460
7461module.exports = function (key, value) {
7462  try {
7463    defineProperty(global, key, { value: value, configurable: true, writable: true });
7464  } catch (error) {
7465    global[key] = value;
7466  } return value;
7467};
7468
7469
7470/***/ }),
7471
7472/***/ 85117:
7473/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7474
7475"use strict";
7476
7477var tryToString = __webpack_require__(66330);
7478
7479var $TypeError = TypeError;
7480
7481module.exports = function (O, P) {
7482  if (!delete O[P]) throw $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));
7483};
7484
7485
7486/***/ }),
7487
7488/***/ 19781:
7489/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7490
7491var fails = __webpack_require__(47293);
7492
7493// Detect IE8's incomplete defineProperty implementation
7494module.exports = !fails(function () {
7495  // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
7496  return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
7497});
7498
7499
7500/***/ }),
7501
7502/***/ 80317:
7503/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7504
7505var global = __webpack_require__(17854);
7506var isObject = __webpack_require__(70111);
7507
7508var document = global.document;
7509// typeof document.createElement is 'object' in old IE
7510var EXISTS = isObject(document) && isObject(document.createElement);
7511
7512module.exports = function (it) {
7513  return EXISTS ? document.createElement(it) : {};
7514};
7515
7516
7517/***/ }),
7518
7519/***/ 7207:
7520/***/ ((module) => {
7521
7522var $TypeError = TypeError;
7523var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991
7524
7525module.exports = function (it) {
7526  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');
7527  return it;
7528};
7529
7530
7531/***/ }),
7532
7533/***/ 93678:
7534/***/ ((module) => {
vendor: 1,554 bytes, lines 7534-7565
7534
7535
7536module.exports = {
7537  IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },
7538  DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },
7539  HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },
7540  WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },
7541  InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },
7542  NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },
7543  NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },
7544  NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },
7545  NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },
7546  InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },
7547  InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },
7548  SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },
7549  InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },
7550  NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },
7551  InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },
7552  ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },
7553  TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },
7554  SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },
7555  NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },
7556  AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },
7557  URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },
7558  QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },
7559  TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },
7560  InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },
7561  DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }
7562};
7563
7564
7565/***/ }),
7566
7567/***/ 48324:
7568/***/ ((module) => {
7569
7570// iterable DOM collections
7571// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
7572module.exports = {
7573  CSSRuleList: 0,
7574  CSSStyleDeclaration: 0,
7575  CSSValueList: 0,
7576  ClientRectList: 0,
7577  DOMRectList: 0,
7578  DOMStringList: 0,
7579  DOMTokenList: 1,
7580  DataTransferItemList: 0,
7581  FileList: 0,
7582  HTMLAllCollection: 0,
7583  HTMLCollection: 0,
7584  HTMLFormElement: 0,
7585  HTMLSelectElement: 0,
7586  MediaList: 0,
7587  MimeTypeArray: 0,
7588  NamedNodeMap: 0,
7589  NodeList: 1,
7590  PaintRequestList: 0,
7591  Plugin: 0,
7592  PluginArray: 0,
7593  SVGLengthList: 0,
7594  SVGNumberList: 0,
7595  SVGPathSegList: 0,
7596  SVGPointList: 0,
7597  SVGStringList: 0,
7598  SVGTransformList: 0,
7599  SourceBufferList: 0,
7600  StyleSheetList: 0,
7601  TextTrackCueList: 0,
7602  TextTrackList: 0,
7603  TouchList: 0
7604};
7605
7606
7607/***/ }),
7608
7609/***/ 98509:
7610/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7611
7612// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`
7613var documentCreateElement = __webpack_require__(80317);
7614
7615var classList = documentCreateElement('span').classList;
7616var DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;
7617
7618module.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;
7619
7620
7621/***/ }),
7622
7623/***/ 68886:
7624/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7625
7626var userAgent = __webpack_require__(88113);
7627
7628var firefox = userAgent.match(/firefox\/(\d+)/i);
7629
7630module.exports = !!firefox && +firefox[1];
7631
7632
7633/***/ }),
7634
7635/***/ 7871:
7636/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7637
7638var IS_DENO = __webpack_require__(83823);
7639var IS_NODE = __webpack_require__(35268);
7640
7641module.exports = !IS_DENO && !IS_NODE
7642  && typeof window == 'object'
7643  && typeof document == 'object';
7644
7645
7646/***/ }),
7647
7648/***/ 83823:
7649/***/ ((module) => {
7650
7651/* global Deno -- Deno case */
7652module.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';
7653
7654
7655/***/ }),
7656
7657/***/ 30256:
7658/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7659
7660var UA = __webpack_require__(88113);
7661
7662module.exports = /MSIE|Trident/.test(UA);
7663
7664
7665/***/ }),
7666
7667/***/ 71528:
7668/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7669
7670var userAgent = __webpack_require__(88113);
7671var global = __webpack_require__(17854);
7672
7673module.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;
7674
7675
7676/***/ }),
7677
7678/***/ 6833:
7679/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7680
7681var userAgent = __webpack_require__(88113);
7682
7683module.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);
7684
7685
7686/***/ }),
7687
7688/***/ 35268:
7689/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7690
7691var classof = __webpack_require__(84326);
7692var global = __webpack_require__(17854);
7693
7694module.exports = classof(global.process) == 'process';
7695
7696
7697/***/ }),
7698
7699/***/ 71036:
7700/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7701
7702var userAgent = __webpack_require__(88113);
7703
7704module.exports = /web0s(?!.*chrome)/i.test(userAgent);
7705
7706
7707/***/ }),
7708
7709/***/ 88113:
7710/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7711
7712var getBuiltIn = __webpack_require__(35005);
7713
7714module.exports = getBuiltIn('navigator', 'userAgent') || '';
7715
7716
7717/***/ }),
7718
7719/***/ 7392:
7720/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7721
7722var global = __webpack_require__(17854);
7723var userAgent = __webpack_require__(88113);
7724
7725var process = global.process;
7726var Deno = global.Deno;
7727var versions = process && process.versions || Deno && Deno.version;
7728var v8 = versions && versions.v8;
7729var match, version;
7730
7731if (v8) {
7732  match = v8.split('.');
7733  // in old Chrome, versions of V8 isn't V8 = Chrome / 10
7734  // but their correct versions are not interesting for us
7735  version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
7736}
7737
7738// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`
7739// so check `userAgent` even if `.v8` exists, but 0
7740if (!version && userAgent) {
7741  match = userAgent.match(/Edge\/(\d+)/);
7742  if (!match || match[1] >= 74) {
7743    match = userAgent.match(/Chrome\/(\d+)/);
7744    if (match) version = +match[1];
7745  }
7746}
7747
7748module.exports = version;
7749
7750
7751/***/ }),
7752
7753/***/ 98008:
7754/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7755
7756var userAgent = __webpack_require__(88113);
7757
vendor: 5,081 bytes, lines 7758-7907
7758var webkit = userAgent.match(/AppleWebKit\/(\d+)\./);
7759
7760module.exports = !!webkit && +webkit[1];
7761
7762
7763/***/ }),
7764
7765/***/ 80748:
7766/***/ ((module) => {
7767
7768// IE8- don't enum bug keys
7769module.exports = [
7770  'constructor',
7771  'hasOwnProperty',
7772  'isPrototypeOf',
7773  'propertyIsEnumerable',
7774  'toLocaleString',
7775  'toString',
7776  'valueOf'
7777];
7778
7779
7780/***/ }),
7781
7782/***/ 11060:
7783/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7784
7785var uncurryThis = __webpack_require__(1702);
7786
7787var $Error = Error;
7788var replace = uncurryThis(''.replace);
7789
7790var TEST = (function (arg) { return String($Error(arg).stack); })('zxcasd');
7791var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
7792var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
7793
7794module.exports = function (stack, dropEntries) {
7795  if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {
7796    while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');
7797  } return stack;
7798};
7799
7800
7801/***/ }),
7802
7803/***/ 22914:
7804/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7805
7806var fails = __webpack_require__(47293);
7807var createPropertyDescriptor = __webpack_require__(79114);
7808
7809module.exports = !fails(function () {
7810  var error = Error('a');
7811  if (!('stack' in error)) return true;
7812  // eslint-disable-next-line es-x/no-object-defineproperty -- safe
7813  Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));
7814  return error.stack !== 7;
7815});
7816
7817
7818/***/ }),
7819
7820/***/ 7762:
7821/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7822
7823"use strict";
7824
7825var DESCRIPTORS = __webpack_require__(19781);
7826var fails = __webpack_require__(47293);
7827var anObject = __webpack_require__(19670);
7828var create = __webpack_require__(70030);
7829var normalizeStringArgument = __webpack_require__(56277);
7830
7831var nativeErrorToString = Error.prototype.toString;
7832
7833var INCORRECT_TO_STRING = fails(function () {
7834  if (DESCRIPTORS) {
7835    // Chrome 32- incorrectly call accessor
7836    // eslint-disable-next-line es-x/no-object-defineproperty -- safe
7837    var object = create(Object.defineProperty({}, 'name', { get: function () {
7838      return this === object;
7839    } }));
7840    if (nativeErrorToString.call(object) !== 'true') return true;
7841  }
7842  // FF10- does not properly handle non-strings
7843  return nativeErrorToString.call({ message: 1, name: 2 }) !== '2: 1'
7844    // IE8 does not properly handle defaults
7845    || nativeErrorToString.call({}) !== 'Error';
7846});
7847
7848module.exports = INCORRECT_TO_STRING ? function toString() {
7849  var O = anObject(this);
7850  var name = normalizeStringArgument(O.name, 'Error');
7851  var message = normalizeStringArgument(O.message);
7852  return !name ? message : !message ? name : name + ': ' + message;
7853} : nativeErrorToString;
7854
7855
7856/***/ }),
7857
7858/***/ 82109:
7859/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7860
7861var global = __webpack_require__(17854);
7862var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
7863var createNonEnumerableProperty = __webpack_require__(68880);
7864var defineBuiltIn = __webpack_require__(98052);
7865var defineGlobalProperty = __webpack_require__(13072);
7866var copyConstructorProperties = __webpack_require__(99920);
7867var isForced = __webpack_require__(54705);
7868
7869/*
7870  options.target         - name of the target object
7871  options.global         - target is the global object
7872  options.stat           - export as static methods of target
7873  options.proto          - export as prototype methods of target
7874  options.real           - real prototype method for the `pure` version
7875  options.forced         - export even if the native feature is available
7876  options.bind           - bind methods to the target, required for the `pure` version
7877  options.wrap           - wrap constructors to preventing global pollution, required for the `pure` version
7878  options.unsafe         - use the simple assignment of property instead of delete + defineProperty
7879  options.sham           - add a flag to not completely full polyfills
7880  options.enumerable     - export as enumerable property
7881  options.dontCallGetSet - prevent calling a getter on target
7882  options.name           - the .name of the function if it does not match the key
7883*/
7884module.exports = function (options, source) {
7885  var TARGET = options.target;
7886  var GLOBAL = options.global;
7887  var STATIC = options.stat;
7888  var FORCED, target, key, targetProperty, sourceProperty, descriptor;
7889  if (GLOBAL) {
7890    target = global;
7891  } else if (STATIC) {
7892    target = global[TARGET] || defineGlobalProperty(TARGET, {});
7893  } else {
7894    target = (global[TARGET] || {}).prototype;
7895  }
7896  if (target) for (key in source) {
7897    sourceProperty = source[key];
7898    if (options.dontCallGetSet) {
7899      descriptor = getOwnPropertyDescriptor(target, key);
7900      targetProperty = descriptor && descriptor.value;
7901    } else targetProperty = target[key];
7902    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
7903    // contained in target
7904    if (!FORCED && targetProperty !== undefined) {
7905      if (typeof sourceProperty == typeof targetProperty) continue;
7906      copyConstructorProperties(sourceProperty, targetProperty);
7907    }
vendor: 5,508 bytes, lines 7908-8095
7908    // add a flag to not completely full polyfills
7909    if (options.sham || (targetProperty && targetProperty.sham)) {
7910      createNonEnumerableProperty(sourceProperty, 'sham', true);
7911    }
7912    defineBuiltIn(target, key, sourceProperty, options);
7913  }
7914};
7915
7916
7917/***/ }),
7918
7919/***/ 47293:
7920/***/ ((module) => {
7921
7922module.exports = function (exec) {
7923  try {
7924    return !!exec();
7925  } catch (error) {
7926    return true;
7927  }
7928};
7929
7930
7931/***/ }),
7932
7933/***/ 27007:
7934/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
7935
7936"use strict";
7937
7938// TODO: Remove from `core-js@4` since it's moved to entry points
7939__webpack_require__(74916);
7940var uncurryThis = __webpack_require__(1702);
7941var defineBuiltIn = __webpack_require__(98052);
7942var regexpExec = __webpack_require__(22261);
7943var fails = __webpack_require__(47293);
7944var wellKnownSymbol = __webpack_require__(5112);
7945var createNonEnumerableProperty = __webpack_require__(68880);
7946
7947var SPECIES = wellKnownSymbol('species');
7948var RegExpPrototype = RegExp.prototype;
7949
7950module.exports = function (KEY, exec, FORCED, SHAM) {
7951  var SYMBOL = wellKnownSymbol(KEY);
7952
7953  var DELEGATES_TO_SYMBOL = !fails(function () {
7954    // String methods call symbol-named RegEp methods
7955    var O = {};
7956    O[SYMBOL] = function () { return 7; };
7957    return ''[KEY](O) != 7;
7958  });
7959
7960  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {
7961    // Symbol-named RegExp methods call .exec
7962    var execCalled = false;
7963    var re = /a/;
7964
7965    if (KEY === 'split') {
7966      // We can't use real regex here since it causes deoptimization
7967      // and serious performance degradation in V8
7968      // https://github.com/zloirock/core-js/issues/306
7969      re = {};
7970      // RegExp[@@split] doesn't call the regex's exec method, but first creates
7971      // a new one. We need to return the patched regex when creating the new one.
7972      re.constructor = {};
7973      re.constructor[SPECIES] = function () { return re; };
7974      re.flags = '';
7975      re[SYMBOL] = /./[SYMBOL];
7976    }
7977
7978    re.exec = function () { execCalled = true; return null; };
7979
7980    re[SYMBOL]('');
7981    return !execCalled;
7982  });
7983
7984  if (
7985    !DELEGATES_TO_SYMBOL ||
7986    !DELEGATES_TO_EXEC ||
7987    FORCED
7988  ) {
7989    var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);
7990    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
7991      var uncurriedNativeMethod = uncurryThis(nativeMethod);
7992      var $exec = regexp.exec;
7993      if ($exec === regexpExec || $exec === RegExpPrototype.exec) {
7994        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
7995          // The native String method already delegates to @@method (this
7996          // polyfilled function), leasing to infinite recursion.
7997          // We avoid it by directly calling the native @@method method.
7998          return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };
7999        }
8000        return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };
8001      }
8002      return { done: false };
8003    });
8004
8005    defineBuiltIn(String.prototype, KEY, methods[0]);
8006    defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);
8007  }
8008
8009  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);
8010};
8011
8012
8013/***/ }),
8014
8015/***/ 6790:
8016/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8017
8018"use strict";
8019
8020var isArray = __webpack_require__(43157);
8021var lengthOfArrayLike = __webpack_require__(26244);
8022var doesNotExceedSafeInteger = __webpack_require__(7207);
8023var bind = __webpack_require__(49974);
8024
8025// `FlattenIntoArray` abstract operation
8026// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
8027var flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {
8028  var targetIndex = start;
8029  var sourceIndex = 0;
8030  var mapFn = mapper ? bind(mapper, thisArg) : false;
8031  var element, elementLen;
8032
8033  while (sourceIndex < sourceLen) {
8034    if (sourceIndex in source) {
8035      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
8036
8037      if (depth > 0 && isArray(element)) {
8038        elementLen = lengthOfArrayLike(element);
8039        targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;
8040      } else {
8041        doesNotExceedSafeInteger(targetIndex + 1);
8042        target[targetIndex] = element;
8043      }
8044
8045      targetIndex++;
8046    }
8047    sourceIndex++;
8048  }
8049  return targetIndex;
8050};
8051
8052module.exports = flattenIntoArray;
8053
8054
8055/***/ }),
8056
8057/***/ 76677:
8058/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8059
8060var fails = __webpack_require__(47293);
8061
8062module.exports = !fails(function () {
8063  // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-preventextensions -- required for testing
8064  return Object.isExtensible(Object.preventExtensions({}));
8065});
8066
8067
8068/***/ }),
8069
8070/***/ 22104:
8071/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8072
8073var NATIVE_BIND = __webpack_require__(34374);
8074
8075var FunctionPrototype = Function.prototype;
8076var apply = FunctionPrototype.apply;
8077var call = FunctionPrototype.call;
8078
8079// eslint-disable-next-line es-x/no-reflect -- safe
8080module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {
8081  return call.apply(apply, arguments);
8082});
8083
8084
8085/***/ }),
8086
8087/***/ 49974:
8088/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8089
8090var uncurryThis = __webpack_require__(1702);
8091var aCallable = __webpack_require__(19662);
8092var NATIVE_BIND = __webpack_require__(34374);
8093
8094var bind = uncurryThis(uncurryThis.bind);
8095
vendor: 6,698 bytes, lines 8096-8323
8096// optional / simple context binding
8097module.exports = function (fn, that) {
8098  aCallable(fn);
8099  return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {
8100    return fn.apply(that, arguments);
8101  };
8102};
8103
8104
8105/***/ }),
8106
8107/***/ 34374:
8108/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8109
8110var fails = __webpack_require__(47293);
8111
8112module.exports = !fails(function () {
8113  // eslint-disable-next-line es-x/no-function-prototype-bind -- safe
8114  var test = (function () { /* empty */ }).bind();
8115  // eslint-disable-next-line no-prototype-builtins -- safe
8116  return typeof test != 'function' || test.hasOwnProperty('prototype');
8117});
8118
8119
8120/***/ }),
8121
8122/***/ 27065:
8123/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8124
8125"use strict";
8126
8127var uncurryThis = __webpack_require__(1702);
8128var aCallable = __webpack_require__(19662);
8129var isObject = __webpack_require__(70111);
8130var hasOwn = __webpack_require__(92597);
8131var arraySlice = __webpack_require__(50206);
8132var NATIVE_BIND = __webpack_require__(34374);
8133
8134var $Function = Function;
8135var concat = uncurryThis([].concat);
8136var join = uncurryThis([].join);
8137var factories = {};
8138
8139var construct = function (C, argsLength, args) {
8140  if (!hasOwn(factories, argsLength)) {
8141    for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';
8142    factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');
8143  } return factories[argsLength](C, args);
8144};
8145
8146// `Function.prototype.bind` method implementation
8147// https://tc39.es/ecma262/#sec-function.prototype.bind
8148module.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {
8149  var F = aCallable(this);
8150  var Prototype = F.prototype;
8151  var partArgs = arraySlice(arguments, 1);
8152  var boundFunction = function bound(/* args... */) {
8153    var args = concat(partArgs, arraySlice(arguments));
8154    return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);
8155  };
8156  if (isObject(Prototype)) boundFunction.prototype = Prototype;
8157  return boundFunction;
8158};
8159
8160
8161/***/ }),
8162
8163/***/ 46916:
8164/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8165
8166var NATIVE_BIND = __webpack_require__(34374);
8167
8168var call = Function.prototype.call;
8169
8170module.exports = NATIVE_BIND ? call.bind(call) : function () {
8171  return call.apply(call, arguments);
8172};
8173
8174
8175/***/ }),
8176
8177/***/ 76530:
8178/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8179
8180var DESCRIPTORS = __webpack_require__(19781);
8181var hasOwn = __webpack_require__(92597);
8182
8183var FunctionPrototype = Function.prototype;
8184// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
8185var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
8186
8187var EXISTS = hasOwn(FunctionPrototype, 'name');
8188// additional protection from minified / mangled / dropped function names
8189var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';
8190var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));
8191
8192module.exports = {
8193  EXISTS: EXISTS,
8194  PROPER: PROPER,
8195  CONFIGURABLE: CONFIGURABLE
8196};
8197
8198
8199/***/ }),
8200
8201/***/ 1702:
8202/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8203
8204var NATIVE_BIND = __webpack_require__(34374);
8205
8206var FunctionPrototype = Function.prototype;
8207var bind = FunctionPrototype.bind;
8208var call = FunctionPrototype.call;
8209var uncurryThis = NATIVE_BIND && bind.bind(call, call);
8210
8211module.exports = NATIVE_BIND ? function (fn) {
8212  return fn && uncurryThis(fn);
8213} : function (fn) {
8214  return fn && function () {
8215    return call.apply(fn, arguments);
8216  };
8217};
8218
8219
8220/***/ }),
8221
8222/***/ 35005:
8223/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8224
8225var global = __webpack_require__(17854);
8226var isCallable = __webpack_require__(60614);
8227
8228var aFunction = function (argument) {
8229  return isCallable(argument) ? argument : undefined;
8230};
8231
8232module.exports = function (namespace, method) {
8233  return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];
8234};
8235
8236
8237/***/ }),
8238
8239/***/ 71246:
8240/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8241
8242var classof = __webpack_require__(70648);
8243var getMethod = __webpack_require__(58173);
8244var isNullOrUndefined = __webpack_require__(68554);
8245var Iterators = __webpack_require__(97497);
8246var wellKnownSymbol = __webpack_require__(5112);
8247
8248var ITERATOR = wellKnownSymbol('iterator');
8249
8250module.exports = function (it) {
8251  if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)
8252    || getMethod(it, '@@iterator')
8253    || Iterators[classof(it)];
8254};
8255
8256
8257/***/ }),
8258
8259/***/ 18554:
8260/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8261
8262var call = __webpack_require__(46916);
8263var aCallable = __webpack_require__(19662);
8264var anObject = __webpack_require__(19670);
8265var tryToString = __webpack_require__(66330);
8266var getIteratorMethod = __webpack_require__(71246);
8267
8268var $TypeError = TypeError;
8269
8270module.exports = function (argument, usingIterator) {
8271  var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
8272  if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
8273  throw $TypeError(tryToString(argument) + ' is not iterable');
8274};
8275
8276
8277/***/ }),
8278
8279/***/ 58173:
8280/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8281
8282var aCallable = __webpack_require__(19662);
8283var isNullOrUndefined = __webpack_require__(68554);
8284
8285// `GetMethod` abstract operation
8286// https://tc39.es/ecma262/#sec-getmethod
8287module.exports = function (V, P) {
8288  var func = V[P];
8289  return isNullOrUndefined(func) ? undefined : aCallable(func);
8290};
8291
8292
8293/***/ }),
8294
8295/***/ 10647:
8296/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8297
8298var uncurryThis = __webpack_require__(1702);
8299var toObject = __webpack_require__(47908);
8300
8301var floor = Math.floor;
8302var charAt = uncurryThis(''.charAt);
8303var replace = uncurryThis(''.replace);
8304var stringSlice = uncurryThis(''.slice);
8305var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
8306var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
8307
8308// `GetSubstitution` abstract operation
8309// https://tc39.es/ecma262/#sec-getsubstitution
8310module.exports = function (matched, str, position, captures, namedCaptures, replacement) {
8311  var tailPos = position + matched.length;
8312  var m = captures.length;
8313  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
8314  if (namedCaptures !== undefined) {
8315    namedCaptures = toObject(namedCaptures);
8316    symbols = SUBSTITUTION_SYMBOLS;
8317  }
8318  return replace(replacement, symbols, function (match, ch) {
8319    var capture;
8320    switch (charAt(ch, 0)) {
8321      case '$': return '$';
8322      case '&': return matched;
8323      case '`': return stringSlice(str, 0, position);
vendor: 4,972 bytes, lines 8324-8509
8324      case "'": return stringSlice(str, tailPos);
8325      case '<':
8326        capture = namedCaptures[stringSlice(ch, 1, -1)];
8327        break;
8328      default: // \d\d?
8329        var n = +ch;
8330        if (n === 0) return match;
8331        if (n > m) {
8332          var f = floor(n / 10);
8333          if (f === 0) return match;
8334          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
8335          return match;
8336        }
8337        capture = captures[n - 1];
8338    }
8339    return capture === undefined ? '' : capture;
8340  });
8341};
8342
8343
8344/***/ }),
8345
8346/***/ 17854:
8347/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8348
8349var check = function (it) {
8350  return it && it.Math == Math && it;
8351};
8352
8353// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
8354module.exports =
8355  // eslint-disable-next-line es-x/no-global-this -- safe
8356  check(typeof globalThis == 'object' && globalThis) ||
8357  check(typeof window == 'object' && window) ||
8358  // eslint-disable-next-line no-restricted-globals -- safe
8359  check(typeof self == 'object' && self) ||
8360  check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||
8361  // eslint-disable-next-line no-new-func -- fallback
8362  (function () { return this; })() || Function('return this')();
8363
8364
8365/***/ }),
8366
8367/***/ 92597:
8368/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8369
8370var uncurryThis = __webpack_require__(1702);
8371var toObject = __webpack_require__(47908);
8372
8373var hasOwnProperty = uncurryThis({}.hasOwnProperty);
8374
8375// `HasOwnProperty` abstract operation
8376// https://tc39.es/ecma262/#sec-hasownproperty
8377// eslint-disable-next-line es-x/no-object-hasown -- safe
8378module.exports = Object.hasOwn || function hasOwn(it, key) {
8379  return hasOwnProperty(toObject(it), key);
8380};
8381
8382
8383/***/ }),
8384
8385/***/ 3501:
8386/***/ ((module) => {
8387
8388module.exports = {};
8389
8390
8391/***/ }),
8392
8393/***/ 842:
8394/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8395
8396var global = __webpack_require__(17854);
8397
8398module.exports = function (a, b) {
8399  var console = global.console;
8400  if (console && console.error) {
8401    arguments.length == 1 ? console.error(a) : console.error(a, b);
8402  }
8403};
8404
8405
8406/***/ }),
8407
8408/***/ 60490:
8409/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8410
8411var getBuiltIn = __webpack_require__(35005);
8412
8413module.exports = getBuiltIn('document', 'documentElement');
8414
8415
8416/***/ }),
8417
8418/***/ 64664:
8419/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8420
8421var DESCRIPTORS = __webpack_require__(19781);
8422var fails = __webpack_require__(47293);
8423var createElement = __webpack_require__(80317);
8424
8425// Thanks to IE8 for its funny defineProperty
8426module.exports = !DESCRIPTORS && !fails(function () {
8427  // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
8428  return Object.defineProperty(createElement('div'), 'a', {
8429    get: function () { return 7; }
8430  }).a != 7;
8431});
8432
8433
8434/***/ }),
8435
8436/***/ 11179:
8437/***/ ((module) => {
8438
8439// IEEE754 conversions based on https://github.com/feross/ieee754
8440var $Array = Array;
8441var abs = Math.abs;
8442var pow = Math.pow;
8443var floor = Math.floor;
8444var log = Math.log;
8445var LN2 = Math.LN2;
8446
8447var pack = function (number, mantissaLength, bytes) {
8448  var buffer = $Array(bytes);
8449  var exponentLength = bytes * 8 - mantissaLength - 1;
8450  var eMax = (1 << exponentLength) - 1;
8451  var eBias = eMax >> 1;
8452  var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
8453  var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
8454  var index = 0;
8455  var exponent, mantissa, c;
8456  number = abs(number);
8457  // eslint-disable-next-line no-self-compare -- NaN check
8458  if (number != number || number === Infinity) {
8459    // eslint-disable-next-line no-self-compare -- NaN check
8460    mantissa = number != number ? 1 : 0;
8461    exponent = eMax;
8462  } else {
8463    exponent = floor(log(number) / LN2);
8464    c = pow(2, -exponent);
8465    if (number * c < 1) {
8466      exponent--;
8467      c *= 2;
8468    }
8469    if (exponent + eBias >= 1) {
8470      number += rt / c;
8471    } else {
8472      number += rt * pow(2, 1 - eBias);
8473    }
8474    if (number * c >= 2) {
8475      exponent++;
8476      c /= 2;
8477    }
8478    if (exponent + eBias >= eMax) {
8479      mantissa = 0;
8480      exponent = eMax;
8481    } else if (exponent + eBias >= 1) {
8482      mantissa = (number * c - 1) * pow(2, mantissaLength);
8483      exponent = exponent + eBias;
8484    } else {
8485      mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
8486      exponent = 0;
8487    }
8488  }
8489  while (mantissaLength >= 8) {
8490    buffer[index++] = mantissa & 255;
8491    mantissa /= 256;
8492    mantissaLength -= 8;
8493  }
8494  exponent = exponent << mantissaLength | mantissa;
8495  exponentLength += mantissaLength;
8496  while (exponentLength > 0) {
8497    buffer[index++] = exponent & 255;
8498    exponent /= 256;
8499    exponentLength -= 8;
8500  }
8501  buffer[--index] |= sign * 128;
8502  return buffer;
8503};
8504
8505var unpack = function (buffer, mantissaLength) {
8506  var bytes = buffer.length;
8507  var exponentLength = bytes * 8 - mantissaLength - 1;
8508  var eMax = (1 << exponentLength) - 1;
8509  var eBias = eMax >> 1;
vendor: 4,808 bytes, lines 8510-8675
8510  var nBits = exponentLength - 7;
8511  var index = bytes - 1;
8512  var sign = buffer[index--];
8513  var exponent = sign & 127;
8514  var mantissa;
8515  sign >>= 7;
8516  while (nBits > 0) {
8517    exponent = exponent * 256 + buffer[index--];
8518    nBits -= 8;
8519  }
8520  mantissa = exponent & (1 << -nBits) - 1;
8521  exponent >>= -nBits;
8522  nBits += mantissaLength;
8523  while (nBits > 0) {
8524    mantissa = mantissa * 256 + buffer[index--];
8525    nBits -= 8;
8526  }
8527  if (exponent === 0) {
8528    exponent = 1 - eBias;
8529  } else if (exponent === eMax) {
8530    return mantissa ? NaN : sign ? -Infinity : Infinity;
8531  } else {
8532    mantissa = mantissa + pow(2, mantissaLength);
8533    exponent = exponent - eBias;
8534  } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
8535};
8536
8537module.exports = {
8538  pack: pack,
8539  unpack: unpack
8540};
8541
8542
8543/***/ }),
8544
8545/***/ 68361:
8546/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8547
8548var uncurryThis = __webpack_require__(1702);
8549var fails = __webpack_require__(47293);
8550var classof = __webpack_require__(84326);
8551
8552var $Object = Object;
8553var split = uncurryThis(''.split);
8554
8555// fallback for non-array-like ES3 and non-enumerable old V8 strings
8556module.exports = fails(function () {
8557  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
8558  // eslint-disable-next-line no-prototype-builtins -- safe
8559  return !$Object('z').propertyIsEnumerable(0);
8560}) ? function (it) {
8561  return classof(it) == 'String' ? split(it, '') : $Object(it);
8562} : $Object;
8563
8564
8565/***/ }),
8566
8567/***/ 79587:
8568/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8569
8570var isCallable = __webpack_require__(60614);
8571var isObject = __webpack_require__(70111);
8572var setPrototypeOf = __webpack_require__(27674);
8573
8574// makes subclassing work correct for wrapped built-ins
8575module.exports = function ($this, dummy, Wrapper) {
8576  var NewTarget, NewTargetPrototype;
8577  if (
8578    // it can work only with native `setPrototypeOf`
8579    setPrototypeOf &&
8580    // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
8581    isCallable(NewTarget = dummy.constructor) &&
8582    NewTarget !== Wrapper &&
8583    isObject(NewTargetPrototype = NewTarget.prototype) &&
8584    NewTargetPrototype !== Wrapper.prototype
8585  ) setPrototypeOf($this, NewTargetPrototype);
8586  return $this;
8587};
8588
8589
8590/***/ }),
8591
8592/***/ 42788:
8593/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8594
8595var uncurryThis = __webpack_require__(1702);
8596var isCallable = __webpack_require__(60614);
8597var store = __webpack_require__(5465);
8598
8599var functionToString = uncurryThis(Function.toString);
8600
8601// this helper broken in `[email protected]`, so we can't use `shared` helper
8602if (!isCallable(store.inspectSource)) {
8603  store.inspectSource = function (it) {
8604    return functionToString(it);
8605  };
8606}
8607
8608module.exports = store.inspectSource;
8609
8610
8611/***/ }),
8612
8613/***/ 58340:
8614/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8615
8616var isObject = __webpack_require__(70111);
8617var createNonEnumerableProperty = __webpack_require__(68880);
8618
8619// `InstallErrorCause` abstract operation
8620// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause
8621module.exports = function (O, options) {
8622  if (isObject(options) && 'cause' in options) {
8623    createNonEnumerableProperty(O, 'cause', options.cause);
8624  }
8625};
8626
8627
8628/***/ }),
8629
8630/***/ 62423:
8631/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8632
8633var $ = __webpack_require__(82109);
8634var uncurryThis = __webpack_require__(1702);
8635var hiddenKeys = __webpack_require__(3501);
8636var isObject = __webpack_require__(70111);
8637var hasOwn = __webpack_require__(92597);
8638var defineProperty = (__webpack_require__(3070).f);
8639var getOwnPropertyNamesModule = __webpack_require__(8006);
8640var getOwnPropertyNamesExternalModule = __webpack_require__(1156);
8641var isExtensible = __webpack_require__(52050);
8642var uid = __webpack_require__(69711);
8643var FREEZING = __webpack_require__(76677);
8644
8645var REQUIRED = false;
8646var METADATA = uid('meta');
8647var id = 0;
8648
8649var setMetadata = function (it) {
8650  defineProperty(it, METADATA, { value: {
8651    objectID: 'O' + id++, // object ID
8652    weakData: {}          // weak collections IDs
8653  } });
8654};
8655
8656var fastKey = function (it, create) {
8657  // return a primitive with prefix
8658  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
8659  if (!hasOwn(it, METADATA)) {
8660    // can't set metadata to uncaught frozen object
8661    if (!isExtensible(it)) return 'F';
8662    // not necessary to add metadata
8663    if (!create) return 'E';
8664    // add missing metadata
8665    setMetadata(it);
8666  // return object ID
8667  } return it[METADATA].objectID;
8668};
8669
8670var getWeakData = function (it, create) {
8671  if (!hasOwn(it, METADATA)) {
8672    // can't set metadata to uncaught frozen object
8673    if (!isExtensible(it)) return true;
8674    // not necessary to add metadata
8675    if (!create) return false;
vendor: 4,953 bytes, lines 8676-8864
8676    // add missing metadata
8677    setMetadata(it);
8678  // return the store of weak collections IDs
8679  } return it[METADATA].weakData;
8680};
8681
8682// add metadata on freeze-family methods calling
8683var onFreeze = function (it) {
8684  if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
8685  return it;
8686};
8687
8688var enable = function () {
8689  meta.enable = function () { /* empty */ };
8690  REQUIRED = true;
8691  var getOwnPropertyNames = getOwnPropertyNamesModule.f;
8692  var splice = uncurryThis([].splice);
8693  var test = {};
8694  test[METADATA] = 1;
8695
8696  // prevent exposing of metadata key
8697  if (getOwnPropertyNames(test).length) {
8698    getOwnPropertyNamesModule.f = function (it) {
8699      var result = getOwnPropertyNames(it);
8700      for (var i = 0, length = result.length; i < length; i++) {
8701        if (result[i] === METADATA) {
8702          splice(result, i, 1);
8703          break;
8704        }
8705      } return result;
8706    };
8707
8708    $({ target: 'Object', stat: true, forced: true }, {
8709      getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
8710    });
8711  }
8712};
8713
8714var meta = module.exports = {
8715  enable: enable,
8716  fastKey: fastKey,
8717  getWeakData: getWeakData,
8718  onFreeze: onFreeze
8719};
8720
8721hiddenKeys[METADATA] = true;
8722
8723
8724/***/ }),
8725
8726/***/ 29909:
8727/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8728
8729var NATIVE_WEAK_MAP = __webpack_require__(94811);
8730var global = __webpack_require__(17854);
8731var uncurryThis = __webpack_require__(1702);
8732var isObject = __webpack_require__(70111);
8733var createNonEnumerableProperty = __webpack_require__(68880);
8734var hasOwn = __webpack_require__(92597);
8735var shared = __webpack_require__(5465);
8736var sharedKey = __webpack_require__(6200);
8737var hiddenKeys = __webpack_require__(3501);
8738
8739var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
8740var TypeError = global.TypeError;
8741var WeakMap = global.WeakMap;
8742var set, get, has;
8743
8744var enforce = function (it) {
8745  return has(it) ? get(it) : set(it, {});
8746};
8747
8748var getterFor = function (TYPE) {
8749  return function (it) {
8750    var state;
8751    if (!isObject(it) || (state = get(it)).type !== TYPE) {
8752      throw TypeError('Incompatible receiver, ' + TYPE + ' required');
8753    } return state;
8754  };
8755};
8756
8757if (NATIVE_WEAK_MAP || shared.state) {
8758  var store = shared.state || (shared.state = new WeakMap());
8759  var wmget = uncurryThis(store.get);
8760  var wmhas = uncurryThis(store.has);
8761  var wmset = uncurryThis(store.set);
8762  set = function (it, metadata) {
8763    if (wmhas(store, it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);
8764    metadata.facade = it;
8765    wmset(store, it, metadata);
8766    return metadata;
8767  };
8768  get = function (it) {
8769    return wmget(store, it) || {};
8770  };
8771  has = function (it) {
8772    return wmhas(store, it);
8773  };
8774} else {
8775  var STATE = sharedKey('state');
8776  hiddenKeys[STATE] = true;
8777  set = function (it, metadata) {
8778    if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);
8779    metadata.facade = it;
8780    createNonEnumerableProperty(it, STATE, metadata);
8781    return metadata;
8782  };
8783  get = function (it) {
8784    return hasOwn(it, STATE) ? it[STATE] : {};
8785  };
8786  has = function (it) {
8787    return hasOwn(it, STATE);
8788  };
8789}
8790
8791module.exports = {
8792  set: set,
8793  get: get,
8794  has: has,
8795  enforce: enforce,
8796  getterFor: getterFor
8797};
8798
8799
8800/***/ }),
8801
8802/***/ 97659:
8803/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8804
8805var wellKnownSymbol = __webpack_require__(5112);
8806var Iterators = __webpack_require__(97497);
8807
8808var ITERATOR = wellKnownSymbol('iterator');
8809var ArrayPrototype = Array.prototype;
8810
8811// check on default Array iterator
8812module.exports = function (it) {
8813  return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
8814};
8815
8816
8817/***/ }),
8818
8819/***/ 43157:
8820/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8821
8822var classof = __webpack_require__(84326);
8823
8824// `IsArray` abstract operation
8825// https://tc39.es/ecma262/#sec-isarray
8826// eslint-disable-next-line es-x/no-array-isarray -- safe
8827module.exports = Array.isArray || function isArray(argument) {
8828  return classof(argument) == 'Array';
8829};
8830
8831
8832/***/ }),
8833
8834/***/ 60614:
8835/***/ ((module) => {
8836
8837// `IsCallable` abstract operation
8838// https://tc39.es/ecma262/#sec-iscallable
8839module.exports = function (argument) {
8840  return typeof argument == 'function';
8841};
8842
8843
8844/***/ }),
8845
8846/***/ 4411:
8847/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8848
8849var uncurryThis = __webpack_require__(1702);
8850var fails = __webpack_require__(47293);
8851var isCallable = __webpack_require__(60614);
8852var classof = __webpack_require__(70648);
8853var getBuiltIn = __webpack_require__(35005);
8854var inspectSource = __webpack_require__(42788);
8855
8856var noop = function () { /* empty */ };
8857var empty = [];
8858var construct = getBuiltIn('Reflect', 'construct');
8859var constructorRegExp = /^\s*(?:class|function)\b/;
8860var exec = uncurryThis(constructorRegExp.exec);
8861var INCORRECT_TO_STRING = !constructorRegExp.exec(noop);
8862
8863var isConstructorModern = function isConstructor(argument) {
8864  if (!isCallable(argument)) return false;
vendor: 10,435 bytes, lines 8865-9214
8865  try {
8866    construct(noop, empty, argument);
8867    return true;
8868  } catch (error) {
8869    return false;
8870  }
8871};
8872
8873var isConstructorLegacy = function isConstructor(argument) {
8874  if (!isCallable(argument)) return false;
8875  switch (classof(argument)) {
8876    case 'AsyncFunction':
8877    case 'GeneratorFunction':
8878    case 'AsyncGeneratorFunction': return false;
8879  }
8880  try {
8881    // we can't check .prototype since constructors produced by .bind haven't it
8882    // `Function#toString` throws on some built-it function in some legacy engines
8883    // (for example, `DOMQuad` and similar in FF41-)
8884    return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
8885  } catch (error) {
8886    return true;
8887  }
8888};
8889
8890isConstructorLegacy.sham = true;
8891
8892// `IsConstructor` abstract operation
8893// https://tc39.es/ecma262/#sec-isconstructor
8894module.exports = !construct || fails(function () {
8895  var called;
8896  return isConstructorModern(isConstructorModern.call)
8897    || !isConstructorModern(Object)
8898    || !isConstructorModern(function () { called = true; })
8899    || called;
8900}) ? isConstructorLegacy : isConstructorModern;
8901
8902
8903/***/ }),
8904
8905/***/ 45032:
8906/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8907
8908var hasOwn = __webpack_require__(92597);
8909
8910module.exports = function (descriptor) {
8911  return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable'));
8912};
8913
8914
8915/***/ }),
8916
8917/***/ 54705:
8918/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8919
8920var fails = __webpack_require__(47293);
8921var isCallable = __webpack_require__(60614);
8922
8923var replacement = /#|\.prototype\./;
8924
8925var isForced = function (feature, detection) {
8926  var value = data[normalize(feature)];
8927  return value == POLYFILL ? true
8928    : value == NATIVE ? false
8929    : isCallable(detection) ? fails(detection)
8930    : !!detection;
8931};
8932
8933var normalize = isForced.normalize = function (string) {
8934  return String(string).replace(replacement, '.').toLowerCase();
8935};
8936
8937var data = isForced.data = {};
8938var NATIVE = isForced.NATIVE = 'N';
8939var POLYFILL = isForced.POLYFILL = 'P';
8940
8941module.exports = isForced;
8942
8943
8944/***/ }),
8945
8946/***/ 55988:
8947/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8948
8949var isObject = __webpack_require__(70111);
8950
8951var floor = Math.floor;
8952
8953// `IsIntegralNumber` abstract operation
8954// https://tc39.es/ecma262/#sec-isintegralnumber
8955// eslint-disable-next-line es-x/no-number-isinteger -- safe
8956module.exports = Number.isInteger || function isInteger(it) {
8957  return !isObject(it) && isFinite(it) && floor(it) === it;
8958};
8959
8960
8961/***/ }),
8962
8963/***/ 68554:
8964/***/ ((module) => {
8965
8966// we can't use just `it == null` since of `document.all` special case
8967// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec
8968module.exports = function (it) {
8969  return it === null || it === undefined;
8970};
8971
8972
8973/***/ }),
8974
8975/***/ 70111:
8976/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8977
8978var isCallable = __webpack_require__(60614);
8979
8980var documentAll = typeof document == 'object' && document.all;
8981
8982// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot
8983var SPECIAL_DOCUMENT_ALL = typeof documentAll == 'undefined' && documentAll !== undefined;
8984
8985module.exports = SPECIAL_DOCUMENT_ALL ? function (it) {
8986  return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;
8987} : function (it) {
8988  return typeof it == 'object' ? it !== null : isCallable(it);
8989};
8990
8991
8992/***/ }),
8993
8994/***/ 31913:
8995/***/ ((module) => {
8996
8997module.exports = false;
8998
8999
9000/***/ }),
9001
9002/***/ 47850:
9003/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9004
9005var isObject = __webpack_require__(70111);
9006var classof = __webpack_require__(84326);
9007var wellKnownSymbol = __webpack_require__(5112);
9008
9009var MATCH = wellKnownSymbol('match');
9010
9011// `IsRegExp` abstract operation
9012// https://tc39.es/ecma262/#sec-isregexp
9013module.exports = function (it) {
9014  var isRegExp;
9015  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');
9016};
9017
9018
9019/***/ }),
9020
9021/***/ 52190:
9022/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9023
9024var getBuiltIn = __webpack_require__(35005);
9025var isCallable = __webpack_require__(60614);
9026var isPrototypeOf = __webpack_require__(47976);
9027var USE_SYMBOL_AS_UID = __webpack_require__(43307);
9028
9029var $Object = Object;
9030
9031module.exports = USE_SYMBOL_AS_UID ? function (it) {
9032  return typeof it == 'symbol';
9033} : function (it) {
9034  var $Symbol = getBuiltIn('Symbol');
9035  return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
9036};
9037
9038
9039/***/ }),
9040
9041/***/ 20408:
9042/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9043
9044var bind = __webpack_require__(49974);
9045var call = __webpack_require__(46916);
9046var anObject = __webpack_require__(19670);
9047var tryToString = __webpack_require__(66330);
9048var isArrayIteratorMethod = __webpack_require__(97659);
9049var lengthOfArrayLike = __webpack_require__(26244);
9050var isPrototypeOf = __webpack_require__(47976);
9051var getIterator = __webpack_require__(18554);
9052var getIteratorMethod = __webpack_require__(71246);
9053var iteratorClose = __webpack_require__(99212);
9054
9055var $TypeError = TypeError;
9056
9057var Result = function (stopped, result) {
9058  this.stopped = stopped;
9059  this.result = result;
9060};
9061
9062var ResultPrototype = Result.prototype;
9063
9064module.exports = function (iterable, unboundFunction, options) {
9065  var that = options && options.that;
9066  var AS_ENTRIES = !!(options && options.AS_ENTRIES);
9067  var IS_RECORD = !!(options && options.IS_RECORD);
9068  var IS_ITERATOR = !!(options && options.IS_ITERATOR);
9069  var INTERRUPTED = !!(options && options.INTERRUPTED);
9070  var fn = bind(unboundFunction, that);
9071  var iterator, iterFn, index, length, result, next, step;
9072
9073  var stop = function (condition) {
9074    if (iterator) iteratorClose(iterator, 'normal', condition);
9075    return new Result(true, condition);
9076  };
9077
9078  var callFn = function (value) {
9079    if (AS_ENTRIES) {
9080      anObject(value);
9081      return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
9082    } return INTERRUPTED ? fn(value, stop) : fn(value);
9083  };
9084
9085  if (IS_RECORD) {
9086    iterator = iterable.iterator;
9087  } else if (IS_ITERATOR) {
9088    iterator = iterable;
9089  } else {
9090    iterFn = getIteratorMethod(iterable);
9091    if (!iterFn) throw $TypeError(tryToString(iterable) + ' is not iterable');
9092    // optimisation for array iterators
9093    if (isArrayIteratorMethod(iterFn)) {
9094      for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
9095        result = callFn(iterable[index]);
9096        if (result && isPrototypeOf(ResultPrototype, result)) return result;
9097      } return new Result(false);
9098    }
9099    iterator = getIterator(iterable, iterFn);
9100  }
9101
9102  next = IS_RECORD ? iterable.next : iterator.next;
9103  while (!(step = call(next, iterator)).done) {
9104    try {
9105      result = callFn(step.value);
9106    } catch (error) {
9107      iteratorClose(iterator, 'throw', error);
9108    }
9109    if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;
9110  } return new Result(false);
9111};
9112
9113
9114/***/ }),
9115
9116/***/ 99212:
9117/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9118
9119var call = __webpack_require__(46916);
9120var anObject = __webpack_require__(19670);
9121var getMethod = __webpack_require__(58173);
9122
9123module.exports = function (iterator, kind, value) {
9124  var innerResult, innerError;
9125  anObject(iterator);
9126  try {
9127    innerResult = getMethod(iterator, 'return');
9128    if (!innerResult) {
9129      if (kind === 'throw') throw value;
9130      return value;
9131    }
9132    innerResult = call(innerResult, iterator);
9133  } catch (error) {
9134    innerError = true;
9135    innerResult = error;
9136  }
9137  if (kind === 'throw') throw value;
9138  if (innerError) throw innerResult;
9139  anObject(innerResult);
9140  return value;
9141};
9142
9143
9144/***/ }),
9145
9146/***/ 63061:
9147/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9148
9149"use strict";
9150
9151var IteratorPrototype = (__webpack_require__(13383).IteratorPrototype);
9152var create = __webpack_require__(70030);
9153var createPropertyDescriptor = __webpack_require__(79114);
9154var setToStringTag = __webpack_require__(58003);
9155var Iterators = __webpack_require__(97497);
9156
9157var returnThis = function () { return this; };
9158
9159module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
9160  var TO_STRING_TAG = NAME + ' Iterator';
9161  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });
9162  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
9163  Iterators[TO_STRING_TAG] = returnThis;
9164  return IteratorConstructor;
9165};
9166
9167
9168/***/ }),
9169
9170/***/ 51656:
9171/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9172
9173"use strict";
9174
9175var $ = __webpack_require__(82109);
9176var call = __webpack_require__(46916);
9177var IS_PURE = __webpack_require__(31913);
9178var FunctionName = __webpack_require__(76530);
9179var isCallable = __webpack_require__(60614);
9180var createIteratorConstructor = __webpack_require__(63061);
9181var getPrototypeOf = __webpack_require__(79518);
9182var setPrototypeOf = __webpack_require__(27674);
9183var setToStringTag = __webpack_require__(58003);
9184var createNonEnumerableProperty = __webpack_require__(68880);
9185var defineBuiltIn = __webpack_require__(98052);
9186var wellKnownSymbol = __webpack_require__(5112);
9187var Iterators = __webpack_require__(97497);
9188var IteratorsCore = __webpack_require__(13383);
9189
9190var PROPER_FUNCTION_NAME = FunctionName.PROPER;
9191var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
9192var IteratorPrototype = IteratorsCore.IteratorPrototype;
9193var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
9194var ITERATOR = wellKnownSymbol('iterator');
9195var KEYS = 'keys';
9196var VALUES = 'values';
9197var ENTRIES = 'entries';
9198
9199var returnThis = function () { return this; };
9200
9201module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
9202  createIteratorConstructor(IteratorConstructor, NAME, next);
9203
9204  var getIterationMethod = function (KIND) {
9205    if (KIND === DEFAULT && defaultIterator) return defaultIterator;
9206    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];
9207    switch (KIND) {
9208      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
9209      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
9210      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
9211    } return function () { return new IteratorConstructor(this); };
9212  };
9213
9214  var TO_STRING_TAG = NAME + ' Iterator';
vendor: 4,423 bytes, lines 9215-9344
9215  var INCORRECT_VALUES_NAME = false;
9216  var IterablePrototype = Iterable.prototype;
9217  var nativeIterator = IterablePrototype[ITERATOR]
9218    || IterablePrototype['@@iterator']
9219    || DEFAULT && IterablePrototype[DEFAULT];
9220  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
9221  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
9222  var CurrentIteratorPrototype, methods, KEY;
9223
9224  // fix native
9225  if (anyNativeIterator) {
9226    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
9227    if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
9228      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
9229        if (setPrototypeOf) {
9230          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
9231        } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
9232          defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);
9233        }
9234      }
9235      // Set @@toStringTag to native iterators
9236      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
9237      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
9238    }
9239  }
9240
9241  // fix Array.prototype.{ values, @@iterator }.name in V8 / FF
9242  if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
9243    if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
9244      createNonEnumerableProperty(IterablePrototype, 'name', VALUES);
9245    } else {
9246      INCORRECT_VALUES_NAME = true;
9247      defaultIterator = function values() { return call(nativeIterator, this); };
9248    }
9249  }
9250
9251  // export additional methods
9252  if (DEFAULT) {
9253    methods = {
9254      values: getIterationMethod(VALUES),
9255      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
9256      entries: getIterationMethod(ENTRIES)
9257    };
9258    if (FORCED) for (KEY in methods) {
9259      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
9260        defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
9261      }
9262    } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
9263  }
9264
9265  // define iterator
9266  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
9267    defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
9268  }
9269  Iterators[NAME] = defaultIterator;
9270
9271  return methods;
9272};
9273
9274
9275/***/ }),
9276
9277/***/ 13383:
9278/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9279
9280"use strict";
9281
9282var fails = __webpack_require__(47293);
9283var isCallable = __webpack_require__(60614);
9284var isObject = __webpack_require__(70111);
9285var create = __webpack_require__(70030);
9286var getPrototypeOf = __webpack_require__(79518);
9287var defineBuiltIn = __webpack_require__(98052);
9288var wellKnownSymbol = __webpack_require__(5112);
9289var IS_PURE = __webpack_require__(31913);
9290
9291var ITERATOR = wellKnownSymbol('iterator');
9292var BUGGY_SAFARI_ITERATORS = false;
9293
9294// `%IteratorPrototype%` object
9295// https://tc39.es/ecma262/#sec-%iteratorprototype%-object
9296var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
9297
9298/* eslint-disable es-x/no-array-prototype-keys -- safe */
9299if ([].keys) {
9300  arrayIterator = [].keys();
9301  // Safari 8 has buggy iterators w/o `next`
9302  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
9303  else {
9304    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
9305    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
9306  }
9307}
9308
9309var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {
9310  var test = {};
9311  // FF44- legacy iterators case
9312  return IteratorPrototype[ITERATOR].call(test) !== test;
9313});
9314
9315if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
9316else if (IS_PURE) IteratorPrototype = create(IteratorPrototype);
9317
9318// `%IteratorPrototype%[@@iterator]()` method
9319// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator
9320if (!isCallable(IteratorPrototype[ITERATOR])) {
9321  defineBuiltIn(IteratorPrototype, ITERATOR, function () {
9322    return this;
9323  });
9324}
9325
9326module.exports = {
9327  IteratorPrototype: IteratorPrototype,
9328  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
9329};
9330
9331
9332/***/ }),
9333
9334/***/ 97497:
9335/***/ ((module) => {
9336
9337module.exports = {};
9338
9339
9340/***/ }),
9341
9342/***/ 26244:
9343/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9344
vendor: 5,072 bytes, lines 9345-9516
9345var toLength = __webpack_require__(17466);
9346
9347// `LengthOfArrayLike` abstract operation
9348// https://tc39.es/ecma262/#sec-lengthofarraylike
9349module.exports = function (obj) {
9350  return toLength(obj.length);
9351};
9352
9353
9354/***/ }),
9355
9356/***/ 56339:
9357/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9358
9359var fails = __webpack_require__(47293);
9360var isCallable = __webpack_require__(60614);
9361var hasOwn = __webpack_require__(92597);
9362var DESCRIPTORS = __webpack_require__(19781);
9363var CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(76530).CONFIGURABLE);
9364var inspectSource = __webpack_require__(42788);
9365var InternalStateModule = __webpack_require__(29909);
9366
9367var enforceInternalState = InternalStateModule.enforce;
9368var getInternalState = InternalStateModule.get;
9369// eslint-disable-next-line es-x/no-object-defineproperty -- safe
9370var defineProperty = Object.defineProperty;
9371
9372var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {
9373  return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;
9374});
9375
9376var TEMPLATE = String(String).split('String');
9377
9378var makeBuiltIn = module.exports = function (value, name, options) {
9379  if (String(name).slice(0, 7) === 'Symbol(') {
9380    name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']';
9381  }
9382  if (options && options.getter) name = 'get ' + name;
9383  if (options && options.setter) name = 'set ' + name;
9384  if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {
9385    if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });
9386    else value.name = name;
9387  }
9388  if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {
9389    defineProperty(value, 'length', { value: options.arity });
9390  }
9391  try {
9392    if (options && hasOwn(options, 'constructor') && options.constructor) {
9393      if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });
9394    // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable
9395    } else if (value.prototype) value.prototype = undefined;
9396  } catch (error) { /* empty */ }
9397  var state = enforceInternalState(value);
9398  if (!hasOwn(state, 'source')) {
9399    state.source = TEMPLATE.join(typeof name == 'string' ? name : '');
9400  } return value;
9401};
9402
9403// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
9404// eslint-disable-next-line no-extend-native -- required
9405Function.prototype.toString = makeBuiltIn(function toString() {
9406  return isCallable(this) && getInternalState(this).source || inspectSource(this);
9407}, 'toString');
9408
9409
9410/***/ }),
9411
9412/***/ 66736:
9413/***/ ((module) => {
9414
9415// eslint-disable-next-line es-x/no-math-expm1 -- safe
9416var $expm1 = Math.expm1;
9417var exp = Math.exp;
9418
9419// `Math.expm1` method implementation
9420// https://tc39.es/ecma262/#sec-math.expm1
9421module.exports = (!$expm1
9422  // Old FF bug
9423  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
9424  // Tor Browser bug
9425  || $expm1(-2e-17) != -2e-17
9426) ? function expm1(x) {
9427  var n = +x;
9428  return n == 0 ? n : n > -1e-6 && n < 1e-6 ? n + n * n / 2 : exp(n) - 1;
9429} : $expm1;
9430
9431
9432/***/ }),
9433
9434/***/ 26130:
9435/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9436
9437var sign = __webpack_require__(64310);
9438
9439var abs = Math.abs;
9440var pow = Math.pow;
9441var EPSILON = pow(2, -52);
9442var EPSILON32 = pow(2, -23);
9443var MAX32 = pow(2, 127) * (2 - EPSILON32);
9444var MIN32 = pow(2, -126);
9445
9446var roundTiesToEven = function (n) {
9447  return n + 1 / EPSILON - 1 / EPSILON;
9448};
9449
9450// `Math.fround` method implementation
9451// https://tc39.es/ecma262/#sec-math.fround
9452// eslint-disable-next-line es-x/no-math-fround -- safe
9453module.exports = Math.fround || function fround(x) {
9454  var n = +x;
9455  var $abs = abs(n);
9456  var $sign = sign(n);
9457  var a, result;
9458  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
9459  a = (1 + EPSILON32 / EPSILON) * $abs;
9460  result = a - (a - $abs);
9461  // eslint-disable-next-line no-self-compare -- NaN check
9462  if (result > MAX32 || result != result) return $sign * Infinity;
9463  return $sign * result;
9464};
9465
9466
9467/***/ }),
9468
9469/***/ 20403:
9470/***/ ((module) => {
9471
9472var log = Math.log;
9473var LOG10E = Math.LOG10E;
9474
9475// eslint-disable-next-line es-x/no-math-log10 -- safe
9476module.exports = Math.log10 || function log10(x) {
9477  return log(x) * LOG10E;
9478};
9479
9480
9481/***/ }),
9482
9483/***/ 26513:
9484/***/ ((module) => {
9485
9486var log = Math.log;
9487
9488// `Math.log1p` method implementation
9489// https://tc39.es/ecma262/#sec-math.log1p
9490// eslint-disable-next-line es-x/no-math-log1p -- safe
9491module.exports = Math.log1p || function log1p(x) {
9492  var n = +x;
9493  return n > -1e-8 && n < 1e-8 ? n - n * n / 2 : log(1 + n);
9494};
9495
9496
9497/***/ }),
9498
9499/***/ 64310:
9500/***/ ((module) => {
9501
9502// `Math.sign` method implementation
9503// https://tc39.es/ecma262/#sec-math.sign
9504// eslint-disable-next-line es-x/no-math-sign -- safe
9505module.exports = Math.sign || function sign(x) {
9506  var n = +x;
9507  // eslint-disable-next-line no-self-compare -- NaN check
9508  return n == 0 || n != n ? n : n < 0 ? -1 : 1;
9509};
9510
9511
9512/***/ }),
9513
9514/***/ 74758:
9515/***/ ((module) => {
9516
vendor: 5,213 bytes, lines 9517-9704
9517var ceil = Math.ceil;
9518var floor = Math.floor;
9519
9520// `Math.trunc` method
9521// https://tc39.es/ecma262/#sec-math.trunc
9522// eslint-disable-next-line es-x/no-math-trunc -- safe
9523module.exports = Math.trunc || function trunc(x) {
9524  var n = +x;
9525  return (n > 0 ? floor : ceil)(n);
9526};
9527
9528
9529/***/ }),
9530
9531/***/ 95948:
9532/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9533
9534var global = __webpack_require__(17854);
9535var bind = __webpack_require__(49974);
9536var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
9537var macrotask = (__webpack_require__(20261).set);
9538var IS_IOS = __webpack_require__(6833);
9539var IS_IOS_PEBBLE = __webpack_require__(71528);
9540var IS_WEBOS_WEBKIT = __webpack_require__(71036);
9541var IS_NODE = __webpack_require__(35268);
9542
9543var MutationObserver = global.MutationObserver || global.WebKitMutationObserver;
9544var document = global.document;
9545var process = global.process;
9546var Promise = global.Promise;
9547// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`
9548var queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');
9549var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;
9550
9551var flush, head, last, notify, toggle, node, promise, then;
9552
9553// modern engines have queueMicrotask method
9554if (!queueMicrotask) {
9555  flush = function () {
9556    var parent, fn;
9557    if (IS_NODE && (parent = process.domain)) parent.exit();
9558    while (head) {
9559      fn = head.fn;
9560      head = head.next;
9561      try {
9562        fn();
9563      } catch (error) {
9564        if (head) notify();
9565        else last = undefined;
9566        throw error;
9567      }
9568    } last = undefined;
9569    if (parent) parent.enter();
9570  };
9571
9572  // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
9573  // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
9574  if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {
9575    toggle = true;
9576    node = document.createTextNode('');
9577    new MutationObserver(flush).observe(node, { characterData: true });
9578    notify = function () {
9579      node.data = toggle = !toggle;
9580    };
9581  // environments with maybe non-completely correct, but existent Promise
9582  } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {
9583    // Promise.resolve without an argument throws an error in LG WebOS 2
9584    promise = Promise.resolve(undefined);
9585    // workaround of WebKit ~ iOS Safari 10.1 bug
9586    promise.constructor = Promise;
9587    then = bind(promise.then, promise);
9588    notify = function () {
9589      then(flush);
9590    };
9591  // Node.js without promises
9592  } else if (IS_NODE) {
9593    notify = function () {
9594      process.nextTick(flush);
9595    };
9596  // for other environments - macrotask based on:
9597  // - setImmediate
9598  // - MessageChannel
9599  // - window.postMessage
9600  // - onreadystatechange
9601  // - setTimeout
9602  } else {
9603    // strange IE + webpack dev server bug - use .bind(global)
9604    macrotask = bind(macrotask, global);
9605    notify = function () {
9606      macrotask(flush);
9607    };
9608  }
9609}
9610
9611module.exports = queueMicrotask || function (fn) {
9612  var task = { fn: fn, next: undefined };
9613  if (last) last.next = task;
9614  if (!head) {
9615    head = task;
9616    notify();
9617  } last = task;
9618};
9619
9620
9621/***/ }),
9622
9623/***/ 78523:
9624/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9625
9626"use strict";
9627
9628var aCallable = __webpack_require__(19662);
9629
9630var $TypeError = TypeError;
9631
9632var PromiseCapability = function (C) {
9633  var resolve, reject;
9634  this.promise = new C(function ($$resolve, $$reject) {
9635    if (resolve !== undefined || reject !== undefined) throw $TypeError('Bad Promise constructor');
9636    resolve = $$resolve;
9637    reject = $$reject;
9638  });
9639  this.resolve = aCallable(resolve);
9640  this.reject = aCallable(reject);
9641};
9642
9643// `NewPromiseCapability` abstract operation
9644// https://tc39.es/ecma262/#sec-newpromisecapability
9645module.exports.f = function (C) {
9646  return new PromiseCapability(C);
9647};
9648
9649
9650/***/ }),
9651
9652/***/ 56277:
9653/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9654
9655var toString = __webpack_require__(41340);
9656
9657module.exports = function (argument, $default) {
9658  return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);
9659};
9660
9661
9662/***/ }),
9663
9664/***/ 3929:
9665/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9666
9667var isRegExp = __webpack_require__(47850);
9668
9669var $TypeError = TypeError;
9670
9671module.exports = function (it) {
9672  if (isRegExp(it)) {
9673    throw $TypeError("The method doesn't accept regular expressions");
9674  } return it;
9675};
9676
9677
9678/***/ }),
9679
9680/***/ 77023:
9681/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9682
9683var global = __webpack_require__(17854);
9684
9685var globalIsFinite = global.isFinite;
9686
9687// `Number.isFinite` method
9688// https://tc39.es/ecma262/#sec-number.isfinite
9689// eslint-disable-next-line es-x/no-number-isfinite -- safe
9690module.exports = Number.isFinite || function isFinite(it) {
9691  return typeof it == 'number' && globalIsFinite(it);
9692};
9693
9694
9695/***/ }),
9696
9697/***/ 2814:
9698/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9699
9700var global = __webpack_require__(17854);
9701var fails = __webpack_require__(47293);
9702var uncurryThis = __webpack_require__(1702);
9703var toString = __webpack_require__(41340);
9704var trim = (__webpack_require__(53111).trim);
vendor: 1,197 bytes, lines 9705-9740
9705var whitespaces = __webpack_require__(81361);
9706
9707var charAt = uncurryThis(''.charAt);
9708var $parseFloat = global.parseFloat;
9709var Symbol = global.Symbol;
9710var ITERATOR = Symbol && Symbol.iterator;
9711var FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity
9712  // MS Edge 18- broken with boxed symbols
9713  || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));
9714
9715// `parseFloat` method
9716// https://tc39.es/ecma262/#sec-parsefloat-string
9717module.exports = FORCED ? function parseFloat(string) {
9718  var trimmedString = trim(toString(string));
9719  var result = $parseFloat(trimmedString);
9720  return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;
9721} : $parseFloat;
9722
9723
9724/***/ }),
9725
9726/***/ 83009:
9727/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9728
9729var global = __webpack_require__(17854);
9730var fails = __webpack_require__(47293);
9731var uncurryThis = __webpack_require__(1702);
9732var toString = __webpack_require__(41340);
9733var trim = (__webpack_require__(53111).trim);
9734var whitespaces = __webpack_require__(81361);
9735
9736var $parseInt = global.parseInt;
9737var Symbol = global.Symbol;
9738var ITERATOR = Symbol && Symbol.iterator;
9739var hex = /^[+-]?0x/i;
9740var exec = uncurryThis(hex.exec);
vendor: 7,423 bytes, lines 9741-9950
9741var FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22
9742  // MS Edge 18- broken with boxed symbols
9743  || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));
9744
9745// `parseInt` method
9746// https://tc39.es/ecma262/#sec-parseint-string-radix
9747module.exports = FORCED ? function parseInt(string, radix) {
9748  var S = trim(toString(string));
9749  return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));
9750} : $parseInt;
9751
9752
9753/***/ }),
9754
9755/***/ 21574:
9756/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9757
9758"use strict";
9759
9760var DESCRIPTORS = __webpack_require__(19781);
9761var uncurryThis = __webpack_require__(1702);
9762var call = __webpack_require__(46916);
9763var fails = __webpack_require__(47293);
9764var objectKeys = __webpack_require__(81956);
9765var getOwnPropertySymbolsModule = __webpack_require__(25181);
9766var propertyIsEnumerableModule = __webpack_require__(55296);
9767var toObject = __webpack_require__(47908);
9768var IndexedObject = __webpack_require__(68361);
9769
9770// eslint-disable-next-line es-x/no-object-assign -- safe
9771var $assign = Object.assign;
9772// eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
9773var defineProperty = Object.defineProperty;
9774var concat = uncurryThis([].concat);
9775
9776// `Object.assign` method
9777// https://tc39.es/ecma262/#sec-object.assign
9778module.exports = !$assign || fails(function () {
9779  // should have correct order of operations (Edge bug)
9780  if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {
9781    enumerable: true,
9782    get: function () {
9783      defineProperty(this, 'b', {
9784        value: 3,
9785        enumerable: false
9786      });
9787    }
9788  }), { b: 2 })).b !== 1) return true;
9789  // should work with symbols and should have deterministic property order (V8 bug)
9790  var A = {};
9791  var B = {};
9792  // eslint-disable-next-line es-x/no-symbol -- safe
9793  var symbol = Symbol();
9794  var alphabet = 'abcdefghijklmnopqrst';
9795  A[symbol] = 7;
9796  alphabet.split('').forEach(function (chr) { B[chr] = chr; });
9797  return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;
9798}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
9799  var T = toObject(target);
9800  var argumentsLength = arguments.length;
9801  var index = 1;
9802  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
9803  var propertyIsEnumerable = propertyIsEnumerableModule.f;
9804  while (argumentsLength > index) {
9805    var S = IndexedObject(arguments[index++]);
9806    var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);
9807    var length = keys.length;
9808    var j = 0;
9809    var key;
9810    while (length > j) {
9811      key = keys[j++];
9812      if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];
9813    }
9814  } return T;
9815} : $assign;
9816
9817
9818/***/ }),
9819
9820/***/ 70030:
9821/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9822
9823/* global ActiveXObject -- old IE, WSH */
9824var anObject = __webpack_require__(19670);
9825var definePropertiesModule = __webpack_require__(36048);
9826var enumBugKeys = __webpack_require__(80748);
9827var hiddenKeys = __webpack_require__(3501);
9828var html = __webpack_require__(60490);
9829var documentCreateElement = __webpack_require__(80317);
9830var sharedKey = __webpack_require__(6200);
9831
9832var GT = '>';
9833var LT = '<';
9834var PROTOTYPE = 'prototype';
9835var SCRIPT = 'script';
9836var IE_PROTO = sharedKey('IE_PROTO');
9837
9838var EmptyConstructor = function () { /* empty */ };
9839
9840var scriptTag = function (content) {
9841  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
9842};
9843
9844// Create object with fake `null` prototype: use ActiveX Object with cleared prototype
9845var NullProtoObjectViaActiveX = function (activeXDocument) {
9846  activeXDocument.write(scriptTag(''));
9847  activeXDocument.close();
9848  var temp = activeXDocument.parentWindow.Object;
9849  activeXDocument = null; // avoid memory leak
9850  return temp;
9851};
9852
9853// Create object with fake `null` prototype: use iframe Object with cleared prototype
9854var NullProtoObjectViaIFrame = function () {
9855  // Thrash, waste and sodomy: IE GC bug
9856  var iframe = documentCreateElement('iframe');
9857  var JS = 'java' + SCRIPT + ':';
9858  var iframeDocument;
9859  iframe.style.display = 'none';
9860  html.appendChild(iframe);
9861  // https://github.com/zloirock/core-js/issues/475
9862  iframe.src = String(JS);
9863  iframeDocument = iframe.contentWindow.document;
9864  iframeDocument.open();
9865  iframeDocument.write(scriptTag('document.F=Object'));
9866  iframeDocument.close();
9867  return iframeDocument.F;
9868};
9869
9870// Check for document.domain and active x support
9871// No need to use active x approach when document.domain is not set
9872// see https://github.com/es-shims/es5-shim/issues/150
9873// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346
9874// avoid IE GC bug
9875var activeXDocument;
9876var NullProtoObject = function () {
9877  try {
9878    activeXDocument = new ActiveXObject('htmlfile');
9879  } catch (error) { /* ignore */ }
9880  NullProtoObject = typeof document != 'undefined'
9881    ? document.domain && activeXDocument
9882      ? NullProtoObjectViaActiveX(activeXDocument) // old IE
9883      : NullProtoObjectViaIFrame()
9884    : NullProtoObjectViaActiveX(activeXDocument); // WSH
9885  var length = enumBugKeys.length;
9886  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
9887  return NullProtoObject();
9888};
9889
9890hiddenKeys[IE_PROTO] = true;
9891
9892// `Object.create` method
9893// https://tc39.es/ecma262/#sec-object.create
9894// eslint-disable-next-line es-x/no-object-create -- safe
9895module.exports = Object.create || function create(O, Properties) {
9896  var result;
9897  if (O !== null) {
9898    EmptyConstructor[PROTOTYPE] = anObject(O);
9899    result = new EmptyConstructor();
9900    EmptyConstructor[PROTOTYPE] = null;
9901    // add "__proto__" for Object.getPrototypeOf polyfill
9902    result[IE_PROTO] = O;
9903  } else result = NullProtoObject();
9904  return Properties === undefined ? result : definePropertiesModule.f(result, Properties);
9905};
9906
9907
9908/***/ }),
9909
9910/***/ 36048:
9911/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9912
9913var DESCRIPTORS = __webpack_require__(19781);
9914var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(3353);
9915var definePropertyModule = __webpack_require__(3070);
9916var anObject = __webpack_require__(19670);
9917var toIndexedObject = __webpack_require__(45656);
9918var objectKeys = __webpack_require__(81956);
9919
9920// `Object.defineProperties` method
9921// https://tc39.es/ecma262/#sec-object.defineproperties
9922// eslint-disable-next-line es-x/no-object-defineproperties -- safe
9923exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
9924  anObject(O);
9925  var props = toIndexedObject(Properties);
9926  var keys = objectKeys(Properties);
9927  var length = keys.length;
9928  var index = 0;
9929  var key;
9930  while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);
9931  return O;
9932};
9933
9934
9935/***/ }),
9936
9937/***/ 3070:
9938/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9939
9940var DESCRIPTORS = __webpack_require__(19781);
9941var IE8_DOM_DEFINE = __webpack_require__(64664);
9942var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(3353);
9943var anObject = __webpack_require__(19670);
9944var toPropertyKey = __webpack_require__(34948);
9945
9946var $TypeError = TypeError;
9947// eslint-disable-next-line es-x/no-object-defineproperty -- safe
9948var $defineProperty = Object.defineProperty;
9949// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
9950var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
vendor: 5,645 bytes, lines 9951-10116
9951var ENUMERABLE = 'enumerable';
9952var CONFIGURABLE = 'configurable';
9953var WRITABLE = 'writable';
9954
9955// `Object.defineProperty` method
9956// https://tc39.es/ecma262/#sec-object.defineproperty
9957exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
9958  anObject(O);
9959  P = toPropertyKey(P);
9960  anObject(Attributes);
9961  if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
9962    var current = $getOwnPropertyDescriptor(O, P);
9963    if (current && current[WRITABLE]) {
9964      O[P] = Attributes.value;
9965      Attributes = {
9966        configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
9967        enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
9968        writable: false
9969      };
9970    }
9971  } return $defineProperty(O, P, Attributes);
9972} : $defineProperty : function defineProperty(O, P, Attributes) {
9973  anObject(O);
9974  P = toPropertyKey(P);
9975  anObject(Attributes);
9976  if (IE8_DOM_DEFINE) try {
9977    return $defineProperty(O, P, Attributes);
9978  } catch (error) { /* empty */ }
9979  if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');
9980  if ('value' in Attributes) O[P] = Attributes.value;
9981  return O;
9982};
9983
9984
9985/***/ }),
9986
9987/***/ 31236:
9988/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9989
9990var DESCRIPTORS = __webpack_require__(19781);
9991var call = __webpack_require__(46916);
9992var propertyIsEnumerableModule = __webpack_require__(55296);
9993var createPropertyDescriptor = __webpack_require__(79114);
9994var toIndexedObject = __webpack_require__(45656);
9995var toPropertyKey = __webpack_require__(34948);
9996var hasOwn = __webpack_require__(92597);
9997var IE8_DOM_DEFINE = __webpack_require__(64664);
9998
9999// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
10000var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
10001
10002// `Object.getOwnPropertyDescriptor` method
10003// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
10004exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
10005  O = toIndexedObject(O);
10006  P = toPropertyKey(P);
10007  if (IE8_DOM_DEFINE) try {
10008    return $getOwnPropertyDescriptor(O, P);
10009  } catch (error) { /* empty */ }
10010  if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
10011};
10012
10013
10014/***/ }),
10015
10016/***/ 1156:
10017/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10018
10019/* eslint-disable es-x/no-object-getownpropertynames -- safe */
10020var classof = __webpack_require__(84326);
10021var toIndexedObject = __webpack_require__(45656);
10022var $getOwnPropertyNames = (__webpack_require__(8006).f);
10023var arraySlice = __webpack_require__(41589);
10024
10025var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
10026  ? Object.getOwnPropertyNames(window) : [];
10027
10028var getWindowNames = function (it) {
10029  try {
10030    return $getOwnPropertyNames(it);
10031  } catch (error) {
10032    return arraySlice(windowNames);
10033  }
10034};
10035
10036// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
10037module.exports.f = function getOwnPropertyNames(it) {
10038  return windowNames && classof(it) == 'Window'
10039    ? getWindowNames(it)
10040    : $getOwnPropertyNames(toIndexedObject(it));
10041};
10042
10043
10044/***/ }),
10045
10046/***/ 8006:
10047/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
10048
10049var internalObjectKeys = __webpack_require__(16324);
10050var enumBugKeys = __webpack_require__(80748);
10051
10052var hiddenKeys = enumBugKeys.concat('length', 'prototype');
10053
10054// `Object.getOwnPropertyNames` method
10055// https://tc39.es/ecma262/#sec-object.getownpropertynames
10056// eslint-disable-next-line es-x/no-object-getownpropertynames -- safe
10057exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
10058  return internalObjectKeys(O, hiddenKeys);
10059};
10060
10061
10062/***/ }),
10063
10064/***/ 25181:
10065/***/ ((__unused_webpack_module, exports) => {
10066
10067// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe
10068exports.f = Object.getOwnPropertySymbols;
10069
10070
10071/***/ }),
10072
10073/***/ 79518:
10074/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10075
10076var hasOwn = __webpack_require__(92597);
10077var isCallable = __webpack_require__(60614);
10078var toObject = __webpack_require__(47908);
10079var sharedKey = __webpack_require__(6200);
10080var CORRECT_PROTOTYPE_GETTER = __webpack_require__(49920);
10081
10082var IE_PROTO = sharedKey('IE_PROTO');
10083var $Object = Object;
10084var ObjectPrototype = $Object.prototype;
10085
10086// `Object.getPrototypeOf` method
10087// https://tc39.es/ecma262/#sec-object.getprototypeof
10088// eslint-disable-next-line es-x/no-object-getprototypeof -- safe
10089module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {
10090  var object = toObject(O);
10091  if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
10092  var constructor = object.constructor;
10093  if (isCallable(constructor) && object instanceof constructor) {
10094    return constructor.prototype;
10095  } return object instanceof $Object ? ObjectPrototype : null;
10096};
10097
10098
10099/***/ }),
10100
10101/***/ 52050:
10102/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10103
10104var fails = __webpack_require__(47293);
10105var isObject = __webpack_require__(70111);
10106var classof = __webpack_require__(84326);
10107var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(7556);
10108
10109// eslint-disable-next-line es-x/no-object-isextensible -- safe
10110var $isExtensible = Object.isExtensible;
10111var FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });
10112
10113// `Object.isExtensible` method
10114// https://tc39.es/ecma262/#sec-object.isextensible
10115module.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {
10116  if (!isObject(it)) return false;
vendor: 4,578 bytes, lines 10117-10269
10117  if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;
10118  return $isExtensible ? $isExtensible(it) : true;
10119} : $isExtensible;
10120
10121
10122/***/ }),
10123
10124/***/ 47976:
10125/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10126
10127var uncurryThis = __webpack_require__(1702);
10128
10129module.exports = uncurryThis({}.isPrototypeOf);
10130
10131
10132/***/ }),
10133
10134/***/ 16324:
10135/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10136
10137var uncurryThis = __webpack_require__(1702);
10138var hasOwn = __webpack_require__(92597);
10139var toIndexedObject = __webpack_require__(45656);
10140var indexOf = (__webpack_require__(41318).indexOf);
10141var hiddenKeys = __webpack_require__(3501);
10142
10143var push = uncurryThis([].push);
10144
10145module.exports = function (object, names) {
10146  var O = toIndexedObject(object);
10147  var i = 0;
10148  var result = [];
10149  var key;
10150  for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
10151  // Don't enum bug & hidden keys
10152  while (names.length > i) if (hasOwn(O, key = names[i++])) {
10153    ~indexOf(result, key) || push(result, key);
10154  }
10155  return result;
10156};
10157
10158
10159/***/ }),
10160
10161/***/ 81956:
10162/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10163
10164var internalObjectKeys = __webpack_require__(16324);
10165var enumBugKeys = __webpack_require__(80748);
10166
10167// `Object.keys` method
10168// https://tc39.es/ecma262/#sec-object.keys
10169// eslint-disable-next-line es-x/no-object-keys -- safe
10170module.exports = Object.keys || function keys(O) {
10171  return internalObjectKeys(O, enumBugKeys);
10172};
10173
10174
10175/***/ }),
10176
10177/***/ 55296:
10178/***/ ((__unused_webpack_module, exports) => {
10179
10180"use strict";
10181
10182var $propertyIsEnumerable = {}.propertyIsEnumerable;
10183// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
10184var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
10185
10186// Nashorn ~ JDK8 bug
10187var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
10188
10189// `Object.prototype.propertyIsEnumerable` method implementation
10190// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
10191exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
10192  var descriptor = getOwnPropertyDescriptor(this, V);
10193  return !!descriptor && descriptor.enumerable;
10194} : $propertyIsEnumerable;
10195
10196
10197/***/ }),
10198
10199/***/ 69026:
10200/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10201
10202"use strict";
10203
10204var IS_PURE = __webpack_require__(31913);
10205var global = __webpack_require__(17854);
10206var fails = __webpack_require__(47293);
10207var WEBKIT = __webpack_require__(98008);
10208
10209// Forced replacement object prototype accessors methods
10210module.exports = IS_PURE || !fails(function () {
10211  // This feature detection crashes old WebKit
10212  // https://github.com/zloirock/core-js/issues/232
10213  if (WEBKIT && WEBKIT < 535) return;
10214  var key = Math.random();
10215  // In FF throws only define methods
10216  // eslint-disable-next-line no-undef, no-useless-call, es-x/no-legacy-object-prototype-accessor-methods -- required for testing
10217  __defineSetter__.call(null, key, function () { /* empty */ });
10218  delete global[key];
10219});
10220
10221
10222/***/ }),
10223
10224/***/ 27674:
10225/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10226
10227/* eslint-disable no-proto -- safe */
10228var uncurryThis = __webpack_require__(1702);
10229var anObject = __webpack_require__(19670);
10230var aPossiblePrototype = __webpack_require__(96077);
10231
10232// `Object.setPrototypeOf` method
10233// https://tc39.es/ecma262/#sec-object.setprototypeof
10234// Works with __proto__ only. Old v8 can't work with null proto objects.
10235// eslint-disable-next-line es-x/no-object-setprototypeof -- safe
10236module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
10237  var CORRECT_SETTER = false;
10238  var test = {};
10239  var setter;
10240  try {
10241    // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
10242    setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
10243    setter(test, []);
10244    CORRECT_SETTER = test instanceof Array;
10245  } catch (error) { /* empty */ }
10246  return function setPrototypeOf(O, proto) {
10247    anObject(O);
10248    aPossiblePrototype(proto);
10249    if (CORRECT_SETTER) setter(O, proto);
10250    else O.__proto__ = proto;
10251    return O;
10252  };
10253}() : undefined);
10254
10255
10256/***/ }),
10257
10258/***/ 44699:
10259/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10260
10261var DESCRIPTORS = __webpack_require__(19781);
10262var uncurryThis = __webpack_require__(1702);
10263var objectKeys = __webpack_require__(81956);
10264var toIndexedObject = __webpack_require__(45656);
10265var $propertyIsEnumerable = (__webpack_require__(55296).f);
10266
10267var propertyIsEnumerable = uncurryThis($propertyIsEnumerable);
10268var push = uncurryThis([].push);
10269
vendor: 19,130 bytes, lines 10270-10932
10270// `Object.{ entries, values }` methods implementation
10271var createMethod = function (TO_ENTRIES) {
10272  return function (it) {
10273    var O = toIndexedObject(it);
10274    var keys = objectKeys(O);
10275    var length = keys.length;
10276    var i = 0;
10277    var result = [];
10278    var key;
10279    while (length > i) {
10280      key = keys[i++];
10281      if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {
10282        push(result, TO_ENTRIES ? [key, O[key]] : O[key]);
10283      }
10284    }
10285    return result;
10286  };
10287};
10288
10289module.exports = {
10290  // `Object.entries` method
10291  // https://tc39.es/ecma262/#sec-object.entries
10292  entries: createMethod(true),
10293  // `Object.values` method
10294  // https://tc39.es/ecma262/#sec-object.values
10295  values: createMethod(false)
10296};
10297
10298
10299/***/ }),
10300
10301/***/ 90288:
10302/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10303
10304"use strict";
10305
10306var TO_STRING_TAG_SUPPORT = __webpack_require__(51694);
10307var classof = __webpack_require__(70648);
10308
10309// `Object.prototype.toString` method implementation
10310// https://tc39.es/ecma262/#sec-object.prototype.tostring
10311module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
10312  return '[object ' + classof(this) + ']';
10313};
10314
10315
10316/***/ }),
10317
10318/***/ 92140:
10319/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10320
10321var call = __webpack_require__(46916);
10322var isCallable = __webpack_require__(60614);
10323var isObject = __webpack_require__(70111);
10324
10325var $TypeError = TypeError;
10326
10327// `OrdinaryToPrimitive` abstract operation
10328// https://tc39.es/ecma262/#sec-ordinarytoprimitive
10329module.exports = function (input, pref) {
10330  var fn, val;
10331  if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
10332  if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;
10333  if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;
10334  throw $TypeError("Can't convert object to primitive value");
10335};
10336
10337
10338/***/ }),
10339
10340/***/ 53887:
10341/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10342
10343var getBuiltIn = __webpack_require__(35005);
10344var uncurryThis = __webpack_require__(1702);
10345var getOwnPropertyNamesModule = __webpack_require__(8006);
10346var getOwnPropertySymbolsModule = __webpack_require__(25181);
10347var anObject = __webpack_require__(19670);
10348
10349var concat = uncurryThis([].concat);
10350
10351// all object keys, includes non-enumerable and symbols
10352module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {
10353  var keys = getOwnPropertyNamesModule.f(anObject(it));
10354  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
10355  return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;
10356};
10357
10358
10359/***/ }),
10360
10361/***/ 40857:
10362/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10363
10364var global = __webpack_require__(17854);
10365
10366module.exports = global;
10367
10368
10369/***/ }),
10370
10371/***/ 12534:
10372/***/ ((module) => {
10373
10374module.exports = function (exec) {
10375  try {
10376    return { error: false, value: exec() };
10377  } catch (error) {
10378    return { error: true, value: error };
10379  }
10380};
10381
10382
10383/***/ }),
10384
10385/***/ 63702:
10386/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10387
10388var global = __webpack_require__(17854);
10389var NativePromiseConstructor = __webpack_require__(2492);
10390var isCallable = __webpack_require__(60614);
10391var isForced = __webpack_require__(54705);
10392var inspectSource = __webpack_require__(42788);
10393var wellKnownSymbol = __webpack_require__(5112);
10394var IS_BROWSER = __webpack_require__(7871);
10395var IS_DENO = __webpack_require__(83823);
10396var IS_PURE = __webpack_require__(31913);
10397var V8_VERSION = __webpack_require__(7392);
10398
10399var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
10400var SPECIES = wellKnownSymbol('species');
10401var SUBCLASSING = false;
10402var NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);
10403
10404var FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {
10405  var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);
10406  var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);
10407  // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
10408  // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
10409  // We can't detect it synchronously, so just check versions
10410  if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;
10411  // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution
10412  if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;
10413  // We can't use @@species feature detection in V8 since it causes
10414  // deoptimization and performance degradation
10415  // https://github.com/zloirock/core-js/issues/679
10416  if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {
10417    // Detect correctness of subclassing with @@species support
10418    var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });
10419    var FakePromise = function (exec) {
10420      exec(function () { /* empty */ }, function () { /* empty */ });
10421    };
10422    var constructor = promise.constructor = {};
10423    constructor[SPECIES] = FakePromise;
10424    SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;
10425    if (!SUBCLASSING) return true;
10426  // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test
10427  } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;
10428});
10429
10430module.exports = {
10431  CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,
10432  REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,
10433  SUBCLASSING: SUBCLASSING
10434};
10435
10436
10437/***/ }),
10438
10439/***/ 2492:
10440/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10441
10442var global = __webpack_require__(17854);
10443
10444module.exports = global.Promise;
10445
10446
10447/***/ }),
10448
10449/***/ 69478:
10450/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10451
10452var anObject = __webpack_require__(19670);
10453var isObject = __webpack_require__(70111);
10454var newPromiseCapability = __webpack_require__(78523);
10455
10456module.exports = function (C, x) {
10457  anObject(C);
10458  if (isObject(x) && x.constructor === C) return x;
10459  var promiseCapability = newPromiseCapability.f(C);
10460  var resolve = promiseCapability.resolve;
10461  resolve(x);
10462  return promiseCapability.promise;
10463};
10464
10465
10466/***/ }),
10467
10468/***/ 80612:
10469/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10470
10471var NativePromiseConstructor = __webpack_require__(2492);
10472var checkCorrectnessOfIteration = __webpack_require__(17072);
10473var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(63702).CONSTRUCTOR);
10474
10475module.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {
10476  NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });
10477});
10478
10479
10480/***/ }),
10481
10482/***/ 2626:
10483/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10484
10485var defineProperty = (__webpack_require__(3070).f);
10486
10487module.exports = function (Target, Source, key) {
10488  key in Target || defineProperty(Target, key, {
10489    configurable: true,
10490    get: function () { return Source[key]; },
10491    set: function (it) { Source[key] = it; }
10492  });
10493};
10494
10495
10496/***/ }),
10497
10498/***/ 18572:
10499/***/ ((module) => {
10500
10501var Queue = function () {
10502  this.head = null;
10503  this.tail = null;
10504};
10505
10506Queue.prototype = {
10507  add: function (item) {
10508    var entry = { item: item, next: null };
10509    if (this.head) this.tail.next = entry;
10510    else this.head = entry;
10511    this.tail = entry;
10512  },
10513  get: function () {
10514    var entry = this.head;
10515    if (entry) {
10516      this.head = entry.next;
10517      if (this.tail === entry) this.tail = null;
10518      return entry.item;
10519    }
10520  }
10521};
10522
10523module.exports = Queue;
10524
10525
10526/***/ }),
10527
10528/***/ 97651:
10529/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10530
10531var call = __webpack_require__(46916);
10532var anObject = __webpack_require__(19670);
10533var isCallable = __webpack_require__(60614);
10534var classof = __webpack_require__(84326);
10535var regexpExec = __webpack_require__(22261);
10536
10537var $TypeError = TypeError;
10538
10539// `RegExpExec` abstract operation
10540// https://tc39.es/ecma262/#sec-regexpexec
10541module.exports = function (R, S) {
10542  var exec = R.exec;
10543  if (isCallable(exec)) {
10544    var result = call(exec, R, S);
10545    if (result !== null) anObject(result);
10546    return result;
10547  }
10548  if (classof(R) === 'RegExp') return call(regexpExec, R, S);
10549  throw $TypeError('RegExp#exec called on incompatible receiver');
10550};
10551
10552
10553/***/ }),
10554
10555/***/ 22261:
10556/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10557
10558"use strict";
10559
10560/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */
10561/* eslint-disable regexp/no-useless-quantifier -- testing */
10562var call = __webpack_require__(46916);
10563var uncurryThis = __webpack_require__(1702);
10564var toString = __webpack_require__(41340);
10565var regexpFlags = __webpack_require__(67066);
10566var stickyHelpers = __webpack_require__(52999);
10567var shared = __webpack_require__(72309);
10568var create = __webpack_require__(70030);
10569var getInternalState = (__webpack_require__(29909).get);
10570var UNSUPPORTED_DOT_ALL = __webpack_require__(9441);
10571var UNSUPPORTED_NCG = __webpack_require__(38173);
10572
10573var nativeReplace = shared('native-string-replace', String.prototype.replace);
10574var nativeExec = RegExp.prototype.exec;
10575var patchedExec = nativeExec;
10576var charAt = uncurryThis(''.charAt);
10577var indexOf = uncurryThis(''.indexOf);
10578var replace = uncurryThis(''.replace);
10579var stringSlice = uncurryThis(''.slice);
10580
10581var UPDATES_LAST_INDEX_WRONG = (function () {
10582  var re1 = /a/;
10583  var re2 = /b*/g;
10584  call(nativeExec, re1, 'a');
10585  call(nativeExec, re2, 'a');
10586  return re1.lastIndex !== 0 || re2.lastIndex !== 0;
10587})();
10588
10589var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;
10590
10591// nonparticipating capturing group, copied from es5-shim's String#split patch.
10592var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
10593
10594var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
10595
10596if (PATCH) {
10597  patchedExec = function exec(string) {
10598    var re = this;
10599    var state = getInternalState(re);
10600    var str = toString(string);
10601    var raw = state.raw;
10602    var result, reCopy, lastIndex, match, i, object, group;
10603
10604    if (raw) {
10605      raw.lastIndex = re.lastIndex;
10606      result = call(patchedExec, raw, str);
10607      re.lastIndex = raw.lastIndex;
10608      return result;
10609    }
10610
10611    var groups = state.groups;
10612    var sticky = UNSUPPORTED_Y && re.sticky;
10613    var flags = call(regexpFlags, re);
10614    var source = re.source;
10615    var charsAdded = 0;
10616    var strCopy = str;
10617
10618    if (sticky) {
10619      flags = replace(flags, 'y', '');
10620      if (indexOf(flags, 'g') === -1) {
10621        flags += 'g';
10622      }
10623
10624      strCopy = stringSlice(str, re.lastIndex);
10625      // Support anchored sticky behavior.
10626      if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\n')) {
10627        source = '(?: ' + source + ')';
10628        strCopy = ' ' + strCopy;
10629        charsAdded++;
10630      }
10631      // ^(? + rx + ) is needed, in combination with some str slicing, to
10632      // simulate the 'y' flag.
10633      reCopy = new RegExp('^(?:' + source + ')', flags);
10634    }
10635
10636    if (NPCG_INCLUDED) {
10637      reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
10638    }
10639    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
10640
10641    match = call(nativeExec, sticky ? reCopy : re, strCopy);
10642
10643    if (sticky) {
10644      if (match) {
10645        match.input = stringSlice(match.input, charsAdded);
10646        match[0] = stringSlice(match[0], charsAdded);
10647        match.index = re.lastIndex;
10648        re.lastIndex += match[0].length;
10649      } else re.lastIndex = 0;
10650    } else if (UPDATES_LAST_INDEX_WRONG && match) {
10651      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
10652    }
10653    if (NPCG_INCLUDED && match && match.length > 1) {
10654      // Fix browsers whose `exec` methods don't consistently return `undefined`
10655      // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/
10656      call(nativeReplace, match[0], reCopy, function () {
10657        for (i = 1; i < arguments.length - 2; i++) {
10658          if (arguments[i] === undefined) match[i] = undefined;
10659        }
10660      });
10661    }
10662
10663    if (match && groups) {
10664      match.groups = object = create(null);
10665      for (i = 0; i < groups.length; i++) {
10666        group = groups[i];
10667        object[group[0]] = match[group[1]];
10668      }
10669    }
10670
10671    return match;
10672  };
10673}
10674
10675module.exports = patchedExec;
10676
10677
10678/***/ }),
10679
10680/***/ 67066:
10681/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10682
10683"use strict";
10684
10685var anObject = __webpack_require__(19670);
10686
10687// `RegExp.prototype.flags` getter implementation
10688// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
10689module.exports = function () {
10690  var that = anObject(this);
10691  var result = '';
10692  if (that.hasIndices) result += 'd';
10693  if (that.global) result += 'g';
10694  if (that.ignoreCase) result += 'i';
10695  if (that.multiline) result += 'm';
10696  if (that.dotAll) result += 's';
10697  if (that.unicode) result += 'u';
10698  if (that.unicodeSets) result += 'v';
10699  if (that.sticky) result += 'y';
10700  return result;
10701};
10702
10703
10704/***/ }),
10705
10706/***/ 34706:
10707/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10708
10709var call = __webpack_require__(46916);
10710var hasOwn = __webpack_require__(92597);
10711var isPrototypeOf = __webpack_require__(47976);
10712var regExpFlags = __webpack_require__(67066);
10713
10714var RegExpPrototype = RegExp.prototype;
10715
10716module.exports = function (R) {
10717  var flags = R.flags;
10718  return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)
10719    ? call(regExpFlags, R) : flags;
10720};
10721
10722
10723/***/ }),
10724
10725/***/ 52999:
10726/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10727
10728var fails = __webpack_require__(47293);
10729var global = __webpack_require__(17854);
10730
10731// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
10732var $RegExp = global.RegExp;
10733
10734var UNSUPPORTED_Y = fails(function () {
10735  var re = $RegExp('a', 'y');
10736  re.lastIndex = 2;
10737  return re.exec('abcd') != null;
10738});
10739
10740// UC Browser bug
10741// https://github.com/zloirock/core-js/issues/1008
10742var MISSED_STICKY = UNSUPPORTED_Y || fails(function () {
10743  return !$RegExp('a', 'y').sticky;
10744});
10745
10746var BROKEN_CARET = UNSUPPORTED_Y || fails(function () {
10747  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
10748  var re = $RegExp('^r', 'gy');
10749  re.lastIndex = 2;
10750  return re.exec('str') != null;
10751});
10752
10753module.exports = {
10754  BROKEN_CARET: BROKEN_CARET,
10755  MISSED_STICKY: MISSED_STICKY,
10756  UNSUPPORTED_Y: UNSUPPORTED_Y
10757};
10758
10759
10760/***/ }),
10761
10762/***/ 9441:
10763/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10764
10765var fails = __webpack_require__(47293);
10766var global = __webpack_require__(17854);
10767
10768// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError
10769var $RegExp = global.RegExp;
10770
10771module.exports = fails(function () {
10772  var re = $RegExp('.', 's');
10773  return !(re.dotAll && re.exec('\n') && re.flags === 's');
10774});
10775
10776
10777/***/ }),
10778
10779/***/ 38173:
10780/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10781
10782var fails = __webpack_require__(47293);
10783var global = __webpack_require__(17854);
10784
10785// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError
10786var $RegExp = global.RegExp;
10787
10788module.exports = fails(function () {
10789  var re = $RegExp('(?<a>b)', 'g');
10790  return re.exec('b').groups.a !== 'b' ||
10791    'b'.replace(re, '$<a>c') !== 'bc';
10792});
10793
10794
10795/***/ }),
10796
10797/***/ 84488:
10798/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10799
10800var isNullOrUndefined = __webpack_require__(68554);
10801
10802var $TypeError = TypeError;
10803
10804// `RequireObjectCoercible` abstract operation
10805// https://tc39.es/ecma262/#sec-requireobjectcoercible
10806module.exports = function (it) {
10807  if (isNullOrUndefined(it)) throw $TypeError("Can't call method on " + it);
10808  return it;
10809};
10810
10811
10812/***/ }),
10813
10814/***/ 81150:
10815/***/ ((module) => {
10816
10817// `SameValue` abstract operation
10818// https://tc39.es/ecma262/#sec-samevalue
10819// eslint-disable-next-line es-x/no-object-is -- safe
10820module.exports = Object.is || function is(x, y) {
10821  // eslint-disable-next-line no-self-compare -- NaN check
10822  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
10823};
10824
10825
10826/***/ }),
10827
10828/***/ 17152:
10829/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10830
10831var global = __webpack_require__(17854);
10832var apply = __webpack_require__(22104);
10833var isCallable = __webpack_require__(60614);
10834var userAgent = __webpack_require__(88113);
10835var arraySlice = __webpack_require__(50206);
10836var validateArgumentsLength = __webpack_require__(48053);
10837
10838var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
10839var Function = global.Function;
10840
10841var wrap = function (scheduler) {
10842  return MSIE ? function (handler, timeout /* , ...arguments */) {
10843    var boundArgs = validateArgumentsLength(arguments.length, 1) > 2;
10844    var fn = isCallable(handler) ? handler : Function(handler);
10845    var args = boundArgs ? arraySlice(arguments, 2) : undefined;
10846    return scheduler(boundArgs ? function () {
10847      apply(fn, this, args);
10848    } : fn, timeout);
10849  } : scheduler;
10850};
10851
10852// ie9- setTimeout & setInterval additional parameters fix
10853// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
10854module.exports = {
10855  // `setTimeout` method
10856  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
10857  setTimeout: wrap(global.setTimeout),
10858  // `setInterval` method
10859  // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
10860  setInterval: wrap(global.setInterval)
10861};
10862
10863
10864/***/ }),
10865
10866/***/ 96340:
10867/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10868
10869"use strict";
10870
10871var getBuiltIn = __webpack_require__(35005);
10872var definePropertyModule = __webpack_require__(3070);
10873var wellKnownSymbol = __webpack_require__(5112);
10874var DESCRIPTORS = __webpack_require__(19781);
10875
10876var SPECIES = wellKnownSymbol('species');
10877
10878module.exports = function (CONSTRUCTOR_NAME) {
10879  var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
10880  var defineProperty = definePropertyModule.f;
10881
10882  if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
10883    defineProperty(Constructor, SPECIES, {
10884      configurable: true,
10885      get: function () { return this; }
10886    });
10887  }
10888};
10889
10890
10891/***/ }),
10892
10893/***/ 58003:
10894/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10895
10896var defineProperty = (__webpack_require__(3070).f);
10897var hasOwn = __webpack_require__(92597);
10898var wellKnownSymbol = __webpack_require__(5112);
10899
10900var TO_STRING_TAG = wellKnownSymbol('toStringTag');
10901
10902module.exports = function (target, TAG, STATIC) {
10903  if (target && !STATIC) target = target.prototype;
10904  if (target && !hasOwn(target, TO_STRING_TAG)) {
10905    defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
10906  }
10907};
10908
10909
10910/***/ }),
10911
10912/***/ 6200:
10913/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10914
10915var shared = __webpack_require__(72309);
10916var uid = __webpack_require__(69711);
10917
10918var keys = shared('keys');
10919
10920module.exports = function (key) {
10921  return keys[key] || (keys[key] = uid(key));
10922};
10923
10924
10925/***/ }),
10926
10927/***/ 5465:
10928/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10929
10930var global = __webpack_require__(17854);
10931var defineGlobalProperty = __webpack_require__(13072);
10932
vendor: 12,805 bytes, lines 10933-11358
10933var SHARED = '__core-js_shared__';
10934var store = global[SHARED] || defineGlobalProperty(SHARED, {});
10935
10936module.exports = store;
10937
10938
10939/***/ }),
10940
10941/***/ 72309:
10942/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10943
10944var IS_PURE = __webpack_require__(31913);
10945var store = __webpack_require__(5465);
10946
10947(module.exports = function (key, value) {
10948  return store[key] || (store[key] = value !== undefined ? value : {});
10949})('versions', []).push({
10950  version: '3.25.0',
10951  mode: IS_PURE ? 'pure' : 'global',
10952  copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',
10953  license: 'https://github.com/zloirock/core-js/blob/v3.25.0/LICENSE',
10954  source: 'https://github.com/zloirock/core-js'
10955});
10956
10957
10958/***/ }),
10959
10960/***/ 36707:
10961/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10962
10963var anObject = __webpack_require__(19670);
10964var aConstructor = __webpack_require__(39483);
10965var isNullOrUndefined = __webpack_require__(68554);
10966var wellKnownSymbol = __webpack_require__(5112);
10967
10968var SPECIES = wellKnownSymbol('species');
10969
10970// `SpeciesConstructor` abstract operation
10971// https://tc39.es/ecma262/#sec-speciesconstructor
10972module.exports = function (O, defaultConstructor) {
10973  var C = anObject(O).constructor;
10974  var S;
10975  return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);
10976};
10977
10978
10979/***/ }),
10980
10981/***/ 43429:
10982/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
10983
10984var fails = __webpack_require__(47293);
10985
10986// check the existence of a method, lowercase
10987// of a tag and escaping quotes in arguments
10988module.exports = function (METHOD_NAME) {
10989  return fails(function () {
10990    var test = ''[METHOD_NAME]('"');
10991    return test !== test.toLowerCase() || test.split('"').length > 3;
10992  });
10993};
10994
10995
10996/***/ }),
10997
10998/***/ 28710:
10999/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11000
11001var uncurryThis = __webpack_require__(1702);
11002var toIntegerOrInfinity = __webpack_require__(19303);
11003var toString = __webpack_require__(41340);
11004var requireObjectCoercible = __webpack_require__(84488);
11005
11006var charAt = uncurryThis(''.charAt);
11007var charCodeAt = uncurryThis(''.charCodeAt);
11008var stringSlice = uncurryThis(''.slice);
11009
11010var createMethod = function (CONVERT_TO_STRING) {
11011  return function ($this, pos) {
11012    var S = toString(requireObjectCoercible($this));
11013    var position = toIntegerOrInfinity(pos);
11014    var size = S.length;
11015    var first, second;
11016    if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
11017    first = charCodeAt(S, position);
11018    return first < 0xD800 || first > 0xDBFF || position + 1 === size
11019      || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF
11020        ? CONVERT_TO_STRING
11021          ? charAt(S, position)
11022          : first
11023        : CONVERT_TO_STRING
11024          ? stringSlice(S, position, position + 2)
11025          : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
11026  };
11027};
11028
11029module.exports = {
11030  // `String.prototype.codePointAt` method
11031  // https://tc39.es/ecma262/#sec-string.prototype.codepointat
11032  codeAt: createMethod(false),
11033  // `String.prototype.at` method
11034  // https://github.com/mathiasbynens/String.prototype.at
11035  charAt: createMethod(true)
11036};
11037
11038
11039/***/ }),
11040
11041/***/ 54986:
11042/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11043
11044// https://github.com/zloirock/core-js/issues/280
11045var userAgent = __webpack_require__(88113);
11046
11047module.exports = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(userAgent);
11048
11049
11050/***/ }),
11051
11052/***/ 76650:
11053/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11054
11055// https://github.com/tc39/proposal-string-pad-start-end
11056var uncurryThis = __webpack_require__(1702);
11057var toLength = __webpack_require__(17466);
11058var toString = __webpack_require__(41340);
11059var $repeat = __webpack_require__(38415);
11060var requireObjectCoercible = __webpack_require__(84488);
11061
11062var repeat = uncurryThis($repeat);
11063var stringSlice = uncurryThis(''.slice);
11064var ceil = Math.ceil;
11065
11066// `String.prototype.{ padStart, padEnd }` methods implementation
11067var createMethod = function (IS_END) {
11068  return function ($this, maxLength, fillString) {
11069    var S = toString(requireObjectCoercible($this));
11070    var intMaxLength = toLength(maxLength);
11071    var stringLength = S.length;
11072    var fillStr = fillString === undefined ? ' ' : toString(fillString);
11073    var fillLen, stringFiller;
11074    if (intMaxLength <= stringLength || fillStr == '') return S;
11075    fillLen = intMaxLength - stringLength;
11076    stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));
11077    if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);
11078    return IS_END ? S + stringFiller : stringFiller + S;
11079  };
11080};
11081
11082module.exports = {
11083  // `String.prototype.padStart` method
11084  // https://tc39.es/ecma262/#sec-string.prototype.padstart
11085  start: createMethod(false),
11086  // `String.prototype.padEnd` method
11087  // https://tc39.es/ecma262/#sec-string.prototype.padend
11088  end: createMethod(true)
11089};
11090
11091
11092/***/ }),
11093
11094/***/ 33197:
11095/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11096
11097"use strict";
11098
11099// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js
11100var uncurryThis = __webpack_require__(1702);
11101
11102var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
11103var base = 36;
11104var tMin = 1;
11105var tMax = 26;
11106var skew = 38;
11107var damp = 700;
11108var initialBias = 72;
11109var initialN = 128; // 0x80
11110var delimiter = '-'; // '\x2D'
11111var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars
11112var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
11113var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
11114var baseMinusTMin = base - tMin;
11115
11116var $RangeError = RangeError;
11117var exec = uncurryThis(regexSeparators.exec);
11118var floor = Math.floor;
11119var fromCharCode = String.fromCharCode;
11120var charCodeAt = uncurryThis(''.charCodeAt);
11121var join = uncurryThis([].join);
11122var push = uncurryThis([].push);
11123var replace = uncurryThis(''.replace);
11124var split = uncurryThis(''.split);
11125var toLowerCase = uncurryThis(''.toLowerCase);
11126
11127/**
11128 * Creates an array containing the numeric code points of each Unicode
11129 * character in the string. While JavaScript uses UCS-2 internally,
11130 * this function will convert a pair of surrogate halves (each of which
11131 * UCS-2 exposes as separate characters) into a single code point,
11132 * matching UTF-16.
11133 */
11134var ucs2decode = function (string) {
11135  var output = [];
11136  var counter = 0;
11137  var length = string.length;
11138  while (counter < length) {
11139    var value = charCodeAt(string, counter++);
11140    if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
11141      // It's a high surrogate, and there is a next character.
11142      var extra = charCodeAt(string, counter++);
11143      if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.
11144        push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
11145      } else {
11146        // It's an unmatched surrogate; only append this code unit, in case the
11147        // next code unit is the high surrogate of a surrogate pair.
11148        push(output, value);
11149        counter--;
11150      }
11151    } else {
11152      push(output, value);
11153    }
11154  }
11155  return output;
11156};
11157
11158/**
11159 * Converts a digit/integer into a basic code point.
11160 */
11161var digitToBasic = function (digit) {
11162  //  0..25 map to ASCII a..z or A..Z
11163  // 26..35 map to ASCII 0..9
11164  return digit + 22 + 75 * (digit < 26);
11165};
11166
11167/**
11168 * Bias adaptation function as per section 3.4 of RFC 3492.
11169 * https://tools.ietf.org/html/rfc3492#section-3.4
11170 */
11171var adapt = function (delta, numPoints, firstTime) {
11172  var k = 0;
11173  delta = firstTime ? floor(delta / damp) : delta >> 1;
11174  delta += floor(delta / numPoints);
11175  while (delta > baseMinusTMin * tMax >> 1) {
11176    delta = floor(delta / baseMinusTMin);
11177    k += base;
11178  }
11179  return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
11180};
11181
11182/**
11183 * Converts a string of Unicode symbols (e.g. a domain name label) to a
11184 * Punycode string of ASCII-only symbols.
11185 */
11186var encode = function (input) {
11187  var output = [];
11188
11189  // Convert the input in UCS-2 to an array of Unicode code points.
11190  input = ucs2decode(input);
11191
11192  // Cache the length.
11193  var inputLength = input.length;
11194
11195  // Initialize the state.
11196  var n = initialN;
11197  var delta = 0;
11198  var bias = initialBias;
11199  var i, currentValue;
11200
11201  // Handle the basic code points.
11202  for (i = 0; i < input.length; i++) {
11203    currentValue = input[i];
11204    if (currentValue < 0x80) {
11205      push(output, fromCharCode(currentValue));
11206    }
11207  }
11208
11209  var basicLength = output.length; // number of basic code points.
11210  var handledCPCount = basicLength; // number of code points that have been handled;
11211
11212  // Finish the basic string with a delimiter unless it's empty.
11213  if (basicLength) {
11214    push(output, delimiter);
11215  }
11216
11217  // Main encoding loop:
11218  while (handledCPCount < inputLength) {
11219    // All non-basic code points < n have been handled already. Find the next larger one:
11220    var m = maxInt;
11221    for (i = 0; i < input.length; i++) {
11222      currentValue = input[i];
11223      if (currentValue >= n && currentValue < m) {
11224        m = currentValue;
11225      }
11226    }
11227
11228    // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.
11229    var handledCPCountPlusOne = handledCPCount + 1;
11230    if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
11231      throw $RangeError(OVERFLOW_ERROR);
11232    }
11233
11234    delta += (m - n) * handledCPCountPlusOne;
11235    n = m;
11236
11237    for (i = 0; i < input.length; i++) {
11238      currentValue = input[i];
11239      if (currentValue < n && ++delta > maxInt) {
11240        throw $RangeError(OVERFLOW_ERROR);
11241      }
11242      if (currentValue == n) {
11243        // Represent delta as a generalized variable-length integer.
11244        var q = delta;
11245        var k = base;
11246        while (true) {
11247          var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
11248          if (q < t) break;
11249          var qMinusT = q - t;
11250          var baseMinusT = base - t;
11251          push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
11252          q = floor(qMinusT / baseMinusT);
11253          k += base;
11254        }
11255
11256        push(output, fromCharCode(digitToBasic(q)));
11257        bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
11258        delta = 0;
11259        handledCPCount++;
11260      }
11261    }
11262
11263    delta++;
11264    n++;
11265  }
11266  return join(output, '');
11267};
11268
11269module.exports = function (input) {
11270  var encoded = [];
11271  var labels = split(replace(toLowerCase(input), regexSeparators, '\u002E'), '.');
11272  var i, label;
11273  for (i = 0; i < labels.length; i++) {
11274    label = labels[i];
11275    push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);
11276  }
11277  return join(encoded, '.');
11278};
11279
11280
11281/***/ }),
11282
11283/***/ 38415:
11284/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11285
11286"use strict";
11287
11288var toIntegerOrInfinity = __webpack_require__(19303);
11289var toString = __webpack_require__(41340);
11290var requireObjectCoercible = __webpack_require__(84488);
11291
11292var $RangeError = RangeError;
11293
11294// `String.prototype.repeat` method implementation
11295// https://tc39.es/ecma262/#sec-string.prototype.repeat
11296module.exports = function repeat(count) {
11297  var str = toString(requireObjectCoercible(this));
11298  var result = '';
11299  var n = toIntegerOrInfinity(count);
11300  if (n < 0 || n == Infinity) throw $RangeError('Wrong number of repetitions');
11301  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
11302  return result;
11303};
11304
11305
11306/***/ }),
11307
11308/***/ 10365:
11309/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11310
11311"use strict";
11312
11313var $trimEnd = (__webpack_require__(53111).end);
11314var forcedStringTrimMethod = __webpack_require__(76091);
11315
11316// `String.prototype.{ trimEnd, trimRight }` method
11317// https://tc39.es/ecma262/#sec-string.prototype.trimend
11318// https://tc39.es/ecma262/#String.prototype.trimright
11319module.exports = forcedStringTrimMethod('trimEnd') ? function trimEnd() {
11320  return $trimEnd(this);
11321// eslint-disable-next-line es-x/no-string-prototype-trimstart-trimend -- safe
11322} : ''.trimEnd;
11323
11324
11325/***/ }),
11326
11327/***/ 76091:
11328/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11329
11330var PROPER_FUNCTION_NAME = (__webpack_require__(76530).PROPER);
11331var fails = __webpack_require__(47293);
11332var whitespaces = __webpack_require__(81361);
11333
11334var non = '\u200B\u0085\u180E';
11335
11336// check that a method works with the correct list
11337// of whitespaces and has a correct name
11338module.exports = function (METHOD_NAME) {
11339  return fails(function () {
11340    return !!whitespaces[METHOD_NAME]()
11341      || non[METHOD_NAME]() !== non
11342      || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);
11343  });
11344};
11345
11346
11347/***/ }),
11348
11349/***/ 33217:
11350/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11351
11352"use strict";
11353
11354var $trimStart = (__webpack_require__(53111).start);
11355var forcedStringTrimMethod = __webpack_require__(76091);
11356
11357// `String.prototype.{ trimStart, trimLeft }` method
11358// https://tc39.es/ecma262/#sec-string.prototype.trimstart
vendor: 4,215 bytes, lines 11359-11484
11359// https://tc39.es/ecma262/#String.prototype.trimleft
11360module.exports = forcedStringTrimMethod('trimStart') ? function trimStart() {
11361  return $trimStart(this);
11362// eslint-disable-next-line es-x/no-string-prototype-trimstart-trimend -- safe
11363} : ''.trimStart;
11364
11365
11366/***/ }),
11367
11368/***/ 53111:
11369/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11370
11371var uncurryThis = __webpack_require__(1702);
11372var requireObjectCoercible = __webpack_require__(84488);
11373var toString = __webpack_require__(41340);
11374var whitespaces = __webpack_require__(81361);
11375
11376var replace = uncurryThis(''.replace);
11377var whitespace = '[' + whitespaces + ']';
11378var ltrim = RegExp('^' + whitespace + whitespace + '*');
11379var rtrim = RegExp(whitespace + whitespace + '*$');
11380
11381// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
11382var createMethod = function (TYPE) {
11383  return function ($this) {
11384    var string = toString(requireObjectCoercible($this));
11385    if (TYPE & 1) string = replace(string, ltrim, '');
11386    if (TYPE & 2) string = replace(string, rtrim, '');
11387    return string;
11388  };
11389};
11390
11391module.exports = {
11392  // `String.prototype.{ trimLeft, trimStart }` methods
11393  // https://tc39.es/ecma262/#sec-string.prototype.trimstart
11394  start: createMethod(1),
11395  // `String.prototype.{ trimRight, trimEnd }` methods
11396  // https://tc39.es/ecma262/#sec-string.prototype.trimend
11397  end: createMethod(2),
11398  // `String.prototype.trim` method
11399  // https://tc39.es/ecma262/#sec-string.prototype.trim
11400  trim: createMethod(3)
11401};
11402
11403
11404/***/ }),
11405
11406/***/ 36293:
11407/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11408
11409/* eslint-disable es-x/no-symbol -- required for testing */
11410var V8_VERSION = __webpack_require__(7392);
11411var fails = __webpack_require__(47293);
11412
11413// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing
11414module.exports = !!Object.getOwnPropertySymbols && !fails(function () {
11415  var symbol = Symbol();
11416  // Chrome 38 Symbol has incorrect toString conversion
11417  // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances
11418  return !String(symbol) || !(Object(symbol) instanceof Symbol) ||
11419    // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
11420    !Symbol.sham && V8_VERSION && V8_VERSION < 41;
11421});
11422
11423
11424/***/ }),
11425
11426/***/ 56532:
11427/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11428
11429var call = __webpack_require__(46916);
11430var getBuiltIn = __webpack_require__(35005);
11431var wellKnownSymbol = __webpack_require__(5112);
11432var defineBuiltIn = __webpack_require__(98052);
11433
11434module.exports = function () {
11435  var Symbol = getBuiltIn('Symbol');
11436  var SymbolPrototype = Symbol && Symbol.prototype;
11437  var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
11438  var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
11439
11440  if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
11441    // `Symbol.prototype[@@toPrimitive]` method
11442    // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
11443    // eslint-disable-next-line no-unused-vars -- required for .length
11444    defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {
11445      return call(valueOf, this);
11446    }, { arity: 1 });
11447  }
11448};
11449
11450
11451/***/ }),
11452
11453/***/ 2015:
11454/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11455
11456var NATIVE_SYMBOL = __webpack_require__(36293);
11457
11458/* eslint-disable es-x/no-symbol -- safe */
11459module.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;
11460
11461
11462/***/ }),
11463
11464/***/ 20261:
11465/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11466
11467var global = __webpack_require__(17854);
11468var apply = __webpack_require__(22104);
11469var bind = __webpack_require__(49974);
11470var isCallable = __webpack_require__(60614);
11471var hasOwn = __webpack_require__(92597);
11472var fails = __webpack_require__(47293);
11473var html = __webpack_require__(60490);
11474var arraySlice = __webpack_require__(50206);
11475var createElement = __webpack_require__(80317);
11476var validateArgumentsLength = __webpack_require__(48053);
11477var IS_IOS = __webpack_require__(6833);
11478var IS_NODE = __webpack_require__(35268);
11479
11480var set = global.setImmediate;
11481var clear = global.clearImmediate;
11482var process = global.process;
11483var Dispatch = global.Dispatch;
11484var Function = global.Function;
vendor: 9,838 bytes, lines 11485-11876
11485var MessageChannel = global.MessageChannel;
11486var String = global.String;
11487var counter = 0;
11488var queue = {};
11489var ONREADYSTATECHANGE = 'onreadystatechange';
11490var location, defer, channel, port;
11491
11492try {
11493  // Deno throws a ReferenceError on `location` access without `--location` flag
11494  location = global.location;
11495} catch (error) { /* empty */ }
11496
11497var run = function (id) {
11498  if (hasOwn(queue, id)) {
11499    var fn = queue[id];
11500    delete queue[id];
11501    fn();
11502  }
11503};
11504
11505var runner = function (id) {
11506  return function () {
11507    run(id);
11508  };
11509};
11510
11511var listener = function (event) {
11512  run(event.data);
11513};
11514
11515var post = function (id) {
11516  // old engines have not location.origin
11517  global.postMessage(String(id), location.protocol + '//' + location.host);
11518};
11519
11520// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
11521if (!set || !clear) {
11522  set = function setImmediate(handler) {
11523    validateArgumentsLength(arguments.length, 1);
11524    var fn = isCallable(handler) ? handler : Function(handler);
11525    var args = arraySlice(arguments, 1);
11526    queue[++counter] = function () {
11527      apply(fn, undefined, args);
11528    };
11529    defer(counter);
11530    return counter;
11531  };
11532  clear = function clearImmediate(id) {
11533    delete queue[id];
11534  };
11535  // Node.js 0.8-
11536  if (IS_NODE) {
11537    defer = function (id) {
11538      process.nextTick(runner(id));
11539    };
11540  // Sphere (JS game engine) Dispatch API
11541  } else if (Dispatch && Dispatch.now) {
11542    defer = function (id) {
11543      Dispatch.now(runner(id));
11544    };
11545  // Browsers with MessageChannel, includes WebWorkers
11546  // except iOS - https://github.com/zloirock/core-js/issues/624
11547  } else if (MessageChannel && !IS_IOS) {
11548    channel = new MessageChannel();
11549    port = channel.port2;
11550    channel.port1.onmessage = listener;
11551    defer = bind(port.postMessage, port);
11552  // Browsers with postMessage, skip WebWorkers
11553  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
11554  } else if (
11555    global.addEventListener &&
11556    isCallable(global.postMessage) &&
11557    !global.importScripts &&
11558    location && location.protocol !== 'file:' &&
11559    !fails(post)
11560  ) {
11561    defer = post;
11562    global.addEventListener('message', listener, false);
11563  // IE8-
11564  } else if (ONREADYSTATECHANGE in createElement('script')) {
11565    defer = function (id) {
11566      html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {
11567        html.removeChild(this);
11568        run(id);
11569      };
11570    };
11571  // Rest old browsers
11572  } else {
11573    defer = function (id) {
11574      setTimeout(runner(id), 0);
11575    };
11576  }
11577}
11578
11579module.exports = {
11580  set: set,
11581  clear: clear
11582};
11583
11584
11585/***/ }),
11586
11587/***/ 50863:
11588/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11589
11590var uncurryThis = __webpack_require__(1702);
11591
11592// `thisNumberValue` abstract operation
11593// https://tc39.es/ecma262/#sec-thisnumbervalue
11594module.exports = uncurryThis(1.0.valueOf);
11595
11596
11597/***/ }),
11598
11599/***/ 51400:
11600/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11601
11602var toIntegerOrInfinity = __webpack_require__(19303);
11603
11604var max = Math.max;
11605var min = Math.min;
11606
11607// Helper for a popular repeating case of the spec:
11608// Let integer be ? ToInteger(index).
11609// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).
11610module.exports = function (index, length) {
11611  var integer = toIntegerOrInfinity(index);
11612  return integer < 0 ? max(integer + length, 0) : min(integer, length);
11613};
11614
11615
11616/***/ }),
11617
11618/***/ 64599:
11619/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11620
11621var toPrimitive = __webpack_require__(57593);
11622
11623var $TypeError = TypeError;
11624
11625// `ToBigInt` abstract operation
11626// https://tc39.es/ecma262/#sec-tobigint
11627module.exports = function (argument) {
11628  var prim = toPrimitive(argument, 'number');
11629  if (typeof prim == 'number') throw $TypeError("Can't convert number to bigint");
11630  // eslint-disable-next-line es-x/no-bigint -- safe
11631  return BigInt(prim);
11632};
11633
11634
11635/***/ }),
11636
11637/***/ 57067:
11638/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11639
11640var toIntegerOrInfinity = __webpack_require__(19303);
11641var toLength = __webpack_require__(17466);
11642
11643var $RangeError = RangeError;
11644
11645// `ToIndex` abstract operation
11646// https://tc39.es/ecma262/#sec-toindex
11647module.exports = function (it) {
11648  if (it === undefined) return 0;
11649  var number = toIntegerOrInfinity(it);
11650  var length = toLength(number);
11651  if (number !== length) throw $RangeError('Wrong length or index');
11652  return length;
11653};
11654
11655
11656/***/ }),
11657
11658/***/ 45656:
11659/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11660
11661// toObject with fallback for non-array-like ES3 strings
11662var IndexedObject = __webpack_require__(68361);
11663var requireObjectCoercible = __webpack_require__(84488);
11664
11665module.exports = function (it) {
11666  return IndexedObject(requireObjectCoercible(it));
11667};
11668
11669
11670/***/ }),
11671
11672/***/ 19303:
11673/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11674
11675var trunc = __webpack_require__(74758);
11676
11677// `ToIntegerOrInfinity` abstract operation
11678// https://tc39.es/ecma262/#sec-tointegerorinfinity
11679module.exports = function (argument) {
11680  var number = +argument;
11681  // eslint-disable-next-line no-self-compare -- NaN check
11682  return number !== number || number === 0 ? 0 : trunc(number);
11683};
11684
11685
11686/***/ }),
11687
11688/***/ 17466:
11689/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11690
11691var toIntegerOrInfinity = __webpack_require__(19303);
11692
11693var min = Math.min;
11694
11695// `ToLength` abstract operation
11696// https://tc39.es/ecma262/#sec-tolength
11697module.exports = function (argument) {
11698  return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
11699};
11700
11701
11702/***/ }),
11703
11704/***/ 47908:
11705/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11706
11707var requireObjectCoercible = __webpack_require__(84488);
11708
11709var $Object = Object;
11710
11711// `ToObject` abstract operation
11712// https://tc39.es/ecma262/#sec-toobject
11713module.exports = function (argument) {
11714  return $Object(requireObjectCoercible(argument));
11715};
11716
11717
11718/***/ }),
11719
11720/***/ 84590:
11721/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11722
11723var toPositiveInteger = __webpack_require__(73002);
11724
11725var $RangeError = RangeError;
11726
11727module.exports = function (it, BYTES) {
11728  var offset = toPositiveInteger(it);
11729  if (offset % BYTES) throw $RangeError('Wrong offset');
11730  return offset;
11731};
11732
11733
11734/***/ }),
11735
11736/***/ 73002:
11737/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11738
11739var toIntegerOrInfinity = __webpack_require__(19303);
11740
11741var $RangeError = RangeError;
11742
11743module.exports = function (it) {
11744  var result = toIntegerOrInfinity(it);
11745  if (result < 0) throw $RangeError("The argument can't be less than 0");
11746  return result;
11747};
11748
11749
11750/***/ }),
11751
11752/***/ 57593:
11753/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11754
11755var call = __webpack_require__(46916);
11756var isObject = __webpack_require__(70111);
11757var isSymbol = __webpack_require__(52190);
11758var getMethod = __webpack_require__(58173);
11759var ordinaryToPrimitive = __webpack_require__(92140);
11760var wellKnownSymbol = __webpack_require__(5112);
11761
11762var $TypeError = TypeError;
11763var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
11764
11765// `ToPrimitive` abstract operation
11766// https://tc39.es/ecma262/#sec-toprimitive
11767module.exports = function (input, pref) {
11768  if (!isObject(input) || isSymbol(input)) return input;
11769  var exoticToPrim = getMethod(input, TO_PRIMITIVE);
11770  var result;
11771  if (exoticToPrim) {
11772    if (pref === undefined) pref = 'default';
11773    result = call(exoticToPrim, input, pref);
11774    if (!isObject(result) || isSymbol(result)) return result;
11775    throw $TypeError("Can't convert object to primitive value");
11776  }
11777  if (pref === undefined) pref = 'number';
11778  return ordinaryToPrimitive(input, pref);
11779};
11780
11781
11782/***/ }),
11783
11784/***/ 34948:
11785/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11786
11787var toPrimitive = __webpack_require__(57593);
11788var isSymbol = __webpack_require__(52190);
11789
11790// `ToPropertyKey` abstract operation
11791// https://tc39.es/ecma262/#sec-topropertykey
11792module.exports = function (argument) {
11793  var key = toPrimitive(argument, 'string');
11794  return isSymbol(key) ? key : key + '';
11795};
11796
11797
11798/***/ }),
11799
11800/***/ 51694:
11801/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11802
11803var wellKnownSymbol = __webpack_require__(5112);
11804
11805var TO_STRING_TAG = wellKnownSymbol('toStringTag');
11806var test = {};
11807
11808test[TO_STRING_TAG] = 'z';
11809
11810module.exports = String(test) === '[object z]';
11811
11812
11813/***/ }),
11814
11815/***/ 41340:
11816/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11817
11818var classof = __webpack_require__(70648);
11819
11820var $String = String;
11821
11822module.exports = function (argument) {
11823  if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');
11824  return $String(argument);
11825};
11826
11827
11828/***/ }),
11829
11830/***/ 44038:
11831/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11832
11833var IS_NODE = __webpack_require__(35268);
11834
11835module.exports = function (name) {
11836  try {
11837    // eslint-disable-next-line no-new-func -- safe
11838    if (IS_NODE) return Function('return require("' + name + '")')();
11839  } catch (error) { /* empty */ }
11840};
11841
11842
11843/***/ }),
11844
11845/***/ 66330:
11846/***/ ((module) => {
11847
11848var $String = String;
11849
11850module.exports = function (argument) {
11851  try {
11852    return $String(argument);
11853  } catch (error) {
11854    return 'Object';
11855  }
11856};
11857
11858
11859/***/ }),
11860
11861/***/ 19843:
11862/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
11863
11864"use strict";
11865
11866var $ = __webpack_require__(82109);
11867var global = __webpack_require__(17854);
11868var call = __webpack_require__(46916);
11869var DESCRIPTORS = __webpack_require__(19781);
11870var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(63832);
11871var ArrayBufferViewCore = __webpack_require__(90260);
11872var ArrayBufferModule = __webpack_require__(13331);
11873var anInstance = __webpack_require__(25787);
11874var createPropertyDescriptor = __webpack_require__(79114);
11875var createNonEnumerableProperty = __webpack_require__(68880);
11876var isIntegralNumber = __webpack_require__(55988);
11877var toLength = __webpack_require__(17466);
11878var toIndex = __webpack_require__(57067);
11879var toOffset = __webpack_require__(84590);
11880var toPropertyKey = __webpack_require__(34948);
11881var hasOwn = __webpack_require__(92597);
11882var classof = __webpack_require__(70648);
11883var isObject = __webpack_require__(70111);
11884var isSymbol = __webpack_require__(52190);
11885var create = __webpack_require__(70030);
11886var isPrototypeOf = __webpack_require__(47976);
11887var setPrototypeOf = __webpack_require__(27674);
11888var getOwnPropertyNames = (__webpack_require__(8006).f);
11889var typedArrayFrom = __webpack_require__(97321);
11890var forEach = (__webpack_require__(42092).forEach);
11891var setSpecies = __webpack_require__(96340);
11892var definePropertyModule = __webpack_require__(3070);
11893var getOwnPropertyDescriptorModule = __webpack_require__(31236);
11894var InternalStateModule = __webpack_require__(29909);
11895var inheritIfRequired = __webpack_require__(7
vendor: 8,317 bytes, lines 11895-12111
118959587);
11896
11897var getInternalState = InternalStateModule.get;
11898var setInternalState = InternalStateModule.set;
11899var enforceInternalState = InternalStateModule.enforce;
11900var nativeDefineProperty = definePropertyModule.f;
11901var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
11902var round = Math.round;
11903var RangeError = global.RangeError;
11904var ArrayBuffer = ArrayBufferModule.ArrayBuffer;
11905var ArrayBufferPrototype = ArrayBuffer.prototype;
11906var DataView = ArrayBufferModule.DataView;
11907var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
11908var TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;
11909var TypedArray = ArrayBufferViewCore.TypedArray;
11910var TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;
11911var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
11912var isTypedArray = ArrayBufferViewCore.isTypedArray;
11913var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
11914var WRONG_LENGTH = 'Wrong length';
11915
11916var fromList = function (C, list) {
11917  aTypedArrayConstructor(C);
11918  var index = 0;
11919  var length = list.length;
11920  var result = new C(length);
11921  while (length > index) result[index] = list[index++];
11922  return result;
11923};
11924
11925var addGetter = function (it, key) {
11926  nativeDefineProperty(it, key, { get: function () {
11927    return getInternalState(this)[key];
11928  } });
11929};
11930
11931var isArrayBuffer = function (it) {
11932  var klass;
11933  return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
11934};
11935
11936var isTypedArrayIndex = function (target, key) {
11937  return isTypedArray(target)
11938    && !isSymbol(key)
11939    && key in target
11940    && isIntegralNumber(+key)
11941    && key >= 0;
11942};
11943
11944var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
11945  key = toPropertyKey(key);
11946  return isTypedArrayIndex(target, key)
11947    ? createPropertyDescriptor(2, target[key])
11948    : nativeGetOwnPropertyDescriptor(target, key);
11949};
11950
11951var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
11952  key = toPropertyKey(key);
11953  if (isTypedArrayIndex(target, key)
11954    && isObject(descriptor)
11955    && hasOwn(descriptor, 'value')
11956    && !hasOwn(descriptor, 'get')
11957    && !hasOwn(descriptor, 'set')
11958    // TODO: add validation descriptor w/o calling accessors
11959    && !descriptor.configurable
11960    && (!hasOwn(descriptor, 'writable') || descriptor.writable)
11961    && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)
11962  ) {
11963    target[key] = descriptor.value;
11964    return target;
11965  } return nativeDefineProperty(target, key, descriptor);
11966};
11967
11968if (DESCRIPTORS) {
11969  if (!NATIVE_ARRAY_BUFFER_VIEWS) {
11970    getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;
11971    definePropertyModule.f = wrappedDefineProperty;
11972    addGetter(TypedArrayPrototype, 'buffer');
11973    addGetter(TypedArrayPrototype, 'byteOffset');
11974    addGetter(TypedArrayPrototype, 'byteLength');
11975    addGetter(TypedArrayPrototype, 'length');
11976  }
11977
11978  $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
11979    getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
11980    defineProperty: wrappedDefineProperty
11981  });
11982
11983  module.exports = function (TYPE, wrapper, CLAMPED) {
11984    var BYTES = TYPE.match(/\d+$/)[0] / 8;
11985    var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
11986    var GETTER = 'get' + TYPE;
11987    var SETTER = 'set' + TYPE;
11988    var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];
11989    var TypedArrayConstructor = NativeTypedArrayConstructor;
11990    var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
11991    var exported = {};
11992
11993    var getter = function (that, index) {
11994      var data = getInternalState(that);
11995      return data.view[GETTER](index * BYTES + data.byteOffset, true);
11996    };
11997
11998    var setter = function (that, index, value) {
11999      var data = getInternalState(that);
12000      if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
12001      data.view[SETTER](index * BYTES + data.byteOffset, value, true);
12002    };
12003
12004    var addElement = function (that, index) {
12005      nativeDefineProperty(that, index, {
12006        get: function () {
12007          return getter(this, index);
12008        },
12009        set: function (value) {
12010          return setter(this, index, value);
12011        },
12012        enumerable: true
12013      });
12014    };
12015
12016    if (!NATIVE_ARRAY_BUFFER_VIEWS) {
12017      TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
12018        anInstance(that, TypedArrayConstructorPrototype);
12019        var index = 0;
12020        var byteOffset = 0;
12021        var buffer, byteLength, length;
12022        if (!isObject(data)) {
12023          length = toIndex(data);
12024          byteLength = length * BYTES;
12025          buffer = new ArrayBuffer(byteLength);
12026        } else if (isArrayBuffer(data)) {
12027          buffer = data;
12028          byteOffset = toOffset(offset, BYTES);
12029          var $len = data.byteLength;
12030          if ($length === undefined) {
12031            if ($len % BYTES) throw RangeError(WRONG_LENGTH);
12032            byteLength = $len - byteOffset;
12033            if (byteLength < 0) throw RangeError(WRONG_LENGTH);
12034          } else {
12035            byteLength = toLength($length) * BYTES;
12036            if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);
12037          }
12038          length = byteLength / BYTES;
12039        } else if (isTypedArray(data)) {
12040          return fromList(TypedArrayConstructor, data);
12041        } else {
12042          return call(typedArrayFrom, TypedArrayConstructor, data);
12043        }
12044        setInternalState(that, {
12045          buffer: buffer,
12046          byteOffset: byteOffset,
12047          byteLength: byteLength,
12048          length: length,
12049          view: new DataView(buffer)
12050        });
12051        while (index < length) addElement(that, index++);
12052      });
12053
12054      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);
12055      TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);
12056    } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {
12057      TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
12058        anInstance(dummy, TypedArrayConstructorPrototype);
12059        return inheritIfRequired(function () {
12060          if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));
12061          if (isArrayBuffer(data)) return $length !== undefined
12062            ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)
12063            : typedArrayOffset !== undefined
12064              ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))
12065              : new NativeTypedArrayConstructor(data);
12066          if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
12067          return call(typedArrayFrom, TypedArrayConstructor, data);
12068        }(), dummy, TypedArrayConstructor);
12069      });
12070
12071      if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);
12072      forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {
12073        if (!(key in TypedArrayConstructor)) {
12074          createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);
12075        }
12076      });
12077      TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
12078    }
12079
12080    if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
12081      createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
12082    }
12083
12084    enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;
12085
12086    if (TYPED_ARRAY_TAG) {
12087      createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
12088    }
12089
12090    var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;
12091
12092    exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
12093
12094    $({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);
12095
12096    if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
12097      createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);
12098    }
12099
12100    if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
12101      createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);
12102    }
12103
12104    setSpecies(CONSTRUCTOR_NAME);
12105  };
12106} else module.exports = function () { /* empty */ };
12107
12108
12109/***/ }),
12110
12111/***/ 
vendor: 4,178 bytes, lines 12111-12244
1211163832:
12112/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12113
12114/* eslint-disable no-new -- required for testing */
12115var global = __webpack_require__(17854);
12116var fails = __webpack_require__(47293);
12117var checkCorrectnessOfIteration = __webpack_require__(17072);
12118var NATIVE_ARRAY_BUFFER_VIEWS = (__webpack_require__(90260).NATIVE_ARRAY_BUFFER_VIEWS);
12119
12120var ArrayBuffer = global.ArrayBuffer;
12121var Int8Array = global.Int8Array;
12122
12123module.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {
12124  Int8Array(1);
12125}) || !fails(function () {
12126  new Int8Array(-1);
12127}) || !checkCorrectnessOfIteration(function (iterable) {
12128  new Int8Array();
12129  new Int8Array(null);
12130  new Int8Array(1.5);
12131  new Int8Array(iterable);
12132}, true) || fails(function () {
12133  // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
12134  return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;
12135});
12136
12137
12138/***/ }),
12139
12140/***/ 43074:
12141/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12142
12143var arrayFromConstructorAndList = __webpack_require__(97745);
12144var typedArraySpeciesConstructor = __webpack_require__(66304);
12145
12146module.exports = function (instance, list) {
12147  return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);
12148};
12149
12150
12151/***/ }),
12152
12153/***/ 97321:
12154/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12155
12156var bind = __webpack_require__(49974);
12157var call = __webpack_require__(46916);
12158var aConstructor = __webpack_require__(39483);
12159var toObject = __webpack_require__(47908);
12160var lengthOfArrayLike = __webpack_require__(26244);
12161var getIterator = __webpack_require__(18554);
12162var getIteratorMethod = __webpack_require__(71246);
12163var isArrayIteratorMethod = __webpack_require__(97659);
12164var aTypedArrayConstructor = (__webpack_require__(90260).aTypedArrayConstructor);
12165
12166module.exports = function from(source /* , mapfn, thisArg */) {
12167  var C = aConstructor(this);
12168  var O = toObject(source);
12169  var argumentsLength = arguments.length;
12170  var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
12171  var mapping = mapfn !== undefined;
12172  var iteratorMethod = getIteratorMethod(O);
12173  var i, length, result, step, iterator, next;
12174  if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {
12175    iterator = getIterator(O, iteratorMethod);
12176    next = iterator.next;
12177    O = [];
12178    while (!(step = call(next, iterator)).done) {
12179      O.push(step.value);
12180    }
12181  }
12182  if (mapping && argumentsLength > 2) {
12183    mapfn = bind(mapfn, arguments[2]);
12184  }
12185  length = lengthOfArrayLike(O);
12186  result = new (aTypedArrayConstructor(C))(length);
12187  for (i = 0; length > i; i++) {
12188    result[i] = mapping ? mapfn(O[i], i) : O[i];
12189  }
12190  return result;
12191};
12192
12193
12194/***/ }),
12195
12196/***/ 66304:
12197/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12198
12199var ArrayBufferViewCore = __webpack_require__(90260);
12200var speciesConstructor = __webpack_require__(36707);
12201
12202var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
12203var getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;
12204
12205// a part of `TypedArraySpeciesCreate` abstract operation
12206// https://tc39.es/ecma262/#typedarray-species-create
12207module.exports = function (originalArray) {
12208  return aTypedArrayConstructor(speciesConstructor(originalArray, getTypedArrayConstructor(originalArray)));
12209};
12210
12211
12212/***/ }),
12213
12214/***/ 69711:
12215/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12216
12217var uncurryThis = __webpack_require__(1702);
12218
12219var id = 0;
12220var postfix = Math.random();
12221var toString = uncurryThis(1.0.toString);
12222
12223module.exports = function (key) {
12224  return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);
12225};
12226
12227
12228/***/ }),
12229
12230/***/ 85143:
12231/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12232
12233var fails = __webpack_require__(47293);
12234var wellKnownSymbol = __webpack_require__(5112);
12235var IS_PURE = __webpack_require__(31913);
12236
12237var ITERATOR = wellKnownSymbol('iterator');
12238
12239module.exports = !fails(function () {
12240  // eslint-disable-next-line unicorn/relative-url-style -- required for testing
12241  var url = new URL('b?a=1&b=2&c=3', 'http://a');
12242  var searchParams = url.searchParams;
12243  var result = '';
12244  url.pathname = 'c%20d';
vendor: 17,062 bytes, lines 12245-12766
12245  searchParams.forEach(function (value, key) {
12246    searchParams['delete']('b');
12247    result += key + value;
12248  });
12249  return (IS_PURE && !url.toJSON)
12250    || !searchParams.sort
12251    || url.href !== 'http://a/c%20d?a=1&c=3'
12252    || searchParams.get('c') !== '3'
12253    || String(new URLSearchParams('?a=1')) !== 'a=1'
12254    || !searchParams[ITERATOR]
12255    // throws in Edge
12256    || new URL('https://a@b').username !== 'a'
12257    || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'
12258    // not punycoded in Edge
12259    || new URL('http://тест').host !== 'xn--e1aybc'
12260    // not escaped in Chrome 62-
12261    || new URL('http://a#б').hash !== '#%D0%B1'
12262    // fails in Chrome 66-
12263    || result !== 'a1c3'
12264    // throws in Safari
12265    || new URL('http://x', undefined).host !== 'x';
12266});
12267
12268
12269/***/ }),
12270
12271/***/ 43307:
12272/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12273
12274/* eslint-disable es-x/no-symbol -- required for testing */
12275var NATIVE_SYMBOL = __webpack_require__(36293);
12276
12277module.exports = NATIVE_SYMBOL
12278  && !Symbol.sham
12279  && typeof Symbol.iterator == 'symbol';
12280
12281
12282/***/ }),
12283
12284/***/ 3353:
12285/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12286
12287var DESCRIPTORS = __webpack_require__(19781);
12288var fails = __webpack_require__(47293);
12289
12290// V8 ~ Chrome 36-
12291// https://bugs.chromium.org/p/v8/issues/detail?id=3334
12292module.exports = DESCRIPTORS && fails(function () {
12293  // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing
12294  return Object.defineProperty(function () { /* empty */ }, 'prototype', {
12295    value: 42,
12296    writable: false
12297  }).prototype != 42;
12298});
12299
12300
12301/***/ }),
12302
12303/***/ 48053:
12304/***/ ((module) => {
12305
12306var $TypeError = TypeError;
12307
12308module.exports = function (passed, required) {
12309  if (passed < required) throw $TypeError('Not enough arguments');
12310  return passed;
12311};
12312
12313
12314/***/ }),
12315
12316/***/ 94811:
12317/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12318
12319var global = __webpack_require__(17854);
12320var isCallable = __webpack_require__(60614);
12321
12322var WeakMap = global.WeakMap;
12323
12324module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));
12325
12326
12327/***/ }),
12328
12329/***/ 26800:
12330/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12331
12332var path = __webpack_require__(40857);
12333var hasOwn = __webpack_require__(92597);
12334var wrappedWellKnownSymbolModule = __webpack_require__(6061);
12335var defineProperty = (__webpack_require__(3070).f);
12336
12337module.exports = function (NAME) {
12338  var Symbol = path.Symbol || (path.Symbol = {});
12339  if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {
12340    value: wrappedWellKnownSymbolModule.f(NAME)
12341  });
12342};
12343
12344
12345/***/ }),
12346
12347/***/ 6061:
12348/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
12349
12350var wellKnownSymbol = __webpack_require__(5112);
12351
12352exports.f = wellKnownSymbol;
12353
12354
12355/***/ }),
12356
12357/***/ 5112:
12358/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12359
12360var global = __webpack_require__(17854);
12361var shared = __webpack_require__(72309);
12362var hasOwn = __webpack_require__(92597);
12363var uid = __webpack_require__(69711);
12364var NATIVE_SYMBOL = __webpack_require__(36293);
12365var USE_SYMBOL_AS_UID = __webpack_require__(43307);
12366
12367var WellKnownSymbolsStore = shared('wks');
12368var Symbol = global.Symbol;
12369var symbolFor = Symbol && Symbol['for'];
12370var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;
12371
12372module.exports = function (name) {
12373  if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {
12374    var description = 'Symbol.' + name;
12375    if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {
12376      WellKnownSymbolsStore[name] = Symbol[name];
12377    } else if (USE_SYMBOL_AS_UID && symbolFor) {
12378      WellKnownSymbolsStore[name] = symbolFor(description);
12379    } else {
12380      WellKnownSymbolsStore[name] = createWellKnownSymbol(description);
12381    }
12382  } return WellKnownSymbolsStore[name];
12383};
12384
12385
12386/***/ }),
12387
12388/***/ 81361:
12389/***/ ((module) => {
12390
12391// a string of all valid unicode whitespaces
12392module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
12393  '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
12394
12395
12396/***/ }),
12397
12398/***/ 89191:
12399/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
12400
12401"use strict";
12402
12403var getBuiltIn = __webpack_require__(35005);
12404var hasOwn = __webpack_require__(92597);
12405var createNonEnumerableProperty = __webpack_require__(68880);
12406var isPrototypeOf = __webpack_require__(47976);
12407var setPrototypeOf = __webpack_require__(27674);
12408var copyConstructorProperties = __webpack_require__(99920);
12409var proxyAccessor = __webpack_require__(2626);
12410var inheritIfRequired = __webpack_require__(79587);
12411var normalizeStringArgument = __webpack_require__(56277);
12412var installErrorCause = __webpack_require__(58340);
12413var clearErrorStack = __webpack_require__(11060);
12414var ERROR_STACK_INSTALLABLE = __webpack_require__(22914);
12415var DESCRIPTORS = __webpack_require__(19781);
12416var IS_PURE = __webpack_require__(31913);
12417
12418module.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
12419  var STACK_TRACE_LIMIT = 'stackTraceLimit';
12420  var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
12421  var path = FULL_NAME.split('.');
12422  var ERROR_NAME = path[path.length - 1];
12423  var OriginalError = getBuiltIn.apply(null, path);
12424
12425  if (!OriginalError) return;
12426
12427  var OriginalErrorPrototype = OriginalError.prototype;
12428
12429  // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006
12430  if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;
12431
12432  if (!FORCED) return OriginalError;
12433
12434  var BaseError = getBuiltIn('Error');
12435
12436  var WrappedError = wrapper(function (a, b) {
12437    var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);
12438    var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
12439    if (message !== undefined) createNonEnumerableProperty(result, 'message', message);
12440    if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(result, 'stack', clearErrorStack(result.stack, 2));
12441    if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
12442    if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
12443    return result;
12444  });
12445
12446  WrappedError.prototype = OriginalErrorPrototype;
12447
12448  if (ERROR_NAME !== 'Error') {
12449    if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
12450    else copyConstructorProperties(WrappedError, BaseError, { name: true });
12451  } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
12452    proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
12453    proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');
12454  }
12455
12456  copyConstructorProperties(WrappedError, OriginalError);
12457
12458  if (!IS_PURE) try {
12459    // Safari 13- bug: WebAssembly errors does not have a proper `.name`
12460    if (OriginalErrorPrototype.name !== ERROR_NAME) {
12461      createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);
12462    }
12463    OriginalErrorPrototype.constructor = WrappedError;
12464  } catch (error) { /* empty */ }
12465
12466  return WrappedError;
12467};
12468
12469
12470/***/ }),
12471
12472/***/ 32120:
12473/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12474
12475var $ = __webpack_require__(82109);
12476var getBuiltIn = __webpack_require__(35005);
12477var apply = __webpack_require__(22104);
12478var fails = __webpack_require__(47293);
12479var wrapErrorConstructorWithCause = __webpack_require__(89191);
12480
12481var AGGREGATE_ERROR = 'AggregateError';
12482var $AggregateError = getBuiltIn(AGGREGATE_ERROR);
12483
12484var FORCED = !fails(function () {
12485  return $AggregateError([1]).errors[0] !== 1;
12486}) && fails(function () {
12487  return $AggregateError([1], AGGREGATE_ERROR, { cause: 7 }).cause !== 7;
12488});
12489
12490// https://github.com/tc39/proposal-error-cause
12491$({ global: true, constructor: true, arity: 2, forced: FORCED }, {
12492  AggregateError: wrapErrorConstructorWithCause(AGGREGATE_ERROR, function (init) {
12493    // eslint-disable-next-line no-unused-vars -- required for functions `.length`
12494    return function AggregateError(errors, message) { return apply(init, this, arguments); };
12495  }, FORCED, true)
12496});
12497
12498
12499/***/ }),
12500
12501/***/ 56967:
12502/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12503
12504"use strict";
12505
12506var $ = __webpack_require__(82109);
12507var isPrototypeOf = __webpack_require__(47976);
12508var getPrototypeOf = __webpack_require__(79518);
12509var setPrototypeOf = __webpack_require__(27674);
12510var copyConstructorProperties = __webpack_require__(99920);
12511var create = __webpack_require__(70030);
12512var createNonEnumerableProperty = __webpack_require__(68880);
12513var createPropertyDescriptor = __webpack_require__(79114);
12514var clearErrorStack = __webpack_require__(11060);
12515var installErrorCause = __webpack_require__(58340);
12516var iterate = __webpack_require__(20408);
12517var normalizeStringArgument = __webpack_require__(56277);
12518var wellKnownSymbol = __webpack_require__(5112);
12519var ERROR_STACK_INSTALLABLE = __webpack_require__(22914);
12520
12521var TO_STRING_TAG = wellKnownSymbol('toStringTag');
12522var $Error = Error;
12523var push = [].push;
12524
12525var $AggregateError = function AggregateError(errors, message /* , options */) {
12526  var options = arguments.length > 2 ? arguments[2] : undefined;
12527  var isInstance = isPrototypeOf(AggregateErrorPrototype, this);
12528  var that;
12529  if (setPrototypeOf) {
12530    that = setPrototypeOf($Error(), isInstance ? getPrototypeOf(this) : AggregateErrorPrototype);
12531  } else {
12532    that = isInstance ? this : create(AggregateErrorPrototype);
12533    createNonEnumerableProperty(that, TO_STRING_TAG, 'Error');
12534  }
12535  if (message !== undefined) createNonEnumerableProperty(that, 'message', normalizeStringArgument(message));
12536  if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));
12537  installErrorCause(that, options);
12538  var errorsArray = [];
12539  iterate(errors, push, { that: errorsArray });
12540  createNonEnumerableProperty(that, 'errors', errorsArray);
12541  return that;
12542};
12543
12544if (setPrototypeOf) setPrototypeOf($AggregateError, $Error);
12545else copyConstructorProperties($AggregateError, $Error, { name: true });
12546
12547var AggregateErrorPrototype = $AggregateError.prototype = create($Error.prototype, {
12548  constructor: createPropertyDescriptor(1, $AggregateError),
12549  message: createPropertyDescriptor(1, ''),
12550  name: createPropertyDescriptor(1, 'AggregateError')
12551});
12552
12553// `AggregateError` constructor
12554// https://tc39.es/ecma262/#sec-aggregate-error-constructor
12555$({ global: true, constructor: true, arity: 2 }, {
12556  AggregateError: $AggregateError
12557});
12558
12559
12560/***/ }),
12561
12562/***/ 9170:
12563/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12564
12565// TODO: Remove this module from `core-js@4` since it's replaced to module below
12566__webpack_require__(56967);
12567
12568
12569/***/ }),
12570
12571/***/ 18264:
12572/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12573
12574"use strict";
12575
12576var $ = __webpack_require__(82109);
12577var global = __webpack_require__(17854);
12578var arrayBufferModule = __webpack_require__(13331);
12579var setSpecies = __webpack_require__(96340);
12580
12581var ARRAY_BUFFER = 'ArrayBuffer';
12582var ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];
12583var NativeArrayBuffer = global[ARRAY_BUFFER];
12584
12585// `ArrayBuffer` constructor
12586// https://tc39.es/ecma262/#sec-arraybuffer-constructor
12587$({ global: true, constructor: true, forced: NativeArrayBuffer !== ArrayBuffer }, {
12588  ArrayBuffer: ArrayBuffer
12589});
12590
12591setSpecies(ARRAY_BUFFER);
12592
12593
12594/***/ }),
12595
12596/***/ 76938:
12597/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12598
12599var $ = __webpack_require__(82109);
12600var ArrayBufferViewCore = __webpack_require__(90260);
12601
12602var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
12603
12604// `ArrayBuffer.isView` method
12605// https://tc39.es/ecma262/#sec-arraybuffer.isview
12606$({ target: 'ArrayBuffer', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
12607  isView: ArrayBufferViewCore.isView
12608});
12609
12610
12611/***/ }),
12612
12613/***/ 39575:
12614/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12615
12616"use strict";
12617
12618var $ = __webpack_require__(82109);
12619var uncurryThis = __webpack_require__(1702);
12620var fails = __webpack_require__(47293);
12621var ArrayBufferModule = __webpack_require__(13331);
12622var anObject = __webpack_require__(19670);
12623var toAbsoluteIndex = __webpack_require__(51400);
12624var toLength = __webpack_require__(17466);
12625var speciesConstructor = __webpack_require__(36707);
12626
12627var ArrayBuffer = ArrayBufferModule.ArrayBuffer;
12628var DataView = ArrayBufferModule.DataView;
12629var DataViewPrototype = DataView.prototype;
12630var nativeArrayBufferSlice = uncurryThis(ArrayBuffer.prototype.slice);
12631var getUint8 = uncurryThis(DataViewPrototype.getUint8);
12632var setUint8 = uncurryThis(DataViewPrototype.setUint8);
12633
12634var INCORRECT_SLICE = fails(function () {
12635  return !new ArrayBuffer(2).slice(1, undefined).byteLength;
12636});
12637
12638// `ArrayBuffer.prototype.slice` method
12639// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice
12640$({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
12641  slice: function slice(start, end) {
12642    if (nativeArrayBufferSlice && end === undefined) {
12643      return nativeArrayBufferSlice(anObject(this), start); // FF fix
12644    }
12645    var length = anObject(this).byteLength;
12646    var first = toAbsoluteIndex(start, length);
12647    var fin = toAbsoluteIndex(end === undefined ? length : end, length);
12648    var result = new (speciesConstructor(this, ArrayBuffer))(toLength(fin - first));
12649    var viewSource = new DataView(this);
12650    var viewTarget = new DataView(result);
12651    var index = 0;
12652    while (first < fin) {
12653      setUint8(viewTarget, index++, getUint8(viewSource, first++));
12654    } return result;
12655  }
12656});
12657
12658
12659/***/ }),
12660
12661/***/ 52262:
12662/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12663
12664"use strict";
12665
12666var $ = __webpack_require__(82109);
12667var toObject = __webpack_require__(47908);
12668var lengthOfArrayLike = __webpack_require__(26244);
12669var toIntegerOrInfinity = __webpack_require__(19303);
12670var addToUnscopables = __webpack_require__(51223);
12671
12672// `Array.prototype.at` method
12673// https://github.com/tc39/proposal-relative-indexing-method
12674$({ target: 'Array', proto: true }, {
12675  at: function at(index) {
12676    var O = toObject(this);
12677    var len = lengthOfArrayLike(O);
12678    var relativeIndex = toIntegerOrInfinity(index);
12679    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
12680    return (k < 0 || k >= len) ? undefined : O[k];
12681  }
12682});
12683
12684addToUnscopables('at');
12685
12686
12687/***/ }),
12688
12689/***/ 92222:
12690/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12691
12692"use strict";
12693
12694var $ = __webpack_require__(82109);
12695var fails = __webpack_require__(47293);
12696var isArray = __webpack_require__(43157);
12697var isObject = __webpack_require__(70111);
12698var toObject = __webpack_require__(47908);
12699var lengthOfArrayLike = __webpack_require__(26244);
12700var doesNotExceedSafeInteger = __webpack_require__(7207);
12701var createProperty = __webpack_require__(86135);
12702var arraySpeciesCreate = __webpack_require__(65417);
12703var arrayMethodHasSpeciesSupport = __webpack_require__(81194);
12704var wellKnownSymbol = __webpack_require__(5112);
12705var V8_VERSION = __webpack_require__(7392);
12706
12707var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');
12708
12709// We can't use this feature detection in V8 since it causes
12710// deoptimization and serious performance degradation
12711// https://github.com/zloirock/core-js/issues/679
12712var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {
12713  var array = [];
12714  array[IS_CONCAT_SPREADABLE] = false;
12715  return array.concat()[0] !== array;
12716});
12717
12718var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');
12719
12720var isConcatSpreadable = function (O) {
12721  if (!isObject(O)) return false;
12722  var spreadable = O[IS_CONCAT_SPREADABLE];
12723  return spreadable !== undefined ? !!spreadable : isArray(O);
12724};
12725
12726var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
12727
12728// `Array.prototype.concat` method
12729// https://tc39.es/ecma262/#sec-array.prototype.concat
12730// with adding support of @@isConcatSpreadable and @@species
12731$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {
12732  // eslint-disable-next-line no-unused-vars -- required for `.length`
12733  concat: function concat(arg) {
12734    var O = toObject(this);
12735    var A = arraySpeciesCreate(O, 0);
12736    var n = 0;
12737    var i, k, length, len, E;
12738    for (i = -1, length = arguments.length; i < length; i++) {
12739      E = i === -1 ? O : arguments[i];
12740      if (isConcatSpreadable(E)) {
12741        len = lengthOfArrayLike(E);
12742        doesNotExceedSafeInteger(n + len);
12743        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);
12744      } else {
12745        doesNotExceedSafeInteger(n + 1);
12746        createProperty(A, n++, E);
12747      }
12748    }
12749    A.length = n;
12750    return A;
12751  }
12752});
12753
12754
12755/***/ }),
12756
12757/***/ 50545:
12758/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12759
12760var $ = __webpack_require__(82109);
12761var copyWithin = __webpack_require__(1048);
12762var addToUnscopables = __webpack_require__(51223);
12763
12764// `Array.prototype.copyWithin` method
12765// https://tc39.es/ecma262/#sec-array.prototype.copywithin
12766$({ target: 'Array', proto: true }, {
vendor: 4,793 bytes, lines 12767-12942
12767  copyWithin: copyWithin
12768});
12769
12770// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
12771addToUnscopables('copyWithin');
12772
12773
12774/***/ }),
12775
12776/***/ 26541:
12777/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12778
12779"use strict";
12780
12781var $ = __webpack_require__(82109);
12782var $every = (__webpack_require__(42092).every);
12783var arrayMethodIsStrict = __webpack_require__(9341);
12784
12785var STRICT_METHOD = arrayMethodIsStrict('every');
12786
12787// `Array.prototype.every` method
12788// https://tc39.es/ecma262/#sec-array.prototype.every
12789$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {
12790  every: function every(callbackfn /* , thisArg */) {
12791    return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12792  }
12793});
12794
12795
12796/***/ }),
12797
12798/***/ 43290:
12799/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12800
12801var $ = __webpack_require__(82109);
12802var fill = __webpack_require__(21285);
12803var addToUnscopables = __webpack_require__(51223);
12804
12805// `Array.prototype.fill` method
12806// https://tc39.es/ecma262/#sec-array.prototype.fill
12807$({ target: 'Array', proto: true }, {
12808  fill: fill
12809});
12810
12811// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
12812addToUnscopables('fill');
12813
12814
12815/***/ }),
12816
12817/***/ 57327:
12818/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12819
12820"use strict";
12821
12822var $ = __webpack_require__(82109);
12823var $filter = (__webpack_require__(42092).filter);
12824var arrayMethodHasSpeciesSupport = __webpack_require__(81194);
12825
12826var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
12827
12828// `Array.prototype.filter` method
12829// https://tc39.es/ecma262/#sec-array.prototype.filter
12830// with adding support of @@species
12831$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
12832  filter: function filter(callbackfn /* , thisArg */) {
12833    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12834  }
12835});
12836
12837
12838/***/ }),
12839
12840/***/ 34553:
12841/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12842
12843"use strict";
12844
12845var $ = __webpack_require__(82109);
12846var $findIndex = (__webpack_require__(42092).findIndex);
12847var addToUnscopables = __webpack_require__(51223);
12848
12849var FIND_INDEX = 'findIndex';
12850var SKIPS_HOLES = true;
12851
12852// Shouldn't skip holes
12853if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });
12854
12855// `Array.prototype.findIndex` method
12856// https://tc39.es/ecma262/#sec-array.prototype.findindex
12857$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
12858  findIndex: function findIndex(callbackfn /* , that = undefined */) {
12859    return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12860  }
12861});
12862
12863// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
12864addToUnscopables(FIND_INDEX);
12865
12866
12867/***/ }),
12868
12869/***/ 77287:
12870/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12871
12872"use strict";
12873
12874var $ = __webpack_require__(82109);
12875var $findLastIndex = (__webpack_require__(9671).findLastIndex);
12876var addToUnscopables = __webpack_require__(51223);
12877
12878// `Array.prototype.findLastIndex` method
12879// https://github.com/tc39/proposal-array-find-from-last
12880$({ target: 'Array', proto: true }, {
12881  findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) {
12882    return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12883  }
12884});
12885
12886addToUnscopables('findLastIndex');
12887
12888
12889/***/ }),
12890
12891/***/ 67635:
12892/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12893
12894"use strict";
12895
12896var $ = __webpack_require__(82109);
12897var $findLast = (__webpack_require__(9671).findLast);
12898var addToUnscopables = __webpack_require__(51223);
12899
12900// `Array.prototype.findLast` method
12901// https://github.com/tc39/proposal-array-find-from-last
12902$({ target: 'Array', proto: true }, {
12903  findLast: function findLast(callbackfn /* , that = undefined */) {
12904    return $findLast(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12905  }
12906});
12907
12908addToUnscopables('findLast');
12909
12910
12911/***/ }),
12912
12913/***/ 69826:
12914/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12915
12916"use strict";
12917
12918var $ = __webpack_require__(82109);
12919var $find = (__webpack_require__(42092).find);
12920var addToUnscopables = __webpack_require__(51223);
12921
12922var FIND = 'find';
12923var SKIPS_HOLES = true;
12924
12925// Shouldn't skip holes
12926if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
12927
12928// `Array.prototype.find` method
12929// https://tc39.es/ecma262/#sec-array.prototype.find
12930$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
12931  find: function find(callbackfn /* , that = undefined */) {
12932    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12933  }
12934});
12935
12936// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
12937addToUnscopables(FIND);
12938
12939
12940/***/ }),
12941
12942/***/ 86535:
vendor: 4,922 bytes, lines 12943-13106
12943/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12944
12945"use strict";
12946
12947var $ = __webpack_require__(82109);
12948var flattenIntoArray = __webpack_require__(6790);
12949var aCallable = __webpack_require__(19662);
12950var toObject = __webpack_require__(47908);
12951var lengthOfArrayLike = __webpack_require__(26244);
12952var arraySpeciesCreate = __webpack_require__(65417);
12953
12954// `Array.prototype.flatMap` method
12955// https://tc39.es/ecma262/#sec-array.prototype.flatmap
12956$({ target: 'Array', proto: true }, {
12957  flatMap: function flatMap(callbackfn /* , thisArg */) {
12958    var O = toObject(this);
12959    var sourceLen = lengthOfArrayLike(O);
12960    var A;
12961    aCallable(callbackfn);
12962    A = arraySpeciesCreate(O, 0);
12963    A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
12964    return A;
12965  }
12966});
12967
12968
12969/***/ }),
12970
12971/***/ 84944:
12972/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
12973
12974"use strict";
12975
12976var $ = __webpack_require__(82109);
12977var flattenIntoArray = __webpack_require__(6790);
12978var toObject = __webpack_require__(47908);
12979var lengthOfArrayLike = __webpack_require__(26244);
12980var toIntegerOrInfinity = __webpack_require__(19303);
12981var arraySpeciesCreate = __webpack_require__(65417);
12982
12983// `Array.prototype.flat` method
12984// https://tc39.es/ecma262/#sec-array.prototype.flat
12985$({ target: 'Array', proto: true }, {
12986  flat: function flat(/* depthArg = 1 */) {
12987    var depthArg = arguments.length ? arguments[0] : undefined;
12988    var O = toObject(this);
12989    var sourceLen = lengthOfArrayLike(O);
12990    var A = arraySpeciesCreate(O, 0);
12991    A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));
12992    return A;
12993  }
12994});
12995
12996
12997/***/ }),
12998
12999/***/ 89554:
13000/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13001
13002"use strict";
13003
13004var $ = __webpack_require__(82109);
13005var forEach = __webpack_require__(18533);
13006
13007// `Array.prototype.forEach` method
13008// https://tc39.es/ecma262/#sec-array.prototype.foreach
13009// eslint-disable-next-line es-x/no-array-prototype-foreach -- safe
13010$({ target: 'Array', proto: true, forced: [].forEach != forEach }, {
13011  forEach: forEach
13012});
13013
13014
13015/***/ }),
13016
13017/***/ 91038:
13018/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13019
13020var $ = __webpack_require__(82109);
13021var from = __webpack_require__(48457);
13022var checkCorrectnessOfIteration = __webpack_require__(17072);
13023
13024var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {
13025  // eslint-disable-next-line es-x/no-array-from -- required for testing
13026  Array.from(iterable);
13027});
13028
13029// `Array.from` method
13030// https://tc39.es/ecma262/#sec-array.from
13031$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {
13032  from: from
13033});
13034
13035
13036/***/ }),
13037
13038/***/ 26699:
13039/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13040
13041"use strict";
13042
13043var $ = __webpack_require__(82109);
13044var $includes = (__webpack_require__(41318).includes);
13045var fails = __webpack_require__(47293);
13046var addToUnscopables = __webpack_require__(51223);
13047
13048// FF99+ bug
13049var BROKEN_ON_SPARSE = fails(function () {
13050  return !Array(1).includes();
13051});
13052
13053// `Array.prototype.includes` method
13054// https://tc39.es/ecma262/#sec-array.prototype.includes
13055$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {
13056  includes: function includes(el /* , fromIndex = 0 */) {
13057    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
13058  }
13059});
13060
13061// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
13062addToUnscopables('includes');
13063
13064
13065/***/ }),
13066
13067/***/ 82772:
13068/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13069
13070"use strict";
13071
13072/* eslint-disable es-x/no-array-prototype-indexof -- required for testing */
13073var $ = __webpack_require__(82109);
13074var uncurryThis = __webpack_require__(1702);
13075var $indexOf = (__webpack_require__(41318).indexOf);
13076var arrayMethodIsStrict = __webpack_require__(9341);
13077
13078var nativeIndexOf = uncurryThis([].indexOf);
13079
13080var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;
13081var STRICT_METHOD = arrayMethodIsStrict('indexOf');
13082
13083// `Array.prototype.indexOf` method
13084// https://tc39.es/ecma262/#sec-array.prototype.indexof
13085$({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {
13086  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
13087    var fromIndex = arguments.length > 1 ? arguments[1] : undefined;
13088    return NEGATIVE_ZERO
13089      // convert -0 to +0
13090      ? nativeIndexOf(this, searchElement, fromIndex) || 0
13091      : $indexOf(this, searchElement, fromIndex);
13092  }
13093});
13094
13095
13096/***/ }),
13097
13098/***/ 79753:
13099/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13100
13101var $ = __webpack_require__(82109);
13102var isArray = __webpack_require__(43157);
13103
13104// `Array.isArray` method
13105// https://tc39.es/ecma262/#sec-array.isarray
13106$({ target: 'Array', stat: true }, {
vendor: 5,234 bytes, lines 13107-13272
13107  isArray: isArray
13108});
13109
13110
13111/***/ }),
13112
13113/***/ 66992:
13114/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
13115
13116"use strict";
13117
13118var toIndexedObject = __webpack_require__(45656);
13119var addToUnscopables = __webpack_require__(51223);
13120var Iterators = __webpack_require__(97497);
13121var InternalStateModule = __webpack_require__(29909);
13122var defineProperty = (__webpack_require__(3070).f);
13123var defineIterator = __webpack_require__(51656);
13124var IS_PURE = __webpack_require__(31913);
13125var DESCRIPTORS = __webpack_require__(19781);
13126
13127var ARRAY_ITERATOR = 'Array Iterator';
13128var setInternalState = InternalStateModule.set;
13129var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
13130
13131// `Array.prototype.entries` method
13132// https://tc39.es/ecma262/#sec-array.prototype.entries
13133// `Array.prototype.keys` method
13134// https://tc39.es/ecma262/#sec-array.prototype.keys
13135// `Array.prototype.values` method
13136// https://tc39.es/ecma262/#sec-array.prototype.values
13137// `Array.prototype[@@iterator]` method
13138// https://tc39.es/ecma262/#sec-array.prototype-@@iterator
13139// `CreateArrayIterator` internal method
13140// https://tc39.es/ecma262/#sec-createarrayiterator
13141module.exports = defineIterator(Array, 'Array', function (iterated, kind) {
13142  setInternalState(this, {
13143    type: ARRAY_ITERATOR,
13144    target: toIndexedObject(iterated), // target
13145    index: 0,                          // next index
13146    kind: kind                         // kind
13147  });
13148// `%ArrayIteratorPrototype%.next` method
13149// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
13150}, function () {
13151  var state = getInternalState(this);
13152  var target = state.target;
13153  var kind = state.kind;
13154  var index = state.index++;
13155  if (!target || index >= target.length) {
13156    state.target = undefined;
13157    return { value: undefined, done: true };
13158  }
13159  if (kind == 'keys') return { value: index, done: false };
13160  if (kind == 'values') return { value: target[index], done: false };
13161  return { value: [index, target[index]], done: false };
13162}, 'values');
13163
13164// argumentsList[@@iterator] is %ArrayProto_values%
13165// https://tc39.es/ecma262/#sec-createunmappedargumentsobject
13166// https://tc39.es/ecma262/#sec-createmappedargumentsobject
13167var values = Iterators.Arguments = Iterators.Array;
13168
13169// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
13170addToUnscopables('keys');
13171addToUnscopables('values');
13172addToUnscopables('entries');
13173
13174// V8 ~ Chrome 45- bug
13175if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {
13176  defineProperty(values, 'name', { value: 'values' });
13177} catch (error) { /* empty */ }
13178
13179
13180/***/ }),
13181
13182/***/ 69600:
13183/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13184
13185"use strict";
13186
13187var $ = __webpack_require__(82109);
13188var uncurryThis = __webpack_require__(1702);
13189var IndexedObject = __webpack_require__(68361);
13190var toIndexedObject = __webpack_require__(45656);
13191var arrayMethodIsStrict = __webpack_require__(9341);
13192
13193var nativeJoin = uncurryThis([].join);
13194
13195var ES3_STRINGS = IndexedObject != Object;
13196var STRICT_METHOD = arrayMethodIsStrict('join', ',');
13197
13198// `Array.prototype.join` method
13199// https://tc39.es/ecma262/#sec-array.prototype.join
13200$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {
13201  join: function join(separator) {
13202    return nativeJoin(toIndexedObject(this), separator === undefined ? ',' : separator);
13203  }
13204});
13205
13206
13207/***/ }),
13208
13209/***/ 94986:
13210/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13211
13212var $ = __webpack_require__(82109);
13213var lastIndexOf = __webpack_require__(86583);
13214
13215// `Array.prototype.lastIndexOf` method
13216// https://tc39.es/ecma262/#sec-array.prototype.lastindexof
13217// eslint-disable-next-line es-x/no-array-prototype-lastindexof -- required for testing
13218$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {
13219  lastIndexOf: lastIndexOf
13220});
13221
13222
13223/***/ }),
13224
13225/***/ 21249:
13226/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13227
13228"use strict";
13229
13230var $ = __webpack_require__(82109);
13231var $map = (__webpack_require__(42092).map);
13232var arrayMethodHasSpeciesSupport = __webpack_require__(81194);
13233
13234var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
13235
13236// `Array.prototype.map` method
13237// https://tc39.es/ecma262/#sec-array.prototype.map
13238// with adding support of @@species
13239$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
13240  map: function map(callbackfn /* , thisArg */) {
13241    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
13242  }
13243});
13244
13245
13246/***/ }),
13247
13248/***/ 26572:
13249/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13250
13251"use strict";
13252
13253var $ = __webpack_require__(82109);
13254var fails = __webpack_require__(47293);
13255var isConstructor = __webpack_require__(4411);
13256var createProperty = __webpack_require__(86135);
13257
13258var $Array = Array;
13259
13260var ISNT_GENERIC = fails(function () {
13261  function F() { /* empty */ }
13262  // eslint-disable-next-line es-x/no-array-of -- safe
13263  return !($Array.of.call(F) instanceof F);
13264});
13265
13266// `Array.of` method
13267// https://tc39.es/ecma262/#sec-array.of
13268// WebKit Array.of isn't generic
13269$({ target: 'Array', stat: true, forced: ISNT_GENERIC }, {
13270  of: function of(/* ...args */) {
13271    var index = 0;
13272    var argumentsLength = arguments.length;
vendor: 12,730 bytes, lines 13273-13673
13273    var result = new (isConstructor(this) ? this : $Array)(argumentsLength);
13274    while (argumentsLength > index) createProperty(result, index, arguments[index++]);
13275    result.length = argumentsLength;
13276    return result;
13277  }
13278});
13279
13280
13281/***/ }),
13282
13283/***/ 57658:
13284/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13285
13286"use strict";
13287
13288var $ = __webpack_require__(82109);
13289var toObject = __webpack_require__(47908);
13290var lengthOfArrayLike = __webpack_require__(26244);
13291var setArrayLength = __webpack_require__(83658);
13292var doesNotExceedSafeInteger = __webpack_require__(7207);
13293var fails = __webpack_require__(47293);
13294
13295var INCORRECT_TO_LENGTH = fails(function () {
13296  return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;
13297});
13298
13299// V8 and Safari <= 15.4, FF < 23 throws InternalError
13300// https://bugs.chromium.org/p/v8/issues/detail?id=12681
13301var SILENT_ON_NON_WRITABLE_LENGTH = !function () {
13302  try {
13303    // eslint-disable-next-line es-x/no-object-defineproperty -- safe
13304    Object.defineProperty([], 'length', { writable: false }).push();
13305  } catch (error) {
13306    return error instanceof TypeError;
13307  }
13308}();
13309
13310// `Array.prototype.push` method
13311// https://tc39.es/ecma262/#sec-array.prototype.push
13312$({ target: 'Array', proto: true, arity: 1, forced: INCORRECT_TO_LENGTH || SILENT_ON_NON_WRITABLE_LENGTH }, {
13313  // eslint-disable-next-line no-unused-vars -- required for `.length`
13314  push: function push(item) {
13315    var O = toObject(this);
13316    var len = lengthOfArrayLike(O);
13317    var argCount = arguments.length;
13318    doesNotExceedSafeInteger(len + argCount);
13319    for (var i = 0; i < argCount; i++) {
13320      O[len] = arguments[i];
13321      len++;
13322    }
13323    setArrayLength(O, len);
13324    return len;
13325  }
13326});
13327
13328
13329/***/ }),
13330
13331/***/ 96644:
13332/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13333
13334"use strict";
13335
13336var $ = __webpack_require__(82109);
13337var $reduceRight = (__webpack_require__(53671).right);
13338var arrayMethodIsStrict = __webpack_require__(9341);
13339var CHROME_VERSION = __webpack_require__(7392);
13340var IS_NODE = __webpack_require__(35268);
13341
13342var STRICT_METHOD = arrayMethodIsStrict('reduceRight');
13343// Chrome 80-82 has a critical bug
13344// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
13345var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
13346
13347// `Array.prototype.reduceRight` method
13348// https://tc39.es/ecma262/#sec-array.prototype.reduceright
13349$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {
13350  reduceRight: function reduceRight(callbackfn /* , initialValue */) {
13351    return $reduceRight(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
13352  }
13353});
13354
13355
13356/***/ }),
13357
13358/***/ 85827:
13359/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13360
13361"use strict";
13362
13363var $ = __webpack_require__(82109);
13364var $reduce = (__webpack_require__(53671).left);
13365var arrayMethodIsStrict = __webpack_require__(9341);
13366var CHROME_VERSION = __webpack_require__(7392);
13367var IS_NODE = __webpack_require__(35268);
13368
13369var STRICT_METHOD = arrayMethodIsStrict('reduce');
13370// Chrome 80-82 has a critical bug
13371// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
13372var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
13373
13374// `Array.prototype.reduce` method
13375// https://tc39.es/ecma262/#sec-array.prototype.reduce
13376$({ target: 'Array', proto: true, forced: !STRICT_METHOD || CHROME_BUG }, {
13377  reduce: function reduce(callbackfn /* , initialValue */) {
13378    var length = arguments.length;
13379    return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);
13380  }
13381});
13382
13383
13384/***/ }),
13385
13386/***/ 65069:
13387/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13388
13389"use strict";
13390
13391var $ = __webpack_require__(82109);
13392var uncurryThis = __webpack_require__(1702);
13393var isArray = __webpack_require__(43157);
13394
13395var nativeReverse = uncurryThis([].reverse);
13396var test = [1, 2];
13397
13398// `Array.prototype.reverse` method
13399// https://tc39.es/ecma262/#sec-array.prototype.reverse
13400// fix for Safari 12.0 bug
13401// https://bugs.webkit.org/show_bug.cgi?id=188794
13402$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {
13403  reverse: function reverse() {
13404    // eslint-disable-next-line no-self-assign -- dirty hack
13405    if (isArray(this)) this.length = this.length;
13406    return nativeReverse(this);
13407  }
13408});
13409
13410
13411/***/ }),
13412
13413/***/ 47042:
13414/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13415
13416"use strict";
13417
13418var $ = __webpack_require__(82109);
13419var isArray = __webpack_require__(43157);
13420var isConstructor = __webpack_require__(4411);
13421var isObject = __webpack_require__(70111);
13422var toAbsoluteIndex = __webpack_require__(51400);
13423var lengthOfArrayLike = __webpack_require__(26244);
13424var toIndexedObject = __webpack_require__(45656);
13425var createProperty = __webpack_require__(86135);
13426var wellKnownSymbol = __webpack_require__(5112);
13427var arrayMethodHasSpeciesSupport = __webpack_require__(81194);
13428var nativeSlice = __webpack_require__(50206);
13429
13430var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');
13431
13432var SPECIES = wellKnownSymbol('species');
13433var $Array = Array;
13434var max = Math.max;
13435
13436// `Array.prototype.slice` method
13437// https://tc39.es/ecma262/#sec-array.prototype.slice
13438// fallback for not array-like ES3 strings and DOM objects
13439$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
13440  slice: function slice(start, end) {
13441    var O = toIndexedObject(this);
13442    var length = lengthOfArrayLike(O);
13443    var k = toAbsoluteIndex(start, length);
13444    var fin = toAbsoluteIndex(end === undefined ? length : end, length);
13445    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
13446    var Constructor, result, n;
13447    if (isArray(O)) {
13448      Constructor = O.constructor;
13449      // cross-realm fallback
13450      if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {
13451        Constructor = undefined;
13452      } else if (isObject(Constructor)) {
13453        Constructor = Constructor[SPECIES];
13454        if (Constructor === null) Constructor = undefined;
13455      }
13456      if (Constructor === $Array || Constructor === undefined) {
13457        return nativeSlice(O, k, fin);
13458      }
13459    }
13460    result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));
13461    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
13462    result.length = n;
13463    return result;
13464  }
13465});
13466
13467
13468/***/ }),
13469
13470/***/ 5212:
13471/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13472
13473"use strict";
13474
13475var $ = __webpack_require__(82109);
13476var $some = (__webpack_require__(42092).some);
13477var arrayMethodIsStrict = __webpack_require__(9341);
13478
13479var STRICT_METHOD = arrayMethodIsStrict('some');
13480
13481// `Array.prototype.some` method
13482// https://tc39.es/ecma262/#sec-array.prototype.some
13483$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {
13484  some: function some(callbackfn /* , thisArg */) {
13485    return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
13486  }
13487});
13488
13489
13490/***/ }),
13491
13492/***/ 2707:
13493/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13494
13495"use strict";
13496
13497var $ = __webpack_require__(82109);
13498var uncurryThis = __webpack_require__(1702);
13499var aCallable = __webpack_require__(19662);
13500var toObject = __webpack_require__(47908);
13501var lengthOfArrayLike = __webpack_require__(26244);
13502var deletePropertyOrThrow = __webpack_require__(85117);
13503var toString = __webpack_require__(41340);
13504var fails = __webpack_require__(47293);
13505var internalSort = __webpack_require__(94362);
13506var arrayMethodIsStrict = __webpack_require__(9341);
13507var FF = __webpack_require__(68886);
13508var IE_OR_EDGE = __webpack_require__(30256);
13509var V8 = __webpack_require__(7392);
13510var WEBKIT = __webpack_require__(98008);
13511
13512var test = [];
13513var nativeSort = uncurryThis(test.sort);
13514var push = uncurryThis(test.push);
13515
13516// IE8-
13517var FAILS_ON_UNDEFINED = fails(function () {
13518  test.sort(undefined);
13519});
13520// V8 bug
13521var FAILS_ON_NULL = fails(function () {
13522  test.sort(null);
13523});
13524// Old WebKit
13525var STRICT_METHOD = arrayMethodIsStrict('sort');
13526
13527var STABLE_SORT = !fails(function () {
13528  // feature detection can be too slow, so check engines versions
13529  if (V8) return V8 < 70;
13530  if (FF && FF > 3) return;
13531  if (IE_OR_EDGE) return true;
13532  if (WEBKIT) return WEBKIT < 603;
13533
13534  var result = '';
13535  var code, chr, value, index;
13536
13537  // generate an array with more 512 elements (Chakra and old V8 fails only in this case)
13538  for (code = 65; code < 76; code++) {
13539    chr = String.fromCharCode(code);
13540
13541    switch (code) {
13542      case 66: case 69: case 70: case 72: value = 3; break;
13543      case 68: case 71: value = 4; break;
13544      default: value = 2;
13545    }
13546
13547    for (index = 0; index < 47; index++) {
13548      test.push({ k: chr + index, v: value });
13549    }
13550  }
13551
13552  test.sort(function (a, b) { return b.v - a.v; });
13553
13554  for (index = 0; index < test.length; index++) {
13555    chr = test[index].k.charAt(0);
13556    if (result.charAt(result.length - 1) !== chr) result += chr;
13557  }
13558
13559  return result !== 'DGBEFHACIJK';
13560});
13561
13562var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;
13563
13564var getSortCompare = function (comparefn) {
13565  return function (x, y) {
13566    if (y === undefined) return -1;
13567    if (x === undefined) return 1;
13568    if (comparefn !== undefined) return +comparefn(x, y) || 0;
13569    return toString(x) > toString(y) ? 1 : -1;
13570  };
13571};
13572
13573// `Array.prototype.sort` method
13574// https://tc39.es/ecma262/#sec-array.prototype.sort
13575$({ target: 'Array', proto: true, forced: FORCED }, {
13576  sort: function sort(comparefn) {
13577    if (comparefn !== undefined) aCallable(comparefn);
13578
13579    var array = toObject(this);
13580
13581    if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);
13582
13583    var items = [];
13584    var arrayLength = lengthOfArrayLike(array);
13585    var itemsLength, index;
13586
13587    for (index = 0; index < arrayLength; index++) {
13588      if (index in array) push(items, array[index]);
13589    }
13590
13591    internalSort(items, getSortCompare(comparefn));
13592
13593    itemsLength = lengthOfArrayLike(items);
13594    index = 0;
13595
13596    while (index < itemsLength) array[index] = items[index++];
13597    while (index < arrayLength) deletePropertyOrThrow(array, index++);
13598
13599    return array;
13600  }
13601});
13602
13603
13604/***/ }),
13605
13606/***/ 38706:
13607/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13608
13609var setSpecies = __webpack_require__(96340);
13610
13611// `Array[@@species]` getter
13612// https://tc39.es/ecma262/#sec-get-array-@@species
13613setSpecies('Array');
13614
13615
13616/***/ }),
13617
13618/***/ 40561:
13619/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13620
13621"use strict";
13622
13623var $ = __webpack_require__(82109);
13624var toObject = __webpack_require__(47908);
13625var toAbsoluteIndex = __webpack_require__(51400);
13626var toIntegerOrInfinity = __webpack_require__(19303);
13627var lengthOfArrayLike = __webpack_require__(26244);
13628var setArrayLength = __webpack_require__(83658);
13629var doesNotExceedSafeInteger = __webpack_require__(7207);
13630var arraySpeciesCreate = __webpack_require__(65417);
13631var createProperty = __webpack_require__(86135);
13632var deletePropertyOrThrow = __webpack_require__(85117);
13633var arrayMethodHasSpeciesSupport = __webpack_require__(81194);
13634
13635var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');
13636
13637var max = Math.max;
13638var min = Math.min;
13639
13640// `Array.prototype.splice` method
13641// https://tc39.es/ecma262/#sec-array.prototype.splice
13642// with adding support of @@species
13643$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
13644  splice: function splice(start, deleteCount /* , ...items */) {
13645    var O = toObject(this);
13646    var len = lengthOfArrayLike(O);
13647    var actualStart = toAbsoluteIndex(start, len);
13648    var argumentsLength = arguments.length;
13649    var insertCount, actualDeleteCount, A, k, from, to;
13650    if (argumentsLength === 0) {
13651      insertCount = actualDeleteCount = 0;
13652    } else if (argumentsLength === 1) {
13653      insertCount = 0;
13654      actualDeleteCount = len - actualStart;
13655    } else {
13656      insertCount = argumentsLength - 2;
13657      actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);
13658    }
13659    doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);
13660    A = arraySpeciesCreate(O, actualDeleteCount);
13661    for (k = 0; k < actualDeleteCount; k++) {
13662      from = actualStart + k;
13663      if (from in O) createProperty(A, k, O[from]);
13664    }
13665    A.length = actualDeleteCount;
13666    if (insertCount < actualDeleteCount) {
13667      for (k = actualStart; k < len - actualDeleteCount; k++) {
13668        from = k + actualDeleteCount;
13669        to = k + insertCount;
13670        if (from in O) O[to] = O[from];
13671        else deletePropertyOrThrow(O, to);
13672      }
13673      for (k = len; k > len - actualDeleteCount + insertCount;
vendor: 4,505 bytes, lines 13673-13833
13673 k--) deletePropertyOrThrow(O, k - 1);
13674    } else if (insertCount > actualDeleteCount) {
13675      for (k = len - actualDeleteCount; k > actualStart; k--) {
13676        from = k + actualDeleteCount - 1;
13677        to = k + insertCount - 1;
13678        if (from in O) O[to] = O[from];
13679        else deletePropertyOrThrow(O, to);
13680      }
13681    }
13682    for (k = 0; k < insertCount; k++) {
13683      O[k + actualStart] = arguments[k + 2];
13684    }
13685    setArrayLength(O, len - actualDeleteCount + insertCount);
13686    return A;
13687  }
13688});
13689
13690
13691/***/ }),
13692
13693/***/ 99244:
13694/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13695
13696// this method was added to unscopables after implementation
13697// in popular engines, so it's moved to a separate module
13698var addToUnscopables = __webpack_require__(51223);
13699
13700// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
13701addToUnscopables('flatMap');
13702
13703
13704/***/ }),
13705
13706/***/ 33792:
13707/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13708
13709// this method was added to unscopables after implementation
13710// in popular engines, so it's moved to a separate module
13711var addToUnscopables = __webpack_require__(51223);
13712
13713// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
13714addToUnscopables('flat');
13715
13716
13717/***/ }),
13718
13719/***/ 30541:
13720/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13721
13722"use strict";
13723
13724var $ = __webpack_require__(82109);
13725var toObject = __webpack_require__(47908);
13726var lengthOfArrayLike = __webpack_require__(26244);
13727var setArrayLength = __webpack_require__(83658);
13728var deletePropertyOrThrow = __webpack_require__(85117);
13729var doesNotExceedSafeInteger = __webpack_require__(7207);
13730
13731// IE8-
13732var INCORRECT_RESULT = [].unshift(0) !== 1;
13733
13734// V8 ~ Chrome < 71 and Safari <= 15.4, FF < 23 throws InternalError
13735var SILENT_ON_NON_WRITABLE_LENGTH = !function () {
13736  try {
13737    // eslint-disable-next-line es-x/no-object-defineproperty -- safe
13738    Object.defineProperty([], 'length', { writable: false }).unshift();
13739  } catch (error) {
13740    return error instanceof TypeError;
13741  }
13742}();
13743
13744// `Array.prototype.unshift` method
13745// https://tc39.es/ecma262/#sec-array.prototype.unshift
13746$({ target: 'Array', proto: true, arity: 1, forced: INCORRECT_RESULT || SILENT_ON_NON_WRITABLE_LENGTH }, {
13747  // eslint-disable-next-line no-unused-vars -- required for `.length`
13748  unshift: function unshift(item) {
13749    var O = toObject(this);
13750    var len = lengthOfArrayLike(O);
13751    var argCount = arguments.length;
13752    if (argCount) {
13753      doesNotExceedSafeInteger(len + argCount);
13754      var k = len;
13755      while (k--) {
13756        var to = k + argCount;
13757        if (k in O) O[to] = O[k];
13758        else deletePropertyOrThrow(O, to);
13759      }
13760      for (var j = 0; j < argCount; j++) {
13761        O[j] = arguments[j];
13762      }
13763    } return setArrayLength(O, len + argCount);
13764  }
13765});
13766
13767
13768/***/ }),
13769
13770/***/ 3690:
13771/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13772
13773var $ = __webpack_require__(82109);
13774var ArrayBufferModule = __webpack_require__(13331);
13775var NATIVE_ARRAY_BUFFER = __webpack_require__(23013);
13776
13777// `DataView` constructor
13778// https://tc39.es/ecma262/#sec-dataview-constructor
13779$({ global: true, constructor: true, forced: !NATIVE_ARRAY_BUFFER }, {
13780  DataView: ArrayBufferModule.DataView
13781});
13782
13783
13784/***/ }),
13785
13786/***/ 16716:
13787/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13788
13789// TODO: Remove this module from `core-js@4` since it's replaced to module below
13790__webpack_require__(3690);
13791
13792
13793/***/ }),
13794
13795/***/ 43016:
13796/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13797
13798"use strict";
13799
13800var $ = __webpack_require__(82109);
13801var uncurryThis = __webpack_require__(1702);
13802var fails = __webpack_require__(47293);
13803
13804var FORCED = fails(function () {
13805  return new Date(16e11).getYear() !== 120;
13806});
13807
13808var getFullYear = uncurryThis(Date.prototype.getFullYear);
13809
13810// `Date.prototype.getYear` method
13811// https://tc39.es/ecma262/#sec-date.prototype.getyear
13812$({ target: 'Date', proto: true, forced: FORCED }, {
13813  getYear: function getYear() {
13814    return getFullYear(this) - 1900;
13815  }
13816});
13817
13818
13819/***/ }),
13820
13821/***/ 3843:
13822/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13823
13824// TODO: Remove from `core-js@4`
13825var $ = __webpack_require__(82109);
13826var uncurryThis = __webpack_require__(1702);
13827
13828var $Date = Date;
13829var thisTimeValue = uncurryThis($Date.prototype.getTime);
13830
13831// `Date.now` method
13832// https://tc39.es/ecma262/#sec-date.now
13833$({ target: 'Date', stat: true }, {
vendor: 27,887 bytes, lines 13834-14790
13834  now: function now() {
13835    return thisTimeValue(new $Date());
13836  }
13837});
13838
13839
13840/***/ }),
13841
13842/***/ 81801:
13843/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13844
13845"use strict";
13846
13847var $ = __webpack_require__(82109);
13848var uncurryThis = __webpack_require__(1702);
13849var toIntegerOrInfinity = __webpack_require__(19303);
13850
13851var DatePrototype = Date.prototype;
13852var thisTimeValue = uncurryThis(DatePrototype.getTime);
13853var setFullYear = uncurryThis(DatePrototype.setFullYear);
13854
13855// `Date.prototype.setYear` method
13856// https://tc39.es/ecma262/#sec-date.prototype.setyear
13857$({ target: 'Date', proto: true }, {
13858  setYear: function setYear(year) {
13859    // validate
13860    thisTimeValue(this);
13861    var yi = toIntegerOrInfinity(year);
13862    var yyyy = 0 <= yi && yi <= 99 ? yi + 1900 : yi;
13863    return setFullYear(this, yyyy);
13864  }
13865});
13866
13867
13868/***/ }),
13869
13870/***/ 9550:
13871/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13872
13873var $ = __webpack_require__(82109);
13874
13875// `Date.prototype.toGMTString` method
13876// https://tc39.es/ecma262/#sec-date.prototype.togmtstring
13877$({ target: 'Date', proto: true }, {
13878  toGMTString: Date.prototype.toUTCString
13879});
13880
13881
13882/***/ }),
13883
13884/***/ 28733:
13885/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13886
13887var $ = __webpack_require__(82109);
13888var toISOString = __webpack_require__(85573);
13889
13890// `Date.prototype.toISOString` method
13891// https://tc39.es/ecma262/#sec-date.prototype.toisostring
13892// PhantomJS / old WebKit has a broken implementations
13893$({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== toISOString }, {
13894  toISOString: toISOString
13895});
13896
13897
13898/***/ }),
13899
13900/***/ 5735:
13901/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13902
13903"use strict";
13904
13905var $ = __webpack_require__(82109);
13906var fails = __webpack_require__(47293);
13907var toObject = __webpack_require__(47908);
13908var toPrimitive = __webpack_require__(57593);
13909
13910var FORCED = fails(function () {
13911  return new Date(NaN).toJSON() !== null
13912    || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;
13913});
13914
13915// `Date.prototype.toJSON` method
13916// https://tc39.es/ecma262/#sec-date.prototype.tojson
13917$({ target: 'Date', proto: true, arity: 1, forced: FORCED }, {
13918  // eslint-disable-next-line no-unused-vars -- required for `.length`
13919  toJSON: function toJSON(key) {
13920    var O = toObject(this);
13921    var pv = toPrimitive(O, 'number');
13922    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
13923  }
13924});
13925
13926
13927/***/ }),
13928
13929/***/ 96078:
13930/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13931
13932var hasOwn = __webpack_require__(92597);
13933var defineBuiltIn = __webpack_require__(98052);
13934var dateToPrimitive = __webpack_require__(38709);
13935var wellKnownSymbol = __webpack_require__(5112);
13936
13937var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
13938var DatePrototype = Date.prototype;
13939
13940// `Date.prototype[@@toPrimitive]` method
13941// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive
13942if (!hasOwn(DatePrototype, TO_PRIMITIVE)) {
13943  defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive);
13944}
13945
13946
13947/***/ }),
13948
13949/***/ 83710:
13950/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13951
13952// TODO: Remove from `core-js@4`
13953var uncurryThis = __webpack_require__(1702);
13954var defineBuiltIn = __webpack_require__(98052);
13955
13956var DatePrototype = Date.prototype;
13957var INVALID_DATE = 'Invalid Date';
13958var TO_STRING = 'toString';
13959var nativeDateToString = uncurryThis(DatePrototype[TO_STRING]);
13960var thisTimeValue = uncurryThis(DatePrototype.getTime);
13961
13962// `Date.prototype.toString` method
13963// https://tc39.es/ecma262/#sec-date.prototype.tostring
13964if (String(new Date(NaN)) != INVALID_DATE) {
13965  defineBuiltIn(DatePrototype, TO_STRING, function toString() {
13966    var value = thisTimeValue(this);
13967    // eslint-disable-next-line no-self-compare -- NaN check
13968    return value === value ? nativeDateToString(this) : INVALID_DATE;
13969  });
13970}
13971
13972
13973/***/ }),
13974
13975/***/ 21703:
13976/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
13977
13978/* eslint-disable no-unused-vars -- required for functions `.length` */
13979var $ = __webpack_require__(82109);
13980var global = __webpack_require__(17854);
13981var apply = __webpack_require__(22104);
13982var wrapErrorConstructorWithCause = __webpack_require__(89191);
13983
13984var WEB_ASSEMBLY = 'WebAssembly';
13985var WebAssembly = global[WEB_ASSEMBLY];
13986
13987var FORCED = Error('e', { cause: 7 }).cause !== 7;
13988
13989var exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {
13990  var O = {};
13991  O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
13992  $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
13993};
13994
13995var exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {
13996  if (WebAssembly && WebAssembly[ERROR_NAME]) {
13997    var O = {};
13998    O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);
13999    $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
14000  }
14001};
14002
14003// https://github.com/tc39/proposal-error-cause
14004exportGlobalErrorCauseWrapper('Error', function (init) {
14005  return function Error(message) { return apply(init, this, arguments); };
14006});
14007exportGlobalErrorCauseWrapper('EvalError', function (init) {
14008  return function EvalError(message) { return apply(init, this, arguments); };
14009});
14010exportGlobalErrorCauseWrapper('RangeError', function (init) {
14011  return function RangeError(message) { return apply(init, this, arguments); };
14012});
14013exportGlobalErrorCauseWrapper('ReferenceError', function (init) {
14014  return function ReferenceError(message) { return apply(init, this, arguments); };
14015});
14016exportGlobalErrorCauseWrapper('SyntaxError', function (init) {
14017  return function SyntaxError(message) { return apply(init, this, arguments); };
14018});
14019exportGlobalErrorCauseWrapper('TypeError', function (init) {
14020  return function TypeError(message) { return apply(init, this, arguments); };
14021});
14022exportGlobalErrorCauseWrapper('URIError', function (init) {
14023  return function URIError(message) { return apply(init, this, arguments); };
14024});
14025exportWebAssemblyErrorCauseWrapper('CompileError', function (init) {
14026  return function CompileError(message) { return apply(init, this, arguments); };
14027});
14028exportWebAssemblyErrorCauseWrapper('LinkError', function (init) {
14029  return function LinkError(message) { return apply(init, this, arguments); };
14030});
14031exportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {
14032  return function RuntimeError(message) { return apply(init, this, arguments); };
14033});
14034
14035
14036/***/ }),
14037
14038/***/ 96647:
14039/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14040
14041var defineBuiltIn = __webpack_require__(98052);
14042var errorToString = __webpack_require__(7762);
14043
14044var ErrorPrototype = Error.prototype;
14045
14046// `Error.prototype.toString` method fix
14047// https://tc39.es/ecma262/#sec-error.prototype.tostring
14048if (ErrorPrototype.toString !== errorToString) {
14049  defineBuiltIn(ErrorPrototype, 'toString', errorToString);
14050}
14051
14052
14053/***/ }),
14054
14055/***/ 62130:
14056/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14057
14058"use strict";
14059
14060var $ = __webpack_require__(82109);
14061var uncurryThis = __webpack_require__(1702);
14062var toString = __webpack_require__(41340);
14063
14064var charAt = uncurryThis(''.charAt);
14065var charCodeAt = uncurryThis(''.charCodeAt);
14066var exec = uncurryThis(/./.exec);
14067var numberToString = uncurryThis(1.0.toString);
14068var toUpperCase = uncurryThis(''.toUpperCase);
14069
14070var raw = /[\w*+\-./@]/;
14071
14072var hex = function (code, length) {
14073  var result = numberToString(code, 16);
14074  while (result.length < length) result = '0' + result;
14075  return result;
14076};
14077
14078// `escape` method
14079// https://tc39.es/ecma262/#sec-escape-string
14080$({ global: true }, {
14081  escape: function escape(string) {
14082    var str = toString(string);
14083    var result = '';
14084    var length = str.length;
14085    var index = 0;
14086    var chr, code;
14087    while (index < length) {
14088      chr = charAt(str, index++);
14089      if (exec(raw, chr)) {
14090        result += chr;
14091      } else {
14092        code = charCodeAt(chr, 0);
14093        if (code < 256) {
14094          result += '%' + hex(code, 2);
14095        } else {
14096          result += '%u' + toUpperCase(hex(code, 4));
14097        }
14098      }
14099    } return result;
14100  }
14101});
14102
14103
14104/***/ }),
14105
14106/***/ 24812:
14107/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14108
14109// TODO: Remove from `core-js@4`
14110var $ = __webpack_require__(82109);
14111var bind = __webpack_require__(27065);
14112
14113// `Function.prototype.bind` method
14114// https://tc39.es/ecma262/#sec-function.prototype.bind
14115$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {
14116  bind: bind
14117});
14118
14119
14120/***/ }),
14121
14122/***/ 4855:
14123/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14124
14125"use strict";
14126
14127var isCallable = __webpack_require__(60614);
14128var isObject = __webpack_require__(70111);
14129var definePropertyModule = __webpack_require__(3070);
14130var getPrototypeOf = __webpack_require__(79518);
14131var wellKnownSymbol = __webpack_require__(5112);
14132var makeBuiltIn = __webpack_require__(56339);
14133
14134var HAS_INSTANCE = wellKnownSymbol('hasInstance');
14135var FunctionPrototype = Function.prototype;
14136
14137// `Function.prototype[@@hasInstance]` method
14138// https://tc39.es/ecma262/#sec-function.prototype-@@hasinstance
14139if (!(HAS_INSTANCE in FunctionPrototype)) {
14140  definePropertyModule.f(FunctionPrototype, HAS_INSTANCE, { value: makeBuiltIn(function (O) {
14141    if (!isCallable(this) || !isObject(O)) return false;
14142    var P = this.prototype;
14143    if (!isObject(P)) return O instanceof this;
14144    // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
14145    while (O = getPrototypeOf(O)) if (P === O) return true;
14146    return false;
14147  }, HAS_INSTANCE) });
14148}
14149
14150
14151/***/ }),
14152
14153/***/ 68309:
14154/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14155
14156var DESCRIPTORS = __webpack_require__(19781);
14157var FUNCTION_NAME_EXISTS = (__webpack_require__(76530).EXISTS);
14158var uncurryThis = __webpack_require__(1702);
14159var defineProperty = (__webpack_require__(3070).f);
14160
14161var FunctionPrototype = Function.prototype;
14162var functionToString = uncurryThis(FunctionPrototype.toString);
14163var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/;
14164var regExpExec = uncurryThis(nameRE.exec);
14165var NAME = 'name';
14166
14167// Function instances `.name` property
14168// https://tc39.es/ecma262/#sec-function-instances-name
14169if (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {
14170  defineProperty(FunctionPrototype, NAME, {
14171    configurable: true,
14172    get: function () {
14173      try {
14174        return regExpExec(nameRE, functionToString(this))[1];
14175      } catch (error) {
14176        return '';
14177      }
14178    }
14179  });
14180}
14181
14182
14183/***/ }),
14184
14185/***/ 35837:
14186/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14187
14188var $ = __webpack_require__(82109);
14189var global = __webpack_require__(17854);
14190
14191// `globalThis` object
14192// https://tc39.es/ecma262/#sec-globalthis
14193$({ global: true }, {
14194  globalThis: global
14195});
14196
14197
14198/***/ }),
14199
14200/***/ 38862:
14201/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14202
14203var $ = __webpack_require__(82109);
14204var getBuiltIn = __webpack_require__(35005);
14205var apply = __webpack_require__(22104);
14206var call = __webpack_require__(46916);
14207var uncurryThis = __webpack_require__(1702);
14208var fails = __webpack_require__(47293);
14209var isArray = __webpack_require__(43157);
14210var isCallable = __webpack_require__(60614);
14211var isObject = __webpack_require__(70111);
14212var isSymbol = __webpack_require__(52190);
14213var arraySlice = __webpack_require__(50206);
14214var NATIVE_SYMBOL = __webpack_require__(36293);
14215
14216var $stringify = getBuiltIn('JSON', 'stringify');
14217var exec = uncurryThis(/./.exec);
14218var charAt = uncurryThis(''.charAt);
14219var charCodeAt = uncurryThis(''.charCodeAt);
14220var replace = uncurryThis(''.replace);
14221var numberToString = uncurryThis(1.0.toString);
14222
14223var tester = /[\uD800-\uDFFF]/g;
14224var low = /^[\uD800-\uDBFF]$/;
14225var hi = /^[\uDC00-\uDFFF]$/;
14226
14227var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {
14228  var symbol = getBuiltIn('Symbol')();
14229  // MS Edge converts symbol values to JSON as {}
14230  return $stringify([symbol]) != '[null]'
14231    // WebKit converts symbol values to JSON as null
14232    || $stringify({ a: symbol }) != '{}'
14233    // V8 throws on boxed symbols
14234    || $stringify(Object(symbol)) != '{}';
14235});
14236
14237// https://github.com/tc39/proposal-well-formed-stringify
14238var ILL_FORMED_UNICODE = fails(function () {
14239  return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"'
14240    || $stringify('\uDEAD') !== '"\\udead"';
14241});
14242
14243var stringifyWithSymbolsFix = function (it, replacer) {
14244  var args = arraySlice(arguments);
14245  var $replacer = replacer;
14246  if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
14247  if (!isArray(replacer)) replacer = function (key, value) {
14248    if (isCallable($replacer)) value = call($replacer, this, key, value);
14249    if (!isSymbol(value)) return value;
14250  };
14251  args[1] = replacer;
14252  return apply($stringify, null, args);
14253};
14254
14255var fixIllFormed = function (match, offset, string) {
14256  var prev = charAt(string, offset - 1);
14257  var next = charAt(string, offset + 1);
14258  if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {
14259    return '\\u' + numberToString(charCodeAt(match, 0), 16);
14260  } return match;
14261};
14262
14263if ($stringify) {
14264  // `JSON.stringify` method
14265  // https://tc39.es/ecma262/#sec-json.stringify
14266  $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
14267    // eslint-disable-next-line no-unused-vars -- required for `.length`
14268    stringify: function stringify(it, replacer, space) {
14269      var args = arraySlice(arguments);
14270      var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
14271      return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;
14272    }
14273  });
14274}
14275
14276
14277/***/ }),
14278
14279/***/ 73706:
14280/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14281
14282var global = __webpack_require__(17854);
14283var setToStringTag = __webpack_require__(58003);
14284
14285// JSON[@@toStringTag] property
14286// https://tc39.es/ecma262/#sec-json-@@tostringtag
14287setToStringTag(global.JSON, 'JSON', true);
14288
14289
14290/***/ }),
14291
14292/***/ 69098:
14293/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14294
14295"use strict";
14296
14297var collection = __webpack_require__(77710);
14298var collectionStrong = __webpack_require__(95631);
14299
14300// `Map` constructor
14301// https://tc39.es/ecma262/#sec-map-objects
14302collection('Map', function (init) {
14303  return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
14304}, collectionStrong);
14305
14306
14307/***/ }),
14308
14309/***/ 51532:
14310/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14311
14312// TODO: Remove this module from `core-js@4` since it's replaced to module below
14313__webpack_require__(69098);
14314
14315
14316/***/ }),
14317
14318/***/ 99752:
14319/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14320
14321var $ = __webpack_require__(82109);
14322var log1p = __webpack_require__(26513);
14323
14324// eslint-disable-next-line es-x/no-math-acosh -- required for testing
14325var $acosh = Math.acosh;
14326var log = Math.log;
14327var sqrt = Math.sqrt;
14328var LN2 = Math.LN2;
14329
14330var FORCED = !$acosh
14331  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
14332  || Math.floor($acosh(Number.MAX_VALUE)) != 710
14333  // Tor Browser bug: Math.acosh(Infinity) -> NaN
14334  || $acosh(Infinity) != Infinity;
14335
14336// `Math.acosh` method
14337// https://tc39.es/ecma262/#sec-math.acosh
14338$({ target: 'Math', stat: true, forced: FORCED }, {
14339  acosh: function acosh(x) {
14340    var n = +x;
14341    return n < 1 ? NaN : n > 94906265.62425156
14342      ? log(n) + LN2
14343      : log1p(n - 1 + sqrt(n - 1) * sqrt(n + 1));
14344  }
14345});
14346
14347
14348/***/ }),
14349
14350/***/ 82376:
14351/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14352
14353var $ = __webpack_require__(82109);
14354
14355// eslint-disable-next-line es-x/no-math-asinh -- required for testing
14356var $asinh = Math.asinh;
14357var log = Math.log;
14358var sqrt = Math.sqrt;
14359
14360function asinh(x) {
14361  var n = +x;
14362  return !isFinite(n) || n == 0 ? n : n < 0 ? -asinh(-n) : log(n + sqrt(n * n + 1));
14363}
14364
14365// `Math.asinh` method
14366// https://tc39.es/ecma262/#sec-math.asinh
14367// Tor Browser bug: Math.asinh(0) -> -0
14368$({ target: 'Math', stat: true, forced: !($asinh && 1 / $asinh(0) > 0) }, {
14369  asinh: asinh
14370});
14371
14372
14373/***/ }),
14374
14375/***/ 73181:
14376/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14377
14378var $ = __webpack_require__(82109);
14379
14380// eslint-disable-next-line es-x/no-math-atanh -- required for testing
14381var $atanh = Math.atanh;
14382var log = Math.log;
14383
14384// `Math.atanh` method
14385// https://tc39.es/ecma262/#sec-math.atanh
14386// Tor Browser bug: Math.atanh(-0) -> 0
14387$({ target: 'Math', stat: true, forced: !($atanh && 1 / $atanh(-0) < 0) }, {
14388  atanh: function atanh(x) {
14389    var n = +x;
14390    return n == 0 ? n : log((1 + n) / (1 - n)) / 2;
14391  }
14392});
14393
14394
14395/***/ }),
14396
14397/***/ 23484:
14398/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14399
14400var $ = __webpack_require__(82109);
14401var sign = __webpack_require__(64310);
14402
14403var abs = Math.abs;
14404var pow = Math.pow;
14405
14406// `Math.cbrt` method
14407// https://tc39.es/ecma262/#sec-math.cbrt
14408$({ target: 'Math', stat: true }, {
14409  cbrt: function cbrt(x) {
14410    var n = +x;
14411    return sign(n) * pow(abs(n), 1 / 3);
14412  }
14413});
14414
14415
14416/***/ }),
14417
14418/***/ 2388:
14419/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14420
14421var $ = __webpack_require__(82109);
14422
14423var floor = Math.floor;
14424var log = Math.log;
14425var LOG2E = Math.LOG2E;
14426
14427// `Math.clz32` method
14428// https://tc39.es/ecma262/#sec-math.clz32
14429$({ target: 'Math', stat: true }, {
14430  clz32: function clz32(x) {
14431    var n = x >>> 0;
14432    return n ? 31 - floor(log(n + 0.5) * LOG2E) : 32;
14433  }
14434});
14435
14436
14437/***/ }),
14438
14439/***/ 88621:
14440/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14441
14442var $ = __webpack_require__(82109);
14443var expm1 = __webpack_require__(66736);
14444
14445// eslint-disable-next-line es-x/no-math-cosh -- required for testing
14446var $cosh = Math.cosh;
14447var abs = Math.abs;
14448var E = Math.E;
14449
14450// `Math.cosh` method
14451// https://tc39.es/ecma262/#sec-math.cosh
14452$({ target: 'Math', stat: true, forced: !$cosh || $cosh(710) === Infinity }, {
14453  cosh: function cosh(x) {
14454    var t = expm1(abs(x) - 1) + 1;
14455    return (t + 1 / (t * E * E)) * (E / 2);
14456  }
14457});
14458
14459
14460/***/ }),
14461
14462/***/ 60403:
14463/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14464
14465var $ = __webpack_require__(82109);
14466var expm1 = __webpack_require__(66736);
14467
14468// `Math.expm1` method
14469// https://tc39.es/ecma262/#sec-math.expm1
14470// eslint-disable-next-line es-x/no-math-expm1 -- required for testing
14471$({ target: 'Math', stat: true, forced: expm1 != Math.expm1 }, { expm1: expm1 });
14472
14473
14474/***/ }),
14475
14476/***/ 84755:
14477/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14478
14479var $ = __webpack_require__(82109);
14480var fround = __webpack_require__(26130);
14481
14482// `Math.fround` method
14483// https://tc39.es/ecma262/#sec-math.fround
14484$({ target: 'Math', stat: true }, { fround: fround });
14485
14486
14487/***/ }),
14488
14489/***/ 25438:
14490/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14491
14492var $ = __webpack_require__(82109);
14493
14494// eslint-disable-next-line es-x/no-math-hypot -- required for testing
14495var $hypot = Math.hypot;
14496var abs = Math.abs;
14497var sqrt = Math.sqrt;
14498
14499// Chrome 77 bug
14500// https://bugs.chromium.org/p/v8/issues/detail?id=9546
14501var BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;
14502
14503// `Math.hypot` method
14504// https://tc39.es/ecma262/#sec-math.hypot
14505$({ target: 'Math', stat: true, arity: 2, forced: BUGGY }, {
14506  // eslint-disable-next-line no-unused-vars -- required for `.length`
14507  hypot: function hypot(value1, value2) {
14508    var sum = 0;
14509    var i = 0;
14510    var aLen = arguments.length;
14511    var larg = 0;
14512    var arg, div;
14513    while (i < aLen) {
14514      arg = abs(arguments[i++]);
14515      if (larg < arg) {
14516        div = larg / arg;
14517        sum = sum * div * div + 1;
14518        larg = arg;
14519      } else if (arg > 0) {
14520        div = arg / larg;
14521        sum += div * div;
14522      } else sum += arg;
14523    }
14524    return larg === Infinity ? Infinity : larg * sqrt(sum);
14525  }
14526});
14527
14528
14529/***/ }),
14530
14531/***/ 90332:
14532/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14533
14534var $ = __webpack_require__(82109);
14535var fails = __webpack_require__(47293);
14536
14537// eslint-disable-next-line es-x/no-math-imul -- required for testing
14538var $imul = Math.imul;
14539
14540var FORCED = fails(function () {
14541  return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2;
14542});
14543
14544// `Math.imul` method
14545// https://tc39.es/ecma262/#sec-math.imul
14546// some WebKit versions fails with big numbers, some has wrong arity
14547$({ target: 'Math', stat: true, forced: FORCED }, {
14548  imul: function imul(x, y) {
14549    var UINT16 = 0xFFFF;
14550    var xn = +x;
14551    var yn = +y;
14552    var xl = UINT16 & xn;
14553    var yl = UINT16 & yn;
14554    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
14555  }
14556});
14557
14558
14559/***/ }),
14560
14561/***/ 40658:
14562/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14563
14564var $ = __webpack_require__(82109);
14565var log10 = __webpack_require__(20403);
14566
14567// `Math.log10` method
14568// https://tc39.es/ecma262/#sec-math.log10
14569$({ target: 'Math', stat: true }, {
14570  log10: log10
14571});
14572
14573
14574/***/ }),
14575
14576/***/ 40197:
14577/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14578
14579var $ = __webpack_require__(82109);
14580var log1p = __webpack_require__(26513);
14581
14582// `Math.log1p` method
14583// https://tc39.es/ecma262/#sec-math.log1p
14584$({ target: 'Math', stat: true }, { log1p: log1p });
14585
14586
14587/***/ }),
14588
14589/***/ 44914:
14590/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14591
14592var $ = __webpack_require__(82109);
14593
14594var log = Math.log;
14595var LN2 = Math.LN2;
14596
14597// `Math.log2` method
14598// https://tc39.es/ecma262/#sec-math.log2
14599$({ target: 'Math', stat: true }, {
14600  log2: function log2(x) {
14601    return log(x) / LN2;
14602  }
14603});
14604
14605
14606/***/ }),
14607
14608/***/ 52420:
14609/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14610
14611var $ = __webpack_require__(82109);
14612var sign = __webpack_require__(64310);
14613
14614// `Math.sign` method
14615// https://tc39.es/ecma262/#sec-math.sign
14616$({ target: 'Math', stat: true }, {
14617  sign: sign
14618});
14619
14620
14621/***/ }),
14622
14623/***/ 60160:
14624/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14625
14626var $ = __webpack_require__(82109);
14627var fails = __webpack_require__(47293);
14628var expm1 = __webpack_require__(66736);
14629
14630var abs = Math.abs;
14631var exp = Math.exp;
14632var E = Math.E;
14633
14634var FORCED = fails(function () {
14635  // eslint-disable-next-line es-x/no-math-sinh -- required for testing
14636  return Math.sinh(-2e-17) != -2e-17;
14637});
14638
14639// `Math.sinh` method
14640// https://tc39.es/ecma262/#sec-math.sinh
14641// V8 near Chromium 38 has a problem with very small numbers
14642$({ target: 'Math', stat: true, forced: FORCED }, {
14643  sinh: function sinh(x) {
14644    var n = +x;
14645    return abs(n) < 1 ? (expm1(n) - expm1(-n)) / 2 : (exp(n - 1) - exp(-n - 1)) * (E / 2);
14646  }
14647});
14648
14649
14650/***/ }),
14651
14652/***/ 60970:
14653/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14654
14655var $ = __webpack_require__(82109);
14656var expm1 = __webpack_require__(66736);
14657
14658var exp = Math.exp;
14659
14660// `Math.tanh` method
14661// https://tc39.es/ecma262/#sec-math.tanh
14662$({ target: 'Math', stat: true }, {
14663  tanh: function tanh(x) {
14664    var n = +x;
14665    var a = expm1(n);
14666    var b = expm1(-n);
14667    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(n) + exp(-n));
14668  }
14669});
14670
14671
14672/***/ }),
14673
14674/***/ 10408:
14675/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14676
14677var setToStringTag = __webpack_require__(58003);
14678
14679// Math[@@toStringTag] property
14680// https://tc39.es/ecma262/#sec-math-@@tostringtag
14681setToStringTag(Math, 'Math', true);
14682
14683
14684/***/ }),
14685
14686/***/ 73689:
14687/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14688
14689var $ = __webpack_require__(82109);
14690var trunc = __webpack_require__(74758);
14691
14692// `Math.trunc` method
14693// https://tc39.es/ecma262/#sec-math.trunc
14694$({ target: 'Math', stat: true }, {
14695  trunc: trunc
14696});
14697
14698
14699/***/ }),
14700
14701/***/ 9653:
14702/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14703
14704"use strict";
14705
14706var DESCRIPTORS = __webpack_require__(19781);
14707var global = __webpack_require__(17854);
14708var uncurryThis = __webpack_require__(1702);
14709var isForced = __webpack_require__(54705);
14710var defineBuiltIn = __webpack_require__(98052);
14711var hasOwn = __webpack_require__(92597);
14712var inheritIfRequired = __webpack_require__(79587);
14713var isPrototypeOf = __webpack_require__(47976);
14714var isSymbol = __webpack_require__(52190);
14715var toPrimitive = __webpack_require__(57593);
14716var fails = __webpack_require__(47293);
14717var getOwnPropertyNames = (__webpack_require__(8006).f);
14718var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
14719var defineProperty = (__webpack_require__(3070).f);
14720var thisNumberValue = __webpack_require__(50863);
14721var trim = (__webpack_require__(53111).trim);
14722
14723var NUMBER = 'Number';
14724var NativeNumber = global[NUMBER];
14725var NumberPrototype = NativeNumber.prototype;
14726var TypeError = global.TypeError;
14727var arraySlice = uncurryThis(''.slice);
14728var charCodeAt = uncurryThis(''.charCodeAt);
14729
14730// `ToNumeric` abstract operation
14731// https://tc39.es/ecma262/#sec-tonumeric
14732var toNumeric = function (value) {
14733  var primValue = toPrimitive(value, 'number');
14734  return typeof primValue == 'bigint' ? primValue : toNumber(primValue);
14735};
14736
14737// `ToNumber` abstract operation
14738// https://tc39.es/ecma262/#sec-tonumber
14739var toNumber = function (argument) {
14740  var it = toPrimitive(argument, 'number');
14741  var first, third, radix, maxCode, digits, length, index, code;
14742  if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');
14743  if (typeof it == 'string' && it.length > 2) {
14744    it = trim(it);
14745    first = charCodeAt(it, 0);
14746    if (first === 43 || first === 45) {
14747      third = charCodeAt(it, 2);
14748      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
14749    } else if (first === 48) {
14750      switch (charCodeAt(it, 1)) {
14751        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i
14752        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i
14753        default: return +it;
14754      }
14755      digits = arraySlice(it, 2);
14756      length = digits.length;
14757      for (index = 0; index < length; index++) {
14758        code = charCodeAt(digits, index);
14759        // parseInt parses a string to a first unavailable symbol
14760        // but ToNumber should return NaN if a string contains unavailable symbols
14761        if (code < 48 || code > maxCode) return NaN;
14762      } return parseInt(digits, radix);
14763    }
14764  } return +it;
14765};
14766
14767// `Number` constructor
14768// https://tc39.es/ecma262/#sec-number-constructor
14769if (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
14770  var NumberWrapper = function Number(value) {
14771    var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
14772    var dummy = this;
14773    // check on 1..constructor(foo) case
14774    return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })
14775      ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;
14776  };
14777  for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (
14778    // ES3:
14779    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
14780    // ES2015 (in case, if modules with ES2015 Number statics required before):
14781    'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +
14782    // ESNext
14783    'fromString,range'
14784  ).split(','), j = 0, key; keys.length > j; j++) {
14785    if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {
14786      defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));
14787    }
14788  }
14789  NumberWrapper.prototype = NumberPrototype;
14790  NumberPrototype.constructor = NumberWrapper;
14791  defineBuiltIn(global, NUMBER, NumberWrapper, { constructor: true });
14792}
14793
14794
14795/***/ }),
14796
14797/***/ 93299:
14798/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14799
14800var $ = __webpack_require__(82109);
14801
14802// `Number.EPSILON` constant
14803// https://tc39.es/ecma262/#sec-number.epsilon
14804$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, {
14805  EPSILON: Math.pow(2, -52)
14806});
14807
14808
14809/***/ }),
14810
14811/***/ 35192:
14812/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14813
14814var $ = __webpack_require__(82109);
14815var numberIsFinite = __webpack_require__(77023);
14816
14817// `Number.isFinite` method
14818// https://tc39.es/ecma262/#sec-number.isfinite
14819$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
14820
14821
14822/***/ }),
14823
14824/***/ 33161:
14825/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14826
14827var $ = __webpack_require__(82109);
14828var isIntegralNumber = __webpack_require__(55988);
14829
14830// `Number.isInteger` method
14831// https://tc39.es/ecma262/#sec-number.isinteger
14832$({ target: 'Number', stat: true }, {
14833  isInteger: isIntegralNumber
14834});
14835
14836
14837/***/ }),
14838
14839/***/ 44048:
14840/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14841
14842var $ = __webpack_require__(82109);
14843
14844// `Number.isNaN` method
14845// https://tc39.es/ecma262/#sec-number.isnan
14846$({ target: 'Number', stat: true }, {
14847  isNaN: function isNaN(number) {
14848    // eslint-disable-next-line no-self-compare -- NaN check
14849    return number != number;
14850  }
14851});
14852
14853
14854/***/ }),
14855
14856/***/ 78285:
14857/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14858
14859var $ = __webpack_require__(82109);
14860var isIntegralNumber = __webpack_require__(55988);
14861
14862var abs = Math.abs;
14863
14864// `Number.isSafeInteger` method
14865// https://tc39.es/ecma262/#sec-number.issafeinteger
14866$({ target: 'Number', stat: true }, {
14867  isSafeInteger: function isSafeInteger(number) {
14868    return isIntegralNumber(number) && abs(number) <= 0x1FFFFFFFFFFFFF;
14869  }
14870});
14871
14872
14873/***/ }),
14874
14875/***/ 44363:
14876/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14877
14878var $ = __webpack_require__(82109);
14879
14880// `Number.MAX_SAFE_INTEGER` constant
14881// https://tc39.es/ecma262/#sec-number.max_safe_integer
14882$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, {
14883  MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF
14884});
14885
14886
14887/***/ }),
14888
14889/***/ 55994:
14890/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14891
14892var $ = __webpack_require__(82109);
14893
14894// `Number.MIN_SAFE_INTEGER` constant
14895// https://tc39.es/ecma262/#sec-number.min_safe_integer
14896$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, {
14897  MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF
14898});
14899
14900
14901/***/ }),
14902
14903/***/ 61874:
14904/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14905
14906var $ = __webpack_require__(82109);
14907var parseFloat = __webpack_require__(2814);
14908
14909// `Number.parseFloat` method
14910// https://tc39.es/ecma262/#sec-number.parseFloat
14911// eslint-disable-next-line es-x/no-number-parsefloat -- required for testing
14912$({ target: 'Number', stat: true, forced: Number.parseFloat != parseFloat }, {
14913  parseFloat: parseFloat
14914});
14915
14916
14917/***/ }),
14918
14919/***/ 9494:
14920/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14921
14922var $ = __webpack_require__(82109);
14923var parseInt = __webpack_require__(83009);
14924
14925// `Number.parseInt` method
14926// https://tc39.es/ecma262/#sec-number.parseint
14927// eslint-disable-next-line es-x/no-number-parseint -- required for testing
14928$({ target: 'Number', stat: true, forced: Number.parseInt != parseInt }, {
14929  parseInt: parseInt
14930});
14931
14932
14933/***/ }),
14934
14935/***/ 31354:
14936/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
14937
14938"use strict";
14939
14940var $ = __webpack_require__(82109);
14941var uncurryThis = __webpack_require__(1702);
14942var toIntegerOrInfinity = __webpack_require__(19303);
14943var thisNumberValue = __webpack_require__(50863);
14944var $repeat = __webpack_require__(38415);
14945var log10 = __webpack_require__(20403);
14946var fails = __webpack_require__(47293);
14947
14948var $RangeError = RangeError;
14949var $String = String;
14950var $isFinite = isFinite;
14951var abs = Math.abs;
14952var floor = Math.floor;
14953var pow = Math.pow;
vendor: 10,494 bytes, lines 14954-15322
14954var round = Math.round;
14955var nativeToExponential = uncurryThis(1.0.toExponential);
14956var repeat = uncurryThis($repeat);
14957var stringSlice = uncurryThis(''.slice);
14958
14959// Edge 17-
14960var ROUNDS_PROPERLY = nativeToExponential(-6.9e-11, 4) === '-6.9000e-11'
14961  // IE11- && Edge 14-
14962  && nativeToExponential(1.255, 2) === '1.25e+0'
14963  // FF86-, V8 ~ Chrome 49-50
14964  && nativeToExponential(12345, 3) === '1.235e+4'
14965  // FF86-, V8 ~ Chrome 49-50
14966  && nativeToExponential(25, 0) === '3e+1';
14967
14968// IE8-
14969var THROWS_ON_INFINITY_FRACTION = fails(function () {
14970  nativeToExponential(1, Infinity);
14971}) && fails(function () {
14972  nativeToExponential(1, -Infinity);
14973});
14974
14975// Safari <11 && FF <50
14976var PROPER_NON_FINITE_THIS_CHECK = !fails(function () {
14977  nativeToExponential(Infinity, Infinity);
14978}) && !fails(function () {
14979  nativeToExponential(NaN, Infinity);
14980});
14981
14982var FORCED = !ROUNDS_PROPERLY || !THROWS_ON_INFINITY_FRACTION || !PROPER_NON_FINITE_THIS_CHECK;
14983
14984// `Number.prototype.toExponential` method
14985// https://tc39.es/ecma262/#sec-number.prototype.toexponential
14986$({ target: 'Number', proto: true, forced: FORCED }, {
14987  toExponential: function toExponential(fractionDigits) {
14988    var x = thisNumberValue(this);
14989    if (fractionDigits === undefined) return nativeToExponential(x);
14990    var f = toIntegerOrInfinity(fractionDigits);
14991    if (!$isFinite(x)) return String(x);
14992    // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation
14993    if (f < 0 || f > 20) throw $RangeError('Incorrect fraction digits');
14994    if (ROUNDS_PROPERLY) return nativeToExponential(x, f);
14995    var s = '';
14996    var m = '';
14997    var e = 0;
14998    var c = '';
14999    var d = '';
15000    if (x < 0) {
15001      s = '-';
15002      x = -x;
15003    }
15004    if (x === 0) {
15005      e = 0;
15006      m = repeat('0', f + 1);
15007    } else {
15008      // this block is based on https://gist.github.com/SheetJSDev/1100ad56b9f856c95299ed0e068eea08
15009      // TODO: improve accuracy with big fraction digits
15010      var l = log10(x);
15011      e = floor(l);
15012      var n = 0;
15013      var w = pow(10, e - f);
15014      n = round(x / w);
15015      if (2 * x >= (2 * n + 1) * w) {
15016        n += 1;
15017      }
15018      if (n >= pow(10, f + 1)) {
15019        n /= 10;
15020        e += 1;
15021      }
15022      m = $String(n);
15023    }
15024    if (f !== 0) {
15025      m = stringSlice(m, 0, 1) + '.' + stringSlice(m, 1);
15026    }
15027    if (e === 0) {
15028      c = '+';
15029      d = '0';
15030    } else {
15031      c = e > 0 ? '+' : '-';
15032      d = $String(abs(e));
15033    }
15034    m += 'e' + c + d;
15035    return s + m;
15036  }
15037});
15038
15039
15040/***/ }),
15041
15042/***/ 56977:
15043/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15044
15045"use strict";
15046
15047var $ = __webpack_require__(82109);
15048var uncurryThis = __webpack_require__(1702);
15049var toIntegerOrInfinity = __webpack_require__(19303);
15050var thisNumberValue = __webpack_require__(50863);
15051var $repeat = __webpack_require__(38415);
15052var fails = __webpack_require__(47293);
15053
15054var $RangeError = RangeError;
15055var $String = String;
15056var floor = Math.floor;
15057var repeat = uncurryThis($repeat);
15058var stringSlice = uncurryThis(''.slice);
15059var nativeToFixed = uncurryThis(1.0.toFixed);
15060
15061var pow = function (x, n, acc) {
15062  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
15063};
15064
15065var log = function (x) {
15066  var n = 0;
15067  var x2 = x;
15068  while (x2 >= 4096) {
15069    n += 12;
15070    x2 /= 4096;
15071  }
15072  while (x2 >= 2) {
15073    n += 1;
15074    x2 /= 2;
15075  } return n;
15076};
15077
15078var multiply = function (data, n, c) {
15079  var index = -1;
15080  var c2 = c;
15081  while (++index < 6) {
15082    c2 += n * data[index];
15083    data[index] = c2 % 1e7;
15084    c2 = floor(c2 / 1e7);
15085  }
15086};
15087
15088var divide = function (data, n) {
15089  var index = 6;
15090  var c = 0;
15091  while (--index >= 0) {
15092    c += data[index];
15093    data[index] = floor(c / n);
15094    c = (c % n) * 1e7;
15095  }
15096};
15097
15098var dataToString = function (data) {
15099  var index = 6;
15100  var s = '';
15101  while (--index >= 0) {
15102    if (s !== '' || index === 0 || data[index] !== 0) {
15103      var t = $String(data[index]);
15104      s = s === '' ? t : s + repeat('0', 7 - t.length) + t;
15105    }
15106  } return s;
15107};
15108
15109var FORCED = fails(function () {
15110  return nativeToFixed(0.00008, 3) !== '0.000' ||
15111    nativeToFixed(0.9, 0) !== '1' ||
15112    nativeToFixed(1.255, 2) !== '1.25' ||
15113    nativeToFixed(1000000000000000128.0, 0) !== '1000000000000000128';
15114}) || !fails(function () {
15115  // V8 ~ Android 4.3-
15116  nativeToFixed({});
15117});
15118
15119// `Number.prototype.toFixed` method
15120// https://tc39.es/ecma262/#sec-number.prototype.tofixed
15121$({ target: 'Number', proto: true, forced: FORCED }, {
15122  toFixed: function toFixed(fractionDigits) {
15123    var number = thisNumberValue(this);
15124    var fractDigits = toIntegerOrInfinity(fractionDigits);
15125    var data = [0, 0, 0, 0, 0, 0];
15126    var sign = '';
15127    var result = '0';
15128    var e, z, j, k;
15129
15130    // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation
15131    if (fractDigits < 0 || fractDigits > 20) throw $RangeError('Incorrect fraction digits');
15132    // eslint-disable-next-line no-self-compare -- NaN check
15133    if (number != number) return 'NaN';
15134    if (number <= -1e21 || number >= 1e21) return $String(number);
15135    if (number < 0) {
15136      sign = '-';
15137      number = -number;
15138    }
15139    if (number > 1e-21) {
15140      e = log(number * pow(2, 69, 1)) - 69;
15141      z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);
15142      z *= 0x10000000000000;
15143      e = 52 - e;
15144      if (e > 0) {
15145        multiply(data, 0, z);
15146        j = fractDigits;
15147        while (j >= 7) {
15148          multiply(data, 1e7, 0);
15149          j -= 7;
15150        }
15151        multiply(data, pow(10, j, 1), 0);
15152        j = e - 1;
15153        while (j >= 23) {
15154          divide(data, 1 << 23);
15155          j -= 23;
15156        }
15157        divide(data, 1 << j);
15158        multiply(data, 1, 1);
15159        divide(data, 2);
15160        result = dataToString(data);
15161      } else {
15162        multiply(data, 0, z);
15163        multiply(data, 1 << -e, 0);
15164        result = dataToString(data) + repeat('0', fractDigits);
15165      }
15166    }
15167    if (fractDigits > 0) {
15168      k = result.length;
15169      result = sign + (k <= fractDigits
15170        ? '0.' + repeat('0', fractDigits - k) + result
15171        : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));
15172    } else {
15173      result = sign + result;
15174    } return result;
15175  }
15176});
15177
15178
15179/***/ }),
15180
15181/***/ 55147:
15182/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15183
15184"use strict";
15185
15186var $ = __webpack_require__(82109);
15187var uncurryThis = __webpack_require__(1702);
15188var fails = __webpack_require__(47293);
15189var thisNumberValue = __webpack_require__(50863);
15190
15191var nativeToPrecision = uncurryThis(1.0.toPrecision);
15192
15193var FORCED = fails(function () {
15194  // IE7-
15195  return nativeToPrecision(1, undefined) !== '1';
15196}) || !fails(function () {
15197  // V8 ~ Android 4.3-
15198  nativeToPrecision({});
15199});
15200
15201// `Number.prototype.toPrecision` method
15202// https://tc39.es/ecma262/#sec-number.prototype.toprecision
15203$({ target: 'Number', proto: true, forced: FORCED }, {
15204  toPrecision: function toPrecision(precision) {
15205    return precision === undefined
15206      ? nativeToPrecision(thisNumberValue(this))
15207      : nativeToPrecision(thisNumberValue(this), precision);
15208  }
15209});
15210
15211
15212/***/ }),
15213
15214/***/ 19601:
15215/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15216
15217var $ = __webpack_require__(82109);
15218var assign = __webpack_require__(21574);
15219
15220// `Object.assign` method
15221// https://tc39.es/ecma262/#sec-object.assign
15222// eslint-disable-next-line es-x/no-object-assign -- required for testing
15223$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {
15224  assign: assign
15225});
15226
15227
15228/***/ }),
15229
15230/***/ 78011:
15231/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15232
15233// TODO: Remove from `core-js@4`
15234var $ = __webpack_require__(82109);
15235var DESCRIPTORS = __webpack_require__(19781);
15236var create = __webpack_require__(70030);
15237
15238// `Object.create` method
15239// https://tc39.es/ecma262/#sec-object.create
15240$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {
15241  create: create
15242});
15243
15244
15245/***/ }),
15246
15247/***/ 59595:
15248/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15249
15250"use strict";
15251
15252var $ = __webpack_require__(82109);
15253var DESCRIPTORS = __webpack_require__(19781);
15254var FORCED = __webpack_require__(69026);
15255var aCallable = __webpack_require__(19662);
15256var toObject = __webpack_require__(47908);
15257var definePropertyModule = __webpack_require__(3070);
15258
15259// `Object.prototype.__defineGetter__` method
15260// https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__
15261if (DESCRIPTORS) {
15262  $({ target: 'Object', proto: true, forced: FORCED }, {
15263    __defineGetter__: function __defineGetter__(P, getter) {
15264      definePropertyModule.f(toObject(this), P, { get: aCallable(getter), enumerable: true, configurable: true });
15265    }
15266  });
15267}
15268
15269
15270/***/ }),
15271
15272/***/ 33321:
15273/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15274
15275var $ = __webpack_require__(82109);
15276var DESCRIPTORS = __webpack_require__(19781);
15277var defineProperties = (__webpack_require__(36048).f);
15278
15279// `Object.defineProperties` method
15280// https://tc39.es/ecma262/#sec-object.defineproperties
15281// eslint-disable-next-line es-x/no-object-defineproperties -- safe
15282$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {
15283  defineProperties: defineProperties
15284});
15285
15286
15287/***/ }),
15288
15289/***/ 69070:
15290/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15291
15292var $ = __webpack_require__(82109);
15293var DESCRIPTORS = __webpack_require__(19781);
15294var defineProperty = (__webpack_require__(3070).f);
15295
15296// `Object.defineProperty` method
15297// https://tc39.es/ecma262/#sec-object.defineproperty
15298// eslint-disable-next-line es-x/no-object-defineproperty -- safe
15299$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {
15300  defineProperty: defineProperty
15301});
15302
15303
15304/***/ }),
15305
15306/***/ 35500:
15307/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15308
15309"use strict";
15310
15311var $ = __webpack_require__(82109);
15312var DESCRIPTORS = __webpack_require__(19781);
15313var FORCED = __webpack_require__(69026);
15314var aCallable = __webpack_require__(19662);
15315var toObject = __webpack_require__(47908);
15316var definePropertyModule = __webpack_require__(3070);
15317
15318// `Object.prototype.__defineSetter__` method
15319// https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__
15320if (DESCRIPTORS) {
15321  $({ target: 'Object', proto: true, forced: FORCED }, {
15322    __defineSetter__: function __defineSetter__(P, setter) {
vendor: 6,287 bytes, lines 15323-15523
15323      definePropertyModule.f(toObject(this), P, { set: aCallable(setter), enumerable: true, configurable: true });
15324    }
15325  });
15326}
15327
15328
15329/***/ }),
15330
15331/***/ 69720:
15332/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15333
15334var $ = __webpack_require__(82109);
15335var $entries = (__webpack_require__(44699).entries);
15336
15337// `Object.entries` method
15338// https://tc39.es/ecma262/#sec-object.entries
15339$({ target: 'Object', stat: true }, {
15340  entries: function entries(O) {
15341    return $entries(O);
15342  }
15343});
15344
15345
15346/***/ }),
15347
15348/***/ 43371:
15349/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15350
15351var $ = __webpack_require__(82109);
15352var FREEZING = __webpack_require__(76677);
15353var fails = __webpack_require__(47293);
15354var isObject = __webpack_require__(70111);
15355var onFreeze = (__webpack_require__(62423).onFreeze);
15356
15357// eslint-disable-next-line es-x/no-object-freeze -- safe
15358var $freeze = Object.freeze;
15359var FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });
15360
15361// `Object.freeze` method
15362// https://tc39.es/ecma262/#sec-object.freeze
15363$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
15364  freeze: function freeze(it) {
15365    return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;
15366  }
15367});
15368
15369
15370/***/ }),
15371
15372/***/ 38559:
15373/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15374
15375var $ = __webpack_require__(82109);
15376var iterate = __webpack_require__(20408);
15377var createProperty = __webpack_require__(86135);
15378
15379// `Object.fromEntries` method
15380// https://github.com/tc39/proposal-object-from-entries
15381$({ target: 'Object', stat: true }, {
15382  fromEntries: function fromEntries(iterable) {
15383    var obj = {};
15384    iterate(iterable, function (k, v) {
15385      createProperty(obj, k, v);
15386    }, { AS_ENTRIES: true });
15387    return obj;
15388  }
15389});
15390
15391
15392/***/ }),
15393
15394/***/ 38880:
15395/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15396
15397var $ = __webpack_require__(82109);
15398var fails = __webpack_require__(47293);
15399var toIndexedObject = __webpack_require__(45656);
15400var nativeGetOwnPropertyDescriptor = (__webpack_require__(31236).f);
15401var DESCRIPTORS = __webpack_require__(19781);
15402
15403var FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });
15404var FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;
15405
15406// `Object.getOwnPropertyDescriptor` method
15407// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
15408$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {
15409  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
15410    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);
15411  }
15412});
15413
15414
15415/***/ }),
15416
15417/***/ 49337:
15418/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15419
15420var $ = __webpack_require__(82109);
15421var DESCRIPTORS = __webpack_require__(19781);
15422var ownKeys = __webpack_require__(53887);
15423var toIndexedObject = __webpack_require__(45656);
15424var getOwnPropertyDescriptorModule = __webpack_require__(31236);
15425var createProperty = __webpack_require__(86135);
15426
15427// `Object.getOwnPropertyDescriptors` method
15428// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
15429$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {
15430  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
15431    var O = toIndexedObject(object);
15432    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
15433    var keys = ownKeys(O);
15434    var result = {};
15435    var index = 0;
15436    var key, descriptor;
15437    while (keys.length > index) {
15438      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);
15439      if (descriptor !== undefined) createProperty(result, key, descriptor);
15440    }
15441    return result;
15442  }
15443});
15444
15445
15446/***/ }),
15447
15448/***/ 36210:
15449/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15450
15451var $ = __webpack_require__(82109);
15452var fails = __webpack_require__(47293);
15453var getOwnPropertyNames = (__webpack_require__(1156).f);
15454
15455// eslint-disable-next-line es-x/no-object-getownpropertynames -- required for testing
15456var FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });
15457
15458// `Object.getOwnPropertyNames` method
15459// https://tc39.es/ecma262/#sec-object.getownpropertynames
15460$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
15461  getOwnPropertyNames: getOwnPropertyNames
15462});
15463
15464
15465/***/ }),
15466
15467/***/ 29660:
15468/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15469
15470var $ = __webpack_require__(82109);
15471var NATIVE_SYMBOL = __webpack_require__(36293);
15472var fails = __webpack_require__(47293);
15473var getOwnPropertySymbolsModule = __webpack_require__(25181);
15474var toObject = __webpack_require__(47908);
15475
15476// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
15477// https://bugs.chromium.org/p/v8/issues/detail?id=3443
15478var FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });
15479
15480// `Object.getOwnPropertySymbols` method
15481// https://tc39.es/ecma262/#sec-object.getownpropertysymbols
15482$({ target: 'Object', stat: true, forced: FORCED }, {
15483  getOwnPropertySymbols: function getOwnPropertySymbols(it) {
15484    var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
15485    return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];
15486  }
15487});
15488
15489
15490/***/ }),
15491
15492/***/ 30489:
15493/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15494
15495var $ = __webpack_require__(82109);
15496var fails = __webpack_require__(47293);
15497var toObject = __webpack_require__(47908);
15498var nativeGetPrototypeOf = __webpack_require__(79518);
15499var CORRECT_PROTOTYPE_GETTER = __webpack_require__(49920);
15500
15501var FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });
15502
15503// `Object.getPrototypeOf` method
15504// https://tc39.es/ecma262/#sec-object.getprototypeof
15505$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {
15506  getPrototypeOf: function getPrototypeOf(it) {
15507    return nativeGetPrototypeOf(toObject(it));
15508  }
15509});
15510
15511
15512
15513/***/ }),
15514
15515/***/ 46314:
15516/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15517
15518var $ = __webpack_require__(82109);
15519var hasOwn = __webpack_require__(92597);
15520
15521// `Object.hasOwn` method
15522// https://github.com/tc39/proposal-accessible-object-hasownproperty
15523$({ target: 'Object', stat: true }, {
vendor: 8,033 bytes, lines 15524-15789
15524  hasOwn: hasOwn
15525});
15526
15527
15528/***/ }),
15529
15530/***/ 41825:
15531/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15532
15533var $ = __webpack_require__(82109);
15534var $isExtensible = __webpack_require__(52050);
15535
15536// `Object.isExtensible` method
15537// https://tc39.es/ecma262/#sec-object.isextensible
15538// eslint-disable-next-line es-x/no-object-isextensible -- safe
15539$({ target: 'Object', stat: true, forced: Object.isExtensible !== $isExtensible }, {
15540  isExtensible: $isExtensible
15541});
15542
15543
15544/***/ }),
15545
15546/***/ 98410:
15547/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15548
15549var $ = __webpack_require__(82109);
15550var fails = __webpack_require__(47293);
15551var isObject = __webpack_require__(70111);
15552var classof = __webpack_require__(84326);
15553var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(7556);
15554
15555// eslint-disable-next-line es-x/no-object-isfrozen -- safe
15556var $isFrozen = Object.isFrozen;
15557var FAILS_ON_PRIMITIVES = fails(function () { $isFrozen(1); });
15558
15559// `Object.isFrozen` method
15560// https://tc39.es/ecma262/#sec-object.isfrozen
15561$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE }, {
15562  isFrozen: function isFrozen(it) {
15563    if (!isObject(it)) return true;
15564    if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return true;
15565    return $isFrozen ? $isFrozen(it) : false;
15566  }
15567});
15568
15569
15570/***/ }),
15571
15572/***/ 72200:
15573/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15574
15575var $ = __webpack_require__(82109);
15576var fails = __webpack_require__(47293);
15577var isObject = __webpack_require__(70111);
15578var classof = __webpack_require__(84326);
15579var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(7556);
15580
15581// eslint-disable-next-line es-x/no-object-issealed -- safe
15582var $isSealed = Object.isSealed;
15583var FAILS_ON_PRIMITIVES = fails(function () { $isSealed(1); });
15584
15585// `Object.isSealed` method
15586// https://tc39.es/ecma262/#sec-object.issealed
15587$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE }, {
15588  isSealed: function isSealed(it) {
15589    if (!isObject(it)) return true;
15590    if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return true;
15591    return $isSealed ? $isSealed(it) : false;
15592  }
15593});
15594
15595
15596/***/ }),
15597
15598/***/ 43304:
15599/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15600
15601var $ = __webpack_require__(82109);
15602var is = __webpack_require__(81150);
15603
15604// `Object.is` method
15605// https://tc39.es/ecma262/#sec-object.is
15606$({ target: 'Object', stat: true }, {
15607  is: is
15608});
15609
15610
15611/***/ }),
15612
15613/***/ 47941:
15614/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15615
15616var $ = __webpack_require__(82109);
15617var toObject = __webpack_require__(47908);
15618var nativeKeys = __webpack_require__(81956);
15619var fails = __webpack_require__(47293);
15620
15621var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });
15622
15623// `Object.keys` method
15624// https://tc39.es/ecma262/#sec-object.keys
15625$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
15626  keys: function keys(it) {
15627    return nativeKeys(toObject(it));
15628  }
15629});
15630
15631
15632/***/ }),
15633
15634/***/ 94869:
15635/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15636
15637"use strict";
15638
15639var $ = __webpack_require__(82109);
15640var DESCRIPTORS = __webpack_require__(19781);
15641var FORCED = __webpack_require__(69026);
15642var toObject = __webpack_require__(47908);
15643var toPropertyKey = __webpack_require__(34948);
15644var getPrototypeOf = __webpack_require__(79518);
15645var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
15646
15647// `Object.prototype.__lookupGetter__` method
15648// https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__
15649if (DESCRIPTORS) {
15650  $({ target: 'Object', proto: true, forced: FORCED }, {
15651    __lookupGetter__: function __lookupGetter__(P) {
15652      var O = toObject(this);
15653      var key = toPropertyKey(P);
15654      var desc;
15655      do {
15656        if (desc = getOwnPropertyDescriptor(O, key)) return desc.get;
15657      } while (O = getPrototypeOf(O));
15658    }
15659  });
15660}
15661
15662
15663/***/ }),
15664
15665/***/ 33952:
15666/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15667
15668"use strict";
15669
15670var $ = __webpack_require__(82109);
15671var DESCRIPTORS = __webpack_require__(19781);
15672var FORCED = __webpack_require__(69026);
15673var toObject = __webpack_require__(47908);
15674var toPropertyKey = __webpack_require__(34948);
15675var getPrototypeOf = __webpack_require__(79518);
15676var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
15677
15678// `Object.prototype.__lookupSetter__` method
15679// https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__
15680if (DESCRIPTORS) {
15681  $({ target: 'Object', proto: true, forced: FORCED }, {
15682    __lookupSetter__: function __lookupSetter__(P) {
15683      var O = toObject(this);
15684      var key = toPropertyKey(P);
15685      var desc;
15686      do {
15687        if (desc = getOwnPropertyDescriptor(O, key)) return desc.set;
15688      } while (O = getPrototypeOf(O));
15689    }
15690  });
15691}
15692
15693
15694/***/ }),
15695
15696/***/ 57227:
15697/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15698
15699var $ = __webpack_require__(82109);
15700var isObject = __webpack_require__(70111);
15701var onFreeze = (__webpack_require__(62423).onFreeze);
15702var FREEZING = __webpack_require__(76677);
15703var fails = __webpack_require__(47293);
15704
15705// eslint-disable-next-line es-x/no-object-preventextensions -- safe
15706var $preventExtensions = Object.preventExtensions;
15707var FAILS_ON_PRIMITIVES = fails(function () { $preventExtensions(1); });
15708
15709// `Object.preventExtensions` method
15710// https://tc39.es/ecma262/#sec-object.preventextensions
15711$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
15712  preventExtensions: function preventExtensions(it) {
15713    return $preventExtensions && isObject(it) ? $preventExtensions(onFreeze(it)) : it;
15714  }
15715});
15716
15717
15718/***/ }),
15719
15720/***/ 67987:
15721/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15722
15723"use strict";
15724
15725var DESCRIPTORS = __webpack_require__(19781);
15726var defineBuiltInAccessor = __webpack_require__(47045);
15727var isObject = __webpack_require__(70111);
15728var toObject = __webpack_require__(47908);
15729var requireObjectCoercible = __webpack_require__(84488);
15730
15731// eslint-disable-next-line es-x/no-object-getprototypeof -- safe
15732var getPrototypeOf = Object.getPrototypeOf;
15733// eslint-disable-next-line es-x/no-object-setprototypeof -- safe
15734var setPrototypeOf = Object.setPrototypeOf;
15735var ObjectPrototype = Object.prototype;
15736var PROTO = '__proto__';
15737
15738// `Object.prototype.__proto__` accessor
15739// https://tc39.es/ecma262/#sec-object.prototype.__proto__
15740if (DESCRIPTORS && getPrototypeOf && setPrototypeOf && !(PROTO in ObjectPrototype)) try {
15741  defineBuiltInAccessor(ObjectPrototype, PROTO, {
15742    configurable: true,
15743    get: function __proto__() {
15744      return getPrototypeOf(toObject(this));
15745    },
15746    set: function __proto__(proto) {
15747      var O = requireObjectCoercible(this);
15748      if (!isObject(proto) && proto !== null || !isObject(O)) return;
15749      setPrototypeOf(O, proto);
15750    }
15751  });
15752} catch (error) { /* empty */ }
15753
15754
15755/***/ }),
15756
15757/***/ 60514:
15758/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15759
15760var $ = __webpack_require__(82109);
15761var isObject = __webpack_require__(70111);
15762var onFreeze = (__webpack_require__(62423).onFreeze);
15763var FREEZING = __webpack_require__(76677);
15764var fails = __webpack_require__(47293);
15765
15766// eslint-disable-next-line es-x/no-object-seal -- safe
15767var $seal = Object.seal;
15768var FAILS_ON_PRIMITIVES = fails(function () { $seal(1); });
15769
15770// `Object.seal` method
15771// https://tc39.es/ecma262/#sec-object.seal
15772$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
15773  seal: function seal(it) {
15774    return $seal && isObject(it) ? $seal(onFreeze(it)) : it;
15775  }
15776});
15777
15778
15779/***/ }),
15780
15781/***/ 68304:
15782/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15783
15784var $ = __webpack_require__(82109);
15785var setPrototypeOf = __webpack_require__(27674);
15786
15787// `Object.setPrototypeOf` method
15788// https://tc39.es/ecma262/#sec-object.setprototypeof
15789$({ target: 'Object', stat: true }, {
vendor: 4,230 bytes, lines 15790-15938
15790  setPrototypeOf: setPrototypeOf
15791});
15792
15793
15794/***/ }),
15795
15796/***/ 41539:
15797/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15798
15799var TO_STRING_TAG_SUPPORT = __webpack_require__(51694);
15800var defineBuiltIn = __webpack_require__(98052);
15801var toString = __webpack_require__(90288);
15802
15803// `Object.prototype.toString` method
15804// https://tc39.es/ecma262/#sec-object.prototype.tostring
15805if (!TO_STRING_TAG_SUPPORT) {
15806  defineBuiltIn(Object.prototype, 'toString', toString, { unsafe: true });
15807}
15808
15809
15810/***/ }),
15811
15812/***/ 26833:
15813/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15814
15815var $ = __webpack_require__(82109);
15816var $values = (__webpack_require__(44699).values);
15817
15818// `Object.values` method
15819// https://tc39.es/ecma262/#sec-object.values
15820$({ target: 'Object', stat: true }, {
15821  values: function values(O) {
15822    return $values(O);
15823  }
15824});
15825
15826
15827/***/ }),
15828
15829/***/ 54678:
15830/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15831
15832var $ = __webpack_require__(82109);
15833var $parseFloat = __webpack_require__(2814);
15834
15835// `parseFloat` method
15836// https://tc39.es/ecma262/#sec-parsefloat-string
15837$({ global: true, forced: parseFloat != $parseFloat }, {
15838  parseFloat: $parseFloat
15839});
15840
15841
15842/***/ }),
15843
15844/***/ 91058:
15845/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15846
15847var $ = __webpack_require__(82109);
15848var $parseInt = __webpack_require__(83009);
15849
15850// `parseInt` method
15851// https://tc39.es/ecma262/#sec-parseint-string-radix
15852$({ global: true, forced: parseInt != $parseInt }, {
15853  parseInt: $parseInt
15854});
15855
15856
15857/***/ }),
15858
15859/***/ 17922:
15860/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15861
15862"use strict";
15863
15864var $ = __webpack_require__(82109);
15865var call = __webpack_require__(46916);
15866var aCallable = __webpack_require__(19662);
15867var newPromiseCapabilityModule = __webpack_require__(78523);
15868var perform = __webpack_require__(12534);
15869var iterate = __webpack_require__(20408);
15870
15871// `Promise.allSettled` method
15872// https://tc39.es/ecma262/#sec-promise.allsettled
15873$({ target: 'Promise', stat: true }, {
15874  allSettled: function allSettled(iterable) {
15875    var C = this;
15876    var capability = newPromiseCapabilityModule.f(C);
15877    var resolve = capability.resolve;
15878    var reject = capability.reject;
15879    var result = perform(function () {
15880      var promiseResolve = aCallable(C.resolve);
15881      var values = [];
15882      var counter = 0;
15883      var remaining = 1;
15884      iterate(iterable, function (promise) {
15885        var index = counter++;
15886        var alreadyCalled = false;
15887        remaining++;
15888        call(promiseResolve, C, promise).then(function (value) {
15889          if (alreadyCalled) return;
15890          alreadyCalled = true;
15891          values[index] = { status: 'fulfilled', value: value };
15892          --remaining || resolve(values);
15893        }, function (error) {
15894          if (alreadyCalled) return;
15895          alreadyCalled = true;
15896          values[index] = { status: 'rejected', reason: error };
15897          --remaining || resolve(values);
15898        });
15899      });
15900      --remaining || resolve(values);
15901    });
15902    if (result.error) reject(result.value);
15903    return capability.promise;
15904  }
15905});
15906
15907
15908/***/ }),
15909
15910/***/ 70821:
15911/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15912
15913"use strict";
15914
15915var $ = __webpack_require__(82109);
15916var call = __webpack_require__(46916);
15917var aCallable = __webpack_require__(19662);
15918var newPromiseCapabilityModule = __webpack_require__(78523);
15919var perform = __webpack_require__(12534);
15920var iterate = __webpack_require__(20408);
15921var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(80612);
15922
15923// `Promise.all` method
15924// https://tc39.es/ecma262/#sec-promise.all
15925$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
15926  all: function all(iterable) {
15927    var C = this;
15928    var capability = newPromiseCapabilityModule.f(C);
15929    var resolve = capability.resolve;
15930    var reject = capability.reject;
15931    var result = perform(function () {
15932      var $promiseResolve = aCallable(C.resolve);
15933      var values = [];
15934      var counter = 0;
15935      var remaining = 1;
15936      iterate(iterable, function (promise) {
15937        var index = counter++;
15938        var alreadyCalled = false;
vendor: 4,547 bytes, lines 15939-16073
15939        remaining++;
15940        call($promiseResolve, C, promise).then(function (value) {
15941          if (alreadyCalled) return;
15942          alreadyCalled = true;
15943          values[index] = value;
15944          --remaining || resolve(values);
15945        }, reject);
15946      });
15947      --remaining || resolve(values);
15948    });
15949    if (result.error) reject(result.value);
15950    return capability.promise;
15951  }
15952});
15953
15954
15955/***/ }),
15956
15957/***/ 34668:
15958/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
15959
15960"use strict";
15961
15962var $ = __webpack_require__(82109);
15963var call = __webpack_require__(46916);
15964var aCallable = __webpack_require__(19662);
15965var getBuiltIn = __webpack_require__(35005);
15966var newPromiseCapabilityModule = __webpack_require__(78523);
15967var perform = __webpack_require__(12534);
15968var iterate = __webpack_require__(20408);
15969
15970var PROMISE_ANY_ERROR = 'No one promise resolved';
15971
15972// `Promise.any` method
15973// https://tc39.es/ecma262/#sec-promise.any
15974$({ target: 'Promise', stat: true }, {
15975  any: function any(iterable) {
15976    var C = this;
15977    var AggregateError = getBuiltIn('AggregateError');
15978    var capability = newPromiseCapabilityModule.f(C);
15979    var resolve = capability.resolve;
15980    var reject = capability.reject;
15981    var result = perform(function () {
15982      var promiseResolve = aCallable(C.resolve);
15983      var errors = [];
15984      var counter = 0;
15985      var remaining = 1;
15986      var alreadyResolved = false;
15987      iterate(iterable, function (promise) {
15988        var index = counter++;
15989        var alreadyRejected = false;
15990        remaining++;
15991        call(promiseResolve, C, promise).then(function (value) {
15992          if (alreadyRejected || alreadyResolved) return;
15993          alreadyResolved = true;
15994          resolve(value);
15995        }, function (error) {
15996          if (alreadyRejected || alreadyResolved) return;
15997          alreadyRejected = true;
15998          errors[index] = error;
15999          --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));
16000        });
16001      });
16002      --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));
16003    });
16004    if (result.error) reject(result.value);
16005    return capability.promise;
16006  }
16007});
16008
16009
16010/***/ }),
16011
16012/***/ 94164:
16013/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16014
16015"use strict";
16016
16017var $ = __webpack_require__(82109);
16018var IS_PURE = __webpack_require__(31913);
16019var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(63702).CONSTRUCTOR);
16020var NativePromiseConstructor = __webpack_require__(2492);
16021var getBuiltIn = __webpack_require__(35005);
16022var isCallable = __webpack_require__(60614);
16023var defineBuiltIn = __webpack_require__(98052);
16024
16025var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
16026
16027// `Promise.prototype.catch` method
16028// https://tc39.es/ecma262/#sec-promise.prototype.catch
16029$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {
16030  'catch': function (onRejected) {
16031    return this.then(undefined, onRejected);
16032  }
16033});
16034
16035// makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`
16036if (!IS_PURE && isCallable(NativePromiseConstructor)) {
16037  var method = getBuiltIn('Promise').prototype['catch'];
16038  if (NativePromisePrototype['catch'] !== method) {
16039    defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });
16040  }
16041}
16042
16043
16044/***/ }),
16045
16046/***/ 43401:
16047/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16048
16049"use strict";
16050
16051var $ = __webpack_require__(82109);
16052var IS_PURE = __webpack_require__(31913);
16053var IS_NODE = __webpack_require__(35268);
16054var global = __webpack_require__(17854);
16055var call = __webpack_require__(46916);
16056var defineBuiltIn = __webpack_require__(98052);
16057var setPrototypeOf = __webpack_require__(27674);
16058var setToStringTag = __webpack_require__(58003);
16059var setSpecies = __webpack_require__(96340);
16060var aCallable = __webpack_require__(19662);
16061var isCallable = __webpack_require__(60614);
16062var isObject = __webpack_require__(70111);
16063var anInstance = __webpack_require__(25787);
16064var speciesConstructor = __webpack_require__(36707);
16065var task = (__webpack_require__(20261).set);
16066var microtask = __webpack_require__(95948);
16067var hostReportErrors = __webpack_require__(842);
16068var perform = __webpack_require__(12534);
16069var Queue = __webpack_require__(18572);
16070var InternalStateModule = __webpack_require__(29909);
16071var NativePromiseConstructor = __webpack_require__(2492);
16072var PromiseConstructorDetection = __webpack_require__(63702);
16073var newPromiseCapabilityModule = __webpack_require__(78523
vendor: 8,436 bytes, lines 16073-16342
16073);
16074
16075var PROMISE = 'Promise';
16076var FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;
16077var NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;
16078var NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;
16079var getInternalPromiseState = InternalStateModule.getterFor(PROMISE);
16080var setInternalState = InternalStateModule.set;
16081var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
16082var PromiseConstructor = NativePromiseConstructor;
16083var PromisePrototype = NativePromisePrototype;
16084var TypeError = global.TypeError;
16085var document = global.document;
16086var process = global.process;
16087var newPromiseCapability = newPromiseCapabilityModule.f;
16088var newGenericPromiseCapability = newPromiseCapability;
16089
16090var DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);
16091var UNHANDLED_REJECTION = 'unhandledrejection';
16092var REJECTION_HANDLED = 'rejectionhandled';
16093var PENDING = 0;
16094var FULFILLED = 1;
16095var REJECTED = 2;
16096var HANDLED = 1;
16097var UNHANDLED = 2;
16098
16099var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;
16100
16101// helpers
16102var isThenable = function (it) {
16103  var then;
16104  return isObject(it) && isCallable(then = it.then) ? then : false;
16105};
16106
16107var callReaction = function (reaction, state) {
16108  var value = state.value;
16109  var ok = state.state == FULFILLED;
16110  var handler = ok ? reaction.ok : reaction.fail;
16111  var resolve = reaction.resolve;
16112  var reject = reaction.reject;
16113  var domain = reaction.domain;
16114  var result, then, exited;
16115  try {
16116    if (handler) {
16117      if (!ok) {
16118        if (state.rejection === UNHANDLED) onHandleUnhandled(state);
16119        state.rejection = HANDLED;
16120      }
16121      if (handler === true) result = value;
16122      else {
16123        if (domain) domain.enter();
16124        result = handler(value); // can throw
16125        if (domain) {
16126          domain.exit();
16127          exited = true;
16128        }
16129      }
16130      if (result === reaction.promise) {
16131        reject(TypeError('Promise-chain cycle'));
16132      } else if (then = isThenable(result)) {
16133        call(then, result, resolve, reject);
16134      } else resolve(result);
16135    } else reject(value);
16136  } catch (error) {
16137    if (domain && !exited) domain.exit();
16138    reject(error);
16139  }
16140};
16141
16142var notify = function (state, isReject) {
16143  if (state.notified) return;
16144  state.notified = true;
16145  microtask(function () {
16146    var reactions = state.reactions;
16147    var reaction;
16148    while (reaction = reactions.get()) {
16149      callReaction(reaction, state);
16150    }
16151    state.notified = false;
16152    if (isReject && !state.rejection) onUnhandled(state);
16153  });
16154};
16155
16156var dispatchEvent = function (name, promise, reason) {
16157  var event, handler;
16158  if (DISPATCH_EVENT) {
16159    event = document.createEvent('Event');
16160    event.promise = promise;
16161    event.reason = reason;
16162    event.initEvent(name, false, true);
16163    global.dispatchEvent(event);
16164  } else event = { promise: promise, reason: reason };
16165  if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);
16166  else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);
16167};
16168
16169var onUnhandled = function (state) {
16170  call(task, global, function () {
16171    var promise = state.facade;
16172    var value = state.value;
16173    var IS_UNHANDLED = isUnhandled(state);
16174    var result;
16175    if (IS_UNHANDLED) {
16176      result = perform(function () {
16177        if (IS_NODE) {
16178          process.emit('unhandledRejection', value, promise);
16179        } else dispatchEvent(UNHANDLED_REJECTION, promise, value);
16180      });
16181      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
16182      state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;
16183      if (result.error) throw result.value;
16184    }
16185  });
16186};
16187
16188var isUnhandled = function (state) {
16189  return state.rejection !== HANDLED && !state.parent;
16190};
16191
16192var onHandleUnhandled = function (state) {
16193  call(task, global, function () {
16194    var promise = state.facade;
16195    if (IS_NODE) {
16196      process.emit('rejectionHandled', promise);
16197    } else dispatchEvent(REJECTION_HANDLED, promise, state.value);
16198  });
16199};
16200
16201var bind = function (fn, state, unwrap) {
16202  return function (value) {
16203    fn(state, value, unwrap);
16204  };
16205};
16206
16207var internalReject = function (state, value, unwrap) {
16208  if (state.done) return;
16209  state.done = true;
16210  if (unwrap) state = unwrap;
16211  state.value = value;
16212  state.state = REJECTED;
16213  notify(state, true);
16214};
16215
16216var internalResolve = function (state, value, unwrap) {
16217  if (state.done) return;
16218  state.done = true;
16219  if (unwrap) state = unwrap;
16220  try {
16221    if (state.facade === value) throw TypeError("Promise can't be resolved itself");
16222    var then = isThenable(value);
16223    if (then) {
16224      microtask(function () {
16225        var wrapper = { done: false };
16226        try {
16227          call(then, value,
16228            bind(internalResolve, wrapper, state),
16229            bind(internalReject, wrapper, state)
16230          );
16231        } catch (error) {
16232          internalReject(wrapper, error, state);
16233        }
16234      });
16235    } else {
16236      state.value = value;
16237      state.state = FULFILLED;
16238      notify(state, false);
16239    }
16240  } catch (error) {
16241    internalReject({ done: false }, error, state);
16242  }
16243};
16244
16245// constructor polyfill
16246if (FORCED_PROMISE_CONSTRUCTOR) {
16247  // 25.4.3.1 Promise(executor)
16248  PromiseConstructor = function Promise(executor) {
16249    anInstance(this, PromisePrototype);
16250    aCallable(executor);
16251    call(Internal, this);
16252    var state = getInternalPromiseState(this);
16253    try {
16254      executor(bind(internalResolve, state), bind(internalReject, state));
16255    } catch (error) {
16256      internalReject(state, error);
16257    }
16258  };
16259
16260  PromisePrototype = PromiseConstructor.prototype;
16261
16262  // eslint-disable-next-line no-unused-vars -- required for `.length`
16263  Internal = function Promise(executor) {
16264    setInternalState(this, {
16265      type: PROMISE,
16266      done: false,
16267      notified: false,
16268      parent: false,
16269      reactions: new Queue(),
16270      rejection: false,
16271      state: PENDING,
16272      value: undefined
16273    });
16274  };
16275
16276  // `Promise.prototype.then` method
16277  // https://tc39.es/ecma262/#sec-promise.prototype.then
16278  Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {
16279    var state = getInternalPromiseState(this);
16280    var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));
16281    state.parent = true;
16282    reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;
16283    reaction.fail = isCallable(onRejected) && onRejected;
16284    reaction.domain = IS_NODE ? process.domain : undefined;
16285    if (state.state == PENDING) state.reactions.add(reaction);
16286    else microtask(function () {
16287      callReaction(reaction, state);
16288    });
16289    return reaction.promise;
16290  });
16291
16292  OwnPromiseCapability = function () {
16293    var promise = new Internal();
16294    var state = getInternalPromiseState(promise);
16295    this.promise = promise;
16296    this.resolve = bind(internalResolve, state);
16297    this.reject = bind(internalReject, state);
16298  };
16299
16300  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
16301    return C === PromiseConstructor || C === PromiseWrapper
16302      ? new OwnPromiseCapability(C)
16303      : newGenericPromiseCapability(C);
16304  };
16305
16306  if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {
16307    nativeThen = NativePromisePrototype.then;
16308
16309    if (!NATIVE_PROMISE_SUBCLASSING) {
16310      // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs
16311      defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {
16312        var that = this;
16313        return new PromiseConstructor(function (resolve, reject) {
16314          call(nativeThen, that, resolve, reject);
16315        }).then(onFulfilled, onRejected);
16316      // https://github.com/zloirock/core-js/issues/640
16317      }, { unsafe: true });
16318    }
16319
16320    // make `.constructor === Promise` work for native promise-based APIs
16321    try {
16322      delete NativePromisePrototype.constructor;
16323    } catch (error) { /* empty */ }
16324
16325    // make `instanceof Promise` work for native promise-based APIs
16326    if (setPrototypeOf) {
16327      setPrototypeOf(NativePromisePrototype, PromisePrototype);
16328    }
16329  }
16330}
16331
16332$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
16333  Promise: PromiseConstructor
16334});
16335
16336setToStringTag(PromiseConstructor, PROMISE, false, true);
16337setSpecies(PROMISE);
16338
16339
16340/***/ }),
16341
16342/***/ 
1634217727:
16343/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16344
16345"use strict";
16346
16347var $ = __webpack_require__(82109);
16348var IS_PURE = __webpack_require__(31913);
16349var NativePromiseConstructor = __webpack_require__(2492);
16350var fails = __webpack_require__(47293);
16351var getBuiltIn = __webpack_require__(35005);
16352var isCallable = __webpack_require__(60614);
16353var speciesConstructor = __webpack_require__(36707);
16354var promiseResolve = __webpack_require__(69478);
16355var defineBuiltIn = __webpack_require__(98052);
16356
16357var NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;
16358
16359// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
16360var NON_GENERIC = !!NativePromiseConstructor && fails(function () {
16361  // eslint-disable-next-line unicorn/no-thenable -- required for testing
16362  NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
16363});
16364
16365// `Promise.prototype.finally` method
16366// https://tc39.es/ecma262/#sec-promise.prototype.finally
16367$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
16368  'finally': function (onFinally) {
16369    var C = speciesConstructor(this, getBuiltIn('Promise'));
vendor: 6,469 bytes, lines 16370-16564
16370    var isFunction = isCallable(onFinally);
16371    return this.then(
16372      isFunction ? function (x) {
16373        return promiseResolve(C, onFinally()).then(function () { return x; });
16374      } : onFinally,
16375      isFunction ? function (e) {
16376        return promiseResolve(C, onFinally()).then(function () { throw e; });
16377      } : onFinally
16378    );
16379  }
16380});
16381
16382// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`
16383if (!IS_PURE && isCallable(NativePromiseConstructor)) {
16384  var method = getBuiltIn('Promise').prototype['finally'];
16385  if (NativePromisePrototype['finally'] !== method) {
16386    defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });
16387  }
16388}
16389
16390
16391/***/ }),
16392
16393/***/ 88674:
16394/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16395
16396// TODO: Remove this module from `core-js@4` since it's split to modules listed below
16397__webpack_require__(43401);
16398__webpack_require__(70821);
16399__webpack_require__(94164);
16400__webpack_require__(6027);
16401__webpack_require__(60683);
16402__webpack_require__(96294);
16403
16404
16405/***/ }),
16406
16407/***/ 6027:
16408/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16409
16410"use strict";
16411
16412var $ = __webpack_require__(82109);
16413var call = __webpack_require__(46916);
16414var aCallable = __webpack_require__(19662);
16415var newPromiseCapabilityModule = __webpack_require__(78523);
16416var perform = __webpack_require__(12534);
16417var iterate = __webpack_require__(20408);
16418var PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(80612);
16419
16420// `Promise.race` method
16421// https://tc39.es/ecma262/#sec-promise.race
16422$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {
16423  race: function race(iterable) {
16424    var C = this;
16425    var capability = newPromiseCapabilityModule.f(C);
16426    var reject = capability.reject;
16427    var result = perform(function () {
16428      var $promiseResolve = aCallable(C.resolve);
16429      iterate(iterable, function (promise) {
16430        call($promiseResolve, C, promise).then(capability.resolve, reject);
16431      });
16432    });
16433    if (result.error) reject(result.value);
16434    return capability.promise;
16435  }
16436});
16437
16438
16439/***/ }),
16440
16441/***/ 60683:
16442/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16443
16444"use strict";
16445
16446var $ = __webpack_require__(82109);
16447var call = __webpack_require__(46916);
16448var newPromiseCapabilityModule = __webpack_require__(78523);
16449var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(63702).CONSTRUCTOR);
16450
16451// `Promise.reject` method
16452// https://tc39.es/ecma262/#sec-promise.reject
16453$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {
16454  reject: function reject(r) {
16455    var capability = newPromiseCapabilityModule.f(this);
16456    call(capability.reject, undefined, r);
16457    return capability.promise;
16458  }
16459});
16460
16461
16462/***/ }),
16463
16464/***/ 96294:
16465/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16466
16467"use strict";
16468
16469var $ = __webpack_require__(82109);
16470var getBuiltIn = __webpack_require__(35005);
16471var IS_PURE = __webpack_require__(31913);
16472var NativePromiseConstructor = __webpack_require__(2492);
16473var FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(63702).CONSTRUCTOR);
16474var promiseResolve = __webpack_require__(69478);
16475
16476var PromiseConstructorWrapper = getBuiltIn('Promise');
16477var CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;
16478
16479// `Promise.resolve` method
16480// https://tc39.es/ecma262/#sec-promise.resolve
16481$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {
16482  resolve: function resolve(x) {
16483    return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);
16484  }
16485});
16486
16487
16488/***/ }),
16489
16490/***/ 36535:
16491/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16492
16493var $ = __webpack_require__(82109);
16494var functionApply = __webpack_require__(22104);
16495var aCallable = __webpack_require__(19662);
16496var anObject = __webpack_require__(19670);
16497var fails = __webpack_require__(47293);
16498
16499// MS Edge argumentsList argument is optional
16500var OPTIONAL_ARGUMENTS_LIST = !fails(function () {
16501  // eslint-disable-next-line es-x/no-reflect -- required for testing
16502  Reflect.apply(function () { /* empty */ });
16503});
16504
16505// `Reflect.apply` method
16506// https://tc39.es/ecma262/#sec-reflect.apply
16507$({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, {
16508  apply: function apply(target, thisArgument, argumentsList) {
16509    return functionApply(aCallable(target), thisArgument, anObject(argumentsList));
16510  }
16511});
16512
16513
16514/***/ }),
16515
16516/***/ 12419:
16517/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16518
16519var $ = __webpack_require__(82109);
16520var getBuiltIn = __webpack_require__(35005);
16521var apply = __webpack_require__(22104);
16522var bind = __webpack_require__(27065);
16523var aConstructor = __webpack_require__(39483);
16524var anObject = __webpack_require__(19670);
16525var isObject = __webpack_require__(70111);
16526var create = __webpack_require__(70030);
16527var fails = __webpack_require__(47293);
16528
16529var nativeConstruct = getBuiltIn('Reflect', 'construct');
16530var ObjectPrototype = Object.prototype;
16531var push = [].push;
16532
16533// `Reflect.construct` method
16534// https://tc39.es/ecma262/#sec-reflect.construct
16535// MS Edge supports only 2 arguments and argumentsList argument is optional
16536// FF Nightly sets third argument as `new.target`, but does not create `this` from it
16537var NEW_TARGET_BUG = fails(function () {
16538  function F() { /* empty */ }
16539  return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);
16540});
16541
16542var ARGS_BUG = !fails(function () {
16543  nativeConstruct(function () { /* empty */ });
16544});
16545
16546var FORCED = NEW_TARGET_BUG || ARGS_BUG;
16547
16548$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {
16549  construct: function construct(Target, args /* , newTarget */) {
16550    aConstructor(Target);
16551    anObject(args);
16552    var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
16553    if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
16554    if (Target == newTarget) {
16555      // w/o altered newTarget, optimization for 0-4 arguments
16556      switch (args.length) {
16557        case 0: return new Target();
16558        case 1: return new Target(args[0]);
16559        case 2: return new Target(args[0], args[1]);
16560        case 3: return new Target(args[0], args[1], args[2]);
16561        case 4: return new Target(args[0], args[1], args[2], args[3]);
16562      }
16563      // w/o altered newTarget, lot of arguments case
16564      var $args = [null];
vendor: 12,884 bytes, lines 16565-16968
16565      apply(push, $args, args);
16566      return new (apply(bind, Target, $args))();
16567    }
16568    // with altered newTarget, not support built-in constructors
16569    var proto = newTarget.prototype;
16570    var instance = create(isObject(proto) ? proto : ObjectPrototype);
16571    var result = apply(Target, instance, args);
16572    return isObject(result) ? result : instance;
16573  }
16574});
16575
16576
16577/***/ }),
16578
16579/***/ 69596:
16580/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16581
16582var $ = __webpack_require__(82109);
16583var DESCRIPTORS = __webpack_require__(19781);
16584var anObject = __webpack_require__(19670);
16585var toPropertyKey = __webpack_require__(34948);
16586var definePropertyModule = __webpack_require__(3070);
16587var fails = __webpack_require__(47293);
16588
16589// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
16590var ERROR_INSTEAD_OF_FALSE = fails(function () {
16591  // eslint-disable-next-line es-x/no-reflect -- required for testing
16592  Reflect.defineProperty(definePropertyModule.f({}, 1, { value: 1 }), 1, { value: 2 });
16593});
16594
16595// `Reflect.defineProperty` method
16596// https://tc39.es/ecma262/#sec-reflect.defineproperty
16597$({ target: 'Reflect', stat: true, forced: ERROR_INSTEAD_OF_FALSE, sham: !DESCRIPTORS }, {
16598  defineProperty: function defineProperty(target, propertyKey, attributes) {
16599    anObject(target);
16600    var key = toPropertyKey(propertyKey);
16601    anObject(attributes);
16602    try {
16603      definePropertyModule.f(target, key, attributes);
16604      return true;
16605    } catch (error) {
16606      return false;
16607    }
16608  }
16609});
16610
16611
16612/***/ }),
16613
16614/***/ 52586:
16615/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16616
16617var $ = __webpack_require__(82109);
16618var anObject = __webpack_require__(19670);
16619var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
16620
16621// `Reflect.deleteProperty` method
16622// https://tc39.es/ecma262/#sec-reflect.deleteproperty
16623$({ target: 'Reflect', stat: true }, {
16624  deleteProperty: function deleteProperty(target, propertyKey) {
16625    var descriptor = getOwnPropertyDescriptor(anObject(target), propertyKey);
16626    return descriptor && !descriptor.configurable ? false : delete target[propertyKey];
16627  }
16628});
16629
16630
16631/***/ }),
16632
16633/***/ 95683:
16634/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16635
16636var $ = __webpack_require__(82109);
16637var DESCRIPTORS = __webpack_require__(19781);
16638var anObject = __webpack_require__(19670);
16639var getOwnPropertyDescriptorModule = __webpack_require__(31236);
16640
16641// `Reflect.getOwnPropertyDescriptor` method
16642// https://tc39.es/ecma262/#sec-reflect.getownpropertydescriptor
16643$({ target: 'Reflect', stat: true, sham: !DESCRIPTORS }, {
16644  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
16645    return getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);
16646  }
16647});
16648
16649
16650/***/ }),
16651
16652/***/ 39361:
16653/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16654
16655var $ = __webpack_require__(82109);
16656var anObject = __webpack_require__(19670);
16657var objectGetPrototypeOf = __webpack_require__(79518);
16658var CORRECT_PROTOTYPE_GETTER = __webpack_require__(49920);
16659
16660// `Reflect.getPrototypeOf` method
16661// https://tc39.es/ecma262/#sec-reflect.getprototypeof
16662$({ target: 'Reflect', stat: true, sham: !CORRECT_PROTOTYPE_GETTER }, {
16663  getPrototypeOf: function getPrototypeOf(target) {
16664    return objectGetPrototypeOf(anObject(target));
16665  }
16666});
16667
16668
16669/***/ }),
16670
16671/***/ 74819:
16672/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16673
16674var $ = __webpack_require__(82109);
16675var call = __webpack_require__(46916);
16676var isObject = __webpack_require__(70111);
16677var anObject = __webpack_require__(19670);
16678var isDataDescriptor = __webpack_require__(45032);
16679var getOwnPropertyDescriptorModule = __webpack_require__(31236);
16680var getPrototypeOf = __webpack_require__(79518);
16681
16682// `Reflect.get` method
16683// https://tc39.es/ecma262/#sec-reflect.get
16684function get(target, propertyKey /* , receiver */) {
16685  var receiver = arguments.length < 3 ? target : arguments[2];
16686  var descriptor, prototype;
16687  if (anObject(target) === receiver) return target[propertyKey];
16688  descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);
16689  if (descriptor) return isDataDescriptor(descriptor)
16690    ? descriptor.value
16691    : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);
16692  if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);
16693}
16694
16695$({ target: 'Reflect', stat: true }, {
16696  get: get
16697});
16698
16699
16700/***/ }),
16701
16702/***/ 51037:
16703/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16704
16705var $ = __webpack_require__(82109);
16706
16707// `Reflect.has` method
16708// https://tc39.es/ecma262/#sec-reflect.has
16709$({ target: 'Reflect', stat: true }, {
16710  has: function has(target, propertyKey) {
16711    return propertyKey in target;
16712  }
16713});
16714
16715
16716/***/ }),
16717
16718/***/ 5898:
16719/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16720
16721var $ = __webpack_require__(82109);
16722var anObject = __webpack_require__(19670);
16723var $isExtensible = __webpack_require__(52050);
16724
16725// `Reflect.isExtensible` method
16726// https://tc39.es/ecma262/#sec-reflect.isextensible
16727$({ target: 'Reflect', stat: true }, {
16728  isExtensible: function isExtensible(target) {
16729    anObject(target);
16730    return $isExtensible(target);
16731  }
16732});
16733
16734
16735/***/ }),
16736
16737/***/ 67556:
16738/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16739
16740var $ = __webpack_require__(82109);
16741var ownKeys = __webpack_require__(53887);
16742
16743// `Reflect.ownKeys` method
16744// https://tc39.es/ecma262/#sec-reflect.ownkeys
16745$({ target: 'Reflect', stat: true }, {
16746  ownKeys: ownKeys
16747});
16748
16749
16750/***/ }),
16751
16752/***/ 14361:
16753/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16754
16755var $ = __webpack_require__(82109);
16756var getBuiltIn = __webpack_require__(35005);
16757var anObject = __webpack_require__(19670);
16758var FREEZING = __webpack_require__(76677);
16759
16760// `Reflect.preventExtensions` method
16761// https://tc39.es/ecma262/#sec-reflect.preventextensions
16762$({ target: 'Reflect', stat: true, sham: !FREEZING }, {
16763  preventExtensions: function preventExtensions(target) {
16764    anObject(target);
16765    try {
16766      var objectPreventExtensions = getBuiltIn('Object', 'preventExtensions');
16767      if (objectPreventExtensions) objectPreventExtensions(target);
16768      return true;
16769    } catch (error) {
16770      return false;
16771    }
16772  }
16773});
16774
16775
16776/***/ }),
16777
16778/***/ 39532:
16779/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16780
16781var $ = __webpack_require__(82109);
16782var anObject = __webpack_require__(19670);
16783var aPossiblePrototype = __webpack_require__(96077);
16784var objectSetPrototypeOf = __webpack_require__(27674);
16785
16786// `Reflect.setPrototypeOf` method
16787// https://tc39.es/ecma262/#sec-reflect.setprototypeof
16788if (objectSetPrototypeOf) $({ target: 'Reflect', stat: true }, {
16789  setPrototypeOf: function setPrototypeOf(target, proto) {
16790    anObject(target);
16791    aPossiblePrototype(proto);
16792    try {
16793      objectSetPrototypeOf(target, proto);
16794      return true;
16795    } catch (error) {
16796      return false;
16797    }
16798  }
16799});
16800
16801
16802/***/ }),
16803
16804/***/ 83593:
16805/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16806
16807var $ = __webpack_require__(82109);
16808var call = __webpack_require__(46916);
16809var anObject = __webpack_require__(19670);
16810var isObject = __webpack_require__(70111);
16811var isDataDescriptor = __webpack_require__(45032);
16812var fails = __webpack_require__(47293);
16813var definePropertyModule = __webpack_require__(3070);
16814var getOwnPropertyDescriptorModule = __webpack_require__(31236);
16815var getPrototypeOf = __webpack_require__(79518);
16816var createPropertyDescriptor = __webpack_require__(79114);
16817
16818// `Reflect.set` method
16819// https://tc39.es/ecma262/#sec-reflect.set
16820function set(target, propertyKey, V /* , receiver */) {
16821  var receiver = arguments.length < 4 ? target : arguments[3];
16822  var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);
16823  var existingDescriptor, prototype, setter;
16824  if (!ownDescriptor) {
16825    if (isObject(prototype = getPrototypeOf(target))) {
16826      return set(prototype, propertyKey, V, receiver);
16827    }
16828    ownDescriptor = createPropertyDescriptor(0);
16829  }
16830  if (isDataDescriptor(ownDescriptor)) {
16831    if (ownDescriptor.writable === false || !isObject(receiver)) return false;
16832    if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) {
16833      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
16834      existingDescriptor.value = V;
16835      definePropertyModule.f(receiver, propertyKey, existingDescriptor);
16836    } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V));
16837  } else {
16838    setter = ownDescriptor.set;
16839    if (setter === undefined) return false;
16840    call(setter, receiver, V);
16841  } return true;
16842}
16843
16844// MS Edge 17-18 Reflect.set allows setting the property to object
16845// with non-writable property on the prototype
16846var MS_EDGE_BUG = fails(function () {
16847  var Constructor = function () { /* empty */ };
16848  var object = definePropertyModule.f(new Constructor(), 'a', { configurable: true });
16849  // eslint-disable-next-line es-x/no-reflect -- required for testing
16850  return Reflect.set(Constructor.prototype, 'a', 1, object) !== false;
16851});
16852
16853$({ target: 'Reflect', stat: true, forced: MS_EDGE_BUG }, {
16854  set: set
16855});
16856
16857
16858/***/ }),
16859
16860/***/ 81299:
16861/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16862
16863var $ = __webpack_require__(82109);
16864var global = __webpack_require__(17854);
16865var setToStringTag = __webpack_require__(58003);
16866
16867$({ global: true }, { Reflect: {} });
16868
16869// Reflect[@@toStringTag] property
16870// https://tc39.es/ecma262/#sec-reflect-@@tostringtag
16871setToStringTag(global.Reflect, 'Reflect', true);
16872
16873
16874/***/ }),
16875
16876/***/ 24603:
16877/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
16878
16879var DESCRIPTORS = __webpack_require__(19781);
16880var global = __webpack_require__(17854);
16881var uncurryThis = __webpack_require__(1702);
16882var isForced = __webpack_require__(54705);
16883var inheritIfRequired = __webpack_require__(79587);
16884var createNonEnumerableProperty = __webpack_require__(68880);
16885var getOwnPropertyNames = (__webpack_require__(8006).f);
16886var isPrototypeOf = __webpack_require__(47976);
16887var isRegExp = __webpack_require__(47850);
16888var toString = __webpack_require__(41340);
16889var getRegExpFlags = __webpack_require__(34706);
16890var stickyHelpers = __webpack_require__(52999);
16891var proxyAccessor = __webpack_require__(2626);
16892var defineBuiltIn = __webpack_require__(98052);
16893var fails = __webpack_require__(47293);
16894var hasOwn = __webpack_require__(92597);
16895var enforceInternalState = (__webpack_require__(29909).enforce);
16896var setSpecies = __webpack_require__(96340);
16897var wellKnownSymbol = __webpack_require__(5112);
16898var UNSUPPORTED_DOT_ALL = __webpack_require__(9441);
16899var UNSUPPORTED_NCG = __webpack_require__(38173);
16900
16901var MATCH = wellKnownSymbol('match');
16902var NativeRegExp = global.RegExp;
16903var RegExpPrototype = NativeRegExp.prototype;
16904var SyntaxError = global.SyntaxError;
16905var exec = uncurryThis(RegExpPrototype.exec);
16906var charAt = uncurryThis(''.charAt);
16907var replace = uncurryThis(''.replace);
16908var stringIndexOf = uncurryThis(''.indexOf);
16909var stringSlice = uncurryThis(''.slice);
16910// TODO: Use only proper RegExpIdentifierName
16911var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/;
16912var re1 = /a/g;
16913var re2 = /a/g;
16914
16915// "new" should create a new object, old webkit bug
16916var CORRECT_NEW = new NativeRegExp(re1) !== re1;
16917
16918var MISSED_STICKY = stickyHelpers.MISSED_STICKY;
16919var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
16920
16921var BASE_FORCED = DESCRIPTORS &&
16922  (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {
16923    re2[MATCH] = false;
16924    // RegExp constructor can alter flags and IsRegExp works correct with @@match
16925    return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';
16926  }));
16927
16928var handleDotAll = function (string) {
16929  var length = string.length;
16930  var index = 0;
16931  var result = '';
16932  var brackets = false;
16933  var chr;
16934  for (; index <= length; index++) {
16935    chr = charAt(string, index);
16936    if (chr === '\\') {
16937      result += chr + charAt(string, ++index);
16938      continue;
16939    }
16940    if (!brackets && chr === '.') {
16941      result += '[\\s\\S]';
16942    } else {
16943      if (chr === '[') {
16944        brackets = true;
16945      } else if (chr === ']') {
16946        brackets = false;
16947      } result += chr;
16948    }
16949  } return result;
16950};
16951
16952var handleNCG = function (string) {
16953  var length = string.length;
16954  var index = 0;
16955  var result = '';
16956  var named = [];
16957  var names = {};
16958  var brackets = false;
16959  var ncg = false;
16960  var groupid = 0;
16961  var groupname = '';
16962  var chr;
16963  for (; index <= length; index++) {
16964    chr = charAt(string, index);
16965    if (chr === '\\') {
16966      chr = chr + charAt(string, ++index);
16967    } else if (chr === ']') {
16968      brackets = false;
vendor: 5,273 bytes, lines 16969-17140
16969    } else if (!brackets) switch (true) {
16970      case chr === '[':
16971        brackets = true;
16972        break;
16973      case chr === '(':
16974        if (exec(IS_NCG, stringSlice(string, index + 1))) {
16975          index += 2;
16976          ncg = true;
16977        }
16978        result += chr;
16979        groupid++;
16980        continue;
16981      case chr === '>' && ncg:
16982        if (groupname === '' || hasOwn(names, groupname)) {
16983          throw new SyntaxError('Invalid capture group name');
16984        }
16985        names[groupname] = true;
16986        named[named.length] = [groupname, groupid];
16987        ncg = false;
16988        groupname = '';
16989        continue;
16990    }
16991    if (ncg) groupname += chr;
16992    else result += chr;
16993  } return [result, named];
16994};
16995
16996// `RegExp` constructor
16997// https://tc39.es/ecma262/#sec-regexp-constructor
16998if (isForced('RegExp', BASE_FORCED)) {
16999  var RegExpWrapper = function RegExp(pattern, flags) {
17000    var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);
17001    var patternIsRegExp = isRegExp(pattern);
17002    var flagsAreUndefined = flags === undefined;
17003    var groups = [];
17004    var rawPattern = pattern;
17005    var rawFlags, dotAll, sticky, handled, result, state;
17006
17007    if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {
17008      return pattern;
17009    }
17010
17011    if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {
17012      pattern = pattern.source;
17013      if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);
17014    }
17015
17016    pattern = pattern === undefined ? '' : toString(pattern);
17017    flags = flags === undefined ? '' : toString(flags);
17018    rawPattern = pattern;
17019
17020    if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {
17021      dotAll = !!flags && stringIndexOf(flags, 's') > -1;
17022      if (dotAll) flags = replace(flags, /s/g, '');
17023    }
17024
17025    rawFlags = flags;
17026
17027    if (MISSED_STICKY && 'sticky' in re1) {
17028      sticky = !!flags && stringIndexOf(flags, 'y') > -1;
17029      if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');
17030    }
17031
17032    if (UNSUPPORTED_NCG) {
17033      handled = handleNCG(pattern);
17034      pattern = handled[0];
17035      groups = handled[1];
17036    }
17037
17038    result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);
17039
17040    if (dotAll || sticky || groups.length) {
17041      state = enforceInternalState(result);
17042      if (dotAll) {
17043        state.dotAll = true;
17044        state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);
17045      }
17046      if (sticky) state.sticky = true;
17047      if (groups.length) state.groups = groups;
17048    }
17049
17050    if (pattern !== rawPattern) try {
17051      // fails in old engines, but we have no alternatives for unsupported regex syntax
17052      createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);
17053    } catch (error) { /* empty */ }
17054
17055    return result;
17056  };
17057
17058  for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {
17059    proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);
17060  }
17061
17062  RegExpPrototype.constructor = RegExpWrapper;
17063  RegExpWrapper.prototype = RegExpPrototype;
17064  defineBuiltIn(global, 'RegExp', RegExpWrapper, { constructor: true });
17065}
17066
17067// https://tc39.es/ecma262/#sec-get-regexp-@@species
17068setSpecies('RegExp');
17069
17070
17071/***/ }),
17072
17073/***/ 28450:
17074/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17075
17076var DESCRIPTORS = __webpack_require__(19781);
17077var UNSUPPORTED_DOT_ALL = __webpack_require__(9441);
17078var classof = __webpack_require__(84326);
17079var defineBuiltInAccessor = __webpack_require__(47045);
17080var getInternalState = (__webpack_require__(29909).get);
17081
17082var RegExpPrototype = RegExp.prototype;
17083var $TypeError = TypeError;
17084
17085// `RegExp.prototype.dotAll` getter
17086// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall
17087if (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {
17088  defineBuiltInAccessor(RegExpPrototype, 'dotAll', {
17089    configurable: true,
17090    get: function dotAll() {
17091      if (this === RegExpPrototype) return undefined;
17092      // We can't use InternalStateModule.getterFor because
17093      // we don't add metadata for regexps created by a literal.
17094      if (classof(this) === 'RegExp') {
17095        return !!getInternalState(this).dotAll;
17096      }
17097      throw $TypeError('Incompatible receiver, RegExp required');
17098    }
17099  });
17100}
17101
17102
17103/***/ }),
17104
17105/***/ 74916:
17106/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17107
17108"use strict";
17109
17110var $ = __webpack_require__(82109);
17111var exec = __webpack_require__(22261);
17112
17113// `RegExp.prototype.exec` method
17114// https://tc39.es/ecma262/#sec-regexp.prototype.exec
17115$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {
17116  exec: exec
17117});
17118
17119
17120/***/ }),
17121
17122/***/ 92087:
17123/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17124
17125var global = __webpack_require__(17854);
17126var DESCRIPTORS = __webpack_require__(19781);
17127var defineBuiltInAccessor = __webpack_require__(47045);
17128var regExpFlags = __webpack_require__(67066);
17129var fails = __webpack_require__(47293);
17130
17131// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError
17132var RegExp = global.RegExp;
17133var RegExpPrototype = RegExp.prototype;
17134
17135var FORCED = DESCRIPTORS && fails(function () {
17136  var INDICES_SUPPORT = true;
17137  try {
17138    RegExp('.', 'd');
17139  } catch (error) {
17140    INDICES_SUPPORT = false;
vendor: 5,117 bytes, lines 17141-17324
17141  }
17142
17143  var O = {};
17144  // modern V8 bug
17145  var calls = '';
17146  var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';
17147
17148  var addGetter = function (key, chr) {
17149    // eslint-disable-next-line es-x/no-object-defineproperty -- safe
17150    Object.defineProperty(O, key, { get: function () {
17151      calls += chr;
17152      return true;
17153    } });
17154  };
17155
17156  var pairs = {
17157    dotAll: 's',
17158    global: 'g',
17159    ignoreCase: 'i',
17160    multiline: 'm',
17161    sticky: 'y'
17162  };
17163
17164  if (INDICES_SUPPORT) pairs.hasIndices = 'd';
17165
17166  for (var key in pairs) addGetter(key, pairs[key]);
17167
17168  // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
17169  var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);
17170
17171  return result !== expected || calls !== expected;
17172});
17173
17174// `RegExp.prototype.flags` getter
17175// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
17176if (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {
17177  configurable: true,
17178  get: regExpFlags
17179});
17180
17181
17182/***/ }),
17183
17184/***/ 88386:
17185/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17186
17187var DESCRIPTORS = __webpack_require__(19781);
17188var MISSED_STICKY = (__webpack_require__(52999).MISSED_STICKY);
17189var classof = __webpack_require__(84326);
17190var defineBuiltInAccessor = __webpack_require__(47045);
17191var getInternalState = (__webpack_require__(29909).get);
17192
17193var RegExpPrototype = RegExp.prototype;
17194var $TypeError = TypeError;
17195
17196// `RegExp.prototype.sticky` getter
17197// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky
17198if (DESCRIPTORS && MISSED_STICKY) {
17199  defineBuiltInAccessor(RegExpPrototype, 'sticky', {
17200    configurable: true,
17201    get: function sticky() {
17202      if (this === RegExpPrototype) return undefined;
17203      // We can't use InternalStateModule.getterFor because
17204      // we don't add metadata for regexps created by a literal.
17205      if (classof(this) === 'RegExp') {
17206        return !!getInternalState(this).sticky;
17207      }
17208      throw $TypeError('Incompatible receiver, RegExp required');
17209    }
17210  });
17211}
17212
17213
17214/***/ }),
17215
17216/***/ 77601:
17217/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17218
17219"use strict";
17220
17221// TODO: Remove from `core-js@4` since it's moved to entry points
17222__webpack_require__(74916);
17223var $ = __webpack_require__(82109);
17224var call = __webpack_require__(46916);
17225var isCallable = __webpack_require__(60614);
17226var anObject = __webpack_require__(19670);
17227var toString = __webpack_require__(41340);
17228
17229var DELEGATES_TO_EXEC = function () {
17230  var execCalled = false;
17231  var re = /[ac]/;
17232  re.exec = function () {
17233    execCalled = true;
17234    return /./.exec.apply(this, arguments);
17235  };
17236  return re.test('abc') === true && execCalled;
17237}();
17238
17239var nativeTest = /./.test;
17240
17241// `RegExp.prototype.test` method
17242// https://tc39.es/ecma262/#sec-regexp.prototype.test
17243$({ target: 'RegExp', proto: true, forced: !DELEGATES_TO_EXEC }, {
17244  test: function (S) {
17245    var R = anObject(this);
17246    var string = toString(S);
17247    var exec = R.exec;
17248    if (!isCallable(exec)) return call(nativeTest, R, string);
17249    var result = call(exec, R, string);
17250    if (result === null) return false;
17251    anObject(result);
17252    return true;
17253  }
17254});
17255
17256
17257/***/ }),
17258
17259/***/ 39714:
17260/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17261
17262"use strict";
17263
17264var PROPER_FUNCTION_NAME = (__webpack_require__(76530).PROPER);
17265var defineBuiltIn = __webpack_require__(98052);
17266var anObject = __webpack_require__(19670);
17267var $toString = __webpack_require__(41340);
17268var fails = __webpack_require__(47293);
17269var getRegExpFlags = __webpack_require__(34706);
17270
17271var TO_STRING = 'toString';
17272var RegExpPrototype = RegExp.prototype;
17273var nativeToString = RegExpPrototype[TO_STRING];
17274
17275var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
17276// FF44- RegExp#toString has a wrong name
17277var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name != TO_STRING;
17278
17279// `RegExp.prototype.toString` method
17280// https://tc39.es/ecma262/#sec-regexp.prototype.tostring
17281if (NOT_GENERIC || INCORRECT_NAME) {
17282  defineBuiltIn(RegExp.prototype, TO_STRING, function toString() {
17283    var R = anObject(this);
17284    var pattern = $toString(R.source);
17285    var flags = $toString(getRegExpFlags(R));
17286    return '/' + pattern + '/' + flags;
17287  }, { unsafe: true });
17288}
17289
17290
17291/***/ }),
17292
17293/***/ 37227:
17294/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17295
17296"use strict";
17297
17298var collection = __webpack_require__(77710);
17299var collectionStrong = __webpack_require__(95631);
17300
17301// `Set` constructor
17302// https://tc39.es/ecma262/#sec-set-objects
17303collection('Set', function (init) {
17304  return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };
17305}, collectionStrong);
17306
17307
17308/***/ }),
17309
17310/***/ 70189:
17311/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17312
17313// TODO: Remove this module from `core-js@4` since it's replaced to module below
17314__webpack_require__(37227);
17315
17316
17317/***/ }),
17318
17319/***/ 15218:
17320/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17321
17322"use strict";
17323
17324var $ = __webpack_require__(82109);
vendor: 5,277 bytes, lines 17325-17503
17325var createHTML = __webpack_require__(14230);
17326var forcedStringHTMLMethod = __webpack_require__(43429);
17327
17328// `String.prototype.anchor` method
17329// https://tc39.es/ecma262/#sec-string.prototype.anchor
17330$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {
17331  anchor: function anchor(name) {
17332    return createHTML(this, 'a', 'name', name);
17333  }
17334});
17335
17336
17337/***/ }),
17338
17339/***/ 24506:
17340/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17341
17342"use strict";
17343
17344var $ = __webpack_require__(82109);
17345var uncurryThis = __webpack_require__(1702);
17346var requireObjectCoercible = __webpack_require__(84488);
17347var toIntegerOrInfinity = __webpack_require__(19303);
17348var toString = __webpack_require__(41340);
17349var fails = __webpack_require__(47293);
17350
17351var charAt = uncurryThis(''.charAt);
17352
17353var FORCED = fails(function () {
17354  // eslint-disable-next-line es-x/no-array-string-prototype-at -- safe
17355  return 'ð ®·'.at(-2) !== '\uD842';
17356});
17357
17358// `String.prototype.at` method
17359// https://github.com/tc39/proposal-relative-indexing-method
17360$({ target: 'String', proto: true, forced: FORCED }, {
17361  at: function at(index) {
17362    var S = toString(requireObjectCoercible(this));
17363    var len = S.length;
17364    var relativeIndex = toIntegerOrInfinity(index);
17365    var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
17366    return (k < 0 || k >= len) ? undefined : charAt(S, k);
17367  }
17368});
17369
17370
17371/***/ }),
17372
17373/***/ 74475:
17374/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17375
17376"use strict";
17377
17378var $ = __webpack_require__(82109);
17379var createHTML = __webpack_require__(14230);
17380var forcedStringHTMLMethod = __webpack_require__(43429);
17381
17382// `String.prototype.big` method
17383// https://tc39.es/ecma262/#sec-string.prototype.big
17384$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('big') }, {
17385  big: function big() {
17386    return createHTML(this, 'big', '', '');
17387  }
17388});
17389
17390
17391/***/ }),
17392
17393/***/ 57929:
17394/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17395
17396"use strict";
17397
17398var $ = __webpack_require__(82109);
17399var createHTML = __webpack_require__(14230);
17400var forcedStringHTMLMethod = __webpack_require__(43429);
17401
17402// `String.prototype.blink` method
17403// https://tc39.es/ecma262/#sec-string.prototype.blink
17404$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('blink') }, {
17405  blink: function blink() {
17406    return createHTML(this, 'blink', '', '');
17407  }
17408});
17409
17410
17411/***/ }),
17412
17413/***/ 50915:
17414/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17415
17416"use strict";
17417
17418var $ = __webpack_require__(82109);
17419var createHTML = __webpack_require__(14230);
17420var forcedStringHTMLMethod = __webpack_require__(43429);
17421
17422// `String.prototype.bold` method
17423// https://tc39.es/ecma262/#sec-string.prototype.bold
17424$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, {
17425  bold: function bold() {
17426    return createHTML(this, 'b', '', '');
17427  }
17428});
17429
17430
17431/***/ }),
17432
17433/***/ 79841:
17434/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17435
17436"use strict";
17437
17438var $ = __webpack_require__(82109);
17439var codeAt = (__webpack_require__(28710).codeAt);
17440
17441// `String.prototype.codePointAt` method
17442// https://tc39.es/ecma262/#sec-string.prototype.codepointat
17443$({ target: 'String', proto: true }, {
17444  codePointAt: function codePointAt(pos) {
17445    return codeAt(this, pos);
17446  }
17447});
17448
17449
17450/***/ }),
17451
17452/***/ 27852:
17453/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17454
17455"use strict";
17456
17457var $ = __webpack_require__(82109);
17458var uncurryThis = __webpack_require__(1702);
17459var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
17460var toLength = __webpack_require__(17466);
17461var toString = __webpack_require__(41340);
17462var notARegExp = __webpack_require__(3929);
17463var requireObjectCoercible = __webpack_require__(84488);
17464var correctIsRegExpLogic = __webpack_require__(84964);
17465var IS_PURE = __webpack_require__(31913);
17466
17467// eslint-disable-next-line es-x/no-string-prototype-endswith -- safe
17468var nativeEndsWith = uncurryThis(''.endsWith);
17469var slice = uncurryThis(''.slice);
17470var min = Math.min;
17471
17472var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');
17473// https://github.com/zloirock/core-js/pull/702
17474var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {
17475  var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');
17476  return descriptor && !descriptor.writable;
17477}();
17478
17479// `String.prototype.endsWith` method
17480// https://tc39.es/ecma262/#sec-string.prototype.endswith
17481$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
17482  endsWith: function endsWith(searchString /* , endPosition = @length */) {
17483    var that = toString(requireObjectCoercible(this));
17484    notARegExp(searchString);
17485    var endPosition = arguments.length > 1 ? arguments[1] : undefined;
17486    var len = that.length;
17487    var end = endPosition === undefined ? len : min(toLength(endPosition), len);
17488    var search = toString(searchString);
17489    return nativeEndsWith
17490      ? nativeEndsWith(that, search, end)
17491      : slice(that, end - search.length, end) === search;
17492  }
17493});
17494
17495
17496/***/ }),
17497
17498/***/ 29253:
17499/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17500
17501"use strict";
17502
17503var $ = __webpack_require__(82109);
vendor: 5,471 bytes, lines 17504-17688
17504var createHTML = __webpack_require__(14230);
17505var forcedStringHTMLMethod = __webpack_require__(43429);
17506
17507// `String.prototype.fixed` method
17508// https://tc39.es/ecma262/#sec-string.prototype.fixed
17509$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fixed') }, {
17510  fixed: function fixed() {
17511    return createHTML(this, 'tt', '', '');
17512  }
17513});
17514
17515
17516/***/ }),
17517
17518/***/ 42125:
17519/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17520
17521"use strict";
17522
17523var $ = __webpack_require__(82109);
17524var createHTML = __webpack_require__(14230);
17525var forcedStringHTMLMethod = __webpack_require__(43429);
17526
17527// `String.prototype.fontcolor` method
17528// https://tc39.es/ecma262/#sec-string.prototype.fontcolor
17529$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontcolor') }, {
17530  fontcolor: function fontcolor(color) {
17531    return createHTML(this, 'font', 'color', color);
17532  }
17533});
17534
17535
17536/***/ }),
17537
17538/***/ 78830:
17539/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17540
17541"use strict";
17542
17543var $ = __webpack_require__(82109);
17544var createHTML = __webpack_require__(14230);
17545var forcedStringHTMLMethod = __webpack_require__(43429);
17546
17547// `String.prototype.fontsize` method
17548// https://tc39.es/ecma262/#sec-string.prototype.fontsize
17549$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontsize') }, {
17550  fontsize: function fontsize(size) {
17551    return createHTML(this, 'font', 'size', size);
17552  }
17553});
17554
17555
17556/***/ }),
17557
17558/***/ 94953:
17559/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17560
17561var $ = __webpack_require__(82109);
17562var uncurryThis = __webpack_require__(1702);
17563var toAbsoluteIndex = __webpack_require__(51400);
17564
17565var $RangeError = RangeError;
17566var fromCharCode = String.fromCharCode;
17567// eslint-disable-next-line es-x/no-string-fromcodepoint -- required for testing
17568var $fromCodePoint = String.fromCodePoint;
17569var join = uncurryThis([].join);
17570
17571// length should be 1, old FF problem
17572var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;
17573
17574// `String.fromCodePoint` method
17575// https://tc39.es/ecma262/#sec-string.fromcodepoint
17576$({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, {
17577  // eslint-disable-next-line no-unused-vars -- required for `.length`
17578  fromCodePoint: function fromCodePoint(x) {
17579    var elements = [];
17580    var length = arguments.length;
17581    var i = 0;
17582    var code;
17583    while (length > i) {
17584      code = +arguments[i++];
17585      if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw $RangeError(code + ' is not a valid code point');
17586      elements[i] = code < 0x10000
17587        ? fromCharCode(code)
17588        : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);
17589    } return join(elements, '');
17590  }
17591});
17592
17593
17594/***/ }),
17595
17596/***/ 32023:
17597/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17598
17599"use strict";
17600
17601var $ = __webpack_require__(82109);
17602var uncurryThis = __webpack_require__(1702);
17603var notARegExp = __webpack_require__(3929);
17604var requireObjectCoercible = __webpack_require__(84488);
17605var toString = __webpack_require__(41340);
17606var correctIsRegExpLogic = __webpack_require__(84964);
17607
17608var stringIndexOf = uncurryThis(''.indexOf);
17609
17610// `String.prototype.includes` method
17611// https://tc39.es/ecma262/#sec-string.prototype.includes
17612$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
17613  includes: function includes(searchString /* , position = 0 */) {
17614    return !!~stringIndexOf(
17615      toString(requireObjectCoercible(this)),
17616      toString(notARegExp(searchString)),
17617      arguments.length > 1 ? arguments[1] : undefined
17618    );
17619  }
17620});
17621
17622
17623/***/ }),
17624
17625/***/ 58734:
17626/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17627
17628"use strict";
17629
17630var $ = __webpack_require__(82109);
17631var createHTML = __webpack_require__(14230);
17632var forcedStringHTMLMethod = __webpack_require__(43429);
17633
17634// `String.prototype.italics` method
17635// https://tc39.es/ecma262/#sec-string.prototype.italics
17636$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {
17637  italics: function italics() {
17638    return createHTML(this, 'i', '', '');
17639  }
17640});
17641
17642
17643/***/ }),
17644
17645/***/ 78783:
17646/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17647
17648"use strict";
17649
17650var charAt = (__webpack_require__(28710).charAt);
17651var toString = __webpack_require__(41340);
17652var InternalStateModule = __webpack_require__(29909);
17653var defineIterator = __webpack_require__(51656);
17654
17655var STRING_ITERATOR = 'String Iterator';
17656var setInternalState = InternalStateModule.set;
17657var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
17658
17659// `String.prototype[@@iterator]` method
17660// https://tc39.es/ecma262/#sec-string.prototype-@@iterator
17661defineIterator(String, 'String', function (iterated) {
17662  setInternalState(this, {
17663    type: STRING_ITERATOR,
17664    string: toString(iterated),
17665    index: 0
17666  });
17667// `%StringIteratorPrototype%.next` method
17668// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
17669}, function next() {
17670  var state = getInternalState(this);
17671  var string = state.string;
17672  var index = state.index;
17673  var point;
17674  if (index >= string.length) return { value: undefined, done: true };
17675  point = charAt(string, index);
17676  state.index += point.length;
17677  return { value: point, done: false };
17678});
17679
17680
17681/***/ }),
17682
17683/***/ 29254:
17684/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17685
17686"use strict";
17687
17688var $ = __webpack_require__(82109);
vendor: 14,865 bytes, lines 17689-18114
17689var createHTML = __webpack_require__(14230);
17690var forcedStringHTMLMethod = __webpack_require__(43429);
17691
17692// `String.prototype.link` method
17693// https://tc39.es/ecma262/#sec-string.prototype.link
17694$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {
17695  link: function link(url) {
17696    return createHTML(this, 'a', 'href', url);
17697  }
17698});
17699
17700
17701/***/ }),
17702
17703/***/ 76373:
17704/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17705
17706"use strict";
17707
17708/* eslint-disable es-x/no-string-prototype-matchall -- safe */
17709var $ = __webpack_require__(82109);
17710var call = __webpack_require__(46916);
17711var uncurryThis = __webpack_require__(1702);
17712var createIteratorConstructor = __webpack_require__(63061);
17713var requireObjectCoercible = __webpack_require__(84488);
17714var toLength = __webpack_require__(17466);
17715var toString = __webpack_require__(41340);
17716var anObject = __webpack_require__(19670);
17717var isNullOrUndefined = __webpack_require__(68554);
17718var classof = __webpack_require__(84326);
17719var isRegExp = __webpack_require__(47850);
17720var getRegExpFlags = __webpack_require__(34706);
17721var getMethod = __webpack_require__(58173);
17722var defineBuiltIn = __webpack_require__(98052);
17723var fails = __webpack_require__(47293);
17724var wellKnownSymbol = __webpack_require__(5112);
17725var speciesConstructor = __webpack_require__(36707);
17726var advanceStringIndex = __webpack_require__(31530);
17727var regExpExec = __webpack_require__(97651);
17728var InternalStateModule = __webpack_require__(29909);
17729var IS_PURE = __webpack_require__(31913);
17730
17731var MATCH_ALL = wellKnownSymbol('matchAll');
17732var REGEXP_STRING = 'RegExp String';
17733var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';
17734var setInternalState = InternalStateModule.set;
17735var getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);
17736var RegExpPrototype = RegExp.prototype;
17737var $TypeError = TypeError;
17738var stringIndexOf = uncurryThis(''.indexOf);
17739var nativeMatchAll = uncurryThis(''.matchAll);
17740
17741var WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails(function () {
17742  nativeMatchAll('a', /./);
17743});
17744
17745var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {
17746  setInternalState(this, {
17747    type: REGEXP_STRING_ITERATOR,
17748    regexp: regexp,
17749    string: string,
17750    global: $global,
17751    unicode: fullUnicode,
17752    done: false
17753  });
17754}, REGEXP_STRING, function next() {
17755  var state = getInternalState(this);
17756  if (state.done) return { value: undefined, done: true };
17757  var R = state.regexp;
17758  var S = state.string;
17759  var match = regExpExec(R, S);
17760  if (match === null) return { value: undefined, done: state.done = true };
17761  if (state.global) {
17762    if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);
17763    return { value: match, done: false };
17764  }
17765  state.done = true;
17766  return { value: match, done: false };
17767});
17768
17769var $matchAll = function (string) {
17770  var R = anObject(this);
17771  var S = toString(string);
17772  var C = speciesConstructor(R, RegExp);
17773  var flags = toString(getRegExpFlags(R));
17774  var matcher, $global, fullUnicode;
17775  matcher = new C(C === RegExp ? R.source : R, flags);
17776  $global = !!~stringIndexOf(flags, 'g');
17777  fullUnicode = !!~stringIndexOf(flags, 'u');
17778  matcher.lastIndex = toLength(R.lastIndex);
17779  return new $RegExpStringIterator(matcher, S, $global, fullUnicode);
17780};
17781
17782// `String.prototype.matchAll` method
17783// https://tc39.es/ecma262/#sec-string.prototype.matchall
17784$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {
17785  matchAll: function matchAll(regexp) {
17786    var O = requireObjectCoercible(this);
17787    var flags, S, matcher, rx;
17788    if (!isNullOrUndefined(regexp)) {
17789      if (isRegExp(regexp)) {
17790        flags = toString(requireObjectCoercible(getRegExpFlags(regexp)));
17791        if (!~stringIndexOf(flags, 'g')) throw $TypeError('`.matchAll` does not allow non-global regexes');
17792      }
17793      if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);
17794      matcher = getMethod(regexp, MATCH_ALL);
17795      if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;
17796      if (matcher) return call(matcher, regexp, O);
17797    } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);
17798    S = toString(O);
17799    rx = new RegExp(regexp, 'g');
17800    return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);
17801  }
17802});
17803
17804IS_PURE || MATCH_ALL in RegExpPrototype || defineBuiltIn(RegExpPrototype, MATCH_ALL, $matchAll);
17805
17806
17807/***/ }),
17808
17809/***/ 4723:
17810/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17811
17812"use strict";
17813
17814var call = __webpack_require__(46916);
17815var fixRegExpWellKnownSymbolLogic = __webpack_require__(27007);
17816var anObject = __webpack_require__(19670);
17817var isNullOrUndefined = __webpack_require__(68554);
17818var toLength = __webpack_require__(17466);
17819var toString = __webpack_require__(41340);
17820var requireObjectCoercible = __webpack_require__(84488);
17821var getMethod = __webpack_require__(58173);
17822var advanceStringIndex = __webpack_require__(31530);
17823var regExpExec = __webpack_require__(97651);
17824
17825// @@match logic
17826fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {
17827  return [
17828    // `String.prototype.match` method
17829    // https://tc39.es/ecma262/#sec-string.prototype.match
17830    function match(regexp) {
17831      var O = requireObjectCoercible(this);
17832      var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);
17833      return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));
17834    },
17835    // `RegExp.prototype[@@match]` method
17836    // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
17837    function (string) {
17838      var rx = anObject(this);
17839      var S = toString(string);
17840      var res = maybeCallNative(nativeMatch, rx, S);
17841
17842      if (res.done) return res.value;
17843
17844      if (!rx.global) return regExpExec(rx, S);
17845
17846      var fullUnicode = rx.unicode;
17847      rx.lastIndex = 0;
17848      var A = [];
17849      var n = 0;
17850      var result;
17851      while ((result = regExpExec(rx, S)) !== null) {
17852        var matchStr = toString(result[0]);
17853        A[n] = matchStr;
17854        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
17855        n++;
17856      }
17857      return n === 0 ? null : A;
17858    }
17859  ];
17860});
17861
17862
17863/***/ }),
17864
17865/***/ 66528:
17866/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17867
17868"use strict";
17869
17870var $ = __webpack_require__(82109);
17871var $padEnd = (__webpack_require__(76650).end);
17872var WEBKIT_BUG = __webpack_require__(54986);
17873
17874// `String.prototype.padEnd` method
17875// https://tc39.es/ecma262/#sec-string.prototype.padend
17876$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {
17877  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
17878    return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);
17879  }
17880});
17881
17882
17883/***/ }),
17884
17885/***/ 83112:
17886/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17887
17888"use strict";
17889
17890var $ = __webpack_require__(82109);
17891var $padStart = (__webpack_require__(76650).start);
17892var WEBKIT_BUG = __webpack_require__(54986);
17893
17894// `String.prototype.padStart` method
17895// https://tc39.es/ecma262/#sec-string.prototype.padstart
17896$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {
17897  padStart: function padStart(maxLength /* , fillString = ' ' */) {
17898    return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);
17899  }
17900});
17901
17902
17903/***/ }),
17904
17905/***/ 38992:
17906/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17907
17908var $ = __webpack_require__(82109);
17909var uncurryThis = __webpack_require__(1702);
17910var toIndexedObject = __webpack_require__(45656);
17911var toObject = __webpack_require__(47908);
17912var toString = __webpack_require__(41340);
17913var lengthOfArrayLike = __webpack_require__(26244);
17914
17915var push = uncurryThis([].push);
17916var join = uncurryThis([].join);
17917
17918// `String.raw` method
17919// https://tc39.es/ecma262/#sec-string.raw
17920$({ target: 'String', stat: true }, {
17921  raw: function raw(template) {
17922    var rawTemplate = toIndexedObject(toObject(template).raw);
17923    var literalSegments = lengthOfArrayLike(rawTemplate);
17924    var argumentsLength = arguments.length;
17925    var elements = [];
17926    var i = 0;
17927    while (literalSegments > i) {
17928      push(elements, toString(rawTemplate[i++]));
17929      if (i === literalSegments) return join(elements, '');
17930      if (i < argumentsLength) push(elements, toString(arguments[i]));
17931    }
17932  }
17933});
17934
17935
17936/***/ }),
17937
17938/***/ 82481:
17939/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17940
17941var $ = __webpack_require__(82109);
17942var repeat = __webpack_require__(38415);
17943
17944// `String.prototype.repeat` method
17945// https://tc39.es/ecma262/#sec-string.prototype.repeat
17946$({ target: 'String', proto: true }, {
17947  repeat: repeat
17948});
17949
17950
17951/***/ }),
17952
17953/***/ 68757:
17954/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
17955
17956"use strict";
17957
17958var $ = __webpack_require__(82109);
17959var call = __webpack_require__(46916);
17960var uncurryThis = __webpack_require__(1702);
17961var requireObjectCoercible = __webpack_require__(84488);
17962var isCallable = __webpack_require__(60614);
17963var isNullOrUndefined = __webpack_require__(68554);
17964var isRegExp = __webpack_require__(47850);
17965var toString = __webpack_require__(41340);
17966var getMethod = __webpack_require__(58173);
17967var getRegExpFlags = __webpack_require__(34706);
17968var getSubstitution = __webpack_require__(10647);
17969var wellKnownSymbol = __webpack_require__(5112);
17970var IS_PURE = __webpack_require__(31913);
17971
17972var REPLACE = wellKnownSymbol('replace');
17973var $TypeError = TypeError;
17974var indexOf = uncurryThis(''.indexOf);
17975var replace = uncurryThis(''.replace);
17976var stringSlice = uncurryThis(''.slice);
17977var max = Math.max;
17978
17979var stringIndexOf = function (string, searchValue, fromIndex) {
17980  if (fromIndex > string.length) return -1;
17981  if (searchValue === '') return fromIndex;
17982  return indexOf(string, searchValue, fromIndex);
17983};
17984
17985// `String.prototype.replaceAll` method
17986// https://tc39.es/ecma262/#sec-string.prototype.replaceall
17987$({ target: 'String', proto: true }, {
17988  replaceAll: function replaceAll(searchValue, replaceValue) {
17989    var O = requireObjectCoercible(this);
17990    var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement;
17991    var position = 0;
17992    var endOfLastMatch = 0;
17993    var result = '';
17994    if (!isNullOrUndefined(searchValue)) {
17995      IS_REG_EXP = isRegExp(searchValue);
17996      if (IS_REG_EXP) {
17997        flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));
17998        if (!~indexOf(flags, 'g')) throw $TypeError('`.replaceAll` does not allow non-global regexes');
17999      }
18000      replacer = getMethod(searchValue, REPLACE);
18001      if (replacer) {
18002        return call(replacer, searchValue, O, replaceValue);
18003      } else if (IS_PURE && IS_REG_EXP) {
18004        return replace(toString(O), searchValue, replaceValue);
18005      }
18006    }
18007    string = toString(O);
18008    searchString = toString(searchValue);
18009    functionalReplace = isCallable(replaceValue);
18010    if (!functionalReplace) replaceValue = toString(replaceValue);
18011    searchLength = searchString.length;
18012    advanceBy = max(1, searchLength);
18013    position = stringIndexOf(string, searchString, 0);
18014    while (position !== -1) {
18015      replacement = functionalReplace
18016        ? toString(replaceValue(searchString, position, string))
18017        : getSubstitution(searchString, string, position, [], undefined, replaceValue);
18018      result += stringSlice(string, endOfLastMatch, position) + replacement;
18019      endOfLastMatch = position + searchLength;
18020      position = stringIndexOf(string, searchString, position + advanceBy);
18021    }
18022    if (endOfLastMatch < string.length) {
18023      result += stringSlice(string, endOfLastMatch);
18024    }
18025    return result;
18026  }
18027});
18028
18029
18030/***/ }),
18031
18032/***/ 15306:
18033/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18034
18035"use strict";
18036
18037var apply = __webpack_require__(22104);
18038var call = __webpack_require__(46916);
18039var uncurryThis = __webpack_require__(1702);
18040var fixRegExpWellKnownSymbolLogic = __webpack_require__(27007);
18041var fails = __webpack_require__(47293);
18042var anObject = __webpack_require__(19670);
18043var isCallable = __webpack_require__(60614);
18044var isNullOrUndefined = __webpack_require__(68554);
18045var toIntegerOrInfinity = __webpack_require__(19303);
18046var toLength = __webpack_require__(17466);
18047var toString = __webpack_require__(41340);
18048var requireObjectCoercible = __webpack_require__(84488);
18049var advanceStringIndex = __webpack_require__(31530);
18050var getMethod = __webpack_require__(58173);
18051var getSubstitution = __webpack_require__(10647);
18052var regExpExec = __webpack_require__(97651);
18053var wellKnownSymbol = __webpack_require__(5112);
18054
18055var REPLACE = wellKnownSymbol('replace');
18056var max = Math.max;
18057var min = Math.min;
18058var concat = uncurryThis([].concat);
18059var push = uncurryThis([].push);
18060var stringIndexOf = uncurryThis(''.indexOf);
18061var stringSlice = uncurryThis(''.slice);
18062
18063var maybeToString = function (it) {
18064  return it === undefined ? it : String(it);
18065};
18066
18067// IE <= 11 replaces $0 with the whole match, as if it was $&
18068// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
18069var REPLACE_KEEPS_$0 = (function () {
18070  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing
18071  return 'a'.replace(/./, '$0') === '$0';
18072})();
18073
18074// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
18075var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
18076  if (/./[REPLACE]) {
18077    return /./[REPLACE]('a', '$0') === '';
18078  }
18079  return false;
18080})();
18081
18082var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
18083  var re = /./;
18084  re.exec = function () {
18085    var result = [];
18086    result.groups = { a: '7' };
18087    return result;
18088  };
18089  // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive
18090  return ''.replace(re, '$<a>') !== '7';
18091});
18092
18093// @@replace logic
18094fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {
18095  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
18096
18097  return [
18098    // `String.prototype.replace` method
18099    // https://tc39.es/ecma262/#sec-string.prototype.replace
18100    function replace(searchValue, replaceValue) {
18101      var O = requireObjectCoercible(this);
18102      var replacer = isNullOrUndefined(searchValue) ? undefined : getMethod(searchValue, REPLACE);
18103      return replacer
18104        ? call(replacer, searchValue, O, replaceValue)
18105        : call(nativeReplace, toString(O), searchValue, replaceValue);
18106    },
18107    // `RegExp.prototype[@@replace]` method
18108    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
18109    function (string, replaceValue) {
18110      var rx = anObject(this);
18111      var S = toString(string);
18112
18113      if (
18114        typeof replaceValue == 'string' &&
vendor: 4,200 bytes, lines 18115-18228
18115        stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
18116        stringIndexOf(replaceValue, '$<') === -1
18117      ) {
18118        var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
18119        if (res.done) return res.value;
18120      }
18121
18122      var functionalReplace = isCallable(replaceValue);
18123      if (!functionalReplace) replaceValue = toString(replaceValue);
18124
18125      var global = rx.global;
18126      if (global) {
18127        var fullUnicode = rx.unicode;
18128        rx.lastIndex = 0;
18129      }
18130      var results = [];
18131      while (true) {
18132        var result = regExpExec(rx, S);
18133        if (result === null) break;
18134
18135        push(results, result);
18136        if (!global) break;
18137
18138        var matchStr = toString(result[0]);
18139        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
18140      }
18141
18142      var accumulatedResult = '';
18143      var nextSourcePosition = 0;
18144      for (var i = 0; i < results.length; i++) {
18145        result = results[i];
18146
18147        var matched = toString(result[0]);
18148        var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
18149        var captures = [];
18150        // NOTE: This is equivalent to
18151        //   captures = result.slice(1).map(maybeToString)
18152        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
18153        // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
18154        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
18155        for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
18156        var namedCaptures = result.groups;
18157        if (functionalReplace) {
18158          var replacerArgs = concat([matched], captures, position, S);
18159          if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);
18160          var replacement = toString(apply(replaceValue, undefined, replacerArgs));
18161        } else {
18162          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
18163        }
18164        if (position >= nextSourcePosition) {
18165          accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
18166          nextSourcePosition = position + matched.length;
18167        }
18168      }
18169      return accumulatedResult + stringSlice(S, nextSourcePosition);
18170    }
18171  ];
18172}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
18173
18174
18175/***/ }),
18176
18177/***/ 64765:
18178/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18179
18180"use strict";
18181
18182var call = __webpack_require__(46916);
18183var fixRegExpWellKnownSymbolLogic = __webpack_require__(27007);
18184var anObject = __webpack_require__(19670);
18185var isNullOrUndefined = __webpack_require__(68554);
18186var requireObjectCoercible = __webpack_require__(84488);
18187var sameValue = __webpack_require__(81150);
18188var toString = __webpack_require__(41340);
18189var getMethod = __webpack_require__(58173);
18190var regExpExec = __webpack_require__(97651);
18191
18192// @@search logic
18193fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {
18194  return [
18195    // `String.prototype.search` method
18196    // https://tc39.es/ecma262/#sec-string.prototype.search
18197    function search(regexp) {
18198      var O = requireObjectCoercible(this);
18199      var searcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, SEARCH);
18200      return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));
18201    },
18202    // `RegExp.prototype[@@search]` method
18203    // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
18204    function (string) {
18205      var rx = anObject(this);
18206      var S = toString(string);
18207      var res = maybeCallNative(nativeSearch, rx, S);
18208
18209      if (res.done) return res.value;
18210
18211      var previousLastIndex = rx.lastIndex;
18212      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
18213      var result = regExpExec(rx, S);
18214      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
18215      return result === null ? -1 : result.index;
18216    }
18217  ];
18218});
18219
18220
18221/***/ }),
18222
18223/***/ 37268:
18224/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18225
18226"use strict";
18227
18228var $ = __webpack_require__(82109);
vendor: 4,875 bytes, lines 18229-18346
18229var createHTML = __webpack_require__(14230);
18230var forcedStringHTMLMethod = __webpack_require__(43429);
18231
18232// `String.prototype.small` method
18233// https://tc39.es/ecma262/#sec-string.prototype.small
18234$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {
18235  small: function small() {
18236    return createHTML(this, 'small', '', '');
18237  }
18238});
18239
18240
18241/***/ }),
18242
18243/***/ 23123:
18244/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18245
18246"use strict";
18247
18248var apply = __webpack_require__(22104);
18249var call = __webpack_require__(46916);
18250var uncurryThis = __webpack_require__(1702);
18251var fixRegExpWellKnownSymbolLogic = __webpack_require__(27007);
18252var anObject = __webpack_require__(19670);
18253var isNullOrUndefined = __webpack_require__(68554);
18254var isRegExp = __webpack_require__(47850);
18255var requireObjectCoercible = __webpack_require__(84488);
18256var speciesConstructor = __webpack_require__(36707);
18257var advanceStringIndex = __webpack_require__(31530);
18258var toLength = __webpack_require__(17466);
18259var toString = __webpack_require__(41340);
18260var getMethod = __webpack_require__(58173);
18261var arraySlice = __webpack_require__(41589);
18262var callRegExpExec = __webpack_require__(97651);
18263var regexpExec = __webpack_require__(22261);
18264var stickyHelpers = __webpack_require__(52999);
18265var fails = __webpack_require__(47293);
18266
18267var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
18268var MAX_UINT32 = 0xFFFFFFFF;
18269var min = Math.min;
18270var $push = [].push;
18271var exec = uncurryThis(/./.exec);
18272var push = uncurryThis($push);
18273var stringSlice = uncurryThis(''.slice);
18274
18275// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
18276// Weex JS has frozen built-in prototypes, so use try / catch wrapper
18277var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
18278  // eslint-disable-next-line regexp/no-empty-group -- required for testing
18279  var re = /(?:)/;
18280  var originalExec = re.exec;
18281  re.exec = function () { return originalExec.apply(this, arguments); };
18282  var result = 'ab'.split(re);
18283  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
18284});
18285
18286// @@split logic
18287fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {
18288  var internalSplit;
18289  if (
18290    'abbc'.split(/(b)*/)[1] == 'c' ||
18291    // eslint-disable-next-line regexp/no-empty-group -- required for testing
18292    'test'.split(/(?:)/, -1).length != 4 ||
18293    'ab'.split(/(?:ab)*/).length != 2 ||
18294    '.'.split(/(.?)(.?)/).length != 4 ||
18295    // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing
18296    '.'.split(/()()/).length > 1 ||
18297    ''.split(/.?/).length
18298  ) {
18299    // based on es5-shim implementation, need to rework it
18300    internalSplit = function (separator, limit) {
18301      var string = toString(requireObjectCoercible(this));
18302      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
18303      if (lim === 0) return [];
18304      if (separator === undefined) return [string];
18305      // If `separator` is not a regex, use native split
18306      if (!isRegExp(separator)) {
18307        return call(nativeSplit, string, separator, lim);
18308      }
18309      var output = [];
18310      var flags = (separator.ignoreCase ? 'i' : '') +
18311                  (separator.multiline ? 'm' : '') +
18312                  (separator.unicode ? 'u' : '') +
18313                  (separator.sticky ? 'y' : '');
18314      var lastLastIndex = 0;
18315      // Make `global` and avoid `lastIndex` issues by working with a copy
18316      var separatorCopy = new RegExp(separator.source, flags + 'g');
18317      var match, lastIndex, lastLength;
18318      while (match = call(regexpExec, separatorCopy, string)) {
18319        lastIndex = separatorCopy.lastIndex;
18320        if (lastIndex > lastLastIndex) {
18321          push(output, stringSlice(string, lastLastIndex, match.index));
18322          if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));
18323          lastLength = match[0].length;
18324          lastLastIndex = lastIndex;
18325          if (output.length >= lim) break;
18326        }
18327        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
18328      }
18329      if (lastLastIndex === string.length) {
18330        if (lastLength || !exec(separatorCopy, '')) push(output, '');
18331      } else push(output, stringSlice(string, lastLastIndex));
18332      return output.length > lim ? arraySlice(output, 0, lim) : output;
18333    };
18334  // Chakra, V8
18335  } else if ('0'.split(undefined, 0).length) {
18336    internalSplit = function (separator, limit) {
18337      return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);
18338    };
18339  } else internalSplit = nativeSplit;
18340
18341  return [
18342    // `String.prototype.split` method
18343    // https://tc39.es/ecma262/#sec-string.prototype.split
18344    function split(separator, limit) {
18345      var O = requireObjectCoercible(this);
18346      var splitter = isNullOrUndefined(separator)
vendor: 2,089 bytes, lines 18346-18408
18346 ? undefined : getMethod(separator, SPLIT);
18347      return splitter
18348        ? call(splitter, separator, O, limit)
18349        : call(internalSplit, toString(O), separator, limit);
18350    },
18351    // `RegExp.prototype[@@split]` method
18352    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
18353    //
18354    // NOTE: This cannot be properly polyfilled in engines that don't support
18355    // the 'y' flag.
18356    function (string, limit) {
18357      var rx = anObject(this);
18358      var S = toString(string);
18359      var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);
18360
18361      if (res.done) return res.value;
18362
18363      var C = speciesConstructor(rx, RegExp);
18364
18365      var unicodeMatching = rx.unicode;
18366      var flags = (rx.ignoreCase ? 'i' : '') +
18367                  (rx.multiline ? 'm' : '') +
18368                  (rx.unicode ? 'u' : '') +
18369                  (UNSUPPORTED_Y ? 'g' : 'y');
18370
18371      // ^(? + rx + ) is needed, in combination with some S slicing, to
18372      // simulate the 'y' flag.
18373      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);
18374      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
18375      if (lim === 0) return [];
18376      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
18377      var p = 0;
18378      var q = 0;
18379      var A = [];
18380      while (q < S.length) {
18381        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
18382        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);
18383        var e;
18384        if (
18385          z === null ||
18386          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p
18387        ) {
18388          q = advanceStringIndex(S, q, unicodeMatching);
18389        } else {
18390          push(A, stringSlice(S, p, q));
18391          if (A.length === lim) return A;
18392          for (var i = 1; i <= z.length - 1; i++) {
18393            push(A, z[i]);
18394            if (A.length === lim) return A;
18395          }
18396          q = p = e;
18397        }
18398      }
18399      push(A, stringSlice(S, p));
18400      return A;
18401    }
18402  ];
18403}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);
18404
18405
18406/***/ }),
18407
18408/***/ 
vendor: 4,194 bytes, lines 18408-18535
1840823157:
18409/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18410
18411"use strict";
18412
18413var $ = __webpack_require__(82109);
18414var uncurryThis = __webpack_require__(1702);
18415var getOwnPropertyDescriptor = (__webpack_require__(31236).f);
18416var toLength = __webpack_require__(17466);
18417var toString = __webpack_require__(41340);
18418var notARegExp = __webpack_require__(3929);
18419var requireObjectCoercible = __webpack_require__(84488);
18420var correctIsRegExpLogic = __webpack_require__(84964);
18421var IS_PURE = __webpack_require__(31913);
18422
18423// eslint-disable-next-line es-x/no-string-prototype-startswith -- safe
18424var nativeStartsWith = uncurryThis(''.startsWith);
18425var stringSlice = uncurryThis(''.slice);
18426var min = Math.min;
18427
18428var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');
18429// https://github.com/zloirock/core-js/pull/702
18430var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {
18431  var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');
18432  return descriptor && !descriptor.writable;
18433}();
18434
18435// `String.prototype.startsWith` method
18436// https://tc39.es/ecma262/#sec-string.prototype.startswith
18437$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
18438  startsWith: function startsWith(searchString /* , position = 0 */) {
18439    var that = toString(requireObjectCoercible(this));
18440    notARegExp(searchString);
18441    var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
18442    var search = toString(searchString);
18443    return nativeStartsWith
18444      ? nativeStartsWith(that, search, index)
18445      : stringSlice(that, index, index + search.length) === search;
18446  }
18447});
18448
18449
18450/***/ }),
18451
18452/***/ 7397:
18453/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18454
18455"use strict";
18456
18457var $ = __webpack_require__(82109);
18458var createHTML = __webpack_require__(14230);
18459var forcedStringHTMLMethod = __webpack_require__(43429);
18460
18461// `String.prototype.strike` method
18462// https://tc39.es/ecma262/#sec-string.prototype.strike
18463$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {
18464  strike: function strike() {
18465    return createHTML(this, 'strike', '', '');
18466  }
18467});
18468
18469
18470/***/ }),
18471
18472/***/ 60086:
18473/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18474
18475"use strict";
18476
18477var $ = __webpack_require__(82109);
18478var createHTML = __webpack_require__(14230);
18479var forcedStringHTMLMethod = __webpack_require__(43429);
18480
18481// `String.prototype.sub` method
18482// https://tc39.es/ecma262/#sec-string.prototype.sub
18483$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') }, {
18484  sub: function sub() {
18485    return createHTML(this, 'sub', '', '');
18486  }
18487});
18488
18489
18490/***/ }),
18491
18492/***/ 83650:
18493/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18494
18495"use strict";
18496
18497var $ = __webpack_require__(82109);
18498var uncurryThis = __webpack_require__(1702);
18499var requireObjectCoercible = __webpack_require__(84488);
18500var toIntegerOrInfinity = __webpack_require__(19303);
18501var toString = __webpack_require__(41340);
18502
18503var stringSlice = uncurryThis(''.slice);
18504var max = Math.max;
18505var min = Math.min;
18506
18507// eslint-disable-next-line unicorn/prefer-string-slice, es-x/no-string-prototype-substr -- required for testing
18508var FORCED = !''.substr || 'ab'.substr(-1) !== 'b';
18509
18510// `String.prototype.substr` method
18511// https://tc39.es/ecma262/#sec-string.prototype.substr
18512$({ target: 'String', proto: true, forced: FORCED }, {
18513  substr: function substr(start, length) {
18514    var that = toString(requireObjectCoercible(this));
18515    var size = that.length;
18516    var intStart = toIntegerOrInfinity(start);
18517    var intLength, intEnd;
18518    if (intStart === Infinity) intStart = 0;
18519    if (intStart < 0) intStart = max(size + intStart, 0);
18520    intLength = length === undefined ? size : toIntegerOrInfinity(length);
18521    if (intLength <= 0 || intLength === Infinity) return '';
18522    intEnd = min(intStart + intLength, size);
18523    return intStart >= intEnd ? '' : stringSlice(that, intStart, intEnd);
18524  }
18525});
18526
18527
18528/***/ }),
18529
18530/***/ 80623:
18531/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18532
18533"use strict";
18534
18535var $ = __webpack_require__(82109);
vendor: 5,112 bytes, lines 18536-18690
18536var createHTML = __webpack_require__(14230);
18537var forcedStringHTMLMethod = __webpack_require__(43429);
18538
18539// `String.prototype.sup` method
18540// https://tc39.es/ecma262/#sec-string.prototype.sup
18541$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sup') }, {
18542  sup: function sup() {
18543    return createHTML(this, 'sup', '', '');
18544  }
18545});
18546
18547
18548/***/ }),
18549
18550/***/ 48702:
18551/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18552
18553// TODO: Remove this line from `core-js@4`
18554__webpack_require__(83462);
18555var $ = __webpack_require__(82109);
18556var trimEnd = __webpack_require__(10365);
18557
18558// `String.prototype.trimEnd` method
18559// https://tc39.es/ecma262/#sec-string.prototype.trimend
18560// eslint-disable-next-line es-x/no-string-prototype-trimstart-trimend -- safe
18561$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimEnd !== trimEnd }, {
18562  trimEnd: trimEnd
18563});
18564
18565
18566/***/ }),
18567
18568/***/ 99967:
18569/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18570
18571var $ = __webpack_require__(82109);
18572var trimStart = __webpack_require__(33217);
18573
18574// `String.prototype.trimLeft` method
18575// https://tc39.es/ecma262/#sec-string.prototype.trimleft
18576// eslint-disable-next-line es-x/no-string-prototype-trimleft-trimright -- safe
18577$({ target: 'String', proto: true, name: 'trimStart', forced: ''.trimLeft !== trimStart }, {
18578  trimLeft: trimStart
18579});
18580
18581
18582/***/ }),
18583
18584/***/ 83462:
18585/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18586
18587var $ = __webpack_require__(82109);
18588var trimEnd = __webpack_require__(10365);
18589
18590// `String.prototype.trimRight` method
18591// https://tc39.es/ecma262/#sec-string.prototype.trimend
18592// eslint-disable-next-line es-x/no-string-prototype-trimleft-trimright -- safe
18593$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimRight !== trimEnd }, {
18594  trimRight: trimEnd
18595});
18596
18597
18598/***/ }),
18599
18600/***/ 55674:
18601/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18602
18603// TODO: Remove this line from `core-js@4`
18604__webpack_require__(99967);
18605var $ = __webpack_require__(82109);
18606var trimStart = __webpack_require__(33217);
18607
18608// `String.prototype.trimStart` method
18609// https://tc39.es/ecma262/#sec-string.prototype.trimstart
18610// eslint-disable-next-line es-x/no-string-prototype-trimstart-trimend -- safe
18611$({ target: 'String', proto: true, name: 'trimStart', forced: ''.trimStart !== trimStart }, {
18612  trimStart: trimStart
18613});
18614
18615
18616/***/ }),
18617
18618/***/ 73210:
18619/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18620
18621"use strict";
18622
18623var $ = __webpack_require__(82109);
18624var $trim = (__webpack_require__(53111).trim);
18625var forcedStringTrimMethod = __webpack_require__(76091);
18626
18627// `String.prototype.trim` method
18628// https://tc39.es/ecma262/#sec-string.prototype.trim
18629$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {
18630  trim: function trim() {
18631    return $trim(this);
18632  }
18633});
18634
18635
18636/***/ }),
18637
18638/***/ 72443:
18639/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18640
18641var defineWellKnownSymbol = __webpack_require__(26800);
18642
18643// `Symbol.asyncIterator` well-known symbol
18644// https://tc39.es/ecma262/#sec-symbol.asynciterator
18645defineWellKnownSymbol('asyncIterator');
18646
18647
18648/***/ }),
18649
18650/***/ 4032:
18651/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18652
18653"use strict";
18654
18655var $ = __webpack_require__(82109);
18656var global = __webpack_require__(17854);
18657var call = __webpack_require__(46916);
18658var uncurryThis = __webpack_require__(1702);
18659var IS_PURE = __webpack_require__(31913);
18660var DESCRIPTORS = __webpack_require__(19781);
18661var NATIVE_SYMBOL = __webpack_require__(36293);
18662var fails = __webpack_require__(47293);
18663var hasOwn = __webpack_require__(92597);
18664var isPrototypeOf = __webpack_require__(47976);
18665var anObject = __webpack_require__(19670);
18666var toIndexedObject = __webpack_require__(45656);
18667var toPropertyKey = __webpack_require__(34948);
18668var $toString = __webpack_require__(41340);
18669var createPropertyDescriptor = __webpack_require__(79114);
18670var nativeObjectCreate = __webpack_require__(70030);
18671var objectKeys = __webpack_require__(81956);
18672var getOwnPropertyNamesModule = __webpack_require__(8006);
18673var getOwnPropertyNamesExternal = __webpack_require__(1156);
18674var getOwnPropertySymbolsModule = __webpack_require__(25181);
18675var getOwnPropertyDescriptorModule = __webpack_require__(31236);
18676var definePropertyModule = __webpack_require__(3070);
18677var definePropertiesModule = __webpack_require__(36048);
18678var propertyIsEnumerableModule = __webpack_require__(55296);
18679var defineBuiltIn = __webpack_require__(98052);
18680var shared = __webpack_require__(72309);
18681var sharedKey = __webpack_require__(6200);
18682var hiddenKeys = __webpack_require__(3501);
18683var uid = __webpack_require__(69711);
18684var wellKnownSymbol = __webpack_require__(5112);
18685var wrappedWellKnownSymbolModule = __webpack_require__(6061);
18686var defineWellKnownSymbol = __webpack_require__(26800);
18687var defineSymbolToPrimitive = __webpack_require__(56532);
18688var setToStringTag = __webpack_require__(58003);
18689var InternalStateModule = __webpack_require__(29909);
18690var $forEach = (__webpack_require__(4
vendor: 8,235 bytes, lines 18690-18910
186902092).forEach);
18691
18692var HIDDEN = sharedKey('hidden');
18693var SYMBOL = 'Symbol';
18694var PROTOTYPE = 'prototype';
18695
18696var setInternalState = InternalStateModule.set;
18697var getInternalState = InternalStateModule.getterFor(SYMBOL);
18698
18699var ObjectPrototype = Object[PROTOTYPE];
18700var $Symbol = global.Symbol;
18701var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
18702var TypeError = global.TypeError;
18703var QObject = global.QObject;
18704var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
18705var nativeDefineProperty = definePropertyModule.f;
18706var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
18707var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
18708var push = uncurryThis([].push);
18709
18710var AllSymbols = shared('symbols');
18711var ObjectPrototypeSymbols = shared('op-symbols');
18712var WellKnownSymbolsStore = shared('wks');
18713
18714// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
18715var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
18716
18717// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
18718var setSymbolDescriptor = DESCRIPTORS && fails(function () {
18719  return nativeObjectCreate(nativeDefineProperty({}, 'a', {
18720    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }
18721  })).a != 7;
18722}) ? function (O, P, Attributes) {
18723  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
18724  if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
18725  nativeDefineProperty(O, P, Attributes);
18726  if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
18727    nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
18728  }
18729} : nativeDefineProperty;
18730
18731var wrap = function (tag, description) {
18732  var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
18733  setInternalState(symbol, {
18734    type: SYMBOL,
18735    tag: tag,
18736    description: description
18737  });
18738  if (!DESCRIPTORS) symbol.description = description;
18739  return symbol;
18740};
18741
18742var $defineProperty = function defineProperty(O, P, Attributes) {
18743  if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
18744  anObject(O);
18745  var key = toPropertyKey(P);
18746  anObject(Attributes);
18747  if (hasOwn(AllSymbols, key)) {
18748    if (!Attributes.enumerable) {
18749      if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
18750      O[HIDDEN][key] = true;
18751    } else {
18752      if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
18753      Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
18754    } return setSymbolDescriptor(O, key, Attributes);
18755  } return nativeDefineProperty(O, key, Attributes);
18756};
18757
18758var $defineProperties = function defineProperties(O, Properties) {
18759  anObject(O);
18760  var properties = toIndexedObject(Properties);
18761  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
18762  $forEach(keys, function (key) {
18763    if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
18764  });
18765  return O;
18766};
18767
18768var $create = function create(O, Properties) {
18769  return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
18770};
18771
18772var $propertyIsEnumerable = function propertyIsEnumerable(V) {
18773  var P = toPropertyKey(V);
18774  var enumerable = call(nativePropertyIsEnumerable, this, P);
18775  if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
18776  return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]
18777    ? enumerable : true;
18778};
18779
18780var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
18781  var it = toIndexedObject(O);
18782  var key = toPropertyKey(P);
18783  if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
18784  var descriptor = nativeGetOwnPropertyDescriptor(it, key);
18785  if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
18786    descriptor.enumerable = true;
18787  }
18788  return descriptor;
18789};
18790
18791var $getOwnPropertyNames = function getOwnPropertyNames(O) {
18792  var names = nativeGetOwnPropertyNames(toIndexedObject(O));
18793  var result = [];
18794  $forEach(names, function (key) {
18795    if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
18796  });
18797  return result;
18798};
18799
18800var $getOwnPropertySymbols = function (O) {
18801  var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
18802  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
18803  var result = [];
18804  $forEach(names, function (key) {
18805    if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
18806      push(result, AllSymbols[key]);
18807    }
18808  });
18809  return result;
18810};
18811
18812// `Symbol` constructor
18813// https://tc39.es/ecma262/#sec-symbol-constructor
18814if (!NATIVE_SYMBOL) {
18815  $Symbol = function Symbol() {
18816    if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');
18817    var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
18818    var tag = uid(description);
18819    var setter = function (value) {
18820      if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
18821      if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
18822      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
18823    };
18824    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
18825    return wrap(tag, description);
18826  };
18827
18828  SymbolPrototype = $Symbol[PROTOTYPE];
18829
18830  defineBuiltIn(SymbolPrototype, 'toString', function toString() {
18831    return getInternalState(this).tag;
18832  });
18833
18834  defineBuiltIn($Symbol, 'withoutSetter', function (description) {
18835    return wrap(uid(description), description);
18836  });
18837
18838  propertyIsEnumerableModule.f = $propertyIsEnumerable;
18839  definePropertyModule.f = $defineProperty;
18840  definePropertiesModule.f = $defineProperties;
18841  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
18842  getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
18843  getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
18844
18845  wrappedWellKnownSymbolModule.f = function (name) {
18846    return wrap(wellKnownSymbol(name), name);
18847  };
18848
18849  if (DESCRIPTORS) {
18850    // https://github.com/tc39/proposal-Symbol-description
18851    nativeDefineProperty(SymbolPrototype, 'description', {
18852      configurable: true,
18853      get: function description() {
18854        return getInternalState(this).description;
18855      }
18856    });
18857    if (!IS_PURE) {
18858      defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
18859    }
18860  }
18861}
18862
18863$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
18864  Symbol: $Symbol
18865});
18866
18867$forEach(objectKeys(WellKnownSymbolsStore), function (name) {
18868  defineWellKnownSymbol(name);
18869});
18870
18871$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
18872  useSetter: function () { USE_SETTER = true; },
18873  useSimple: function () { USE_SETTER = false; }
18874});
18875
18876$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
18877  // `Object.create` method
18878  // https://tc39.es/ecma262/#sec-object.create
18879  create: $create,
18880  // `Object.defineProperty` method
18881  // https://tc39.es/ecma262/#sec-object.defineproperty
18882  defineProperty: $defineProperty,
18883  // `Object.defineProperties` method
18884  // https://tc39.es/ecma262/#sec-object.defineproperties
18885  defineProperties: $defineProperties,
18886  // `Object.getOwnPropertyDescriptor` method
18887  // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
18888  getOwnPropertyDescriptor: $getOwnPropertyDescriptor
18889});
18890
18891$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {
18892  // `Object.getOwnPropertyNames` method
18893  // https://tc39.es/ecma262/#sec-object.getownpropertynames
18894  getOwnPropertyNames: $getOwnPropertyNames
18895});
18896
18897// `Symbol.prototype[@@toPrimitive]` method
18898// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
18899defineSymbolToPrimitive();
18900
18901// `Symbol.prototype[@@toStringTag]` property
18902// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
18903setToStringTag($Symbol, SYMBOL);
18904
18905hiddenKeys[HIDDEN] = true;
18906
18907
18908/***/ }),
18909
18910/***/ 
1891041817:
18911/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18912
18913"use strict";
vendor: 5,053 bytes, lines 18914-19066
18914// `Symbol.prototype.description` getter
18915// https://tc39.es/ecma262/#sec-symbol.prototype.description
18916
18917var $ = __webpack_require__(82109);
18918var DESCRIPTORS = __webpack_require__(19781);
18919var global = __webpack_require__(17854);
18920var uncurryThis = __webpack_require__(1702);
18921var hasOwn = __webpack_require__(92597);
18922var isCallable = __webpack_require__(60614);
18923var isPrototypeOf = __webpack_require__(47976);
18924var toString = __webpack_require__(41340);
18925var defineProperty = (__webpack_require__(3070).f);
18926var copyConstructorProperties = __webpack_require__(99920);
18927
18928var NativeSymbol = global.Symbol;
18929var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
18930
18931if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||
18932  // Safari 12 bug
18933  NativeSymbol().description !== undefined
18934)) {
18935  var EmptyStringDescriptionStore = {};
18936  // wrap Symbol constructor for correct work with undefined description
18937  var SymbolWrapper = function Symbol() {
18938    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);
18939    var result = isPrototypeOf(SymbolPrototype, this)
18940      ? new NativeSymbol(description)
18941      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
18942      : description === undefined ? NativeSymbol() : NativeSymbol(description);
18943    if (description === '') EmptyStringDescriptionStore[result] = true;
18944    return result;
18945  };
18946
18947  copyConstructorProperties(SymbolWrapper, NativeSymbol);
18948  SymbolWrapper.prototype = SymbolPrototype;
18949  SymbolPrototype.constructor = SymbolWrapper;
18950
18951  var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
18952  var thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);
18953  var symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);
18954  var regexp = /^Symbol\((.*)\)[^)]+$/;
18955  var replace = uncurryThis(''.replace);
18956  var stringSlice = uncurryThis(''.slice);
18957
18958  defineProperty(SymbolPrototype, 'description', {
18959    configurable: true,
18960    get: function description() {
18961      var symbol = thisSymbolValue(this);
18962      if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';
18963      var string = symbolDescriptiveString(symbol);
18964      var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');
18965      return desc === '' ? undefined : desc;
18966    }
18967  });
18968
18969  $({ global: true, constructor: true, forced: true }, {
18970    Symbol: SymbolWrapper
18971  });
18972}
18973
18974
18975/***/ }),
18976
18977/***/ 40763:
18978/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
18979
18980var $ = __webpack_require__(82109);
18981var getBuiltIn = __webpack_require__(35005);
18982var hasOwn = __webpack_require__(92597);
18983var toString = __webpack_require__(41340);
18984var shared = __webpack_require__(72309);
18985var NATIVE_SYMBOL_REGISTRY = __webpack_require__(2015);
18986
18987var StringToSymbolRegistry = shared('string-to-symbol-registry');
18988var SymbolToStringRegistry = shared('symbol-to-string-registry');
18989
18990// `Symbol.for` method
18991// https://tc39.es/ecma262/#sec-symbol.for
18992$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
18993  'for': function (key) {
18994    var string = toString(key);
18995    if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
18996    var symbol = getBuiltIn('Symbol')(string);
18997    StringToSymbolRegistry[string] = symbol;
18998    SymbolToStringRegistry[symbol] = string;
18999    return symbol;
19000  }
19001});
19002
19003
19004/***/ }),
19005
19006/***/ 92401:
19007/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19008
19009var defineWellKnownSymbol = __webpack_require__(26800);
19010
19011// `Symbol.hasInstance` well-known symbol
19012// https://tc39.es/ecma262/#sec-symbol.hasinstance
19013defineWellKnownSymbol('hasInstance');
19014
19015
19016/***/ }),
19017
19018/***/ 8722:
19019/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19020
19021var defineWellKnownSymbol = __webpack_require__(26800);
19022
19023// `Symbol.isConcatSpreadable` well-known symbol
19024// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable
19025defineWellKnownSymbol('isConcatSpreadable');
19026
19027
19028/***/ }),
19029
19030/***/ 32165:
19031/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19032
19033var defineWellKnownSymbol = __webpack_require__(26800);
19034
19035// `Symbol.iterator` well-known symbol
19036// https://tc39.es/ecma262/#sec-symbol.iterator
19037defineWellKnownSymbol('iterator');
19038
19039
19040/***/ }),
19041
19042/***/ 82526:
19043/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19044
19045// TODO: Remove this module from `core-js@4` since it's split to modules listed below
19046__webpack_require__(4032);
19047__webpack_require__(40763);
19048__webpack_require__(26620);
19049__webpack_require__(38862);
19050__webpack_require__(29660);
19051
19052
19053/***/ }),
19054
19055/***/ 26620:
19056/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19057
19058var $ = __webpack_require__(82109);
19059var hasOwn = __webpack_require__(92597);
19060var isSymbol = __webpack_require__(52190);
19061var tryToString = __webpack_require__(66330);
19062var shared = __webpack_require__(72309);
19063var NATIVE_SYMBOL_REGISTRY = __webpack_require__(2015);
19064
19065var SymbolToStringRegistry = shared('symbol-to-string-registry');
19066
vendor: 6,370 bytes, lines 19067-19285
19067// `Symbol.keyFor` method
19068// https://tc39.es/ecma262/#sec-symbol.keyfor
19069$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
19070  keyFor: function keyFor(sym) {
19071    if (!isSymbol(sym)) throw TypeError(tryToString(sym) + ' is not a symbol');
19072    if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
19073  }
19074});
19075
19076
19077/***/ }),
19078
19079/***/ 16066:
19080/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19081
19082var defineWellKnownSymbol = __webpack_require__(26800);
19083
19084// `Symbol.matchAll` well-known symbol
19085// https://tc39.es/ecma262/#sec-symbol.matchall
19086defineWellKnownSymbol('matchAll');
19087
19088
19089/***/ }),
19090
19091/***/ 69007:
19092/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19093
19094var defineWellKnownSymbol = __webpack_require__(26800);
19095
19096// `Symbol.match` well-known symbol
19097// https://tc39.es/ecma262/#sec-symbol.match
19098defineWellKnownSymbol('match');
19099
19100
19101/***/ }),
19102
19103/***/ 83510:
19104/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19105
19106var defineWellKnownSymbol = __webpack_require__(26800);
19107
19108// `Symbol.replace` well-known symbol
19109// https://tc39.es/ecma262/#sec-symbol.replace
19110defineWellKnownSymbol('replace');
19111
19112
19113/***/ }),
19114
19115/***/ 41840:
19116/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19117
19118var defineWellKnownSymbol = __webpack_require__(26800);
19119
19120// `Symbol.search` well-known symbol
19121// https://tc39.es/ecma262/#sec-symbol.search
19122defineWellKnownSymbol('search');
19123
19124
19125/***/ }),
19126
19127/***/ 6982:
19128/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19129
19130var defineWellKnownSymbol = __webpack_require__(26800);
19131
19132// `Symbol.species` well-known symbol
19133// https://tc39.es/ecma262/#sec-symbol.species
19134defineWellKnownSymbol('species');
19135
19136
19137/***/ }),
19138
19139/***/ 32159:
19140/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19141
19142var defineWellKnownSymbol = __webpack_require__(26800);
19143
19144// `Symbol.split` well-known symbol
19145// https://tc39.es/ecma262/#sec-symbol.split
19146defineWellKnownSymbol('split');
19147
19148
19149/***/ }),
19150
19151/***/ 96649:
19152/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19153
19154var defineWellKnownSymbol = __webpack_require__(26800);
19155var defineSymbolToPrimitive = __webpack_require__(56532);
19156
19157// `Symbol.toPrimitive` well-known symbol
19158// https://tc39.es/ecma262/#sec-symbol.toprimitive
19159defineWellKnownSymbol('toPrimitive');
19160
19161// `Symbol.prototype[@@toPrimitive]` method
19162// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
19163defineSymbolToPrimitive();
19164
19165
19166/***/ }),
19167
19168/***/ 39341:
19169/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19170
19171var getBuiltIn = __webpack_require__(35005);
19172var defineWellKnownSymbol = __webpack_require__(26800);
19173var setToStringTag = __webpack_require__(58003);
19174
19175// `Symbol.toStringTag` well-known symbol
19176// https://tc39.es/ecma262/#sec-symbol.tostringtag
19177defineWellKnownSymbol('toStringTag');
19178
19179// `Symbol.prototype[@@toStringTag]` property
19180// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
19181setToStringTag(getBuiltIn('Symbol'), 'Symbol');
19182
19183
19184/***/ }),
19185
19186/***/ 60543:
19187/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19188
19189var defineWellKnownSymbol = __webpack_require__(26800);
19190
19191// `Symbol.unscopables` well-known symbol
19192// https://tc39.es/ecma262/#sec-symbol.unscopables
19193defineWellKnownSymbol('unscopables');
19194
19195
19196/***/ }),
19197
19198/***/ 48675:
19199/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19200
19201"use strict";
19202
19203var ArrayBufferViewCore = __webpack_require__(90260);
19204var lengthOfArrayLike = __webpack_require__(26244);
19205var toIntegerOrInfinity = __webpack_require__(19303);
19206
19207var aTypedArray = ArrayBufferViewCore.aTypedArray;
19208var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19209
19210// `%TypedArray%.prototype.at` method
19211// https://github.com/tc39/proposal-relative-indexing-method
19212exportTypedArrayMethod('at', function at(index) {
19213  var O = aTypedArray(this);
19214  var len = lengthOfArrayLike(O);
19215  var relativeIndex = toIntegerOrInfinity(index);
19216  var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;
19217  return (k < 0 || k >= len) ? undefined : O[k];
19218});
19219
19220
19221/***/ }),
19222
19223/***/ 92990:
19224/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19225
19226"use strict";
19227
19228var uncurryThis = __webpack_require__(1702);
19229var ArrayBufferViewCore = __webpack_require__(90260);
19230var $ArrayCopyWithin = __webpack_require__(1048);
19231
19232var u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);
19233var aTypedArray = ArrayBufferViewCore.aTypedArray;
19234var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19235
19236// `%TypedArray%.prototype.copyWithin` method
19237// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin
19238exportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {
19239  return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
19240});
19241
19242
19243/***/ }),
19244
19245/***/ 18927:
19246/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19247
19248"use strict";
19249
19250var ArrayBufferViewCore = __webpack_require__(90260);
19251var $every = (__webpack_require__(42092).every);
19252
19253var aTypedArray = ArrayBufferViewCore.aTypedArray;
19254var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19255
19256// `%TypedArray%.prototype.every` method
19257// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every
19258exportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {
19259  return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
19260});
19261
19262
19263/***/ }),
19264
19265/***/ 33105:
19266/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19267
19268"use strict";
19269
19270var ArrayBufferViewCore = __webpack_require__(90260);
19271var $fill = __webpack_require__(21285);
19272var toBigInt = __webpack_require__(64599);
19273var classof = __webpack_require__(70648);
19274var call = __webpack_require__(46916);
19275var uncurryThis = __webpack_require__(1702);
19276var fails = __webpack_require__(47293);
19277
19278var aTypedArray = ArrayBufferViewCore.aTypedArray;
19279var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19280var slice = uncurryThis(''.slice);
19281
19282// V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18
19283var CONVERSION_BUG = fails(function () {
19284  var count = 0;
19285  // eslint-disable-next-line es-x/no-typed-arrays -- safe
vendor: 21,879 bytes, lines 19286-19963
19286  new Int8Array(2).fill({ valueOf: function () { return count++; } });
19287  return count !== 1;
19288});
19289
19290// `%TypedArray%.prototype.fill` method
19291// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
19292exportTypedArrayMethod('fill', function fill(value /* , start, end */) {
19293  var length = arguments.length;
19294  aTypedArray(this);
19295  var actualValue = slice(classof(this), 0, 3) === 'Big' ? toBigInt(value) : +value;
19296  return call($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);
19297}, CONVERSION_BUG);
19298
19299
19300/***/ }),
19301
19302/***/ 35035:
19303/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19304
19305"use strict";
19306
19307var ArrayBufferViewCore = __webpack_require__(90260);
19308var $filter = (__webpack_require__(42092).filter);
19309var fromSpeciesAndList = __webpack_require__(43074);
19310
19311var aTypedArray = ArrayBufferViewCore.aTypedArray;
19312var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19313
19314// `%TypedArray%.prototype.filter` method
19315// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter
19316exportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {
19317  var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
19318  return fromSpeciesAndList(this, list);
19319});
19320
19321
19322/***/ }),
19323
19324/***/ 7174:
19325/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19326
19327"use strict";
19328
19329var ArrayBufferViewCore = __webpack_require__(90260);
19330var $findIndex = (__webpack_require__(42092).findIndex);
19331
19332var aTypedArray = ArrayBufferViewCore.aTypedArray;
19333var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19334
19335// `%TypedArray%.prototype.findIndex` method
19336// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex
19337exportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {
19338  return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
19339});
19340
19341
19342/***/ }),
19343
19344/***/ 14590:
19345/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19346
19347"use strict";
19348
19349var ArrayBufferViewCore = __webpack_require__(90260);
19350var $findLastIndex = (__webpack_require__(9671).findLastIndex);
19351
19352var aTypedArray = ArrayBufferViewCore.aTypedArray;
19353var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19354
19355// `%TypedArray%.prototype.findLastIndex` method
19356// https://github.com/tc39/proposal-array-find-from-last
19357exportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {
19358  return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
19359});
19360
19361
19362/***/ }),
19363
19364/***/ 63408:
19365/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19366
19367"use strict";
19368
19369var ArrayBufferViewCore = __webpack_require__(90260);
19370var $findLast = (__webpack_require__(9671).findLast);
19371
19372var aTypedArray = ArrayBufferViewCore.aTypedArray;
19373var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19374
19375// `%TypedArray%.prototype.findLast` method
19376// https://github.com/tc39/proposal-array-find-from-last
19377exportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {
19378  return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
19379});
19380
19381
19382/***/ }),
19383
19384/***/ 74345:
19385/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19386
19387"use strict";
19388
19389var ArrayBufferViewCore = __webpack_require__(90260);
19390var $find = (__webpack_require__(42092).find);
19391
19392var aTypedArray = ArrayBufferViewCore.aTypedArray;
19393var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19394
19395// `%TypedArray%.prototype.find` method
19396// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find
19397exportTypedArrayMethod('find', function find(predicate /* , thisArg */) {
19398  return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
19399});
19400
19401
19402/***/ }),
19403
19404/***/ 44197:
19405/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19406
19407var createTypedArrayConstructor = __webpack_require__(19843);
19408
19409// `Float32Array` constructor
19410// https://tc39.es/ecma262/#sec-typedarray-objects
19411createTypedArrayConstructor('Float32', function (init) {
19412  return function Float32Array(data, byteOffset, length) {
19413    return init(this, data, byteOffset, length);
19414  };
19415});
19416
19417
19418/***/ }),
19419
19420/***/ 76495:
19421/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19422
19423var createTypedArrayConstructor = __webpack_require__(19843);
19424
19425// `Float64Array` constructor
19426// https://tc39.es/ecma262/#sec-typedarray-objects
19427createTypedArrayConstructor('Float64', function (init) {
19428  return function Float64Array(data, byteOffset, length) {
19429    return init(this, data, byteOffset, length);
19430  };
19431});
19432
19433
19434/***/ }),
19435
19436/***/ 32846:
19437/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19438
19439"use strict";
19440
19441var ArrayBufferViewCore = __webpack_require__(90260);
19442var $forEach = (__webpack_require__(42092).forEach);
19443
19444var aTypedArray = ArrayBufferViewCore.aTypedArray;
19445var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19446
19447// `%TypedArray%.prototype.forEach` method
19448// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach
19449exportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {
19450  $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
19451});
19452
19453
19454/***/ }),
19455
19456/***/ 98145:
19457/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19458
19459"use strict";
19460
19461var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(63832);
19462var exportTypedArrayStaticMethod = (__webpack_require__(90260).exportTypedArrayStaticMethod);
19463var typedArrayFrom = __webpack_require__(97321);
19464
19465// `%TypedArray%.from` method
19466// https://tc39.es/ecma262/#sec-%typedarray%.from
19467exportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);
19468
19469
19470/***/ }),
19471
19472/***/ 44731:
19473/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19474
19475"use strict";
19476
19477var ArrayBufferViewCore = __webpack_require__(90260);
19478var $includes = (__webpack_require__(41318).includes);
19479
19480var aTypedArray = ArrayBufferViewCore.aTypedArray;
19481var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19482
19483// `%TypedArray%.prototype.includes` method
19484// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes
19485exportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {
19486  return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
19487});
19488
19489
19490/***/ }),
19491
19492/***/ 77209:
19493/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19494
19495"use strict";
19496
19497var ArrayBufferViewCore = __webpack_require__(90260);
19498var $indexOf = (__webpack_require__(41318).indexOf);
19499
19500var aTypedArray = ArrayBufferViewCore.aTypedArray;
19501var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19502
19503// `%TypedArray%.prototype.indexOf` method
19504// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof
19505exportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {
19506  return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
19507});
19508
19509
19510/***/ }),
19511
19512/***/ 35109:
19513/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19514
19515var createTypedArrayConstructor = __webpack_require__(19843);
19516
19517// `Int16Array` constructor
19518// https://tc39.es/ecma262/#sec-typedarray-objects
19519createTypedArrayConstructor('Int16', function (init) {
19520  return function Int16Array(data, byteOffset, length) {
19521    return init(this, data, byteOffset, length);
19522  };
19523});
19524
19525
19526/***/ }),
19527
19528/***/ 65125:
19529/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19530
19531var createTypedArrayConstructor = __webpack_require__(19843);
19532
19533// `Int32Array` constructor
19534// https://tc39.es/ecma262/#sec-typedarray-objects
19535createTypedArrayConstructor('Int32', function (init) {
19536  return function Int32Array(data, byteOffset, length) {
19537    return init(this, data, byteOffset, length);
19538  };
19539});
19540
19541
19542/***/ }),
19543
19544/***/ 87145:
19545/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19546
19547var createTypedArrayConstructor = __webpack_require__(19843);
19548
19549// `Int8Array` constructor
19550// https://tc39.es/ecma262/#sec-typedarray-objects
19551createTypedArrayConstructor('Int8', function (init) {
19552  return function Int8Array(data, byteOffset, length) {
19553    return init(this, data, byteOffset, length);
19554  };
19555});
19556
19557
19558/***/ }),
19559
19560/***/ 96319:
19561/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19562
19563"use strict";
19564
19565var global = __webpack_require__(17854);
19566var fails = __webpack_require__(47293);
19567var uncurryThis = __webpack_require__(1702);
19568var ArrayBufferViewCore = __webpack_require__(90260);
19569var ArrayIterators = __webpack_require__(66992);
19570var wellKnownSymbol = __webpack_require__(5112);
19571
19572var ITERATOR = wellKnownSymbol('iterator');
19573var Uint8Array = global.Uint8Array;
19574var arrayValues = uncurryThis(ArrayIterators.values);
19575var arrayKeys = uncurryThis(ArrayIterators.keys);
19576var arrayEntries = uncurryThis(ArrayIterators.entries);
19577var aTypedArray = ArrayBufferViewCore.aTypedArray;
19578var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19579var TypedArrayPrototype = Uint8Array && Uint8Array.prototype;
19580
19581var GENERIC = !fails(function () {
19582  TypedArrayPrototype[ITERATOR].call([1]);
19583});
19584
19585var ITERATOR_IS_VALUES = !!TypedArrayPrototype
19586  && TypedArrayPrototype.values
19587  && TypedArrayPrototype[ITERATOR] === TypedArrayPrototype.values
19588  && TypedArrayPrototype.values.name === 'values';
19589
19590var typedArrayValues = function values() {
19591  return arrayValues(aTypedArray(this));
19592};
19593
19594// `%TypedArray%.prototype.entries` method
19595// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
19596exportTypedArrayMethod('entries', function entries() {
19597  return arrayEntries(aTypedArray(this));
19598}, GENERIC);
19599// `%TypedArray%.prototype.keys` method
19600// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys
19601exportTypedArrayMethod('keys', function keys() {
19602  return arrayKeys(aTypedArray(this));
19603}, GENERIC);
19604// `%TypedArray%.prototype.values` method
19605// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values
19606exportTypedArrayMethod('values', typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
19607// `%TypedArray%.prototype[@@iterator]` method
19608// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator
19609exportTypedArrayMethod(ITERATOR, typedArrayValues, GENERIC || !ITERATOR_IS_VALUES, { name: 'values' });
19610
19611
19612/***/ }),
19613
19614/***/ 58867:
19615/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19616
19617"use strict";
19618
19619var ArrayBufferViewCore = __webpack_require__(90260);
19620var uncurryThis = __webpack_require__(1702);
19621
19622var aTypedArray = ArrayBufferViewCore.aTypedArray;
19623var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19624var $join = uncurryThis([].join);
19625
19626// `%TypedArray%.prototype.join` method
19627// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join
19628exportTypedArrayMethod('join', function join(separator) {
19629  return $join(aTypedArray(this), separator);
19630});
19631
19632
19633/***/ }),
19634
19635/***/ 37789:
19636/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19637
19638"use strict";
19639
19640var ArrayBufferViewCore = __webpack_require__(90260);
19641var apply = __webpack_require__(22104);
19642var $lastIndexOf = __webpack_require__(86583);
19643
19644var aTypedArray = ArrayBufferViewCore.aTypedArray;
19645var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19646
19647// `%TypedArray%.prototype.lastIndexOf` method
19648// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof
19649exportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {
19650  var length = arguments.length;
19651  return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);
19652});
19653
19654
19655/***/ }),
19656
19657/***/ 33739:
19658/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19659
19660"use strict";
19661
19662var ArrayBufferViewCore = __webpack_require__(90260);
19663var $map = (__webpack_require__(42092).map);
19664var typedArraySpeciesConstructor = __webpack_require__(66304);
19665
19666var aTypedArray = ArrayBufferViewCore.aTypedArray;
19667var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19668
19669// `%TypedArray%.prototype.map` method
19670// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
19671exportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {
19672  return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
19673    return new (typedArraySpeciesConstructor(O))(length);
19674  });
19675});
19676
19677
19678/***/ }),
19679
19680/***/ 95206:
19681/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19682
19683"use strict";
19684
19685var ArrayBufferViewCore = __webpack_require__(90260);
19686var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(63832);
19687
19688var aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;
19689var exportTypedArrayStaticMethod = ArrayBufferViewCore.exportTypedArrayStaticMethod;
19690
19691// `%TypedArray%.of` method
19692// https://tc39.es/ecma262/#sec-%typedarray%.of
19693exportTypedArrayStaticMethod('of', function of(/* ...items */) {
19694  var index = 0;
19695  var length = arguments.length;
19696  var result = new (aTypedArrayConstructor(this))(length);
19697  while (length > index) result[index] = arguments[index++];
19698  return result;
19699}, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);
19700
19701
19702/***/ }),
19703
19704/***/ 14483:
19705/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19706
19707"use strict";
19708
19709var ArrayBufferViewCore = __webpack_require__(90260);
19710var $reduceRight = (__webpack_require__(53671).right);
19711
19712var aTypedArray = ArrayBufferViewCore.aTypedArray;
19713var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19714
19715// `%TypedArray%.prototype.reduceRight` method
19716// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright
19717exportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {
19718  var length = arguments.length;
19719  return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
19720});
19721
19722
19723/***/ }),
19724
19725/***/ 29368:
19726/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19727
19728"use strict";
19729
19730var ArrayBufferViewCore = __webpack_require__(90260);
19731var $reduce = (__webpack_require__(53671).left);
19732
19733var aTypedArray = ArrayBufferViewCore.aTypedArray;
19734var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19735
19736// `%TypedArray%.prototype.reduce` method
19737// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce
19738exportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {
19739  var length = arguments.length;
19740  return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);
19741});
19742
19743
19744/***/ }),
19745
19746/***/ 12056:
19747/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19748
19749"use strict";
19750
19751var ArrayBufferViewCore = __webpack_require__(90260);
19752
19753var aTypedArray = ArrayBufferViewCore.aTypedArray;
19754var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19755var floor = Math.floor;
19756
19757// `%TypedArray%.prototype.reverse` method
19758// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse
19759exportTypedArrayMethod('reverse', function reverse() {
19760  var that = this;
19761  var length = aTypedArray(that).length;
19762  var middle = floor(length / 2);
19763  var index = 0;
19764  var value;
19765  while (index < middle) {
19766    value = that[index];
19767    that[index++] = that[--length];
19768    that[length] = value;
19769  } return that;
19770});
19771
19772
19773/***/ }),
19774
19775/***/ 3462:
19776/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19777
19778"use strict";
19779
19780var global = __webpack_require__(17854);
19781var call = __webpack_require__(46916);
19782var ArrayBufferViewCore = __webpack_require__(90260);
19783var lengthOfArrayLike = __webpack_require__(26244);
19784var toOffset = __webpack_require__(84590);
19785var toIndexedObject = __webpack_require__(47908);
19786var fails = __webpack_require__(47293);
19787
19788var RangeError = global.RangeError;
19789var Int8Array = global.Int8Array;
19790var Int8ArrayPrototype = Int8Array && Int8Array.prototype;
19791var $set = Int8ArrayPrototype && Int8ArrayPrototype.set;
19792var aTypedArray = ArrayBufferViewCore.aTypedArray;
19793var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19794
19795var WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS = !fails(function () {
19796  // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
19797  var array = new Uint8ClampedArray(2);
19798  call($set, array, { length: 1, 0: 3 }, 1);
19799  return array[1] !== 3;
19800});
19801
19802// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other
19803var TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {
19804  var array = new Int8Array(2);
19805  array.set(1);
19806  array.set('2', 1);
19807  return array[0] !== 0 || array[1] !== 2;
19808});
19809
19810// `%TypedArray%.prototype.set` method
19811// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set
19812exportTypedArrayMethod('set', function set(arrayLike /* , offset */) {
19813  aTypedArray(this);
19814  var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
19815  var src = toIndexedObject(arrayLike);
19816  if (WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);
19817  var length = this.length;
19818  var len = lengthOfArrayLike(src);
19819  var index = 0;
19820  if (len + offset > length) throw RangeError('Wrong length');
19821  while (index < len) this[offset + index] = src[index++];
19822}, !WORKS_WITH_OBJECTS_AND_GEERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);
19823
19824
19825/***/ }),
19826
19827/***/ 30678:
19828/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19829
19830"use strict";
19831
19832var ArrayBufferViewCore = __webpack_require__(90260);
19833var typedArraySpeciesConstructor = __webpack_require__(66304);
19834var fails = __webpack_require__(47293);
19835var arraySlice = __webpack_require__(50206);
19836
19837var aTypedArray = ArrayBufferViewCore.aTypedArray;
19838var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19839
19840var FORCED = fails(function () {
19841  // eslint-disable-next-line es-x/no-typed-arrays -- required for testing
19842  new Int8Array(1).slice();
19843});
19844
19845// `%TypedArray%.prototype.slice` method
19846// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
19847exportTypedArrayMethod('slice', function slice(start, end) {
19848  var list = arraySlice(aTypedArray(this), start, end);
19849  var C = typedArraySpeciesConstructor(this);
19850  var index = 0;
19851  var length = list.length;
19852  var result = new C(length);
19853  while (length > index) result[index] = list[index++];
19854  return result;
19855}, FORCED);
19856
19857
19858/***/ }),
19859
19860/***/ 27462:
19861/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19862
19863"use strict";
19864
19865var ArrayBufferViewCore = __webpack_require__(90260);
19866var $some = (__webpack_require__(42092).some);
19867
19868var aTypedArray = ArrayBufferViewCore.aTypedArray;
19869var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19870
19871// `%TypedArray%.prototype.some` method
19872// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some
19873exportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {
19874  return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
19875});
19876
19877
19878/***/ }),
19879
19880/***/ 33824:
19881/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19882
19883"use strict";
19884
19885var global = __webpack_require__(17854);
19886var uncurryThis = __webpack_require__(1702);
19887var fails = __webpack_require__(47293);
19888var aCallable = __webpack_require__(19662);
19889var internalSort = __webpack_require__(94362);
19890var ArrayBufferViewCore = __webpack_require__(90260);
19891var FF = __webpack_require__(68886);
19892var IE_OR_EDGE = __webpack_require__(30256);
19893var V8 = __webpack_require__(7392);
19894var WEBKIT = __webpack_require__(98008);
19895
19896var aTypedArray = ArrayBufferViewCore.aTypedArray;
19897var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19898var Uint16Array = global.Uint16Array;
19899var nativeSort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);
19900
19901// WebKit
19902var ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !(fails(function () {
19903  nativeSort(new Uint16Array(2), null);
19904}) && fails(function () {
19905  nativeSort(new Uint16Array(2), {});
19906}));
19907
19908var STABLE_SORT = !!nativeSort && !fails(function () {
19909  // feature detection can be too slow, so check engines versions
19910  if (V8) return V8 < 74;
19911  if (FF) return FF < 67;
19912  if (IE_OR_EDGE) return true;
19913  if (WEBKIT) return WEBKIT < 602;
19914
19915  var array = new Uint16Array(516);
19916  var expected = Array(516);
19917  var index, mod;
19918
19919  for (index = 0; index < 516; index++) {
19920    mod = index % 4;
19921    array[index] = 515 - index;
19922    expected[index] = index - 2 * mod + 3;
19923  }
19924
19925  nativeSort(array, function (a, b) {
19926    return (a / 4 | 0) - (b / 4 | 0);
19927  });
19928
19929  for (index = 0; index < 516; index++) {
19930    if (array[index] !== expected[index]) return true;
19931  }
19932});
19933
19934var getSortCompare = function (comparefn) {
19935  return function (x, y) {
19936    if (comparefn !== undefined) return +comparefn(x, y) || 0;
19937    // eslint-disable-next-line no-self-compare -- NaN check
19938    if (y !== y) return -1;
19939    // eslint-disable-next-line no-self-compare -- NaN check
19940    if (x !== x) return 1;
19941    if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;
19942    return x > y;
19943  };
19944};
19945
19946// `%TypedArray%.prototype.sort` method
19947// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
19948exportTypedArrayMethod('sort', function sort(comparefn) {
19949  if (comparefn !== undefined) aCallable(comparefn);
19950  if (STABLE_SORT) return nativeSort(this, comparefn);
19951
19952  return internalSort(aTypedArray(this), getSortCompare(comparefn));
19953}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);
19954
19955
19956/***/ }),
19957
19958/***/ 55021:
19959/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19960
19961"use strict";
19962
19963var ArrayBufferViewCore = __webpack_require__(90260);
vendor: 5,169 bytes, lines 19964-20141
19964var toLength = __webpack_require__(17466);
19965var toAbsoluteIndex = __webpack_require__(51400);
19966var typedArraySpeciesConstructor = __webpack_require__(66304);
19967
19968var aTypedArray = ArrayBufferViewCore.aTypedArray;
19969var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
19970
19971// `%TypedArray%.prototype.subarray` method
19972// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray
19973exportTypedArrayMethod('subarray', function subarray(begin, end) {
19974  var O = aTypedArray(this);
19975  var length = O.length;
19976  var beginIndex = toAbsoluteIndex(begin, length);
19977  var C = typedArraySpeciesConstructor(O);
19978  return new C(
19979    O.buffer,
19980    O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,
19981    toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)
19982  );
19983});
19984
19985
19986/***/ }),
19987
19988/***/ 12974:
19989/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
19990
19991"use strict";
19992
19993var global = __webpack_require__(17854);
19994var apply = __webpack_require__(22104);
19995var ArrayBufferViewCore = __webpack_require__(90260);
19996var fails = __webpack_require__(47293);
19997var arraySlice = __webpack_require__(50206);
19998
19999var Int8Array = global.Int8Array;
20000var aTypedArray = ArrayBufferViewCore.aTypedArray;
20001var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;
20002var $toLocaleString = [].toLocaleString;
20003
20004// iOS Safari 6.x fails here
20005var TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {
20006  $toLocaleString.call(new Int8Array(1));
20007});
20008
20009var FORCED = fails(function () {
20010  return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();
20011}) || !fails(function () {
20012  Int8Array.prototype.toLocaleString.call([1, 2]);
20013});
20014
20015// `%TypedArray%.prototype.toLocaleString` method
20016// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring
20017exportTypedArrayMethod('toLocaleString', function toLocaleString() {
20018  return apply(
20019    $toLocaleString,
20020    TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),
20021    arraySlice(arguments)
20022  );
20023}, FORCED);
20024
20025
20026/***/ }),
20027
20028/***/ 15016:
20029/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20030
20031"use strict";
20032
20033var exportTypedArrayMethod = (__webpack_require__(90260).exportTypedArrayMethod);
20034var fails = __webpack_require__(47293);
20035var global = __webpack_require__(17854);
20036var uncurryThis = __webpack_require__(1702);
20037
20038var Uint8Array = global.Uint8Array;
20039var Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};
20040var arrayToString = [].toString;
20041var join = uncurryThis([].join);
20042
20043if (fails(function () { arrayToString.call({}); })) {
20044  arrayToString = function toString() {
20045    return join(this);
20046  };
20047}
20048
20049var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;
20050
20051// `%TypedArray%.prototype.toString` method
20052// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
20053exportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);
20054
20055
20056/***/ }),
20057
20058/***/ 8255:
20059/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20060
20061var createTypedArrayConstructor = __webpack_require__(19843);
20062
20063// `Uint16Array` constructor
20064// https://tc39.es/ecma262/#sec-typedarray-objects
20065createTypedArrayConstructor('Uint16', function (init) {
20066  return function Uint16Array(data, byteOffset, length) {
20067    return init(this, data, byteOffset, length);
20068  };
20069});
20070
20071
20072/***/ }),
20073
20074/***/ 29135:
20075/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20076
20077var createTypedArrayConstructor = __webpack_require__(19843);
20078
20079// `Uint32Array` constructor
20080// https://tc39.es/ecma262/#sec-typedarray-objects
20081createTypedArrayConstructor('Uint32', function (init) {
20082  return function Uint32Array(data, byteOffset, length) {
20083    return init(this, data, byteOffset, length);
20084  };
20085});
20086
20087
20088/***/ }),
20089
20090/***/ 82472:
20091/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20092
20093var createTypedArrayConstructor = __webpack_require__(19843);
20094
20095// `Uint8Array` constructor
20096// https://tc39.es/ecma262/#sec-typedarray-objects
20097createTypedArrayConstructor('Uint8', function (init) {
20098  return function Uint8Array(data, byteOffset, length) {
20099    return init(this, data, byteOffset, length);
20100  };
20101});
20102
20103
20104/***/ }),
20105
20106/***/ 49743:
20107/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20108
20109var createTypedArrayConstructor = __webpack_require__(19843);
20110
20111// `Uint8ClampedArray` constructor
20112// https://tc39.es/ecma262/#sec-typedarray-objects
20113createTypedArrayConstructor('Uint8', function (init) {
20114  return function Uint8ClampedArray(data, byteOffset, length) {
20115    return init(this, data, byteOffset, length);
20116  };
20117}, true);
20118
20119
20120/***/ }),
20121
20122/***/ 78221:
20123/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20124
20125"use strict";
20126
20127var $ = __webpack_require__(82109);
20128var uncurryThis = __webpack_require__(1702);
20129var toString = __webpack_require__(41340);
20130
20131var fromCharCode = String.fromCharCode;
20132var charAt = uncurryThis(''.charAt);
20133var exec = uncurryThis(/./.exec);
20134var stringSlice = uncurryThis(''.slice);
20135
20136var hex2 = /^[\da-f]{2}$/i;
20137var hex4 = /^[\da-f]{4}$/i;
20138
20139// `unescape` method
20140// https://tc39.es/ecma262/#sec-unescape-string
20141$({ global: true }, {
vendor: 5,056 bytes, lines 20142-20298
20142  unescape: function unescape(string) {
20143    var str = toString(string);
20144    var result = '';
20145    var length = str.length;
20146    var index = 0;
20147    var chr, part;
20148    while (index < length) {
20149      chr = charAt(str, index++);
20150      if (chr === '%') {
20151        if (charAt(str, index) === 'u') {
20152          part = stringSlice(str, index + 1, index + 5);
20153          if (exec(hex4, part)) {
20154            result += fromCharCode(parseInt(part, 16));
20155            index += 5;
20156            continue;
20157          }
20158        } else {
20159          part = stringSlice(str, index, index + 2);
20160          if (exec(hex2, part)) {
20161            result += fromCharCode(parseInt(part, 16));
20162            index += 2;
20163            continue;
20164          }
20165        }
20166      }
20167      result += chr;
20168    } return result;
20169  }
20170});
20171
20172
20173/***/ }),
20174
20175/***/ 41202:
20176/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20177
20178"use strict";
20179
20180var global = __webpack_require__(17854);
20181var uncurryThis = __webpack_require__(1702);
20182var defineBuiltIns = __webpack_require__(89190);
20183var InternalMetadataModule = __webpack_require__(62423);
20184var collection = __webpack_require__(77710);
20185var collectionWeak = __webpack_require__(29320);
20186var isObject = __webpack_require__(70111);
20187var isExtensible = __webpack_require__(52050);
20188var enforceInternalState = (__webpack_require__(29909).enforce);
20189var NATIVE_WEAK_MAP = __webpack_require__(94811);
20190
20191var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;
20192var InternalWeakMap;
20193
20194var wrapper = function (init) {
20195  return function WeakMap() {
20196    return init(this, arguments.length ? arguments[0] : undefined);
20197  };
20198};
20199
20200// `WeakMap` constructor
20201// https://tc39.es/ecma262/#sec-weakmap-constructor
20202var $WeakMap = collection('WeakMap', wrapper, collectionWeak);
20203
20204// IE11 WeakMap frozen keys fix
20205// We can't use feature detection because it crash some old IE builds
20206// https://github.com/zloirock/core-js/issues/485
20207if (NATIVE_WEAK_MAP && IS_IE11) {
20208  InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);
20209  InternalMetadataModule.enable();
20210  var WeakMapPrototype = $WeakMap.prototype;
20211  var nativeDelete = uncurryThis(WeakMapPrototype['delete']);
20212  var nativeHas = uncurryThis(WeakMapPrototype.has);
20213  var nativeGet = uncurryThis(WeakMapPrototype.get);
20214  var nativeSet = uncurryThis(WeakMapPrototype.set);
20215  defineBuiltIns(WeakMapPrototype, {
20216    'delete': function (key) {
20217      if (isObject(key) && !isExtensible(key)) {
20218        var state = enforceInternalState(this);
20219        if (!state.frozen) state.frozen = new InternalWeakMap();
20220        return nativeDelete(this, key) || state.frozen['delete'](key);
20221      } return nativeDelete(this, key);
20222    },
20223    has: function has(key) {
20224      if (isObject(key) && !isExtensible(key)) {
20225        var state = enforceInternalState(this);
20226        if (!state.frozen) state.frozen = new InternalWeakMap();
20227        return nativeHas(this, key) || state.frozen.has(key);
20228      } return nativeHas(this, key);
20229    },
20230    get: function get(key) {
20231      if (isObject(key) && !isExtensible(key)) {
20232        var state = enforceInternalState(this);
20233        if (!state.frozen) state.frozen = new InternalWeakMap();
20234        return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);
20235      } return nativeGet(this, key);
20236    },
20237    set: function set(key, value) {
20238      if (isObject(key) && !isExtensible(key)) {
20239        var state = enforceInternalState(this);
20240        if (!state.frozen) state.frozen = new InternalWeakMap();
20241        nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);
20242      } else nativeSet(this, key, value);
20243      return this;
20244    }
20245  });
20246}
20247
20248
20249/***/ }),
20250
20251/***/ 4129:
20252/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20253
20254// TODO: Remove this module from `core-js@4` since it's replaced to module below
20255__webpack_require__(41202);
20256
20257
20258/***/ }),
20259
20260/***/ 72098:
20261/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20262
20263"use strict";
20264
20265var collection = __webpack_require__(77710);
20266var collectionWeak = __webpack_require__(29320);
20267
20268// `WeakSet` constructor
20269// https://tc39.es/ecma262/#sec-weakset-constructor
20270collection('WeakSet', function (init) {
20271  return function WeakSet() { return init(this, arguments.length ? arguments[0] : undefined); };
20272}, collectionWeak);
20273
20274
20275/***/ }),
20276
20277/***/ 38478:
20278/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20279
20280// TODO: Remove this module from `core-js@4` since it's replaced to module below
20281__webpack_require__(72098);
20282
20283
20284/***/ }),
20285
20286/***/ 75505:
20287/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20288
20289var $ = __webpack_require__(82109);
20290var getBuiltIn = __webpack_require__(35005);
20291var uncurryThis = __webpack_require__(1702);
20292var fails = __webpack_require__(47293);
20293var toString = __webpack_require__(41340);
20294var hasOwn = __webpack_require__(92597);
20295var validateArgumentsLength = __webpack_require__(48053);
20296var ctoi = (__webpack_require__(14170).ctoi);
20297
20298var disallowed = /[^\d+/a-z]/i;
vendor: 8,461 bytes, lines 20299-20535
20299var whitespaces = /[\t\n\f\r ]+/g;
20300var finalEq = /[=]+$/;
20301
20302var $atob = getBuiltIn('atob');
20303var fromCharCode = String.fromCharCode;
20304var charAt = uncurryThis(''.charAt);
20305var replace = uncurryThis(''.replace);
20306var exec = uncurryThis(disallowed.exec);
20307
20308var NO_SPACES_IGNORE = fails(function () {
20309  return $atob(' ') !== '';
20310});
20311
20312var NO_ENCODING_CHECK = !fails(function () {
20313  $atob('a');
20314});
20315
20316var NO_ARG_RECEIVING_CHECK = !NO_SPACES_IGNORE && !NO_ENCODING_CHECK && !fails(function () {
20317  $atob();
20318});
20319
20320var WRONG_ARITY = !NO_SPACES_IGNORE && !NO_ENCODING_CHECK && $atob.length !== 1;
20321
20322// `atob` method
20323// https://html.spec.whatwg.org/multipage/webappapis.html#dom-atob
20324$({ global: true, enumerable: true, forced: NO_SPACES_IGNORE || NO_ENCODING_CHECK || NO_ARG_RECEIVING_CHECK || WRONG_ARITY }, {
20325  atob: function atob(data) {
20326    validateArgumentsLength(arguments.length, 1);
20327    if (NO_ARG_RECEIVING_CHECK || WRONG_ARITY) return $atob(data);
20328    var string = replace(toString(data), whitespaces, '');
20329    var output = '';
20330    var position = 0;
20331    var bc = 0;
20332    var chr, bs;
20333    if (string.length % 4 == 0) {
20334      string = replace(string, finalEq, '');
20335    }
20336    if (string.length % 4 == 1 || exec(disallowed, string)) {
20337      throw new (getBuiltIn('DOMException'))('The string is not correctly encoded', 'InvalidCharacterError');
20338    }
20339    while (chr = charAt(string, position++)) {
20340      if (hasOwn(ctoi, chr)) {
20341        bs = bc % 4 ? bs * 64 + ctoi[chr] : ctoi[chr];
20342        if (bc++ % 4) output += fromCharCode(255 & bs >> (-2 * bc & 6));
20343      }
20344    } return output;
20345  }
20346});
20347
20348
20349/***/ }),
20350
20351/***/ 27479:
20352/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20353
20354var $ = __webpack_require__(82109);
20355var getBuiltIn = __webpack_require__(35005);
20356var uncurryThis = __webpack_require__(1702);
20357var fails = __webpack_require__(47293);
20358var toString = __webpack_require__(41340);
20359var validateArgumentsLength = __webpack_require__(48053);
20360var itoc = (__webpack_require__(14170).itoc);
20361
20362var $btoa = getBuiltIn('btoa');
20363var charAt = uncurryThis(''.charAt);
20364var charCodeAt = uncurryThis(''.charCodeAt);
20365
20366var NO_ARG_RECEIVING_CHECK = !!$btoa && !fails(function () {
20367  $btoa();
20368});
20369
20370var WRONG_ARG_CONVERSION = !!$btoa && fails(function () {
20371  return $btoa(null) !== 'bnVsbA==';
20372});
20373
20374var WRONG_ARITY = !!$btoa && $btoa.length !== 1;
20375
20376// `btoa` method
20377// https://html.spec.whatwg.org/multipage/webappapis.html#dom-btoa
20378$({ global: true, enumerable: true, forced: NO_ARG_RECEIVING_CHECK || WRONG_ARG_CONVERSION || WRONG_ARITY }, {
20379  btoa: function btoa(data) {
20380    validateArgumentsLength(arguments.length, 1);
20381    if (NO_ARG_RECEIVING_CHECK || WRONG_ARG_CONVERSION || WRONG_ARITY) return $btoa(toString(data));
20382    var string = toString(data);
20383    var output = '';
20384    var position = 0;
20385    var map = itoc;
20386    var block, charCode;
20387    while (charAt(string, position) || (map = '=', position % 1)) {
20388      charCode = charCodeAt(string, position += 3 / 4);
20389      if (charCode > 0xFF) {
20390        throw new (getBuiltIn('DOMException'))('The string contains characters outside of the Latin1 range', 'InvalidCharacterError');
20391      }
20392      block = block << 8 | charCode;
20393      output += charAt(map, 63 & block >> 8 - position % 1 * 8);
20394    } return output;
20395  }
20396});
20397
20398
20399/***/ }),
20400
20401/***/ 11091:
20402/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20403
20404var $ = __webpack_require__(82109);
20405var global = __webpack_require__(17854);
20406var clearImmediate = (__webpack_require__(20261).clear);
20407
20408// `clearImmediate` method
20409// http://w3c.github.io/setImmediate/#si-clearImmediate
20410$({ global: true, bind: true, enumerable: true, forced: global.clearImmediate !== clearImmediate }, {
20411  clearImmediate: clearImmediate
20412});
20413
20414
20415/***/ }),
20416
20417/***/ 54747:
20418/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20419
20420var global = __webpack_require__(17854);
20421var DOMIterables = __webpack_require__(48324);
20422var DOMTokenListPrototype = __webpack_require__(98509);
20423var forEach = __webpack_require__(18533);
20424var createNonEnumerableProperty = __webpack_require__(68880);
20425
20426var handlePrototype = function (CollectionPrototype) {
20427  // some Chrome versions have non-configurable methods on DOMTokenList
20428  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {
20429    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);
20430  } catch (error) {
20431    CollectionPrototype.forEach = forEach;
20432  }
20433};
20434
20435for (var COLLECTION_NAME in DOMIterables) {
20436  if (DOMIterables[COLLECTION_NAME]) {
20437    handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);
20438  }
20439}
20440
20441handlePrototype(DOMTokenListPrototype);
20442
20443
20444/***/ }),
20445
20446/***/ 33948:
20447/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20448
20449var global = __webpack_require__(17854);
20450var DOMIterables = __webpack_require__(48324);
20451var DOMTokenListPrototype = __webpack_require__(98509);
20452var ArrayIteratorMethods = __webpack_require__(66992);
20453var createNonEnumerableProperty = __webpack_require__(68880);
20454var wellKnownSymbol = __webpack_require__(5112);
20455
20456var ITERATOR = wellKnownSymbol('iterator');
20457var TO_STRING_TAG = wellKnownSymbol('toStringTag');
20458var ArrayValues = ArrayIteratorMethods.values;
20459
20460var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {
20461  if (CollectionPrototype) {
20462    // some Chrome versions have non-configurable methods on DOMTokenList
20463    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {
20464      createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);
20465    } catch (error) {
20466      CollectionPrototype[ITERATOR] = ArrayValues;
20467    }
20468    if (!CollectionPrototype[TO_STRING_TAG]) {
20469      createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);
20470    }
20471    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {
20472      // some Chrome versions have non-configurable methods on DOMTokenList
20473      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {
20474        createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);
20475      } catch (error) {
20476        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];
20477      }
20478    }
20479  }
20480};
20481
20482for (var COLLECTION_NAME in DOMIterables) {
20483  handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);
20484}
20485
20486handlePrototype(DOMTokenListPrototype, 'DOMTokenList');
20487
20488
20489/***/ }),
20490
20491/***/ 87714:
20492/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20493
20494"use strict";
20495
20496var $ = __webpack_require__(82109);
20497var tryNodeRequire = __webpack_require__(44038);
20498var getBuiltIn = __webpack_require__(35005);
20499var fails = __webpack_require__(47293);
20500var create = __webpack_require__(70030);
20501var createPropertyDescriptor = __webpack_require__(79114);
20502var defineProperty = (__webpack_require__(3070).f);
20503var defineBuiltIn = __webpack_require__(98052);
20504var defineBuiltInAccessor = __webpack_require__(47045);
20505var hasOwn = __webpack_require__(92597);
20506var anInstance = __webpack_require__(25787);
20507var anObject = __webpack_require__(19670);
20508var errorToString = __webpack_require__(7762);
20509var normalizeStringArgument = __webpack_require__(56277);
20510var DOMExceptionConstants = __webpack_require__(93678);
20511var clearErrorStack = __webpack_require__(11060);
20512var InternalStateModule = __webpack_require__(29909);
20513var DESCRIPTORS = __webpack_require__(19781);
20514var IS_PURE = __webpack_require__(31913);
20515
20516var DOM_EXCEPTION = 'DOMException';
20517var DATA_CLONE_ERR = 'DATA_CLONE_ERR';
20518var Error = getBuiltIn('Error');
20519// NodeJS < 17.0 does not expose `DOMException` to global
20520var NativeDOMException = getBuiltIn(DOM_EXCEPTION) || (function () {
20521  try {
20522    // NodeJS < 15.0 does not expose `MessageChannel` to global
20523    var MessageChannel = getBuiltIn('MessageChannel') || tryNodeRequire('worker_threads').MessageChannel;
20524    // eslint-disable-next-line es-x/no-weak-map, unicorn/require-post-message-target-origin -- safe
20525    new MessageChannel().port1.postMessage(new WeakMap());
20526  } catch (error) {
20527    if (error.name == DATA_CLONE_ERR && error.code == 25) return error.constructor;
20528  }
20529})();
20530var NativeDOMExceptionPrototype = NativeDOMException && NativeDOMException.prototype;
20531var ErrorPrototype = Error.prototype;
20532var setInternalState = InternalStateModule.set;
20533var getInternalState = InternalStateModule.getterFor(DOM_EXCEPTION);
20534var HAS_STACK = 'stack' in Error(DOM_EXCEPTION);
20535
vendor: 4,944 bytes, lines 20536-20667
20536var codeFor = function (name) {
20537  return hasOwn(DOMExceptionConstants, name) && DOMExceptionConstants[name].m ? DOMExceptionConstants[name].c : 0;
20538};
20539
20540var $DOMException = function DOMException() {
20541  anInstance(this, DOMExceptionPrototype);
20542  var argumentsLength = arguments.length;
20543  var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
20544  var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
20545  var code = codeFor(name);
20546  setInternalState(this, {
20547    type: DOM_EXCEPTION,
20548    name: name,
20549    message: message,
20550    code: code
20551  });
20552  if (!DESCRIPTORS) {
20553    this.name = name;
20554    this.message = message;
20555    this.code = code;
20556  }
20557  if (HAS_STACK) {
20558    var error = Error(message);
20559    error.name = DOM_EXCEPTION;
20560    defineProperty(this, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
20561  }
20562};
20563
20564var DOMExceptionPrototype = $DOMException.prototype = create(ErrorPrototype);
20565
20566var createGetterDescriptor = function (get) {
20567  return { enumerable: true, configurable: true, get: get };
20568};
20569
20570var getterFor = function (key) {
20571  return createGetterDescriptor(function () {
20572    return getInternalState(this)[key];
20573  });
20574};
20575
20576if (DESCRIPTORS) {
20577  defineBuiltInAccessor(DOMExceptionPrototype, 'code', getterFor('code'));
20578  defineBuiltInAccessor(DOMExceptionPrototype, 'message', getterFor('message'));
20579  defineBuiltInAccessor(DOMExceptionPrototype, 'name', getterFor('name'));
20580}
20581
20582defineProperty(DOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, $DOMException));
20583
20584// FF36- DOMException is a function, but can't be constructed
20585var INCORRECT_CONSTRUCTOR = fails(function () {
20586  return !(new NativeDOMException() instanceof Error);
20587});
20588
20589// Safari 10.1 / Chrome 32- / IE8- DOMException.prototype.toString bugs
20590var INCORRECT_TO_STRING = INCORRECT_CONSTRUCTOR || fails(function () {
20591  return ErrorPrototype.toString !== errorToString || String(new NativeDOMException(1, 2)) !== '2: 1';
20592});
20593
20594// Deno 1.6.3- DOMException.prototype.code just missed
20595var INCORRECT_CODE = INCORRECT_CONSTRUCTOR || fails(function () {
20596  return new NativeDOMException(1, 'DataCloneError').code !== 25;
20597});
20598
20599// Deno 1.6.3- DOMException constants just missed
20600var MISSED_CONSTANTS = INCORRECT_CONSTRUCTOR
20601  || NativeDOMException[DATA_CLONE_ERR] !== 25
20602  || NativeDOMExceptionPrototype[DATA_CLONE_ERR] !== 25;
20603
20604var FORCED_CONSTRUCTOR = IS_PURE ? INCORRECT_TO_STRING || INCORRECT_CODE || MISSED_CONSTANTS : INCORRECT_CONSTRUCTOR;
20605
20606// `DOMException` constructor
20607// https://webidl.spec.whatwg.org/#idl-DOMException
20608$({ global: true, constructor: true, forced: FORCED_CONSTRUCTOR }, {
20609  DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException
20610});
20611
20612var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
20613var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;
20614
20615if (INCORRECT_TO_STRING && (IS_PURE || NativeDOMException === PolyfilledDOMException)) {
20616  defineBuiltIn(PolyfilledDOMExceptionPrototype, 'toString', errorToString);
20617}
20618
20619if (INCORRECT_CODE && DESCRIPTORS && NativeDOMException === PolyfilledDOMException) {
20620  defineBuiltInAccessor(PolyfilledDOMExceptionPrototype, 'code', createGetterDescriptor(function () {
20621    return codeFor(anObject(this).name);
20622  }));
20623}
20624
20625for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {
20626  var constant = DOMExceptionConstants[key];
20627  var constantName = constant.s;
20628  var descriptor = createPropertyDescriptor(6, constant.c);
20629  if (!hasOwn(PolyfilledDOMException, constantName)) {
20630    defineProperty(PolyfilledDOMException, constantName, descriptor);
20631  }
20632  if (!hasOwn(PolyfilledDOMExceptionPrototype, constantName)) {
20633    defineProperty(PolyfilledDOMExceptionPrototype, constantName, descriptor);
20634  }
20635}
20636
20637
20638/***/ }),
20639
20640/***/ 82801:
20641/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20642
20643"use strict";
20644
20645var $ = __webpack_require__(82109);
20646var global = __webpack_require__(17854);
20647var getBuiltIn = __webpack_require__(35005);
20648var createPropertyDescriptor = __webpack_require__(79114);
20649var defineProperty = (__webpack_require__(3070).f);
20650var hasOwn = __webpack_require__(92597);
20651var anInstance = __webpack_require__(25787);
20652var inheritIfRequired = __webpack_require__(79587);
20653var normalizeStringArgument = __webpack_require__(56277);
20654var DOMExceptionConstants = __webpack_require__(93678);
20655var clearErrorStack = __webpack_require__(11060);
20656var DESCRIPTORS = __webpack_require__(19781);
20657var IS_PURE = __webpack_require__(31913);
20658
20659var DOM_EXCEPTION = 'DOMException';
20660var Error = getBuiltIn('Error');
20661var NativeDOMException = getBuiltIn(DOM_EXCEPTION);
20662
20663var $DOMException = function DOMException() {
20664  anInstance(this, DOMExceptionPrototype);
20665  var argumentsLength = arguments.length;
20666  var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);
20667  var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');
vendor: 1,194 bytes, lines 20668-20692
20668  var that = new NativeDOMException(message, name);
20669  var error = Error(message);
20670  error.name = DOM_EXCEPTION;
20671  defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));
20672  inheritIfRequired(that, this, $DOMException);
20673  return that;
20674};
20675
20676var DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;
20677
20678var ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION);
20679var DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);
20680
20681// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe
20682var descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION);
20683
20684// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it
20685// https://github.com/Jarred-Sumner/bun/issues/399
20686var BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);
20687
20688var FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;
20689
20690// `DOMException` constructor patch for `.stack` where it's required
20691// https://webidl.spec.whatwg.org/#es-DOMException-specialness
20692$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }
20692, { // TODO: fix export logic
20693  DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException
20694});
20695
20696var PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);
20697var PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;
20698
20699if (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {
20700  if (!IS_PURE) {
20701    defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));
20702  }
20703
20704  for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {
20705    var constant = DOMExceptionConstants[key];
20706    var constantName = constant.s;
20707    if (!hasOwn(PolyfilledDOMException, constantName)) {
20708      defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));
20709    }
20710  }
20711}
20712
20713
20714/***/ }),
20715
20716/***/ 1174:
20717/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20718
20719var getBuiltIn = __webpack_require__(35005);
20720var setToStringTag = __webpack_require__(58003);
20721
20722var DOM_EXCEPTION = 'DOMException';
20723
20724setToStringTag(getBuiltIn(DOM_EXCEPTION), DOM_EXCEPTION);
20725
20726
20727/***/ }),
20728
20729/***/ 84633:
20730/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20731
20732// TODO: Remove this module from `core-js@4` since it's split to modules listed below
20733__webpack_require__(11091);
20734__webpack_require__(12986);
20735
20736
20737/***/ }),
20738
20739/***/ 85844:
20740/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20741
20742var $ = __webpack_require__(82109);
20743var global = __webpack_require__(17854);
20744var microtask = __webpack_require__(95948);
20745var aCallable = __webpack_require__(19662);
20746var validateArgumentsLength = __webpack_require__(48053);
20747var IS_NODE = __webpack_require__(35268);
20748
20749var process = global.process;
20750
20751// `queueMicrotask` method
20752// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-queuemicrotask
20753$({ global: true, enumerable: true, dontCallGetSet: true }, {
20754  queueMicrotask: function queueMicrotask(fn) {
20755    validateArgumentsLength(arguments.length, 1);
20756    aCallable(fn);
20757    var domain = IS_NODE && process.domain;
20758    microtask(domain ? domain.bind(fn) : fn);
20759  }
20760});
20761
20762
20763/***/ }),
20764
20765/***/ 12986:
20766/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20767
20768var $ = __webpack_require__(82109);
20769var global = __webpack_require__(17854);
20770var setImmediate = (__webpack_require__(20261).set);
20771
20772// `setImmediate` method
20773// http://w3c.github.io/setImmediate/#si-setImmediate
20774$({ global: true, bind: true, enumerable: true, forced: global.setImmediate !== setImmediate }, {
20775  setImmediate: setImmediate
20776});
20777
20778
20779/***/ }),
20780
20781/***/ 96815:
20782/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20783
20784var $ = __webpack_require__(82109);
20785var global = __webpack_require__(17854);
20786var setInterval = (__webpack_require__(17152).setInterval);
20787
20788// ie9- setInterval additional parameters fix
20789// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
20790$({ global: true, bind: true, forced: global.setInterval !== setInterval }, {
20791  setInterval: setInterval
20792});
20793
20794
20795/***/ }),
20796
20797/***/ 88417:
20798/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20799
20800var $ = __webpack_require__(82109);
20801var global = __webpack_require__(17854);
20802var setTimeout = (__webpack_require__(17152).setTimeout);
20803
20804// ie9- setTimeout additional parameters fix
20805// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
20806$({ global: true, bind: true, forced: global.setTimeout !== setTimeout }, {
20807  setTimeout: setTimeout
20808});
20809
20810
20811/***/ }),
20812
20813/***/ 61295:
20814/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
20815
20816var IS_PURE = __webpack_require__(31913);
20817var $ = __webpack_require__(82109);
20818var global = __webpack_require__(17854);
20819var getBuiltin = __webpack_require__(35005);
20820var uncurryThis = __webpack_require__(1702);
20821var fails = __webpack_require__(47293);
20822var uid = __webpack_require__(69711);
20823var isCallable = __webpack_require__(60614);
20824var isConstructor = __webpack_require__(4411);
20825var isNullOrUndefined = __webpack_require__(68554);
20826var isObject = __webpack_require__(70111);
20827var isSymbol = __webpack_require__(52190);
20828var iterate = __webpack_require__(20408);
20829var anObject = __webpack_require__(19670);
20830var classof = __webpack_require__(70648);
20831var hasOwn = __webpack_require__(92597);
20832var createProperty = __webpack_require__(86135);
20833var createNonEnumerableProperty = __webpack_require__(68880);
20834var lengthOfArrayLike = __webpack_require__(26244);
20835var validateArgumentsLength = __webpack_require__(48053);
20836var getRegExpFlags = __webpack_require__(34706);
20837var ERROR_STACK_INSTALLABLE = __webpack_require__(22914);
20838var V8 = __webpack_require__(7392);
vendor: 19,105 bytes, lines 20839-21371
20839var IS_BROWSER = __webpack_require__(7871);
20840var IS_DENO = __webpack_require__(83823);
20841var IS_NODE = __webpack_require__(35268);
20842
20843var Object = global.Object;
20844var Date = global.Date;
20845var Error = global.Error;
20846var EvalError = global.EvalError;
20847var RangeError = global.RangeError;
20848var ReferenceError = global.ReferenceError;
20849var SyntaxError = global.SyntaxError;
20850var TypeError = global.TypeError;
20851var URIError = global.URIError;
20852var PerformanceMark = global.PerformanceMark;
20853var WebAssembly = global.WebAssembly;
20854var CompileError = WebAssembly && WebAssembly.CompileError || Error;
20855var LinkError = WebAssembly && WebAssembly.LinkError || Error;
20856var RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error;
20857var DOMException = getBuiltin('DOMException');
20858var Set = getBuiltin('Set');
20859var Map = getBuiltin('Map');
20860var MapPrototype = Map.prototype;
20861var mapHas = uncurryThis(MapPrototype.has);
20862var mapGet = uncurryThis(MapPrototype.get);
20863var mapSet = uncurryThis(MapPrototype.set);
20864var setAdd = uncurryThis(Set.prototype.add);
20865var objectKeys = getBuiltin('Object', 'keys');
20866var push = uncurryThis([].push);
20867var thisBooleanValue = uncurryThis(true.valueOf);
20868var thisNumberValue = uncurryThis(1.0.valueOf);
20869var thisStringValue = uncurryThis(''.valueOf);
20870var thisTimeValue = uncurryThis(Date.prototype.getTime);
20871var PERFORMANCE_MARK = uid('structuredClone');
20872var DATA_CLONE_ERROR = 'DataCloneError';
20873var TRANSFERRING = 'Transferring';
20874
20875var checkBasicSemantic = function (structuredCloneImplementation) {
20876  return !fails(function () {
20877    var set1 = new global.Set([7]);
20878    var set2 = structuredCloneImplementation(set1);
20879    var number = structuredCloneImplementation(Object(7));
20880    return set2 == set1 || !set2.has(7) || typeof number != 'object' || number != 7;
20881  }) && structuredCloneImplementation;
20882};
20883
20884var checkErrorsCloning = function (structuredCloneImplementation, $Error) {
20885  return !fails(function () {
20886    var error = new $Error();
20887    var test = structuredCloneImplementation({ a: error, b: error });
20888    return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack);
20889  });
20890};
20891
20892// https://github.com/whatwg/html/pull/5749
20893var checkNewErrorsCloningSemantic = function (structuredCloneImplementation) {
20894  return !fails(function () {
20895    var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));
20896    return test.name != 'AggregateError' || test.errors[0] != 1 || test.message != PERFORMANCE_MARK || test.cause != 3;
20897  });
20898};
20899
20900// FF94+, Safari 15.4+, Chrome 98+, NodeJS 17.0+, Deno 1.13+
20901// FF<103 and Safari implementations can't clone errors
20902// https://bugzilla.mozilla.org/show_bug.cgi?id=1556604
20903// FF103 can clone errors, but `.stack` of clone is an empty string
20904// https://bugzilla.mozilla.org/show_bug.cgi?id=1778762
20905// FF104+ fixed it on usual errors, but not on DOMExceptions
20906// https://bugzilla.mozilla.org/show_bug.cgi?id=1777321
20907// Chrome <102 returns `null` if cloned object contains multiple references to one error
20908// https://bugs.chromium.org/p/v8/issues/detail?id=12542
20909// NodeJS implementation can't clone DOMExceptions
20910// https://github.com/nodejs/node/issues/41038
20911// only FF103+ supports new (html/5749) error cloning semantic
20912var nativeStructuredClone = global.structuredClone;
20913
20914var FORCED_REPLACEMENT = IS_PURE
20915  || !checkErrorsCloning(nativeStructuredClone, Error)
20916  || !checkErrorsCloning(nativeStructuredClone, DOMException)
20917  || !checkNewErrorsCloningSemantic(nativeStructuredClone);
20918
20919// Chrome 82+, Safari 14.1+, Deno 1.11+
20920// Chrome 78-81 implementation swaps `.name` and `.message` of cloned `DOMException`
20921// Chrome returns `null` if cloned object contains multiple references to one error
20922// Safari 14.1 implementation doesn't clone some `RegExp` flags, so requires a workaround
20923// Safari implementation can't clone errors
20924// Deno 1.2-1.10 implementations too naive
20925// NodeJS 16.0+ does not have `PerformanceMark` constructor
20926// NodeJS <17.2 structured cloning implementation from `performance.mark` is too naive
20927// and can't clone, for example, `RegExp` or some boxed primitives
20928// https://github.com/nodejs/node/issues/40840
20929// no one of those implementations supports new (html/5749) error cloning semantic
20930var structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) {
20931  return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail;
20932});
20933
20934var nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark;
20935
20936var throwUncloneable = function (type) {
20937  throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR);
20938};
20939
20940var throwUnpolyfillable = function (type, action) {
20941  throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR);
20942};
20943
20944var createDataTransfer = function () {
20945  var dataTransfer;
20946  try {
20947    dataTransfer = new global.DataTransfer();
20948  } catch (error) {
20949    try {
20950      dataTransfer = new global.ClipboardEvent('').clipboardData;
20951    } catch (error2) { /* empty */ }
20952  }
20953  return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null;
20954};
20955
20956var structuredCloneInternal = function (value, map) {
20957  if (isSymbol(value)) throwUncloneable('Symbol');
20958  if (!isObject(value)) return value;
20959  // effectively preserves circular references
20960  if (map) {
20961    if (mapHas(map, value)) return mapGet(map, value);
20962  } else map = new Map();
20963
20964  var type = classof(value);
20965  var deep = false;
20966  var C, name, cloned, dataTransfer, i, length, keys, key, source, target;
20967
20968  switch (type) {
20969    case 'Array':
20970      cloned = [];
20971      deep = true;
20972      break;
20973    case 'Object':
20974      cloned = {};
20975      deep = true;
20976      break;
20977    case 'Map':
20978      cloned = new Map();
20979      deep = true;
20980      break;
20981    case 'Set':
20982      cloned = new Set();
20983      deep = true;
20984      break;
20985    case 'RegExp':
20986      // in this block because of a Safari 14.1 bug
20987      // old FF does not clone regexes passed to the constructor, so get the source and flags directly
20988      cloned = new RegExp(value.source, getRegExpFlags(value));
20989      break;
20990    case 'Error':
20991      name = value.name;
20992      switch (name) {
20993        case 'AggregateError':
20994          cloned = getBuiltin('AggregateError')([]);
20995          break;
20996        case 'EvalError':
20997          cloned = EvalError();
20998          break;
20999        case 'RangeError':
21000          cloned = RangeError();
21001          break;
21002        case 'ReferenceError':
21003          cloned = ReferenceError();
21004          break;
21005        case 'SyntaxError':
21006          cloned = SyntaxError();
21007          break;
21008        case 'TypeError':
21009          cloned = TypeError();
21010          break;
21011        case 'URIError':
21012          cloned = URIError();
21013          break;
21014        case 'CompileError':
21015          cloned = CompileError();
21016          break;
21017        case 'LinkError':
21018          cloned = LinkError();
21019          break;
21020        case 'RuntimeError':
21021          cloned = RuntimeError();
21022          break;
21023        default:
21024          cloned = Error();
21025      }
21026      deep = true;
21027      break;
21028    case 'DOMException':
21029      cloned = new DOMException(value.message, value.name);
21030      deep = true;
21031      break;
21032    case 'DataView':
21033    case 'Int8Array':
21034    case 'Uint8Array':
21035    case 'Uint8ClampedArray':
21036    case 'Int16Array':
21037    case 'Uint16Array':
21038    case 'Int32Array':
21039    case 'Uint32Array':
21040    case 'Float32Array':
21041    case 'Float64Array':
21042    case 'BigInt64Array':
21043    case 'BigUint64Array':
21044      C = global[type];
21045      // in some old engines like Safari 9, typeof C is 'object'
21046      // on Uint8ClampedArray or some other constructors
21047      if (!isObject(C)) throwUnpolyfillable(type);
21048      cloned = new C(
21049        // this is safe, since arraybuffer cannot have circular references
21050        structuredCloneInternal(value.buffer, map),
21051        value.byteOffset,
21052        type === 'DataView' ? value.byteLength : value.length
21053      );
21054      break;
21055    case 'DOMQuad':
21056      try {
21057        cloned = new DOMQuad(
21058          structuredCloneInternal(value.p1, map),
21059          structuredCloneInternal(value.p2, map),
21060          structuredCloneInternal(value.p3, map),
21061          structuredCloneInternal(value.p4, map)
21062        );
21063      } catch (error) {
21064        if (nativeRestrictedStructuredClone) {
21065          cloned = nativeRestrictedStructuredClone(value);
21066        } else throwUnpolyfillable(type);
21067      }
21068      break;
21069    case 'FileList':
21070      dataTransfer = createDataTransfer();
21071      if (dataTransfer) {
21072        for (i = 0, length = lengthOfArrayLike(value); i < length; i++) {
21073          dataTransfer.items.add(structuredCloneInternal(value[i], map));
21074        }
21075        cloned = dataTransfer.files;
21076      } else if (nativeRestrictedStructuredClone) {
21077        cloned = nativeRestrictedStructuredClone(value);
21078      } else throwUnpolyfillable(type);
21079      break;
21080    case 'ImageData':
21081      // Safari 9 ImageData is a constructor, but typeof ImageData is 'object'
21082      try {
21083        cloned = new ImageData(
21084          structuredCloneInternal(value.data, map),
21085          value.width,
21086          value.height,
21087          { colorSpace: value.colorSpace }
21088        );
21089      } catch (error) {
21090        if (nativeRestrictedStructuredClone) {
21091          cloned = nativeRestrictedStructuredClone(value);
21092        } else throwUnpolyfillable(type);
21093      } break;
21094    default:
21095      if (nativeRestrictedStructuredClone) {
21096        cloned = nativeRestrictedStructuredClone(value);
21097      } else switch (type) {
21098        case 'BigInt':
21099          // can be a 3rd party polyfill
21100          cloned = Object(value.valueOf());
21101          break;
21102        case 'Boolean':
21103          cloned = Object(thisBooleanValue(value));
21104          break;
21105        case 'Number':
21106          cloned = Object(thisNumberValue(value));
21107          break;
21108        case 'String':
21109          cloned = Object(thisStringValue(value));
21110          break;
21111        case 'Date':
21112          cloned = new Date(thisTimeValue(value));
21113          break;
21114        case 'ArrayBuffer':
21115          C = global.DataView;
21116          // `ArrayBuffer#slice` is not available in IE10
21117          // `ArrayBuffer#slice` and `DataView` are not available in old FF
21118          if (!C && typeof value.slice != 'function') throwUnpolyfillable(type);
21119          // detached buffers throws in `DataView` and `.slice`
21120          try {
21121            if (typeof value.slice == 'function') {
21122              cloned = value.slice(0);
21123            } else {
21124              length = value.byteLength;
21125              cloned = new ArrayBuffer(length);
21126              source = new C(value);
21127              target = new C(cloned);
21128              for (i = 0; i < length; i++) {
21129                target.setUint8(i, source.getUint8(i));
21130              }
21131            }
21132          } catch (error) {
21133            throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR);
21134          } break;
21135        case 'SharedArrayBuffer':
21136          // SharedArrayBuffer should use shared memory, we can't polyfill it, so return the original
21137          cloned = value;
21138          break;
21139        case 'Blob':
21140          try {
21141            cloned = value.slice(0, value.size, value.type);
21142          } catch (error) {
21143            throwUnpolyfillable(type);
21144          } break;
21145        case 'DOMPoint':
21146        case 'DOMPointReadOnly':
21147          C = global[type];
21148          try {
21149            cloned = C.fromPoint
21150              ? C.fromPoint(value)
21151              : new C(value.x, value.y, value.z, value.w);
21152          } catch (error) {
21153            throwUnpolyfillable(type);
21154          } break;
21155        case 'DOMRect':
21156        case 'DOMRectReadOnly':
21157          C = global[type];
21158          try {
21159            cloned = C.fromRect
21160              ? C.fromRect(value)
21161              : new C(value.x, value.y, value.width, value.height);
21162          } catch (error) {
21163            throwUnpolyfillable(type);
21164          } break;
21165        case 'DOMMatrix':
21166        case 'DOMMatrixReadOnly':
21167          C = global[type];
21168          try {
21169            cloned = C.fromMatrix
21170              ? C.fromMatrix(value)
21171              : new C(value);
21172          } catch (error) {
21173            throwUnpolyfillable(type);
21174          } break;
21175        case 'AudioData':
21176        case 'VideoFrame':
21177          if (!isCallable(value.clone)) throwUnpolyfillable(type);
21178          try {
21179            cloned = value.clone();
21180          } catch (error) {
21181            throwUncloneable(type);
21182          } break;
21183        case 'File':
21184          try {
21185            cloned = new File([value], value.name, value);
21186          } catch (error) {
21187            throwUnpolyfillable(type);
21188          } break;
21189        case 'CryptoKey':
21190        case 'GPUCompilationMessage':
21191        case 'GPUCompilationInfo':
21192        case 'ImageBitmap':
21193        case 'RTCCertificate':
21194        case 'WebAssembly.Module':
21195          throwUnpolyfillable(type);
21196          // break omitted
21197        default:
21198          throwUncloneable(type);
21199      }
21200  }
21201
21202  mapSet(map, value, cloned);
21203
21204  if (deep) switch (type) {
21205    case 'Array':
21206    case 'Object':
21207      keys = objectKeys(value);
21208      for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {
21209        key = keys[i];
21210        createProperty(cloned, key, structuredCloneInternal(value[key], map));
21211      } break;
21212    case 'Map':
21213      value.forEach(function (v, k) {
21214        mapSet(cloned, structuredCloneInternal(k, map), structuredCloneInternal(v, map));
21215      });
21216      break;
21217    case 'Set':
21218      value.forEach(function (v) {
21219        setAdd(cloned, structuredCloneInternal(v, map));
21220      });
21221      break;
21222    case 'Error':
21223      createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map));
21224      if (hasOwn(value, 'cause')) {
21225        createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map));
21226      }
21227      if (name == 'AggregateError') {
21228        cloned.errors = structuredCloneInternal(value.errors, map);
21229      } // break omitted
21230    case 'DOMException':
21231      if (ERROR_STACK_INSTALLABLE) {
21232        createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map));
21233      }
21234  }
21235
21236  return cloned;
21237};
21238
21239var PROPER_TRANSFER = nativeStructuredClone && !fails(function () {
21240  // prevent V8 ArrayBufferDetaching protector cell invalidation and performance degradation
21241  // https://github.com/zloirock/core-js/issues/679
21242  if ((IS_DENO && V8 > 92) || (IS_NODE && V8 > 94) || (IS_BROWSER && V8 > 97)) return false;
21243  var buffer = new ArrayBuffer(8);
21244  var clone = nativeStructuredClone(buffer, { transfer: [buffer] });
21245  return buffer.byteLength != 0 || clone.byteLength != 8;
21246});
21247
21248var tryToTransfer = function (rawTransfer, map) {
21249  if (!isObject(rawTransfer)) throw TypeError('Transfer option cannot be converted to a sequence');
21250
21251  var transfer = [];
21252
21253  iterate(rawTransfer, function (value) {
21254    push(transfer, anObject(value));
21255  });
21256
21257  var i = 0;
21258  var length = lengthOfArrayLike(transfer);
21259  var value, type, C, transferredArray, transferred, canvas, context;
21260
21261  if (PROPER_TRANSFER) {
21262    transferredArray = nativeStructuredClone(transfer, { transfer: transfer });
21263    while (i < length) mapSet(map, transfer[i], transferredArray[i++]);
21264  } else while (i < length) {
21265    value = transfer[i++];
21266    if (mapHas(map, value)) throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);
21267
21268    type = classof(value);
21269
21270    switch (type) {
21271      case 'ImageBitmap':
21272        C = global.OffscreenCanvas;
21273        if (!isConstructor(C)) throwUnpolyfillable(type, TRANSFERRING);
21274        try {
21275          canvas = new C(value.width, value.height);
21276          context = canvas.getContext('bitmaprenderer');
21277          context.transferFromImageBitmap(value);
21278          transferred = canvas.transferToImageBitmap();
21279        } catch (error) { /* empty */ }
21280        break;
21281      case 'AudioData':
21282      case 'VideoFrame':
21283        if (!isCallable(value.clone) || !isCallable(value.close)) throwUnpolyfillable(type, TRANSFERRING);
21284        try {
21285          transferred = value.clone();
21286          value.close();
21287        } catch (error) { /* empty */ }
21288        break;
21289      case 'ArrayBuffer':
21290      case 'MessagePort':
21291      case 'OffscreenCanvas':
21292      case 'ReadableStream':
21293      case 'TransformStream':
21294      case 'WritableStream':
21295        throwUnpolyfillable(type, TRANSFERRING);
21296    }
21297
21298    if (transferred === undefined) throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR);
21299    mapSet(map, value, transferred);
21300  }
21301};
21302
21303$({ global: true, enumerable: true, sham: !PROPER_TRANSFER, forced: FORCED_REPLACEMENT }, {
21304  structuredClone: function structuredClone(value /* , { transfer } */) {
21305    var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined;
21306    var transfer = options ? options.transfer : undefined;
21307    var map;
21308
21309    if (transfer !== undefined) {
21310      map = new Map();
21311      tryToTransfer(transfer, map);
21312    }
21313
21314    return structuredCloneInternal(value, map);
21315  }
21316});
21317
21318
21319/***/ }),
21320
21321/***/ 32564:
21322/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
21323
21324// TODO: Remove this module from `core-js@4` since it's split to modules listed below
21325__webpack_require__(96815);
21326__webpack_require__(88417);
21327
21328
21329/***/ }),
21330
21331/***/ 65556:
21332/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
21333
21334"use strict";
21335
21336// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
21337__webpack_require__(66992);
21338var $ = __webpack_require__(82109);
21339var global = __webpack_require__(17854);
21340var call = __webpack_require__(46916);
21341var uncurryThis = __webpack_require__(1702);
21342var DESCRIPTORS = __webpack_require__(19781);
21343var USE_NATIVE_URL = __webpack_require__(85143);
21344var defineBuiltIn = __webpack_require__(98052);
21345var defineBuiltIns = __webpack_require__(89190);
21346var setToStringTag = __webpack_require__(58003);
21347var createIteratorConstructor = __webpack_require__(63061);
21348var InternalStateModule = __webpack_require__(29909);
21349var anInstance = __webpack_require__(25787);
21350var isCallable = __webpack_require__(60614);
21351var hasOwn = __webpack_require__(92597);
21352var bind = __webpack_require__(49974);
21353var classof = __webpack_require__(70648);
21354var anObject = __webpack_require__(19670);
21355var isObject = __webpack_require__(70111);
21356var $toString = __webpack_require__(41340);
21357var create = __webpack_require__(70030);
21358var createPropertyDescriptor = __webpack_require__(79114);
21359var getIterator = __webpack_require__(18554);
21360var getIteratorMethod = __webpack_require__(71246);
21361var validateArgumentsLength = __webpack_require__(48053);
21362var wellKnownSymbol = __webpack_require__(5112);
21363var arraySort = __webpack_require__(94362);
21364
21365var ITERATOR = wellKnownSymbol('iterator');
21366var URL_SEARCH_PARAMS = 'URLSearchParams';
21367var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';
21368var setInternalState = InternalStateModule.set;
21369var getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);
21370var getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);
21371// eslint-disable-next-line es-x
vendor: 11,549 bytes, lines 21371-21731
21371/no-object-getownpropertydescriptor -- safe
21372var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
21373
21374// Avoid NodeJS experimental warning
21375var safeGetBuiltIn = function (name) {
21376  if (!DESCRIPTORS) return global[name];
21377  var descriptor = getOwnPropertyDescriptor(global, name);
21378  return descriptor && descriptor.value;
21379};
21380
21381var nativeFetch = safeGetBuiltIn('fetch');
21382var NativeRequest = safeGetBuiltIn('Request');
21383var Headers = safeGetBuiltIn('Headers');
21384var RequestPrototype = NativeRequest && NativeRequest.prototype;
21385var HeadersPrototype = Headers && Headers.prototype;
21386var RegExp = global.RegExp;
21387var TypeError = global.TypeError;
21388var decodeURIComponent = global.decodeURIComponent;
21389var encodeURIComponent = global.encodeURIComponent;
21390var charAt = uncurryThis(''.charAt);
21391var join = uncurryThis([].join);
21392var push = uncurryThis([].push);
21393var replace = uncurryThis(''.replace);
21394var shift = uncurryThis([].shift);
21395var splice = uncurryThis([].splice);
21396var split = uncurryThis(''.split);
21397var stringSlice = uncurryThis(''.slice);
21398
21399var plus = /\+/g;
21400var sequences = Array(4);
21401
21402var percentSequence = function (bytes) {
21403  return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi'));
21404};
21405
21406var percentDecode = function (sequence) {
21407  try {
21408    return decodeURIComponent(sequence);
21409  } catch (error) {
21410    return sequence;
21411  }
21412};
21413
21414var deserialize = function (it) {
21415  var result = replace(it, plus, ' ');
21416  var bytes = 4;
21417  try {
21418    return decodeURIComponent(result);
21419  } catch (error) {
21420    while (bytes) {
21421      result = replace(result, percentSequence(bytes--), percentDecode);
21422    }
21423    return result;
21424  }
21425};
21426
21427var find = /[!'()~]|%20/g;
21428
21429var replacements = {
21430  '!': '%21',
21431  "'": '%27',
21432  '(': '%28',
21433  ')': '%29',
21434  '~': '%7E',
21435  '%20': '+'
21436};
21437
21438var replacer = function (match) {
21439  return replacements[match];
21440};
21441
21442var serialize = function (it) {
21443  return replace(encodeURIComponent(it), find, replacer);
21444};
21445
21446var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {
21447  setInternalState(this, {
21448    type: URL_SEARCH_PARAMS_ITERATOR,
21449    iterator: getIterator(getInternalParamsState(params).entries),
21450    kind: kind
21451  });
21452}, 'Iterator', function next() {
21453  var state = getInternalIteratorState(this);
21454  var kind = state.kind;
21455  var step = state.iterator.next();
21456  var entry = step.value;
21457  if (!step.done) {
21458    step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];
21459  } return step;
21460}, true);
21461
21462var URLSearchParamsState = function (init) {
21463  this.entries = [];
21464  this.url = null;
21465
21466  if (init !== undefined) {
21467    if (isObject(init)) this.parseObject(init);
21468    else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));
21469  }
21470};
21471
21472URLSearchParamsState.prototype = {
21473  type: URL_SEARCH_PARAMS,
21474  bindURL: function (url) {
21475    this.url = url;
21476    this.update();
21477  },
21478  parseObject: function (object) {
21479    var iteratorMethod = getIteratorMethod(object);
21480    var iterator, next, step, entryIterator, entryNext, first, second;
21481
21482    if (iteratorMethod) {
21483      iterator = getIterator(object, iteratorMethod);
21484      next = iterator.next;
21485      while (!(step = call(next, iterator)).done) {
21486        entryIterator = getIterator(anObject(step.value));
21487        entryNext = entryIterator.next;
21488        if (
21489          (first = call(entryNext, entryIterator)).done ||
21490          (second = call(entryNext, entryIterator)).done ||
21491          !call(entryNext, entryIterator).done
21492        ) throw TypeError('Expected sequence with length 2');
21493        push(this.entries, { key: $toString(first.value), value: $toString(second.value) });
21494      }
21495    } else for (var key in object) if (hasOwn(object, key)) {
21496      push(this.entries, { key: key, value: $toString(object[key]) });
21497    }
21498  },
21499  parseQuery: function (query) {
21500    if (query) {
21501      var attributes = split(query, '&');
21502      var index = 0;
21503      var attribute, entry;
21504      while (index < attributes.length) {
21505        attribute = attributes[index++];
21506        if (attribute.length) {
21507          entry = split(attribute, '=');
21508          push(this.entries, {
21509            key: deserialize(shift(entry)),
21510            value: deserialize(join(entry, '='))
21511          });
21512        }
21513      }
21514    }
21515  },
21516  serialize: function () {
21517    var entries = this.entries;
21518    var result = [];
21519    var index = 0;
21520    var entry;
21521    while (index < entries.length) {
21522      entry = entries[index++];
21523      push(result, serialize(entry.key) + '=' + serialize(entry.value));
21524    } return join(result, '&');
21525  },
21526  update: function () {
21527    this.entries.length = 0;
21528    this.parseQuery(this.url.query);
21529  },
21530  updateURL: function () {
21531    if (this.url) this.url.update();
21532  }
21533};
21534
21535// `URLSearchParams` constructor
21536// https://url.spec.whatwg.org/#interface-urlsearchparams
21537var URLSearchParamsConstructor = function URLSearchParams(/* init */) {
21538  anInstance(this, URLSearchParamsPrototype);
21539  var init = arguments.length > 0 ? arguments[0] : undefined;
21540  setInternalState(this, new URLSearchParamsState(init));
21541};
21542
21543var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;
21544
21545defineBuiltIns(URLSearchParamsPrototype, {
21546  // `URLSearchParams.prototype.append` method
21547  // https://url.spec.whatwg.org/#dom-urlsearchparams-append
21548  append: function append(name, value) {
21549    validateArgumentsLength(arguments.length, 2);
21550    var state = getInternalParamsState(this);
21551    push(state.entries, { key: $toString(name), value: $toString(value) });
21552    state.updateURL();
21553  },
21554  // `URLSearchParams.prototype.delete` method
21555  // https://url.spec.whatwg.org/#dom-urlsearchparams-delete
21556  'delete': function (name) {
21557    validateArgumentsLength(arguments.length, 1);
21558    var state = getInternalParamsState(this);
21559    var entries = state.entries;
21560    var key = $toString(name);
21561    var index = 0;
21562    while (index < entries.length) {
21563      if (entries[index].key === key) splice(entries, index, 1);
21564      else index++;
21565    }
21566    state.updateURL();
21567  },
21568  // `URLSearchParams.prototype.get` method
21569  // https://url.spec.whatwg.org/#dom-urlsearchparams-get
21570  get: function get(name) {
21571    validateArgumentsLength(arguments.length, 1);
21572    var entries = getInternalParamsState(this).entries;
21573    var key = $toString(name);
21574    var index = 0;
21575    for (; index < entries.length; index++) {
21576      if (entries[index].key === key) return entries[index].value;
21577    }
21578    return null;
21579  },
21580  // `URLSearchParams.prototype.getAll` method
21581  // https://url.spec.whatwg.org/#dom-urlsearchparams-getall
21582  getAll: function getAll(name) {
21583    validateArgumentsLength(arguments.length, 1);
21584    var entries = getInternalParamsState(this).entries;
21585    var key = $toString(name);
21586    var result = [];
21587    var index = 0;
21588    for (; index < entries.length; index++) {
21589      if (entries[index].key === key) push(result, entries[index].value);
21590    }
21591    return result;
21592  },
21593  // `URLSearchParams.prototype.has` method
21594  // https://url.spec.whatwg.org/#dom-urlsearchparams-has
21595  has: function has(name) {
21596    validateArgumentsLength(arguments.length, 1);
21597    var entries = getInternalParamsState(this).entries;
21598    var key = $toString(name);
21599    var index = 0;
21600    while (index < entries.length) {
21601      if (entries[index++].key === key) return true;
21602    }
21603    return false;
21604  },
21605  // `URLSearchParams.prototype.set` method
21606  // https://url.spec.whatwg.org/#dom-urlsearchparams-set
21607  set: function set(name, value) {
21608    validateArgumentsLength(arguments.length, 1);
21609    var state = getInternalParamsState(this);
21610    var entries = state.entries;
21611    var found = false;
21612    var key = $toString(name);
21613    var val = $toString(value);
21614    var index = 0;
21615    var entry;
21616    for (; index < entries.length; index++) {
21617      entry = entries[index];
21618      if (entry.key === key) {
21619        if (found) splice(entries, index--, 1);
21620        else {
21621          found = true;
21622          entry.value = val;
21623        }
21624      }
21625    }
21626    if (!found) push(entries, { key: key, value: val });
21627    state.updateURL();
21628  },
21629  // `URLSearchParams.prototype.sort` method
21630  // https://url.spec.whatwg.org/#dom-urlsearchparams-sort
21631  sort: function sort() {
21632    var state = getInternalParamsState(this);
21633    arraySort(state.entries, function (a, b) {
21634      return a.key > b.key ? 1 : -1;
21635    });
21636    state.updateURL();
21637  },
21638  // `URLSearchParams.prototype.forEach` method
21639  forEach: function forEach(callback /* , thisArg */) {
21640    var entries = getInternalParamsState(this).entries;
21641    var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);
21642    var index = 0;
21643    var entry;
21644    while (index < entries.length) {
21645      entry = entries[index++];
21646      boundFunction(entry.value, entry.key, this);
21647    }
21648  },
21649  // `URLSearchParams.prototype.keys` method
21650  keys: function keys() {
21651    return new URLSearchParamsIterator(this, 'keys');
21652  },
21653  // `URLSearchParams.prototype.values` method
21654  values: function values() {
21655    return new URLSearchParamsIterator(this, 'values');
21656  },
21657  // `URLSearchParams.prototype.entries` method
21658  entries: function entries() {
21659    return new URLSearchParamsIterator(this, 'entries');
21660  }
21661}, { enumerable: true });
21662
21663// `URLSearchParams.prototype[@@iterator]` method
21664defineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });
21665
21666// `URLSearchParams.prototype.toString` method
21667// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior
21668defineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() {
21669  return getInternalParamsState(this).serialize();
21670}, { enumerable: true });
21671
21672setToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);
21673
21674$({ global: true, constructor: true, forced: !USE_NATIVE_URL }, {
21675  URLSearchParams: URLSearchParamsConstructor
21676});
21677
21678// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`
21679if (!USE_NATIVE_URL && isCallable(Headers)) {
21680  var headersHas = uncurryThis(HeadersPrototype.has);
21681  var headersSet = uncurryThis(HeadersPrototype.set);
21682
21683  var wrapRequestOptions = function (init) {
21684    if (isObject(init)) {
21685      var body = init.body;
21686      var headers;
21687      if (classof(body) === URL_SEARCH_PARAMS) {
21688        headers = init.headers ? new Headers(init.headers) : new Headers();
21689        if (!headersHas(headers, 'content-type')) {
21690          headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
21691        }
21692        return create(init, {
21693          body: createPropertyDescriptor(0, $toString(body)),
21694          headers: createPropertyDescriptor(0, headers)
21695        });
21696      }
21697    } return init;
21698  };
21699
21700  if (isCallable(nativeFetch)) {
21701    $({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {
21702      fetch: function fetch(input /* , init */) {
21703        return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
21704      }
21705    });
21706  }
21707
21708  if (isCallable(NativeRequest)) {
21709    var RequestConstructor = function Request(input /* , init */) {
21710      anInstance(this, RequestPrototype);
21711      return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});
21712    };
21713
21714    RequestPrototype.constructor = RequestConstructor;
21715    RequestConstructor.prototype = RequestPrototype;
21716
21717    $({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {
21718      Request: RequestConstructor
21719    });
21720  }
21721}
21722
21723module.exports = {
21724  URLSearchParams: URLSearchParamsConstructor,
21725  getState: getInternalParamsState
21726};
21727
21728
21729/***/ }),
21730
21731/***/ 
2173141637:
21732/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
21733
21734// TODO: Remove this module from `core-js@4` since it's replaced to module below
21735__webpack_require__(65556);
21736
21737
21738/***/ }),
21739
21740/***/ 68789:
21741/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
21742
21743"use strict";
21744
21745// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`
21746__webpack_require__(78783);
21747var $ = __webpack_require__(82109);
21748var DESCRIPTORS = __webpack_require__(19781);
21749var USE_NATIVE_URL = __webpack_require__(85143);
21750var global = __webpack_require__(17854);
21751var bind = __webpack_require__(49974);
21752var uncurryThis = __webpack_require__(1702);
21753var defineBuiltIn = __webpack_require__(98052);
21754var defineBuiltInAccessor = __webpack_require__(47045);
21755var anInstance = __webpack_require__(25787);
21756var hasOwn = __webpack_require__(92597);
21757var assign = __webpack_require__(21574);
21758var arrayFrom = __webpack_require__(48457);
21759var arraySlice = __webpack_require__(41589);
21760var codeAt = (__webpack_require__(28710).codeAt);
21761var toASCII = __webpack_require__(33197);
21762var $toString = __webpack_require__(41340);
21763var setToStringTag = __webpack_require__(58003);
21764var validateArgumentsLength = __webpack_require__(48053);
21765var URLSearchParamsModule = __webpack_require__(65556);
21766var InternalStateModule = __webpack_require__(2
vendor: 34,205 bytes, lines 21766-22790
217669909);
21767
21768var setInternalState = InternalStateModule.set;
21769var getInternalURLState = InternalStateModule.getterFor('URL');
21770var URLSearchParams = URLSearchParamsModule.URLSearchParams;
21771var getInternalSearchParamsState = URLSearchParamsModule.getState;
21772
21773var NativeURL = global.URL;
21774var TypeError = global.TypeError;
21775var parseInt = global.parseInt;
21776var floor = Math.floor;
21777var pow = Math.pow;
21778var charAt = uncurryThis(''.charAt);
21779var exec = uncurryThis(/./.exec);
21780var join = uncurryThis([].join);
21781var numberToString = uncurryThis(1.0.toString);
21782var pop = uncurryThis([].pop);
21783var push = uncurryThis([].push);
21784var replace = uncurryThis(''.replace);
21785var shift = uncurryThis([].shift);
21786var split = uncurryThis(''.split);
21787var stringSlice = uncurryThis(''.slice);
21788var toLowerCase = uncurryThis(''.toLowerCase);
21789var unshift = uncurryThis([].unshift);
21790
21791var INVALID_AUTHORITY = 'Invalid authority';
21792var INVALID_SCHEME = 'Invalid scheme';
21793var INVALID_HOST = 'Invalid host';
21794var INVALID_PORT = 'Invalid port';
21795
21796var ALPHA = /[a-z]/i;
21797// eslint-disable-next-line regexp/no-obscure-range -- safe
21798var ALPHANUMERIC = /[\d+-.a-z]/i;
21799var DIGIT = /\d/;
21800var HEX_START = /^0x/i;
21801var OCT = /^[0-7]+$/;
21802var DEC = /^\d+$/;
21803var HEX = /^[\da-f]+$/i;
21804/* eslint-disable regexp/no-control-character -- safe */
21805var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/;
21806var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/;
21807var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+|[\u0000-\u0020]+$/g;
21808var TAB_AND_NEW_LINE = /[\t\n\r]/g;
21809/* eslint-enable regexp/no-control-character -- safe */
21810var EOF;
21811
21812// https://url.spec.whatwg.org/#ipv4-number-parser
21813var parseIPv4 = function (input) {
21814  var parts = split(input, '.');
21815  var partsLength, numbers, index, part, radix, number, ipv4;
21816  if (parts.length && parts[parts.length - 1] == '') {
21817    parts.length--;
21818  }
21819  partsLength = parts.length;
21820  if (partsLength > 4) return input;
21821  numbers = [];
21822  for (index = 0; index < partsLength; index++) {
21823    part = parts[index];
21824    if (part == '') return input;
21825    radix = 10;
21826    if (part.length > 1 && charAt(part, 0) == '0') {
21827      radix = exec(HEX_START, part) ? 16 : 8;
21828      part = stringSlice(part, radix == 8 ? 1 : 2);
21829    }
21830    if (part === '') {
21831      number = 0;
21832    } else {
21833      if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;
21834      number = parseInt(part, radix);
21835    }
21836    push(numbers, number);
21837  }
21838  for (index = 0; index < partsLength; index++) {
21839    number = numbers[index];
21840    if (index == partsLength - 1) {
21841      if (number >= pow(256, 5 - partsLength)) return null;
21842    } else if (number > 255) return null;
21843  }
21844  ipv4 = pop(numbers);
21845  for (index = 0; index < numbers.length; index++) {
21846    ipv4 += numbers[index] * pow(256, 3 - index);
21847  }
21848  return ipv4;
21849};
21850
21851// https://url.spec.whatwg.org/#concept-ipv6-parser
21852// eslint-disable-next-line max-statements -- TODO
21853var parseIPv6 = function (input) {
21854  var address = [0, 0, 0, 0, 0, 0, 0, 0];
21855  var pieceIndex = 0;
21856  var compress = null;
21857  var pointer = 0;
21858  var value, length, numbersSeen, ipv4Piece, number, swaps, swap;
21859
21860  var chr = function () {
21861    return charAt(input, pointer);
21862  };
21863
21864  if (chr() == ':') {
21865    if (charAt(input, 1) != ':') return;
21866    pointer += 2;
21867    pieceIndex++;
21868    compress = pieceIndex;
21869  }
21870  while (chr()) {
21871    if (pieceIndex == 8) return;
21872    if (chr() == ':') {
21873      if (compress !== null) return;
21874      pointer++;
21875      pieceIndex++;
21876      compress = pieceIndex;
21877      continue;
21878    }
21879    value = length = 0;
21880    while (length < 4 && exec(HEX, chr())) {
21881      value = value * 16 + parseInt(chr(), 16);
21882      pointer++;
21883      length++;
21884    }
21885    if (chr() == '.') {
21886      if (length == 0) return;
21887      pointer -= length;
21888      if (pieceIndex > 6) return;
21889      numbersSeen = 0;
21890      while (chr()) {
21891        ipv4Piece = null;
21892        if (numbersSeen > 0) {
21893          if (chr() == '.' && numbersSeen < 4) pointer++;
21894          else return;
21895        }
21896        if (!exec(DIGIT, chr())) return;
21897        while (exec(DIGIT, chr())) {
21898          number = parseInt(chr(), 10);
21899          if (ipv4Piece === null) ipv4Piece = number;
21900          else if (ipv4Piece == 0) return;
21901          else ipv4Piece = ipv4Piece * 10 + number;
21902          if (ipv4Piece > 255) return;
21903          pointer++;
21904        }
21905        address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;
21906        numbersSeen++;
21907        if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;
21908      }
21909      if (numbersSeen != 4) return;
21910      break;
21911    } else if (chr() == ':') {
21912      pointer++;
21913      if (!chr()) return;
21914    } else if (chr()) return;
21915    address[pieceIndex++] = value;
21916  }
21917  if (compress !== null) {
21918    swaps = pieceIndex - compress;
21919    pieceIndex = 7;
21920    while (pieceIndex != 0 && swaps > 0) {
21921      swap = address[pieceIndex];
21922      address[pieceIndex--] = address[compress + swaps - 1];
21923      address[compress + --swaps] = swap;
21924    }
21925  } else if (pieceIndex != 8) return;
21926  return address;
21927};
21928
21929var findLongestZeroSequence = function (ipv6) {
21930  var maxIndex = null;
21931  var maxLength = 1;
21932  var currStart = null;
21933  var currLength = 0;
21934  var index = 0;
21935  for (; index < 8; index++) {
21936    if (ipv6[index] !== 0) {
21937      if (currLength > maxLength) {
21938        maxIndex = currStart;
21939        maxLength = currLength;
21940      }
21941      currStart = null;
21942      currLength = 0;
21943    } else {
21944      if (currStart === null) currStart = index;
21945      ++currLength;
21946    }
21947  }
21948  if (currLength > maxLength) {
21949    maxIndex = currStart;
21950    maxLength = currLength;
21951  }
21952  return maxIndex;
21953};
21954
21955// https://url.spec.whatwg.org/#host-serializing
21956var serializeHost = function (host) {
21957  var result, index, compress, ignore0;
21958  // ipv4
21959  if (typeof host == 'number') {
21960    result = [];
21961    for (index = 0; index < 4; index++) {
21962      unshift(result, host % 256);
21963      host = floor(host / 256);
21964    } return join(result, '.');
21965  // ipv6
21966  } else if (typeof host == 'object') {
21967    result = '';
21968    compress = findLongestZeroSequence(host);
21969    for (index = 0; index < 8; index++) {
21970      if (ignore0 && host[index] === 0) continue;
21971      if (ignore0) ignore0 = false;
21972      if (compress === index) {
21973        result += index ? ':' : '::';
21974        ignore0 = true;
21975      } else {
21976        result += numberToString(host[index], 16);
21977        if (index < 7) result += ':';
21978      }
21979    }
21980    return '[' + result + ']';
21981  } return host;
21982};
21983
21984var C0ControlPercentEncodeSet = {};
21985var fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {
21986  ' ': 1, '"': 1, '<': 1, '>': 1, '`': 1
21987});
21988var pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {
21989  '#': 1, '?': 1, '{': 1, '}': 1
21990});
21991var userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {
21992  '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\': 1, ']': 1, '^': 1, '|': 1
21993});
21994
21995var percentEncode = function (chr, set) {
21996  var code = codeAt(chr, 0);
21997  return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);
21998};
21999
22000// https://url.spec.whatwg.org/#special-scheme
22001var specialSchemes = {
22002  ftp: 21,
22003  file: null,
22004  http: 80,
22005  https: 443,
22006  ws: 80,
22007  wss: 443
22008};
22009
22010// https://url.spec.whatwg.org/#windows-drive-letter
22011var isWindowsDriveLetter = function (string, normalized) {
22012  var second;
22013  return string.length == 2 && exec(ALPHA, charAt(string, 0))
22014    && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));
22015};
22016
22017// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter
22018var startsWithWindowsDriveLetter = function (string) {
22019  var third;
22020  return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (
22021    string.length == 2 ||
22022    ((third = charAt(string, 2)) === '/' || third === '\\' || third === '?' || third === '#')
22023  );
22024};
22025
22026// https://url.spec.whatwg.org/#single-dot-path-segment
22027var isSingleDot = function (segment) {
22028  return segment === '.' || toLowerCase(segment) === '%2e';
22029};
22030
22031// https://url.spec.whatwg.org/#double-dot-path-segment
22032var isDoubleDot = function (segment) {
22033  segment = toLowerCase(segment);
22034  return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';
22035};
22036
22037// States:
22038var SCHEME_START = {};
22039var SCHEME = {};
22040var NO_SCHEME = {};
22041var SPECIAL_RELATIVE_OR_AUTHORITY = {};
22042var PATH_OR_AUTHORITY = {};
22043var RELATIVE = {};
22044var RELATIVE_SLASH = {};
22045var SPECIAL_AUTHORITY_SLASHES = {};
22046var SPECIAL_AUTHORITY_IGNORE_SLASHES = {};
22047var AUTHORITY = {};
22048var HOST = {};
22049var HOSTNAME = {};
22050var PORT = {};
22051var FILE = {};
22052var FILE_SLASH = {};
22053var FILE_HOST = {};
22054var PATH_START = {};
22055var PATH = {};
22056var CANNOT_BE_A_BASE_URL_PATH = {};
22057var QUERY = {};
22058var FRAGMENT = {};
22059
22060var URLState = function (url, isBase, base) {
22061  var urlString = $toString(url);
22062  var baseState, failure, searchParams;
22063  if (isBase) {
22064    failure = this.parse(urlString);
22065    if (failure) throw TypeError(failure);
22066    this.searchParams = null;
22067  } else {
22068    if (base !== undefined) baseState = new URLState(base, true);
22069    failure = this.parse(urlString, null, baseState);
22070    if (failure) throw TypeError(failure);
22071    searchParams = getInternalSearchParamsState(new URLSearchParams());
22072    searchParams.bindURL(this);
22073    this.searchParams = searchParams;
22074  }
22075};
22076
22077URLState.prototype = {
22078  type: 'URL',
22079  // https://url.spec.whatwg.org/#url-parsing
22080  // eslint-disable-next-line max-statements -- TODO
22081  parse: function (input, stateOverride, base) {
22082    var url = this;
22083    var state = stateOverride || SCHEME_START;
22084    var pointer = 0;
22085    var buffer = '';
22086    var seenAt = false;
22087    var seenBracket = false;
22088    var seenPasswordToken = false;
22089    var codePoints, chr, bufferCodePoints, failure;
22090
22091    input = $toString(input);
22092
22093    if (!stateOverride) {
22094      url.scheme = '';
22095      url.username = '';
22096      url.password = '';
22097      url.host = null;
22098      url.port = null;
22099      url.path = [];
22100      url.query = null;
22101      url.fragment = null;
22102      url.cannotBeABaseURL = false;
22103      input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');
22104    }
22105
22106    input = replace(input, TAB_AND_NEW_LINE, '');
22107
22108    codePoints = arrayFrom(input);
22109
22110    while (pointer <= codePoints.length) {
22111      chr = codePoints[pointer];
22112      switch (state) {
22113        case SCHEME_START:
22114          if (chr && exec(ALPHA, chr)) {
22115            buffer += toLowerCase(chr);
22116            state = SCHEME;
22117          } else if (!stateOverride) {
22118            state = NO_SCHEME;
22119            continue;
22120          } else return INVALID_SCHEME;
22121          break;
22122
22123        case SCHEME:
22124          if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {
22125            buffer += toLowerCase(chr);
22126          } else if (chr == ':') {
22127            if (stateOverride && (
22128              (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||
22129              (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||
22130              (url.scheme == 'file' && !url.host)
22131            )) return;
22132            url.scheme = buffer;
22133            if (stateOverride) {
22134              if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;
22135              return;
22136            }
22137            buffer = '';
22138            if (url.scheme == 'file') {
22139              state = FILE;
22140            } else if (url.isSpecial() && base && base.scheme == url.scheme) {
22141              state = SPECIAL_RELATIVE_OR_AUTHORITY;
22142            } else if (url.isSpecial()) {
22143              state = SPECIAL_AUTHORITY_SLASHES;
22144            } else if (codePoints[pointer + 1] == '/') {
22145              state = PATH_OR_AUTHORITY;
22146              pointer++;
22147            } else {
22148              url.cannotBeABaseURL = true;
22149              push(url.path, '');
22150              state = CANNOT_BE_A_BASE_URL_PATH;
22151            }
22152          } else if (!stateOverride) {
22153            buffer = '';
22154            state = NO_SCHEME;
22155            pointer = 0;
22156            continue;
22157          } else return INVALID_SCHEME;
22158          break;
22159
22160        case NO_SCHEME:
22161          if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;
22162          if (base.cannotBeABaseURL && chr == '#') {
22163            url.scheme = base.scheme;
22164            url.path = arraySlice(base.path);
22165            url.query = base.query;
22166            url.fragment = '';
22167            url.cannotBeABaseURL = true;
22168            state = FRAGMENT;
22169            break;
22170          }
22171          state = base.scheme == 'file' ? FILE : RELATIVE;
22172          continue;
22173
22174        case SPECIAL_RELATIVE_OR_AUTHORITY:
22175          if (chr == '/' && codePoints[pointer + 1] == '/') {
22176            state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
22177            pointer++;
22178          } else {
22179            state = RELATIVE;
22180            continue;
22181          } break;
22182
22183        case PATH_OR_AUTHORITY:
22184          if (chr == '/') {
22185            state = AUTHORITY;
22186            break;
22187          } else {
22188            state = PATH;
22189            continue;
22190          }
22191
22192        case RELATIVE:
22193          url.scheme = base.scheme;
22194          if (chr == EOF) {
22195            url.username = base.username;
22196            url.password = base.password;
22197            url.host = base.host;
22198            url.port = base.port;
22199            url.path = arraySlice(base.path);
22200            url.query = base.query;
22201          } else if (chr == '/' || (chr == '\\' && url.isSpecial())) {
22202            state = RELATIVE_SLASH;
22203          } else if (chr == '?') {
22204            url.username = base.username;
22205            url.password = base.password;
22206            url.host = base.host;
22207            url.port = base.port;
22208            url.path = arraySlice(base.path);
22209            url.query = '';
22210            state = QUERY;
22211          } else if (chr == '#') {
22212            url.username = base.username;
22213            url.password = base.password;
22214            url.host = base.host;
22215            url.port = base.port;
22216            url.path = arraySlice(base.path);
22217            url.query = base.query;
22218            url.fragment = '';
22219            state = FRAGMENT;
22220          } else {
22221            url.username = base.username;
22222            url.password = base.password;
22223            url.host = base.host;
22224            url.port = base.port;
22225            url.path = arraySlice(base.path);
22226            url.path.length--;
22227            state = PATH;
22228            continue;
22229          } break;
22230
22231        case RELATIVE_SLASH:
22232          if (url.isSpecial() && (chr == '/' || chr == '\\')) {
22233            state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
22234          } else if (chr == '/') {
22235            state = AUTHORITY;
22236          } else {
22237            url.username = base.username;
22238            url.password = base.password;
22239            url.host = base.host;
22240            url.port = base.port;
22241            state = PATH;
22242            continue;
22243          } break;
22244
22245        case SPECIAL_AUTHORITY_SLASHES:
22246          state = SPECIAL_AUTHORITY_IGNORE_SLASHES;
22247          if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;
22248          pointer++;
22249          break;
22250
22251        case SPECIAL_AUTHORITY_IGNORE_SLASHES:
22252          if (chr != '/' && chr != '\\') {
22253            state = AUTHORITY;
22254            continue;
22255          } break;
22256
22257        case AUTHORITY:
22258          if (chr == '@') {
22259            if (seenAt) buffer = '%40' + buffer;
22260            seenAt = true;
22261            bufferCodePoints = arrayFrom(buffer);
22262            for (var i = 0; i < bufferCodePoints.length; i++) {
22263              var codePoint = bufferCodePoints[i];
22264              if (codePoint == ':' && !seenPasswordToken) {
22265                seenPasswordToken = true;
22266                continue;
22267              }
22268              var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);
22269              if (seenPasswordToken) url.password += encodedCodePoints;
22270              else url.username += encodedCodePoints;
22271            }
22272            buffer = '';
22273          } else if (
22274            chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
22275            (chr == '\\' && url.isSpecial())
22276          ) {
22277            if (seenAt && buffer == '') return INVALID_AUTHORITY;
22278            pointer -= arrayFrom(buffer).length + 1;
22279            buffer = '';
22280            state = HOST;
22281          } else buffer += chr;
22282          break;
22283
22284        case HOST:
22285        case HOSTNAME:
22286          if (stateOverride && url.scheme == 'file') {
22287            state = FILE_HOST;
22288            continue;
22289          } else if (chr == ':' && !seenBracket) {
22290            if (buffer == '') return INVALID_HOST;
22291            failure = url.parseHost(buffer);
22292            if (failure) return failure;
22293            buffer = '';
22294            state = PORT;
22295            if (stateOverride == HOSTNAME) return;
22296          } else if (
22297            chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
22298            (chr == '\\' && url.isSpecial())
22299          ) {
22300            if (url.isSpecial() && buffer == '') return INVALID_HOST;
22301            if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;
22302            failure = url.parseHost(buffer);
22303            if (failure) return failure;
22304            buffer = '';
22305            state = PATH_START;
22306            if (stateOverride) return;
22307            continue;
22308          } else {
22309            if (chr == '[') seenBracket = true;
22310            else if (chr == ']') seenBracket = false;
22311            buffer += chr;
22312          } break;
22313
22314        case PORT:
22315          if (exec(DIGIT, chr)) {
22316            buffer += chr;
22317          } else if (
22318            chr == EOF || chr == '/' || chr == '?' || chr == '#' ||
22319            (chr == '\\' && url.isSpecial()) ||
22320            stateOverride
22321          ) {
22322            if (buffer != '') {
22323              var port = parseInt(buffer, 10);
22324              if (port > 0xFFFF) return INVALID_PORT;
22325              url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;
22326              buffer = '';
22327            }
22328            if (stateOverride) return;
22329            state = PATH_START;
22330            continue;
22331          } else return INVALID_PORT;
22332          break;
22333
22334        case FILE:
22335          url.scheme = 'file';
22336          if (chr == '/' || chr == '\\') state = FILE_SLASH;
22337          else if (base && base.scheme == 'file') {
22338            if (chr == EOF) {
22339              url.host = base.host;
22340              url.path = arraySlice(base.path);
22341              url.query = base.query;
22342            } else if (chr == '?') {
22343              url.host = base.host;
22344              url.path = arraySlice(base.path);
22345              url.query = '';
22346              state = QUERY;
22347            } else if (chr == '#') {
22348              url.host = base.host;
22349              url.path = arraySlice(base.path);
22350              url.query = base.query;
22351              url.fragment = '';
22352              state = FRAGMENT;
22353            } else {
22354              if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {
22355                url.host = base.host;
22356                url.path = arraySlice(base.path);
22357                url.shortenPath();
22358              }
22359              state = PATH;
22360              continue;
22361            }
22362          } else {
22363            state = PATH;
22364            continue;
22365          } break;
22366
22367        case FILE_SLASH:
22368          if (chr == '/' || chr == '\\') {
22369            state = FILE_HOST;
22370            break;
22371          }
22372          if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {
22373            if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);
22374            else url.host = base.host;
22375          }
22376          state = PATH;
22377          continue;
22378
22379        case FILE_HOST:
22380          if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') {
22381            if (!stateOverride && isWindowsDriveLetter(buffer)) {
22382              state = PATH;
22383            } else if (buffer == '') {
22384              url.host = '';
22385              if (stateOverride) return;
22386              state = PATH_START;
22387            } else {
22388              failure = url.parseHost(buffer);
22389              if (failure) return failure;
22390              if (url.host == 'localhost') url.host = '';
22391              if (stateOverride) return;
22392              buffer = '';
22393              state = PATH_START;
22394            } continue;
22395          } else buffer += chr;
22396          break;
22397
22398        case PATH_START:
22399          if (url.isSpecial()) {
22400            state = PATH;
22401            if (chr != '/' && chr != '\\') continue;
22402          } else if (!stateOverride && chr == '?') {
22403            url.query = '';
22404            state = QUERY;
22405          } else if (!stateOverride && chr == '#') {
22406            url.fragment = '';
22407            state = FRAGMENT;
22408          } else if (chr != EOF) {
22409            state = PATH;
22410            if (chr != '/') continue;
22411          } break;
22412
22413        case PATH:
22414          if (
22415            chr == EOF || chr == '/' ||
22416            (chr == '\\' && url.isSpecial()) ||
22417            (!stateOverride && (chr == '?' || chr == '#'))
22418          ) {
22419            if (isDoubleDot(buffer)) {
22420              url.shortenPath();
22421              if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
22422                push(url.path, '');
22423              }
22424            } else if (isSingleDot(buffer)) {
22425              if (chr != '/' && !(chr == '\\' && url.isSpecial())) {
22426                push(url.path, '');
22427              }
22428            } else {
22429              if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {
22430                if (url.host) url.host = '';
22431                buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter
22432              }
22433              push(url.path, buffer);
22434            }
22435            buffer = '';
22436            if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {
22437              while (url.path.length > 1 && url.path[0] === '') {
22438                shift(url.path);
22439              }
22440            }
22441            if (chr == '?') {
22442              url.query = '';
22443              state = QUERY;
22444            } else if (chr == '#') {
22445              url.fragment = '';
22446              state = FRAGMENT;
22447            }
22448          } else {
22449            buffer += percentEncode(chr, pathPercentEncodeSet);
22450          } break;
22451
22452        case CANNOT_BE_A_BASE_URL_PATH:
22453          if (chr == '?') {
22454            url.query = '';
22455            state = QUERY;
22456          } else if (chr == '#') {
22457            url.fragment = '';
22458            state = FRAGMENT;
22459          } else if (chr != EOF) {
22460            url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);
22461          } break;
22462
22463        case QUERY:
22464          if (!stateOverride && chr == '#') {
22465            url.fragment = '';
22466            state = FRAGMENT;
22467          } else if (chr != EOF) {
22468            if (chr == "'" && url.isSpecial()) url.query += '%27';
22469            else if (chr == '#') url.query += '%23';
22470            else url.query += percentEncode(chr, C0ControlPercentEncodeSet);
22471          } break;
22472
22473        case FRAGMENT:
22474          if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);
22475          break;
22476      }
22477
22478      pointer++;
22479    }
22480  },
22481  // https://url.spec.whatwg.org/#host-parsing
22482  parseHost: function (input) {
22483    var result, codePoints, index;
22484    if (charAt(input, 0) == '[') {
22485      if (charAt(input, input.length - 1) != ']') return INVALID_HOST;
22486      result = parseIPv6(stringSlice(input, 1, -1));
22487      if (!result) return INVALID_HOST;
22488      this.host = result;
22489    // opaque host
22490    } else if (!this.isSpecial()) {
22491      if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;
22492      result = '';
22493      codePoints = arrayFrom(input);
22494      for (index = 0; index < codePoints.length; index++) {
22495        result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);
22496      }
22497      this.host = result;
22498    } else {
22499      input = toASCII(input);
22500      if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;
22501      result = parseIPv4(input);
22502      if (result === null) return INVALID_HOST;
22503      this.host = result;
22504    }
22505  },
22506  // https://url.spec.whatwg.org/#cannot-have-a-username-password-port
22507  cannotHaveUsernamePasswordPort: function () {
22508    return !this.host || this.cannotBeABaseURL || this.scheme == 'file';
22509  },
22510  // https://url.spec.whatwg.org/#include-credentials
22511  includesCredentials: function () {
22512    return this.username != '' || this.password != '';
22513  },
22514  // https://url.spec.whatwg.org/#is-special
22515  isSpecial: function () {
22516    return hasOwn(specialSchemes, this.scheme);
22517  },
22518  // https://url.spec.whatwg.org/#shorten-a-urls-path
22519  shortenPath: function () {
22520    var path = this.path;
22521    var pathSize = path.length;
22522    if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {
22523      path.length--;
22524    }
22525  },
22526  // https://url.spec.whatwg.org/#concept-url-serializer
22527  serialize: function () {
22528    var url = this;
22529    var scheme = url.scheme;
22530    var username = url.username;
22531    var password = url.password;
22532    var host = url.host;
22533    var port = url.port;
22534    var path = url.path;
22535    var query = url.query;
22536    var fragment = url.fragment;
22537    var output = scheme + ':';
22538    if (host !== null) {
22539      output += '//';
22540      if (url.includesCredentials()) {
22541        output += username + (password ? ':' + password : '') + '@';
22542      }
22543      output += serializeHost(host);
22544      if (port !== null) output += ':' + port;
22545    } else if (scheme == 'file') output += '//';
22546    output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';
22547    if (query !== null) output += '?' + query;
22548    if (fragment !== null) output += '#' + fragment;
22549    return output;
22550  },
22551  // https://url.spec.whatwg.org/#dom-url-href
22552  setHref: function (href) {
22553    var failure = this.parse(href);
22554    if (failure) throw TypeError(failure);
22555    this.searchParams.update();
22556  },
22557  // https://url.spec.whatwg.org/#dom-url-origin
22558  getOrigin: function () {
22559    var scheme = this.scheme;
22560    var port = this.port;
22561    if (scheme == 'blob') try {
22562      return new URLConstructor(scheme.path[0]).origin;
22563    } catch (error) {
22564      return 'null';
22565    }
22566    if (scheme == 'file' || !this.isSpecial()) return 'null';
22567    return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');
22568  },
22569  // https://url.spec.whatwg.org/#dom-url-protocol
22570  getProtocol: function () {
22571    return this.scheme + ':';
22572  },
22573  setProtocol: function (protocol) {
22574    this.parse($toString(protocol) + ':', SCHEME_START);
22575  },
22576  // https://url.spec.whatwg.org/#dom-url-username
22577  getUsername: function () {
22578    return this.username;
22579  },
22580  setUsername: function (username) {
22581    var codePoints = arrayFrom($toString(username));
22582    if (this.cannotHaveUsernamePasswordPort()) return;
22583    this.username = '';
22584    for (var i = 0; i < codePoints.length; i++) {
22585      this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);
22586    }
22587  },
22588  // https://url.spec.whatwg.org/#dom-url-password
22589  getPassword: function () {
22590    return this.password;
22591  },
22592  setPassword: function (password) {
22593    var codePoints = arrayFrom($toString(password));
22594    if (this.cannotHaveUsernamePasswordPort()) return;
22595    this.password = '';
22596    for (var i = 0; i < codePoints.length; i++) {
22597      this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);
22598    }
22599  },
22600  // https://url.spec.whatwg.org/#dom-url-host
22601  getHost: function () {
22602    var host = this.host;
22603    var port = this.port;
22604    return host === null ? ''
22605      : port === null ? serializeHost(host)
22606      : serializeHost(host) + ':' + port;
22607  },
22608  setHost: function (host) {
22609    if (this.cannotBeABaseURL) return;
22610    this.parse(host, HOST);
22611  },
22612  // https://url.spec.whatwg.org/#dom-url-hostname
22613  getHostname: function () {
22614    var host = this.host;
22615    return host === null ? '' : serializeHost(host);
22616  },
22617  setHostname: function (hostname) {
22618    if (this.cannotBeABaseURL) return;
22619    this.parse(hostname, HOSTNAME);
22620  },
22621  // https://url.spec.whatwg.org/#dom-url-port
22622  getPort: function () {
22623    var port = this.port;
22624    return port === null ? '' : $toString(port);
22625  },
22626  setPort: function (port) {
22627    if (this.cannotHaveUsernamePasswordPort()) return;
22628    port = $toString(port);
22629    if (port == '') this.port = null;
22630    else this.parse(port, PORT);
22631  },
22632  // https://url.spec.whatwg.org/#dom-url-pathname
22633  getPathname: function () {
22634    var path = this.path;
22635    return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';
22636  },
22637  setPathname: function (pathname) {
22638    if (this.cannotBeABaseURL) return;
22639    this.path = [];
22640    this.parse(pathname, PATH_START);
22641  },
22642  // https://url.spec.whatwg.org/#dom-url-search
22643  getSearch: function () {
22644    var query = this.query;
22645    return query ? '?' + query : '';
22646  },
22647  setSearch: function (search) {
22648    search = $toString(search);
22649    if (search == '') {
22650      this.query = null;
22651    } else {
22652      if ('?' == charAt(search, 0)) search = stringSlice(search, 1);
22653      this.query = '';
22654      this.parse(search, QUERY);
22655    }
22656    this.searchParams.update();
22657  },
22658  // https://url.spec.whatwg.org/#dom-url-searchparams
22659  getSearchParams: function () {
22660    return this.searchParams.facade;
22661  },
22662  // https://url.spec.whatwg.org/#dom-url-hash
22663  getHash: function () {
22664    var fragment = this.fragment;
22665    return fragment ? '#' + fragment : '';
22666  },
22667  setHash: function (hash) {
22668    hash = $toString(hash);
22669    if (hash == '') {
22670      this.fragment = null;
22671      return;
22672    }
22673    if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);
22674    this.fragment = '';
22675    this.parse(hash, FRAGMENT);
22676  },
22677  update: function () {
22678    this.query = this.searchParams.serialize() || null;
22679  }
22680};
22681
22682// `URL` constructor
22683// https://url.spec.whatwg.org/#url-class
22684var URLConstructor = function URL(url /* , base */) {
22685  var that = anInstance(this, URLPrototype);
22686  var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;
22687  var state = setInternalState(that, new URLState(url, false, base));
22688  if (!DESCRIPTORS) {
22689    that.href = state.serialize();
22690    that.origin = state.getOrigin();
22691    that.protocol = state.getProtocol();
22692    that.username = state.getUsername();
22693    that.password = state.getPassword();
22694    that.host = state.getHost();
22695    that.hostname = state.getHostname();
22696    that.port = state.getPort();
22697    that.pathname = state.getPathname();
22698    that.search = state.getSearch();
22699    that.searchParams = state.getSearchParams();
22700    that.hash = state.getHash();
22701  }
22702};
22703
22704var URLPrototype = URLConstructor.prototype;
22705
22706var accessorDescriptor = function (getter, setter) {
22707  return {
22708    get: function () {
22709      return getInternalURLState(this)[getter]();
22710    },
22711    set: setter && function (value) {
22712      return getInternalURLState(this)[setter](value);
22713    },
22714    configurable: true,
22715    enumerable: true
22716  };
22717};
22718
22719if (DESCRIPTORS) {
22720  // `URL.prototype.href` accessors pair
22721  // https://url.spec.whatwg.org/#dom-url-href
22722  defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));
22723  // `URL.prototype.origin` getter
22724  // https://url.spec.whatwg.org/#dom-url-origin
22725  defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));
22726  // `URL.prototype.protocol` accessors pair
22727  // https://url.spec.whatwg.org/#dom-url-protocol
22728  defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));
22729  // `URL.prototype.username` accessors pair
22730  // https://url.spec.whatwg.org/#dom-url-username
22731  defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));
22732  // `URL.prototype.password` accessors pair
22733  // https://url.spec.whatwg.org/#dom-url-password
22734  defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));
22735  // `URL.prototype.host` accessors pair
22736  // https://url.spec.whatwg.org/#dom-url-host
22737  defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));
22738  // `URL.prototype.hostname` accessors pair
22739  // https://url.spec.whatwg.org/#dom-url-hostname
22740  defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));
22741  // `URL.prototype.port` accessors pair
22742  // https://url.spec.whatwg.org/#dom-url-port
22743  defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));
22744  // `URL.prototype.pathname` accessors pair
22745  // https://url.spec.whatwg.org/#dom-url-pathname
22746  defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));
22747  // `URL.prototype.search` accessors pair
22748  // https://url.spec.whatwg.org/#dom-url-search
22749  defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));
22750  // `URL.prototype.searchParams` getter
22751  // https://url.spec.whatwg.org/#dom-url-searchparams
22752  defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));
22753  // `URL.prototype.hash` accessors pair
22754  // https://url.spec.whatwg.org/#dom-url-hash
22755  defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));
22756}
22757
22758// `URL.prototype.toJSON` method
22759// https://url.spec.whatwg.org/#dom-url-tojson
22760defineBuiltIn(URLPrototype, 'toJSON', function toJSON() {
22761  return getInternalURLState(this).serialize();
22762}, { enumerable: true });
22763
22764// `URL.prototype.toString` method
22765// https://url.spec.whatwg.org/#URL-stringification-behavior
22766defineBuiltIn(URLPrototype, 'toString', function toString() {
22767  return getInternalURLState(this).serialize();
22768}, { enumerable: true });
22769
22770if (NativeURL) {
22771  var nativeCreateObjectURL = NativeURL.createObjectURL;
22772  var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
22773  // `URL.createObjectURL` method
22774  // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
22775  if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));
22776  // `URL.revokeObjectURL` method
22777  // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
22778  if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));
22779}
22780
22781setToStringTag(URLConstructor, 'URL');
22782
22783$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {
22784  URL: URLConstructor
22785});
22786
22787
22788/***/ }),
22789
22790/***/ 
2279060285:
22791/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
22792
22793// TODO: Remove this module from `core-js@4` since it's replaced to module below
22794__webpack_require__(68789);
22795
22796
22797/***/ }),
22798
22799/***/ 83753:
22800/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
22801
22802"use strict";
22803
22804var $ = __webpack_require__(82109);
22805var call = __webpack_require__(46916);
22806
22807// `URL.prototype.toJSON` method
22808// https://url.spec.whatwg.org/#dom-url-tojson
22809$({ target: 'URL', proto: true, enumerable: true }, {
22810  toJSON: function toJSON() {
22811    return call(URL.prototype.toString, this);
22812  }
22813});
22814
22815
22816/***/ }),
22817
22818/***/ 28594:
22819/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
22820
22821__webpack_require__(82526);
22822__webpack_require__(41817);
22823__webpack_require__(72443);
22824__webpack_require__(92401);
22825__webpack_require__(8722);
22826__webpack_require__(32165);
22827__webpack_require__(69007);
22828__webpack_require__(16066);
22829__webpack_require__(83510);
22830__webpack_require__(41840);
22831__webpack_require__(6982);
22832__webpack_require__(32159);
22833__webpack_require__(96649);
22834__webpack_require__(39341);
22835__webpack_require__(60543);
22836__webpack_require__(21703);
22837__webpack_require__(96647);
22838__webpack_require__(9170);
22839__webpack_require__(32120);
22840__webpack_require__(52262);
22841__webpack_require__(92222);
22842__webpack_require__(50545);
22843__webpack_require__(26541);
22844__webpack_require__(43290);
22845__webpack_require__(57327);
22846__webpack_require__(69826);
22847__webpack_require__(34553);
22848__webpack_require__(67635);
22849__webpack_require__(77287);
22850__webpack_require__(84944);
22851__webpack_require__(86535);
22852__webpack_require__(89554);
22853__webpack_require__(91038);
22854__webpack_require__(26699);
22855__webpack_require__(82772);
22856__webpack_require__(79753);
22857__webpack_require__(66992);
22858__webpack_require__(69600);
22859__webpack_require__(94986);
22860__webpack_require__(21249);
22861__webpack_require__(26572);
22862__webpack_require__(57658);
22863__webpack_require__(85827);
22864__webpack_require__(96644);
22865__webpack_require__(65069);
22866__webpack_require__(47042);
22867__webpack_require__(5212);
22868__webpack_require__(2707);
22869__webpack_require__(38706);
22870__webpack_require__(40561);
22871__webpack_require__(33792);
22872__webpack_require__(99244);
22873__webpack_require__(30541);
22874__webpack_require__(18264);
22875__webpack_require__(76938);
22876__webpack_require__(39575);
22877__webpack_require__(16716);
22878__webpack_require__(43016);
22879__webpack_require__(3843);
22880__webpack_require__(81801);
22881__webpack_require__(9550);
22882__webpack_require__(28733);
22883__webpack_require__(5735);
22884__webpack_require__(96078);
22885__webpack_require__(83710);
22886__webpack_require__(62130);
22887__webpack_require__(24812);
22888__webpack_require__(4855);
22889__webpack_require__(68309);
22890__webpack_require__(35837);
22891__webpack_require__(38862);
22892__webpack_require__(73706);
22893__webpack_require__(51532);
22894__webpack_require__(99752);
22895__webpack_require__(82376);
22896__webpack_require__(73181);
22897__webpack_require__(23484);
22898__webpack_require__(2388);
22899__webpack_require__(88621);
22900__webpack_require__(60403);
22901__webpack_require__(84755);
22902__webpack_require__(25438);
22903__webpack_require__(90332);
22904__webpack_require__(40658);
22905__webpack_require__(40197);
22906__webpack_require__(44914);
22907__webpack_require__(52420);
22908__webpack_require__(60160);
22909__webpack_require__(60970);
22910__webpack_require__(10408);
22911__webpack_require__(73689);
22912__webpack_require__(9653);
22913__webpack_require__(93299);
22914__webpack_require__(35192);
22915__webpack_require__(33161);
22916__webpack_require__(44048);
22917__webpack_require__(78285);
22918__webpack_require__(44363);
22919__webpack_require__(55994);
22920__webpack_require__(61874);
22921__webpack_require__(9494);
22922__webpack_require__(31354);
22923__webpack_require__(56977);
22924__webpack_require__(55147);
22925__webpack_require__(19601);
22926__webpack_require__(78011);
22927__webpack_require__(59595);
22928__webpack_require__(33321);
22929__webpack_require__(69070);
22930__webpack_require__(35500);
22931__webpack_require__(69720);
22932__webpack_require__(43371);
22933__webpack_require__(38559);
22934__webpack_require__(38880);
22935__webpack_require__(49337);
22936__webpack_require__(36210);
22937__webpack_require__(30489);
22938__webpack_require__(46314);
22939__webpack_require__(43304);
22940__webpack_require__(41825);
22941__webpack_require__(98410);
22942__webpack_require__(72200);
22943__webpack_require__(47941);
22944__webpack_require__(94869);
22945__webpack_require__(33952);
22946__webpack_require__(57227);
22947__webpack_require__(67987);
22948__webpack_require__(60514);
22949__webpack_require__(68304);
22950__webpack_require__(41539);
22951__webpack_require__(26833);
22952__webpack_require__(54678);
22953__webpack_require__(91058);
22954__webpack_require__(88674);
22955__webpack_require__(17922);
22956__webpack_require__(34668);
22957__webpack_require__(17727);
22958__webpack_require__(36535);
22959__webpack_require__(12419);
22960__webpack_require__(69596);
22961__webpack_require__(52586);
22962__webpack_require__(74819);
22963__webpack_require__(95683);
22964__webpack_require__(39361);
22965__webpack_require__(51037);
22966__webpack_require__(5898);
22967__webpack_require__(67556);
22968__webpack_require__(14361);
22969__webpack_require__(83593);
22970__webpack_require__(39532);
22971__webpack_require__(81299);
22972__webpack_require__(24603);
22973__webpack_require__(28450);
22974__webpack_require__(74916);
22975__webpack_require__(92087);
22976__webpack_require__(88386);
22977__webpack_require__(77601);
22978__webpack_require__(39714);
22979__webpack_require__(70189);
22980__webpack_require__(24506);
22981__webpack_require__(79841);
22982__webpack_require__(27852);
22983__webpack_require__(94953);
22984__webpack_require__(32023);
22985__webpack_require__(78783);
22986__webpack_require__(4723);
22987__webpack_require__(76373);
22988__webpack_require__(66528);
22989__webpack_require__(83112);
22990__webpack_require__(38992);
22991__webpack_require__(82481);
22992__webpack_require__(15306);
22993__webpack_require__(68757);
22994__webpack_require__(64765);
22995__webpack_require__(23123);
22996__webpack_require__(23157);
22997__webpack_require__(83650);
22998__webpack_require__(73210);
22999__webpack_require__(48702);
23000__webpack_require__(55674);
23001__webpack_require__(15218);
23002__webpack_require__(74475);
23003__webpack_require__(57929);
23004__webpack_require__(50915);
23005__webpack_require__(29253);
23006__webpack_require__(42125);
23007__webpack_require__(78830);
23008__webpack_require__(58734);
23009__webpack_require__(29254);
23010__webpack_require__(37268);
23011__webpack_require__(7397);
23012__webpack_require__(60086);
23013__webpack_require__(80623);
23014__webpack_require__(44197);
23015__webpack_require__(76495);
23016__webpack_require__(87145);
23017__webpack_require__(35109);
23018__webpack_require__(65125);
23019__webpack_require__(82472);
23020__webpack_require__(49743);
23021__webpack_require__(8255);
23022__webpack_require__(29135);
23023__webpack_require__(48675);
23024__webpack_require__(92990);
23025__webpack_require__(18927);
23026__webpack_require__(33105);
23027__webpack_require__(35035);
23028__webpack_require__(74345);
23029__webpack_require__(7174);
23030__webpack_require__(63408);
23031__webpack_require__(14590);
23032__webpack_require__(32846);
23033__webpack_require__(98145);
23034__webpack_require__(44731);
23035__webpack_require__(77209);
23036__webpack_require__(96319);
23037__webpack_require__(58867);
23038__webpack_require__(37789);
23039__webpack_require__(33739);
23040__webpack_require__(95206);
23041__webpack_require__(29368);
23042__webpack_require__(14483);
23043__webpack_require__(12056);
23044__webpack_require__(3462);
23045__webpack_require__(30678);
23046__webpack_require__(27462);
23047__webpack_require__(33824);
23048__webpack_require__(55021);
23049__webpack_require__(12974);
23050__webpack_require__(15016);
23051__webpack_require__(78221);
23052__webpack_require__(4129);
23053__webpack_require__(38478);
23054__webpack_require__(75505);
23055__webpack_require__(27479);
23056__webpack_require__(54747);
23057__webpack_require__(33948);
23058__webpack_require__(87714);
23059__webpack_require__(82801);
23060__webpack_require__(1174);
23061__webpack_require__(84633);
23062__webpack_require__(85844);
23063__webpack_require__(61295);
23064__webpack_require__(32564);
23065__webpack_require__(60285);
23066__webpack_require__(83753);
23067__webpack_require__(41637);
23068
23069/* unused reexport */ __webpack_require__(40857);
23070
23071
23072/***/ }),
23073
23074/***/ 2239:
23075/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
23076
23077"use strict";
23078
23079// EXPORTS
23080__webpack_require__.d(__webpack_exports__, {
23081  "Z": () => (/* binding */ src)
23082});
23083
23084// NAMESPACE OBJECT: ./node_modules/domtastic/src/selector/index.js
23085var selector_namespaceObject = {};
23086__webpack_require__.r(selector_namespaceObject);
23087__webpack_require__.d(selector_namespaceObject, {
23088  "$": () => ($),
23089  "DOMtastic": () => (DOMtastic),
23090  "find": () => (find),
23091  "matches": () => (matches)
23092});
23093
23094// NAMESPACE OBJECT: ./node_modules/domtastic/src/array.js
23095var array_namespaceObject = {};
23096__webpack_require__.r(array_namespaceObject);
23097__webpack_require__.d(array_namespaceObject, {
23098  "each": () => (array_each),
23099  "every": () => (every),
23100  "filter": () => (filter),
23101  "forEach": () => (forEach),
23102  "indexOf": () => (indexOf),
23103  "map": () => (map),
23104  "pop": () => (pop),
23105  "push": () => (push),
23106  "reduce": () => (reduce),
23107  "reduceRight": () => (reduceRight),
23108  "reverse": () => (reverse),
23109  "shift": () => (shift),
23110  "some": () => (some),
23111  "unshift": () => (unshift)
23112});
23113
23114// NAMESPACE OBJECT: ./node_modules/domtastic/src/css.js
23115var css_namespaceObject = {};
23116__webpack_require__.r(css_namespaceObject);
23117__webpack_require__.d(css_namespaceObject, {
23118  "css": () => (css)
23119});
23120
23121// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/index.js
23122var dom_namespaceObject = {};
23123__webpack_require__.r(dom_namespaceObject);
23124__webpack_require__.d(dom_namespaceObject, {
23125  "_clone": () => (_clone),
23126  "_each": () => (_each),
23127  "after": () => (after),
23128  "append": () => (append),
23129  "before": () => (before),
23130  "clone": () => (clone),
23131  "prepend": () => (prepend)
23132});
23133
23134// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/attr.js
23135var attr_namespaceObject = {};
23136__webpack_require__.r(attr_namespaceObject);
23137__webpack_require__.d(attr_namespaceObject, {
23138  "attr": () => (attr),
23139  "removeAttr": () => (removeAttr)
23140});
23141
23142// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/class.js
23143var class_namespaceObject = {};
23144__webpack_require__.r(class_namespaceObject);
23145__webpack_require__.d(class_namespaceObject, {
23146  "addClass": () => (addClass),
23147  "hasClass": () => (hasClass),
23148  "removeClass": () => (removeClass),
23149  "toggleClass": () => (toggleClass)
23150});
23151
23152// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/contains.js
23153var contains_namespaceObject = {};
23154__webpack_require__.r(contains_namespaceObject);
23155__webpack_require__.d(contains_namespaceObject, {
23156  "contains": () => (contains)
23157});
23158
23159// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/data.js
23160var data_namespaceObject = {};
23161__webpack_require__.r(data_namespaceObject);
23162__webpack_require__.d(data_namespaceObject, {
23163  "data": () => (data),
23164  "prop": () => (prop)
23165});
23166
23167// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/extra.js
23168var extra_namespaceObject = {};
23169__webpack_require__.r(extra_namespaceObject);
23170__webpack_require__.d(extra_namespaceObject, {
23171  "appendTo": () => (appendTo),
23172  "empty": () => (empty),
23173  "remove": () => (remove),
23174  "replaceWith": () => (replaceWith),
23175  "text": () => (extra_text),
23176  "val": () => (val)
23177});
23178
23179// NAMESPACE OBJECT: ./node_modules/domtastic/src/dom/html.js
23180var html_namespaceObject = {};
23181__webpack_require__.r(html_namespaceObject);
23182__webpack_require__.d(html_namespaceObject, {
23183  "html": () => (html)
23184});
23185
23186// NAMESPACE OBJECT: ./node_modules/domtastic/src/selector/closest.js
23187var closest_namespaceObject = {};
23188__webpack_require__.r(closest_namespaceObject);
23189__webpack_require__.d(closest_namespaceObject, {
23190  "closest": () => (closest)
23191});
23192
23193// NAMESPACE OBJECT: ./node_modules/domtastic/src/event/index.js
23194var event_namespaceObject = {};
23195__webpack_require__.r(event_namespaceObject);
23196__webpack_require__.d(event_namespaceObject, {
23197  "bind": () => (bind),
23198  "clearHandlers": () => (clearHandlers),
23199  "delegateHandler": () => (delegateHandler),
23200  "getHandlers": () => (getHandlers),
23201  "off": () => (off),
23202  "on": () => (on),
23203  "one": () => (one),
23204  "proxyHandler": () => (proxyHandler),
23205  "unbind": () => (unbind)
23206});
23207
23208// NAMESPACE OBJECT: ./node_modules/domtastic/src/event/trigger.js
23209var trigger_namespaceObject = {};
23210__webpack_require__.r(trigger_namespaceObject);
23211__webpack_require__.d(trigger_namespaceObject, {
23212  "trigger": () => (trigger),
23213  "triggerHandler": () => (triggerHandler)
23214});
23215
23216// NAMESPACE OBJECT: ./node_modules/domtastic/src/event/ready.js
23217var ready_namespaceObject = {};
23218__webpack_require__.r(ready_namespaceObject);
23219__webpack_require__.d(ready_namespaceObject, {
23220  "ready": () => (ready)
23221});
23222
23223// NAMESPACE OBJECT: ./node_modules/domtastic/src/noconflict.js
23224var noconflict_namespaceObject = {};
23225__webpack_require__.r(noconflict_namespaceObject);
23226__webpack_require__.d(noconflict_namespaceObject, {
23227  "noConflict": () => (noConflict)
23228});
23229
23230// NAMESPACE OBJECT: ./node_modules/domtastic/src/selector/extra.js
23231var selector_extra_namespaceObject = {};
23232__webpack_require__.r(selector_extra_namespaceObject);
23233__webpack_require__.d(selector_extra_namespaceObject, {
23234  "children": () => (children),
23235  "concat": () => (concat),
23236  "contents": () => (contents),
23237  "eq": () => (eq),
23238  "first": () => (first),
23239  "get": () => (get),
23240  "parent": () => (extra_parent),
23241  "siblings": () => (siblings),
23242  "slice": () => (slice)
23243});
23244
23245// NAMESPACE OBJECT: ./node_modules/domtastic/src/type.js
23246var type_namespaceObject = {};
23247__webpack_require__.r(type_namespaceObject);
23248__webpack_require__.d(type_namespaceObject, {
23249  "isArray": () => (isArray),
23250  "isFunction": () => (isFunction)
23251});
23252
23253;// CONCATENATED MODULE: ./node_modules/domtastic/src/util.js
23254/*
23255 * @module Util
23256 */
23257
23258/*
23259 * Reference to the window object
23260 * @private
23261 */
23262
23263const win = typeof window !== 'undefined' ? window : {};
23264
23265/**
23266 * Convert `NodeList` to `Array`.
23267 *
23268 * @param {NodeList|Array} collection
23269 * @return {Array}
23270 * @private
23271 */
23272
23273const toArray = collection => {
23274  const length = collection.length;
23275  const result = new Array(length);
23276  for(let i = 0; i < length; i++) {
23277    result[i] = collection[i];
23278  }
23279  return result;
23280};
23281
23282/**
23283 * Faster alternative to [].forEach method
23284 *
23285 * @param {Node|NodeList|Array} collection
23286 * @param {Function} callback
23287 * @return {Node|NodeList|Array}
23288 * @private
23289 */
23290
23291const each = (collection, callback, thisArg) => {
23292  const length = collection.length;
23293  if(length !== undefined && collection.nodeType === undefined) {
23294    for(let i = 0; i < length; i++) {
23295      callback.call(thisArg, collection[i], i, collection);
23296    }
23297  } else {
23298    callback.call(thisArg, collection, 0, collection);
23299  }
23300  return collection;
23301};
23302
23303/**
23304 * Assign enumerable properties from source object(s) to target object
23305 *
23306 * @method extend
23307 * @param {Object} target Object to extend
23308 * @param {Object} [source] Object to extend from
23309 * @return {Object} Extended object
23310 * @example
23311 *     $.extend({a: 1}, {b: 2}); // {a: 1, b: 2}
23312 * @example
23313 *     $.extend({a: 1}, {b: 2}, {a: 3}); // {a: 3, b: 2}
23314 */
23315
23316const extend = (target, ...sources) => {
23317  sources.forEach(src => {
23318    for(let prop in src) {
23319      target[prop] = src[prop];
23320    }
23321  });
23322  return target;
23323};
23324
23325/**
23326 * Return the collection without duplicates
23327 *
23328 * @param collection Collection to remove duplicates from
23329 * @return {Node|NodeList|Array}
23330 * @private
23331 */
23332
23333const uniq = collection => collection.filter((item, index) => collection.indexOf(item) === index);
23334
23335;// CONCATENATED MODULE: ./node_modules/domtastic/src/selector/index.js
23336/**
23337 * @module Selector
23338 */
23339
23340
23341
23342let isPrototypeSet = false;
23343
23344const reFragment = /^\s*<(\w+|!)[^>]*>/;
23345const reSingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/;
23346const reSimpleSelector = /^[.#]?[\w-]*$/;
23347
23348/*
23349 * Versatile wrapper for `querySelectorAll`.
23350 *
23351 * @param {String|Node|NodeList|Array} selector Query selector, `Node`, `NodeList`, array of elements, or HTML fragment string.
23352 * @param {String|Node|NodeList} context=document The context for the selector to query elements.
23353 * @return {Object} The wrapped collection
23354 * @chainable
23355 * @example
23356 *     var $items = $(.items');
23357 * @example
23358 *     var $element = $(domElement);
23359 * @example
23360 *     var $list = $(nodeList, document.body);
23361 * @example
23362 *     var $element = $('<p>evergreen</p>');
23363 */
23364
23365const domtastic = function domtastic(selector, context = document) {
23366
23367  let collection;
23368
23369  if(!selector) {
23370
23371    collection = document.querySelectorAll(null);
23372
23373  } else if(selector instanceof DOMtastic) {
23374
23375    return selector;
23376
23377  } else if(typeof selector !== 'string') {
23378
23379    collection = selector.nodeType || selector === window ? [selector] : selector;
23380
23381  } else if(reFragment.test(selector)) {
23382
23383    collection = createFragment(selector);
23384
23385  } else {
23386
23387    context = typeof context === 'string' ? document.querySelector(context) : context.length ? context[0] : context;
23388
23389    collection = querySelector(selector, context);
23390
23391  }
23392
23393  return wrap(collection);
23394
23395};
23396
23397const $ = domtastic;
23398
23399/*
23400 * Find descendants matching the provided `selector` for each element in the collection.
23401 *
23402 * @param {String|Node|NodeList|Array} selector Query selector, `Node`, `NodeList`, array of elements, or HTML fragment string.
23403 * @return {Object} The wrapped collection
23404 * @example
23405 *     $('.selector').find('.deep').$('.deepest');
23406 */
23407
23408const find = function(selector) {
23409  const nodes = [];
23410  each(this, node => each(querySelector(selector, node), child => {
23411    if(nodes.indexOf(child) === -1) {
23412      nodes.push(child);
23413    }
23414  }));
23415  return $(nodes);
23416};
23417
23418/*
23419 * Returns `true` if the element would be selected by the specified selector string; otherwise, returns `false`.
23420 *
23421 * @param {Node} element Element to test
23422 * @param {String} selector Selector to match against element
23423 * @return {Boolean}
23424 *
23425 * @example
23426 *     $.matches(element, '.match');
23427 */
23428
23429const matches = (() => {
23430  const context = typeof Element !== 'undefined' ? Element.prototype : win;
23431  const _matches = context.matches || context.matchesSelector || context.mozMatchesSelector || context.msMatchesSelector || context.oMatchesSelector || context.webkitMatchesSelector;
23432  return (element, selector) => _matches.call(element, selector);
23433})();
23434
23435/*
23436 * Use the faster `getElementById`, `getElementsByClassName` or `getElementsByTagName` over `querySelectorAll` if possible.
23437 *
23438 * @private
23439 * @param {String} selector Query selector.
23440 * @param {Node} context The context for the selector to query elements.
23441 * @return {Object} NodeList, HTMLCollection, or Array of matching elements (depending on method used).
23442 */
23443
23444const querySelector = (selector, context) => {
23445
23446  const isSimpleSelector = reSimpleSelector.test(selector);
23447
23448  if(isSimpleSelector) {
23449    if(selector[0] === '#') {
23450      const element = (context.getElementById ? context : document).getElementById(selector.slice(1));
23451      return element ? [element] : [];
23452    }
23453    if(selector[0] === '.') {
23454      return context.getElementsByClassName(selector.slice(1));
23455    }
23456    return context.getElementsByTagName(selector);
23457  }
23458
23459  return context.querySelectorAll(selector);
23460
23461};
23462
23463/*
23464 * Create DOM fragment from an HTML string
23465 *
23466 * @private
23467 * @param {String} html String representing HTML.
23468 * @return {NodeList}
23469 */
23470
23471const createFragment = html => {
23472
23473  if(reSingleTag.test(html)) {
23474    return [document.createElement(RegExp.$1)];
23475  }
23476
23477  const elements = [];
23478  const container = document.createElement('div');
23479  const children = container.childNodes;
23480
23481  container.innerHTML = html;
23482
23483  for(let i = 0, l = children.length; i < l; i++) {
23484    elements.push(children[i]);
23485  }
23486
23487  return elements;
23488};
23489
23490/*
23491 * Calling `$(selector)` returns a wrapped collection of elements.
23492 *
23493 * @private
23494 * @param {NodeList|Array} collection Element(s) to wrap.
23495 * @return Object) The wrapped collection
23496 */
23497
23498const wrap = collection => {
23499
23500  if(!isPrototypeSet) {
23501    DOMtastic.prototype = $.fn;
23502    DOMtastic.prototype.constructor = DOMtastic;
23503    isPrototypeSet = true;
23504  }
23505
23506  return new DOMtastic(collection);
23507};
23508
23509/*
23510 * Constructor for the Object.prototype strategy
23511 *
23512 * @constructor
23513 * @private
23514 * @param {NodeList|Array} collection Element(s) to wrap.
23515 */
23516
23517const DOMtastic = function DOMtastic(collection) {
23518  let i = 0;
23519  const length = collection.length;
23520  for(; i < length;) {
23521    this[i] = collection[i++];
23522  }
23523  this.length = length;
23524};
23525
23526;// CONCATENATED MODULE: ./node_modules/domtastic/src/array.js
23527/**
23528 * @module Array
23529 */
23530
23531
23532
23533
23534const ArrayProto = Array.prototype;
23535
23536/**
23537 * Checks if the given callback returns a true(-ish) value for each element in the collection.
23538 *
23539 * @param {Function} callback Function to execute for each element, invoked with `element` as argument.
23540 * @param {Object} [thisArg] Value to use as `this` when executing `callback`.
23541 * @return {Boolean} Whether each element passed the callback check.
23542 * @example
23543 *     // Test whether every element in the collection has the "active" attribute
23544 *     $('.items').every(function(element) {
23545 *         return element.hasAttribute('active')
23546 *     });
23547 */
23548
23549const every = ArrayProto.every;
23550
23551/**
23552 * Filter the collection by selector or function, and return a new collection with the result.
23553 *
23554 * @param {String|Function} selector Selector or function to filter the collection.
23555 * @param {Object} [thisArg] Value to use as `this` when executing `callback`.
23556 * @return {Object} A new wrapped collection
23557 * @chainable
23558 * @example
23559 *     $('.items').filter('.active');
23560 * @example
23561 *     $('.items').filter(function(element) {
23562 *         return element.hasAttribute('active')
23563 *     });
23564 */
23565
23566const filter = function(selector, thisArg) {
23567  const callback = typeof selector === 'function' ? selector : element => matches(element, selector);
23568  return $(ArrayProto.filter.call(this, callback, thisArg));
23569};
23570
23571/**
23572 * Execute a function for each element in the collection.
23573 *
23574 * @param {Function} callback Function to execute for each element, invoked with `element` as argument.
23575 * @param {Object} [thisArg] Value to use as `this` when executing `callback`.
23576 * @return {Object} The wrapped collection
23577 * @chainable
23578 * @example
23579 *     $('.items').forEach(function(element) {
23580 *         element.style.color = 'evergreen';
23581 *     );
23582 */
23583
23584const forEach = function(callback, thisArg) {
23585  return each(this, callback, thisArg);
23586};
23587
23588const array_each = forEach;
23589
23590/**
23591 * Returns the index of an element in the collection.
23592 *
23593 * @param {Node} element
23594 * @return {Number} The zero-based index, -1 if not found.
23595 * @example
23596 *     $('.items').indexOf(element); // 2
23597 */
23598
23599const indexOf = ArrayProto.indexOf;
23600
23601/**
23602 * Create a new collection by executing the callback for each element in the collection.
23603 *
23604 * @param {Function} callback Function to execute for each element, invoked with `element` as argument.
23605 * @param {Object} [thisArg] Value to use as `this` when executing `callback`.
23606 * @return {Array} Collection with the return value of the executed callback for each element.
23607 * @example
23608 *     // Create a new array with the attribute value of each element:
23609 *     $('.items').map(function(element) {
23610 *         return element.getAttribute('name')
23611 */
23612
23613const map = ArrayProto.map;
23614
23615/**
23616 * Removes the last element from the collection, and returns that element.
23617 *
23618 * @return {Object} The last element from the collection.
23619 * @example
23620 *     var lastElement = $('.items').pop();
23621 */
23622
23623const pop = ArrayProto.pop;
23624
23625/**
23626 * Adds one or more elements to the end of the collection, and returns the new length of the collection.
23627 *
23628 * @param {Object} element Element(s) to add to the collection
23629 * @return {Number} The new length of the collection
23630 * @example
23631 *     $('.items').push(element);
23632 */
23633
23634const push = ArrayProto.push;
23635
23636/**
23637 * Apply a function against each element in the collection, and this accumulator function has to reduce it
23638 * to a single value.
23639 *
23640 * @param {Function} callback Function to execute on each value in the array, taking four arguments (see example).
23641 * @param {Mixed} initialValue Object to use as the first argument to the first call of the callback.
23642 * @example
23643 *     // Calculate the combined height of elements:
23644 *     $('.items').reduce(function(previousValue, element, index, collection) {
23645 *         return previousValue + element.clientHeight;
23646 *     }, 0);
23647 */
23648
23649const reduce = ArrayProto.reduce;
23650
23651/**
23652 * Apply a function against each element in the collection (from right-to-left), and this accumulator function has
23653 * to reduce it to a single value.
23654 *
23655 * @param {Function} callback Function to execute on each value in the array, taking four arguments (see example).
23656 * @param {Mixed} initialValue Object to use as the first argument to the first call of the callback.
23657 * @example
23658 *     // Concatenate the text of elements in reversed order:
23659 *     $('.items').reduceRight(function(previousValue, element, index, collection) {
23660 *         return previousValue + element.textContent;
23661 *     }, '');
23662 */
23663
23664const reduceRight = ArrayProto.reduceRight;
23665
23666/**
23667 * Reverses an array in place. The first array element becomes the last and the last becomes the first.
23668 *
23669 * @return {Object} The wrapped collection, reversed
23670 * @chainable
23671 * @example
23672 *     $('.items').reverse();
23673 */
23674
23675const reverse = function() {
23676  return $(toArray(this).reverse());
23677};
23678
23679/**
23680 * Removes the first element from the collection, and returns that element.
23681 *
23682 * @return {Object} The first element from the collection.
23683 * @example
23684 *     var firstElement = $('.items').shift();
23685 */
23686
23687const shift = ArrayProto.shift;
23688
23689/**
23690 * Checks if the given callback returns a true(-ish) value for any of the elements in the collection.
23691 *
23692 * @param {Function} callback Function to execute for each element, invoked with `element` as argument.
23693 * @return {Boolean} Whether any element passed the callback check.
23694 * @example
23695 *     $('.items').some(function(element) {
23696 *         return element.hasAttribute('active')
23697 *     }); // true/false
23698 */
23699
23700const some = ArrayProto.some;
23701
23702/**
23703 * Adds one or more elements to the beginning of the collection, and returns the new length of the collection.
23704 *
23705 * @param {Object} element Element(s) to add to the collection
23706 * @return {Number} The new length of the collection
23707 * @example
23708 *     $('.items').unshift(element);
23709 */
23710
23711const unshift = ArrayProto.unshift;
23712
23713;// CONCATENATED MODULE: ./node_modules/domtastic/src/baseClass.js
23714/**
23715 * @module BaseClass
23716 */
23717
23718
23719
23720
23721/* harmony default export */ function baseClass(api) {
23722
23723  /**
23724   * Provide subclass for classes or components to extend from.
23725   * The opposite and successor of plugins (no need to extend `$.fn` anymore, complete control).
23726   *
23727   * @return {Class} The class to extend from, including all `$.fn` methods.
23728   * @example
23729   *     import { BaseClass } from  'domtastic';
23730   *
23731   *     class MyComponent extends BaseClass {
23732   *         doSomething() {
23733   *             return this.addClass('.foo');
23734   *         }
23735   *     }
23736   *
23737   *     let component = new MyComponent('body');
23738   *     component.doSomething();
23739   *
23740   * @example
23741   *     import $ from  'domtastic';
23742   *
23743   *     class MyComponent extends $.BaseClass {
23744   *         progress(value) {
23745   *             return this.attr('data-progress', value);
23746   *         }
23747   *     }
23748   *
23749   *     let component = new MyComponent(document.body);
23750   *     component.progress('ive').append('<p>enhancement</p>');
23751   */
23752
23753  class BaseClass {
23754    constructor() {
23755      DOMtastic.call(this, $(...arguments));
23756    }
23757  }
23758  extend(BaseClass.prototype, api);
23759  return BaseClass;
23760}
23761
23762;// CONCATENATED MODULE: ./node_modules/domtastic/src/css.js
23763/**
23764 * @module CSS
23765 */
23766
23767
23768
23769const isNumeric = value => !isNaN(parseFloat(value)) && isFinite(value);
23770
23771const camelize = value => value.replace(/-([\da-z])/gi, (matches, letter) => letter.toUpperCase());
23772
23773const dasherize = value => value.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase();
23774
23775/**
23776 * Get the value of a style property for the first element, or set one or more style properties for each element in the collection.
23777 *
23778 * @param {String|Object} key The name of the style property to get or set. Or an object c
23778ontaining key-value pairs to set as style properties.
23779 * @param {String} [value] The value of the style property to set.
23780 * @return {Object} The wrapped collection
23781 * @chainable
23782 * @example
23783 *     $('.item').css('padding-left'); // get
23784 *     $('.item').css('color', '#f00'); // set
23785 *     $('.item').css({'border-width': '1px', display: 'inline-block'}); // set multiple
23786 */
23787
23788const css = function(key, value) {
23789
23790  let styleProps, prop, val;
23791
23792  if(typeof key === 'string') {
23793    key = camelize(key);
23794
23795    if(typeof value === 'undefined') {
23796      let element = this.nodeType ? this : this[0];
23797      if(element) {
23798        val = element.style[key];
23799        return isNumeric(val) ? parseFloat(val) : val;
23800      }
23801      return undefined;
23802    }
23803
23804    styleProps = {};
23805    styleProps[key] = value;
23806  } else {
23807    styleProps = key;
23808    for(prop in styleProps) {
23809      val = styleProps[prop];
23810      delete styleProps[prop];
23811      styleProps[camelize(prop)] = val;
23812    }
23813  }
23814
23815  each(this, element => {
23816    for(prop in styleProps) {
23817      if(styleProps[prop] || styleProps[prop] === 0) {
23818        element.style[prop] = styleProps[prop];
23819      } else {
23820        element.style.removeProperty(dasherize(prop));
23821      }
23822    }
23823  });
23824
23825  return this;
23826};
23827
23828;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/index.js
23829/**
23830 * @module DOM
23831 */
23832
23833
23834
23835
23836const dom_forEach = Array.prototype.forEach;
23837
23838/**
23839 * Append element(s) to each element in the collection.
23840 *
23841 * @param {String|Node|NodeList|Object} element What to append to the element(s).
23842 * Clones elements as necessary.
23843 * @return {Object} The wrapped collection
23844 * @chainable
23845 * @example
23846 *     $('.item').append('<p>more</p>');
23847 */
23848
23849const append = function(element) {
23850  if(this instanceof Node) {
23851    if(typeof element === 'string') {
23852      this.insertAdjacentHTML('beforeend', element);
23853    } else {
23854      if(element instanceof Node) {
23855        this.appendChild(element);
23856      } else {
23857        const elements = element instanceof NodeList ? toArray(element) : element;
23858        dom_forEach.call(elements, this.appendChild.bind(this));
23859      }
23860    }
23861  } else {
23862    _each(this, append, element);
23863  }
23864  return this;
23865};
23866
23867/**
23868 * Place element(s) at the beginning of each element in the collection.
23869 *
23870 * @param {String|Node|NodeList|Object} element What to place at the beginning of the element(s).
23871 * Clones elements as necessary.
23872 * @return {Object} The wrapped collection
23873 * @chainable
23874 * @example
23875 *     $('.item').prepend('<span>start</span>');
23876 */
23877
23878const prepend = function(element) {
23879  if(this instanceof Node) {
23880    if(typeof element === 'string') {
23881      this.insertAdjacentHTML('afterbegin', element);
23882    } else {
23883      if(element instanceof Node) {
23884        this.insertBefore(element, this.firstChild);
23885      } else {
23886        let elements = element instanceof NodeList ? toArray(element) : element;
23887        dom_forEach.call(elements.reverse(), prepend.bind(this));
23888      }
23889    }
23890  } else {
23891    _each(this, prepend, element);
23892  }
23893  return this;
23894};
23895
23896/**
23897 * Place element(s) before each element in the collection.
23898 *
23899 * @param {String|Node|NodeList|Object} element What to place as sibling(s) before to the element(s).
23900 * Clones elements as necessary.
23901 * @return {Object} The wrapped collection
23902 * @chainable
23903 * @example
23904 *     $('.items').before('<p>prefix</p>');
23905 */
23906
23907const before = function(element) {
23908  if(this instanceof Node) {
23909    if(typeof element === 'string') {
23910      this.insertAdjacentHTML('beforebegin', element);
23911    } else {
23912      if(element instanceof Node) {
23913        this.parentNode.insertBefore(element, this);
23914      } else {
23915        const elements = element instanceof NodeList ? toArray(element) : element;
23916        dom_forEach.call(elements, before.bind(this));
23917      }
23918    }
23919  } else {
23920    _each(this, before, element);
23921  }
23922  return this;
23923};
23924
23925/**
23926 * Place element(s) after each element in the collection.
23927 *
23928 * @param {String|Node|NodeList|Object} element What to place as sibling(s) after to the element(s). Clones elements as necessary.
23929 * @return {Object} The wrapped collection
23930 * @chainable
23931 * @example
23932 *     $('.items').after('<span>suf</span><span>fix</span>');
23933 */
23934
23935const after = function(element) {
23936  if(this instanceof Node) {
23937    if(typeof element === 'string') {
23938      this.insertAdjacentHTML('afterend', element);
23939    } else {
23940      if(element instanceof Node) {
23941        this.parentNode.insertBefore(element, this.nextSibling);
23942      } else {
23943        const elements = element instanceof NodeList ? toArray(element) : element;
23944        dom_forEach.call(elements.reverse(), after.bind(this));
23945      }
23946    }
23947  } else {
23948    _each(this, after, element);
23949  }
23950  return this;
23951};
23952
23953/**
23954 * Clone a wrapped object.
23955 *
23956 * @return {Object}
23956 Wrapped collection of cloned nodes.
23957 * @example
23958 *     $(element).clone();
23959 */
23960
23961const clone = function() {
23962  return $(_clone(this));
23963};
23964
23965/**
23966 * Clone an object
23967 *
23968 * @param {String|Node|NodeList|Array} element The element(s) to clone.
23969 * @return {String|Node|NodeList|Array} The cloned element(s)
23970 * @private
23971 */
23972
23973const _clone = element => {
23974  if(typeof element === 'string') {
23975    return element;
23976  } else if(element instanceof Node) {
23977    return element.cloneNode(true);
23978  } else if('length' in element) {
23979    return [].map.call(element, el => el.cloneNode(true));
23980  }
23981  return element;
23982};
23983
23984/**
23985 * Specialized iteration, applying `fn` in reversed manner to a clone of each element, but the provided one.
23986 *
23987 * @param {NodeList|Array} collection
23988 * @param {Function} fn
23989 * @param {Node} element
23990 * @private
23991 */
23992
23993const _each = (collection, fn, element) => {
23994  let l = collection.length;
23995  while(l--) {
23996    const elm = l === 0 ? element : _clone(element);
23997    fn.call(collection[l], elm);
23998  }
23999};
24000
24001;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/attr.js
24002/**
24003 * @module Attr
24004 */
24005
24006
24007
24008/**
24009 * Get the value of an attribute for the first element, or set one or more attributes for each element in the collection.
24010 *
24011 * @param {String|Object} key The name of the attribute to get or set. Or an object containing key-value pairs to set as attributes.
24012 * @param {String} [value] The value of the attribute to set.
24013 * @return {Object} The wrapped collection
24014 * @chainable
24015 * @example
24016 *     $('.item').attr('attrName'); // get
24017 *     $('.item').attr('attrName', 'attrValue'); // set
24018 *     $('.item').attr({attr1: 'value1', 'attr-2': 'value2'}); // set multiple
24019 */
24020
24021const attr = function(key, value) {
24022
24023  if(typeof key === 'string' && typeof value === 'undefined') {
24024    const element = this.nodeType ? this : this[0];
24025    return element ? element.getAttribute(key) : undefined;
24026  }
24027
24028  return each(this, element => {
24029    if(typeof key === 'object') {
24030      for(let attr in key) {
24031        element.setAttribute(attr, key[attr]);
24032      }
24033    } else {
24034      element.setAttribute(key, value);
24035    }
24036  });
24037};
24038
24039/**
24040 * Remove attribute from each element in the collection.
24041 *
24042 * @param {String} key Attribute name
24043 * @return {Object} The wrapped collection
24044 * @chainable
24045 * @example
24046 *     $('.items').removeAttr('attrName');
24047 */
24048
24049const removeAttr = function(key) {
24050  return each(this, element => element.removeAttribute(key));
24051};
24052
24053;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/class.js
24054/**
24055 * @module Class
24056 */
24057
24058
24059
24060/**
24061 * Add a class to the element(s)
24062 *
24063 * @param {String} value Space-separated class name(s) to add to the element(s).
24064 * @return {Object} The wrapped collection
24065 * @chainable
24066 * @example
24067 *     $('.item').addClass('bar');
24068 *     $('.item').addClass('bar foo');
24069 */
24070
24071const addClass = function(value) {
24072  if(value && value.length) {
24073    each(value.split(' '), class_each.bind(this, 'add'));
24074  }
24075  return this;
24076};
24077
24078/**
24079 * Remove a class from the element(s)
24080 *
24081 * @param {String} value Space-separated class name(s) to remove from the element(s).
24082 * @return {Object} The wrapped collection
24083 * @chainable
24084 * @example
24085 *     $('.items').removeClass('bar');
24086 *     $('.items').removeClass('bar foo');
24087 */
24088
24089const removeClass = function(value) {
24090  if(value && value.length) {
24091    each(value.split(' '), class_each.bind(this, 'remove'));
24092  }
24093  return this;
24094};
24095
24096/**
24097 * Toggle a class at the element(s)
24098 *
24099 * @param {String} value Space-separated class name(s) to toggle at the element(s).
24100 * @param {Boolean} [state] A Boolean value to determine whether the class should be added or removed.
24101 * @return {Object} The wrapped collection
24102 * @chainable
24103 * @example
24104 *     $('.item').toggleClass('bar');
24105 *     $('.item').toggleClass('bar foo');
24106 *     $('.item').toggleClass('bar', true);
24107 */
24108
24109const toggleClass = function(value, state) {
24110  if(value && value.length) {
24111    const action = typeof state === 'boolean' ? state ? 'add' : 'remove' : 'toggle';
24112    each(value.split(' '), class_each.bind(this, action));
24113  }
24114  return this;
24115};
24116
24117/**
24118 * Check if the element(s) have a class.
24119 *
24120 * @param {String} value Check if the DOM element contains the class name. When applied to multiple elements,
24121 * returns `true` if _any_ of them contains the class name.
24122 * @return {Boolean} Whether the element's class attribute contains the class name.
24123 * @example
24124 *     $('.item').hasClass('bar');
24125 */
24126
24127const hasClass = function(value) {
24128  return (this.nodeType ? [this] : this).some(element => element.classList.contains(value));
24129};
24130
24131/**
24132 * Specialized iteration, applying `fn` of the classList API to each element.
24133 *
24134 * @param {String} fnName
24135 * @param {String} className
24136 * @private
24137 */
24138
24139const class_each = function(fnName, className) {
24140  return each(this, element => element.classList[fnName](className));
24141};
24142
24143;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/contains.js
24144/**
24145 * @module contains
24146 */
24147
24148/**
24149 * Test whether an element contains another element in the DOM.
24150 *
24151 * @param {Element} container The element that may contain the other element.
24152 * @param {Element} element The element that may be a descendant of the other element.
24153 * @return {Boolean} Whether the `container` element contains the `element`.
24154 * @example
24155 *     $.contains(parentElement, childElement); // true/false
24156 */
24157
24158const contains = (container, element) => {
24159  if(!container || !element || container === element) {
24160    return false;
24161  } else if(container.contains) {
24162    return container.contains(element);
24163  } else if(container.compareDocumentPosition) {
24164    return !(container.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_DISCONNECTED);
24165  }
24166  return false;
24167};
24168
24169;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/data.js
24170/**
24171 * @module Data
24172 */
24173
24174
24175
24176const isSupportsDataSet = typeof document !== 'undefined' && 'dataset' in document.documentElement;
24177const DATAKEYPROP = isSupportsDataSet ? 'dataset' : '__DOMTASTIC_DATA__';
24178
24179const data_camelize = str => str.replace(/-+(.)?/g, (match, char) => char ? char.toUpperCase() : '');
24180
24181/**
24182 * Get data from first element, or set data for each element in the collection.
24183 *
24184 * @param {String} key The key for the data to get or set.
24185 * @param {String} [value] The data to set.
24186 * @return {Object} The wrapped collection
24187 * @chainable
24188 * @example
24189 *     $('.item').data('attrName'); // get
24190 *     $('.item').data('attrName', {any: 'data'}); // set
24191 */
24192
24193const data = function(key, value) {
24194
24195  if(typeof key === 'string' && typeof value === 'undefined') {
24196    const element = this.nodeType ? this : this[0];
24197    return element && DATAKEYPROP in element ? element[DATAKEYPROP][data_camelize(key)] : undefined;
24198  }
24199
24200  return each(this, element => {
24201    if(!isSupportsDataSet) {
24202      element[DATAKEYPROP] = element[DATAKEYPROP] || {};
24203    }
24204
24205    element[DATAKEYPROP][data_camelize(key)] = value;
24206  });
24207};
24208
24209/**
24210 * Get property from first element, or set property on each element in the collection.
24211 *
24212 * @param {String} key The name of the property to get or set.
24213 * @param {String} [value] The value of the property to set.
24214 * @return {Object} The wrapped collection
24215 * @chainable
24216 * @example
24217 *     $('.item').prop('attrName'); // get
24218 *     $('.item').prop('attrName', 'attrValue'); // set
24219 */
24220
24221const prop = function(key, value) {
24222
24223  if(typeof key === 'string' && typeof value === 'undefined') {
24224    const element = this.nodeType ? this : this[0];
24225    return element && element ? element[key] : undefined;
24226  }
24227
24228  return each(this, element => element[key] = value);
24229};
24230
24231;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/extra.js
24232/**
24233 * @module DOM (extra)
24234 */
24235
24236
24237
24238
24239
24240/**
24241 * Append each element in the collection to the specified element(s).
24242 *
24243 * @param {Node|NodeList|Object} element What to append the element(s) to. Clones elements as necessary.
24244 * @return {Object} The wrapped collection
24245 * @chainable
24246 * @example
24247 *     $('.item').appendTo(container);
24248 */
24249
24250const appendTo = function(element) {
24251  const context = typeof element === 'string' ? $(element) : element;
24252  append.call(context, this);
24253  return this;
24254};
24255
24256/*
24257 * Empty each element in the collection.
24258 *
24259 * @return {Object} The wrapped collection
24260 * @chainable
24261 * @example
24262 *     $('.item').empty();
24263 */
24264
24265const empty = function() {
24266  return each(this, element => element.innerHTML = '');
24267};
24268
24269/**
24270 * Remove the collection from the DOM.
24271 *
24272 * @return {Array} Array containing the removed elements
24273 * @example
24274 *     $('.item').remove();
24275 */
24276
24277const remove = function() {
24278  return each(this, element => {
24279    if(element.parentNode) {
24280      element.parentNode.removeChild(element);
24281    }
24282  });
24283};
24284
24285/**
24286 * Replace each element in the collection with the provided new content, and return the array of elements that were replaced.
24287 *
24288 * @return {Array} Array containing the replaced elements
24289 */
24290
24291const replaceWith = function() {
24292  return before.apply(this, arguments).remove();
24293};
24294
24295/**
24296 * Get the `textContent` from the first, or set the `textContent` of each element in the collection.
24297 *
24298 * @param {String} [value]
24299 * @return {Object} The wrapped collection
24300 * @chainable
24301 * @example
24302 *     $('.item').text('New content');
24303 */
24304
24305const extra_text = function(value) {
24306
24307  if(value === undefined) {
24308    return this[0].textContent;
24309  }
24310
24311  return each(this, element => element.textContent = '' + value);
24312};
24313
24314/**
24315 * Get the `value` from the first, or set the `value` of each element in the collection.
24316 *
24317 * @param {String} [value]
24318 * @return {Object} The wrapped collection
24319 * @chainable
24320 * @example
24321 *     $('input.firstName').val('New value');
24322 */
24323
24324const val = function(value) {
24325
24326  if(value === undefined) {
24327    return this.length > 0 ? this[0].value : undefined;
24328  }
24329
24330  return each(this, element => element.value = value);
24331};
24332
24333;// CONCATENATED MODULE: ./node_modules/domtastic/src/dom/html.js
24334/**
24335 * @module HTML
24336 */
24337
24338
24339
24340/*
24341 * Get the HTML contents of the first element, or set the HTML contents for each element in the collection.
24342 *
24343 * @param {String} [fragment] HTML fragment to set for the element. If this argument is omitted, the HTML contents are returned.
24344 * @return {Object} The wrapped collection
24345 * @chainable
24346 * @example
24347 *     $('.item').html();
24348 *     $('.item').html('<span>more</span>');
24349 */
24350
24351const html = function(fragment) {
24352
24353  if(fragment === undefined) {
24354    const element = this.nodeType ? this : this[0];
24355    return element ? element.innerHTML : undefined;
24356  }
24357
24358  return each(this, element => element.innerHTML = fragment);
24359};
24360
24361;// CONCATENATED MODULE: ./node_modules/domtastic/src/selector/closest.js
24362/**
24363 * @module closest
24364 */
24365
24366
24367
24368
24369/**
24370 * Return the closest element matching the selector (starting by itself) for each element in the collection.
24371 *
24372 * @param {String} selector Filter
24373 * @param {Object} [context] If provided, matching elements must be a descendant of this element
24374 * @return {Object} New wrapped collection (containing zero or one element)
24375 * @chainable
24376 * @example
24377 *     $('.selector').closest('.container');
24378 */
24379
24380const closest = (() => {
24381
24382  const closest = function(selector, context) {
24383    const nodes = [];
24384    each(this, node => {
24385      while(node && node !== context) {
24386        if(matches(node, selector)) {
24387          nodes.push(node);
24388          break;
24389        }
24390        node = node.parentElement;
24391      }
24392    });
24393    return $(uniq(nodes));
24394  };
24395
24396  return typeof Element === 'undefined' || !Element.prototype.closest ? closest : function(selector, context) {
24397    if(!context) {
24398      const nodes = [];
24399      each(this, node => {
24400        const n = node.closest(selector);
24401        if(n) {
24402          nodes.push(n);
24403        }
24404      });
24405      return $(uniq(nodes));
24406    } else {
24407      return closest.call(this, selector, context);
24408    }
24409  };
24410})();
24411
24412;// CONCATENATED MODULE: ./node_modules/domtastic/src/event/index.js
24413/**
24414 * @module Events
24415 */
24416
24417
24418
24419
24420/**
24421 * Shorthand for `addEventListener`. Supports event delegation if a filter (`selector`) is provided.
24422 *
24423 * @param {String} eventNames List of space-separated event types to be added to the element
24423(s)
24424 * @param {String} [selector] Selector to filter descendants that delegate the event to this element.
24425 * @param {Function} handler Event handler
24426 * @param {Boolean} useCapture=false
24427 * @param {Boolean} once=false
24428 * @return {Object} The wrapped collection
24429 * @chainable
24430 * @example
24431 *     $('.item').on('click', callback);
24432 *     $('.container').on('click focus', '.item', handler);
24433 */
24434
24435const on = function(eventNames, selector, handler, useCapture, once) {
24436
24437  if(typeof selector === 'function') {
24438    handler = selector;
24439    selector = null;
24440  }
24441
24442  let parts,
24443    namespace,
24444    eventListener;
24445
24446  eventNames.split(' ').forEach(eventName => {
24447
24448    parts = eventName.split('.');
24449    eventName = parts[0] || null;
24450    namespace = parts[1] || null;
24451
24452    eventListener = proxyHandler(handler);
24453
24454    each(this, element => {
24455
24456      if(selector) {
24457        eventListener = delegateHandler.bind(element, selector, eventListener);
24458      }
24459
24460      if(once) {
24461        const listener = eventListener;
24462        eventListener = event => {
24463          off.call(element, eventNames, selector, handler, useCapture);
24464          listener.call(element, event);
24465        };
24466      }
24467
24468      element.addEventListener(eventName, eventListener, useCapture || false);
24469
24470      getHandlers(element).push({
24471        eventName,
24472        handler,
24473        eventListener,
24474        selector,
24475        namespace
24476      });
24477    });
24478
24479  }, this);
24480
24481  return this;
24482};
24483
24484/**
24485 * Shorthand for `removeEventListener`.
24486 *
24487 * @param {String} eventNames List of space-separated event types to be removed from the element(s)
24488 * @param {String} [selector] Selector to filter descendants that undelegate the event to this element.
24489 * @param {Function} handler Event handler
24490 * @param {Boolean} useCapture=false
24491 * @return {Object} The wrapped collection
24492 * @chainable
24493 * @example
24494 *     $('.item').off('click', callback);
24495 *     $('#my-element').off('myEvent myOtherEvent');
24496 *     $('.item').off();
24497 */
24498
24499const off = function(eventNames = '', selector, handler, useCapture) {
24500
24501  if(typeof selector === 'function') {
24502    handler = selector;
24503    selector = null;
24504  }
24505
24506  let parts,
24507    namespace,
24508    handlers;
24509
24510  eventNames.split(' ').forEach(eventName => {
24511
24512    parts = eventName.split('.');
24513    eventName = parts[0] || null;
24514    namespace = parts[1] || null;
24515
24516    return each(this, element => {
24517
24518      handlers = getHandlers(element);
24519
24520      each(handlers.filter(item => {
24521        return (
24522          (!eventName || item.eventName === eventName) &&
24523          (!namespace || item.namespace === namespace) &&
24524          (!handler || item.handler === handler) &&
24525          (!selector || item.selector === selector)
24526        );
24527      }), item => {
24528        element.removeEventListener(item.eventName, item.eventListener, useCapture || false);
24529        handlers.splice(handlers.indexOf(item), 1);
24530      });
24531
24532      if(!eventName && !namespace && !selector && !handler) {
24533        clearHandlers(element);
24534      } else if(handlers.length === 0) {
24535        clearHandlers(element);
24536      }
24537
24538    });
24539
24540  }, this);
24541
24542  return this;
24543};
24544
24545/**
24546 * Add event listener and execute the handler at most once per element.
24547 *
24548 * @param eventNames
24549 * @param selector
24550 * @param handler
24551 * @param useCapture
24552 * @return {Object} The wrapped collection
24553 * @chainable
24554 * @example
24555 *     $('.item').one('click', callback);
24556 */
24557
24558const one = function(eventNames, selector, handler, useCapture) {
24559  return on.call(this, eventNames, selector, handler, useCapture, 1);
24560};
24561
24562/**
24563 * Get event handlers from an element
24564 *
24565 * @private
24566 * @param {Node} element
24567 * @return {Array}
24568 */
24569
24570const eventKeyProp = '__domtastic_event__';
24571let id = 1;
24572let handlers = {};
24573let unusedKeys = [];
24574
24575const getHandlers = element => {
24576  if(!element[eventKeyProp]) {
24577    element[eventKeyProp] = unusedKeys.length === 0 ? ++id : unusedKeys.pop();
24578  }
24579  const key = element[eventKeyProp];
24580  return handlers[key] || (handlers[key] = []);
24581};
24582
24583/**
24584 * Clear event handlers for an element
24585 *
24586 * @private
24587 * @param {Node} element
24588 */
24589
24590const clearHandlers = element => {
24591  const key = element[eventKeyProp];
24592  if(handlers[key]) {
24593    handlers[key] = null;
24594    element[eventKeyProp] = null;
24595    unusedKeys.push(key);
24596  }
24597};
24598
24599/**
24600 * Function to create a handler that augments the event object with some extra methods,
24601 * and executes the callback with the event and the event data (i.e. `event.detail`).
24602 *
24603 * @private
24604 * @param handler Callback to execute as `handler(event, data)`
24605 * @return {Function}
24606 */
24607
24608const proxyHandler = handler => function(event) {
24609  return handler.call(this, augmentEvent(event));
24610};
24611
24612const eventMethods = {
24613  preventDefault: 'isDefaultPrevented',
24614  stopImmediatePropagation: 'isImmediatePropagationStopped',
24615  stopPropagation: 'isPropagationStopped'
24616};
24617const returnTrue = () => true;
24618const returnFalse = () => false;
24619
24620/**
24621 * Attempt to augment events and implement something closer to DOM Level 3 Events.
24622 *
24623 * @private
24624 * @param {Object} event
24625 * @return {Function}
24626 */
24627
24628const augmentEvent = event => {
24629  if(!event.isDefaultPrevented || event.stopImmediatePropagation || event.stopPropagation) {
24630    for(const methodName in eventMethods) {
24631      (function(methodName, testMethodName, originalMethod) {
24632        event[methodName] = function() {
24633          this[testMethodName] = returnTrue;
24634          return originalMethod && originalMethod.apply(this, arguments);
24635        };
24636        event[testMethodName] = returnFalse;
24637      }(methodName, eventMethods[methodName], event[methodName]));
24638    }
24639    if(event._preventDefault) {
24640      event.preventDefault();
24641    }
24642  }
24643  return event;
24644};
24645
24646/**
24647 * Function to test whether delegated events match the provided `selector` (filter),
24648 * if the event propagation was stopped, and then actually call the provided event handler.
24649 * Use `this` instead of `event.currentTarget` on the event object.
24650 *
24651 * @private
24652 * @param {String} selector Selector to filter descendants that undelegate the event to this element.
24653 * @param {Function} handler Event handler
24654 * @param {Event} event
24655 */
24656
24657const delegateHandler = function(selector, handler, event) {
24658  const eventTarget = event._target || event.target;
24659  const currentTarget = closest.call([eventTarget], selector, this)[0];
24660  if(currentTarget && currentTarget !== this) {
24661    if(currentTarget === eventTarget || !(event.isPropagationStopped && event.isPropagationStopped())) {
24662      handler.call(currentTarget, event);
24663    }
24664  }
24665};
24666
24667const bind = on;
24668const unbind = off;
24669
24670;// CONCATENATED MODULE: ./node_modules/domtastic/src/event/trigger.js
24671/**
24672 * @module trigger
24673 */
24674
24675
24676
24677
24678const reMouseEvent = /^(mouse(down|up|over|out|enter|leave|move)|contextmenu|(dbl)?click)$/;
24679const reKeyEvent = /^key(down|press|up)$/;
24680
24681/**
24682 * Trigger event at element(s)
24683 *
24684 * @param {String} type Type of the event
24685 * @param {Object} data Data to be sent with the event (`params.detail` will be set to this).
24686 * @param {Object} [params] Event parameters (optional)
24687 * @param {Boolean} params.bubbles=true Does the event bubble up through the DOM or not.
24688 * @param {Boolean} params.cancelable=true Is the event cancelable or not.
24689 * @param {Mixed} params.detail=undefined Additional information about the event.
24690 * @return {Object} The wrapped collection
24691 * @chainable
24692 * @example
24693 *     $('.item').trigger('anyEventType');
24694 */
24695
24696const trigger = function(type, data, {bubbles = true, cancelable = true, preventDefault = false} = {}) {
24697
24698  const EventConstructor = getEventConstructor(type);
24699  const event = new EventConstructor(type, {
24700    bubbles,
24701    cancelable,
24702    preventDefault,
24703    detail: data
24704  });
24705
24706  event._preventDefault = preventDefault;
24707
24708  return each(this, element => {
24709    if(!bubbles || isEventBubblingInDetachedTree || isAttachedToDocument(element)) {
24710      dispatchEvent(element, event);
24711    } else {
24712      triggerForPath(element, type, {
24713        bubbles,
24714        cancelable,
24715        preventDefault,
24716        detail: data
24717      });
24718    }
24719  });
24720};
24721
24722const getEventConstructor = type => isSupportsOtherEventConstructors ? (reMouseEvent.test(type) ? MouseEvent : (reKeyEvent.test(type) ? KeyboardEvent : CustomEvent)) : CustomEvent;
24723
24724/**
24725 * Trigger event at first element in the collection. Similar to `trigger()`, except:
24726 *
24727 * - Event does not bubble
24728 * - Default event behavior is prevented
24729 * - Only triggers handler for first matching element
24730 *
24731 * @param {String} type Type of the event
24732 * @param {Object} data Data to be sent with the event
24733 * @example
24734 *     $('form').triggerHandler('submit');
24735 */
24736
24737const triggerHandler = function(type, data) {
24738  if(this[0]) {
24739    trigger.call(this[0], type, data, {
24740      bubbles: false,
24741      preventDefault: true
24742    });
24743  }
24744};
24745
24746/**
24747 * Check whether the element is attached to or detached from) the document
24748 *
24749 * @private
24750 * @param {Node} element Element to test
24751 * @return {Boolean}
24752 */
24753
24754const isAttachedToDocument = element => {
24755  if(element === window || element === document) {
24756    return true;
24757  }
24758  return contains(element.ownerDocument.documentElement, element);
24759};
24760
24761/**
24762 * Dispatch the event at the element and its ancestors.
24763 * Required to support delegated events in browsers that don't bubble events in detached DOM trees.
24764 *
24765 * @private
24766 * @param {Node} element First element to dispatch the event at
24767 * @param {String} type Type of the event
24768 * @param {Object} [params] Event parameters (optional)
24769 * @param {Boolean} params.bubbles=true Does the event bubble up through the DOM or not.
24770 * Will be set to false (but shouldn't matter since events don't bubble anyway).
24771 * @param {Boolean} params.cancelable=true Is the event cancelable or not.
24772 * @param {Mixed} params.detail=undefined Additional information about the event.
24773 */
24774
24775const triggerForPath = (element, type, params = {}) => {
24776  params.bubbles = false;
24777  const event = new CustomEvent(type, params);
24778  event._target = element;
24779  do {
24780    dispatchEvent(element, event);
24781  } while(element = element.parentNode); // eslint-disable-line no-cond-assign
24782};
24783
24784/**
24785 * Dispatch event to element, but call direct event methods instead if available
24786 * (e.g. "blur()", "submit()") and if the event is non-cancelable.
24787 *
24788 * @private
24789 * @param {Node} element Element to dispatch the event at
24790 * @param {Object} event Event to dispatch
24791 */
24792
24793const directEventMethods = ['blur', 'focus', 'select', 'submit'];
24794
24795const dispatchEvent = (element, event) => {
24796  if(directEventMethods.indexOf(event.type) !== -1 && typeof element[event.type] === 'function' && !event._preventDefault && !event.cancelable) {
24797    element[event.type]();
24798  } else {
24799    element.dispatchEvent(event);
24800  }
24801};
24802
24803/**
24804 * Polyfill for CustomEvent, borrowed from [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill).
24805 * Needed to support IE (9, 10, 11) & PhantomJS
24806 */
24807
24808(() => {
24809  const CustomEvent = function(event, params = {
24810    bubbles: false,
24811    cancelable: false,
24812    detail: undefined
24813  }) {
24814    let customEvent = document.createEvent('CustomEvent');
24815    customEvent.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
24816    return customEvent;
24817  };
24818
24819  CustomEvent.prototype = win.CustomEvent && win.CustomEvent.prototype;
24820  win.CustomEvent = CustomEvent;
24821
24822})();
24823
24824/*
24825 * Are events bubbling in detached DOM trees?
24826 * @private
24827 */
24828
24829const isEventBubblingInDetachedTree = (() =>{
24830  let isBubbling = false;
24831  const doc = win.document;
24832  if(doc) {
24833    const parent = doc.createElement('div');
24834    const child = parent.cloneNode();
24835    parent.appendChild(child);
24836    parent.addEventListener('e', function() {
24837      isBubbling = true;
24838    });
24839    child.dispatchEvent(new CustomEvent('e', {bubbles: true}));
24840  }
24841  return isBubbling;
24842})();
24843
24844const isSupportsOtherEventConstructors = (() => {
24845  try {
24846    new MouseEvent('click');
24847  } catch(e) {
24848    return false;
24849  }
24850  return true;
24851})();
24852
24853;// CONCATENATED MODULE: ./node_modules/domtastic/src/event/ready.js
24854/**
24855 * @module Ready
24856 */
24857
24858/**
24859 * Execute callback when `DOMContentLoaded` fires for `document`, or immediately if called afterwards.
24860 *
24861 * @param handler Callback to execute when initial DOM content is loaded.
24862 * @return {Object} The wrapped collection
24863 * @chainable
24864 * @example
24865 *     $(document).ready(callback);
24866 */
24867
24868const ready = function(handler) {
24869  if(/complete|loaded|interactive/.test(document.readyState) && document.body) {
24870    handler();
24871  } else {
24872    document.addEventListener('DOMContentLoaded', handler, false);
24873  }
24874  return this;
24875};
24876
24877;// CONCATENATED MODULE: ./node_modules/domtastic/src/noconflict.js
24878/**
24879 * @module noConflict
24880 */
24881
24882
24883
24884/*
24885 * Save the previous value of the global `$` variable, so that it can be restored later on.
24886 * @private
24887 */
24888
24889const previousLib = win.$;
24890
24891/**
24892 * In case another library sets the global `$` variable before DOMtastic does,
24893 * this method can be used to return the global `$` to that other library.
24894 *
24895 * @return {Object} Reference to DOMtastic.
24896 * @example
24897 *     var domtastic = $.noConflict();
24898 */
24899
24900const noConflict = function() {
24901  win.$ = previousLib;
24902  return this;
24903};
24904
24905;// CONCATENATED MODULE: ./node_modules/domtastic/src/selector/extra.js
24906/**
24907 * @module Selector (extra)
24908 */
24909
24910
24911
24912
24913/**
24914 * Return children of each element in the collection, optionally filtered by a selector.
24915 *
24916 * @param {String} [selector] Filter
24917 * @return {Object} New wrapped collection
24918 * @chainable
24919 * @example
24920 *     $('.selector').children();
24921 *     $('.selector').children('.filter');
24922 */
24923
24924const children = function(selector) {
24925  const nodes = [];
24926  each(this, element => {
24927    if(element.children) {
24928      each(element.children, child => {
24929        if(!selector || (selector && matches(child, selector))) {
24930          nodes.push(child);
24931        }
24932      });
24933    }
24934  });
24935  return $(nodes);
24936};
24937
24938/**
24939 * Add the elements of a wrapped collection to another.
24940 *
24941 * @param {String|Node|NodeList|Array} selector Query selector, `Node`, `NodeList`, array of elements, or HTML fragment string.
24942 * @return {Object} The extended wrapped collection
24943 * @example
24944 *     $('.items').concat($('.more-items));
24945 *     $('.items').concat('.more-items);
24946 *     $('.items').concat('<div>more</div>');
24947 */
24948
24949const concat = function(selector) {
24950  each($(selector), element => {
24951    if([].indexOf.call(this, element) === -1) {
24952      [].push.call(this, element);
24953    }
24954  });
24955  return this;
24956};
24957
24958/**
24959 * Return child nodes of each element in the collection, including text and comment nodes.
24960 *
24961 * @return {Object} New wrapped collection
24962 * @example
24963 *     $('.selector').contents();
24964 */
24965
24966const contents = function() {
24967  const nodes = [];
24968  each(this, element => nodes.push.apply(nodes, toArray(element.childNodes)));
24969  return $(nodes);
24970};
24971
24972/**
24973 * Return a collection containing only the one at the specified index.
24974 *
24975 * @param {Number} index
24976 * @return {Object} New wrapped collection
24977 * @chainable
24978 * @example
24979 *     $('.items').eq(1)
24980 *     // The second item; result is the same as doing $($('.items')[1]);
24981 */
24982
24983const eq = function(index) {
24984  return slice.call(this, index, index + 1);
24985};
24986
24987/**
24988 * Return a collection containing only the first item.
24989 *
24990 * @return {Object} New wrapped collection
24991 * @chainable
24992 * @example
24993 *     $('.items').first()
24994 *     // The first item; result is the same as doing $($('.items')[0]);
24995 */
24996
24997const first = function() {
24998  return slice.call(this, 0, 1);
24999};
25000
25001/**
25002 * Return the DOM element at the specified index.
25003 *
25004 * @param {Number} index
25005 * @return {Node} Element at the specified index
25006 * @example
25007 *     $('.items').get(1)
25008 *     // The second element; result is the same as doing $('.items')[1];
25009 */
25010
25011const get = function(index) {
25012  return this[index];
25013};
25014
25015/**
25016 * Return the parent elements of each element in the collection, optionally filtered by a selector.
25017 *
25018 * @param {String} [selector] Filter
25019 * @return {Object} New wrapped collection
25020 * @chainable
25021 * @example
25022 *     $('.selector').parent();
25023 *     $('.selector').parent('.filter');
25024 */
25025
25026const extra_parent = function(selector) {
25027  const nodes = [];
25028  each(this, element => {
25029    if(!selector || (selector && matches(element.parentNode, selector))) {
25030      nodes.push(element.parentNode);
25031    }
25032  });
25033  return $(nodes);
25034};
25035
25036/**
25037 * Return the sibling elements of each element in the collection, optionally filtered by a selector.
25038 *
25039 * @param {String} [selector] Filter
25040 * @return {Object} New wrapped collection
25041 * @chainable
25042 * @example
25043 *     $('.selector').siblings();
25044 *     $('.selector').siblings('.filter');
25045 */
25046
25047const siblings = function(selector) {
25048  const nodes = [];
25049  each(this, element => each(element.parentNode.children, sibling => {
25050    if(sibling !== element && (!selector || (selector && matches(sibling, selector)))) {
25051      nodes.push(sibling);
25052    }
25053  }));
25054  return $(nodes);
25055};
25056
25057/**
25058 * Create a new, sliced collection.
25059 *
25060 * @param {Number} start
25061 * @param {Number} end
25062 * @return {Object} New wrapped collection
25063 * @example
25064 *     $('.items').slice(1, 3)
25065 *     // New wrapped collection containing the second, third, and fourth element.
25066 */
25067
25068const slice = function(start, end) { // eslint-disable-line no-unused-vars
25069  return $([].slice.apply(this, arguments));
25070};
25071
25072;// CONCATENATED MODULE: ./node_modules/domtastic/src/type.js
25073/**
25074 * @module Type
25075 */
25076
25077/*
25078 * Determine if the argument passed is a Javascript function object.
25079 *
25080 * @param {Object} [obj] Object to test whether or not it is a function.
25081 * @return {boolean}
25082 * @example
25083 *     $.isFunction(function(){}); // true
25084 * @example
25085 *     $.isFunction({}); // false
25086 */
25087
25088const isFunction = obj => typeof obj === 'function';
25089
25090/*
25091 * Determine whether the argument is an array.
25092 *
25093 * @param {Object} [obj] Object to test whether or not it is an array.
25094 * @return {boolean}
25095 * @example
25096 *     $.isArray([]); // true
25097 * @example
25098 *     $.isArray({}); // false
25099 */
25100
25101const isArray = Array.isArray;
25102
25103;// CONCATENATED MODULE: ./node_modules/domtastic/src/index.js
25104/**
25105 * @module API
25106 */
25107
25108
25109
25110const api = {};
25111let src_$ = {};
25112
25113// Import modules to build up the API
25114
25115
25116
25117
25118
25119
25120
25121
25122
25123
25124
25125
25126
25127
25128
25129
25130
25131
25132
25133
25134if(typeof selector_namespaceObject !== 'undefined') {
25135  src_$ = $;
25136  src_$.matches = matches;
25137  api.find = find;
25138}
25139
25140extend(src_$, contains_namespaceObject, noconflict_namespaceObject, type_namespaceObject);
25141extend(api, array_namespaceObject, css_namespaceObject, attr_namespaceObject, dom_namespaceObject, class_namespaceObject, data_namespaceObject, extra_namespaceObject, html_namespaceObject, event_namespaceObject, trigger_namespaceObject, ready_namespaceObject, closest_namespaceObject, selector_extra_namespaceObject);
25142
25143src_$.fn = api;
25144
25145// Version
25146
25147src_$.version = '__VERSION__';
25148
25149// Util
25150
25151src_$.extend = extend;
25152
25153// Provide base class to extend from
25154
25155if(typeof baseClass !== 'undefined') {
25156  src_$.BaseClass = baseClass(src_$.fn);
25157}
25158
25159// Export interface
25160
25161/* harmony default export */ const src = (src_$);
25162
25163
25164/***/ }),
25165
25166/***/ 88292:
25167/***/ (() => {
25168
25169L.Control.Fullscreen = L.Control.extend({
25170    options: {
25171        position: 'topleft',
25172        title: {
25173            'false': 'View Fullscreen',
25174            'true': 'Exit Fullscreen'
25175        }
25176    },
25177
25178    onAdd: function (map) {
25179        var container = L.DomUtil.create('div', 'leaflet-control-fullscreen leaflet-bar leaflet-control');
25180
25181        this.link = L.DomUtil.create('a', 'leaflet-control-fullscreen-button leaflet-bar-part', container);
25182        this.link.href = '#';
25183
25184        this._map = map;
25185        this._map.on('fullscreenchange', this._toggleTitle, this);
25186        this._toggleTitle();
25187
25188        L.DomEvent.on(this.link, 'click', this._click, this);
25189
25190        return container;
25191    },
25192
25193    _click: function (e) {
25194        L.DomEvent.stopPropagation(e);
25195        L.DomEvent.preventDefault(e);
25196        this._map.toggleFullscreen(this.options);
25197    },
25198
25199    _toggleTitle: function() {
25200        this.link.title = this.options.title[this._map.isFullscreen()];
25201    }
25202});
25203
25204L.Map.include({
25205    isFullscreen: function () {
25206        return this._isFullscreen || false;
25207    },
25208
25209    toggleFullscreen: function (options) {
25210        var container = this.getContainer();
25211        if (this.isFullscreen()) {
25212            if (options && options.pseudoFullscreen) {
25213                this._disablePseudoFullscreen(container);
25214            } else if (document.exitFullscreen) {
25215                document.exitFullscreen();
25216            } else if (document.mozCancelFullScreen) {
25217                document.mozCancelFullScreen();
25218            } else if (document.webkitCancelFullScreen) {
25219                document.webkitCancelFullScreen();
25220            } else if (document.msExitFullscreen) {
25221                document.msExitFullscreen();
25222            } else {
25223                this._disablePseudoFullscreen(container);
25224            }
25225        } else {
25226            if (options && options.pseudoFullscreen) {
25227                this._enablePseudoFullscreen(container);
25228            } else if (container.requestFullscreen) {
25229                container.requestFullscreen();
25230            } else if (container.mozRequestFullScreen) {
25231                container.mozRequestFullScreen();
25232            } else if (container.webkitRequestFullscreen) {
25233                container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
25234            } else if (container.msRequestFullscreen) {
25235                container.msRequestFullscreen();
25236            } else {
25237                this._enablePseudoFullscreen(container);
25238            }
25239        }
25240
25241    },
25242
25243    _enablePseudoFullscreen: function (container) {
25244        L.DomUtil.addClass(container, 'leaflet-pseudo-fullscreen');
25245        this._setFullscreen(true);
25246        this.fire('fullscreenchange');
25247    },
25248
25249    _disablePseudoFullscreen: function (container) {
25250        L.DomUtil.removeClass(container, 'leaflet-pseudo-fullscreen');
25251        this._setFullscreen(false);
25252        this.fire('fullscreenchange');
25253    },
25254
25255    _setFullscreen: function(fullscreen) {
25256        this._isFullscreen = fullscreen;
25257        var container = this.getContainer();
25258        if (fullscreen) {
25259            L.DomUtil.addClass(container, 'leaflet-fullscreen-on');
25260        } else {
25261            L.DomUtil.removeClass(container, 'leaflet-fullscreen-on');
25262        }
25263        this.invalidateSize();
25264    },
25265
25266    _onFullscreenChange: function (e) {
25267        var fullscreenElement =
25268            document.fullscreenElement ||
25269            document.mozFullScreenElement ||
25270            document.webkitFullscreenElement ||
25271            document.msFullscreenElement;
25272
25273        if (fullscreenElement === this.getContainer() && !this._isFullscreen) {
25274            this._setFullscreen(true);
25275            this.fire('fullscreenchange');
25276        } else if (fullscreenElement !== this.getContainer() && this._isFullscreen) {
25277            this._setFullscreen(false);
25278            this.fire('fullscreenchange');
25279        }
25280    }
25281});
25282
25283L.Map.mergeOptions({
25284    fullscreenControl: false
25285});
25286
25287L.Map.addInitHook(function () {
25288    if (this.options.fullscreenControl) {
25289        this.fullscreenControl = new L.Control.Fullscreen(this.options.fullscreenControl);
25290        this.addControl(this.fullscreenControl);
25291    }
25292
25293    var fullscreenchange;
25294
25295    if ('onfullscreenchange' in document) {
25296        fullscreenchange = 'fullscreenchange';
25297    } else if ('onmozfullscreenchange' in document) {
25298        fullscreenchange = 'mozfullscreenchange';
25299    } else if ('onwebkitfullscreenchange' in document) {
25300        fullscreenchange = 'webkitfullscreenchange';
25301    } else if ('onmsfullscreenchange' in document) {
25302        fullscreenchange = 'MSFullscreenChange';
25303    }
25304
25305    if (fullscreenchange) {
25306        var onFullscreenChange = L.bind(this._onFullscreenChange, this);
25307
25308        this.whenReady(function () {
25309            L.DomEvent.on(document, fullscreenchange, onFullscreenChange);
25310        });
25311
25312        this.on('unload', function () {
25313            L.DomEvent.off(document, fullscreenchange, onFullscreenChange);
25314        });
25315    }
25316});
25317
25318L.control.fullscreen = function (options) {
25319    return new L.Control.Fullscreen(options);
25320};
25321
25322
25323/***/ }),
25324
25325/***/ 63494:
25326/***/ (() => {
25327
25328/**
25329 * A JavaScript library for using OpenWeatherMap's layers and OWM's city data for leaflet based maps without hassle.
25330 * License: CC0 (Creative Commons Zero), see https://creativecommons.org/publicdomain/zero/1.0/
25331 * Project page: https://github.com/buche/leaflet-openweathermap/
25332 */
25333
25334L.OWM = L.TileLayer.extend({
25335	options: {
25336		appId: 'GET_YOUR_OWN_APPID', /* pass your own AppId as parameter when creating the layer. Get your own AppId at https://www.openweathermap.org/appid */
25337		baseUrl: "https://{s}.tile.openweathermap.org/map/{layername}/{z}/{x}/{y}.png",
25338		maxZoom: 18,
25339		showLegend: true,
25340		legendImagePath: null,
25341		legendPosition: 'bottomleft',
25342		attribution: 'Weather from <a href="https://openweathermap.org/" alt="World Map and worldwide Weather Forecast online">OpenWeatherMap</a>'
25343	},
25344
25345	initialize: function (options) {
25346		L.Util.setOptions(this, options);
25347		var tileurl = this.options.baseUrl.replace('{layername}', this._owmLayerName);
25348		tileurl = tileurl + '?appid=' + this.options.appId;
25349
25350		this._map = null;
25351		this._legendControl = null;
25352		this._legendId = null;
25353		this._owmtileurl = tileurl;
25354		L.TileLayer.prototype.initialize.call(this, this._owmtileurl, options);
25355	},
25356
25357	onAdd: function(map) {
25358		this._map = map;
25359		if (this.options.showLegend && this.options.legendImagePath != null) {
25360			this._legendControl = this._getLegendControl();
25361			this._legendId = this._legendControl.addLegend(this.options.legendImagePath);
25362		}
25363		L.TileLayer.prototype.onAdd.call(this, map);
25364	},
25365
25366	onRemove: function(map) {
25367		if (this._legendControl != null) {
25368			this._legendControl.removeLegend(this._legendId);
25369			this._legendControl = null;
25370			this._legendId = null;
25371		}
25372		L.TileLayer.prototype.onRemove.call(this, map);
25373		this._map = null;
25374	},
25375
25376	_getLegendControl: function() {
25377		if (typeof this._map._owm_legendcontrol == 'undefined' || !this._map._owm_legendcontrol) {
25378			this._map._owm_legendcontrol = new L.OWM.LegendControl({position: this.options.legendPosition});
25379			this._map.addControl(this._map._owm_legendcontrol);
25380		}
25381		return this._map._owm_legendcontrol;
25382	}
25383});
25384
25385(function () {
25386
25387	L.OWM.Precipitation = L.OWM.extend({
25388		_owmLayerName: 'precipitation'
25389	});
25390	L.OWM.precipitation = function (options) { return new L.OWM.Precipitation(options); };
25391
25392	L.OWM.PrecipitationClassic = L.OWM.extend({
25393		_owmLayerName: 'precipitation_cls'
25394	});
25395	L.OWM.precipitationClassic = function (options) {
25396		var layer = new L.OWM.PrecipitationClassic(options);
25397		if (layer.options.legendImagePath == null) {
25398			layer.options.legendImagePath = 'https://openweathermap.org/img/a/PR.png';
25399		}
25400		return layer;
25401	};
25402
25403	L.OWM.Rain = L.OWM.extend({
25404		_owmLayerName: 'rain'
25405	});
25406	L.OWM.rain = function (options) { return new L.OWM.Rain(options); };
25407
25408	L.OWM.RainClassic = L.OWM.extend({
25409		_owmLayerName: 'rain_cls'
25410	});
25411	L.OWM.rainClassic = function (options) {
25412		var layer = new L.OWM.RainClassic(options);
25413		if (layer.options.legendImagePath == null) {
25414			layer.options.legendImagePath = 'https://openweathermap.org/img/a/RN.png';
25415		}
25416		return layer;
25417	};
25418
25419	L.OWM.Snow = L.OWM.extend({
25420		_owmLayerName: 'snow'
25421	});
25422	L.OWM.snow = function (options) {
25423		var layer = new L.OWM.Snow(options);
25424		if (layer.options.legendImagePath == null) {
25425			layer.options.legendImagePath = 'https://openweathermap.org/img/a/SN.png';
25426		}
25427		return layer;
25428	};
25429
25430	L.OWM.Clouds = L.OWM.extend({
25431		_owmLayerName: 'clouds'
25432	});
25433	L.OWM.clouds = function (options) { return new L.OWM.Clouds(options); };
25434
25435	L.OWM.CloudsClassic = L.OWM.extend({
25436		_owmLayerName: 'clouds_cls'
25437	});
25438	L.OWM.cloudsClassic = function (options) {
25439		var layer = new L.OWM.CloudsClassic(options);
25440		if (layer.options.legendImagePath == null) {
25441			layer.options.legendImagePath = 'https://openweathermap.org/img/a/NT.png';
25442		}
25443		return layer;
25444	};
25445
25446	L.OWM.Pressure = L.OWM.extend({
25447		_owmLayerName: 'pressure'
25448	});
25449	L.OWM.pressure = function (options) {
25450		var layer = new L.OWM.Pressure(options);
25451		if (layer.options.legendImagePath == null) {
25452			layer.options.legendImagePath = 'https://openweathermap.org/img/a/PN.png';
25453		}
25454		return layer;
25455	};
25456
25457	L.OWM.PressureContour = L.OWM.extend({
25458		_owmLayerName: 'pressure_cntr'
25459	});
25460	L.OWM.pressureContour = function (options) { return new L.OWM.PressureContour(options); };
25461
25462	L.OWM.Temperature = L.OWM.extend({
25463		_owmLayerName: 'temp'
25464	});
25465	L.OWM.temperature = function (options) {
25466		var layer = new L.OWM.Temperature(options);
25467		if (layer.options.legendImagePath == null) {
25468			layer.options.legendImagePath = 'https://openweathermap.org/img/a/TT.png';
25469		}
25470		return layer;
25471	};
25472
25473	L.OWM.Wind = L.OWM.extend({
25474		_owmLayerName: 'wind'
25475	});
25476	L.OWM.wind = function (options) {
25477		var layer = new L.OWM.Wind(options);
25478		if (layer.options.legendImagePath == null) {
25479			layer.options.legendImagePath = 'https://openweathermap.org/img/a/UV.png';
25480		}
25481		return layer;
25482	};
25483
25484}());
25485
25486L.OWM.LegendControl = L.Control.extend({
25487	options: {
25488		position: "bottomleft"
25489	},
25490
25491	initialize: function(options) {
25492		L.Util.setOptions(this, options);
25493		this._container = L.DomUtil.create('div', 'owm-legend-container');
25494		this._container.style.display = 'none';
25495		this._legendCounter = 0;
25496		this._legendContainer = new Array();
25497	},
25498
25499	onAdd: function(map) {
25500		return this._container;
25501	},
25502
25503	addLegend: function(legendImagePath) {
25504		var legendId = this._legendCounter++;
25505		this._legendContainer[legendId] = legendImagePath;
25506		this._redrawLegend();
25507		this._container.style.display = 'block';
25508		return legendId;
25509	},
25510
25511	removeLegend: function(legendId) {
25512		if (typeof this._legendContainer[legendId] != 'undefined') {
25513			delete this._legendContainer[legendId];
25514		}
25515		// reset counter if no legend is in collection
25516		var containerEmpty = true;
25517		for (var idx in this._legendContainer) {
25518			containerEmpty = false;
25519			break;
25520		}
25521		if (containerEmpty) {
25522			this._legendCounter = 0;
25523			this._container.style.display = 'none';
25524		}
25525		this._redrawLegend();
25526	},
25527
25528	_redrawLegend: function() {
25529		this._container.innerHTML = ''; // clear container
25530		var isLeft = this.options.position.indexOf('left') !== -1;
25531		var cssFloat = isLeft ? 'left' : 'right';
25532		for (var idx in this._legendContainer) {
25533			if (isNaN(idx)) {
25534				continue;
25535			}
25536			var imgPath = this._legendContainer[idx];
25537			var item = L.DomUtil.create('div', 'owm-legend-item', this._container);
25538			item.style.cssFloat = cssFloat;
25539			if (isLeft) {
25540				item.style.marginRight = '10px';
25541			} else {
25542				item.style.marginLeft = '10px';
25543			}
25544			item.innerHTML = '<img src="' + imgPath + '" border="0" />';
25545		}
25546	}
25547});
25548
25549/**
25550 * Layer for current weather of cities.
25551 */
25552L.OWM.Current = L.Layer.extend({
25553
25554	options: {
25555		appId: null, // get your free Application ID at www.openweathermap.org
25556		type: 'city', // available types: 'city'. 'station' is not supported any more
25557		lang: 'en', // available: 'en', 'de', 'ru', 'fr', 'nl', 'es', 'ca' (not every language is finished yet)
25558		minZoom: 7,
25559		interval: 0, // interval for rereading city data in minutes
25560		progressControl: true, // available: true, false
25561		imageLoadingUrl: 'owmloading.gif', // URL of loading image relative to HTML document
25562		imageLoadingBgUrl: null, // URL of background image for progress control
25563		temperatureUnit: 'C', // available: 'K' (Kelvin), 'C' (Celsius), 'F' (Fahrenheit)
25564		temperatureDigits: 1,
25565		speedUnit: 'ms', // available: 'ms' (m/s), 'kmh' (km/h), 'mph' (mph)
25566		speedDigits: 0,
25567		popup: true, // available: true, false
25568		keepPopup: true, // available: true, false
25569		showOwmStationLink: true, // available: true, false
25570		showWindSpeed: 'both', // available: 'speed', 'beaufort', 'both'
25571		showWindDirection: 'both', // available: 'deg', 'desc', 'both'
25572		showTimestamp: true, // available: true, false
25573		showTempMinMax: true, // available: true, false
25574		useLocalTime: true, // available: true, false
25575		clusterSize: 150,
25576		imageUrlCity: 'https://openweathermap.org/img/w/{icon}.png',
25577		imageWidth: 50,
25578		imageHeight: 50,
25579		imageUrlStation: 'https://openweathermap.org/img/s/istation.png',
25580		imageWidthStation: 25,
25581		imageHeightStation: 25,
25582		imageUrlPlane: 'https://openweathermap.org/img/s/iplane.png',
25583		imageWidthPlane: 25,
25584		imageHeightPlane: 25,
25585		markerFunction: null, // user defined function for marker creation
25586		popupFunction: null, // user defined function for popup creation
25587		caching: true, // use caching of current weather data
25588		cacheMaxAge: 15, // maximum age of cache content in minutes before it gets invalidated
25589		keepOnMinZoom: false // keep or remove markers when zoom < minZoom
25590	},
25591
25592	initialize: function(options) {
25593		L.setOptions(this, options);
25594		this._layer = L.layerGroup();
25595		this._timeoutId = null;
25596		this._requests = {};
25597		this._markers = new Array();
25598		this._markedMarker = null;
25599		this._map = null;
25600		this._urlTemplate = 'https://api.openweathermap.org/data/2.5/box/{type}?{appId}cnt=300&format=json&units=metric&bbox={minlon},{minlat},{maxlon},{maxlat},10';
25601		this._directions = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N'];
25602		this._msbft = [0.3, 1.6, 3.4, 5.5, 8.0, 10.8, 13.9, 17.2, 20.8, 24.5, 28.5, 32.7, 37.0, 41.5, 46.2, 51.0, 56.1, 61.3]; // Beaufort scala
25603		this._tempUnits = { K: 'K', C: '°C', F: 'F'};
25604		this._progressCtrl = null;
25605		if (this.options.progressControl) {
25606			var bgIcon;
25607			if (this.options.imageLoadingBgUrl) {
25608				bgIcon = this.options.imageLoadingBgUrl;
25609			} else {
25610				bgIcon = this.options.imageUrlCity.replace('{icon}', '10d');
25611				if (this.options.type != 'city') {
25612					var bgIcon = this.options.imageUrlStation;
25613				}
25614			}
25615			this._progressCtrl = L.OWM.progressControl({
25616					type: this.options.type
25617					, bgImage: bgIcon
25618					, imageLoadingUrl: this.options.imageLoadingUrl
25619					, owmInstance: this
25620			});
25621		}
25622		this._cache = L.OWM.currentCache({ maxAge: this.options.cacheMaxAge });
25623	},
25624
25625	onAdd: function(map) {
25626		this._map = map;
25627		this._map.addLayer(this._layer);
25628		this._map.on('moveend', this.update, this);
25629		// add progress control
25630		if (this._progressCtrl != null) {
25631			this._map.addControl(this._progressCtrl);
25632		}
25633		this.update();
25634	},
25635
25636	onRemove: function(map) {
25637		// clear timeout
25638		if (this._timeoutId !== null) {
25639			window.clearTimeout(this._timeoutId);
25640			this._timeoutId = null;
25641		}
25642		// remove progress control
25643		if (this._progressCtrl != null) {
25644			this._map.removeControl(this._progressCtrl);
25645		}
25646		// remove layer and markers
25647		this._map.off('moveend', this.update, this);
25648		this._map.removeLayer(this._layer);
25649		this._layer.clearLayers();
25650		this._map = null;
25651		this._cache.clear();
25652	},
25653
25654	getAttribution: function() {
25655		return 'Weather from <a href="https://openweathermap.org/" '
25656			+ 'alt="World Map and worldwide Weather Forecast online">OpenWeatherMap</a>';
25657	},
25658
25659	update: function() {
25660		// clear existing timeout
25661		if (this._timeoutId) {
25662			window.clearTimeout(this._timeoutId);
25663			this._timeoutId = null;
25664		}
25665
25666		var _this = this;
25667
25668		// clear requests for all types
25669		for (var typ in this._requests) {
25670			var request = this._requests[typ];
25671			this.fire('owmloadingend', {type: typ});
25672			request.abort();
25673		}
25674		this._requests = {};
25675
25676		if (this._map.getZoom() < this.options.minZoom) {
25677			this.fire('owmloadingend', {type: _this.options.type});
25678			if (!this.options.keepOnMinZoom) {
25679				this._layer.clearLayers();
25680			}
25681			return;
25682		}
25683
25684		// try to get cached data first
25685		var bounds = this._map.getBounds();
25686		var data = null;
25687		if (this.options.caching) {
25688			data = this._cache.get(bounds.getWest(), bounds.getSouth(), bounds.getE
25688ast(), bounds.getNorth());
25689		}
25690		if (data !== null) {
25691			// using cached data
25692			this._processRequestedData(this, data);
25693		} else {
25694			// fetch new data from OWM
25695			this.fire('owmloadingstart', {type: _this.options.type});
25696			var url = this._urlTemplate
25697						.replace('{appId}', this.options.appId ? 'APPID=' + this.options.appId + '&' : '')
25698						.replace('{type}', this.options.type)
25699						.replace('{minlon}', bounds.getWest())
25700						.replace('{minlat}', bounds.getSouth())
25701						.replace('{maxlon}', bounds.getEast())
25702						.replace('{maxlat}', bounds.getNorth())
25703						;
25704			this._requests[this.options.type] = L.OWM.Utils.jsonp(url, function(data) {
25705				delete _this._requests[_this.options.type];
25706
25707				if (!_this._map) {
25708					// Nothing to do if layer is gone but this request is still active
25709					return;
25710				}
25711
25712				if (_this.options.caching) {
25713					_this._cache.set(data, _this._map.getBounds());
25714				}
25715				_this._processRequestedData(_this, typeof data.list == 'undefined' ? new Array() : data.list);
25716				_this.fire('owmloadingend', {type: _this.options.type});
25717			});
25718		}
25719		if (this.options.interval && this.options.interval > 0) {
25720			this._timeoutId = window.setTimeout(function() {_this.update()}, 60000*this.options.interval);
25721		}
25722	},
25723
25724	_processRequestedData: function(_this, data) {
25725
25726		// read all cities
25727		var stations = {};
25728		for (var i in data) {
25729			var stat = data[i];
25730			if (!_this._map) { // maybe layer is gone while we are looping here
25731				return;
25732			}
25733			// only use cities having a minimum distance of some pixels on the map
25734			var pt = _this._map.latLngToLayerPoint(new L.LatLng(stat.coord.Lat, stat.coord.Lon));
25735			var key = '' + (Math.round(pt.x/_this.options.clusterSize)) + "_" + (Math.round(pt.y/_this.options.clusterSize));
25736			if (!stations[key] || parseInt(stations[key].rang) < parseInt(stat.rang)) {
25737				stations[key] = stat;
25738			}
25739		}
25740
25741		// hide LayerGroup from map and remove old markers
25742		var markerWithPopup = null;
25743		if (_this.options.keepPopup) {
25744			markerWithPopup = _this._getMarkerWithPopup(_this._markers);
25745		}
25746		if (_this._map && _this._map.hasLayer(_this._layer)) {
25747			_this._map.removeLayer(_this._layer);
25748		}
25749		_this._layer.clearLayers();
25750
25751		// add the cities as markers to the LayerGroup
25752		_this._markers = new Array();
25753		for (var key in stations) {
25754			var marker;
25755			if (_this.options.markerFunction != null && typeof _this.options.markerFunction == 'function') {
25756				marker = _this.options.markerFunction.call(_this, stations[key]);
25757			} else {
25758				marker = _this._createMarker(stations[key]);
25759			}
25760			marker.options.owmId = stations[key].id;
25761			_this._layer.addLayer(marker);
25762			_this._markers.push(marker);
25763			if (_this.options.popup) {
25764				if (_this.options.popupFunction != null && typeof _this.options.popupFunction == 'function') {
25765					marker.bindPopup(_this.options.popupFunction.call(_this, stations[key]));
25766				} else {
25767					marker.bindPopup(_this._createPopup(stations[key]));
25768				}
25769			}
25770			if (markerWithPopup != null
25771					&& typeof markerWithPopup.options.owmId != 'undefined'
25772					&& markerWithPopup.options.owmId == marker.options.owmId) {
25773				markerWithPopup = marker;
25774			}
25775		}
25776
25777		// add the LayerGroup to the map
25778		_this._map && _this._map.addLayer(_this._layer);
25779		if (markerWithPopup != null) {
25780			markerWithPopup.openPopup();
25781		}
25782		_this.fire('owmlayeradd', {markers: _this._markers});
25783	},
25784
25785	_getMarkerWithPopup: function(markers) {
25786		var marker = null;
25787		for (var idx in markers) {
25788			var m = markers[idx];
25789			if (m._popup && m._map && m._map.hasLayer(m._popup)) {
25790				marker = m;
25791				break;
25792			}
25793		}
25794		return marker;
25795	},
25796
25797	_createPopup: function(station) {
25798		var showLink = typeof station.id != 'undefined' && this.options.showOwmStationLink;
25799		var txt = '<div class="owm-popup-name">';
25800		if (showLink) {
25801			var typ = 'station';
25802			if (typeof station.weather != 'undefined') {
25803				typ = 'city';
25804			}
25805			txt += '<a href="https://openweathermap.org/' + typ + '/' + station.id + '" target="_blank" title="'
25806				+ this.i18n('owmlinktitle', 'Details at OpenWeatherMap') + '">';
25807		}
25808		txt += station.name;
25809		if (showLink) {
25810			txt += '</a>';
25811		}
25812		txt += '</div>';
25813		if (typeof station.weather != 'undefined' && typeof station.weather[0] != 'undefined') {
25814			if (typeof station.weather[0].description != 'undefined' && typeof station.weather[0].id != 'undefined') {
25815				txt += '<div class="owm-popup-description">'
25816					+ this.i18n('id'+station.weather[0].id, station.weather[0].description + ' (' + station.weather[0].id + ')')
25817					+ '</div>';
25818			}
25819		}
25820		var imgData = this._getImageData(station);
25821		txt += '<div class="owm-popup-main"><img src="' + imgData.url + '" width="' + imgData.width
25822				+ '" height="' + imgData.height + '" border="0" />';
25823		if (typeof station.main != 'undefined' && typeof station.main.temp != 'undefined') {
25824			txt += '<span class="owm-popup-temp">' + this._temperatureConvert(station.main.temp)
25825				+ '&nbsp;' + this._displayTemperatureUnit() + '</span>';
25826		}
25827		txt += '</div>';
25828		txt += '<div class="owm-popup-details">';
25829		if (typeof station.main != 'undefined') {
25830			if (typeof station.main.humidity != 'undefined') {
25831				txt += '<div class="owm-popup-detail">'
25832					+ this.i18n('humidity', 'Humidity')
25833					+ ': ' + station.main.humidity + '&nbsp;%</div>';
25834			}
25835			if (typeof station.main.pressure != 'undefined') {
25836				txt += '<div class="owm-popup-detail">'
25837					+ this.i18n('pressure', 'Pressure')
25838					+ ': ' + station.main.pressure + '&nbsp;hPa</div>';
25839			}
25840			if (this.options.showTempMinMax) {
25841				if (typeof station.main.temp_max != 'undefined' && typeof station.main.temp_min != 'undefined') {
25842					txt += '<div class="owm-popup-detail">'
25843						+ this.i18n('temp_minmax', 'Temp. min/max')
25844						+ ': '
25845							+ this._temperatureConvert(station.main.temp_min)
25846						+ '&nbsp;/&nbsp;'
25847						+ this._temperatureConvert(station.main.temp_max)
25848						+ '&nbsp;' + this._displayTemperatureUnit() + '</div>';
25849				}
25850			}
25851		}
25852		if (station.rain != null && typeof station.rain != 'undefined' && typeof station.rain['1h'] != 'undefined') {
25853			txt += '<div class="owm-popup-detail">'
25854				+ this.i18n('rain_1h', 'Rain (1h)')
25855				+ ': ' + station.rain['1h'] + '&nbsp;ml</div>';
25856		}
25857		if (typeof station.wind != 'undefined') {
25858			if (typeof station.wind.speed != 'undefined') {
25859				txt += '<div class="owm-popup-detail">';
25860				if (this.options.showWindSpeed == 'beaufort' || this.options.showWindSpeed == 'both') {
25861					txt += this.i18n('windforce', 'Wind Force')
25862						+ ': ' + this._windMsToBft(station.wind.speed);
25863					if (this.options.showWindSpeed == 'both') {
25864						txt += '&nbsp;(' + this._convertSpeed(station.wind.speed) + '&nbsp;'
25865							+ this._displaySpeedUnit() + ')';
25866					}
25867				} else {
25868					txt += this.i18n('wind', 'Wind') + ': '
25869						+ this._convertSpeed(station.wind.speed) + '&nbsp;'
25870						+ this._displaySpeedUnit();
25871				}
25872				txt += '</div>';
25873			}
25874			if (typeof station.wind.gust != 'undefined') {
25875				txt += '<div class="owm-popup-detail">';
25876				if (this.options.showWindSpeed == 'beaufort' || this.options.showWindSpeed == 'both') {
25877					txt += this.i18n('gust', 'Gust')
25878						+ ': ' + this._windMsToBft(station.wind.gust);
25879					if (this.options.showWindSpeed == 'both') {
25880						txt += '&nbsp;(' + this._convertSpeed(station.wind.gust) + '&nbsp;'
25881							+ this._displaySpeedUnit() + ')';
25882					}
25883				} else {
25884					txt += this.i18n('gust', 'Gust') + ': '
25885						+ this._convertSpeed(station.wind.gust) + '&nbsp;'
25886						+ this._displaySpeedUnit();
25887				}
25888				txt += '</div>';
25889			}
25890			if (typeof station.wind.deg != 'undefined') {
25891				txt += '<div class="owm-popup-detail">';
25892				txt += this.i18n('direction', 'Windrichtung') + ': ';
25893				if (this.options.showWindDirection == 'desc' || this.options.showWindDirection == 'both') {
25894					txt += this._directions[(station.wind.deg/22.5).toFixed(0)];
25895					if (this.options.showWindDirection == 'both') {
25896						txt += '&nbsp;(' + station.wind.deg + '°)';
25897					}
25898				} else {
25899					txt += station.wind.deg + '°';
25900				}
25901				txt += '</div>';
25902			}
25903		}
25904		if (typeof station.dt != 'undefined' && this.options.showTimestamp) {
25905			txt += '<div class="owm-popup-timestamp">';
25906			txt += '(' + this._convertTimestamp(station.dt) + ')';
25907			txt += '</div>';
25908		}
25909		txt += '</div>';
25910		return txt;
25911	},
25912
25913	_getImageData: function(station) {
25914		var imageUrl;
25915		var imageWidth = this.options.imageWidth;
25916		var imageHeight = this.options.imageHeight;
25917		var imageUrlTemplate = this.options.imageUrlCity;
25918		if (station.weather && station.weather[0] && station.weather[0].icon) {
25919			imageUrl = imageUrlTemplate.replace('{icon}', station.weather[0].icon);
25920		} else if (station.type && station.type == 1) {
25921			imageUrl = this.options.imageUrlPlane;
25922			imageWidth = this.options.imageWidthPlane;
25923			imageHeight = this.options.imageWidthPLane;
25924		} else {
25925			imageUrl = this.options.imageUrlStation;
25926			imageWidth = this.options.imageWidthStation;
25927			imageHeight = this.options.imageWidthStation;
25928		}
25929		return {url: imageUrl, width: imageWidth, height: imageHeight};
25930	},
25931
25932	_createMarker: function(station) {
25933		var imageData = this._getImageData(station);
25934		var icon = L.divIcon({
25935						className: ''
25936						, iconAnchor: new L.Point(25, imageData.height/2)
25937						, popupAnchor: new L.Point(0, -10)
25938						, html: this._icondivtext(station, imageData.url, imageData.width, imageData.height)
25939					});
25940		var marker = L.marker([station.coord.Lat, station.coord.Lon], {icon: icon});
25941		return marker;
25942	},
25943
25944	_icondivtext: function(station, imageurl, width, height) {
25945		var txt = '';
25946		txt += '<div class="owm-icondiv">'
25947			+ '<img src="' + imageurl + '" border="0" width="' + width + '" height="' + height + '" />';
25948		if (typeof station.main != 'undefined' && typeof station.main.temp != 'undefined') {
25949			txt += '<div class="owm-icondiv-temp">' + this._temperatureConvert(station.main.temp)
25950				+ '&nbsp;' + this._displayTemperatureUnit() + '</div>';
25951		}
25952		txt += '</div>';
25953		return txt;
25954	},
25955
25956	_temperatureConvert: function(tempC) {
25957		var temp = tempC;
25958		switch (this.options.temperatureUnit) {
25959			case 'K':
25960				temp = (tempC + 273.15);
25961				break;
25962			case 'C':
25963				break;
25964			case 'F':
25965				temp = ((tempC + 273.15)*1.8-459.67);
25966				break;
25967		}
25968		return temp.toFixed(this.options.temperatureDigits);
25969	},
25970
25971	_displayTemperatureUnit: function() {
25972		var unit = this._tempUnits['K'];
25973		if (typeof this._tempUnits[this.options.temperatureUnit] != 'undefined') {
25974			unit = this._tempUnits[this.options.temperatureUnit];
25975		}
25976		return unit;
25977	},
25978
25979	_windMsToBft: function(ms) {
25980		var bft = 18;
25981		for (var key in this._msbft) {
25982			if (ms < this._msbft[key]) {
25983				bft = key;
25984				break;
25985			}
25986		}
25987		return bft;
25988	},
25989
25990	_displaySpeedUnit: function() {
25991		var unit = 'm/s';
25992		switch (this.options.speedUnit) {
25993			case 'kmh':
25994				unit = 'km/h'
25995				break;
25996			case 'mph':
25997				unit = 'mph'
25998				break;
25999		}
26000		return unit;
26001	},
26002
26003	_convertSpeed: function(speed) {
26004		var sp = speed;
26005		switch (this.options.speedUnit) {
26006			case 'kmh':
26007				sp = 3.6*sp;
26008				break;
26009			case 'mph':
26010				sp = 2.236*sp;
26011				break;
26012		}
26013		return sp.toFixed(this.options.speedDigits);
26014	},
26015
26016	_convertTimestamp: function(tstmp) {
26017		if (this.options.useLocalTime) {
26018			return (new Date(tstmp*1000));
26019		} else {
26020			return (new Date(tstmp*1000)).toUTCString();
26021		}
26022	},
26023
26024	i18n: function(key, fallback) {
26025		var lang = this.options.lang;
26026		if (typeof L.OWM.Utils.i18n != 'undefined'
26027				&& typeof L.OWM.Utils.i18n[lang] != 'undefined'
26028				&& typeof L.OWM.Utils.i18n[lang][key] != 'undefined') {
26029			return  L.OWM.Utils.i18n[lang][key]
26030		}
26031		return fallback;
26032	}
26033
26034});
26035L.OWM.current = function(options) { return new L.OWM.Current(options); };
26036
26037L.OWM.ProgressControl = L.Control.extend({
26038
26039	options: {
26040		position: "topleft",
26041		type: 'city',
26042		bgImage: null // bgImage is set in L.OWM.Current when creating this ProgressControll instance
26043	},
26044
26045	initialize: function(options) {
26046		L.Util.setOptions(this, options);
26047		this._container = L.DomUtil.create('div', 'leaflet-control-layers');
26048		if (this.options.bgImage != null) {
26049			this._container.style.backgroundImage ='url(' + this.options.bgImage + ')';
26050			this._container.style.backgroundRepeat = 'no-repeat';
26051			this._container.style.backgroundPosition = 'center center';
26052		}
26053		L.DomEvent.disableClickPropagation(this._container);
26054		this._container.innerHTML = '<img src="' + this.options.imageLoadingUrl + '" width="50" height="50" />';
26055	},
26056
26057	onAdd: function(map) {
26058		this._map = map;
26059		this.options.owmInstance.on('owmloadingstart', this._activate, this);
26060		this.options.owmInstance.on('owmloadingend', this._deactivate, this);
26061		return this._container;
26062	},
26063
26064	_activate: function(e) {
26065		if (e.target.options.type == this.options.type) {
26066			this._container.style.display = 'block';
26067		}
26068	},
26069
26070	_deactivate: function(e) {
26071		if (e.target.options.type == this.options.type) {
26072			this._container.style.display = 'none';
26073		}
26074	},
26075
26076	onRemove: function(map) {
26077		this.options.owmInstance.off('owmloadingstart', this._activate, this);
26078		this.options.owmInstance.off('owmloadingend', this._deactivate, this);
26079		this._container.style.display = 'none';
26080		this._map = null;
26081	}
26082
26083});
26084L.OWM.progressControl = function(options) { return new L.OWM.ProgressControl(options); };
26085
26086L.OWM.CurrentCache = L.Class.extend({
26087
26088	options: {
26089		maxAge: 15 // age in minutes before cache data is invalidated
26090	},
26091
26092	initialize: function(options) {
26093		L.Util.setOptions(this, options);
26094		this.clear();
26095	},
26096
26097	clear: function() {
26098		this._cachedData = null;
26099		this._cachedTime = 0;
26100		this._cachedBBox = {minLon: 181, minLat: 91, maxLon: -181, maxLat: -91};
26101	},
26102
26103	get: function(minLon, minLat, maxLon, maxLat) {
26104		if (this._cachedData == null) {
26105			// no cached data available
26106			return null;
26107		}
26108		if ((new Date()).getTime() - this._cachedTime > 60000*this.options.maxAge) {
26109			// cached data is too old
26110			this.clear();
26111			return null;
26112		}
26113		if (minLon <= this._cachedBBox.minLon || minLat <= this._cachedBBox.minLat
26114				|| maxLon >= this._cachedBBox.maxLon || maxLat >= this._cachedBBox.maxLat) {
26115			// new area is outside of cached area
26116			this.clear();
26117			return null;
26118		}
26119
26120		// clip cached data to bounds
26121		var clippedStations = new Array();
26122		var cnt = 0;
26123		for (var k in this._cachedData.list) {
26124			var station = this._cachedData.list[k];
26125			if (station.coord.Lon >= minLon && station.coord.Lon <= maxLon
26126					&& station.coord.Lat >= minLat && station.coord.Lat <= maxLat) {
26127				clippedStations[k] = station;
26128				cnt++;
26129			}
26130		}
26131		return clippedStations;
26132	},
26133
26134	set: function(data, bounds) {
26135		this._cachedData = data;
26136		this._cachedBBox.minLon = bounds.getWest();
26137		this._cachedBBox.minLat = bounds.getSouth();
26138		this._cachedBBox.maxLon = bounds.getEast();
26139		this._cachedBBox.maxLat = bounds.getNorth();
26140		this._cachedTime = (new Date()).getTime();
26141	}
26142
26143});
26144L.OWM.currentCache = function(options) { return new L.OWM.CurrentCache(options); };
26145
26146
26147L.OWM.Utils = {
26148
26149	callbacks: {},
26150	callbackCounter: 0,
26151
26152	jsonp: function(url, callbackFn) {
26153		var _this = this;
26154		var elem = document.createElement('script');
26155		var counter = this.callbackCounter++;
26156		var callback = 'L.OWM.Utils.callbacks[' + counter + ']';
26157		var abort = function() {
26158			if (elem.parentNode) {
26159				return elem.parentNode.removeChild(elem);
26160			}
26161		};
26162
26163		this.callbacks[counter] = function(data) {
26164			delete _this.callbacks[counter];
26165			return callbackFn(data);
26166		};
26167
26168		elem.src = '' + url + (url.indexOf('?') >= 0 ? '&' : '?') + 'callback=' + callback;
26169		elem.type = 'text/javascript';
26170		document.getElementsByTagName('body')[0].appendChild(elem);
26171		return { abort: abort };
26172	},
26173
26174	i18n: {
26175		en: {
26176			owmlinktitle: 'Details at OpenWeatherMap'
26177			, temperature: 'Temperature'
26178			, temp_minmax: 'Temp. min/max'
26179			, wind: 'Wind'
26180			, gust: 'Gust'
26181			, windforce: 'Wind Force'
26182			, direction: 'Direction'
26183			, rain_1h: 'Rain'
26184			, humidity: 'Humidity'
26185			, pressure: 'Pressure'
26186
26187		// weather conditions, see https://openweathermap.org/weather-conditions
26188			, id200: 'Thunderstorm with Light Rain'
26189			, id201: 'Thunderstorm with Rain'
26190			, id202: 'Thunderstorm with Heavy Rain'
26191			, id210: 'Light Thunderstorm'
26192			, id211: 'Thunderstorm'
26193			, id212: 'Heavy Thunderstorm'
26194			, id221: 'Ragged Thunderstorm'
26195			, id230: 'Thunderstorm with Light Drizzle'
26196			, id231: 'Thunderstorm with Drizzle'
26197			, id232: 'Thunderstorm with Heavy Drizzle'
26198
26199			, id300: 'Light Intensity Drizzle'
26200			, id301: 'Drizzle'
26201			, id302: 'Heavy Intensity Drizzle'
26202			, id310: 'Light Intensity Drizzle Rain'
26203			, id311: 'Drizzle Rain'
26204			, id312: 'Heavy Intensity Drizzle Rain'
26205			, id321: 'Shower Drizzle'
26206
26207			, id500: 'Light Rain'
26208			, id501: 'Moderate Rain'
26209			, id502: 'Heavy Intensity Rain'
26210			, id503: 'Very Heavy Rain'
26211			, id504: 'Extreme Rain'
26212			, id511: 'Freezing Rain'
26213			, id520: 'Light Intensity Shower Rain'
26214			, id521: 'Shower Rain'
26215			, id522: 'Heavy Intensity Shower Rain'
26216
26217			, id600: 'Light Snow'
26218			, id601: 'Snow'
26219			, id602: 'Heavy Snow'
26220			, id611: 'Sleet'
26221			, id621: 'Shower Snow'
26222			, id622: 'Heavy Shower Snow'
26223
26224			, id701: 'Mist'
26225			, id711: 'Smoke'
26226			, id721: 'Haze'
26227			, id731: 'Sand/Dust Whirls'
26228			, id741: 'Fog'
26229			, id751: 'Sand'
26230
26231			, id800: 'Sky is Clear'
26232			, id801: 'Few Clouds'
26233			, id802: 'Scattered Clouds'
26234			, id803: 'Broken Clouds'
26235			, id804: 'Overcast Clouds'
26236
26237			, id900: 'Tornado'
26238			, id901: 'Tropical Storm'
26239			, id902: 'Hurricane'
26240			, id903: 'Cold'
26241			, id904: 'Hot'
26242			, id905: 'Windy'
26243			, id906: 'Hail'
26244		},
26245		
26246		it: {
26247			owmlinktitle: 'Dettagli su OpenWeatherMap'
26248			, temperature: 'Temperatura'
26249			, temp_minmax: 'Temp. min / max '
26250			, wind: 'Vento'
26251			, gust: 'Raffica'
26252			, windforce: 'Forza del vento'
26253			, direction: 'Direzione'
26254			, rain_1h: 'Pioggia'
26255			, humidity: 'Umidità'
26256			, pressure: 'Pressione'
26257		
26258			// condizioni meteorologiche, consultare https://openweathermap.org/weather-conditions
26259			// Temporale
26260			, id200: 'Tempesta con pioggia debole'
26261			, id201: 'Tempesta di pioggia'
26262			, id202: 'Tempesta con forti piogge'
26263			, id210: 'Tempesta debole'
26264			, id211: 'Tempesta'
26265			, id212: 'Tempesta forte'
26266			, id221: 'Tempesta irregolare'
26267			, id230: 'Tempesta con deboli acquerugi'
26268			, id231: 'Tempesta con pioviggine'
26269			, id232: 'Tempesta con forte pioviggine'
26270
26271			// Pioggerella
26272			, id300: 'Debole pioviggine'
26273			, id301: 'Pioggerella'
26274			, id302: 'Forti acquerugi'
26275			, id310: 'Pioggia / leggera pioggerellina'
26276			, id311: 'Pioggia / pioviggine'
26277			, id312: 'Pioggia / pioviggine forte'
26278			, id321: 'Pioviggine intensa'
26279	
26280			// Pioggia
26281			, id500: 'Debole pioggia'
26282			, id501: 'Pioggia moderata'
26283			, id502: 'Pioggia forte'
26284			, id503: 'Pioggia molto forte'
26285			, id504: 'Pioggia estrema'
26286			, id511: 'Grandine'
26287			, id520: 'Pioggia leggera'
26288			, id521: 'Pioggia'
26289			, id522: 'Pioggia forte'
26290			, id531: 'pioggia irregolare'
26291		
26292			// neve
26293			, id600: 'Neve Debole'
26294			, id601: 'Neve'
26295			, id602: 'Forte nevicata'
26296			, id611: 'Nevischio'
26297			, id612: 'Nevischio moderato'
26298			, id615: 'Debole pioggia e neve'
26299			, id616: 'Pioggia e neve'
26300			, id620: 'Nevischio Leggero'
26301			, id621: 'Neve moderata'
26302			, id622: 'Forte nevicata'
26303
26304			// atmosfera
26305			, id701: 'Bruma'
26306			, id711: 'Fumo'
26307			, id721: 'Foschia'
26308			, id731: 'Vortici di sabbia/polvere'
26309			, id741: 'Nebbia'
26310			, id751: 'Sabbia'
26311			, id761: 'Polvere'
26312			, id762: 'Cenere vulcanica'
26313			, id771: 'Tempesta'
26314			, id781: 'Tornado'
26315
26316			// Nuvole
26317			, id800: 'Cielo sereno'
26318			, id801: 'Alcune nuvole'
26319			, id802: 'Nuvole sparse'
26320			, id803: 'Tempo nuvoloso'
26321			, id804: 'Nuvoloso'
26322
26323			// Estremo
26324			, id900: 'Tornado'
26325			, id901: 'Tempesta tropicale'
26326			, id902: 'Uragano'
26327			, id903: 'Molto freddo'
26328			, id904: 'Molto caldo'
26329			, id905: 'Ventoso'
26330			, id906: 'Forte grandine'
26331
26332			// aggiuntivo
26333			, id951: 'Calmo'
26334			, id952: 'Brezza leggera'
26335			, id953: 'Brezza sostenuta'
26336			, id954: 'Brezza moderata'
26337			, id955: 'Brezza fresca'
26338			, id956: 'Brezza forte'
26339			, id957: 'Vento forte, vicino a burrasca'
26340			, id958: 'Burrasca'
26341			, id959: 'Forte burrasca'
26342			, id960: 'Tempesta'
26343			, id961: 'Tempesta violenta'
26344			, id962: 'Uragano'
26345		},
26346		
26347		de: {
26348			owmlinktitle: 'Details bei OpenWeatherMap'
26349			, temperature: 'Temperatur'
26350			, temp_minmax: 'Temp. min/max'
26351			, wind: 'Wind'
26352			, gust: 'Windböen'
26353			, windforce: 'Windstärke'
26354			, direction: 'Windrichtung'
26355			, rain_1h: 'Regen'
26356			, humidity: 'Luftfeuchtigkeit'
26357			, pressure: 'Luftdruck'
26358
26359		// Wetterbedingungen, siehe https://openweathermap.org/weather-conditions
26360			, id200: 'Gewitter mit leichtem Regen' // 'Thunderstorm with Light Rain'
26361			, id201: 'Gewitter mit Regen' // 'Thunderstorm with Rain'
26362			, id202: 'Gewitter mit Starkregen' // 'Thunderstorm with Heavy Rain'
26363			, id210: 'Leichtes Gewitter' // 'Light Thunderstorm'
26364			, id211: 'Mäßiges Gewitter' // 'Thunderstorm'
26365			, id212: 'Starkes Gewitter' // 'Heavy Thunderstorm'
26366		//	, id221: 'Ragged Thunderstorm'
26367		//	, id230: 'Thunderstorm with Light Drizzle'
26368		//	, id231: 'Thunderstorm with Drizzle'
26369		//	, id232: 'Thunderstorm with Heavy Drizzle'
26370
26371			, id300: 'Leichter Nieselregen' // 'Light Intensity Drizzle'
26372			, id301: 'Nieselregen' // 'Drizzle'
26373			, id302: 'Starker Nieselregen' // 'Heavy Intensity Drizzle'
26374		//	, id310: 'Light Intensity Drizzle Rain'
26375		//	, id311: 'Drizzle Rain'
26376		//	, id312: 'Heavy Intensity Drizzle Rain'
26377		//	, id321: 'Shower Drizzle'
26378
26379			, id500: 'Leichter Regen' // 'Light Rain'
26380			, id501: 'Mäßiger Regen' // 'Moderate Rain'
26381			, id502: 'Starker Regen' // 'Heavy Intensity Rain'
26382			, id503: 'Ergiebiger Regen' // 'Very Heavy Rain'
26383			, id504: 'Starkregen' // 'Extreme Rain'
26384			, id511: 'Gefrierender Regen' // 'Freezing Rain'
26385			, id520: 'Leichte Regenschauer' // 'Light Intensity Shower Rain'
26386			, id521: 'Mäßige Regenschauer' // 'Shower Rain'
26387			, id522: 'Wolkenbruchartige Regenschauer' // 'Heavy Intensity Shower Rain'
26388
26389			, id600: 'Leichter Schneefall' // 'Light Snow'
26390			, id601: 'Mäßiger Schneefall' // 'Snow'
26391			, id602: 'Starker Schneefall' // 'Heavy Snow'
26392			, id611: 'Schneeregen' // 'Sleet'
26393			, id621: 'Schneeschauer' // 'Shower Snow'
26394			, id622: 'Starke Schneeschauer' // 'Heavy Shower Snow'
26395
26396			, id701: 'Dunst' // 'Mist'
26397			, id711: 'Rauch' // 'Smoke'
26398			, id721: 'Eingetrübt' // 'Haze'
26399			, id731: 'Sand-/Staubwirbel' // 'Sand/Dust Whirls'
26400			, id741: 'Nebel' // 'Fog'
26401			, id751: 'Sand' // 'Sand'
26402
26403			, id800: 'Wolkenlos' // 'Sky is Clear'
26404			, id800d: 'Sonnig' // 'Sky is Clear' at day
26405			, id800n: 'Klar' // 'Sky is Clear' at night
26406			, id801: 'Leicht bewölkt' // 'Few Clouds'
26407			, id802: 'Wolkig' // 'Scattered Clouds'
26408			, id803: 'Stark bewölkt' // 'Broken Clouds'
26409			, id804: 'Bedeckt' // 'Overcast Clouds'
26410
26411			, id900: 'Tornado' // 'Tornado'
26412			, id901: 'Tropischer Sturm' // 'Tropical Storm'
26413			, id902: 'Orkan' // 'Hurricane'
26414			, id903: 'Kälte' // 'Cold'
26415			, id904: 'Hitze' // 'Hot'
26416			, id905: 'Windig' // 'Windy'
26417			, id906: 'Hagel' // 'Hail'
26418		},
26419
26420		ru: {
26421			owmlinktitle: 'Информация в OpenWeatherMap'
26422			, temperature: 'Температура'
26423			, temp_minmax: 'Макс./Мин. темп'
26424			, wind: 'Ветер'
26425			, gust: 'Порывы'
26426			, windforce: 'Сила'
26427			, direction: 'Направление'
26428			, rain_1h: 'Дождь'
26429			, humidity: 'Влажность'
26430			, pressure: 'Давление'
26431
26432		// weather conditions, see https://openweathermap.org/weather-conditions
26433			, id200: 'Гроза с легким дождем' // 'Thunderstorm with Light Rain'
26434			, id201: 'Гроза с дождем' // 'Thunderstorm with Rain'
26435			, id202: 'Гроза с ливнем' // 'Thunderstorm with Heavy Rain'
26436			, id210: 'Легкая гроза' // 'Light Thunderstorm'
26437			, id211: 'Гроза' // 'Thunderstorm'
26438			, id212: 'Сильная гроза' // 'Heavy Thunderstorm'
26439			, id221: 'Прерывистая гроза' // 'Ragged Thunderstorm'
26440			, id230: 'Гроза с мелкой моросью' // 'Thunderstorm with Light Drizzle'
26441			, id231: 'Гроза с моросью' // 'Thunderstorm with Drizzle'
26442			, id232: 'Гроза с сильной моросью' // 'Thunderstorm with Heavy Drizzle'
26443
26444			, id300: 'Морось слабой интенсивности' // 'Light Intensity Drizzle'
26445			, id301: 'Морось' // 'Drizzle'
26446			, id302: 'Морось сильной интенсивности' // 'Heavy Intensity Drizzle'
26447			, id310: 'Малоинтенсивный моросящий дождь' // 'Light Intensity Drizzle Rain'
26448			, id311: 'Моросящий дождь' // 'Drizzle Rain'
26449			, id312: 'Сильноинтенсивный моросящий дождь' // 'Heavy Intensity Drizzle Rain'
26450			, id321: 'Проливной дождь' // 'Shower Drizzle'
26451
26452			, id500: 'Небольшой дождь' //'Light Rain'
26453			, id501: 'Дождь' // 'Moderate Rain'
26454			, id502: 'Сильный дождь' //'Heavy Intensity Rain'
26455			, id503: 'Очень сильный дождь' //'Very Heavy Rain'
26456			, id504: 'Сильный ливень' // 'Extreme Rain'
26457			, id511: 'Ледяной дождь' // 'Freezing Rain'
26458			, id520: 'Кратковременный слабый дождь' //'Light Intensity Shower Rain'
26459			, id521: 'Кратковременный дождь' //'Shower Rain'
26460			, id522: 'Кратковременный сильный дождь' //'Heavy Intensity Shower Rain'
26461
26462			, id600: 'Слабый снег' // 'Light Snow'
26463			, id601: 'Снег' // 'Snow'
26464			, id602: 'Сильный снег' // 'Heavy Snow'
26465			, id611: 'Снег с дождем' //'Sleet'
26466			, id621: 'Кратковременный снег' // 'Shower Snow'
26467			, id622: 'Кратковременный сильный снег' //'Heavy Shower Snow'
26468
26469			, id701: 'Мгла' // 'Mist'
26470			, id711: 'Смог' //'Smoke'
26471			, id721: 'Дымка' // 'Haze'
26472			, id731: 'Песочные/пыльевые вихри' // 'Sand/Dust Whirls'
26473			, id741: 'Туман' // 'Fog'
26474			, id751: 'Песок' // 'Sand'
26475
26476			, id800: 'Ясно' // 'Sky is Clear'
26477			, id801: 'Малооблачно' // 'Few Clouds'
26478			, id802: 'Переменная облачность' // 'Scattered Clouds'
26479			, id803: 'Облачно с прояснениями' // 'Broken Clouds'
26480			, id804: 'Облачно' // 'Overcast Clouds'
26481
26482			, id900: 'Торнадо' // 'Tornado'
26483			, id901: 'Тропический шторм' // 'Tropical Storm'
26484			, id902: 'Ураган' // 'Hurricane'
26485			, id903: 'Холод'//'Cold'
26486			, id904: 'Жара'//'Hot'
26487			, id905: 'Ветрено'//'Windy'
26488			, id906: 'Γрад' // 'Hail'
26489		},
26490
26491		fr: {
26492			owmlinktitle: 'Détails à OpenWeatherMap'
26493			, temperature: 'Température'
26494			, temp_minmax: 'Temp. min/max'
26495			, wind: 'Vent'
26496			, gust: 'Rafales'
26497			, windforce: 'Force du vent'
26498			, direction: 'Direction'
26499			, rain_1h: 'Pluie'
26500			, humidity: 'Humidité'
26501			, pressure: 'Pression'
26502
26503		// Les conditions météorologiques, voir https://openweathermap.org/weather-conditions
26504			, id200: 'Orage avec pluie légère' // 'Thunderstorm with Light Rain'
26505			, id201: 'Orage avec pluie' // 'Thunderstorm with Rain'
26506			, id202: 'Orage avec fortes précipitations' // 'Thunderstorm with Heavy Rain'
26507		//	, id210: 'Light Thunderstorm'
26508			, id211: 'Orage'
26509			, id212: 'Orage violent' // 'Heavy Thunderstorm'
26510		//	, id221: 'Ragged Thunderstorm'
26511			, id230: 'Orage avec bruine faible' // 'Thunderstorm with Light Drizzle'
26512			, id231: 'Orage avec bruine' // 'Thunderstorm with Drizzle'
26513		//	, id232: 'Thunderstorm with Heavy Drizzle'
26514
26515		//	, id300: 'Light Intensity Drizzle'
26516			, id301: 'Bruine' // 'Drizzle'
26517		//	, id302: 'Heavy Intensity Drizzle'
26518		//	, id310: 'Light Intensity Drizzle Rain'
26519		//	, id311: 'Drizzle Rain'
26520		//	, id312: 'Heavy Intensity Drizzle Rain'
26521		//	, id321: 'Shower Drizzle'
26522
26523			, id500: 'Pluie légère' // 'Light Rain'
26524			, id501: 'Pluie modérée' // 'Moderate Rain'
26525			, id502: 'Pluie battante' // 'Heavy Intensity Rain'
26526		//	, id503: 'Very Heavy Rain'
26527		//	, id504: 'Extreme Rain'
26528			, id511: 'Pluie verglassante' // 'Freezing Rain'
26529			, id520: 'Averses de pluie fine' // 'Light Intensity Shower Rain'
26530		//	, id521: 'Shower Rain'
26531		//	, id522: 'Heavy Intensity Shower Rain'
26532
26533			, id600: 'Légers flocons' // 'Light Snow'
26534			, id601: 'Neige' // 'Snow'
26535			, id602: 'Fortes chutes de neige' // 'Heavy Snow'
26536			, id611: 'Neige fondue' // 'Sleet'
26537			, id621: 'Averses de neige' // 'Shower Snow'
26538			, id622: 'Fortes chutes de neige' // 'Heavy Shower Snow'
26539
26540			, id701: 'Brume' // 'Mist'
26541			, id711: 'Fumée' // 'Smoke'
26542			, id721: 'Brume' // 'Haze'
26543			, id731: 'Tourbillons de sable/poussière' // 'Sand/Dust Whirls'
26544			, id741: 'Brouillard' // 'Fog'
26545		//	, id751: 'Sand'
26546
26547			, id800: 'Ciel dégagé' // 'Sky is Clear'
26548			, id801: 'Ciel voilé'
26549			, id802: 'Nuageux' // 'Scattered Clouds'
26550			, id803: 'Nuageux' // 'Broken Clouds'
26551			, id804: 'Ciel couvert' // 'Overcast Clouds'
26552
26553			, id900: 'Tornade' // 'Tornado'
26554			, id901: 'Tempête tropicale'// 'Tropical Storm'
26555			, id902: 'Ouragan' // 'Hurricane'
26556			, id903: 'Froid' // 'Cold'
26557			, id904: 'Chaleur' // 'Hot'
26558			, id905: 'Venteux' // 'Windy'
26559			, id906: 'Grêle' // 'Hail'
26560		},
26561
26562		nl: { //dutch translation
26563			owmlinktitle: 'Details op OpenWeatherMap'
26564			, temperature: 'Temperatuur'
26565			, temp_minmax: 'Temp. min/max'
26566			, wind: 'Wind'
26567			, gust: 'Windvlaag'
26568			, windforce: 'Windkracht'
26569			, direction: 'Richting'
26570			, rain_1h: 'Regen'
26571			, humidity: 'Luchtvochtigheid'
26572			, pressure: 'Luchtdruk'
26573
26574		// weeercondities, see https://openweathermap.org/weather-conditions
26575			, id200: 'Onweer met lichte regen'
26576			, id201: 'Onweer met met regen'
26577			, id202: 'Onweer met hevige regen'
26578			, id210: 'Lichte onweersbui'
26579			, id211: 'Onweersbui'
26580			, id212: 'Hevig onweer'
26581			, id221: 'Onregelmatige onweersbui'
26582			, id230: 'Onweer met licht motregen'
26583			, id231: 'Onweer met motregen'
26584			, id232: 'Onweer met hevige motregen'
26585
26586			, id300: 'Lichte motregen'
26587			, id301: 'Motregen'
26588			, id302: 'Hevige motregen'
26589			, id310: 'Lichte motregen / regen'
26590			, id311: 'Motregen / regen'
26591			, id312: 'Hevige motregen / regen'
26592			, id321: 'Douche motregen'
26593
26594			, id500: 'Lichte regen'
26595			, id501: 'Gematigde regen'
26596			, id502: 'Hevige regen'
26597			, id503: 'Erg hevige regen'
26598			, id504: 'Extreme regen'
26599			, id511: 'Hagel'
26600			, id520: 'Lichte miezerregen'
26601			, id521: 'Miezerregen'
26602			, id522: 'Hevige miezerregen'
26603
26604			, id600: 'Lichte sneeuwval'
26605			, id601: 'Sneeuw'
26606			, id602: 'Hevige sneeuwval'
26607			, id611: 'Ijzel'
26608			, id621: 'Douche sneeuw'
26609			, id622: 'Hevige douche sneeuw'
26610
26611			, id701: 'Mist'
26612			, id711: 'Rook'
26613			, id721: 'Nevel'
26614			, id731: 'Zand/stof werveling'
26615			, id741: 'Mist'
26616			, id751: 'Zand'
26617
26618			, id800: 'Onbewolkt'
26619			, id801: 'Licht bewolkt'
26620			, id802: 'Half bewolkt'
26621			, id803: 'Overwegend bewolkt'
26622			, id804: 'Bewolkt'
26623
26624			, id900: 'Tornado'
26625			, id901: 'Tropische Storm'
26626			, id902: 'Orkaan'
26627			, id903: 'Koud'
26628			, id904: 'Heet'
26629			, id905: 'Winderig'
26630			, id906: 'Hagel'
26631		},
26632
26633		es: { //spanish translation
26634			owmlinktitle: 'Detalles en OpenWeatherMap'
26635			, temperature: 'Temperatura'
26636			, temp_minmax: 'Temp. mín/máx'
26637			, wind: 'Viento'
26638			, gust: 'Ráfagas'
26639			, windforce: 'Fuerza del viento'
26640			, direction: 'Dirección'
26641			, rain_1h: 'Lluvia'
26642			, humidity: 'Humedad'
26643			, pressure: 'Presión'
26644
26645		// weather conditions, see https://openweathermap.org/weather-conditions
26646			// Thunderstorm
26647			, id200: 'Tormenta con lluvia débil'
26648			, id201: 'Tormenta con lluvia'
26649			, id202: 'Tormenta con lluvia fuerte'
26650			, id210: 'Tormenta débil'
26651			, id211: 'Tormenta'
26652			, id212: 'Tormenta fuerte'
26653			, id221: 'Tormenta irregular'
26654			, id230: 'Tormenta con llovizna débil'
26655			, id231: 'Tormenta con llovizna'
26656			, id232: 'Tormenta con llovizna fuerte'
26657
26658			// Drizzle
26659			, id300: 'Llovizna débil'
26660			, id301: 'Llovizna'
26661			, id302: 'Llovizna fuerte'
26662			, id310: 'Lluvia/llovizna débil'
26663			, id311: 'Lluvia/llovizna'
26664			, id312: 'Lluvia/llovizna fuerte'
26665			, id321: 'Chubasco de llovizna'
26666
26667			// Rain
26668			, id500: 'Lluvia débil'
26669			, id501: 'Lluvia moderada'
26670			, id502: 'Lluvia fuerte'
26671			, id503: 'Lluvia muy fuerte'
26672			, id504: 'Lluvia extrema'
26673			, id511: 'Granizo'
26674			, id520: 'Chubasco de lluvia débil'
26675			, id521: 'Chubasco de lluvia'
26676			, id522: 'Chubasco de lluvia fuerte'
26677			, id531: 'Chubasco de lluvia irregular'
26678
26679			// Snow
26680			, id600: 'Nieve débil'
26681			, id601: 'Nieve'
26682			, id602: 'Nieve fuerte'
26683			, id611: 'Aguanieve'
26684			, id612: 'Chubasco de aguanieve'
26685			, id615: 'Lluvia y nieve débiles'
26686			, id616: 'Lluvia y nieve'
26687			, id620: 'Chubasco de nieve débil'
26688			, id621: 'Chubasco de nieve'
26689			, id622: 'Chubasco de nieve fuerte'
26690
26691			// Atmosphere
26692			, id701: 'Bruma'
26693			, id711: 'Humo'
26694			, id721: 'Neblina'
26695			, id731: 'Torbellinos de arena/polvo'
26696			, id741: 'Niebla'
26697			, id751: 'Arena'
26698			, id761: 'Polvo'
26699			, id762: 'Ceniza volcánica'
26700			, id771: 'Tempestad'
26701			, id781: 'Tornado'
26702
26703			// Clouds
26704			, id800: 'Cielo despejado'
26705			, id801: 'Algunas nubes'
26706			, id802: 'Nubes dispersas'
26707			, id803: 'Intérvalos nubosos'
26708			, id804: 'Nublado'
26709
26710			// Extreme
26711			, id900: 'Tornado'
26712			, id901: 'Tormenta tropical'
26713			, id902: 'Huracán'
26714			, id903: 'Bajas temperaturas'
26715			, id904: 'Altas temperaturas'
26716			, id905: 'Ventoso'
26717			, id906: 'Granizo'
26718
26719			// Additional
26720			, id951: 'Calma'
26721			, id952: 'Brisa ligera'
26722			, id953: 'Brisa suave'
26723			, id954: 'Brisa moderada'
26724			, id955: 'Brisa fresca'
26725			, id956: 'Brisa fuerte'
26726			, id957: 'Viento fuerte, próximo a vendaval'
26727			, id958: 'Vendaval'
26728			, id959: 'Vendaval fuerte'
26729			, id960: 'Tempestad'
26730			, id961: 'Tempestad violenta'
26731			, id962: 'Huracán'
26732		},
26733
26734		ca: { //catalan translation
26735			owmlinktitle: 'Detalls en OpenWeatherMap'
26736			, temperature: 'Temperatura'
26737			, temp_minmax: 'Temp. mín/màx'
26738			, wind: 'Vent'
26739			, gust: 'Ràfegues'
26740			, windforce: 'Força del vent'
26741			, direction: 'Direcció'
26742			, rain_1h: 'Pluja'
26743			, humidity: 'Humitat'
26744			, pressure: 'Pressió'
26745
26746		// weather conditions, see https://openweathermap.org/weather-conditions
26747			// Thunderstorm
26748			, id200: 'Tempesta amb pluja feble'
26749			, id201: 'Tempesta amb pluja'
26750			, id202: 'Tempesta amb pluja forta'
26751			, id210: 'Tempesta feble'
26752			, id211: 'Tempesta'
26753			, id212: 'Tempesta forta'
26754			, id221: 'Tempesta irregular'
26755			, id230: 'Tempesta amb plugim feble'
26756			, id231: 'Tempesta amb plugim'
26757			, id232: 'Tempesta amb plugim fort'
26758
26759			// Drizzle
26760			, id300: 'Plugim feble'
26761			, id301: 'Plugim'
26762			, id302: 'Plugim fort'
26763			, id310: 'Pluja/plugim feble'
26764			, id311: 'Pluja/plugim'
26765			, id312: 'Pluja/plugim fort'
26766			, id321: 'Ruixat de plugim'
26767
26768			// Rain
26769			, id500: 'Pluja feble'
26770			, id501: 'Pluja moderada'
26771			, id502: 'Pluja forta'
26772			, id503: 'Pluja molt forta'
26773			, id504: 'Pluja extrema'
26774			, id511: 'Calabruix'
26775			, id520: 'Ruixat de pluja feble'
26776			, id521: 'Ruixat de pluja'
26777			, id522: 'Ruixat de pluja fort'
26778			, id531: 'Ruixat de pluja irregular'
26779
26780			// Snow
26781			, id600: 'Neu feble'
26782			, id601: 'Neu'
26783			, id602: 'Neu forta'
26784			, id611: 'Aiguaneu'
26785			, id612: 'Ruixat de aguanieve'
26786			, id615: 'Pluja i neu febles'
26787			, id616: 'Pluja i neu'
26788			, id620: 'Ruixat de neu feble'
26789			, id621: 'Ruixat de neu'
26790			, id622: 'Ruixat de neu fort'
26791
26792			// Atmosphere
26793			, id701: 'Bruma'
26794			, id711: 'Fum'
26795			, id721: 'Boirina'
26796			, id731: 'Torbellinos de arena/polvo'
26797			, id741: 'Boira'
26798			, id751: 'Sorra'
26799			, id761: 'Pols'
26800			, id762: 'Cendra volcànica'
26801			, id771: 'Tempestat'
26802			, id781: 'Tornado'
26803
26804			// Clouds
26805			, id800: 'Cel clar'
26806			, id801: 'Alguns núvols'
26807			, id802: 'Núvols dispersos'
26808			, id803: 'Intervals nuvolosos'
26809			, id804: 'Ennuvolat'
26810
26811			// Extreme
26812			, id900: 'Tornado'
26813			, id901: 'Tempesta tropical'
26814			, id902: 'Huracà'
26815			, id903: 'Temperatures baixes'
26816			, id904: 'Temperatures altes'
26817			, id905: 'Ventós'
26818			, id906: 'Calabruix'
26819
26820			// Additional
26821			, id951: 'Calma'
26822			, id952: 'Brisa lleugera'
26823			, id953: 'Brisa suau'
26824			, id954: 'Brisa moderada'
26825			, id955: 'Brisa fresca'
26826			, id956: 'Brisa forta'
26827			, id957: 'Vent fort, pròxim a vendaval'
26828			, id958: 'Ventada'
26829			, id959: 'Ventada forta'
26830			, id960: 'Tempesta'
26831			, id961: 'Tempesta violenta'
26832			, id962: 'Huracà'
26833		},
26834		pt_br: { //brazillian translation
26835			owmlinktitle: 'Detalhes em OpenWeatherMap'
26836			, temperature: 'Temperatura'
26837			, temp_minmax: 'Temp. min/max'
26838			, wind: 'Vento'
vendor: 5,792 bytes, lines 26839-27021
26839			, gust: 'Rajadas'
26840			, windforce: 'Força do Vento'
26841			, direction: 'Direção'
26842			, rain_1h: 'Chuva'
26843			, humidity: 'Umidade'
26844			, pressure: 'Pressão'
26845
26846		// weather conditions, see https://openweathermap.org/weather-conditions
26847			, id200: 'Trovoadas com chuva fraca'
26848			, id201: 'Trovoadas com chuva'
26849			, id202: 'Trovoadas com chuva forte'
26850			, id210: 'Trovoadas leves'
26851			, id211: 'Trovoadas'
26852			, id212: 'Trovoadas fortes'
26853			, id221: 'Trovoadas irregulares'
26854			, id230: 'Trovoadas com garoa fraca'
26855			, id231: 'Trovoadas com garoa'
26856			, id232: 'Trovoadas com garoa forte'
26857
26858			, id300: 'Garoa de fraca intensidade'
26859			, id301: 'Garoa'
26860			, id302: 'Garoa de forte intensidade'
26861			, id310: 'Chuva com garoa de fraca intensidade'
26862			, id311: 'Chuva com garoa'
26863			, id312: 'Chuva com garoa de forte intensidade'
26864			, id321: 'Garoa persistente'
26865
26866			, id500: 'Chuva fraca'
26867			, id501: 'Chuva'
26868			, id502: 'Chuva forte'
26869			, id503: 'Chuva muito forte'
26870			, id504: 'Chuva extrema'
26871			, id511: 'Chuva de granizo'
26872			, id520: 'Aguaceiro de chuva fraco'
26873			, id521: 'Aguaceiro de chuva'
26874			, id522: 'Aguaceiro de chuva forte'
26875
26876			, id600: 'Neve fraca'
26877			, id601: 'Neve'
26878			, id602: 'Neve forte'
26879			, id611: 'Chuva com neve'
26880			, id621: 'Aguaceiro de neve'
26881			, id622: 'Aguaceiro de neve forte'
26882
26883			, id701: 'Névoa'
26884			, id711: 'Fumaça'
26885			, id721: 'Bruma'
26886			, id731: 'Redemoinhos de Areia/Poeira'
26887			, id741: 'Neblina'
26888			, id751: 'Areia'
26889
26890			, id800: 'Ceu está limpo'
26891			, id801: 'Poucas nuvens'
26892			, id802: 'Nuvens dispersas'
26893			, id803: 'Cirros'
26894			, id804: 'Nublado'
26895
26896			, id900: 'Tornado'
26897			, id901: 'Tempestade tropical'
26898			, id902: 'Furacão'
26899			, id903: 'Frio'
26900			, id904: 'Calor'
26901			, id905: 'Ventania'
26902			, id906: 'Granizo'
26903		}
26904	}
26905};
26906
26907
26908/***/ }),
26909
26910/***/ 46660:
26911/***/ (() => {
26912
26913/**
26914 * leaflet-pegman
26915 *
26916 * @author    Raruto
26917 * @license   GPL-3.0+
26918 * @link https://github.com/Raruto/leaflet-pegman
26919 * @desc Leaflet plugin that allows an easy integration with the Google StreetView Service API
26920 */
26921L.Control.Pegman = L.Control.extend({
26922	includes: L.Evented ? L.Evented.prototype : L.Mixin.Events,
26923	options: {
26924		position: 'bottomright',
26925		theme: "leaflet-pegman-v3-default", // or "leaflet-pegman-v3-small"
26926		debug: false,
26927		apiKey: '',
26928		libraries: '',
26929		mutant: {
26930			attribution: 'Map data: &copy; <a href="https://www.google.com/intl/en/help/terms_maps.html">Google</a>',
26931			pane: "overlayPane",
26932			type: null, // Non-image map type (used to force a transparent background)
26933		},
26934		pano: {
26935			enableCloseButton: true,
26936			fullscreenControl: false,
26937			imageDateControl: true
26938		},
26939		marker: {
26940			draggable: true,
26941			icon: L.icon({
26942				className: "pegman-marker",
26943				iconSize: [52, 52],
26944				iconAnchor: [24, 33],
26945				iconUrl: 'data:image/png;base64,' + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAFElEQVR4XgXAAQ0AAABAMP1L30IDCPwC/o5WcS4AAAAASUVORK5CYII=",
26946			}),
26947		}
26948	},
26949
26950	__interactURL: 'https://unpkg.com/[email protected]/dist/interact.min.js',
26951	__gmapsURL: 'https://maps.googleapis.com/maps/api/js?v=3',
26952	__mutantURL: 'https://unpkg.com/[email protected]/Leaflet.GoogleMutant.js',
26953
26954	initialize: function(options) {
26955
26956		if (typeof options.logging !== "undefined") options.debug = options.logging;
26957
26958		L.Util.setOptions(this, options);
26959
26960		// Grab Left/Right/Up/Down Direction of Mouse for Pegman Image
26961		this._mousePos = {
26962			direction: {},
26963			old: {},
26964		};
26965
26966		this._pegmanMarkerCoords = null;
26967		this._streetViewCoords = null;
26968		this._streetViewLayerEnabled = false;
26969
26970		this._dropzoneMapOpts = {
26971			accept: '.draggable', // Only Accept Elements Matching this CSS Selector
26972			overlap: 0.75, // Require a 75% Element Overlap for a Drop to be Possible
26973			ondropactivate: L.bind(this.onDropZoneActivated, this),
26974			ondragenter: L.bind(this.onDropZoneDragEntered, this),
26975			ondragleave: L.bind(this.onDropZoneDragLeaved, this),
26976			ondrop: L.bind(this.onDropZoneDropped, this),
26977			ondropdeactivate: L.bind(this.onDropZoneDeactivated, this),
26978		};
26979		this._draggableMarkerOpts = {
26980			inertia: false,
26981			onmove: L.bind(this.onDraggableMove, this),
26982			onend: L.bind(this.onDraggableEnd, this),
26983		};
26984
26985		this._lazyLoaderAdded = false;
26986	},
26987
26988	onAdd: function(map) {
26989		this._map = map;
26990
26991		this._container = L.DomUtil.create('div', 'leaflet-pegman pegman-control leaflet-bar');
26992		this._pegman = L.DomUtil.create('div', 'pegman draggable drag-drop', this._container);
26993		this._pegmanButton = L.DomUtil.create('div', 'pegman-button', this._container);
26994		this._pegmanMarker = L.marker([0, 0], this.options.marker);
26995		this._panoDiv = this.options.panoDiv ? document.querySelector(this.options.panoDiv) : L.DomUtil.create('div', '', this._map._container);
26996
26997		L.DomUtil.addClass(this._panoDiv, 'pano-canvas');
26998		L.DomUtil.addClass(this._map._container, this.options.theme);
26999
27000		L.DomEvent.disableClickPropagation(this._panoDiv);
27001		// L.DomEvent.on(this._container, 'click mousedown touchstart dblclick', this._disableClickPropagation, this);
27002		L.DomEvent.on(this._container, 'click mousedown dblclick', this._disableClickPropagation, this);
27003
27004		this._container.addEventListener('touchstart', this._loadScripts.bind(this, !L.Browser.touch), { once: true });
27005		this._container.addEventListener('mousedown', this._loadScripts.bind(this, true), { once: true });
27006		this._container.addEventListener('mouseover', this._loadScripts.bind(this, false), { once: true });
27007
27008		this._loadInteractHandlers();
27009		this._loadGoogleHandlers();
27010
27011		L.DomEvent.on(document, 'mousemove', this.mouseMoveTracking, this);
27012		L.DomEvent.on(document, 'keyup', this.keyUpTracking, this);
27013
27014		this._pegmanMarker.on("dragend", this.onPegmanMarkerDragged, this);
27015		this._map.on("click", this.onMapClick, this);
27016		this._map.on("layeradd", this.onMapLayerAdd, this);
27017
27018		return this._container;
27019	},
27020
27021	onRemove: function(map) {
vendor: 16,907 bytes, lines 27021-27555
27021
27022		if (this._googleStreetViewLayer) this._googleStreetViewLayer.remove();
27023		if (this._pegmanMarker) this._pegmanMarker.remove();
27024
27025		L.DomUtil.remove(this._panoDiv);
27026
27027		L.DomEvent.off(document, 'mousemove', this.mouseMoveTracking, this);
27028		L.DomEvent.off(document, 'keyup', this.keyUpTracking, this);
27029
27030		map.off("mousemove", this._setMouseCursor, this);
27031	},
27032
27033	_log: function(args) {
27034		if (this.options.debug) {
27035			console.log(args);
27036		}
27037	},
27038
27039	_addClasses: function(el, classNames) {
27040		classNames = classNames.split(" ");
27041		for (var s in classNames) {
27042			L.DomUtil.addClass(el, classNames[s]);
27043		}
27044	},
27045
27046	_removeClasses: function(el, classNames) {
27047		classNames = classNames.split(" ");
27048		for (var s in classNames) {
27049			L.DomUtil.removeClass(el, classNames[s]);
27050		}
27051	},
27052
27053	_removeAttributes: function(el, attrNames) {
27054		for (var a in attrNames) {
27055			el.removeAttribute(attrNames[a]);
27056		}
27057	},
27058
27059	_insertAfter: function(targetNode, newNode) {
27060		targetNode.parentNode.insertBefore(newNode, targetNode.nextSibling);
27061	},
27062
27063	_translateElement: function(el, dx, dy) {
27064		if (dx === false && dy === false) {
27065			this._removeAttributes(this._pegman, ["style", "data-x", "data-y"]);
27066		}
27067		// Element's position is preserved within the data-x/data-y attributes
27068		var x = (parseFloat(el.getAttribute('data-x')) || 0) + dx;
27069		var y = (parseFloat(el.getAttribute('data-y')) || 0) + dy;
27070
27071		// Translate element
27072		el.style.webkitTransform = el.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
27073
27074		// Update position attributes
27075		el.setAttribute('data-x', x);
27076		el.setAttribute('data-y', y);
27077	},
27078
27079	_updateClasses: function(action) {
27080		switch (action) {
27081			case "pegman-dragging":
27082				this._removeClasses(this._pegman, "dropped");
27083				this._addClasses(this._container, "dragging");
27084				break;
27085			case "pegman-dragged":
27086				this._removeClasses(this._pegman, "can-drop dragged left right active dropped");
27087				this._removeAttributes(this._pegman, ["style", "data-x", "data-y"]);
27088				break;
27089			case "dropzone-actived":
27090				this._addClasses(this._map._container, "drop-active");
27091				break;
27092			case "dropzone-drag-entered":
27093				this._addClasses(this._pegman, "active can-drop");
27094				this._addClasses(this._map._container, "drop-target");
27095				break;
27096			case "dropzone-drag-leaved":
27097				this._removeClasses(this._map._container, "drop-target");
27098				this._removeClasses(this._pegman, "can-drop");
27099				break;
27100			case "dropzone-drop":
27101				this._removeClasses(this._container, "dragging");
27102				this._removeClasses(this._pegman, "active left right");
27103				this._addClasses(this._pegman, "dropped");
27104				this._removeClasses(this._pegman, "can-drop dragged left right active dropped");
27105				break;
27106			case "dropzone-deactivated":
27107				this._removeClasses(this._pegman, "active left right");
27108				this._removeClasses(this._map._container, "drop-active drop-target");
27109				break;
27110			case "mousemove-top":
27111				this._addClasses(this._pegman, "top");
27112				this._removeClasses(this._pegman, "bottom right left");
27113				break;
27114			case "mousemove-bottom":
27115				this._addClasses(this._pegman, "bottom");
27116				this._removeClasses(this._pegman, "top right left");
27117				break;
27118			case "mousemove-left":
27119				this._addClasses(this._pegman, "left");
27120				this._removeClasses(this._pegman, "right top bottom");
27121				break;
27122			case "mousemove-right":
27123				this._addClasses(this._pegman, "right");
27124				this._removeClasses(this._pegman, "left top bottom");
27125				break;
27126			case "pegman-added":
27127				this._addClasses(this._container, "active");
27128				break;
27129			case "pegman-removed":
27130				this._removeClasses(this._container, "active");
27131				break;
27132			case "streetview-shown":
27133				this._addClasses(this._container, "streetview-layer-active");
27134				break;
27135			case "streetview-hidden":
27136				this._removeClasses(this._container, "streetview-layer-active");
27137				break;
27138			default:
27139				throw "Unhandled event:" + action;
27140		}
27141		this.fire("svpc_" + action);
27142	},
27143
27144	onDraggableMove: function(e) {
27145		this.mouseMoveTracking(e);
27146		this.pegmanRemove();
27147		this._updateClasses("pegman-dragging");
27148		this._translateElement(this._pegman, e.dx, e.dy);
27149	},
27150
27151	onDraggableEnd: function(e) {
27152		this._pegmanMarkerCoords = this._map.mouseEventToLatLng(e);
27153		this.pegmanAdd();
27154		this.findStreetViewData(this._pegmanMarkerCoords.lat, this._pegmanMarkerCoords.lng);
27155		this._updateClasses("pegman-dragged");
27156	},
27157
27158	onDropZoneActivated: function(e) {
27159		this._updateClasses("dropzone-actived");
27160	},
27161
27162	onDropZoneDragEntered: function(e) {
27163		this.showStreetViewLayer();
27164		this._updateClasses("dropzone-drag-entered");
27165	},
27166
27167	onDropZoneDragLeaved: function(e) {
27168		this._updateClasses("dropzone-drag-leaved");
27169	},
27170
27171	onDropZoneDropped: function(e) {
27172		this._updateClasses("dropzone-drop");
27173		this._translateElement(this._pegman, false, false);
27174	},
27175
27176	onDropZoneDeactivated: function(e) {
27177		this._updateClasses("dropzone-deactivated");
27178	},
27179
27180	onPegmanMarkerDragged: function(e) {
27181		this._pegmanMarkerCoords = this._pegmanMarker.getLatLng();
27182		this.findStreetViewData(this._pegmanMarkerCoords.lat, this._pegmanMarkerCoords.lng);
27183	},
27184
27185	onMapClick: function(e) {
27186		if (this._streetViewLayerEnabled) {
27187			this.findStreetViewData(e.latlng.lat, e.latlng.lng);
27188		}
27189	},
27190
27191	onMapLayerAdd: function(e) {
27192		if (this._googleStreetViewLayer)
27193			this._googleStreetViewLayer.bringToFront();
27194	},
27195
27196	onStreetViewPanoramaClose: function() {
27197		this.clear();
27198	},
27199
27200	onPanoramaPositionChanged: function() {
27201		var pos = this._panorama.getPosition();
27202		pos = L.latLng(pos.lat(), pos.lng());
27203		if (this._map && !this._map.getBounds().pad(-0.05).contains(pos)) {
27204			this._map.panTo(pos);
27205		}
27206		this._pegmanMarker.setLatLng(pos);
27207	},
27208
27209	onPanoramaPovChanged: function() {
27210		var pov = this._panorama.getPov();
27211		this._pegmanMarker.getElement().style.backgroundPosition = "0 " + -Math.abs((Math.round(pov.heading / (360 / 16)) % 16) * Math.round(835 / 16)) + 'px'; // sprite_height = 835px; num_rows = 16; pegman_angle = [0, 360] deg
27212	},
27213
27214	clear: function() {
27215		this.pegmanRemove();
27216		this.hideStreetViewLayer();
27217		this.closeStreetViewPanorama();
27218	},
27219
27220	toggleStreetViewLayer: function(e) {
27221		if (this._streetViewLayerEnabled) this.clear();
27222		else this.showStreetViewLayer();
27223		this._log("streetview-layer-toggled");
27224	},
27225
27226	pegmanAdd: function() {
27227		this._pegmanMarker.addTo(this._map);
27228		this._pegmanMarker.setLatLng(this._pegmanMarkerCoords);
27229		this.findStreetViewData(this._pegmanMarkerCoords.lat, this._pegmanMarkerCoords.lng);
27230		this._updateClasses("pegman-added");
27231	},
27232
27233	pegmanRemove: function() {
27234		this._pegmanMarker.removeFrom(this._map);
27235		this._updateClasses("pegman-removed");
27236	},
27237
27238	closeStreetViewPanorama: function() {
27239		this._panoDiv.style.display = "none";
27240	},
27241
27242	openStreetViewPanorama: function() {
27243		this._panoDiv.style.display = "block";
27244	},
27245
27246	hideStreetViewLayer: function() {
27247		if (this._googleStreetViewLayer) {
27248			this._googleStreetViewLayer.removeFrom(this._map);
27249			this._streetViewLayerEnabled = false;
27250			this._updateClasses("streetview-hidden");
27251		}
27252	},
27253
27254	showStreetViewLayer: function() {
27255		if (this._googleStreetViewLayer) {
27256			this._googleStreetViewLayer.addTo(this._map);
27257			this._streetViewLayerEnabled = true;
27258			this._updateClasses("streetview-shown");
27259		}
27260	},
27261
27262	findStreetViewData: function(lat, lng) {
27263		if (typeof google === 'undefined') {
27264			this._loadScripts(true)
27265			return this.once('svpc_streetview-shown', L.bind(this.findStreetViewData, this, lat, lng));
27266		}
27267
27268		if (!this._pegmanMarker._map && this._map) {
27269			this._pegmanMarkerCoords = L.latLng(lat, lng);
27270			return this.pegmanAdd();
27271		}
27272
27273		// var searchRadiusPx = 24,
27274		// 	latlng = L.latLng(lat, lng),
27275		// 	p = this._map.project(latlng).add([searchRadiusPx, 0]),
27276		// 	searchRadius = latlng.distanceTo(this._map.unproject(p));
27277
27278		this._streetViewCoords = new google.maps.LatLng(lat, lng);
27279
27280		var zoom = this._map.getZoom();
27281		var searchRadius = 100;
27282
27283		if (zoom < 6) searchRadius = 5000;
27284		else if (zoom < 10) searchRadius = 500;
27285		else if (zoom < 15) searchRadius = 250;
27286		else if (zoom >= 17) searchRadius = 50;
27287		else searchRadius = 100;
27288
27289		this._streetViewService.getPanoramaByLocation(this._streetViewCoords, searchRadius, L.bind(this.processStreetViewServiceData, this));
27290	},
27291
27292	processStreetViewServiceData: function(data, status) {
27293		if (status == google.maps.StreetViewStatus.OK) {
27294			this.openStreetViewPanorama();
27295			this._panorama.setPano(data.location.pano);
27296			this._panorama.setPov({
27297				heading: google.maps.geometry.spherical.computeHeading(data.location.latLng, this._streetViewCoords),
27298				pitch: 0,
27299				zoom: 0
27300			});
27301			this._panorama.setVisible(true);
27302		} else {
27303			console.warn("Street View data not found for this location.");
27304			// this.clear(); // TODO: add a visual feedback when no SV data available
27305		}
27306	},
27307
27308	/**
27309	 * mouseMoveTracking
27310	 * @desc internal function used to style pegman while dragging
27311	 */
27312	mouseMoveTracking: function(e) {
27313		var mousePos = this._mousePos;
27314
27315		// Top <--> Bottom
27316		if (e.pageY < mousePos.old.y) {
27317			mousePos.direction.y = 'top';
27318			this._updateClasses("mousemove-top");
27319		} else if (e.pageY > mousePos.old.y) {
27320			mousePos.direction.y = 'bottom';
27321			this._updateClasses("mousemove-bottom");
27322		}
27323		// Left <--> Right
27324		if (e.pageX < mousePos.old.x) {
27325			mousePos.direction.x = 'left';
27326			this._updateClasses("mousemove-left");
27327		} else if (e.pageX > mousePos.old.x) {
27328			mousePos.direction.x = 'right';
27329			this._updateClasses("mousemove-right");
27330		}
27331
27332		mousePos.old.x = e.pageX;
27333		mousePos.old.y = e.pageY;
27334	},
27335
27336	/**
27337	 * keyUpTracking
27338	 * @desc internal function used to track keyup events
27339	 */
27340	keyUpTracking: function(e) {
27341		if (e.keyCode == 27) {
27342			this._log('escape pressed');
27343			this.clear();
27344		}
27345	},
27346
27347	_disableClickPropagation: function(e) {
27348		L.DomEvent.stopPropagation(e);
27349		L.DomEvent.preventDefault(e);
27350	},
27351
27352	_loadGoogleHandlers: function(toggleStreetView) {
27353		if (typeof google !== 'object' || typeof google.maps !== 'object' || typeof L.GridLayer.GoogleMutant !== 'function') return;
27354		this._initGoogleMaps(toggleStreetView);
27355		this._initMouseTracker();
27356	},
27357
27358	_initGoogleMaps: function(toggleStreetView) {
27359		this._googleStreetViewLayer = L.gridLayer.googleMutant(this.options.mutant);
27360		this._googleStreetViewLayer.addGoogleLayer('StreetViewCoverageLayer');
27361
27362		this._panorama = new google.maps.StreetViewPanorama(this._panoDiv, this.options.pano);
27363		this._streetViewService = new google.maps.StreetViewService();
27364
27365		this._panorama.addListener('closeclick', L.bind(this.onStreetViewPanoramaClose, this));
27366		this._panorama.addListener('position_changed', L.bind(this.onPanoramaPositionChanged, this));
27367		this._panorama.addListener('pov_changed', L.bind(this.onPanoramaPovChanged, this));
27368
27369		if (toggleStreetView) {
27370			this.showStreetViewLayer();
27371		}
27372	},
27373
27374	_initMouseTracker: function() {
27375		if (!this._googleStreetViewLayer) return;
27376
27377		var tileSize = this._googleStreetViewLayer.getTileSize();
27378
27379		this.tileWidth = tileSize.x;
27380		this.tileHeight = tileSize.y;
27381
27382		this.defaultDraggableCursor = this._map._container.style.cursor;
27383
27384		this._map.on("mousemove", this._setMouseCursor, this);
27385	},
27386
27387	_setMouseCursor: function(e) {
27388		var coords = this._getTileCoords(e.latlng.lat, e.latlng.lng, this._map.getZoom());
27389		var img = this._getTileImage(coords);
27390		var pixel = this._getTilePixelPoint(img, e.originalEvent);
27391		var hasTileData = this._hasTileData(img, pixel);
27392		this._map._container.style.cursor = hasTileData ? 'pointer' : this.defaultDraggableCursor;
27393	},
27394
27395	_getTileCoords: function(lat, lon, zoom) {
27396		var xtile = parseInt(Math.floor((lon + 180) / 360 * (1 << zoom)));
27397		var ytile = parseInt(Math.floor((1 - Math.log(Math.tan(this._toRad(lat)) + 1 / Math.cos(this._toRad(lat))) / Math.PI) / 2 * (1 << zoom)));
27398		return {
27399			x: xtile,
27400			y: ytile,
27401			z: zoom,
27402		};
27403	},
27404
27405	_getTileImage: function(coords) {
27406		if (!this._googleStreetViewLayer || !this._googleStreetViewLayer._tiles) return;
27407		var key = this._googleStreetViewLayer._tileCoordsToKey(coords);
27408		var tile = this._googleStreetViewLayer._tiles[key];
27409		if (!tile) return;
27410		var img = tile.el.querySelector('img');
27411		if (!img) return;
27412		this._downloadTile(img.src, this._tileLoaded); // crossOrigin = "Anonymous"
27413		return img;
27414	},
27415
27416	_getTilePixelPoint: function(img, e) {
27417		if (!img) return;
27418		var imgRect = img.getBoundingClientRect();
27419		var imgPos = {
27420			pageY: (imgRect.top + window.scrollY).toFixed(0),
27421			pageX: (imgRect.left + window.scrollX).toFixed(0)
27422		};
27423		var mousePos = {
27424			x: e.pageX - imgPos.pageX,
27425			y: e.pageY - imgPos.pageY
27426		};
27427		return mousePos;
27428	},
27429
27430	_hasTileData: function(img, pixelPoint) {
27431		if (!this.tileContext || !pixelPoint) return;
27432		var pixelData = this.tileContext.getImageData(pixelPoint.x, pixelPoint.y, 1, 1).data;
27433		var alpha = pixelData[3];
27434		var hasTileData = (alpha != 0);
27435		return hasTileData;
27436	},
27437
27438	_toRad: function(number) {
27439		return number * Math.PI / 180;
27440	},
27441
27442	_downloadTile: function(imageSrc, callback) {
27443		if (!imageSrc) return;
27444		var img = new Image();
27445		img.crossOrigin = "Anonymous";
27446		img.addEventListener("load", callback.bind(this, img), false);
27447		img.src = imageSrc;
27448	},
27449
27450	_tileLoaded: function(img) {
27451		this.tileCanvas = document.createElement("canvas");
27452		this.tileContext = this.tileCanvas.getContext("2d");
27453
27454		this.tileCanvas.width = this.tileWidth;
27455		this.tileCanvas.height = this.tileHeight;
27456
27457		this.tileContext.drawImage(img, 0, 0);
27458	},
27459
27460	_loadInteractHandlers: function() {
27461		// TODO: trying to replace "interact.js" with default "L.Draggable" object
27462		// var draggable = new L.Draggable(this._container);
27463		// draggable.enable();
27464		// draggable.on('drag', function(e) { console.log(e); });
27465		if (typeof interact !== 'function') return;
27466
27467		// Enable Draggable Element to be Dropped into Map Container
27468		this._draggable = interact(this._pegman).draggable(this._draggableMarkerOpts);
27469		this._dropzone = interact(this._map._container).dropzone(this._dropzoneMapOpts);
27470
27471		this._draggable.styleCursor(false);
27472
27473		// Toggle on/off SV Layer on Pegman's Container single clicks
27474		interact(this._container).on("tap", L.bind(this.toggleStreetViewLayer, this));
27475
27476		// Prevent map drags (Desktop / Mobile) while dragging pegman control
27477		L.DomEvent.on(this._container, "touchstart", function(e) { this._map.dragging.disable(); }, this);
27478		L.DomEvent.on(this._container, "touchend", function(e) { this._map.dragging.enable(); }, this);
27479	},
27480
27481	_loadScripts: function(toggleStreetView) {
27482		if (this._lazyLoaderAdded) return;
27483		this._lazyLoaderAdded = true;
27484
27485		this._loadJS(this.__interactURL, this._loadInteractHandlers.bind(this), typeof interact !== 'function');
27486		this._loadJS(this.__gmapsURL + '&key=' + this.options.apiKey + '&libraries=' + this.options.libraries + '&callback=?', this._loadGoogleHandlers.bind(this, toggleStreetView), typeof google !== 'object' || typeof google.maps !== 'object');
27487		this._loadJS(this.__mutantURL, this._loadGoogleHandlers.bind(this, toggleStreetView), typeof L.GridLayer.GoogleMutant !== 'function');
27488
27489	},
27490
27491	_loadJS: function(url, callback, condition) {
27492		if (!condition) {
27493			callback();
27494			return;
27495		}
27496		if (url.indexOf('callback=?') !== -1) {
27497			this._jsonp(url, callback);
27498		} else {
27499			var script = document.createElement('script');
27500			script.src = url;
27501			var loaded = function() {
27502				script.onload = script.onreadystatechange = null;
27503				this._log(url + " loaded");
27504				callback();
27505			}.bind(this);
27506			script.onload = script.onreadystatechange = loaded;
27507
27508			var head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
27509			head.insertBefore(script, head.firstChild);
27510		}
27511	},
27512
27513	_jsonp: function(url, callback, params) {
27514		var query = url.indexOf('?') === -1 ? '?' : '&';
27515		params = params || {};
27516		for (var key in params) {
27517			if (params.hasOwnProperty(key)) {
27518				query += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + '&';
27519			}
27520		}
27521
27522		var timestamp = new Date().getUTCMilliseconds();
27523		var jsonp = "json_call_" + timestamp; // uniqueId('json_call');
27524		window[jsonp] = function(data) {
27525			callback(data);
27526			window[jsonp] = undefined;
27527		};
27528
27529		var script = document.createElement('script');
27530		if (url.indexOf('callback=?') !== -1) {
27531			script.src = url.replace('callback=?', 'callback=' + jsonp) + query.slice(0, -1);
27532		} else {
27533			script.src = url + query + 'callback=' + jsonp;
27534		}
27535		var loaded = function() {
27536			if (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete') {
27537				script.onload = script.onreadystatechange = null;
27538				if (script && script.parentNode) {
27539					script.parentNode.removeChild(script);
27540				}
27541			}
27542		};
27543		script.async = true;
27544		script.onload = script.onreadystatechange = loaded;
27545		var head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
27546		// Use insertBefore instead of appendChild to circumvent an IE6 bug.
27547		// This arises when a base node is used.
27548		head.insertBefore(script, head.firstChild);
27549	},
27550
27551});
27552
27553L.control.pegman = function(options) {
27554	return new L.Control.Pegman(options);
27555};
27555
27556
27557
27558/***/ }),
27559
27560/***/ 99627:
27561/***/ (() => {
27562
27563(function () {
27564	'use strict';
27565
27566	/**
27567	 * GoogleMutant by Iván Sánchez Ortega <[email protected]> https://ivan.sanchezortega.es
27568	 * Source and issue tracking: https://gitlab.com/IvanSanchez/Leaflet.GridLayer.GoogleMutant/
27569	 *
27570	 * Based on techniques from https://github.com/shramov/leaflet-plugins
27571	 * and https://avinmathew.com/leaflet-and-google-maps/ , but relying on MutationObserver.
27572	 *
27573	 * "THE BEER-WARE LICENSE":
27574	 * <[email protected]> wrote this file. As long as you retain this notice you
27575	 * can do whatever you want with this stuff. If we meet some day, and 
27575you think
27576	 * this stuff is worth it, you can buy me a beer in return.
27577	 *
27578	 * Uses MIT-licensed code from https://github.com/rsms/js-lru/
27579	 */
27580
27581	// This implementation of LRUMap is a copy of https://github.com/rsms/js-lru/ ,
27582	// trivially adapted for ES6 exports.
27583
27584	/*
27585	The MIT License
27586
27587	Copyright (c) 2010-2020 Rasmus Andersson <https://rsms.me/>
27588
27589	Permission is hereby granted, free of charge, to any person obtaining a copy
27590	of this software and associated documentation files (the "Software"), to deal
27591	in the Software without restriction, including without limitation the rights
27592	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27593	copies of the Software, and to permit persons to whom the Software is
27594	furnished to do so, subject to the following conditions:
27595
27596	The above copyright notice and this permission notice shall be included in
27597	all copies or substantial portions of the Software.
27598
27599	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27600	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27601	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27602	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27603	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27604	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27605	THE SOFTWARE.
27606	*/
27607
27608	/**
27609	 * A doubly linked list-based Least Recently Used (LRU) cache. Will keep most
27610	 * recently used items while discarding least recently used items when its limit
27611	 * is reached.
27612	 *
27613	 * Licensed under MIT. Copyright (c) 2010 Rasmus Andersson <http://hunch.se/>
27614	 * See README.md for details.
27615	 *
27616	 * Illustration of the design:
27617	 *
27618	 *       entry             entry             entry             entry
27619	 *       ______            ______            ______            ______
27620	 *      | head |.newer => |      |.newer => |      |.newer => | tail |
27621	 *      |  A   |          |  B   |          |  C   |          |  D   |
27622	 *      |______| <= older.|______| <= older.|______| <= older.|______|
27623	 *
27624	 *  removed  <--  <--  <--  <--  <--  <--  <--  <--  <--  <--  <--  added
27625	 */
27626
27627	var NEWER = Symbol("newer");
27628	var OLDER = Symbol("older");
27629
27630	var LRUMap = function LRUMap(limit, entries) {
27631		if (typeof limit !== "number") {
27632			// called as (entries)
27633			entries = limit;
27634			limit = 0;
27635		}
27636
27637		this.size = 0;
27638		this.limit = limit;
27639		this.oldest = this.newest = undefined;
27640		this._keymap = new Map();
27641
27642		if (entries) {
27643			this.assign(entries);
27644			if (limit < 1) {
27645				this.limit = this.size;
27646			}
27647		}
27648	};
27649
27650	LRUMap.prototype._markEntryAsUsed = function _markEntryAsUsed (entry) {
27651		if (entry === this.newest) {
27652			// Already the most recenlty used entry, so no need to update the list
27653			return;
27654		}
27655		// HEAD--------------TAIL
27656		//   <.older   .newer>
27657		//  <--- add direction --
27658		//   A  B  C  <D>  E
27659		if (entry[NEWER]) {
27660			if (entry === this.oldest) {
27661				this.oldest = entry[NEWER];
27662			}
27663			entry[NEWER][OLDER] = entry[OLDER]; // C <-- E.
27664		}
27665		if (entry[OLDER]) {
27666			entry[OLDER][NEWER] = entry[NEWER]; // C. --> E
27667		}
27668		entry[NEWER] = undefined; // D --x
27669		entry[OLDER] = this.newest; // D. --> E
27670		if (this.newest) {
27671			this.newest[NEWER] = entry; // E. <-- D
27672		}
27673		this.newest = entry;
27674	};
27675
27676	LRUMap.prototype.assign = function assign (entries) {
27677		var entry,
27678			limit = this.limit || Number.MAX_VALUE;
27679		this._keymap.clear();
27680		var it = entries[Symbol.iterator]();
27681		for (var itv = it.next(); !itv.done; itv = it.next()) {
27682			var e = new Entry(itv.value[0], itv.value[1]);
27683			this._keymap.set(e.key, e);
27684			if (!entry) {
27685				this.oldest = e;
27686			} else {
27687				entry[NEWER] = e;
27688				e[OLDER] = entry;
27689			}
27690			entry = e;
27691			if (limit-- == 0) {
27692				throw new Error("overflow");
27693			}
27694		}
27695		this.newest = entry;
27696		this.size = this._keymap.size;
27697	};
27698
27699	LRUMap.prototype.get = function get (key) {
27700		// First, find our cache entry
27701		var entry = this._keymap.get(key);
27702		if (!entry) { return; } // Not cached. Sorry.
27703		// As <key> was found in the cache, register it as being requested recently
27704		this._markEntryAsUsed(entry);
27705		return entry.value;
27706	};
27707
27708	LRUMap.prototype.set = function set (key, value) {
27709		var entry = this._keymap.get(key);
27710
27711		if (entry) {
27712			// update existing
27713			entry.value = value;
27714			this._markEntryAsUsed(entry);
27715			return this;
27716		}
27717
27718		// new entry
27719		this._keymap.set(key, (entry = new Entry(key, value)));
27720
27721		if (this.newest) {
27722			// link previous tail to the new tail (entry)
27723			this.newest[NEWER] = entry;
27724			entry[OLDER] = this.newest;
27725		} else {
27726			// we're first in -- yay
27727			this.oldest = entry;
27728		}
27729
27730		// add new entry to the end of the linked list -- it's now the freshest entry.
27731		this.newest = entry;
27732		++this.size;
27733		if (this.size > this.limit) {
27734			// we hit the limit -- remove the head
27735			this.shift();
27736		}
27737
27738		return this;
27739	};
27740
27741	LRUMap.prototype.shift = function shift () {
27742		// todo: handle special case when limit == 1
27743		var entry = this.oldest;
27744		if (entry) {
27745			if (this.oldest[NEWER]) {
27746				// advance the list
27747				this.oldest = this.oldest[NEWER];
27748				this.oldest[OLDER] = undefined;
27749			} else {
27750				// the cache is exhausted
27751				this.oldest = undefined;
27752				this.newest = undefined;
27753			}
27754			// Remove last strong reference to <entry> and remove links from the purged
27755			// entry being returned:
27756			entry[NEWER] = entry[OLDER] = undefined;
27757			this._keymap.delete(entry.key);
27758			--this.size;
27759			return [entry.key, entry.value];
27760		}
27761	};
27762
27763	// -------------------------------------------------------------------------------------
27764	// Following code (until end of class definition) is optional and can be removed without
27765	// breaking the core functionality.
27766
27767	LRUMap.prototype.find = function find (key) {
27768		var e = this._keymap.get(key);
27769		return e ? e.value : undefined;
27770	};
27771
27772	LRUMap.prototype.has = function has (key) {
27773		return this._keymap.has(key);
27774	};
27775
27776	LRUMap.prototype.delete = function delete$1 (key) {
27777		var entry = this._keymap.get(key);
27778		if (!entry) { return; }
27779		this._keymap.delete(entry.key);
27780		if (entry[NEWER] && entry[OLDER]) {
27781			// relink the older entry with the newer entry
27782			entry[OLDER][NEWER] = entry[NEWER];
27783			entry[NEWER][OLDER] = entry[OLDER];
27784		} else if (entry[NEWER]) {
27785			// remove the link to us
27786			entry[NEWER][OLDER] = undefined;
27787			// link the newer entry to head
27788			this.oldest = entry[NEWER];
27789		} else if (entry[OLDER]) {
27790			// remove the link to us
27791			entry[OLDER][NEWER] = undefined;
27792			// link the newer entry to head
27793			this.newest = entry[OLDER];
27794		} else {
27795			// if(entry[OLDER] === undefined && entry.newer === undefined) {
27796			this.oldest = this.newest = undefined;
27797		}
27798
27799		this.size--;
27800		return entry.value;
27801	};
27802
27803	LRUMap.prototype.clear = function clear () {
27804		// Not clearing links should be safe, as we don't expose live links to user
27805		this.oldest = this.newest = undefined;
27806		this.size = 0;
27807		this._keymap.clear();
27808	};
27809
27810	LRUMap.prototype.keys = function keys () {
27811		return new KeyIterator(this.oldest);
27812	};
27813
27814	LRUMap.prototype.values = function values () {
27815		return new ValueIterator(this.oldest);
27816	};
27817
27818	LRUMap.prototype.entries = function entries () {
27819		return this;
27820	};
27821
27822	LRUMap.prototype[Symbol.iterator] = function () {
27823		return new EntryIterator(this.oldest);
27824	};
27825
27826	LRUMap.prototype.forEach = function forEach (fun, thisObj) {
27827		if (typeof thisObj !== "object") {
27828			thisObj = this;
27829		}
27830		var entry = this.oldest;
27831		while (entry) {
27832			fun.call(thisObj, entry.value, entry.key, this);
27833			entry = entry[NEWER];
27834		}
27835	};
27836
27837	/** Returns a JSON (array) representation */
27838	LRUMap.prototype.toJSON = function toJSON () {
27839		var s = new Array(this.size),
27840			i = 0,
27841			entry = this.oldest;
27842		while (entry) {
27843			s[i++] = { key: entry.key, value: entry.value };
27844			entry = entry[NEWER];
27845		}
27846		return s;
27847	};
27848
27849	/** Returns a String representation */
27850	LRUMap.prototype.toString = function toString () {
27851		var s = "",
27852			entry = this.oldest;
27853		while (entry) {
27854			s += String(entry.key) + ":" + entry.value;
27855			entry = entry[NEWER];
27856			if (entry) {
27857				s += " < ";
27858			}
27859		}
27860		return s;
27861	};
27862
27863	function Entry(key, value) {
27864		this.key = key;
27865		this.value = value;
27866		this[NEWER] = undefined;
27867		this[OLDER] = undefined;
27868	}
27869
27870	function EntryIterator(oldestEntry) {
27871		this.entry = oldestEntry;
27872	}
27873	EntryIterator.prototype[Symbol.iterator] = function () {
27874		return this;
27875	};
27876	EntryIterator.prototype.next = function () {
27877		var ent = this.entry;
27878		if (ent) {
27879			this.entry = ent[NEWER];
27880			return { done: false, value: [ent.key, ent.value] };
27881		} else {
27882			return { done: true, value: undefined };
27883		}
27884	};
27885
27886	function KeyIterator(oldestEntry) {
27887		this.entry = oldestEntry;
27888	}
27889	KeyIterator.prototype[Symbol.iterator] = function () {
27890		return this;
27891	};
27892	KeyIterator.prototype.next = function () {
27893		var ent = this.entry;
27894		if (ent) {
27895			this.entry = ent[NEWER];
27896			return { done: false, value: ent.key };
27897		} else {
27898			return { done: true, value: undefined };
27899		}
27900	};
27901
27902	function ValueIterator(oldestEntry) {
27903		this.entry = oldestEntry;
27904	}
27905	ValueIterator.prototype[Symbol.iterator] = function () {
27906		return this;
27907	};
27908	ValueIterator.prototype.next = function () {
27909		var ent = this.entry;
27910		if (ent) {
27911			this.entry = ent[NEWER];
27912			return { done: false, value: ent.value };
27913		} else {
27914			return { done: true, value: undefined };
27915		}
27916	};
27917
27918	// GoogleMutant by Iván Sánchez Ortega <[email protected]>
27919
27920	function waitForAPI(callback, context) {
27921		var checkCounter = 0,
27922			intervalId = null;
27923
27924		intervalId = setInterval(function () {
27925			if (checkCounter >= 20) {
27926				clearInterval(intervalId);
27927				throw new Error("window.google not found after 10 seconds");
27928			}
27929			if (!!window.google && !!window.google.maps && !!window.google.maps.Map) {
27930				clearInterval(intervalId);
27931				callback.call(context);
27932			}
27933			++checkCounter;
27934		}, 500);
27935	}
27936
27937	// 🍂class GridLayer.GoogleMutant
27938	// 🍂extends GridLayer
27939	L.GridLayer.GoogleMutant = L.GridLayer.extend({
27940		options: {
27941			maxZoom: 21, // can be 23, but ugly if more than maxNativeZoom
27942			// 🍂option type: String = 'roadmap'
27943			// Google's map type. Valid values are 'roadmap', 'satellite' or 'terrain'. 'hybrid' is not really supported.
27944			type: "roadmap",
27945			maxNativeZoom: 21,
27946		},
27947
27948		initialize: function (options) {
27949			L.GridLayer.prototype.initialize.call(this, options);
27950
27951			// Couple data structures indexed by tile key
27952			this._tileCallbacks = {}; // Callbacks for promises for tiles that are expected
27953			this._lru = new LRUMap(100); // Tile LRU cache
27954
27955			this._imagesPerTile = this.options.type === "hybrid" ? 2 : 1;
27956
27957			this._boundOnMutatedImage = this._onMutatedImage.bind(this);
27958		},
27959
27960		onAdd: function (map) {
27961			var this$1 = this;
27962
27963			L.GridLayer.prototype.onAdd.call(this, map);
27964			this._initMutantContainer();
27965
27966			// Attribution and logo nodes are not mutated a second time if the
27967			// mutant is removed and re-added to the map, hence they are
27968			// not cleaned up on layer removal, so they can be added here.
27969			if (this._logoContainer) {
27970				map._controlCorners.bottomleft.appendChild(this._logoContainer);
27971			}
27972			if (this._attributionContainer) {
27973				map._controlCorners.bottomright.appendChild(this._attributionContainer);
27974			}
27975
27976			waitForAPI(function () {
27977				if (!this$1._map) {
27978					return;
27979				}
27980				this$1._initMutant();
27981
27982				//handle layer being added to a map for which there are no Google tiles at the given zoom
27983				google.maps.event.addListenerOnce(this$1._mutant, "idle", function () {
27984					if (!this$1._map) {
27985						return;
27986					}
27987					this$1._checkZoomLevels();
27988					this$1._mutantIsReady = true;
27989				});
27990			});
27991		},
27992
27993		onRemove: function (map) {
27994			L.GridLayer.prototype.onRemove.call(this, map);
27995			this._observer.disconnect();
27996			map._container.removeChild(this._mutantContainer);
27997			if (this._logoContainer) {
27998				L.DomUtil.remove(this._logoContainer);
27999			}
28000			if (this._attributionContainer) {
28001				L.DomUtil.remove(this._attributionContainer);
28002			}
28003			if (this._mutant) {
28004				google.maps.event.clearListeners(this._mutant, "idle");
28005			}
28006		},
28007
28008		// 🍂method addGoogleLayer(name: String, options?: Object): this
28009		// Adds layer with the given name and options to the google Map instance.
28010		// `name`: one of the google maps API layers, with it's constructor available in `google.maps` object.
28011		// currently following values supported: 'TrafficLayer', 'TransitLayer', 'BicyclingLayer'.
28012		// `options`: see https://developers.google.com/maps/documentation/javascript/reference/map
28013		addGoogleLayer: function (googleLayerName, options) {
28014			var this$1 = this;
28015
28016			if (!this._subLayers) { this._subLayers = {}; }
28017			this.whenReady(function () {
28018				var Constructor = google.maps[googleLayerName];
28019				var googleLayer = new Constructor(options);
28020				googleLayer.setMap(this$1._mutant);
28021				this$1._subLayers[googleLayerName] = googleLayer;
28022			});
28023			return this;
28024		},
28025
28026		// 🍂method removeGoogleLayer(name: String): this
28027		// Removes layer with the given name from the google Map instance.
28028		removeGoogleLayer: function (googleLayerName) {
28029			var this$1 = this;
28030
28031			this.whenReady(function () {
28032				var googleLayer = this$1._subLayers && this$1._subLayers[googleLayerName];
28033				if (googleLayer) {
28034					googleLayer.setMap(null);
28035					delete this$1._subLayers[googleLayerName];
28036				}
28037			});
28038			return this;
28039		},
28040
28041		_initMutantContainer: function () {
28042			if (!this._mutantContainer) {
28043				this._mutantContainer = L.DomUtil.create(
28044					"div",
28045					"leaflet-google-mutant leaflet-top leaflet-left"
28046				);
28047				this._mutantContainer.id = "_MutantContainer_" + L.Util.stamp(this._mutantContainer);
28048				this._mutantContainer.style.pointerEvents = "none";
28049				this._mutantContainer.style.visibility = "hidden";
28050
28051				L.DomEvent.off(this._mutantContainer);
28052			}
28053			this._map.getContainer().appendChild(this._mutantContainer);
28054
28055			this.setOpacity(this.options.opacity);
28056			var style = this._mutantContainer.style;
28057			if (this._map.options.zoomSnap < 1) {
28058				// Fractional zoom needs a bigger mutant container in order to load more (smaller) tiles
28059				style.width = "180%";
28060				style.height = "180%";
28061			} else {
28062				style.width = "100%";
28063				style.height = "100%";
28064			}
28065			style.zIndex = -1;
28066
28067			this._attachObserver(this._mutantContainer);
28068		},
28069
28070		_initMutant: function () {
28071			if (this._mutant) {
28072				return;
28073			}
28074
28075			var map = new google.maps.Map(this._mutantContainer, {
28076				center: { lat: 0, lng: 0 },
28077				zoom: 0,
28078				tilt: 0,
28079				mapTypeId: this.options.type,
28080				disableDefaultUI: true,
28081				keyboardShortcuts: false,
28082				draggable: false,
28083				disableDoubleClickZoom: true,
28084				scrollwheel: false,
28085				styles: this.options.styles || [],
28086				backgroundColor: "transparent",
28087			});
28088
28089			this._mutant = map;
28090
28091			this._update();
28092
28093			// 🍂event spawned
28094			// Fired when the mutant has been created.
28095			this.fire("spawned", { mapObject: map });
28096
28097			this._waitControls();
28098			this.once('controls_ready', this._setupAttribution);
28099		},
28100
28101		_attachObserver: function _attachObserver(node) {
28102			if (!this._observer) { this._observer = new MutationObserver(this._onMutations.bind(this)); }
28103
28104			// pass in the target node, as well as the observer options
28105			this._observer.observe(node, { childList: true, subtree: true });
28106
28107			// if we are reusing an old _mutantContainer, we must manually detect
28108			// all existing tiles in it
28109			Array.prototype.forEach.call(node.querySelectorAll("img"), this._boundOnMutatedImage);
28110		},
28111
28112		_waitControls: function () {
28113			var this$1 = this;
28114
28115			var id = setInterval(function () {
28116				var layoutManager = this$1._mutant.__gm.layoutManager;
28117				if (!layoutManager) { return; }
28118				clearInterval(id);
28119				var positions;
28120				// iterate through obfuscated key names to find positions set (atm: layoutManager.o)
28121				Object.keys(layoutManager).forEach(function(key) {
28122					var el = layoutManager[key];
28123					if (el.get) {
28124						if (el.get(1) instanceof Node) {
28125							positions = el;
28126						}
28127					}
28128				});
28129				// 🍂event controls_ready
28130				// Fired when controls positions get available (passed in `positions` property).
28131				this$1.fire("controls_ready", { positions: positions });
28132			}, 50);
28133		},
28134
28135		_setupAttribution: function (ev) {
28136			// https://developers.google.com/maps/documentation/javascript/reference/control#ControlPosition
28137			var pos = google.maps.ControlPosition;
28138			var ctr = this._attributionContainer = ev.positions.get(pos.BOTTOM_RIGHT);
28139			L.DomUtil.addClass(ctr, "leaflet-control leaflet-control-attribution");
28140			L.DomEvent.disableClickPropagation(ctr);
28141			ctr.style.height = "14px";
28142			this._map._controlCorners.bottomright.appendChild(ctr);
28143
28144			this._logoContainer = ev.positions.get(pos.BOTTOM_LEFT);
28145			this._logoContainer.style.pointerEvents = "auto";
28146			this._map._controlCorners.bottomleft.appendChild(this._logoContainer);
28147		},
28148
28149		_onMutations: function _onMutations(mutations) {
28150			for (var i = 0; i < mutations.length; ++i) {
28151				var mutation = mutations[i];
28152				for (var j = 0; j < mutation.addedNodes.length; ++j) {
28153					var node = mutation.addedNodes[j];
28154
28155					if (node instanceof HTMLImageElement) {
28156						this._onMutatedImage(node);
28157					} else if (node instanceof HTMLElement) {
28158						Array.prototype.forEach.call(
28159							node.querySelectorAll("img"),
28160							this._boundOnMutatedImage
28161						);
28162					}
28163				}
28164			}
28165		},
28166
28167		// Only images which 'src' attrib match this will be considered for moving around.
28168		// Looks like some kind of string-based protobuf, maybe??
28169		// Only the roads (and terrain, and vector-based stuff) match this pattern
28170		_roadRegexp: /!1i(\d+)!2i(\d+)!3i(\d+)!/,
28171
28172		// On the other hand, raster imagery matches this other pattern
28173		_satRegexp: /x=(\d+)&y=(\d+)&z=(\d+)/,
28174
28175		// On small viewports, when zooming in/out, a static image is requested
28176		// This will not be moved around, just removed from the DOM.
28177		_staticRegExp: /StaticMapService\.GetMapImage/,
28178
28179		_onMutatedImage: function _onMutatedImage(imgNode) {
28180			var coords;
28181			var match = imgNode.src.match(this._roadRegexp);
28182			var sublayer = 0;
28183
28184			if (match) {
28185				coords = {
28186					z: match[1],
28187					x: match[2],
28188					y: match[3],
28189				};
28190				if (this._imagesPerTile > 1) {
28191					imgNode.style.zIndex = 1;
28192					sublayer = 1;
28193				}
28194			} else {
28195				match = imgNode.src.match(this._satRegexp);
28196				if (match) {
28197					coords = {
28198						x: match[1],
28199						y: match[2],
28200						z: match[3],
28201					};
28202				}
28203				// imgNode.style.zIndex = 0;
28204				sublayer = 0;
28205			}
28206
28207			if (coords) {
28208				var tileKey = this._tileCoordsToKey(coords);
28209				imgNode.style.position = "absolute";
28210
28211				var key = tileKey + "/" + sublayer;
28212				// Cache img so it can also be used in subsequent tile requests
28213				this._lru.set(key, imgNode);
28214
28215				if (key in this._tileCallbacks && this._tileCallbacks[key]) {
28216					// Use the tile for *all* pending callbacks. They'll be cloned anyway.
28217					this._tileCallbacks[key].forEach(function (callback) { return callback(imgNode); });
28218					delete this._tileCallbacks[key];
28219				}
28220			}
28221		},
28222
28223		createTile: function (coords, done) {
28224			var key = this._tileCoordsToKey(coords),
28225				tileContainer = L.DomUtil.create("div");
28226
28227			tileContainer.style.textAlign = "left";
28228			tileContainer.dataset.pending = this._imagesPerTile;
28229			done = done.bind(this, null, tileContainer);
28230
28231			for (var i = 0; i < this._imagesPerTile; ++i) {
28232				var key2 = key + "/" + i,
28233					imgNode = this._lru.get(key2);
28234				if (imgNode) {
28235					tileContainer.appendChild(this._clone(imgNode));
28236					--tileContainer.dataset.pending;
28237				} else {
28238					this._tileCallbacks[key2] = this._tileCallbacks[key2] || [];
28239					this._tileCallbacks[key2].push(
28240						function (c /*, k2*/) {
28241							return function (imgNode) {
28242								c.appendChild(this._clone(imgNode));
28243								--c.dataset.pending;
28244								if (!parseInt(c.dataset.pending)) {
28245									done();
28246								}
28247							}.bind(this);
28248						}.bind(this)(tileContainer /*, key2*/)
28249					);
28250				}
28251			}
28252
28253			if (!parseInt(tileContainer.dataset.pending)) {
28254				L.Util.requestAnimFrame(done);
28255			}
28256			return tileContainer;
28257		},
28258
28259		_clone: function (imgNode) {
28260			var clonedImgNode = imgNode.cloneNode(true);
28261			clonedImgNode.style.visibility = "visible";
28262			return clonedImgNode;
28263		},
28264
28265		_checkZoomLevels: function () {
28266			//setting the zoom level on the Google map may result in a different zoom level than the one requested
28267			//(it won't go beyond the level for which they have data).
28268			var zoomLevel = this._map.getZoom(),
28269				gMapZoomLevel = this._mutant.getZoom();
28270
28271			if (!zoomLevel || !gMapZoomLevel) { return; }
28272
28273			if (
28274				gMapZoomLevel !== zoomLevel || //zoom levels are out of sync, Google doesn't have data
28275				gMapZoomLevel > this.options.maxNativeZoom
28276			) {
28277				//at current location, Google does have data (contrary to maxNativeZoom)
28278				//Update maxNativeZoom
28279				this._setMaxNativeZoom(gMapZoomLevel);
28280			}
28281		},
28282
28283		_setMaxNativeZoom: function (zoomLevel) {
28284			if (zoomLevel !== this.options.maxNativeZoom) {
28285				this.options.maxNativeZoom = zoomLevel;
28286				this._resetView();
28287			}
28288		},
28289
28290		_update: function (center) {
28291			// zoom level check needs to happen before super's implementation (tile addition/creation)
28292			// otherwise tiles may be missed if maxNativeZoom is not yet correctly determined
28293			if (this._mutant) {
28294				center = center || this._map.getCenter();
28295				var _center = new google.maps.LatLng(center.lat, center.lng),
28296					zoom = Math.round(this._map.getZoom()),
28297					mutantZoom = this._mutant.getZoom();
28298
28299				this._mutant.setCenter(_center);
28300
28301				//ignore fractional zoom levels
28302				if (zoom !== mutantZoom) {
28303					this._mutant.setZoom(zoom);
28304
28305					if (this._mutantIsReady) { this._checkZoomLevels(); }
28306					//else zoom level check will be done later by 'idle' handler
28307				}
28308			}
28309
28310			L.GridLayer.prototype._update.call(this, center);
28311		},
28312
28313		// @method whenReady(fn: Function, context?: Object): this
28314		// Runs the given function `fn` when the mutant gets initialized, or immediately
28315		// if it's already initialized, optionally passing a function context.
28316		whenReady: function (callback, context) {
28317			if (this._mutant) {
28318				callback.call(context || this, { target: this });
28319			} else {
28320				this.on("spawned", callback, context);
28321			}
28322			return this;
28323		},
28324	});
28325
28326	// 🍂factory gridLayer.googleMutant(options)
28327	// Returns a new `GridLayer.GoogleMutant` given its options
28328	L.gridLayer.googleMutant = function (options) {
28329		return new L.GridLayer.GoogleMutant(options);
28330	};
28331
28332}());
28333//# sourceMappingURL=Leaflet.GoogleMutant.js.map
28334
28335
28336/***/ }),
28337
28338/***/ 52797:
28339/***/ (() => {
28340
28341
28342
28343
28344L.Icon.Glyph = L.Icon.extend({
28345	options: {
28346		iconSize: [25, 41],
28347		iconAnchor:  [12, 41],
28348		popupAnchor: [1, -34],
28349		shadowSize:  [41, 41],
28350// 		iconUrl: 'glyph-marker-icon.png',
28351// 		iconSize: [35, 45],
28352// 		iconAnchor:   [17, 42],
28353// 		popupAnchor: [1, -32],
28354// 		shadowAnchor: [10, 12],
28355// 		shadowSize: [36, 16],
28356// 		bgPos: (Point)
28357		className: '',
28358		prefix: '',
28359		glyph: 'home',
28360		glyphColor: 'white',
28361		glyphSize: '11px',	// in CSS units
28362		glyphAnchor: [0, -7]	// In pixels, counting from the center of the image.
28363	},
28364
28365	createIcon: function () {
28366		var div = document.createElement('div'),
28367			options = this.options;
28368
28369		if (options.glyph) {
28370			div.appendChild(this._createGlyph());
28371		}
28372
28373		this._setIconStyles(div, options.className);
28374		return div;
28375	},
28376
28377	_createGlyph: function() {
28378		var glyphClass,
28379		    textContent,
28380		    options = this.options;
28381
28382		if (!options.prefix) {
28383			glyphClass = '';
28384			textContent = options.glyph;
28385		}
28385 else if((options.prefix === "fab") || (options.prefix === "fal") || (options.prefix === "far") || (options.prefix === "fas")) {
28386			// Hack for Font Awesome 5 - it needs two different prefixes.
28387			glyphClass = "fa-" + options.glyph;
28388		} else if(options.glyph.slice(0, options.prefix.length+1) === options.prefix + "-") {
28389			glyphClass = options.glyph;
28390		} else {
28391			glyphClass = options.prefix + "-" + options.glyph;
28392		}
28393
28394		var span = L.DomUtil.create('span', options.prefix + ' ' + glyphClass);
28395		span.style.fontSize = options.glyphSize;
28396		span.style.color = options.glyphColor;
28397		span.style.width = options.iconSize[0] + 'px';
28398		span.style.lineHeight = options.iconSize[1] + 'px';
28399		span.style.textAlign = 'center';
28400		span.style.marginLeft = options.glyphAnchor[0] + 'px';
28401		span.style.marginTop = options.glyphAnchor[1] + 'px';
28402		span.style.pointerEvents = 'none';
28403		span.style.display = 'inline-block';
28404
28405		if (textContent) {
28406			span.innerHTML = textContent;
28407		}
28408
28409		return span;
28410	},
28411
28412	_setIconStyles: function (div, name) {
28413		if (name === 'shadow') {
28414			return L.Icon.prototype._setIconStyles.call(this, div, name);
28415		}
28416
28417		var options = this.options,
28418		    size = L.point(options['iconSize']),
28419		    anchor = L.point(options.iconAnchor);
28420
28421		if (!anchor && size) {
28422			anchor = size.divideBy(2, true);
28423		}
28424
28425		div.className = 'leaflet-marker-icon leaflet-glyph-icon ' + name;
28426		var src = this._getIconUrl('icon');
28427		if (src) {
28428			div.style.backgroundImage = "url('" + src + "')";
28429		}
28430
28431		if (options.bgPos) {
28432			div.style.backgroundPosition = (-options.bgPos.x) + 'px ' + (-options.bgPos.y) + 'px';
28433		}
28434		if (options.bgSize) {
28435			div.style.backgroundSize = (options.bgSize.x) + 'px ' + (options.bgSize.y) + 'px';
28436		}
28437
28438		if (anchor) {
28439			div.style.marginLeft = (-anchor.x) + 'px';
28440			div.style.marginTop  = (-anchor.y) + 'px';
28441		}
28442
28443		if (size) {
28444			div.style.width  = size.x + 'px';
28445			div.style.height = size.y + 'px';
28446		}
28447	}
28448});
28449
28450L.icon.glyph = function (options) {
28451	return new L.Icon.Glyph(options);
28452};
28453
28454
28455// Base64-encoded version of glyph-marker-icon.png
28456L.Icon.Glyph.prototype.options.iconUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAUlSURBVFjDrZdLiBxVFIb/e289uqt6kkx6zIiIoKgLRReKuMhCcaOIAUEIiCCE4CIPggZ8kBjooPgM0TiYEUUjqBGchZqAQlyYRTA+kJiJQiJGMjN5zYzT3dP1rrr3HBeTjDGTSfc8Dvyruud89Z9z6kIJdBj31763MivsJXKuZYF6dak5++2mh7NOcsXVHq6sHbhOK/24kOJJMO4AE1vKygwZhxlKSHGKiD+RSu09vOXB43OCrHz96y6T2lsh+OmKXzFdlbLne2UopSAupBhjECcZgjDMgiiSxPhcK/nCr1sfOtcWcm/tq9uEsL4rl0vdK67pKVu2jUwTMk0wBBAzpBCQAnAtiZIlwWQwPlHPglZQAFj1Y23VwVkh92zbd59U+Kanp+p2L12mooKQ5AbcpuclS6LiKoRhxOfHzhXMcs3PtVV7Z0DufXH/LSzpSG9vr1/p6kIz0dDUrvx/IYXAsrJCkWc4e/Z0Zpgf+KX26A/TkNtrXziesY9Xq8tvWNZdVfVYg7hzwKVv3O3ZiKMWj46OTrq5fdOh1x5pSADwjdzo2nbv0u6qqkca2jCIMGcZAuqRhu8vEX7ZK2V2WgMAcXdtvyeKbPS662+osCohzMycHVweniNREoShoZO5KYobpciSh23bFq7rIUgNiLFghRkBlg2v7GlpiccsCHrcryzxUk3zmsNskeYGvt/lxVH4hMWEu9xSWaQFYQ7L1B6iGZ5bBoy+zWKiHiltFHpqeIsVhWaosg1iqlgg4wAAEYEXsV3EmNppJmExMFYUxfVSuIs6E0sI5FkBBhLJzH9laQxLSjBj0WQJgSJPweDTkknvS4JGbCuxKOt7UY4lEQfNnAu9TzLxN2nUdAQTLAEw8YIlAVgAkmDCSBL75eCutSeY+GTUqqNkqUVxUbIl4qgJo4vWzecrhyQAMJldYf1MXLLl1EIsYBZgoGwpRI2zMTPtGBhYbSQAlJF9lieRzNMIriVBzPOWawvoIkYaNC0u9IcAIAHgp75NLQl8ENbPZJ6jgAU48RyFqHEuZyE+Pda/vjENAQBD5s209Y+kPJlyM4+r3lUS0AWSyVEhpHnjYu1pyO+7N4ywwPvhxHDiuwo8j1b5rkQwMZIziYHBXetPzIAAgIV8exZOSMoieI6aU5vKtgR0jqw1JtiYbZfW/R/kSN+mcWbxdtwYjn1XTd9B7cQAfNdCWB/OhBR7jvWv/3tWCAAoO3ktjyZZJ0HHbsq2AooERVQXzPKly2vOgPz29jNNBr+e1IcSz5YAM4hmFzPDtyWS+lDK4N2DfU+dbgsBAFHyd+oszE3agt/GjWcrUBEjj5sQBb96pXpXhAzueDJi4u1p41TsuQpCiFln4bkKeXMoJeadg++tG+sYAgBBXOo3RRrruAnfkWDmGfIdCeQhiiQgQbxjtlqzQk59vCZlNluL5lDiORLyMjcA4DsKeXM4AfDKxa97ThAAqPaMfaR1Nq6jOiqOAhOm5TsKJg1QZGGRedY7V6tzVcjBWk1D0JZ8cigt2RJSimkXnqOgW8MxQLUTb6wN5g0BgGPV0c9BekTH41xx5YXrQ8FkTRgdpxU7ea9djbYQ1GokmJ43wUhWtgRcS04tQjAcw9CWw29tThYOAXD03XVfMps/TTTOy30blDZgiqxFK6p7OsnvCDJ1UD9LyUjORoPDkUQyPfdHbXW+qJCjfRsOwOAoNY4z6Xz01rHq3k5zO4ZMHTabYSIhJD87MLB64f8Ys8WdG/tfBljMJedfwY+s/2P4Pv8AAAAASUVORK5CYII=';
28457
28458
28459/***/ }),
28460
28461/***/ 78215:
28462/***/ (() => {
28463
28464// Leaflet.MapkitMutant - use (Apple's) MapkitJS basemaps in Leaflet.
28465// See https://gitlab.com/IvanSanchez/Leaflet.MapkitMutant
28466
28467L.MapkitMutant = L.Layer.extend({
28468	options: {
28469		minZoom: 3,
28470		maxZoom: 23,
28471
28472		// 🍂option type: String = 'standard'
28473		// mapkit's map type. Valid values are strings 'standard' (default),
28474		// 'satellite' or 'hybrid'.
28475		type: "standard",
28476
28477		// 🍂option authorizationCallback: Function
28478		// An autorization callback function, as described
28479		// in [Apple's mapkitJS documentation](https://developer.apple.com/documentation/mapkitjs/mapkit/2974045-init)
28480		authorizationCallback: function() {},
28481
28482		// 🍂option language: String = undefined
28483		// A language code, as described in
28484		// [Apple's mapkitJS documentation](https://developer.apple.com/documentation/mapkitjs/mapkit/2974045-init).
28485		// By default Mapkit will use the locale setting from the web browser.
28486
28487		// 🍂option opacity: Number = 1.0
28488		// The opacity of the MapkitMutant
28489		opacity: 1,
28490
28491		// 🍂option debugRectangle: Boolean = false
28492		// Whether to add a rectangle with the bounds of the mutant to the map.
28493		// Only meant for debugging, most useful at low zoom levels.
28494		debugRectangle: false,
28495	},
28496
28497	initialize: function(options) {
28498		L.Util.setOptions(this, options);
28499
28500		/// TODO: Add a this._mapkitPromise, just like GoogleMutant
28501
28502		mapkit.init({
28503			authorizationCallback: this.options.authorizationCallback,
28504			language: this.options.langhage,
28505		});
28506	},
28507
28508	onAdd: function(map) {
28509		this._map = map;
28510
28511		this._initMutantContainer();
28512
28513		this._initMutant();
28514
28515		map.on("move zoom moveend zoomend", this._update, this);
28516		map.on("resize", this._resize, this);
28517		this._resize();
28518	},
28519
28520	onRemove: function(map) {
28521		map._container.removeChild(this._mutantContainer);
28522		this._mutantContainer = undefined;
28523		map.off("move zoom moveend zoomend", this._update, this);
28524		map.off("resize", this._resize, this);
28525		this._mutant.removeEventListener(
28526			"region-change-end",
28527			this._onRegionChangeEnd,
28528			this
28529		);
28530		if (this._canvasOverlay) {
28531			this._canvasOverlay.remove();
28532		}
28533	},
28534
28535	// Create the HTMLElement for the mutant map, and add it as a children
28536	// of the Leaflet Map container
28537	_initMutantContainer: function() {
28538		if (!this._mutantContainer) {
28539			this._mutantContainer = L.DomUtil.create(
28540				"div",
28541				"leaflet-mapkit-mutant"
28542			);
28543			this._mutantContainer.id =
28544				"_MutantContainer_" + L.Util.stamp(this._mutantContainer);
28545			this._mutantContainer.style.zIndex = "200"; //leaflet map pane at 400, controls at 1000
28546			this._mutantContainer.style.pointerEvents = "none";
28547
28548			this._map.getContainer().appendChild(this._mutantContainer);
28549		}
28550
28551		// 		this.setOpacity(this.options.opacity);
28552		this.setElementSize(this._mutantContainer, this._map.getSize());
28553
28554		//this._attachObserver(this._mutantContainer);
28555	},
28556
28557	// Create the mutant map inside the mutant container
28558	_initMutant: function() {
28559		if (!this._mutantContainer) return;
28560
28561		var mapType = mapkit.Map.MapTypes.Standard;
28562		if (this.options.type === "hybrid") {
28563			mapType = mapkit.Map.MapTypes.Hybrid;
28564		} else if (this.options.type === "satellite") {
28565			mapType = mapkit.Map.MapTypes.Satellite;
28566		} else if (this.options.type === "muted") {
28567		    mapType = mapkit.Map.MapTypes.MutedStandard;
28568		}
28569
28570		var map = new mapkit.Map(this._mutantContainer, {
28571			visibleMapRect: this._leafletBoundsToMapkitRect(),
28572			showsUserLocation: false,
28573			showsUserLocationControl: false,
28574
28575			// WTF, apple devs? other options are boolean but this is a
28576			// `mapkit.FeatureVisibility`. F*ck consistency, amirite?!
28577			showsCompass: "hidden",
28578
28579			showsZoomControl: false,
28580			showsUserLocationControl: false,
28581			showsScale: false,
28582			showsMapTypeControl: false,
28583			mapType: mapType,
28584		});
28585
28586		this._mutant = map;
28587		map.addEventListener("region-change-end", this._onRegionChangeEnd, this);
28588		map.addEventListener("region-change-start", this._onRegionChangeStart, this);
28589
28590		// 🍂event spawned
28591		// Fired when the mutant has been created.
28592		this.fire("spawned", { mapObject: map });
28593
28594		// Call _update once, so that it can fetch the mutant's canvas and
28595		// create the L.ImageOverlay
28596		L.Util.requestAnimFrame(this._update, this);
28597	},
28598
28599	// Fetches the map's current *projected* (EPSG:3857) bounds, and returns
28600	// an instance of mapkit.MapRect
28601	_leafletBoundsToMapkitRect: function() {
28602		var bounds = this._map.getPixelBounds();
28603		var scale = this._map.options.crs.scale(this._map.getZoom());
28604		var nw = bounds.getTopLeft().divideBy(scale);
28605		var se = bounds.getBottomRight().divideBy(scale);
28606
28607		// Map those bounds into a [[0,0]..[1,1]] range
28608		var projectedBounds = L.bounds([nw, se]);
28609
28610		var projectedCenter = projectedBounds.getCenter();
28611		var projectedSize = projectedBounds.getSize();
28612
28613		var result = new mapkit.MapRect(
28614			projectedCenter.x - projectedSize.x / 2,
28615			projectedCenter.y - projectedSize.y / 2,
28616			projectedSize.x,
28617			projectedSize.y
28618		);
28619		return result;
28620	},
28621
28622	// Given an instance of mapkit.MapRect, returns an instance of L.LatLngBounds
28623	// This depends on the current map center, as to shift the bounds on
28624	// multiples of 360 in order to prevent artifacts when crossing the
28625	// antimeridian.
28626	_mapkitRectToLeafletBounds: function(rect) {
28627		// Ask MapkitJS to provide the lat-lng coords of the rect's corners
28628		var nw = new mapkit.MapPoint(rect.minX(), rect.maxY()).toCoordinate();
28629		var se = new mapkit.MapPoint(rect.maxX(), rect.minY()).toCoordinate();
28630
28631		var lw = nw.longitude + Math.floor(rect.minX()) * 360;
28632		var le = se.longitude + Math.floor(rect.maxX()) * 360;
28633
28634		var centerLng = this._map.getCenter().lng;
28635
28636		// Shift the bounding box on the easting axis so it contains the map center
28637		if (centerLng < lw) {
28638			// Shift the whole thing to the west
28639			var offset = Math.floor((centerLng - lw) / 360) * 360;
28640			lw += offset;
28641			le += offset;
28642		} else if (centerLng > le) {
28643			// Shift the whole thing to the east
28644			var offset = Math.ceil((centerLng - le) / 360) * 360;
28645			lw += offset;
28646			le += offset;
28647		}
28648
28649		return L.latLngBounds([
28650			L.latLng(nw.latitude, lw),
28651			L.latLng(se.latitude, le),
28652		]);
28653	},
28654
28655	_update: function() {
28656		if (this._map && this._mutant) {
28657			this._mutant.setVisibleMapRectAnimated(
28658				this._leafletBoundsToMapkitRect(),
28659				false
28660			);
28661		}
28662	},
28663
28664	_resize: function() {
28665		var size = this._map.getSize();
28666		if (
28667			this._mutantContainer.style.width === size.x &&
28668			this._mutantContainer.style.height === size.y
28669		)
28670			return;
28671		this.setElementSize(this._mutantContainer, size);
28672		if (!this._mutant) return;
28673	},
28674
28675	_onRegionChangeEnd: function(ev) {
28676		// console.log(ev.target.region.toString());
28677
28678		if (!this._mutantCanvas) {
28679			this._mutantCanvas = this._mutantContainer.querySelector(
28680				"canvas.syrup-canvas"
28681			);
28682		}
28683
28684		if (this._map && this._mutantCanvas) {
28685			// Despite the event name and this method's name, fetch the mutant's
28686			// visible MapRect, not the mutant's region. It uses projected
28687			// coordinates (i.e. scaled EPSG:3957 coordinates). This prevents
28688			// latitude shift artifacts.
28689			var bounds = this._mapkitRectToLeafletBounds(
28690				this._mutant.visibleMapRect
28691			);
28692
28693			// The mutant will take one frame to re-stitch its tiles, so
28694			// repositioning the mutant's overlay has to take place one frame
28695			// after the 'region-change-end' event, in order to avoid graphical
28696			// glitching.
28697
28698			L.Util.cancelAnimFrame(this._requestedFrame);
28699
28700			this._requestedFrame = L.Util.requestAnimFrame(function() {
28701				if (!this._canvasOverlay) {
28702					this._canvasOverlay = L.imageOverlay(null, bounds);
28703
28704					// Hack the ImageOverlay's _image property so that it doesn't
28705					// create a HTMLImageElement
28706					var img = (this._canvasOverlay._image = L.DomUtil.create("div"));
28707
28708					L.DomUtil.addClass(img, "leaflet-image-layer");
28709					L.DomUtil.addClass(img, "leaflet-zoom-animated");
28710
28711					// Move the mutant's canvas out of its container, and into
28712					// the L.ImageOverlay's _image
28713					this._mutantCanvas.parentElement.removeChild(this._mutantCanvas);
28714					img.appendChild(this._mutantCanvas);
28715
28716					this._canvasOverlay.addTo(this._map);
28717					this._updateOpacity();
28718				} else {
28719					this._canvasOverlay.setBounds(bounds);
28720				}
28721				this._mutantCanvas.style.width = "100%";
28722				this._mutantCanvas.style.height = "100%";
28723				this._mutantCanvas.style.position = "absolute";
28724
28725				if (this.options.debugRectangle) {
28726					if (!this.rectangle) {
28727						this.rectangle = L.rectangle(bounds, {
28728							fill: false,
28729						}).addTo(this._map);
28730					} else {
28731						this.rectangle.setBounds(bounds);
28732					}
28733				}
28734			}, this);
28735		}
28736	},
28737
28738	// 🍂method setOpacity(opacity: Number): this
28739	// Sets the opacity of the MapkitMutant.
28740	setOpacity: function(opacity) {
28741		this.options.opacity = opacity;
28742		this._updateOpacity();
28743		return this;
28744	},
28745
28746	_updateOpacity: function() {
28747		if (this._mutantCanvas) {
28748			L.DomUtil.setOpacity(this._mutantCanvas, this.options.opacity);
28749		}
28750	},
28751
28752	_onRegionChangeStart: function(ev) {
28753		/// TODO: check if there's any use to this event handler, clean up
28754		//         console.timeStamp('region-change-start');
28755	},
28756
28757	setElementSize: function(e, size) {
28758		e.style.width = size.x + "px";
28759		e.style.height = size.y + "px";
28760	},
28761});
28762
28763L.mapkitMutant = function mapkitMutant(options) {
28764	return new L.MapkitMutant(options);
28765};
28766
28767
28768/***/ }),
28769
28770/***/ 95732:
28771/***/ (function(__unused_webpack_module, exports) {
28772
28773/*
28774 * Leaflet.markercluster 1.5.3+master.e5124b2,
28775 * Provides Beautiful Animated Marker Clustering functionality for Leaflet, a JS library for interactive maps.
28776 * https://github.com/Leaflet/Leaflet.markercluster
28777 * (c) 2012-2017, Dave Leaver, smartrak
28778 */
28779(function (global, factory) {
28780	 true ? factory(exports) :
28781	0
vendor: 80,602 bytes, lines 28781-31489
28781;
28782}(this, function (exports) { 'use strict';
28783
28784	/*
28785	 * L.MarkerClusterGroup extends L.FeatureGroup by clustering the markers contained within
28786	 */
28787
28788	var MarkerClusterGroup = L.MarkerClusterGroup = L.FeatureGroup.extend({
28789
28790		options: {
28791			maxClusterRadius: 80, //A cluster will cover at most this many pixels from its center
28792			iconCreateFunction: null,
28793			clusterPane: L.Marker.prototype.options.pane,
28794
28795			spiderfyOnEveryZoom: false,
28796			spiderfyOnMaxZoom: true,
28797			showCoverageOnHover: true,
28798			zoomToBoundsOnClick: true,
28799			singleMarkerMode: false,
28800
28801			disableClusteringAtZoom: null,
28802
28803			// Setting this to false prevents the removal of any clusters outside of the viewpoint, which
28804			// is the default behaviour for performance reasons.
28805			removeOutsideVisibleBounds: true,
28806
28807			// Set to false to disable all animations (zoom and spiderfy).
28808			// If false, option animateAddingMarkers below has no effect.
28809			// If L.DomUtil.TRANSITION is falsy, this option has no effect.
28810			animate: true,
28811
28812			//Whether to animate adding markers after adding the MarkerClusterGroup to the map
28813			// If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.
28814			animateAddingMarkers: false,
28815
28816			// Make it possible to provide custom function to calculate spiderfy shape positions
28817			spiderfyShapePositions: null,
28818
28819			//Increase to increase the distance away that spiderfied markers appear from the center
28820			spiderfyDistanceMultiplier: 1,
28821
28822			// Make it possible to specify a polyline options on a spider leg
28823			spiderLegPolylineOptions: { weight: 1.5, color: '#222', opacity: 0.5 },
28824
28825			// When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts
28826			chunkedLoading: false,
28827			chunkInterval: 200, // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)
28828			chunkDelay: 50, // at the end of each interval, give n milliseconds back to system/browser
28829			chunkProgress: null, // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)
28830
28831			//Options to pass to the L.Polygon constructor
28832			polygonOptions: {}
28833		},
28834
28835		initialize: function (options) {
28836			L.Util.setOptions(this, options);
28837			if (!this.options.iconCreateFunction) {
28838				this.options.iconCreateFunction = this._defaultIconCreateFunction;
28839			}
28840
28841			this._featureGroup = L.featureGroup();
28842			this._featureGroup.addEventParent(this);
28843
28844			this._nonPointGroup = L.featureGroup();
28845			this._nonPointGroup.addEventParent(this);
28846
28847			this._inZoomAnimation = 0;
28848			this._needsClustering = [];
28849			this._needsRemoving = []; //Markers removed while we aren't on the map need to be kept track of
28850			//The bounds of the currently shown area (from _getExpandedVisibleBounds) Updated on zoom/move
28851			this._currentShownBounds = null;
28852
28853			this._queue = [];
28854
28855			this._childMarkerEventHandlers = {
28856				'dragstart': this._childMarkerDragStart,
28857				'move': this._childMarkerMoved,
28858				'dragend': this._childMarkerDragEnd,
28859			};
28860
28861			// Hook the appropriate animation methods.
28862			var animate = L.DomUtil.TRANSITION && this.options.animate;
28863			L.extend(this, animate ? this._withAnimation : this._noAnimation);
28864			// Remember which MarkerCluster class to instantiate (animated or not).
28865			this._markerCluster = animate ? L.MarkerCluster : L.MarkerClusterNonAnimated;
28866		},
28867
28868		addLayer: function (layer) {
28869
28870			if (layer instanceof L.LayerGroup) {
28871				return this.addLayers([layer]);
28872			}
28873
28874			//Don't cluster non point data
28875			if (!layer.getLatLng) {
28876				this._nonPointGroup.addLayer(layer);
28877				this.fire('layeradd', { layer: layer });
28878				return this;
28879			}
28880
28881			if (!this._map) {
28882				this._needsClustering.push(layer);
28883				this.fire('layeradd', { layer: layer });
28884				return this;
28885			}
28886
28887			if (this.hasLayer(layer)) {
28888				return this;
28889			}
28890
28891
28892			//If we have already clustered we'll need to add this one to a cluster
28893
28894			if (this._unspiderfy) {
28895				this._unspiderfy();
28896			}
28897
28898			this._addLayer(layer, this._maxZoom);
28899			this.fire('layeradd', { layer: layer });
28900
28901			// Refresh bounds and weighted positions.
28902			this._topClusterLevel._recalculateBounds();
28903
28904			this._refreshClustersIcons();
28905
28906			//Work out what is visible
28907			var visibleLayer = layer,
28908			    currentZoom = this._zoom;
28909			if (layer.__parent) {
28910				while (visibleLayer.__parent._zoom >= currentZoom) {
28911					visibleLayer = visibleLayer.__parent;
28912				}
28913			}
28914
28915			if (this._currentShownBounds.contains(visibleLayer.getLatLng())) {
28916				if (this.options.animateAddingMarkers) {
28917					this._animationAddLayer(layer, visibleLayer);
28918				} else {
28919					this._animationAddLayerNonAnimated(layer, visibleLayer);
28920				}
28921			}
28922			return this;
28923		},
28924
28925		removeLayer: function (layer) {
28926
28927			if (layer instanceof L.LayerGroup) {
28928				return this.removeLayers([layer]);
28929			}
28930
28931			//Non point layers
28932			if (!layer.getLatLng) {
28933				this._nonPointGroup.removeLayer(layer);
28934				this.fire('layerremove', { layer: layer });
28935				return this;
28936			}
28937
28938			if (!this._map) {
28939				if (!this._arraySplice(this._needsClustering, layer) && this.hasLayer(layer)) {
28940					this._needsRemoving.push({ layer: layer, latlng: layer._latlng });
28941				}
28942				this.fire('layerremove', { layer: layer });
28943				return this;
28944			}
28945
28946			if (!layer.__parent) {
28947				return this;
28948			}
28949
28950			if (this._unspiderfy) {
28951				this._unspiderfy();
28952				this._unspiderfyLayer(layer);
28953			}
28954
28955			//Remove the marker from clusters
28956			this._removeLayer(layer, true);
28957			this.fire('layerremove', { layer: layer });
28958
28959			// Refresh bounds and weighted positions.
28960			this._topClusterLevel._recalculateBounds();
28961
28962			this._refreshClustersIcons();
28963
28964			layer.off(this._childMarkerEventHandlers, this);
28965
28966			if (this._featureGroup.hasLayer(layer)) {
28967				this._featureGroup.removeLayer(layer);
28968				if (layer.clusterShow) {
28969					layer.clusterShow();
28970				}
28971			}
28972
28973			return this;
28974		},
28975
28976		//Takes an array of markers and adds them in bulk
28977		addLayers: function (layersArray, skipLayerAddEvent) {
28978			if (!L.Util.isArray(layersArray)) {
28979				return this.addLayer(layersArray);
28980			}
28981
28982			var fg = this._featureGroup,
28983			    npg = this._nonPointGroup,
28984			    chunked = this.options.chunkedLoading,
28985			    chunkInterval = this.options.chunkInterval,
28986			    chunkProgress = this.options.chunkProgress,
28987			    l = layersArray.length,
28988			    offset = 0,
28989			    originalArray = true,
28990			    m;
28991
28992			if (this._map) {
28993				var started = (new Date()).getTime();
28994				var process = L.bind(function () {
28995					var start = (new Date()).getTime();
28996
28997					// Make sure to unspiderfy before starting to add some layers
28998					if (this._map && this._unspiderfy) {
28999						this._unspiderfy();
29000					}
29001
29002					for (; offset < l; offset++) {
29003						if (chunked && offset % 200 === 0) {
29004							// every couple hundred markers, instrument the time elapsed since processing started:
29005							var elapsed = (new Date()).getTime() - start;
29006							if (elapsed > chunkInterval) {
29007								break; // been working too hard, time to take a break :-)
29008							}
29009						}
29010
29011						m = layersArray[offset];
29012
29013						// Group of layers, append children to layersArray and skip.
29014						// Side effects:
29015						// - Total increases, so chunkProgress ratio jumps backward.
29016						// - Groups are not included in this group, only their non-group child layers (hasLayer).
29017						// Changing array length while looping does not affect performance in current browsers:
29018						// http://jsperf.com/for-loop-changing-length/6
29019						if (m instanceof L.LayerGroup) {
29020							if (originalArray) {
29021								layersArray = layersArray.slice();
29022								originalArray = false;
29023							}
29024							this._extractNonGroupLayers(m, layersArray);
29025							l = layersArray.length;
29026							continue;
29027						}
29028
29029						//Not point data, can't be clustered
29030						if (!m.getLatLng) {
29031							npg.addLayer(m);
29032							if (!skipLayerAddEvent) {
29033								this.fire('layeradd', { layer: m });
29034							}
29035							continue;
29036						}
29037
29038						if (this.hasLayer(m)) {
29039							continue;
29040						}
29041
29042						this._addLayer(m, this._maxZoom);
29043						if (!skipLayerAddEvent) {
29044							this.fire('layeradd', { layer: m });
29045						}
29046
29047						//If we just made a cluster of size 2 then we need to remove the other marker from the map (if it is) or we never will
29048						if (m.__parent) {
29049							if (m.__parent.getChildCount() === 2) {
29050								var markers = m.__parent.getAllChildMarkers(),
29051								    otherMarker = markers[0] === m ? markers[1] : markers[0];
29052								fg.removeLayer(otherMarker);
29053							}
29054						}
29055					}
29056
29057					if (chunkProgress) {
29058						// report progress and time elapsed:
29059						chunkProgress(offset, l, (new Date()).getTime() - started);
29060					}
29061
29062					// Completed processing all markers.
29063					if (offset === l) {
29064
29065						// Refresh bounds and weighted positions.
29066						this._topClusterLevel._recalculateBounds();
29067
29068						this._refreshClustersIcons();
29069
29070						this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);
29071					} else {
29072						setTimeout(process, this.options.chunkDelay);
29073					}
29074				}, this);
29075
29076				process();
29077			} else {
29078				var needsClustering = this._needsClustering;
29079
29080				for (; offset < l; offset++) {
29081					m = layersArray[offset];
29082
29083					// Group of layers, append children to layersArray and skip.
29084					if (m instanceof L.LayerGroup) {
29085						if (originalArray) {
29086							layersArray = layersArray.slice();
29087							originalArray = false;
29088						}
29089						this._extractNonGroupLayers(m, layersArray);
29090						l = layersArray.length;
29091						continue;
29092					}
29093
29094					//Not point data, can't be clustered
29095					if (!m.getLatLng) {
29096						npg.addLayer(m);
29097						continue;
29098					}
29099
29100					if (this.hasLayer(m)) {
29101						continue;
29102					}
29103
29104					needsClustering.push(m);
29105				}
29106			}
29107			return this;
29108		},
29109
29110		//Takes an array of markers and removes them in bulk
29111		removeLayers: function (layersArray) {
29112			var i, m,
29113			    l = layersArray.length,
29114			    fg = this._featureGroup,
29115			    npg = this._nonPointGroup,
29116			    originalArray = true;
29117
29118			if (!this._map) {
29119				for (i = 0; i < l; i++) {
29120					m = layersArray[i];
29121
29122					// Group of layers, append children to layersArray and skip.
29123					if (m instanceof L.LayerGroup) {
29124						if (originalArray) {
29125							layersArray = layersArray.slice();
29126							originalArray = false;
29127						}
29128						this._extractNonGroupLayers(m, layersArray);
29129						l = layersArray.length;
29130						continue;
29131					}
29132
29133					this._arraySplice(this._needsClustering, m);
29134					npg.removeLayer(m);
29135					if (this.hasLayer(m)) {
29136						this._needsRemoving.push({ layer: m, latlng: m._latlng });
29137					}
29138					this.fire('layerremove', { layer: m });
29139				}
29140				return this;
29141			}
29142
29143			if (this._unspiderfy) {
29144				this._unspiderfy();
29145
29146				// Work on a copy of the array, so that next loop is not affected.
29147				var layersArray2 = layersArray.slice(),
29148				    l2 = l;
29149				for (i = 0; i < l2; i++) {
29150					m = layersArray2[i];
29151
29152					// Group of layers, append children to layersArray and skip.
29153					if (m instanceof L.LayerGroup) {
29154						this._extractNonGroupLayers(m, layersArray2);
29155						l2 = layersArray2.length;
29156						continue;
29157					}
29158
29159					this._unspiderfyLayer(m);
29160				}
29161			}
29162
29163			for (i = 0; i < l; i++) {
29164				m = layersArray[i];
29165
29166				// Group of layers, append children to layersArray and skip.
29167				if (m instanceof L.LayerGroup) {
29168					if (originalArray) {
29169						layersArray = layersArray.slice();
29170						originalArray = false;
29171					}
29172					this._extractNonGroupLayers(m, layersArray);
29173					l = layersArray.length;
29174					continue;
29175				}
29176
29177				if (!m.__parent) {
29178					npg.removeLayer(m);
29179					this.fire('layerremove', { layer: m });
29180					continue;
29181				}
29182
29183				this._removeLayer(m, true, true);
29184				this.fire('layerremove', { layer: m });
29185
29186				if (fg.hasLayer(m)) {
29187					fg.removeLayer(m);
29188					if (m.clusterShow) {
29189						m.clusterShow();
29190					}
29191				}
29192			}
29193
29194			// Refresh bounds and weighted positions.
29195			this._topClusterLevel._recalculateBounds();
29196
29197			this._refreshClustersIcons();
29198
29199			//Fix up the clusters and markers on the map
29200			this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds);
29201
29202			return this;
29203		},
29204
29205		//Removes all layers from the MarkerClusterGroup
29206		clearLayers: function () {
29207			//Need our own special implementation as the LayerGroup one doesn't work for us
29208
29209			//If we aren't on the map (yet), blow away the markers we know of
29210			if (!this._map) {
29211				this._needsClustering = [];
29212				this._needsRemoving = [];
29213				delete this._gridClusters;
29214				delete this._gridUnclustered;
29215			}
29216
29217			if (this._noanimationUnspiderfy) {
29218				this._noanimationUnspiderfy();
29219			}
29220
29221			//Remove all the visible layers
29222			this._featureGroup.clearLayers();
29223			this._nonPointGroup.clearLayers();
29224
29225			this.eachLayer(function (marker) {
29226				marker.off(this._childMarkerEventHandlers, this);
29227				delete marker.__parent;
29228			}, this);
29229
29230			if (this._map) {
29231				//Reset _topClusterLevel and the DistanceGrids
29232				this._generateInitialClusters();
29233			}
29234
29235			return this;
29236		},
29237
29238		//Override FeatureGroup.getBounds as it doesn't work
29239		getBounds: function () {
29240			var bounds = new L.LatLngBounds();
29241
29242			if (this._topClusterLevel) {
29243				bounds.extend(this._topClusterLevel._bounds);
29244			}
29245
29246			for (var i = this._needsClustering.length - 1; i >= 0; i--) {
29247				bounds.extend(this._needsClustering[i].getLatLng());
29248			}
29249
29250			bounds.extend(this._nonPointGroup.getBounds());
29251
29252			return bounds;
29253		},
29254
29255		//Overrides LayerGroup.eachLayer
29256		eachLayer: function (method, context) {
29257			var markers = this._needsClustering.slice(),
29258				needsRemoving = this._needsRemoving,
29259				thisNeedsRemoving, i, j;
29260
29261			if (this._topClusterLevel) {
29262				this._topClusterLevel.getAllChildMarkers(markers);
29263			}
29264
29265			for (i = markers.length - 1; i >= 0; i--) {
29266				thisNeedsRemoving = true;
29267
29268				for (j = needsRemoving.length - 1; j >= 0; j--) {
29269					if (needsRemoving[j].layer === markers[i]) {
29270						thisNeedsRemoving = false;
29271						break;
29272					}
29273				}
29274
29275				if (thisNeedsRemoving) {
29276					method.call(context, markers[i]);
29277				}
29278			}
29279
29280			this._nonPointGroup.eachLayer(method, context);
29281		},
29282
29283		//Overrides LayerGroup.getLayers
29284		getLayers: function () {
29285			var layers = [];
29286			this.eachLayer(function (l) {
29287				layers.push(l);
29288			});
29289			return layers;
29290		},
29291
29292		//Overrides LayerGroup.getLayer, WARNING: Really bad performance
29293		getLayer: function (id) {
29294			var result = null;
29295
29296			id = parseInt(id, 10);
29297
29298			this.eachLayer(function (l) {
29299				if (L.stamp(l) === id) {
29300					result = l;
29301				}
29302			});
29303
29304			return result;
29305		},
29306
29307		//Returns true if the given layer is in this MarkerClusterGroup
29308		hasLayer: function (layer) {
29309			if (!layer) {
29310				return false;
29311			}
29312
29313			var i, anArray = this._needsClustering;
29314
29315			for (i = anArray.length - 1; i >= 0; i--) {
29316				if (anArray[i] === layer) {
29317					return true;
29318				}
29319			}
29320
29321			anArray = this._needsRemoving;
29322			for (i = anArray.length - 1; i >= 0; i--) {
29323				if (anArray[i].layer === layer) {
29324					return false;
29325				}
29326			}
29327
29328			return !!(layer.__parent && layer.__parent._group === this) || this._nonPointGroup.hasLayer(layer);
29329		},
29330
29331		//Zoom down to show the given layer (spiderfying if necessary) then calls the callback
29332		zoomToShowLayer: function (layer, callback) {
29333
29334			var map = this._map;
29335
29336			if (typeof callback !== 'function') {
29337				callback = function () {};
29338			}
29339
29340			var showMarker = function () {
29341				// Assumes that map.hasLayer checks for direct appearance on map, not recursively calling
29342				// hasLayer on Layer Groups that are on map (typically not calling this MarkerClusterGroup.hasLayer, which would always return true)
29343				if ((map.hasLayer(layer) || map.hasLayer(layer.__parent)) && !this._inZoomAnimation) {
29344					this._map.off('moveend', showMarker, this);
29345					this.off('animationend', showMarker, this);
29346
29347					if (map.hasLayer(layer)) {
29348						callback();
29349					} else if (layer.__parent._icon) {
29350						this.once('spiderfied', callback, this);
29351						layer.__parent.spiderfy();
29352					}
29353				}
29354			};
29355
29356			if (layer._icon && this._map.getBounds().contains(layer.getLatLng())) {
29357				//Layer is visible ond on screen, immediate return
29358				callback();
29359			} else if (layer.__parent._zoom < Math.round(this._map._zoom)) {
29360				//Layer should be visible at this zoom level. It must not be on screen so just pan over to it
29361				this._map.on('moveend', showMarker, this);
29362				this._map.panTo(layer.getLatLng());
29363			} else {
29364				this._map.on('moveend', showMarker, this);
29365				this.on('animationend', showMarker, this);
29366				layer.__parent.zoomToBounds();
29367			}
29368		},
29369
29370		//Overrides FeatureGroup.onAdd
29371		onAdd: function (map) {
29372			this._map = map;
29373			var i, l, layer;
29374
29375			if (!isFinite(this._map.getMaxZoom())) {
29376				throw "Map has no maxZoom specified";
29377			}
29378
29379			this._featureGroup.addTo(map);
29380			this._nonPointGroup.addTo(map);
29381
29382			if (!this._gridClusters) {
29383				this._generateInitialClusters();
29384			}
29385
29386			this._maxLat = map.options.crs.projection.MAX_LATITUDE;
29387
29388			//Restore all the positions as they are in the MCG before removing them
29389			for (i = 0, l = this._needsRemoving.length; i < l; i++) {
29390				layer = this._needsRemoving[i];
29391				layer.newlatlng = layer.layer._latlng;
29392				layer.layer._latlng = layer.latlng;
29393			}
29394			//Remove them, then restore their new positions
29395			for (i = 0, l = this._needsRemoving.length; i < l; i++) {
29396				layer = this._needsRemoving[i];
29397				this._removeLayer(layer.layer, true);
29398				layer.layer._latlng = layer.newlatlng;
29399			}
29400			this._needsRemoving = [];
29401
29402			//Remember the current zoom level and bounds
29403			this._zoom = Math.round(this._map._zoom);
29404			this._currentShownBounds = this._getExpandedVisibleBounds();
29405
29406			this._map.on('zoomend', this._zoomEnd, this);
29407			this._map.on('moveend', this._moveEnd, this);
29408
29409			if (this._spiderfierOnAdd) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely
29410				this._spiderfierOnAdd();
29411			}
29412
29413			this._bindEvents();
29414
29415			//Actually add our markers to the map:
29416			l = this._needsClustering;
29417			this._needsClustering = [];
29418			this.addLayers(l, true);
29419		},
29420
29421		//Overrides FeatureGroup.onRemove
29422		onRemove: function (map) {
29423			map.off('zoomend', this._zoomEnd, this);
29424			map.off('moveend', this._moveEnd, this);
29425
29426			this._unbindEvents();
29427
29428			//In case we are in a cluster animation
29429			this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');
29430
29431			if (this._spiderfierOnRemove) { //TODO FIXME: Not sure how to have spiderfier add something on here nicely
29432				this._spiderfierOnRemove();
29433			}
29434
29435			delete this._maxLat;
29436
29437			//Clean up all the layers we added to the map
29438			this._hideCoverage();
29439			this._featureGroup.remove();
29440			this._nonPointGroup.remove();
29441
29442			this._featureGroup.clearLayers();
29443
29444			this._map = null;
29445		},
29446
29447		getVisibleParent: function (marker) {
29448			var vMarker = marker;
29449			while (vMarker && !vMarker._icon) {
29450				vMarker = vMarker.__parent;
29451			}
29452			return vMarker || null;
29453		},
29454
29455		//Remove the given object from the given array
29456		_arraySplice: function (anArray, obj) {
29457			for (var i = anArray.length - 1; i >= 0; i--) {
29458				if (anArray[i] === obj) {
29459					anArray.splice(i, 1);
29460					return true;
29461				}
29462			}
29463		},
29464
29465		/**
29466		 * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.
29467		 * @param marker to be removed from _gridUnclustered.
29468		 * @param z integer bottom start zoom level (included)
29469		 * @private
29470		 */
29471		_removeFromGridUnclustered: function (marker, z) {
29472			var map = this._map,
29473			    gridUnclustered = this._gridUnclustered,
29474				minZoom = Math.floor(this._map.getMinZoom());
29475
29476			for (; z >= minZoom; z--) {
29477				if (!gridUnclustered[z].removeObject(marker, map.project(marker.getLatLng(), z))) {
29478					break;
29479				}
29480			}
29481		},
29482
29483		_childMarkerDragStart: function (e) {
29484			e.target.__dragStart = e.target._latlng;
29485		},
29486
29487		_childMarkerMoved: function (e) {
29488			if (!this._ignoreMove && !e.target.__dragStart) {
29489				var isPopupOpen = e.target._popup && e.target._popup.isOpen();
29490
29491				this._moveChild(e.target, e.oldLatLng, e.latlng);
29492
29493				if (isPopupOpen) {
29494					e.target.openPopup();
29495				}
29496			}
29497		},
29498
29499		_moveChild: function (layer, from, to) {
29500			layer._latlng = from;
29501			this.removeLayer(layer);
29502
29503			layer._latlng = to;
29504			this.addLayer(layer);
29505		},
29506
29507		_childMarkerDragEnd: function (e) {
29508			var dragStart = e.target.__dragStart;
29509			delete e.target.__dragStart;
29510			if (dragStart) {
29511				this._moveChild(e.target, dragStart, e.target._latlng);
29512			}		
29513		},
29514
29515
29516		//Internal function for removing a marker from everything.
29517		//dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)
29518		_removeLayer: function (marker, removeFromDistanceGrid, dontUpdateMap) {
29519			var gridClusters = this._gridClusters,
29520				gridUnclustered = this._gridUnclustered,
29521				fg = this._featureGroup,
29522				map = this._map,
29523				minZoom = Math.floor(this._map.getMinZoom());
29524
29525			//Remove the marker from distance clusters it might be in
29526			if (removeFromDistanceGrid) {
29527				this._removeFromGridUnclustered(marker, this._maxZoom);
29528			}
29529
29530			//Work our way up the clusters removing them as we go if required
29531			var cluster = marker.__parent,
29532				markers = cluster._markers,
29533				otherMarker;
29534
29535			//Remove the marker from the immediate parents marker list
29536			this._arraySplice(markers, marker);
29537
29538			while (cluster) {
29539				cluster._childCount--;
29540				cluster._boundsNeedUpdate = true;
29541
29542				if (cluster._zoom < minZoom) {
29543					//Top level, do nothing
29544					break;
29545				} else if (removeFromDistanceGrid && cluster._childCount <= 1) { //Cluster no longer required
29546					//We need to push the other marker up to the parent
29547					otherMarker = cluster._markers[0] === marker ? cluster._markers[1] : cluster._markers[0];
29548
29549					//Update distance grid
29550					gridClusters[cluster._zoom].removeObject(cluster, map.project(cluster._cLatLng, cluster._zoom));
29551					gridUnclustered[cluster._zoom].addObject(otherMarker, map.project(otherMarker.getLatLng(), cluster._zoom));
29552
29553					//Move otherMarker up to parent
29554					this._arraySplice(cluster.__parent._childClusters, cluster);
29555					cluster.__parent._markers.push(otherMarker);
29556					otherMarker.__parent = cluster.__parent;
29557
29558					if (cluster._icon) {
29559						//Cluster is currently on the map, need to put the marker on the map instead
29560						fg.removeLayer(cluster);
29561						if (!dontUpdateMap) {
29562							fg.addLayer(otherMarker);
29563						}
29564					}
29565				} else {
29566					cluster._iconNeedsUpdate = true;
29567				}
29568
29569				cluster = cluster.__parent;
29570			}
29571
29572			delete marker.__parent;
29573		},
29574
29575		_isOrIsParent: function (el, oel) {
29576			while (oel) {
29577				if (el === oel) {
29578					return true;
29579				}
29580				oel = oel.parentNode;
29581			}
29582			return false;
29583		},
29584
29585		//Override L.Evented.fire
29586		fire: function (type, data, propagate) {
29587			if (data && data.layer instanceof L.MarkerCluster) {
29588				//Prevent multiple clustermouseover/off events if the icon is made up of stacked divs (Doesn't work in ie <= 8, no relatedTarget)
29589				if (data.originalEvent && this._isOrIsParent(data.layer._icon, data.originalEvent.relatedTarget)) {
29590					return;
29591				}
29592				type = 'cluster' + type;
29593			}
29594
29595			L.FeatureGroup.prototype.fire.call(this, type, data, propagate);
29596		},
29597
29598		//Override L.Evented.listens
29599		listens: function (type, propagate) {
29600			return L.FeatureGroup.prototype.listens.call(this, type, propagate) || L.FeatureGroup.prototype.listens.call(this, 'cluster' + type, propagate);
29601		},
29602
29603		//Default functionality
29604		_defaultIconCreateFunction: function (cluster) {
29605			var childCount = cluster.getChildCount();
29606
29607			var c = ' marker-cluster-';
29608			if (childCount < 10) {
29609				c += 'small';
29610			} else if (childCount < 100) {
29611				c += 'medium';
29612			} else {
29613				c += 'large';
29614			}
29615
29616			return new L.DivIcon({ html: '<div><span>' + childCount + '</span></div>', className: 'marker-cluster' + c, iconSize: new L.Point(40, 40) });
29617		},
29618
29619		_bindEvents: function () {
29620			var map = this._map,
29621			    spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,
29622			    showCoverageOnHover = this.options.showCoverageOnHover,
29623			    zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,
29624			    spiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom;
29625
29626			//Zoom on cluster click or spiderfy if we are at the lowest level
29627			if (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {
29628				this.on('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);
29629			}
29630
29631			//Show convex hull (boundary) polygon on mouse over
29632			if (showCoverageOnHover) {
29633				this.on('clustermouseover', this._showCoverage, this);
29634				this.on('clustermouseout', this._hideCoverage, this);
29635				map.on('zoomend', this._hideCoverage, this);
29636			}
29637		},
29638
29639		_zoomOrSpiderfy: function (e) {
29640			var cluster = e.layer,
29641			    bottomCluster = cluster;
29642
29643			if (e.type === 'clusterkeypress' && e.originalEvent && e.originalEvent.keyCode !== 13) {
29644				return;
29645			}
29646
29647			while (bottomCluster._childClusters.length === 1) {
29648				bottomCluster = bottomCluster._childClusters[0];
29649			}
29650
29651			if (bottomCluster._zoom === this._maxZoom &&
29652				bottomCluster._childCount === cluster._childCount &&
29653				this.options.spiderfyOnMaxZoom) {
29654
29655				// All child markers are contained in a single cluster from this._maxZoom to this cluster.
29656				cluster.spiderfy();
29657			} else if (this.options.zoomToBoundsOnClick) {
29658				cluster.zoomToBounds();
29659			}
29660
29661			if (this.options.spiderfyOnEveryZoom) {
29662				cluster.spiderfy();
29663			}
29664
29665			// Focus the map again for keyboard users.
29666			if (e.originalEvent && e.originalEvent.keyCode === 13) {
29667				this._map._container.focus();
29668			}
29669		},
29670
29671		_showCoverage: function (e) {
29672			var map = this._map;
29673			if (this._inZoomAnimation) {
29674				return;
29675			}
29676			if (this._shownPolygon) {
29677				map.removeLayer(this._shownPolygon);
29678			}
29679			if (e.layer.getChildCount() > 2 && e.layer !== this._spiderfied) {
29680				this._shownPolygon = new L.Polygon(e.layer.getConvexHull(), this.options.polygonOptions);
29681				map.addLayer(this._shownPolygon);
29682			}
29683		},
29684
29685		_hideCoverage: function () {
29686			if (this._shownPolygon) {
29687				this._map.removeLayer(this._shownPolygon);
29688				this._shownPolygon = null;
29689			}
29690		},
29691
29692		_unbindEvents: function () {
29693			var spiderfyOnMaxZoom = this.options.spiderfyOnMaxZoom,
29694				showCoverageOnHover = this.options.showCoverageOnHover,
29695				zoomToBoundsOnClick = this.options.zoomToBoundsOnClick,
29696				spiderfyOnEveryZoom = this.options.spiderfyOnEveryZoom,
29697				map = this._map;
29698
29699			if (spiderfyOnMaxZoom || zoomToBoundsOnClick || spiderfyOnEveryZoom) {
29700				this.off('clusterclick clusterkeypress', this._zoomOrSpiderfy, this);
29701			}
29702			if (showCoverageOnHover) {
29703				this.off('clustermouseover', this._showCoverage, this);
29704				this.off('clustermouseout', this._hideCoverage, this);
29705				map.off('zoomend', this._hideCoverage, this);
29706			}
29707		},
29708
29709		_zoomEnd: function () {
29710			if (!this._map) { //May have been removed from the map by a zoomEnd handler
29711				return;
29712			}
29713			this._mergeSplitClusters();
29714
29715			this._zoom = Math.round(this._map._zoom);
29716			this._currentShownBounds = this._getExpandedVisibleBounds();
29717		},
29718
29719		_moveEnd: function () {
29720			if (this._inZoomAnimation) {
29721				return;
29722			}
29723
29724			var newBounds = this._getExpandedVisibleBounds();
29725
29726			this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, newBounds);
29727			this._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), newBounds);
29728
29729			this._currentShownBounds = newBounds;
29730			return;
29731		},
29732
29733		_generateInitialClusters: function () {
29734			var maxZoom = Math.ceil(this._map.getMaxZoom()),
29735				minZoom = Math.floor(this._map.getMinZoom()),
29736				radius = this.options.maxClusterRadius,
29737				radiusFn = radius;
29738
29739			//If we just set maxClusterRadius to a single number, we need to create
29740			//a simple function to return that number. Otherwise, we just have to
29741			//use the function we've passed in.
29742			if (typeof radius !== "function") {
29743				radiusFn = function () { return radius; };
29744			}
29745
29746			if (this.options.disableClusteringAtZoom !== null) {
29747				maxZoom = this.options.disableClusteringAtZoom - 1;
29748			}
29749			this._maxZoom = maxZoom;
29750			this._gridClusters = {};
29751			this._gridUnclustered = {};
29752
29753			//Set up DistanceGrids for each zoom
29754			for (var zoom = maxZoom; zoom >= minZoom; zoom--) {
29755				this._gridClusters[zoom] = new L.DistanceGrid(radiusFn(zoom));
29756				this._gridUnclustered[zoom] = new L.DistanceGrid(radiusFn(zoom));
29757			}
29758
29759			// Instantiate the appropriate L.MarkerCluster class (animated or not).
29760			this._topClusterLevel = new this._markerCluster(this, minZoom - 1);
29761		},
29762
29763		//Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)
29764		_addLayer: function (layer, zoom) {
29765			var gridClusters = this._gridClusters,
29766			    gridUnclustered = this._gridUnclustered,
29767				minZoom = Math.floor(this._map.getMinZoom()),
29768			    markerPoint, z;
29769
29770			if (this.options.singleMarkerMode) {
29771				this._overrideMarkerIcon(layer);
29772			}
29773
29774			layer.on(this._childMarkerEventHandlers, this);
29775
29776			//Find the lowest zoom level to slot this one in
29777			for (; zoom >= minZoom; zoom--) {
29778				markerPoint = this._map.project(layer.getLatLng(), zoom); // calculate pixel position
29779
29780				//Try find a cluster close by
29781				var closest = gridClusters[zoom].getNearObject(markerPoint);
29782				if (closest) {
29783					closest._addChild(layer);
29784					layer.__parent = closest;
29785					return;
29786				}
29787
29788				//Try find a marker close by to form a new cluster with
29789				closest = gridUnclustered[zoom].getNearObject(markerPoint);
29790				if (closest) {
29791					var parent = closest.__parent;
29792					if (parent) {
29793						this._removeLayer(closest, false);
29794					}
29795
29796					//Create new cluster with these 2 in it
29797
29798					var newCluster = new this._markerCluster(this, zoom, closest, layer);
29799					gridClusters[zoom].addObject(newCluster, this._map.project(newCluster._cLatLng, zoom));
29800					closest.__parent = newCluster;
29801					layer.__parent = newCluster;
29802
29803					//First create any new intermediate parent clusters that don't exist
29804					var lastParent = newCluster;
29805					for (z = zoom - 1; z > parent._zoom; z--) {
29806						lastParent = new this._markerCluster(this, z, lastParent);
29807						gridClusters[z].addObject(lastParent, this._map.project(closest.getLatLng(), z));
29808					}
29809					parent._addChild(lastParent);
29810
29811					//Remove closest from this zoom level and any above that it is in, replace with newCluster
29812					this._removeFromGridUnclustered(closest, zoom);
29813
29814					return;
29815				}
29816
29817				//Didn't manage to cluster in at this zoom, record us as a marker here and continue upwards
29818				gridUnclustered[zoom].addObject(layer, markerPoint);
29819			}
29820
29821			//Didn't get in anything, add us to the top
29822			this._topClusterLevel._addChild(layer);
29823			layer.__parent = this._topClusterLevel;
29824			return;
29825		},
29826
29827		/**
29828		 * Refreshes the icon of all "dirty" visible clusters.
29829		 * Non-visible "dirty" clusters will be updated when they are added to the map.
29830		 * @private
29831		 */
29832		_refreshClustersIcons: function () {
29833			this._featureGroup.eachLayer(function (c) {
29834				if (c instanceof L.MarkerCluster && c._iconNeedsUpdate) {
29835					c._updateIcon();
29836				}
29837			});
29838		},
29839
29840		//Enqueue code to fire after the marker expand/contract has happened
29841		_enqueue: function (fn) {
29842			this._queue.push(fn);
29843			if (!this._queueTimeout) {
29844				this._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300);
29845			}
29846		},
29847		_processQueue: function () {
29848			for (var i = 0; i < this._queue.length; i++) {
29849				this._queue[i].call(this);
29850			}
29851			this._queue.length = 0;
29852			clearTimeout(this._queueTimeout);
29853			this._queueTimeout = null;
29854		},
29855
29856		//Merge and split any existing clusters that are too big or small
29857		_mergeSplitClusters: function () {
29858			var mapZoom = Math.round(this._map._zoom);
29859
29860			//In case we are starting to split before the animation finished
29861			this._processQueue();
29862
29863			if (this._zoom < mapZoom && this._currentShownBounds.intersects(this._getExpandedVisibleBounds())) { //Zoom in, split
29864				this._animationStart();
29865				//Remove clusters now off screen
29866				this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds());
29867
29868				this._animationZoomIn(this._zoom, mapZoom);
29869
29870			} else if (this._zoom > mapZoom) { //Zoom out, merge
29871				this._animationStart();
29872
29873				this._animationZoomOut(this._zoom, mapZoom);
29874			} else {
29875				this._moveEnd();
29876			}
29877		},
29878
29879		//Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)
29880		_getExpandedVisibleBounds: function () {
29881			if (!this.options.removeOutsideVisibleBounds) {
29882				return this._mapBoundsInfinite;
29883			} else if (L.Browser.mobile) {
29884				return this._checkBoundsMaxLat(this._map.getBounds());
29885			}
29886
29887			return this._checkBoundsMaxLat(this._map.getBounds().pad(1)); // Padding expands the bounds by its own dimensions but scaled with the given factor.
29888		},
29889
29890		/**
29891		 * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude
29892		 * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).
29893		 * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without
29894		 * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,
29895		 * making the user think that MCG "eats" them and never displays them again.
29896		 * @param bounds L.LatLngBounds
29897		 * @returns {L.LatLngBounds}
29898		 * @private
29899		 */
29900		_checkBoundsMaxLat: function (bounds) {
29901			var maxLat = this._maxLat;
29902
29903			if (maxLat !== undefined) {
29904				if (bounds.getNorth() >= maxLat) {
29905					bounds._northEast.lat = Infinity;
29906				}
29907				if (bounds.getSouth() <= -maxLat) {
29908					bounds._southWest.lat = -Infinity;
29909				}
29910			}
29911
29912			return bounds;
29913		},
29914
29915		//Shared animation code
29916		_animationAddLayerNonAnimated: function (layer, newCluster) {
29917			if (newCluster === layer) {
29918				this._featureGroup.addLayer(layer);
29919			} else if (newCluster._childCount === 2) {
29920				newCluster._addToMap();
29921
29922				var markers = newCluster.getAllChildMarkers();
29923				this._featureGroup.removeLayer(markers[0]);
29924				this._featureGroup.removeLayer(markers[1]);
29925			} else {
29926				newCluster._updateIcon();
29927			}
29928		},
29929
29930		/**
29931		 * Extracts individual (i.e. non-group) layers from a Layer Group.
29932		 * @param group to extract layers from.
29933		 * @param output {Array} in which to store the extracted layers.
29934		 * @returns {*|Array}
29935		 * @private
29936		 */
29937		_extractNonGroupLayers: function (group, output) {
29938			var layers = group.getLayers(),
29939			    i = 0,
29940			    layer;
29941
29942			output = output || [];
29943
29944			for (; i < layers.length; i++) {
29945				layer = layers[i];
29946
29947				if (layer instanceof L.LayerGroup) {
29948					this._extractNonGroupLayers(layer, output);
29949					continue;
29950				}
29951
29952				output.push(layer);
29953			}
29954
29955			return output;
29956		},
29957
29958		/**
29959		 * Implements the singleMarkerMode option.
29960		 * @param layer Marker to re-style using the Clusters iconCreateFunction.
29961		 * @returns {L.Icon} The newly created icon.
29962		 * @private
29963		 */
29964		_overrideMarkerIcon: function (layer) {
29965			var icon = layer.options.icon = this.options.iconCreateFunction({
29966				getChildCount: function () {
29967					return 1;
29968				},
29969				getAllChildMarkers: function () {
29970					return [layer];
29971				}
29972			});
29973
29974			return icon;
29975		}
29976	});
29977
29978	// Constant bounds used in case option "removeOutsideVisibleBounds" is set to false.
29979	L.MarkerClusterGroup.include({
29980		_mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-Infinity, -Infinity), new L.LatLng(Infinity, Infinity))
29981	});
29982
29983	L.MarkerClusterGroup.include({
29984		_noAnimation: {
29985			//Non Animated versions of everything
29986			_animationStart: function () {
29987				//Do nothing...
29988			},
29989			_animationZoomIn: function (previousZoomLevel, newZoomLevel) {
29990				this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);
29991				this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
29992
29993				//We didn't actually animate, but we use this event to mean "clustering animations have finished"
29994				this.fire('animationend');
29995			},
29996			_animationZoomOut: function (previousZoomLevel, newZoomLevel) {
29997				this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel);
29998				this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
29999
30000				//We didn't actually animate, but we use this event to mean "clustering animations have finished"
30001				this.fire('animationend');
30002			},
30003			_animationAddLayer: function (layer, newCluster) {
30004				this._animationAddLayerNonAnimated(layer, newCluster);
30005			}
30006		},
30007
30008		_withAnimation: {
30009			//Animated versions here
30010			_animationStart: function () {
30011				this._map._mapPane.className += ' leaflet-cluster-anim';
30012				this._inZoomAnimation++;
30013			},
30014
30015			_animationZoomIn: function (previousZoomLevel, newZoomLevel) {
30016				var bounds = this._getExpandedVisibleBounds(),
30017				    fg = this._featureGroup,
30018					minZoom = Math.floor(this._map.getMinZoom()),
30019				    i;
30020
30021				this._ignoreMove = true;
30022
30023				//Add all children of current clusters to map and remove those clusters from map
30024				this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {
30025					var startPos = c._latlng,
30026					    markers  = c._markers,
30027					    m;
30028
30029					if (!bounds.contains(startPos)) {
30030						startPos = null;
30031					}
30032
30033					if (c._isSingleParent() && previousZoomLevel + 1 === newZoomLevel) { //Immediately add the new child and remove us
30034						fg.removeLayer(c);
30035						c._recursivelyAddChildrenToMap(null, newZoomLevel, bounds);
30036					} else {
30037						//Fade out old cluster
30038						c.clusterHide();
30039						c._recursivelyAddChildrenToMap(startPos, newZoomLevel, bounds);
30040					}
30041
30042					//Remove all markers that aren't visible any more
30043					//TODO: Do we actually need to do this on the higher levels too?
30044					for (i = markers.length - 1; i >= 0; i--) {
30045						m = markers[i];
30046						if (!bounds.contains(m._latlng)) {
30047							fg.removeLayer(m);
30048						}
30049					}
30050
30051				});
30052
30053				this._forceLayout();
30054
30055				//Update opacities
30056				this._topClusterLevel._recursivelyBecomeVisible(bounds, newZoomLevel);
30057				//TODO Maybe? Update markers in _recursivelyBecomeVisible
30058				fg.eachLayer(function (n) {
30059					if (!(n instanceof L.MarkerCluster) && n._icon) {
30060						n.clusterShow();
30061					}
30062				});
30063
30064				//update the positions of the just added clusters/markers
30065				this._topClusterLevel._recursively(bounds, previousZoomLevel, newZoomLevel, function (c) {
30066					c._recursivelyRestoreChildPositions(newZoomLevel);
30067				});
30068
30069				this._ignoreMove = false;
30070
30071				//Remove the old clusters and close the zoom animation
30072				this._enqueue(function () {
30073					//update the positions of the just added clusters/markers
30074					this._topClusterLevel._recursively(bounds, previousZoomLevel, minZoom, function (c) {
30075						fg.removeLayer(c);
30076						c.clusterShow();
30077					});
30078
30079					this._animationEnd();
30080				});
30081			},
30082
30083			_animationZoomOut: function (previousZoomLevel, newZoomLevel) {
30084				this._animationZoomOutSingle(this._topClusterLevel, previousZoomLevel - 1, newZoomLevel);
30085
30086				//Need to add markers for those that weren't on the map before but are now
30087				this._topClusterLevel._recursivelyAddChildrenToMap(null, newZoomLevel, this._getExpandedVisibleBounds());
30088				//Remove markers that were on the map before but won't be now
30089				this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), previousZoomLevel, this._getExpandedVisibleBounds());
30090			},
30091
30092			_animationAddLayer: function (layer, newCluster) {
30093				var me = this,
30094				    fg = this._featureGroup;
30095
30096				fg.addLayer(layer);
30097				if (newCluster !== layer) {
30098					if (newCluster._childCount > 2) { //Was already a cluster
30099
30100						newCluster._updateIcon();
30101						this._forceLayout();
30102						this._animationStart();
30103
30104						layer._setPos(this._map.latLngToLayerPoint(newCluster.getLatLng()));
30105						layer.clusterHide();
30106
30107						this._enqueue(function () {
30108							fg.removeLayer(layer);
30109							layer.clusterShow();
30110
30111							me._animationEnd();
30112						});
30113
30114					} else { //Just became a cluster
30115						this._forceLayout();
30116
30117						me._animationStart();
30118						me._animationZoomOutSingle(newCluster, this._map.getMaxZoom(), this._zoom);
30119					}
30120				}
30121			}
30122		},
30123
30124		// Private methods for animated versions.
30125		_animationZoomOutSingle: function (cluster, previousZoomLevel, newZoomLevel) {
30126			var bounds = this._getExpandedVisibleBounds(),
30127				minZoom = Math.floor(this._map.getMinZoom());
30128
30129			//Animate all of the markers in the clusters to move to their cluster center point
30130			cluster._recursivelyAnimateChildrenInAndAddSelfToMap(bounds, minZoom, previousZoomLevel + 1, newZoomLevel);
30131
30132			var me = this;
30133
30134			//Update the opacity (If we immediately set it they won't animate)
30135			this._forceLayout();
30136			cluster._recursivelyBecomeVisible(bounds, newZoomLevel);
30137
30138			//TODO: Maybe use the transition timing stuff to make this more reliable
30139			//When the animations are done, tidy up
30140			this._enqueue(function () {
30141
30142				//This cluster stopped being a cluster before the timeout fired
30143				if (cluster._childCount === 1) {
30144					var m = cluster._markers[0];
30145					//If we were in a cluster animation at the time then the opacity and position of our child could be wrong now, so fix it
30146					this._ignoreMove = true;
30147					m.setLatLng(m.getLatLng());
30148					this._ignoreMove = false;
30149					if (m.clusterShow) {
30150						m.clusterShow();
30151					}
30152				} else {
30153					cluster._recursively(bounds, newZoomLevel, minZoom, function (c) {
30154						c._recursivelyRemoveChildrenFromMap(bounds, minZoom, previousZoomLevel + 1);
30155					});
30156				}
30157				me._animationEnd();
30158			});
30159		},
30160
30161		_animationEnd: function () {
30162			if (this._map) {
30163				this._map._mapPane.className = this._map._mapPane.className.replace(' leaflet-cluster-anim', '');
30164			}
30165			this._inZoomAnimation--;
30166			this.fire('animationend');
30167		},
30168
30169		//Force a browser layout of stuff in the map
30170		// Should apply the current opacity and location to all elements so we can update them again for an animation
30171		_forceLayout: function () {
30172			//In my testing this works, infact offsetWidth of any element seems to work.
30173			//Could loop all this._layers and do this for each _icon if it stops working
30174
30175			L.Util.falseFn(document.body.offsetWidth);
30176		}
30177	});
30178
30179	L.markerClusterGroup = function (options) {
30180		return new L.MarkerClusterGroup(options);
30181	};
30182
30183	var MarkerCluster = L.MarkerCluster = L.Marker.extend({
30184		options: L.Icon.prototype.options,
30185
30186		initialize: function (group, zoom, a, b) {
30187
30188			L.Marker.prototype.initialize.call(this, a ? (a._cLatLng || a.getLatLng()) : new L.LatLng(0, 0),
30189	            { icon: this, pane: group.options.clusterPane });
30190
30191			this._group = group;
30192			this._zoom = zoom;
30193
30194			this._markers = [];
30195			this._childClusters = [];
30196			this._childCount = 0;
30197			this._iconNeedsUpdate = true;
30198			this._boundsNeedUpdate = true;
30199
30200			this._bounds = new L.LatLngBounds();
30201
30202			if (a) {
30203				this._addChild(a);
30204			}
30205			if (b) {
30206				this._addChild(b);
30207			}
30208		},
30209
30210		//Recursively retrieve all child markers of this cluster
30211		getAllChildMarkers: function (storageArray, ignoreDraggedMarker) {
30212			storageArray = storageArray || [];
30213
30214			for (var i = this._childClusters.length - 1; i >= 0; i--) {
30215				this._childClusters[i].getAllChildMarkers(storageArray, ignoreDraggedMarker);
30216			}
30217
30218			for (var j = this._markers.length - 1; j >= 0; j--) {
30219				if (ignoreDraggedMarker && this._markers[j].__dragStart) {
30220					continue;
30221				}
30222				storageArray.push(this._markers[j]);
30223			}
30224
30225			return storageArray;
30226		},
30227
30228		//Returns the count of how many child markers we have
30229		getChildCount: function () {
30230			return this._childCount;
30231		},
30232
30233		//Zoom to the minimum of showing all of the child markers, or the extents of this cluster
30234		zoomToBounds: function (fitBoundsOptions) {
30235			var childClusters = this._childClusters.slice(),
30236				map = this._group._map,
30237				boundsZoom = map.getBoundsZoom(this._bounds),
30238				zoom = this._zoom + 1,
30239				mapZoom = map.getZoom(),
30240				i;
30241
30242			//calculate how far we need to zoom down to see all of the markers
30243			while (childClusters.length > 0 && boundsZoom > zoom) {
30244				zoom++;
30245				var newClusters = [];
30246				for (i = 0; i < childClusters.length; i++) {
30247					newClusters = newClusters.concat(childClusters[i]._childClusters);
30248				}
30249				childClusters = newClusters;
30250			}
30251
30252			if (boundsZoom > zoom) {
30253				this._group._map.setView(this._latlng, zoom);
30254			} else if (boundsZoom <= mapZoom) { //If fitBounds wouldn't zoom us down, zoom us down instead
30255				this._group._map.setView(this._latlng, mapZoom + 1);
30256			} else {
30257				this._group._map.fitBounds(this._bounds, fitBoundsOptions);
30258			}
30259		},
30260
30261		getBounds: function () {
30262			var bounds = new L.LatLngBounds();
30263			bounds.extend(this._bounds);
30264			return bounds;
30265		},
30266
30267		_updateIcon: function () {
30268			this._iconNeedsUpdate = true;
30269			if (this._icon) {
30270				this.setIcon(this);
30271			}
30272		},
30273
30274		//Cludge for Icon, we pretend to be an icon for performance
30275		createIcon: function () {
30276			if (this._iconNeedsUpdate) {
30277				this._iconObj = this._group.options.iconCreateFunction(this);
30278				this._iconNeedsUpdate = false;
30279			}
30280			return this._iconObj.createIcon();
30281		},
30282		createShadow: function () {
30283			return this._iconObj.createShadow();
30284		},
30285
30286
30287		_addChild: function (new1, isNotificationFromChild) {
30288
30289			this._iconNeedsUpdate = true;
30290
30291			this._boundsNeedUpdate = true;
30292			this._setClusterCenter(new1);
30293
30294			if (new1 instanceof L.MarkerCluster) {
30295				if (!isNotificationFromChild) {
30296					this._childClusters.push(new1);
30297					new1.__parent = this;
30298				}
30299				this._childCount += new1._childCount;
30300			} else {
30301				if (!isNotificationFromChild) {
30302					this._markers.push(new1);
30303				}
30304				this._childCount++;
30305			}
30306
30307			if (this.__parent) {
30308				this.__parent._addChild(new1, true);
30309			}
30310		},
30311
30312		/**
30313		 * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.
30314		 * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.
30315		 * @private
30316		 */
30317		_setClusterCenter: function (child) {
30318			if (!this._cLatLng) {
30319				// when clustering, take position of the first point as the cluster center
30320				this._cLatLng = child._cLatLng || child._latlng;
30321			}
30322		},
30323
30324		/**
30325		 * Assigns impossible bounding values so that the next extend entirely determines the new bounds.
30326		 * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.
30327		 * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.
30328		 * @private
30329		 */
30330		_resetBounds: function () {
30331			var bounds = this._bounds;
30332
30333			if (bounds._southWest) {
30334				bounds._southWest.lat = Infinity;
30335				bounds._southWest.lng = Infinity;
30336			}
30337			if (bounds._northEast) {
30338				bounds._northEast.lat = -Infinity;
30339				bounds._northEast.lng = -Infinity;
30340			}
30341		},
30342
30343		_recalculateBounds: function () {
30344			var markers = this._markers,
30345			    childClusters = this._childClusters,
30346			    latSum = 0,
30347			    lngSum = 0,
30348			    totalCount = this._childCount,
30349			    i, child, childLatLng, childCount;
30350
30351			// Case where all markers are removed from the map and we are left with just an empty _topClusterLevel.
30352			if (totalCount === 0) {
30353				return;
30354			}
30355
30356			// Reset rather than creating a new object, for performance.
30357			this._resetBounds();
30358
30359			// Child markers.
30360			for (i = 0; i < markers.length; i++) {
30361				childLatLng = markers[i]._latlng;
30362
30363				this._bounds.extend(childLatLng);
30364
30365				latSum += childLatLng.lat;
30366				lngSum += childLatLng.lng;
30367			}
30368
30369			// Child clusters.
30370			for (i = 0; i < childClusters.length; i++) {
30371				child = childClusters[i];
30372
30373				// Re-compute child bounds and weighted position first if necessary.
30374				if (child._boundsNeedUpdate) {
30375					child._recalculateBounds();
30376				}
30377
30378				this._bounds.extend(child._bounds);
30379
30380				childLatLng = child._wLatLng;
30381				childCount = child._childCount;
30382
30383				latSum += childLatLng.lat * childCount;
30384				lngSum += childLatLng.lng * childCount;
30385			}
30386
30387			this._latlng = this._wLatLng = new L.LatLng(latSum / totalCount, lngSum / totalCount);
30388
30389			// Reset dirty flag.
30390			this._boundsNeedUpdate = false;
30391		},
30392
30393		//Set our markers position as given and add it to the map
30394		_addToMap: function (startPos) {
30395			if (startPos) {
30396				this._backupLatlng = this._latlng;
30397				this.setLatLng(startPos);
30398			}
30399			this._group._featureGroup.addLayer(this);
30400		},
30401
30402		_recursivelyAnimateChildrenIn: function (bounds, center, maxZoom) {
30403			this._recursively(bounds, this._group._map.getMinZoom(), maxZoom - 1,
30404				function (c) {
30405					var markers = c._markers,
30406						i, m;
30407					for (i = markers.length - 1; i >= 0; i--) {
30408						m = markers[i];
30409
30410						//Only do it if the icon is still on the map
30411						if (m._icon) {
30412							m._setPos(center);
30413							m.clusterHide();
30414						}
30415					}
30416				},
30417				function (c) {
30418					var childClusters = c._childClusters,
30419						j, cm;
30420					for (j = childClusters.length - 1; j >= 0; j--) {
30421						cm = childClusters[j];
30422						if (cm._icon) {
30423							cm._setPos(center);
30424							cm.clusterHide();
30425						}
30426					}
30427				}
30428			);
30429		},
30430
30431		_recursivelyAnimateChildrenInAndAddSelfToMap: function (bounds, mapMinZoom, previousZoomLevel, newZoomLevel) {
30432			this._recursively(bounds, newZoomLevel, mapMinZoom,
30433				function (c) {
30434					c._recursivelyAnimateChildrenIn(bounds, c._group._map.latLngToLayerPoint(c.getLatLng()).round(), previousZoomLevel);
30435
30436					//TODO: depthToAnimateIn affects _isSingleParent, if there is a multizoom we may/may not be.
30437					//As a hack we only do a animation free zoom on a single level zoom, if someone does multiple levels then we always animate
30438					if (c._isSingleParent() && previousZoomLevel - 1 === newZoomLevel) {
30439						c.clusterShow();
30440						c._recursivelyRemoveChildrenFromMap(bounds, mapMinZoom, previousZoomLevel); //Immediately remove our children as we are replacing them. TODO previousBounds not bounds
30441					} else {
30442						c.clusterHide();
30443					}
30444
30445					c._addToMap();
30446				}
30447			);
30448		},
30449
30450		_recursivelyBecomeVisible: function (bounds, zoomLevel) {
30451			this._recursively(bounds, this._group._map.getMinZoom(), zoomLevel, null, function (c) {
30452				c.clusterShow();
30453			});
30454		},
30455
30456		_recursivelyAddChildrenToMap: function (startPos, zoomLevel, bounds) {
30457			this._recursively(bounds, this._group._map.getMinZoom() - 1, zoomLevel,
30458				function (c) {
30459					if (zoomLevel === c._zoom) {
30460						return;
30461					}
30462
30463					//Add our child markers at startPos (so they can be animated out)
30464					for (var i = c._markers.length - 1; i >= 0; i--) {
30465						var nm = c._markers[i];
30466
30467						if (!bounds.contains(nm._latlng)) {
30468							continue;
30469						}
30470
30471						if (startPos) {
30472							nm._backupLatlng = nm.getLatLng();
30473
30474							nm.setLatLng(startPos);
30475							if (nm.clusterHide) {
30476								nm.clusterHide();
30477							}
30478						}
30479
30480						c._group._featureGroup.addLayer(nm);
30481					}
30482				},
30483				function (c) {
30484					c._addToMap(startPos);
30485				}
30486			);
30487		},
30488
30489		_recursivelyRestoreChildPositions: function (zoomLevel) {
30490			//Fix positions of child markers
30491			for (var i = this._markers.length - 1; i >= 0; i--) {
30492				var nm = this._markers[i];
30493				if (nm._backupLatlng) {
30494					nm.setLatLng(nm._backupLatlng);
30495					delete nm._backupLatlng;
30496				}
30497			}
30498
30499			if (zoomLevel - 1 === this._zoom) {
30500				//Reposition child clusters
30501				for (var j = this._childClusters.length - 1; j >= 0; j--) {
30502					this._childClusters[j]._restorePosition();
30503				}
30504			} else {
30505				for (var k = this._childClusters.length - 1; k >= 0; k--) {
30506					this._childClusters[k]._recursivelyRestoreChildPositions(zoomLevel);
30507				}
30508			}
30509		},
30510
30511		_restorePosition: function () {
30512			if (this._backupLatlng) {
30513				this.setLatLng(this._backupLatlng);
30514				delete this._backupLatlng;
30515			}
30516		},
30517
30518		//exceptBounds: If set, don't remove any markers/clusters in it
30519		_recursivelyRemoveChildrenFromMap: function (previousBounds, mapMinZoom, zoomLevel, exceptBounds) {
30520			var m, i;
30521			this._recursively(previousBounds, mapMinZoom - 1, zoomLevel - 1,
30522				function (c) {
30523					//Remove markers at every level
30524					for (i = c._markers.length - 1; i >= 0; i--) {
30525						m = c._markers[i];
30526						if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
30527							c._group._featureGroup.removeLayer(m);
30528							if (m.clusterShow) {
30529								m.clusterShow();
30530							}
30531						}
30532					}
30533				},
30534				function (c) {
30535					//Remove child clusters at just the bottom level
30536					for (i = c._childClusters.length - 1; i >= 0; i--) {
30537						m = c._childClusters[i];
30538						if (!exceptBounds || !exceptBounds.contains(m._latlng)) {
30539							c._group._featureGroup.removeLayer(m);
30540							if (m.clusterShow) {
30541								m.clusterShow();
30542							}
30543						}
30544					}
30545				}
30546			);
30547		},
30548
30549		//Run the given functions recursively to this and child clusters
30550		// boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to
30551		// zoomLevelToStart: zoom level to start running functions (inclusive)
30552		// zoomLevelToStop: zoom level to stop running functions (inclusive)
30553		// runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level
30554		// runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level
30555		_recursively: function (boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel) {
30556			var childClusters = this._childClusters,
30557			    zoom = this._zoom,
30558			    i, c;
30559
30560			if (zoomLevelToStart <= zoom) {
30561				if (runAtEveryLevel) {
30562					runAtEveryLevel(this);
30563				}
30564				if (runAtBottomLevel && zoom === zoomLevelToStop) {
30565					runAtBottomLevel(this);
30566				}
30567			}
30568
30569			if (zoom < zoomLevelToStart || zoom < zoomLevelToStop) {
30570				for (i = childClusters.length - 1; i >= 0; i--) {
30571					c = childClusters[i];
30572					if (c._boundsNeedUpdate) {
30573						c._recalculateBounds();
30574					}
30575					if (boundsToApplyTo.intersects(c._bounds)) {
30576						c._recursively(boundsToApplyTo, zoomLevelToStart, zoomLevelToStop, runAtEveryLevel, runAtBottomLevel);
30577					}
30578				}
30579			}
30580		},
30581
30582		//Returns true if we are the parent of only one cluster and that cluster is the same as us
30583		_isSingleParent: function () {
30584			//Don't need to check this._markers as the rest won't work if there are any
30585			return this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;
30586		}
30587	});
30588
30589	/*
30590	* Extends L.Marker to include two extra methods: clusterHide and clusterShow.
30591	* 
30592	* They work as setOpacity(0) and setOpacity(1) respectively, but
30593	* don't overwrite the options.opacity
30594	* 
30595	*/
30596
30597	L.Marker.include({
30598		clusterHide: function () {
30599			var backup = this.options.opacity;
30600			this.setOpacity(0);
30601			this.options.opacity = backup;
30602			return this;
30603		},
30604		
30605		clusterShow: function () {
30606			return this.setOpacity(this.options.opacity);
30607		}
30608	});
30609
30610	L.DistanceGrid = function (cellSize) {
30611		this._cellSize = cellSize;
30612		this._sqCellSize = cellSize * cellSize;
30613		this._grid = {};
30614		this._objectPoint = { };
30615	};
30616
30617	L.DistanceGrid.prototype = {
30618
30619		addObject: function (obj, point) {
30620			var x = this._getCoord(point.x),
30621			    y = this._getCoord(point.y),
30622			    grid = this._grid,
30623			    row = grid[y] = grid[y] || {},
30624			    cell = row[x] = row[x] || [],
30625			    stamp = L.Util.stamp(obj);
30626
30627			this._objectPoint[stamp] = point;
30628
30629			cell.push(obj);
30630		},
30631
30632		updateObject: function (obj, point) {
30633			this.removeObject(obj);
30634			this.addObject(obj, point);
30635		},
30636
30637		//Returns true if the object was found
30638		removeObject: function (obj, point) {
30639			var x = this._getCoord(point.x),
30640			    y = this._getCoord(point.y),
30641			    grid = this._grid,
30642			    row = grid[y] = grid[y] || {},
30643			    cell = row[x] = row[x] || [],
30644			    i, len;
30645
30646			delete this._objectPoint[L.Util.stamp(obj)];
30647
30648			for (i = 0, len = cell.length; i < len; i++) {
30649				if (cell[i] === obj) {
30650
30651					cell.splice(i, 1);
30652
30653					if (len === 1) {
30654						delete row[x];
30655					}
30656
30657					return true;
30658				}
30659			}
30660
30661		},
30662
30663		eachObject: function (fn, context) {
30664			var i, j, k, len, row, cell, removed,
30665			    grid = this._grid;
30666
30667			for (i in grid) {
30668				row = grid[i];
30669
30670				for (j in row) {
30671					cell = row[j];
30672
30673					for (k = 0, len = cell.length; k < len; k++) {
30674						removed = fn.call(context, cell[k]);
30675						if (removed) {
30676							k--;
30677							len--;
30678						}
30679					}
30680				}
30681			}
30682		},
30683
30684		getNearObject: function (point) {
30685			var x = this._getCoord(point.x),
30686			    y = this._getCoord(point.y),
30687			    i, j, k, row, cell, len, obj, dist,
30688			    objectPoint = this._objectPoint,
30689			    closestDistSq = this._sqCellSize,
30690			    closest = null;
30691
30692			for (i = y - 1; i <= y + 1; i++) {
30693				row = this._grid[i];
30694				if (row) {
30695
30696					for (j = x - 1; j <= x + 1; j++) {
30697						cell = row[j];
30698						if (cell) {
30699
30700							for (k = 0, len = cell.length; k < len; k++) {
30701								obj = cell[k];
30702								dist = this._sqDist(objectPoint[L.Util.stamp(obj)], point);
30703								if (dist < closestDistSq ||
30704									dist <= closestDistSq && closest === null) {
30705									closestDistSq = dist;
30706									closest = obj;
30707								}
30708							}
30709						}
30710					}
30711				}
30712			}
30713			return closest;
30714		},
30715
30716		_getCoord: function (x) {
30717			var coord = Math.floor(x / this._cellSize);
30718			return isFinite(coord) ? coord : x;
30719		},
30720
30721		_sqDist: function (p, p2) {
30722			var dx = p2.x - p.x,
30723			    dy = p2.y - p.y;
30724			return dx * dx + dy * dy;
30725		}
30726	};
30727
30728	/* Copyright (c) 2012 the authors listed at the following URL, and/or
30729	the authors of referenced articles or incorporated external code:
30730	http://en.literateprograms.org/Quickhull_(Javascript)?action=history&offset=20120410175256
30731
30732	Permission is hereby granted, free of charge, to any person obtaining
30733	a copy of this software and associated documentation files (the
30734	"Software"), to deal in the Software without restriction, including
30735	without limitation the rights to use, copy, modify, merge, publish,
30736	distribute, sublicense, and/or sell copies of the Software, and to
30737	permit persons to whom the Software is furnished to do so, subject to
30738	the following conditions:
30739
30740	The above copyright notice and this permission notice shall be
30741	included in all copies or substantial portions of the Software.
30742
30743	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
30744	EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30745	MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
30746	IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
30747	CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
30748	TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30749	SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30750
30751	Retrieved from: http://en.literateprograms.org/Quickhull_(Javascript)?oldid=18434
30752	*/
30753
30754	(function () {
30755		L.QuickHull = {
30756
30757			/*
30758			 * @param {Object} cpt a point to be measured from the baseline
30759			 * @param {Array} bl the baseline, as represented by a two-element
30760			 *   array of latlng objects.
30761			 * @returns {Number} an approximate distance measure
30762			 */
30763			getDistant: function (cpt, bl) {
30764				var vY = bl[1].lat - bl[0].lat,
30765					vX = bl[0].lng - bl[1].lng;
30766				return (vX * (cpt.lat - bl[0].lat) + vY * (cpt.lng - bl[0].lng));
30767			},
30768
30769			/*
30770			 * @param {Array} baseLine a two-element array of latlng objects
30771			 *   representing the baseline to project from
30772			 * @param {Array} latLngs an array of latlng objects
30773			 * @returns {Object} the maximum point and all new points to stay
30774			 *   in consideration for the hull.
30775			 */
30776			findMostDistantPointFromBaseLine: function (baseLine, latLngs) {
30777				var maxD = 0,
30778					maxPt = null,
30779					newPoints = [],
30780					i, pt, d;
30781
30782				for (i = latLngs.length - 1; i >= 0; i--) {
30783					pt = latLngs[i];
30784					d = this.getDistant(pt, baseLine);
30785
30786					if (d > 0) {
30787						newPoints.push(pt);
30788					} else {
30789						continue;
30790					}
30791
30792					if (d > maxD) {
30793						maxD = d;
30794						maxPt = pt;
30795					}
30796				}
30797
30798				return { maxPoint: maxPt, newPoints: newPoints };
30799			},
30800
30801
30802			/*
30803			 * Given a baseline, compute the convex hull of latLngs as an array
30804			 * of latLngs.
30805			 *
30806			 * @param {Array} latLngs
30807			 * @returns {Array}
30808			 */
30809			buildConvexHull: function (baseLine, latLngs) {
30810				var convexHullBaseLines = [],
30811					t = this.findMostDistantPointFromBaseLine(baseLine, latLngs);
30812
30813				if (t.maxPoint) { // if there is still a point "outside" the base line
30814					convexHullBaseLines =
30815						convexHullBaseLines.concat(
30816							this.buildConvexHull([baseLine[0], t.maxPoint], t.newPoints)
30817						);
30818					convexHullBaseLines =
30819						convexHullBaseLines.concat(
30820							this.buildConvexHull([t.maxPoint, baseLine[1]], t.newPoints)
30821						);
30822					return convexHullBaseLines;
30823				} else {  // if there is no more point "outside" the base line, the current base line is part of the convex hull
30824					return [baseLine[0]];
30825				}
30826			},
30827
30828			/*
30829			 * Given an array of latlngs, compute a convex hull as an array
30830			 * of latlngs
30831			 *
30832			 * @param {Array} latLngs
30833			 * @returns {Array}
30834			 */
30835			getConvexHull: function (latLngs) {
30836				// find first baseline
30837				var maxLat = false, minLat = false,
30838					maxLng = false, minLng = false,
30839					maxLatPt = null, minLatPt = null,
30840					maxLngPt = null, minLngPt = null,
30841					maxPt = null, minPt = null,
30842					i;
30843
30844				for (i = latLngs.length - 1; i >= 0; i--) {
30845					var pt = latLngs[i];
30846					if (maxLat === false || pt.lat > maxLat) {
30847						maxLatPt = pt;
30848						maxLat = pt.lat;
30849					}
30850					if (minLat === false || pt.lat < minLat) {
30851						minLatPt = pt;
30852						minLat = pt.lat;
30853					}
30854					if (maxLng === false || pt.lng > maxLng) {
30855						maxLngPt = pt;
30856						maxLng = pt.lng;
30857					}
30858					if (minLng === false || pt.lng < minLng) {
30859						minLngPt = pt;
30860						minLng = pt.lng;
30861					}
30862				}
30863				
30864				if (minLat !== maxLat) {
30865					minPt = minLatPt;
30866					maxPt = maxLatPt;
30867				} else {
30868					minPt = minLngPt;
30869					maxPt = maxLngPt;
30870				}
30871
30872				var ch = [].concat(this.buildConvexHull([minPt, maxPt], latLngs),
30873									this.buildConvexHull([maxPt, minPt], latLngs));
30874				return ch;
30875			}
30876		};
30877	}());
30878
30879	L.MarkerCluster.include({
30880		getConvexHull: function () {
30881			var childMarkers = this.getAllChildMarkers(),
30882				points = [],
30883				p, i;
30884
30885			for (i = childMarkers.length - 1; i >= 0; i--) {
30886				p = childMarkers[i].getLatLng();
30887				points.push(p);
30888			}
30889
30890			return L.QuickHull.getConvexHull(points);
30891		}
30892	});
30893
30894	//This code is 100% based on https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet
30895	//Huge thanks to jawj for implementing it first to make my job easy :-)
30896
30897	L.MarkerCluster.include({
30898
30899		_2PI: Math.PI * 2,
30900		_circleFootSeparation: 25, //related to circumference of circle
30901		_circleStartAngle: 0,
30902
30903		_spiralFootSeparation:  28, //related to size of spiral (experiment!)
30904		_spiralLengthStart: 11,
30905		_spiralLengthFactor: 5,
30906
30907		_circleSpiralSwitchover: 9, //show spiral instead of circle from this marker count upwards.
30908									// 0 -> always spiral; Infinity -> always circle
30909
30910		spiderfy: function () {
30911			if (this._group._spiderfied === this || this._group._inZoomAnimation) {
30912				return;
30913			}
30914
30915			var childMarkers = this.getAllChildMarkers(null, true),
30916				group = this._group,
30917				map = group._map,
30918				center = map.latLngToLayerPoint(this._latlng),
30919				positions;
30920
30921			this._group._unspiderfy();
30922			this._group._spiderfied = this;
30923
30924			//TODO Maybe: childMarkers order by distance to center
30925
30926			if (this._group.options.spiderfyShapePositions) {
30927				positions = this._group.options.spiderfyShapePositions(childMarkers.length, center);
30928			} else if (childMarkers.length >= this._circleSpiralSwitchover) {
30929				positions = this._generatePointsSpiral(childMarkers.length, center);
30930			} else {
30931				center.y += 10; // Otherwise circles look wrong => hack for standard blue icon, renders differently for other icons.
30932				positions = this._generatePointsCircle(childMarkers.length, center);
30933			}
30934
30935			this._animationSpiderfy(childMarkers, positions);
30936		},
30937
30938		unspiderfy: function (zoomDetails) {
30939			/// <param Name="zoomDetails">Argument from zoomanim if being called in a zoom animation or null otherwise</param>
30940			if (this._group._inZoomAnimation) {
30941				return;
30942			}
30943			this._animationUnspiderfy(zoomDetails);
30944
30945			this._group._spiderfied = null;
30946		},
30947
30948		_generatePointsCircle: function (count, centerPt) {
30949			var circumference = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + count),
30950				legLength = circumference / this._2PI,  //radius from circumference
30951				angleStep = this._2PI / count,
30952				res = [],
30953				i, angle;
30954
30955			legLength = Math.max(legLength, 35); // Minimum distance to get outside the cluster icon.
30956
30957			res.length = count;
30958
30959			for (i = 0; i < count; i++) { // Clockwise, like spiral.
30960				angle = this._circleStartAngle + i * angleStep;
30961				res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();
30962			}
30963
30964			return res;
30965		},
30966
30967		_generatePointsSpiral: function (count, centerPt) {
30968			var spiderfyDistanceMultiplier = this._group.options.spiderfyDistanceMultiplier,
30969				legLength = spiderfyDistanceMultiplier * this._spiralLengthStart,
30970				separation = spiderfyDistanceMultiplier * this._spiralFootSeparation,
30971				lengthFactor = spiderfyDistanceMultiplier * this._spiralLengthFactor * this._2PI,
30972				angle = 0,
30973				res = [],
30974				i;
30975
30976			res.length = count;
30977
30978			// Higher index, closer position to cluster center.
30979			for (i = count; i >= 0; i--) {
30980				// Skip the first position, so that we are already farther from center and we avoid
30981				// being under the default cluster icon (especially important for Circle Markers).
30982				if (i < count) {
30983					res[i] = new L.Point(centerPt.x + legLength * Math.cos(angle), centerPt.y + legLength * Math.sin(angle))._round();
30984				}
30985				angle += separation / legLength + i * 0.0005;
30986				legLength += lengthFactor / angle;
30987			}
30988			return res;
30989		},
30990
30991		_noanimationUnspiderfy: function () {
30992			var group = this._group,
30993				map = group._map,
30994				fg = group._featureGroup,
30995				childMarkers = this.getAllChildMarkers(null, true),
30996				m, i;
30997
30998			group._ignoreMove = true;
30999
31000			this.setOpacity(1);
31001			for (i = childMarkers.length - 1; i >= 0; i--) {
31002				m = childMarkers[i];
31003
31004				fg.removeLayer(m);
31005
31006				if (m._preSpiderfyLatlng) {
31007					m.setLatLng(m._preSpiderfyLatlng);
31008					delete m._preSpiderfyLatlng;
31009				}
31010				if (m.setZIndexOffset) {
31011					m.setZIndexOffset(0);
31012				}
31013
31014				if (m._spiderLeg) {
31015					map.removeLayer(m._spiderLeg);
31016					delete m._spiderLeg;
31017				}
31018			}
31019
31020			group.fire('unspiderfied', {
31021				cluster: this,
31022				markers: childMarkers
31023			});
31024			group._ignoreMove = false;
31025			group._spiderfied = null;
31026		}
31027	});
31028
31029	//Non Animated versions of everything
31030	L.MarkerClusterNonAnimated = L.MarkerCluster.extend({
31031		_animationSpiderfy: function (childMarkers, positions) {
31032			var group = this._group,
31033				map = group._map,
31034				fg = group._featureGroup,
31035				legOptions = this._group.options.spiderLegPolylineOptions,
31036				i, m, leg, newPos;
31037
31038			group._ignoreMove = true;
31039
31040			// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.
31041			// The reverse order trick no longer improves performance on modern browsers.
31042			for (i = 0; i < childMarkers.length; i++) {
31043				newPos = map.layerPointToLatLng(positions[i]);
31044				m = childMarkers[i];
31045
31046				// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.
31047				leg = new L.Polyline([this._latlng, newPos], legOptions);
31048				map.addLayer(leg);
31049				m._spiderLeg = leg;
31050
31051				// Now add the marker.
31052				m._preSpiderfyLatlng = m._latlng;
31053				m.setLatLng(newPos);
31054				if (m.setZIndexOffset) {
31055					m.setZIndexOffset(1000000); //Make these appear on top of EVERYTHING
31056				}
31057
31058				fg.addLayer(m);
31059			}
31060			this.setOpacity(0.3);
31061
31062			group._ignoreMove = false;
31063			group.fire('spiderfied', {
31064				cluster: this,
31065				markers: childMarkers
31066			});
31067		},
31068
31069		_animationUnspiderfy: function () {
31070			this._noanimationUnspiderfy();
31071		}
31072	});
31073
31074	//Animated versions here
31075	L.MarkerCluster.include({
31076
31077		_animationSpiderfy: function (childMarkers, positions) {
31078			var me = this,
31079				group = this._group,
31080				map = group._map,
31081				fg = group._featureGroup,
31082				thisLayerLatLng = this._latlng,
31083				thisLayerPos = map.latLngToLayerPoint(thisLayerLatLng),
31084				svg = L.Path.SVG,
31085				legOptions = L.extend({}, this._group.options.spiderLegPolylineOptions), // Copy the options so that we can modify them for animation.
31086				finalLegOpacity = legOptions.opacity,
31087				i, m, leg, legPath, legLength, newPos;
31088
31089			if (finalLegOpacity === undefined) {
31090				finalLegOpacity = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity;
31091			}
31092
31093			if (svg) {
31094				// If the initial opacity of the spider leg is not 0 then it appears before the animation starts.
31095				legOptions.opacity = 0;
31096
31097				// Add the class for CSS transitions.
31098				legOptions.className = (legOptions.className || '') + ' leaflet-cluster-spider-leg';
31099			} else {
31100				// Make sure we have a defined opacity.
31101				legOptions.opacity = finalLegOpacity;
31102			}
31103
31104			group._ignoreMove = true;
31105
31106			// Add markers and spider legs to map, hidden at our center point.
31107			// Traverse in ascending order to make sure that inner circleMarkers are on top of further legs. Normal markers are re-ordered by newPosition.
31108			// The reverse order trick no longer improves performance on modern browsers.
31109			for (i = 0; i < childMarkers.length; i++) {
31110				m = childMarkers[i];
31111
31112				newPos = map.layerPointToLatLng(positions[i]);
31113
31114				// Add the leg before the marker, so that in case the latter is a circleMarker, the leg is behind it.
31115				leg = new L.Polyline([thisLayerLatLng, newPos], legOptions);
31116				map.addLayer(leg);
31117				m._spiderLeg = leg;
31118
31119				// Explanations: https://jakearchibald.com/2013/animated-line-drawing-svg/
31120				// In our case the transition property is declared in the CSS file.
31121				if (svg) {
31122					legPath = leg._path;
31123					legLength = legPath.getTotalLength() + 0.1; // Need a small extra length to avoid remaining dot in Firefox.
31124					legPath.style.strokeDasharray = legLength; // Just 1 length is enough, it will be duplicated.
31125					legPath.style.strokeDashoffset = legLength;
31126				}
31127
31128				// If it is a marker, add it now and we'll animate it out
31129				if (m.setZIndexOffset) {
31130					m.setZIndexOffset(1000000); // Make normal markers appear on top of EVERYTHING
31131				}
31132				if (m.clusterHide) {
31133					m.clusterHide();
31134				}
31135				
31136				// Vectors just get immediately added
31137				fg.addLayer(m);
31138
31139				if (m._setPos) {
31140					m._setPos(thisLayerPos);
31141				}
31142			}
31143
31144			group._forceLayout();
31145			group._animationStart();
31146
31147			// Reveal markers and spider legs.
31148			for (i = childMarkers.length - 1; i >= 0; i--) {
31149				newPos = map.layerPointToLatLng(positions[i]);
31150				m = childMarkers[i];
31151
31152				//Move marker to new position
31153				m._preSpiderfyLatlng = m._latlng;
31154				m.setLatLng(newPos);
31155				
31156				if (m.clusterShow) {
31157					m.clusterShow();
31158				}
31159
31160				// Animate leg (animation is actually delegated to CSS transition).
31161				if (svg) {
31162					leg = m._spiderLeg;
31163					legPath = leg._path;
31164					legPath.style.strokeDashoffset = 0;
31165					//legPath.style.strokeOpacity = finalLegOpacity;
31166					leg.setStyle({opacity: finalLegOpacity});
31167				}
31168			}
31169			this.setOpacity(0.3);
31170
31171			group._ignoreMove = false;
31172
31173			setTimeout(function () {
31174				group._animationEnd();
31175				group.fire('spiderfied', {
31176					cluster: me,
31177					markers: childMarkers
31178				});
31179			}, 200);
31180		},
31181
31182		_animationUnspiderfy: function (zoomDetails) {
31183			var me = this,
31184				group = this._group,
31185				map = group._map,
31186				fg = group._featureGroup,
31187				thisLayerPos = zoomDetails ? map._latLngToNewLayerPoint(this._latlng, zoomDetails.zoom, zoomDetails.center) : map.latLngToLayerPoint(this._latlng),
31188				childMarkers = this.getAllChildMarkers(null, true),
31189				svg = L.Path.SVG,
31190				m, i, leg, legPath, legLength, nonAnimatable;
31191
31192			group._ignoreMove = true;
31193			group._animationStart();
31194
31195			//Make us visible and bring the child markers back in
31196			this.setOpacity(1);
31197			for (i = childMarkers.length - 1; i >= 0; i--) {
31198				m = childMarkers[i];
31199
31200				//Marker was added to us after we were spiderfied
31201				if (!m._preSpiderfyLatlng) {
31202					continue;
31203				}
31204
31205				//Close any popup on the marker first, otherwise setting the location of the marker will make the map scroll
31206				m.closePopup();
31207
31208				//Fix up the location to the real one
31209				m.setLatLng(m._preSpiderfyLatlng);
31210				delete m._preSpiderfyLatlng;
31211
31212				//Hack override the location to be our center
31213				nonAnimatable = true;
31214				if (m._setPos) {
31215					m._setPos(thisLayerPos);
31216					nonAnimatable = false;
31217				}
31218				if (m.clusterHide) {
31219					m.clusterHide();
31220					nonAnimatable = false;
31221				}
31222				if (nonAnimatable) {
31223					fg.removeLayer(m);
31224				}
31225
31226				// Animate the spider leg back in (animation is actually delegated to CSS transition).
31227				if (svg) {
31228					leg = m._spiderLeg;
31229					legPath = leg._path;
31230					legLength = legPath.getTotalLength() + 0.1;
31231					legPath.style.strokeDashoffset = legLength;
31232					leg.setStyle({opacity: 0});
31233				}
31234			}
31235
31236			group._ignoreMove = false;
31237
31238			setTimeout(function () {
31239				//If we have only <= one child left then that marker will be shown on the map so don't remove it!
31240				var stillThereChildCount = 0;
31241				for (i = childMarkers.length - 1; i >= 0; i--) {
31242					m = childMarkers[i];
31243					if (m._spiderLeg) {
31244						stillThereChildCount++;
31245					}
31246				}
31247
31248
31249				for (i = childMarkers.length - 1; i >= 0; i--) {
31250					m = childMarkers[i];
31251
31252					if (!m._spiderLeg) { //Has already been unspiderfied
31253						continue;
31254					}
31255
31256					if (m.clusterShow) {
31257						m.clusterShow();
31258					}
31259					if (m.setZIndexOffset) {
31260						m.setZIndexOffset(0);
31261					}
31262
31263					if (stillThereChildCount > 1) {
31264						fg.removeLayer(m);
31265					}
31266
31267					map.removeLayer(m._spiderLeg);
31268					delete m._spiderLeg;
31269				}
31270				group._animationEnd();
31271				group.fire('unspiderfied', {
31272					cluster: me,
31273					markers: childMarkers
31274				});
31275			}, 200);
31276		}
31277	});
31278
31279
31280	L.MarkerClusterGroup.include({
31281		//The MarkerCluster currently spiderfied (if any)
31282		_spiderfied: null,
31283
31284		unspiderfy: function () {
31285			this._unspiderfy.apply(this, arguments);
31286		},
31287
31288		_spiderfierOnAdd: function () {
31289			this._map.on('click', this._unspiderfyWrapper, this);
31290
31291			if (this._map.options.zoomAnimation) {
31292				this._map.on('zoomstart', this._unspiderfyZoomStart, this);
31293			}
31294			//Browsers without zoomAnimation or a big zoom don't fire zoomstart
31295			this._map.on('zoomend', this._noanimationUnspiderfy, this);
31296
31297			if (!L.Browser.touch) {
31298				this._map.getRenderer(this);
31299				//Needs to happen in the pageload, not after, or animations don't work in webkit
31300				//  http://stackoverflow.com/questions/8455200/svg-animate-with-dynamically-added-elements
31301				//Disable on touch browsers as the animation messes up on a touch zoom and isn't very noticable
31302			}
31303		},
31304
31305		_spiderfierOnRemove: function () {
31306			this._map.off('click', this._unspiderfyWrapper, this);
31307			this._map.off('zoomstart', this._unspiderfyZoomStart, this);
31308			this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
31309			this._map.off('zoomend', this._noanimationUnspiderfy, this);
31310
31311			//Ensure that markers are back where they should be
31312			// Use no animation to avoid a sticky leaflet-cluster-anim class on mapPane
31313			this._noanimationUnspiderfy();
31314		},
31315
31316		//On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)
31317		//This means we can define the animation they do rather than Markers doing an animation to their actual location
31318		_unspiderfyZoomStart: function () {
31319			if (!this._map) { //May have been removed from the map by a zoomEnd handler
31320				return;
31321			}
31322
31323			this._map.on('zoomanim', this._unspiderfyZoomAnim, this);
31324		},
31325
31326		_unspiderfyZoomAnim: function (zoomDetails) {
31327			//Wait until the first zoomanim after the user has finished touch-zooming before running the animation
31328			if (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {
31329				return;
31330			}
31331
31332			this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
31333			this._unspiderfy(zoomDetails);
31334		},
31335
31336		_unspiderfyWrapper: function () {
31337			/// <summary>_unspiderfy but passes no arguments</summary>
31338			this._unspiderfy();
31339		},
31340
31341		_unspiderfy: function (zoomDetails) {
31342			if (this._spiderfied) {
31343				this._spiderfied.unspiderfy(zoomDetails);
31344			}
31345		},
31346
31347		_noanimationUnspiderfy: function () {
31348			if (this._spiderfied) {
31349				this._spiderfied._noanimationUnspiderfy();
31350			}
31351		},
31352
31353		//If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc
31354		_unspiderfyLayer: function (layer) {
31355			if (layer._spiderLeg) {
31356				this._featureGroup.removeLayer(layer);
31357
31358				if (layer.clusterShow) {
31359					layer.clusterShow();
31360				}
31361					//Position will be fixed up immediately in _animationUnspiderfy
31362				if (layer.setZIndexOffset) {
31363					layer.setZIndexOffset(0);
31364				}
31365
31366				this._map.removeLayer(layer._spiderLeg);
31367				delete layer._spiderLeg;
31368			}
31369		}
31370	});
31371
31372	/**
31373	 * Adds 1 public method to MCG and 1 to L.Marker to facilitate changing
31374	 * markers' icon options and refreshing their icon and their parent clusters
31375	 * accordingly (case where their iconCreateFunction uses data of childMarkers
31376	 * to make up the cluster icon).
31377	 */
31378
31379
31380	L.MarkerClusterGroup.include({
31381		/**
31382		 * Updates the icon of all clusters which are parents of the given marker(s).
31383		 * In singleMarkerMode, also updates the given marker(s) icon.
31384		 * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|
31385		 * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent
31386		 * clusters need to be updated. If not provided, retrieves all child markers of this.
31387		 * @returns {L.MarkerClusterGroup}
31388		 */
31389		refreshClusters: function (layers) {
31390			if (!layers) {
31391				layers = this._topClusterLevel.getAllChildMarkers();
31392			} else if (layers instanceof L.MarkerClusterGroup) {
31393				layers = layers._topClusterLevel.getAllChildMarkers();
31394			} else if (layers instanceof L.LayerGroup) {
31395				layers = layers._layers;
31396			} else if (layers instanceof L.MarkerCluster) {
31397				layers = layers.getAllChildMarkers();
31398			} else if (layers instanceof L.Marker) {
31399				layers = [layers];
31400			} // else: must be an Array(L.Marker)|Map(L.Marker)
31401			this._flagParentsIconsNeedUpdate(layers);
31402			this._refreshClustersIcons();
31403
31404			// In case of singleMarkerMode, also re-draw the markers.
31405			if (this.options.singleMarkerMode) {
31406				this._refreshSingleMarkerModeMarkers(layers);
31407			}
31408
31409			return this;
31410		},
31411
31412		/**
31413		 * Simply flags all parent clusters of the given markers as having a "dirty" icon.
31414		 * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
31415		 * @private
31416		 */
31417		_flagParentsIconsNeedUpdate: function (layers) {
31418			var id, parent;
31419
31420			// Assumes layers is an Array or an Object whose prototype is non-enumerable.
31421			for (id in layers) {
31422				// Flag parent clusters' icon as "dirty", all the way up.
31423				// Dumb process that flags multiple times upper parents, but still
31424				// much more efficient than trying to be smart and make short lists,
31425				// at least in the case of a hierarchy following a power law:
31426				// http://jsperf.com/flag-nodes-in-power-hierarchy/2
31427				parent = layers[id].__parent;
31428				while (parent) {
31429					parent._iconNeedsUpdate = true;
31430					parent = parent.__parent;
31431				}
31432			}
31433		},
31434
31435		/**
31436		 * Re-draws the icon of the supplied markers.
31437		 * To be used in singleMarkerMode only.
31438		 * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
31439		 * @private
31440		 */
31441		_refreshSingleMarkerModeMarkers: function (layers) {
31442			var id, layer;
31443
31444			for (id in layers) {
31445				layer = layers[id];
31446
31447				// Make sure we do not override markers that do not belong to THIS group.
31448				if (this.hasLayer(layer)) {
31449					// Need to re-create the icon first, then re-draw the marker.
31450					layer.setIcon(this._overrideMarkerIcon(layer));
31451				}
31452			}
31453		}
31454	});
31455
31456	L.Marker.include({
31457		/**
31458		 * Updates the given options in the marker's icon and refreshes the marker.
31459		 * @param options map object of icon options.
31460		 * @param directlyRefreshClusters boolean (optional) true to trigger
31461		 * MCG.refreshClustersOf() right away with this single marker.
31462		 * @returns {L.Marker}
31463		 */
31464		refreshIconOptions: function (options, directlyRefreshClusters) {
31465			var icon = this.options.icon;
31466
31467			L.setOptions(icon, options);
31468
31469			this.setIcon(icon);
31470
31471			// Shortcut to refresh the associated MCG clusters right away.
31472			// To be used when refreshing a single marker.
31473			// Otherwise, better use MCG.refreshClusters() once at the end with
31474			// the list of modified markers.
31475			if (directlyRefreshClusters && this.__parent) {
31476				this.__parent._group.refreshClusters(this);
31477			}
31478
31479			return this;
31480		}
31481	});
31482
31483	exports.MarkerClusterGroup = MarkerClusterGroup;
31484	exports.MarkerCluster = MarkerCluster;
31485
31486	Object.defineProperty(exports, '__esModule', { value: true });
31487
31488}));
31489//# sourceMappingURL=leaflet.markercluster-src.js.map
vendor: 2,158 bytes, lines 31490-31568
31490
31491
31492/***/ }),
31493
31494/***/ 45243:
31495/***/ (function(__unused_webpack_module, exports) {
31496
31497/* @preserve
31498 * Leaflet 1.8.0, a JS library for interactive maps. https://leafletjs.com
31499 * (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade
31500 */
31501
31502(function (global, factory) {
31503   true ? factory(exports) :
31504  0;
31505})(this, (function (exports) { 'use strict';
31506
31507  var version = "1.8.0";
31508
31509  /*
31510   * @namespace Util
31511   *
31512   * Various utility functions, used by Leaflet internally.
31513   */
31514
31515  // @function extend(dest: Object, src?: Object): Object
31516  // Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.
31517  function extend(dest) {
31518  	var i, j, len, src;
31519
31520  	for (j = 1, len = arguments.length; j < len; j++) {
31521  		src = arguments[j];
31522  		for (i in src) {
31523  			dest[i] = src[i];
31524  		}
31525  	}
31526  	return dest;
31527  }
31528
31529  // @function create(proto: Object, properties?: Object): Object
31530  // Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)
31531  var create$2 = Object.create || (function () {
31532  	function F() {}
31533  	return function (proto) {
31534  		F.prototype = proto;
31535  		return new F();
31536  	};
31537  })();
31538
31539  // @function bind(fn: Function, …): Function
31540  // Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).
31541  // Has a `L.bind()` shortcut.
31542  function bind(fn, obj) {
31543  	var slice = Array.prototype.slice;
31544
31545  	if (fn.bind) {
31546  		return fn.bind.apply(fn, slice.call(arguments, 1));
31547  	}
31548
31549  	var args = slice.call(arguments, 2);
31550
31551  	return function () {
31552  		return fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);
31553  	};
31554  }
31555
31556  // @property lastId: Number
31557  // Last unique ID used by [`stamp()`](#util-stamp)
31558  var lastId = 0;
31559
31560  // @function stamp(obj: Object): Number
31561  // Returns the unique ID of an object, assigning it one if it doesn't have it.
31562  function stamp(obj) {
31563  	if (!('_leaflet_id' in obj)) {
31564  		obj['_leaflet_id'] = ++lastId;
31565  	}
31566  	return obj._leaflet_id;
31567  }
31568
vendor: 11,174 bytes, lines 31569-31901
31569  // @function throttle(fn: Function, time: Number, context: Object): Function
31570  // Returns a function which executes function `fn` with the given scope `context`
31571  // (so that the `this` keyword refers to `context` inside `fn`'s code). The function
31572  // `fn` will be called no more than one time per given amount of `time`. The arguments
31573  // received by the bound function will be any arguments passed when binding the
31574  // function, followed by any arguments passed when invoking the bound function.
31575  // Has an `L.throttle` shortcut.
31576  function throttle(fn, time, context) {
31577  	var lock, args, wrapperFn, later;
31578
31579  	later = function () {
31580  		// reset lock and call if queued
31581  		lock = false;
31582  		if (args) {
31583  			wrapperFn.apply(context, args);
31584  			args = false;
31585  		}
31586  	};
31587
31588  	wrapperFn = function () {
31589  		if (lock) {
31590  			// called too soon, queue to call later
31591  			args = arguments;
31592
31593  		} else {
31594  			// call and lock until later
31595  			fn.apply(context, arguments);
31596  			setTimeout(later, time);
31597  			lock = true;
31598  		}
31599  	};
31600
31601  	return wrapperFn;
31602  }
31603
31604  // @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number
31605  // Returns the number `num` modulo `range` in such a way so it lies within
31606  // `range[0]` and `range[1]`. The returned value will be always smaller than
31607  // `range[1]` unless `includeMax` is set to `true`.
31608  function wrapNum(x, range, includeMax) {
31609  	var max = range[1],
31610  	    min = range[0],
31611  	    d = max - min;
31612  	return x === max && includeMax ? x : ((x - min) % d + d) % d + min;
31613  }
31614
31615  // @function falseFn(): Function
31616  // Returns a function which always returns `false`.
31617  function falseFn() { return false; }
31618
31619  // @function formatNum(num: Number, precision?: Number|false): Number
31620  // Returns the number `num` rounded with specified `precision`.
31621  // The default `precision` value is 6 decimal places.
31622  // `false` can be passed to skip any processing (can be useful to avoid round-off errors).
31623  function formatNum(num, precision) {
31624  	if (precision === false) { return num; }
31625  	var pow = Math.pow(10, precision === undefined ? 6 : precision);
31626  	return Math.round(num * pow) / pow;
31627  }
31628
31629  // @function trim(str: String): String
31630  // Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
31631  function trim(str) {
31632  	return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
31633  }
31634
31635  // @function splitWords(str: String): String[]
31636  // Trims and splits the string on whitespace and returns the array of parts.
31637  function splitWords(str) {
31638  	return trim(str).split(/\s+/);
31639  }
31640
31641  // @function setOptions(obj: Object, options: Object): Object
31642  // Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.
31643  function setOptions(obj, options) {
31644  	if (!Object.prototype.hasOwnProperty.call(obj, 'options')) {
31645  		obj.options = obj.options ? create$2(obj.options) : {};
31646  	}
31647  	for (var i in options) {
31648  		obj.options[i] = options[i];
31649  	}
31650  	return obj.options;
31651  }
31652
31653  // @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String
31654  // Converts an object into a parameter URL string, e.g. `{a: "foo", b: "bar"}`
31655  // translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will
31656  // be appended at the end. If `uppercase` is `true`, the parameter names will
31657  // be uppercased (e.g. `'?A=foo&B=bar'`)
31658  function getParamString(obj, existingUrl, uppercase) {
31659  	var params = [];
31660  	for (var i in obj) {
31661  		params.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));
31662  	}
31663  	return ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');
31664  }
31665
31666  var templateRe = /\{ *([\w_ -]+) *\}/g;
31667
31668  // @function template(str: String, data: Object): String
31669  // Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`
31670  // and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string
31671  // `('Hello foo, bar')`. You can also specify functions instead of strings for
31672  // data values — they will be evaluated passing `data` as an argument.
31673  function template(str, data) {
31674  	return str.replace(templateRe, function (str, key) {
31675  		var value = data[key];
31676
31677  		if (value === undefined) {
31678  			throw new Error('No value provided for variable ' + str);
31679
31680  		} else if (typeof value === 'function') {
31681  			value = value(data);
31682  		}
31683  		return value;
31684  	});
31685  }
31686
31687  // @function isArray(obj): Boolean
31688  // Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)
31689  var isArray = Array.isArray || function (obj) {
31690  	return (Object.prototype.toString.call(obj) === '[object Array]');
31691  };
31692
31693  // @function indexOf(array: Array, el: Object): Number
31694  // Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
31695  function indexOf(array, el) {
31696  	for (var i = 0; i < array.length; i++) {
31697  		if (array[i] === el) { return i; }
31698  	}
31699  	return -1;
31700  }
31701
31702  // @property emptyImageUrl: String
31703  // Data URI string containing a base64-encoded empty GIF image.
31704  // Used as a hack to free memory from unused images on WebKit-powered
31705  // mobile devices (by setting image `src` to this string).
31706  var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';
31707
31708  // inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/
31709
31710  function getPrefixed(name) {
31711  	return window['webkit' + name] || window['moz' + name] || window['ms' + name];
31712  }
31713
31714  var lastTime = 0;
31715
31716  // fallback for IE 7-8
31717  function timeoutDefer(fn) {
31718  	var time = +new Date(),
31719  	    timeToCall = Math.max(0, 16 - (time - lastTime));
31720
31721  	lastTime = time + timeToCall;
31722  	return window.setTimeout(fn, timeToCall);
31723  }
31724
31725  var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;
31726  var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||
31727  		getPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };
31728
31729  // @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number
31730  // Schedules `fn` to be executed when the browser repaints. `fn` is bound to
31731  // `context` if given. When `immediate` is set, `fn` is called immediately if
31732  // the browser doesn't have native support for
31733  // [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),
31734  // otherwise it's delayed. Returns a request ID that can be used to cancel the request.
31735  function requestAnimFrame(fn, context, immediate) {
31736  	if (immediate && requestFn === timeoutDefer) {
31737  		fn.call(context);
31738  	} else {
31739  		return requestFn.call(window, bind(fn, context));
31740  	}
31741  }
31742
31743  // @function cancelAnimFrame(id: Number): undefined
31744  // Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).
31745  function cancelAnimFrame(id) {
31746  	if (id) {
31747  		cancelFn.call(window, id);
31748  	}
31749  }
31750
31751  var Util = {
31752    __proto__: null,
31753    extend: extend,
31754    create: create$2,
31755    bind: bind,
31756    get lastId () { return lastId; },
31757    stamp: stamp,
31758    throttle: throttle,
31759    wrapNum: wrapNum,
31760    falseFn: falseFn,
31761    formatNum: formatNum,
31762    trim: trim,
31763    splitWords: splitWords,
31764    setOptions: setOptions,
31765    getParamString: getParamString,
31766    template: template,
31767    isArray: isArray,
31768    indexOf: indexOf,
31769    emptyImageUrl: emptyImageUrl,
31770    requestFn: requestFn,
31771    cancelFn: cancelFn,
31772    requestAnimFrame: requestAnimFrame,
31773    cancelAnimFrame: cancelAnimFrame
31774  };
31775
31776  // @class Class
31777  // @aka L.Class
31778
31779  // @section
31780  // @uninheritable
31781
31782  // Thanks to John Resig and Dean Edwards for inspiration!
31783
31784  function Class() {}
31785
31786  Class.extend = function (props) {
31787
31788  	// @function extend(props: Object): Function
31789  	// [Extends the current class](#class-inheritance) given the properties to be included.
31790  	// Returns a Javascript function that is a class constructor (to be called with `new`).
31791  	var NewClass = function () {
31792
31793  		setOptions(this);
31794
31795  		// call the constructor
31796  		if (this.initialize) {
31797  			this.initialize.apply(this, arguments);
31798  		}
31799
31800  		// call all constructor hooks
31801  		this.callInitHooks();
31802  	};
31803
31804  	var parentProto = NewClass.__super__ = this.prototype;
31805
31806  	var proto = create$2(parentProto);
31807  	proto.constructor = NewClass;
31808
31809  	NewClass.prototype = proto;
31810
31811  	// inherit parent's statics
31812  	for (var i in this) {
31813  		if (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {
31814  			NewClass[i] = this[i];
31815  		}
31816  	}
31817
31818  	// mix static properties into the class
31819  	if (props.statics) {
31820  		extend(NewClass, props.statics);
31821  	}
31822
31823  	// mix includes into the prototype
31824  	if (props.includes) {
31825  		checkDeprecatedMixinEvents(props.includes);
31826  		extend.apply(null, [proto].concat(props.includes));
31827  	}
31828
31829  	// mix given properties into the prototype
31830  	extend(proto, props);
31831  	delete proto.statics;
31832  	delete proto.includes;
31833
31834  	// merge options
31835  	if (proto.options) {
31836  		proto.options = parentProto.options ? create$2(parentProto.options) : {};
31837  		extend(proto.options, props.options);
31838  	}
31839
31840  	proto._initHooks = [];
31841
31842  	// add method for calling all hooks
31843  	proto.callInitHooks = function () {
31844
31845  		if (this._initHooksCalled) { return; }
31846
31847  		if (parentProto.callInitHooks) {
31848  			parentProto.callInitHooks.call(this);
31849  		}
31850
31851  		this._initHooksCalled = true;
31852
31853  		for (var i = 0, len = proto._initHooks.length; i < len; i++) {
31854  			proto._initHooks[i].call(this);
31855  		}
31856  	};
31857
31858  	return NewClass;
31859  };
31860
31861
31862  // @function include(properties: Object): this
31863  // [Includes a mixin](#class-includes) into the current class.
31864  Class.include = function (props) {
31865  	var parentOptions = this.prototype.options;
31866  	extend(this.prototype, props);
31867  	if (props.options) {
31868  		this.prototype.options = parentOptions;
31869  		this.mergeOptions(props.options);
31870  	}
31871  	return this;
31872  };
31873
31874  // @function mergeOptions(options: Object): this
31875  // [Merges `options`](#class-options) into the defaults of the class.
31876  Class.mergeOptions = function (options) {
31877  	extend(this.prototype.options, options);
31878  	return this;
31879  };
31880
31881  // @function addInitHook(fn: Function): this
31882  // Adds a [constructor hook](#class-constructor-hooks) to the class.
31883  Class.addInitHook = function (fn) { // (Function) || (String, args...)
31884  	var args = Array.prototype.slice.call(arguments, 1);
31885
31886  	var init = typeof fn === 'function' ? fn : function () {
31887  		this[fn].apply(this, args);
31888  	};
31889
31890  	this.prototype._initHooks = this.prototype._initHooks || [];
31891  	this.prototype._initHooks.push(init);
31892  	return this;
31893  };
31894
31895  function checkDeprecatedMixinEvents(includes) {
31896  	if (typeof L === 'undefined' || !L || !L.Mixin) { return; }
31897
31898  	includes = isArray(includes) ? includes : [includes];
31899
31900  	for (var i = 0; i < includes.length; i++) {
31901  		if (includes[i] === L.Mixin.Events) {
31902  			console.warn('Deprecated include of L.Mixin.Events: ' +
31903  				'this property will be removed in future releases, ' +
31904  				'please inherit from L.Evented instead.', new Error().stack);
31905  		}
31906  	}
31907  }
31908
31909  /*
31910   * @class Evented
31911   * @aka L.Evented
31912   * @inherits Class
31913   *
31914   * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).
31915   *
31916   * @example
31917   *
31918   * ```js
31919   * map.on('click', function(e) {
31920   * 	alert(e.latlng);
31921   * } );
31922   * ```
31923   *
31924   * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:
31925   *
31926   * ```js
31927   * function onClick(e) { ... }
31928   *
31929   * map.on('click', onClick);
31930   * map.off('click', onClick);
31931   * ```
31932   */
31933
31934  var Events = {
31935  	/* @method on(type: String, fn: Function, context?: Object): this
31936  	 * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).
31937  	 *
31938  	 * @alternative
31939  	 * @method on(eventMap: Object): this
31940  	 * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
31941  	 */
31942  	on: function (types, fn, context) {
31943
31944  		// types can be a map of types/handlers
31945  		if (typeof types === 'object') {
31946  			for (var type in types) {
31947  				// we don't process space-separated events here for performance;
31948  				// it's a hot path since Layer uses the on(obj) syntax
31949  				this._on(type, types[type], fn);
31950  			}
31951
31952  		} else {
31953  			// types can be a string of space-separated words
31954  			types = splitWords(types);
31955
31956  			for (var i = 0, len = types.length; i < len; i++) {
31957  				this._on(types[i], fn, context);
31958  			}
31959  		}
31960
31961  		return this;
31962  	},
31963
31964  	/* @method off(type: String, fn?: Function, context?: Object): this
31965  	 * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.
31966  	 *
31967  	 * @alternative
31968  	 * @method off(eventMap: Object): this
31969  	 * Removes a set of type/listener pairs.
31970  	 *
31971  	 * @alternative
31972  	 * @method off: this
31973  	 * Removes all listeners to all events on the object. This includes implicitly attached events.
31974  	 */
31975  	off: function (types, fn, context) {
31976
31977  		if (!arguments.length) {
31978  			// clear all listeners if called without arguments
31979  			delete this._events;
31980
31981  		} else if (typeof types === 'object') {
31982  			for (var type in types) {
31983  				this._off(type, types[type], fn);
31984  			}
31985
31986  		} else {
31987  			types = splitWords(types);
31988
31989  			var removeAll = arguments.length === 1;
31990  			for (var i = 0, len = types.length; i < len; i++) {
31991  				if (removeAll) {
31992  					this._off(types[i]);
31993  				} else {
31994  					this._off(types[i], fn, context);
31995  				}
31996  			}
31997  		}
31998
31999  		return this;
32000  	},
32001
32002  	// attach listener (without syntactic sugar now)
32003  	_on: function (type, fn, context) {
32004  		if (typeof fn !== 'function') {
32005  			console.warn('wrong listener type: ' + typeof fn);
32006  			return;
32007  		}
32008  		this._events = this._events || {};
32009
32010  		/* get/init listeners for type */
32011  		var typeListeners = this._events[type];
32012  		if (!typeListeners) {
32013  			typeListeners = [];
32014  			this._events[type] = typeListeners;
32015  		}
32016
32017  		if (context === this) {
32018  			// Less memory footprint.
32019  			context = undefined;
32020  		}
32021  		var newListener = {fn: fn, ctx: context},
32022  		    listeners = typeListeners;
32023
32024  		// check if fn already there
32025  		for (var i = 0, len = listeners.length; i < len; i++) {
32026  			if (listeners[i].fn === fn && listeners[i].ctx === context) {
32027  				return;
32028  			}
32029  		}
32030
32031  		listeners.push(newListener);
32032  	},
32033
32034  	_off: function (type, fn, context) {
32035  		var listeners,
32036  		    i,
32037  		    len;
32038
32039  		if (!this._events) { return; }
32040
32041  		listeners = this._events[type];
32042
32043  		if (!listeners) {
32044  			return;
32045  		}
32046
32047  		if (arguments.length === 1) { // remove all
32048  			if (this._firingCount) {
32049  				// Set all removed listeners to noop
32050  				// so they are not called if remove happens in fire
32051  				for (i = 0, len = listeners.length; i < len; i++) {
32052  					listeners[i].fn = falseFn;
32053  				}
32054  			}
32055  			// clear all listeners for a type if function isn't specified
32056  			delete this._events[type];
32057  			return;
32058  		}
32059
32060  		if (context === this) {
32061  			context = undefined;
32062  		}
32063
32064  		if (typeof fn !== 'function') {
32065  			console.warn('wrong listener type: ' + typeof fn);
32066  			return;
32067  		}
32068  		// find fn and remove it
32069  		for (i = 0, len = listeners.length; i < len; i++) {
32070  			var l = listeners[i];
32071  			if (l.ctx !== context) { continue; }
32072  			if (l.fn === fn) {
32073  				if (this._firingCount) {
32074  					// set the removed listener to noop so that's not called if remove happens in fire
32075  					l.fn = falseFn;
32076
32077  					/* copy array in case events are being fired */
32078  					this._events[type] = listeners = listeners.slice();
32079  				}
32080  				listeners.splice(i, 1);
32081
32082  				return;
32083  			}
32084  		}
32085  		console.warn('listener not found');
32086  	},
32087
32088  	// @method fire(type: String, data?: Object, propagate?: Boolean): this
32089  	// Fires an event of the specified type. You can optionally provide a data
32090  	// object — the first argument of the listener function will contain its
32091  	// properties. The event can optionally be propagated to event parents.
32092  	fire: function (type, data, propagate) {
vendor: 9,254 bytes, lines 32093-32415
32093  		if (!this.listens(type, propagate)) { return this; }
32094
32095  		var event = extend({}, data, {
32096  			type: type,
32097  			target: this,
32098  			sourceTarget: data && data.sourceTarget || this
32099  		});
32100
32101  		if (this._events) {
32102  			var listeners = this._events[type];
32103
32104  			if (listeners) {
32105  				this._firingCount = (this._firingCount + 1) || 1;
32106  				for (var i = 0, len = listeners.length; i < len; i++) {
32107  					var l = listeners[i];
32108  					l.fn.call(l.ctx || this, event);
32109  				}
32110
32111  				this._firingCount--;
32112  			}
32113  		}
32114
32115  		if (propagate) {
32116  			// propagate the event to parents (set with addEventParent)
32117  			this._propagateEvent(event);
32118  		}
32119
32120  		return this;
32121  	},
32122
32123  	// @method listens(type: String, propagate?: Boolean): Boolean
32124  	// Returns `true` if a particular event type has any listeners attached to it.
32125  	// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.
32126  	listens: function (type, propagate) {
32127  		if (typeof type !== 'string') {
32128  			console.warn('"string" type argument expected');
32129  		}
32130  		var listeners = this._events && this._events[type];
32131  		if (listeners && listeners.length) { return true; }
32132
32133  		if (propagate) {
32134  			// also check parents for listeners if event propagates
32135  			for (var id in this._eventParents) {
32136  				if (this._eventParents[id].listens(type, propagate)) { return true; }
32137  			}
32138  		}
32139  		return false;
32140  	},
32141
32142  	// @method once(…): this
32143  	// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.
32144  	once: function (types, fn, context) {
32145
32146  		if (typeof types === 'object') {
32147  			for (var type in types) {
32148  				this.once(type, types[type], fn);
32149  			}
32150  			return this;
32151  		}
32152
32153  		var handler = bind(function () {
32154  			this
32155  			    .off(types, fn, context)
32156  			    .off(types, handler, context);
32157  		}, this);
32158
32159  		// add a listener that's executed once and removed after that
32160  		return this
32161  		    .on(types, fn, context)
32162  		    .on(types, handler, context);
32163  	},
32164
32165  	// @method addEventParent(obj: Evented): this
32166  	// Adds an event parent - an `Evented` that will receive propagated events
32167  	addEventParent: function (obj) {
32168  		this._eventParents = this._eventParents || {};
32169  		this._eventParents[stamp(obj)] = obj;
32170  		return this;
32171  	},
32172
32173  	// @method removeEventParent(obj: Evented): this
32174  	// Removes an event parent, so it will stop receiving propagated events
32175  	removeEventParent: function (obj) {
32176  		if (this._eventParents) {
32177  			delete this._eventParents[stamp(obj)];
32178  		}
32179  		return this;
32180  	},
32181
32182  	_propagateEvent: function (e) {
32183  		for (var id in this._eventParents) {
32184  			this._eventParents[id].fire(e.type, extend({
32185  				layer: e.target,
32186  				propagatedFrom: e.target
32187  			}, e), true);
32188  		}
32189  	}
32190  };
32191
32192  // aliases; we should ditch those eventually
32193
32194  // @method addEventListener(…): this
32195  // Alias to [`on(…)`](#evented-on)
32196  Events.addEventListener = Events.on;
32197
32198  // @method removeEventListener(…): this
32199  // Alias to [`off(…)`](#evented-off)
32200
32201  // @method clearAllEventListeners(…): this
32202  // Alias to [`off()`](#evented-off)
32203  Events.removeEventListener = Events.clearAllEventListeners = Events.off;
32204
32205  // @method addOneTimeEventListener(…): this
32206  // Alias to [`once(…)`](#evented-once)
32207  Events.addOneTimeEventListener = Events.once;
32208
32209  // @method fireEvent(…): this
32210  // Alias to [`fire(…)`](#evented-fire)
32211  Events.fireEvent = Events.fire;
32212
32213  // @method hasEventListeners(…): Boolean
32214  // Alias to [`listens(…)`](#evented-listens)
32215  Events.hasEventListeners = Events.listens;
32216
32217  var Evented = Class.extend(Events);
32218
32219  /*
32220   * @class Point
32221   * @aka L.Point
32222   *
32223   * Represents a point with `x` and `y` coordinates in pixels.
32224   *
32225   * @example
32226   *
32227   * ```js
32228   * var point = L.point(200, 300);
32229   * ```
32230   *
32231   * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:
32232   *
32233   * ```js
32234   * map.panBy([200, 300]);
32235   * map.panBy(L.point(200, 300));
32236   * ```
32237   *
32238   * Note that `Point` does not inherit from Leaflet's `Class` object,
32239   * which means new classes can't inherit from it, and new methods
32240   * can't be added to it with the `include` function.
32241   */
32242
32243  function Point(x, y, round) {
32244  	// @property x: Number; The `x` coordinate of the point
32245  	this.x = (round ? Math.round(x) : x);
32246  	// @property y: Number; The `y` coordinate of the point
32247  	this.y = (round ? Math.round(y) : y);
32248  }
32249
32250  var trunc = Math.trunc || function (v) {
32251  	return v > 0 ? Math.floor(v) : Math.ceil(v);
32252  };
32253
32254  Point.prototype = {
32255
32256  	// @method clone(): Point
32257  	// Returns a copy of the current point.
32258  	clone: function () {
32259  		return new Point(this.x, this.y);
32260  	},
32261
32262  	// @method add(otherPoint: Point): Point
32263  	// Returns the result of addition of the current and the given points.
32264  	add: function (point) {
32265  		// non-destructive, returns a new point
32266  		return this.clone()._add(toPoint(point));
32267  	},
32268
32269  	_add: function (point) {
32270  		// destructive, used directly for performance in situations where it's safe to modify existing point
32271  		this.x += point.x;
32272  		this.y += point.y;
32273  		return this;
32274  	},
32275
32276  	// @method subtract(otherPoint: Point): Point
32277  	// Returns the result of subtraction of the given point from the current.
32278  	subtract: function (point) {
32279  		return this.clone()._subtract(toPoint(point));
32280  	},
32281
32282  	_subtract: function (point) {
32283  		this.x -= point.x;
32284  		this.y -= point.y;
32285  		return this;
32286  	},
32287
32288  	// @method divideBy(num: Number): Point
32289  	// Returns the result of division of the current point by the given number.
32290  	divideBy: function (num) {
32291  		return this.clone()._divideBy(num);
32292  	},
32293
32294  	_divideBy: function (num) {
32295  		this.x /= num;
32296  		this.y /= num;
32297  		return this;
32298  	},
32299
32300  	// @method multiplyBy(num: Number): Point
32301  	// Returns the result of multiplication of the current point by the given number.
32302  	multiplyBy: function (num) {
32303  		return this.clone()._multiplyBy(num);
32304  	},
32305
32306  	_multiplyBy: function (num) {
32307  		this.x *= num;
32308  		this.y *= num;
32309  		return this;
32310  	},
32311
32312  	// @method scaleBy(scale: Point): Point
32313  	// Multiply each coordinate of the current point by each coordinate of
32314  	// `scale`. In linear algebra terms, multiply the point by the
32315  	// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)
32316  	// defined by `scale`.
32317  	scaleBy: function (point) {
32318  		return new Point(this.x * point.x, this.y * point.y);
32319  	},
32320
32321  	// @method unscaleBy(scale: Point): Point
32322  	// Inverse of `scaleBy`. Divide each coordinate of the current point by
32323  	// each coordinate of `scale`.
32324  	unscaleBy: function (point) {
32325  		return new Point(this.x / point.x, this.y / point.y);
32326  	},
32327
32328  	// @method round(): Point
32329  	// Returns a copy of the current point with rounded coordinates.
32330  	round: function () {
32331  		return this.clone()._round();
32332  	},
32333
32334  	_round: function () {
32335  		this.x = Math.round(this.x);
32336  		this.y = Math.round(this.y);
32337  		return this;
32338  	},
32339
32340  	// @method floor(): Point
32341  	// Returns a copy of the current point with floored coordinates (rounded down).
32342  	floor: function () {
32343  		return this.clone()._floor();
32344  	},
32345
32346  	_floor: function () {
32347  		this.x = Math.floor(this.x);
32348  		this.y = Math.floor(this.y);
32349  		return this;
32350  	},
32351
32352  	// @method ceil(): Point
32353  	// Returns a copy of the current point with ceiled coordinates (rounded up).
32354  	ceil: function () {
32355  		return this.clone()._ceil();
32356  	},
32357
32358  	_ceil: function () {
32359  		this.x = Math.ceil(this.x);
32360  		this.y = Math.ceil(this.y);
32361  		return this;
32362  	},
32363
32364  	// @method trunc(): Point
32365  	// Returns a copy of the current point with truncated coordinates (rounded towards zero).
32366  	trunc: function () {
32367  		return this.clone()._trunc();
32368  	},
32369
32370  	_trunc: function () {
32371  		this.x = trunc(this.x);
32372  		this.y = trunc(this.y);
32373  		return this;
32374  	},
32375
32376  	// @method distanceTo(otherPoint: Point): Number
32377  	// Returns the cartesian distance between the current and the given points.
32378  	distanceTo: function (point) {
32379  		point = toPoint(point);
32380
32381  		var x = point.x - this.x,
32382  		    y = point.y - this.y;
32383
32384  		return Math.sqrt(x * x + y * y);
32385  	},
32386
32387  	// @method equals(otherPoint: Point): Boolean
32388  	// Returns `true` if the given point has the same coordinates.
32389  	equals: function (point) {
32390  		point = toPoint(point);
32391
32392  		return point.x === this.x &&
32393  		       point.y === this.y;
32394  	},
32395
32396  	// @method contains(otherPoint: Point): Boolean
32397  	// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).
32398  	contains: function (point) {
32399  		point = toPoint(point);
32400
32401  		return Math.abs(point.x) <= Math.abs(this.x) &&
32402  		       Math.abs(point.y) <= Math.abs(this.y);
32403  	},
32404
32405  	// @method toString(): String
32406  	// Returns a string representation of the point for debugging purposes.
32407  	toString: function () {
32408  		return 'Point(' +
32409  		        formatNum(this.x) + ', ' +
32410  		        formatNum(this.y) + ')';
32411  	}
32412  };
32413
32414  // @factory L.point(x: Number, y: Number, round?: Boolean)
32415  // Creates a Point object with the given `x` and `y` coordinates. If optional `roun
32415d` is set to true, rounds the `x` and `y` values.
32416
32417  // @alternative
32418  // @factory L.point(coords: Number[])
32419  // Expects an array of the form `[x, y]` instead.
32420
32421  // @alternative
32422  // @factory L.point(coords: Object)
32423  // Expects a plain object of the form `{x: Number, y: Number}` instead.
32424  function toPoint(x, y, round) {
32425  	if (x instanceof Point) {
32426  		return x;
32427  	}
32428  	if (isArray(x)) {
32429  		return new Point(x[0], x[1]);
32430  	}
32431  	if (x === undefined || x === null) {
32432  		return x;
32433  	}
32434  	if (typeof x === 'object' && 'x' in x && 'y' in x) {
32435  		return new Point(x.x, x.y);
32436  	}
32437  	return new Point(x, y, round);
32438  }
32439
32440  /*
32441   * @class Bounds
32442   * @aka L.Bounds
32443   *
32444   * Represents a rectangular area in pixel coordinates.
32445   *
32446   * @example
32447   *
32448   * ```js
32449   * var p1 = L.point(10, 10),
32450   * p2 = L.point(40, 60),
32451   * bounds = L.bounds(p1, p2);
32452   * ```
32453   *
32454   * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:
32455   *
32456   * ```js
32457   * otherBounds.intersects([[10, 10], [40, 60]]);
32458   * ```
32459   *
32460   * Note that `Bounds` does not inherit from Leaflet's `Class` object,
32461   * which means new classes can't inherit from it, and new methods
32462   * can't be added to it with the `include` function.
32463   */
32464
32465  function Bounds(a, b) {
32466  	if (!a) { return; }
32467
32468  	var points = b ? [a, b] : a;
32469
32470  	for (var i = 0, len = points.length; i < len; i++) {
32471  		this.extend(points[i]);
32472  	}
32473  }
32474
32475  Bounds.prototype = {
32476  	// @method extend(point: Point): this
32477  	// Extends the bounds to contain the given point.
32478  	extend: function (point) { // (Point)
32479  		point = toPoint(point);
32480
32481  		// @property min: Point
32482  		// The top left corner of the rectangle.
32483  		// @property max: Point
32484  		// The bottom right corner of the rectangle.
32485  		if (!this.min && !this.max) {
32486  			this.min = point.clone();
32487  			this.max = point.clone();
32488  		} else {
32489  			this.min.x = Math.min(point.x, this.min.x);
32490  			this.max.x = Math.max(point.x, this.max.x);
32491  			this.min.y = Math.min(point.y, this.min.y);
32492  			this.max.y = Math.max(point.y, this.max.y);
32493  		}
32494  		return this;
32495  	},
32496
32497  	// @method getCenter(round?: Boolean): Point
32498  	// Returns the center point of the bounds.
32499  	getCenter: function (round) {
32500  		return new Point(
32501  		        (this.min.x + this.max.x) / 2,
32502  		        (this.min.y + this.max.y) / 2, round);
32503  	},
32504
32505  	// @method getBottomLeft(): Point
32506  	// Returns the bottom-left point of the bounds.
32507  	getBottomLeft: function () {
32508  		return new Point(this.min.x, this.max.y);
32509  	},
32510
32511  	// @method getTopRight(): Point
32512  	// Returns the top-right point of the bounds.
32513  	getTopRight: function () { // -> Point
32514  		return new Point(this.max.x, this.min.y);
32515  	},
32516
32517  	// @method getTopLeft(): Point
32518  	// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).
32519  	getTopLeft: function () {
32520  		return this.min; // left, top
32521  	},
32522
32523  	// @method getBottomRight(): Point
32524  	// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).
32525  	getBottomRight: function () {
32526  		return this.max; // right, bottom
32527  	},
32528
32529  	// @method getSize(): Point
32530  	// Returns the size of the given bounds
32531  	getSize: function () {
32532  		return this.max.subtract(this.min);
32533  	},
32534
32535  	// @method contains(otherBounds: Bounds): Boolean
32536  	// Returns `true` if the rectangle contains the given one.
32537  	// @alternative
32538  	// @method contains(point: Point): Boolean
32539  	// Returns `true` if the rectangle contains the given point.
32540  	contains: function (obj) {
32541  		var min, max;
32542
32543  		if (typeof obj[0] === 'number' || obj instanceof Point) {
32544  			obj = toPoint(obj);
32545  		} else {
32546  			obj = toBounds(obj);
32547  		}
32548
32549  		if (obj instanceof Bounds) {
32550  			min = obj.min;
32551  			max = obj.max;
32552  		} else {
32553  			min = max = obj;
32554  		}
32555
32556  		return (min.x >= this.min.x) &&
32557  		       (max.x <= this.max.x) &&
32558  		       (min.y >= this.min.y) &&
32559  		       (max.y <= this.max.y);
32560  	},
32561
32562  	// @method intersects(otherBounds: Bounds): Boolean
32563  	// Returns `true` if the rectangle intersects the given bounds. Two bounds
32564  	// intersect if they have at least one point in common.
32565  	intersects: function (bounds) { // (Bounds) -> Boolean
32566  		bounds = toBounds(bounds);
32567
32568  		var min = this.min,
32569  		    max = this.max,
32570  		    min2 = bounds.min,
vendor: 13,614 bytes, lines 32571-33000
32571  		    max2 = bounds.max,
32572  		    xIntersects = (max2.x >= min.x) && (min2.x <= max.x),
32573  		    yIntersects = (max2.y >= min.y) && (min2.y <= max.y);
32574
32575  		return xIntersects && yIntersects;
32576  	},
32577
32578  	// @method overlaps(otherBounds: Bounds): Boolean
32579  	// Returns `true` if the rectangle overlaps the given bounds. Two bounds
32580  	// overlap if their intersection is an area.
32581  	overlaps: function (bounds) { // (Bounds) -> Boolean
32582  		bounds = toBounds(bounds);
32583
32584  		var min = this.min,
32585  		    max = this.max,
32586  		    min2 = bounds.min,
32587  		    max2 = bounds.max,
32588  		    xOverlaps = (max2.x > min.x) && (min2.x < max.x),
32589  		    yOverlaps = (max2.y > min.y) && (min2.y < max.y);
32590
32591  		return xOverlaps && yOverlaps;
32592  	},
32593
32594  	isValid: function () {
32595  		return !!(this.min && this.max);
32596  	}
32597  };
32598
32599
32600  // @factory L.bounds(corner1: Point, corner2: Point)
32601  // Creates a Bounds object from two corners coordinate pairs.
32602  // @alternative
32603  // @factory L.bounds(points: Point[])
32604  // Creates a Bounds object from the given array of points.
32605  function toBounds(a, b) {
32606  	if (!a || a instanceof Bounds) {
32607  		return a;
32608  	}
32609  	return new Bounds(a, b);
32610  }
32611
32612  /*
32613   * @class LatLngBounds
32614   * @aka L.LatLngBounds
32615   *
32616   * Represents a rectangular geographical area on a map.
32617   *
32618   * @example
32619   *
32620   * ```js
32621   * var corner1 = L.latLng(40.712, -74.227),
32622   * corner2 = L.latLng(40.774, -74.125),
32623   * bounds = L.latLngBounds(corner1, corner2);
32624   * ```
32625   *
32626   * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:
32627   *
32628   * ```js
32629   * map.fitBounds([
32630   * 	[40.712, -74.227],
32631   * 	[40.774, -74.125]
32632   * ]);
32633   * ```
32634   *
32635   * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.
32636   *
32637   * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,
32638   * which means new classes can't inherit from it, and new methods
32639   * can't be added to it with the `include` function.
32640   */
32641
32642  function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])
32643  	if (!corner1) { return; }
32644
32645  	var latlngs = corner2 ? [corner1, corner2] : corner1;
32646
32647  	for (var i = 0, len = latlngs.length; i < len; i++) {
32648  		this.extend(latlngs[i]);
32649  	}
32650  }
32651
32652  LatLngBounds.prototype = {
32653
32654  	// @method extend(latlng: LatLng): this
32655  	// Extend the bounds to contain the given point
32656
32657  	// @alternative
32658  	// @method extend(otherBounds: LatLngBounds): this
32659  	// Extend the bounds to contain the given bounds
32660  	extend: function (obj) {
32661  		var sw = this._southWest,
32662  		    ne = this._northEast,
32663  		    sw2, ne2;
32664
32665  		if (obj instanceof LatLng) {
32666  			sw2 = obj;
32667  			ne2 = obj;
32668
32669  		} else if (obj instanceof LatLngBounds) {
32670  			sw2 = obj._southWest;
32671  			ne2 = obj._northEast;
32672
32673  			if (!sw2 || !ne2) { return this; }
32674
32675  		} else {
32676  			return obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;
32677  		}
32678
32679  		if (!sw && !ne) {
32680  			this._southWest = new LatLng(sw2.lat, sw2.lng);
32681  			this._northEast = new LatLng(ne2.lat, ne2.lng);
32682  		} else {
32683  			sw.lat = Math.min(sw2.lat, sw.lat);
32684  			sw.lng = Math.min(sw2.lng, sw.lng);
32685  			ne.lat = Math.max(ne2.lat, ne.lat);
32686  			ne.lng = Math.max(ne2.lng, ne.lng);
32687  		}
32688
32689  		return this;
32690  	},
32691
32692  	// @method pad(bufferRatio: Number): LatLngBounds
32693  	// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
32694  	// For example, a ratio of 0.5 extends the bounds by 50% in each direction.
32695  	// Negative values will retract the bounds.
32696  	pad: function (bufferRatio) {
32697  		var sw = this._southWest,
32698  		    ne = this._northEast,
32699  		    heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,
32700  		    widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;
32701
32702  		return new LatLngBounds(
32703  		        new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),
32704  		        new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));
32705  	},
32706
32707  	// @method getCenter(): LatLng
32708  	// Returns the center point of the bounds.
32709  	getCenter: function () {
32710  		return new LatLng(
32711  		        (this._southWest.lat + this._northEast.lat) / 2,
32712  		        (this._southWest.lng + this._northEast.lng) / 2);
32713  	},
32714
32715  	// @method getSouthWest(): LatLng
32716  	// Returns the south-west point of the bounds.
32717  	getSouthWest: function () {
32718  		return this._southWest;
32719  	},
32720
32721  	// @method getNorthEast(): LatLng
32722  	// Returns the north-east point of the bounds.
32723  	getNorthEast: function () {
32724  		return this._northEast;
32725  	},
32726
32727  	// @method getNorthWest(): LatLng
32728  	// Returns the north-west point of the bounds.
32729  	getNorthWest: function () {
32730  		return new LatLng(this.getNorth(), this.getWest());
32731  	},
32732
32733  	// @method getSouthEast(): LatLng
32734  	// Returns the south-east point of the bounds.
32735  	getSouthEast: function () {
32736  		return new LatLng(this.getSouth(), this.getEast());
32737  	},
32738
32739  	// @method getWest(): Number
32740  	// Returns the west longitude of the bounds
32741  	getWest: function () {
32742  		return this._southWest.lng;
32743  	},
32744
32745  	// @method getSouth(): Number
32746  	// Returns the south latitude of the bounds
32747  	getSouth: function () {
32748  		return this._southWest.lat;
32749  	},
32750
32751  	// @method getEast(): Number
32752  	// Returns the east longitude of the bounds
32753  	getEast: function () {
32754  		return this._northEast.lng;
32755  	},
32756
32757  	// @method getNorth(): Number
32758  	// Returns the north latitude of the bounds
32759  	getNorth: function () {
32760  		return this._northEast.lat;
32761  	},
32762
32763  	// @method contains(otherBounds: LatLngBounds): Boolean
32764  	// Returns `true` if the rectangle contains the given one.
32765
32766  	// @alternative
32767  	// @method contains (latlng: LatLng): Boolean
32768  	// Returns `true` if the rectangle contains the given point.
32769  	contains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean
32770  		if (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {
32771  			obj = toLatLng(obj);
32772  		} else {
32773  			obj = toLatLngBounds(obj);
32774  		}
32775
32776  		var sw = this._southWest,
32777  		    ne = this._northEast,
32778  		    sw2, ne2;
32779
32780  		if (obj instanceof LatLngBounds) {
32781  			sw2 = obj.getSouthWest();
32782  			ne2 = obj.getNorthEast();
32783  		} else {
32784  			sw2 = ne2 = obj;
32785  		}
32786
32787  		return (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&
32788  		       (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);
32789  	},
32790
32791  	// @method intersects(otherBounds: LatLngBounds): Boolean
32792  	// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.
32793  	intersects: function (bounds) {
32794  		bounds = toLatLngBounds(bounds);
32795
32796  		var sw = this._southWest,
32797  		    ne = this._northEast,
32798  		    sw2 = bounds.getSouthWest(),
32799  		    ne2 = bounds.getNorthEast(),
32800
32801  		    latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),
32802  		    lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);
32803
32804  		return latIntersects && lngIntersects;
32805  	},
32806
32807  	// @method overlaps(otherBounds: LatLngBounds): Boolean
32808  	// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.
32809  	overlaps: function (bounds) {
32810  		bounds = toLatLngBounds(bounds);
32811
32812  		var sw = this._southWest,
32813  		    ne = this._northEast,
32814  		    sw2 = bounds.getSouthWest(),
32815  		    ne2 = bounds.getNorthEast(),
32816
32817  		    latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),
32818  		    lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);
32819
32820  		return latOverlaps && lngOverlaps;
32821  	},
32822
32823  	// @method toBBoxString(): String
32824  	// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.
32825  	toBBoxString: function () {
32826  		return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');
32827  	},
32828
32829  	// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean
32830  	// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.
32831  	equals: function (bounds, maxMargin) {
32832  		if (!bounds) { return false; }
32833
32834  		bounds = toLatLngBounds(bounds);
32835
32836  		return this._southWest.equals(bounds.getSouthWest(), maxMargin) &&
32837  		       this._northEast.equals(bounds.getNorthEast(), maxMargin);
32838  	},
32839
32840  	// @method isValid(): Boolean
32841  	// Returns `true` if the bounds are properly initialized.
32842  	isValid: function () {
32843  		return !!(this._southWest && this._northEast);
32844  	}
32845  };
32846
32847  // TODO International date line?
32848
32849  // @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)
32850  // Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.
32851
32852  // @alternative
32853  // @factory L.latLngBounds(latlngs: LatLng[])
32854  // Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).
32855  function toLatLngBounds(a, b) {
32856  	if (a instanceof LatLngBounds) {
32857  		return a;
32858  	}
32859  	return new LatLngBounds(a, b);
32860  }
32861
32862  /* @class LatLng
32863   * @aka L.LatLng
32864   *
32865   * Represents a geographical point with a certain latitude and longitude.
32866   *
32867   * @example
32868   *
32869   * ```
32870   * var latlng = L.latLng(50.5, 30.5);
32871   * ```
32872   *
32873   * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:
32874   *
32875   * ```
32876   * map.panTo([50, 30]);
32877   * map.panTo({lon: 30, lat: 50});
32878   * map.panTo({lat: 50, lng: 30});
32879   * map.panTo(L.latLng(50, 30));
32880   * ```
32881   *
32882   * Note that `LatLng` does not inherit from Leaflet's `Class` object,
32883   * which means new classes can't inherit from it, and new methods
32884   * can't be added to it with the `include` function.
32885   */
32886
32887  function LatLng(lat, lng, alt) {
32888  	if (isNaN(lat) || isNaN(lng)) {
32889  		throw new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');
32890  	}
32891
32892  	// @property lat: Number
32893  	// Latitude in degrees
32894  	this.lat = +lat;
32895
32896  	// @property lng: Number
32897  	// Longitude in degrees
32898  	this.lng = +lng;
32899
32900  	// @property alt: Number
32901  	// Altitude in meters (optional)
32902  	if (alt !== undefined) {
32903  		this.alt = +alt;
32904  	}
32905  }
32906
32907  LatLng.prototype = {
32908  	// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean
32909  	// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.
32910  	equals: function (obj, maxMargin) {
32911  		if (!obj) { return false; }
32912
32913  		obj = toLatLng(obj);
32914
32915  		var margin = Math.max(
32916  		        Math.abs(this.lat - obj.lat),
32917  		        Math.abs(this.lng - obj.lng));
32918
32919  		return margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);
32920  	},
32921
32922  	// @method toString(): String
32923  	// Returns a string representation of the point (for debugging purposes).
32924  	toString: function (precision) {
32925  		return 'LatLng(' +
32926  		        formatNum(this.lat, precision) + ', ' +
32927  		        formatNum(this.lng, precision) + ')';
32928  	},
32929
32930  	// @method distanceTo(otherLatLng: LatLng): Number
32931  	// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).
32932  	distanceTo: function (other) {
32933  		return Earth.distance(this, toLatLng(other));
32934  	},
32935
32936  	// @method wrap(): LatLng
32937  	// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.
32938  	wrap: function () {
32939  		return Earth.wrapLatLng(this);
32940  	},
32941
32942  	// @method toBounds(sizeInMeters: Number): LatLngBounds
32943  	// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.
32944  	toBounds: function (sizeInMeters) {
32945  		var latAccuracy = 180 * sizeInMeters / 40075017,
32946  		    lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);
32947
32948  		return toLatLngBounds(
32949  		        [this.lat - latAccuracy, this.lng - lngAccuracy],
32950  		        [this.lat + latAccuracy, this.lng + lngAccuracy]);
32951  	},
32952
32953  	clone: function () {
32954  		return new LatLng(this.lat, this.lng, this.alt);
32955  	}
32956  };
32957
32958
32959
32960  // @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng
32961  // Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).
32962
32963  // @alternative
32964  // @factory L.latLng(coords: Array): LatLng
32965  // Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.
32966
32967  // @alternative
32968  // @factory L.latLng(coords: Object): LatLng
32969  // Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.
32970
32971  function toLatLng(a, b, c) {
32972  	if (a instanceof LatLng) {
32973  		return a;
32974  	}
32975  	if (isArray(a) && typeof a[0] !== 'object') {
32976  		if (a.length === 3) {
32977  			return new LatLng(a[0], a[1], a[2]);
32978  		}
32979  		if (a.length === 2) {
32980  			return new LatLng(a[0], a[1]);
32981  		}
32982  		return null;
32983  	}
32984  	if (a === undefined || a === null) {
32985  		return a;
32986  	}
32987  	if (typeof a === 'object' && 'lat' in a) {
32988  		return new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);
32989  	}
32990  	if (b === undefined) {
32991  		return null;
32992  	}
32993  	return new LatLng(a, b, c);
32994  }
32995
32996  /*
32997   * @namespace CRS
32998   * @crs L.CRS.Base
32999   * Object that defines coordinate reference systems for projecting
33000   * geographical points into pixel (screen) coordinates and back (and to
33001   * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See
33002   * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).
33003   *
33004   * Leaflet defines the most usual CRSs by default. If you want to use a
33005   * CRS not defined by default, take a look at the
33006   * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.
33007   *
33008   * Note that the CRS instances do not inherit from Leaflet's `Class` object,
33009   * and can't be instantiated. Also, new classes can't inherit from them,
33010   * and methods can't be added to them with the `include` function.
33011   */
33012
33013  var CRS = {
33014  	// @method latLngToPoint(latlng: LatLng, zoom: Number): Point
33015  	// Projects geographical coordinates into pixel coordinates for a given zoom.
33016  	latLngToPoint: function (latlng, zoom) {
33017  		var projectedPoint = this.projection.project(latlng),
33018  		    scale = this.scale(zoom);
33019
33020  		return this.transformation._transform(projectedPoint, scale);
33021  	},
33022
33023  	// @method pointToLatLng(point: Point, zoom: Number): LatLng
33024  	// The inverse of `latLngToPoint`. Projects pixel coordinates on a given
33025  	// zoom into geographical coordinates.
33026  	pointToLatLng: function (point, zoom) {
33027  		var scale = this.scale(zoom),
33028  		    untransformedPoint = this.transformation.untransform(point, scale);
33029
33030  		return this.projection.unproject(untransformedPoint);
33031  	},
33032
33033  	// @method project(latlng: LatLng): Point
33034  	// Projects geographical coordinates into coordinates in units accepted for
33035  	// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).
33036  	project: function (latlng) {
33037  		return this.projection.project(latlng);
33038  	},
33039
33040  	// @method unproject(point: Point): LatLng
33041  	// Given a projected coordinate returns the corresponding LatLng.
33042  	// The inverse of `project`.
33043  	unproject: function (point) {
33044  		return this.projection.unproject(point);
33045  	},
33046
33047  	// @method scale(zoom: Number): Number
33048  	// Returns the scale used when transforming projected coordinates into
33049  	// pixel coordinates for a particular zoom. For example, it returns
33050  	// `256 * 2^zoom` for Mercator-based CRS.
33051  	scale: function (zoom) {
33052  		return 256 * Math.pow(2, zoom);
33053  	},
33054
33055  	// @method zoom(scale: Number): Number
33056  	// Inverse of `scale()`, returns the zoom level corresponding to a scale
33057  	// factor of `scale`.
33058  	zoom: function (scale) {
33059  		return Math.log(scale / 256) / Math.LN2;
33060  	},
33061
33062  	// @method getProjectedBounds(zoom: Number): Bounds
33063  	// Returns the projection's bounds scaled and transformed for the provided `zoom`.
33064  	getProjectedBounds: function (zoom) {
33065  		if (this.infinite) { return null; }
33066
33067  		var b = this.projection.bounds,
33068  		    s = this.scale(zoom),
33069  		    min = this.transformation.transform(b.min, s),
33070  		    max = this.transformation.transform(b.max, s);
33071
33072  		return new Bounds(min, max);
33073  	},
33074
33075  	// @method distance(latlng1: LatLng, latlng2: LatLng): Number
33076  	// Returns the distance between two geographical coordinates.
33077
33078  	// @property code: String
33079  	// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)
33080  	//
33081  	// @property wrapLng: Number[]
33082  	// An array of two numbers defining whether the longitude (horizontal) coordinate
33083  	// axis wraps around a given range and how. Defaults to `[-180, 180]` in most
33084  	// geographical CRSs. If `undefined`, the longitude axis does not wrap around.
33085  	//
33086  	// @property wrapLat: Number[]
33087  	// Like `wrapLng`, but for the latitude (vertical) axis.
33088
33089  	// wrapLng: [min, max],
33090  	// wrapLat: [min, max],
33091
33092  	// @property infinite: Boolean
33093  	// If true, the coordinate space will be unbounded (infinite in both axes)
33094  	infinite: false,
33095
33096  	// @method wrapLatLng(latlng: LatLng): LatLng
33097  	// Returns a `LatLng` where lat and lng has been wrapped according to the
33098  	// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.
33099  	wrapLatLng: function (latlng) {
33100  		var lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,
33101  		    lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,
33102  		    alt = latlng.alt;
33103
vendor: 13,939 bytes, lines 33104-33491
33104  		return new LatLng(lat, lng, alt);
33105  	},
33106
33107  	// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
33108  	// Returns a `LatLngBounds` with the same size as the given one, ensuring
33109  	// that its center is within the CRS's bounds.
33110  	// Only accepts actual `L.LatLngBounds` instances, not arrays.
33111  	wrapLatLngBounds: function (bounds) {
33112  		var center = bounds.getCenter(),
33113  		    newCenter = this.wrapLatLng(center),
33114  		    latShift = center.lat - newCenter.lat,
33115  		    lngShift = center.lng - newCenter.lng;
33116
33117  		if (latShift === 0 && lngShift === 0) {
33118  			return bounds;
33119  		}
33120
33121  		var sw = bounds.getSouthWest(),
33122  		    ne = bounds.getNorthEast(),
33123  		    newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),
33124  		    newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);
33125
33126  		return new LatLngBounds(newSw, newNe);
33127  	}
33128  };
33129
33130  /*
33131   * @namespace CRS
33132   * @crs L.CRS.Earth
33133   *
33134   * Serves as the base for CRS that are global such that they cover the earth.
33135   * Can only be used as the base for other CRS and cannot be used directly,
33136   * since it does not have a `code`, `projection` or `transformation`. `distance()` returns
33137   * meters.
33138   */
33139
33140  var Earth = extend({}, CRS, {
33141  	wrapLng: [-180, 180],
33142
33143  	// Mean Earth Radius, as recommended for use by
33144  	// the International Union of Geodesy and Geophysics,
33145  	// see https://rosettacode.org/wiki/Haversine_formula
33146  	R: 6371000,
33147
33148  	// distance between two geographical points using spherical law of cosines approximation
33149  	distance: function (latlng1, latlng2) {
33150  		var rad = Math.PI / 180,
33151  		    lat1 = latlng1.lat * rad,
33152  		    lat2 = latlng2.lat * rad,
33153  		    sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),
33154  		    sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),
33155  		    a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,
33156  		    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
33157  		return this.R * c;
33158  	}
33159  });
33160
33161  /*
33162   * @namespace Projection
33163   * @projection L.Projection.SphericalMercator
33164   *
33165   * Spherical Mercator projection — the most common projection for online maps,
33166   * used by almost all free and commercial tile providers. Assumes that Earth is
33167   * a sphere. Used by the `EPSG:3857` CRS.
33168   */
33169
33170  var earthRadius = 6378137;
33171
33172  var SphericalMercator = {
33173
33174  	R: earthRadius,
33175  	MAX_LATITUDE: 85.0511287798,
33176
33177  	project: function (latlng) {
33178  		var d = Math.PI / 180,
33179  		    max = this.MAX_LATITUDE,
33180  		    lat = Math.max(Math.min(max, latlng.lat), -max),
33181  		    sin = Math.sin(lat * d);
33182
33183  		return new Point(
33184  			this.R * latlng.lng * d,
33185  			this.R * Math.log((1 + sin) / (1 - sin)) / 2);
33186  	},
33187
33188  	unproject: function (point) {
33189  		var d = 180 / Math.PI;
33190
33191  		return new LatLng(
33192  			(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,
33193  			point.x * d / this.R);
33194  	},
33195
33196  	bounds: (function () {
33197  		var d = earthRadius * Math.PI;
33198  		return new Bounds([-d, -d], [d, d]);
33199  	})()
33200  };
33201
33202  /*
33203   * @class Transformation
33204   * @aka L.Transformation
33205   *
33206   * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`
33207   * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing
33208   * the reverse. Used by Leaflet in its projections code.
33209   *
33210   * @example
33211   *
33212   * ```js
33213   * var transformation = L.transformation(2, 5, -1, 10),
33214   * 	p = L.point(1, 2),
33215   * 	p2 = transformation.transform(p), //  L.point(7, 8)
33216   * 	p3 = transformation.untransform(p2); //  L.point(1, 2)
33217   * ```
33218   */
33219
33220
33221  // factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)
33222  // Creates a `Transformation` object with the given coefficients.
33223  function Transformation(a, b, c, d) {
33224  	if (isArray(a)) {
33225  		// use array properties
33226  		this._a = a[0];
33227  		this._b = a[1];
33228  		this._c = a[2];
33229  		this._d = a[3];
33230  		return;
33231  	}
33232  	this._a = a;
33233  	this._b = b;
33234  	this._c = c;
33235  	this._d = d;
33236  }
33237
33238  Transformation.prototype = {
33239  	// @method transform(point: Point, scale?: Number): Point
33240  	// Returns a transformed point, optionally multiplied by the given scale.
33241  	// Only accepts actual `L.Point` instances, not arrays.
33242  	transform: function (point, scale) { // (Point, Number) -> Point
33243  		return this._transform(point.clone(), scale);
33244  	},
33245
33246  	// destructive transform (faster)
33247  	_transform: function (point, scale) {
33248  		scale = scale || 1;
33249  		point.x = scale * (this._a * point.x + this._b);
33250  		point.y = scale * (this._c * point.y + this._d);
33251  		return point;
33252  	},
33253
33254  	// @method untransform(point: Point, scale?: Number): Point
33255  	// Returns the reverse transformation of the given point, optionally divided
33256  	// by the given scale. Only accepts actual `L.Point` instances, not arrays.
33257  	untransform: function (point, scale) {
33258  		scale = scale || 1;
33259  		return new Point(
33260  		        (point.x / scale - this._b) / this._a,
33261  		        (point.y / scale - this._d) / this._c);
33262  	}
33263  };
33264
33265  // factory L.transformation(a: Number, b: Number, c: Number, d: Number)
33266
33267  // @factory L.transformation(a: Number, b: Number, c: Number, d: Number)
33268  // Instantiates a Transformation object with the given coefficients.
33269
33270  // @alternative
33271  // @factory L.transformation(coefficients: Array): Transformation
33272  // Expects an coefficients array of the form
33273  // `[a: Number, b: Number, c: Number, d: Number]`.
33274
33275  function toTransformation(a, b, c, d) {
33276  	return new Transformation(a, b, c, d);
33277  }
33278
33279  /*
33280   * @namespace CRS
33281   * @crs L.CRS.EPSG3857
33282   *
33283   * The most common CRS for online maps, used by almost all free and commercial
33284   * tile providers. Uses Spherical Mercator projection. Set in by default in
33285   * Map's `crs` option.
33286   */
33287
33288  var EPSG3857 = extend({}, Earth, {
33289  	code: 'EPSG:3857',
33290  	projection: SphericalMercator,
33291
33292  	transformation: (function () {
33293  		var scale = 0.5 / (Math.PI * SphericalMercator.R);
33294  		return toTransformation(scale, 0.5, -scale, 0.5);
33295  	}())
33296  });
33297
33298  var EPSG900913 = extend({}, EPSG3857, {
33299  	code: 'EPSG:900913'
33300  });
33301
33302  // @namespace SVG; @section
33303  // There are several static functions which can be called without instantiating L.SVG:
33304
33305  // @function create(name: String): SVGElement
33306  // Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),
33307  // corresponding to the class name passed. For example, using 'line' will return
33308  // an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).
33309  function svgCreate(name) {
33310  	return document.createElementNS('http://www.w3.org/2000/svg', name);
33311  }
33312
33313  // @function pointsToPath(rings: Point[], closed: Boolean): String
33314  // Generates a SVG path string for multiple rings, with each ring turning
33315  // into "M..L..L.." instructions
33316  function pointsToPath(rings, closed) {
33317  	var str = '',
33318  	i, j, len, len2, points, p;
33319
33320  	for (i = 0, len = rings.length; i < len; i++) {
33321  		points = rings[i];
33322
33323  		for (j = 0, len2 = points.length; j < len2; j++) {
33324  			p = points[j];
33325  			str += (j ? 'L' : 'M') + p.x + ' ' + p.y;
33326  		}
33327
33328  		// closes the ring for polygons; "x" is VML syntax
33329  		str += closed ? (Browser.svg ? 'z' : 'x') : '';
33330  	}
33331
33332  	// SVG complains about empty path strings
33333  	return str || 'M0 0';
33334  }
33335
33336  /*
33337   * @namespace Browser
33338   * @aka L.Browser
33339   *
33340   * A namespace with static properties for browser/feature detection used by Leaflet internally.
33341   *
33342   * @example
33343   *
33344   * ```js
33345   * if (L.Browser.ielt9) {
33346   *   alert('Upgrade your browser, dude!');
33347   * }
33348   * ```
33349   */
33350
33351  var style = document.documentElement.style;
33352
33353  // @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).
33354  var ie = 'ActiveXObject' in window;
33355
33356  // @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.
33357  var ielt9 = ie && !document.addEventListener;
33358
33359  // @property edge: Boolean; `true` for the Edge web browser.
33360  var edge = 'msLaunchUri' in navigator && !('documentMode' in document);
33361
33362  // @property webkit: Boolean;
33363  // `true` for webkit-based browsers like Chrome and Safari (including mobile versions).
33364  var webkit = userAgentContains('webkit');
33365
33366  // @property android: Boolean
33367  // **Deprecated.** `true` for any browser running on an Android platform.
33368  var android = userAgentContains('android');
33369
33370  // @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.
33371  var android23 = userAgentContains('android 2') || userAgentContains('android 3');
33372
33373  /* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */
33374  var webkitVer = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit
33375  // @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)
33376  var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);
33377
33378  // @property opera: Boolean; `true` for the Opera browser
33379  var opera = !!window.opera;
33380
33381  // @property chrome: Boolean; `true` for the Chrome browser.
33382  var chrome = !edge && userAgentContains('chrome');
33383
33384  // @property gecko: Boolean; `true` for gecko-based browsers like Firefox.
33385  var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;
33386
33387  // @property safari: Boolean; `true` for the Safari browser.
33388  var safari = !chrome && userAgentContains('safari');
33389
33390  var phantom = userAgentContains('phantom');
33391
33392  // @property opera12: Boolean
33393  // `true` for the Opera browser supporting CSS transforms (version 12 or later).
33394  var opera12 = 'OTransition' in style;
33395
33396  // @property win: Boolean; `true` when the browser is running in a Windows platform
33397  var win = navigator.platform.indexOf('Win') === 0;
33398
33399  // @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.
33400  var ie3d = ie && ('transition' in style);
33401
33402  // @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.
33403  var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;
33404
33405  // @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.
33406  var gecko3d = 'MozPerspective' in style;
33407
33408  // @property any3d: Boolean
33409  // `true` for all browsers supporting CSS transforms.
33410  var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;
33411
33412  // @property mobile: Boolean; `true` for all browsers running in a mobile device.
33413  var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');
33414
33415  // @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.
33416  var mobileWebkit = mobile && webkit;
33417
33418  // @property mobileWebkit3d: Boolean
33419  // `true` for all webkit-based browsers in a mobile device supporting CSS transforms.
33420  var mobileWebkit3d = mobile && webkit3d;
33421
33422  // @property msPointer: Boolean
33423  // `true` for browsers implementing the Microsoft touch events model (notably IE10).
33424  var msPointer = !window.PointerEvent && window.MSPointerEvent;
33425
33426  // @property pointer: Boolean
33427  // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).
33428  var pointer = !!(window.PointerEvent || msPointer);
33429
33430  // @property touchNative: Boolean
33431  // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).
33432  // **This does not necessarily mean** that the browser is running in a computer with
33433  // a touchscreen, it only means that the browser is capable of understanding
33434  // touch events.
33435  var touchNative = 'ontouchstart' in window || !!window.TouchEvent;
33436
33437  // @property touch: Boolean
33438  // `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.
33439  // Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.
33440  var touch = !window.L_NO_TOUCH && (touchNative || pointer);
33441
33442  // @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.
33443  var mobileOpera = mobile && opera;
33444
33445  // @property mobileGecko: Boolean
33446  // `true` for gecko-based browsers running in a mobile device.
33447  var mobileGecko = mobile && gecko;
33448
33449  // @property retina: Boolean
33450  // `true` for browsers on a high-resolution "retina" screen or on any screen when browser's display zoom is more than 100%.
33451  var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;
33452
33453  // @property passiveEvents: Boolean
33454  // `true` for browsers that support passive events.
33455  var passiveEvents = (function () {
33456  	var supportsPassiveOption = false;
33457  	try {
33458  		var opts = Object.defineProperty({}, 'passive', {
33459  			get: function () { // eslint-disable-line getter-return
33460  				supportsPassiveOption = true;
33461  			}
33462  		});
33463  		window.addEventListener('testPassiveEventSupport', falseFn, opts);
33464  		window.removeEventListener('testPassiveEventSupport', falseFn, opts);
33465  	} catch (e) {
33466  		// Errors can safely be ignored since this is only a browser support test.
33467  	}
33468  	return supportsPassiveOption;
33469  }());
33470
33471  // @property canvas: Boolean
33472  // `true` when the browser supports [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
33473  var canvas$1 = (function () {
33474  	return !!document.createElement('canvas').getContext;
33475  }());
33476
33477  // @property svg: Boolean
33478  // `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).
33479  var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect);
33480
33481  var inlineSvg = !!svg$1 && (function () {
33482  	var div = document.createElement('div');
33483  	div.innerHTML = '<svg/>';
33484  	return (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';
33485  })();
33486
33487  // @property vml: Boolean
33488  // `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).
33489  var vml = !svg$1 && (function () {
33490  	try {
33491  		var div = document.createElement('div');
33492  		div.innerHTML = '<v:shape adj="1"/>';
33493
33494  		var shape = div.firstChild;
33495  		shape.style.behavior = 'url(#default#VML)';
33496
33497  		return shape && (typeof shape.adj === 'object');
33498
33499  	} catch (e) {
33500  		return false;
33501  	}
33502  }());
33503
33504  function userAgentContains(str) {
33505  	return navigator.userAgent.toLowerCase().indexOf(str) >= 0;
33506  }
33507
33508
33509  var Browser = {
33510  	ie: ie,
33511  	ielt9: ielt9,
33512  	edge: edge,
33513  	webkit: webkit,
33514  	android: android,
33515  	android23: android23,
33516  	androidStock: androidStock,
33517  	opera: opera,
33518  	chrome: chrome,
33519  	gecko: gecko,
33520  	safari: safari,
33521  	phantom: phantom,
33522  	opera12: opera12,
33523  	win: win,
33524  	ie3d: ie3d,
33525  	webkit3d: webkit3d,
33526  	gecko3d: gecko3d,
33527  	any3d: any3d,
33528  	mobile: mobile,
33529  	mobileWebkit: mobileWebkit,
33530  	mobileWebkit3d: mobileWebkit3d,
33531  	msPointer: msPointer,
33532  	pointer: pointer,
33533  	touch: touch,
33534  	touchNative: touchNative,
33535  	mobileOpera: mobileOpera,
33536  	mobileGecko: mobileGecko,
33537  	retina: retina,
33538  	passiveEvents: passiveEvents,
33539  	canvas: canvas$1,
33540  	svg: svg$1,
33541  	vml: vml,
33542  	inlineSvg: inlineSvg
33543  };
33544
33545  /*
33546   * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.
33547   */
33548
33549  var POINTER_DOWN =   Browser.msPointer ? 'MSPointerDown'   : 'pointerdown';
33550  var POINTER_MOVE =   Browser.msPointer ? 'MSPointerMove'   : 'pointermove';
33551  var POINTER_UP =     Browser.msPointer ? 'MSPointerUp'     : 'pointerup';
33552  var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';
33553  var pEvent = {
33554  	touchstart  : POINTER_DOWN,
33555  	touchmove   : POINTER_MOVE,
33556  	touchend    : POINTER_UP,
33557  	touchcancel : POINTER_CANCEL
33558  };
33559  var handle = {
33560  	touchstart  : _onPointerStart,
33561  	touchmove   : _handlePointer,
33562  	touchend    : _handlePointer,
33563  	touchcancel : _handlePointer
33564  };
33565  var _pointers = {};
33566  var _pointerDocListener = false;
vendor: 155,533 bytes, lines 33567-38544
33567
33568  // Provides a touch events wrapper for (ms)pointer events.
33569  // ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890
33570
33571  function addPointerListener(obj, type, handler) {
33572  	if (type === 'touchstart') {
33573  		_addPointerDocListener();
33574  	}
33575  	if (!handle[type]) {
33576  		console.warn('wrong event specified:', type);
33577  		return L.Util.falseFn;
33578  	}
33579  	handler = handle[type].bind(this, handler);
33580  	obj.addEventListener(pEvent[type], handler, false);
33581  	return handler;
33582  }
33583
33584  function removePointerListener(obj, type, handler) {
33585  	if (!pEvent[type]) {
33586  		console.warn('wrong event specified:', type);
33587  		return;
33588  	}
33589  	obj.removeEventListener(pEvent[type], handler, false);
33590  }
33591
33592  function _globalPointerDown(e) {
33593  	_pointers[e.pointerId] = e;
33594  }
33595
33596  function _globalPointerMove(e) {
33597  	if (_pointers[e.pointerId]) {
33598  		_pointers[e.pointerId] = e;
33599  	}
33600  }
33601
33602  function _globalPointerUp(e) {
33603  	delete _pointers[e.pointerId];
33604  }
33605
33606  function _addPointerDocListener() {
33607  	// need to keep track of what pointers and how many are active to provide e.touches emulation
33608  	if (!_pointerDocListener) {
33609  		// we listen document as any drags that end by moving the touch off the screen get fired there
33610  		document.addEventListener(POINTER_DOWN, _globalPointerDown, true);
33611  		document.addEventListener(POINTER_MOVE, _globalPointerMove, true);
33612  		document.addEventListener(POINTER_UP, _globalPointerUp, true);
33613  		document.addEventListener(POINTER_CANCEL, _globalPointerUp, true);
33614
33615  		_pointerDocListener = true;
33616  	}
33617  }
33618
33619  function _handlePointer(handler, e) {
33620  	if (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }
33621
33622  	e.touches = [];
33623  	for (var i in _pointers) {
33624  		e.touches.push(_pointers[i]);
33625  	}
33626  	e.changedTouches = [e];
33627
33628  	handler(e);
33629  }
33630
33631  function _onPointerStart(handler, e) {
33632  	// IE10 specific: MsTouch needs preventDefault. See #2000
33633  	if (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {
33634  		preventDefault(e);
33635  	}
33636  	_handlePointer(handler, e);
33637  }
33638
33639  /*
33640   * Extends the event handling code with double tap support for mobile browsers.
33641   *
33642   * Note: currently most browsers fire native dblclick, with only a few exceptions
33643   * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)
33644   */
33645
33646  function makeDblclick(event) {
33647  	// in modern browsers `type` cannot be just overridden:
33648  	// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only
33649  	var newEvent = {},
33650  	    prop, i;
33651  	for (i in event) {
33652  		prop = event[i];
33653  		newEvent[i] = prop && prop.bind ? prop.bind(event) : prop;
33654  	}
33655  	event = newEvent;
33656  	newEvent.type = 'dblclick';
33657  	newEvent.detail = 2;
33658  	newEvent.isTrusted = false;
33659  	newEvent._simulated = true; // for debug purposes
33660  	return newEvent;
33661  }
33662
33663  var delay = 200;
33664  function addDoubleTapListener(obj, handler) {
33665  	// Most browsers handle double tap natively
33666  	obj.addEventListener('dblclick', handler);
33667
33668  	// On some platforms the browser doesn't fire native dblclicks for touch events.
33669  	// It seems that in all such cases `detail` property of `click` event is always `1`.
33670  	// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.
33671  	var last = 0,
33672  	    detail;
33673  	function simDblclick(e) {
33674  		if (e.detail !== 1) {
33675  			detail = e.detail; // keep in sync to avoid false dblclick in some cases
33676  			return;
33677  		}
33678
33679  		if (e.pointerType === 'mouse' ||
33680  			(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {
33681
33682  			return;
33683  		}
33684
33685  		var now = Date.now();
33686  		if (now - last <= delay) {
33687  			detail++;
33688  			if (detail === 2) {
33689  				handler(makeDblclick(e));
33690  			}
33691  		} else {
33692  			detail = 1;
33693  		}
33694  		last = now;
33695  	}
33696
33697  	obj.addEventListener('click', simDblclick);
33698
33699  	return {
33700  		dblclick: handler,
33701  		simDblclick: simDblclick
33702  	};
33703  }
33704
33705  function removeDoubleTapListener(obj, handlers) {
33706  	obj.removeEventListener('dblclick', handlers.dblclick);
33707  	obj.removeEventListener('click', handlers.simDblclick);
33708  }
33709
33710  /*
33711   * @namespace DomUtil
33712   *
33713   * Utility functions to work with the [DOM](https://developer.mozilla.org/docs/Web/API/Document_Object_Model)
33714   * tree, used by Leaflet internally.
33715   *
33716   * Most functions expecting or returning a `HTMLElement` also work for
33717   * SVG elements. The only difference is that classes refer to CSS classes
33718   * in HTML and SVG classes in SVG.
33719   */
33720
33721
33722  // @property TRANSFORM: String
33723  // Vendor-prefixed transform style name (e.g. `'webkitTransform'` for WebKit).
33724  var TRANSFORM = testProp(
33725  	['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);
33726
33727  // webkitTransition comes first because some browser versions that drop vendor prefix don't do
33728  // the same for the transitionend event, in particular the Android 4.1 stock browser
33729
33730  // @property TRANSITION: String
33731  // Vendor-prefixed transition style name.
33732  var TRANSITION = testProp(
33733  	['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);
33734
33735  // @property TRANSITION_END: String
33736  // Vendor-prefixed transitionend event name.
33737  var TRANSITION_END =
33738  	TRANSITION === 'webkitTransition' || TRANSITION === 'OTransition' ? TRANSITION + 'End' : 'transitionend';
33739
33740
33741  // @function get(id: String|HTMLElement): HTMLElement
33742  // Returns an element given its DOM id, or returns the element itself
33743  // if it was passed directly.
33744  function get(id) {
33745  	return typeof id === 'string' ? document.getElementById(id) : id;
33746  }
33747
33748  // @function getStyle(el: HTMLElement, styleAttrib: String): String
33749  // Returns the value for a certain style attribute on an element,
33750  // including computed values or values set through CSS.
33751  function getStyle(el, style) {
33752  	var value = el.style[style] || (el.currentStyle && el.currentStyle[style]);
33753
33754  	if ((!value || value === 'auto') && document.defaultView) {
33755  		var css = document.defaultView.getComputedStyle(el, null);
33756  		value = css ? css[style] : null;
33757  	}
33758  	return value === 'auto' ? null : value;
33759  }
33760
33761  // @function create(tagName: String, className?: String, container?: HTMLElement): HTMLElement
33762  // Creates an HTML element with `tagName`, sets its class to `className`, and optionally appends it to `container` element.
33763  function create$1(tagName, className, container) {
33764  	var el = document.createElement(tagName);
33765  	el.className = className || '';
33766
33767  	if (container) {
33768  		container.appendChild(el);
33769  	}
33770  	return el;
33771  }
33772
33773  // @function remove(el: HTMLElement)
33774  // Removes `el` from its parent element
33775  function remove(el) {
33776  	var parent = el.parentNode;
33777  	if (parent) {
33778  		parent.removeChild(el);
33779  	}
33780  }
33781
33782  // @function empty(el: HTMLElement)
33783  // Removes all of `el`'s children elements from `el`
33784  function empty(el) {
33785  	while (el.firstChild) {
33786  		el.removeChild(el.firstChild);
33787  	}
33788  }
33789
33790  // @function toFront(el: HTMLElement)
33791  // Makes `el` the last child of its parent, so it renders in front of the other children.
33792  function toFront(el) {
33793  	var parent = el.parentNode;
33794  	if (parent && parent.lastChild !== el) {
33795  		parent.appendChild(el);
33796  	}
33797  }
33798
33799  // @function toBack(el: HTMLElement)
33800  // Makes `el` the first child of its parent, so it renders behind the other children.
33801  function toBack(el) {
33802  	var parent = el.parentNode;
33803  	if (parent && parent.firstChild !== el) {
33804  		parent.insertBefore(el, parent.firstChild);
33805  	}
33806  }
33807
33808  // @function hasClass(el: HTMLElement, name: String): Boolean
33809  // Returns `true` if the element's class attribute contains `name`.
33810  function hasClass(el, name) {
33811  	if (el.classList !== undefined) {
33812  		return el.classList.contains(name);
33813  	}
33814  	var className = getClass(el);
33815  	return className.length > 0 && new RegExp('(^|\\s)' + name + '(\\s|$)').test(className);
33816  }
33817
33818  // @function addClass(el: HTMLElement, name: String)
33819  // Adds `name` to the element's class attribute.
33820  function addClass(el, name) {
33821  	if (el.classList !== undefined) {
33822  		var classes = splitWords(name);
33823  		for (var i = 0, len = classes.length; i < len; i++) {
33824  			el.classList.add(classes[i]);
33825  		}
33826  	} else if (!hasClass(el, name)) {
33827  		var className = getClass(el);
33828  		setClass(el, (className ? className + ' ' : '') + name);
33829  	}
33830  }
33831
33832  // @function removeClass(el: HTMLElement, name: String)
33833  // Removes `name` from the element's class attribute.
33834  function removeClass(el, name) {
33835  	if (el.classList !== undefined) {
33836  		el.classList.remove(name);
33837  	} else {
33838  		setClass(el, trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')));
33839  	}
33840  }
33841
33842  // @function setClass(el: HTMLElement, name: String)
33843  // Sets the element's class.
33844  function setClass(el, name) {
33845  	if (el.className.baseVal === undefined) {
33846  		el.className = name;
33847  	} else {
33848  		// in case of SVG element
33849  		el.className.baseVal = name;
33850  	}
33851  }
33852
33853  // @function getClass(el: HTMLElement): String
33854  // Returns the element's class.
33855  function getClass(el) {
33856  	// Check if the element is an SVGElementInstance and use the correspondingElement instead
33857  	// (Required for linked SVG elements in IE11.)
33858  	if (el.correspondingElement) {
33859  		el = el.correspondingElement;
33860  	}
33861  	return el.className.baseVal === undefined ? el.className : el.className.baseVal;
33862  }
33863
33864  // @function setOpacity(el: HTMLElement, opacity: Number)
33865  // Set the opacity of an element (including old IE support).
33866  // `opacity` must be a number from `0` to `1`.
33867  function setOpacity(el, value) {
33868  	if ('opacity' in el.style) {
33869  		el.style.opacity = value;
33870  	} else if ('filter' in el.style) {
33871  		_setOpacityIE(el, value);
33872  	}
33873  }
33874
33875  function _setOpacityIE(el, value) {
33876  	var filter = false,
33877  	    filterName = 'DXImageTransform.Microsoft.Alpha';
33878
33879  	// filters collection throws an error if we try to retrieve a filter that doesn't exist
33880  	try {
33881  		filter = el.filters.item(filterName);
33882  	} catch (e) {
33883  		// don't set opacity to 1 if we haven't already set an opacity,
33884  		// it isn't needed and breaks transparent pngs.
33885  		if (value === 1) { return; }
33886  	}
33887
33888  	value = Math.round(value * 100);
33889
33890  	if (filter) {
33891  		filter.Enabled = (value !== 100);
33892  		filter.Opacity = value;
33893  	} else {
33894  		el.style.filter += ' progid:' + filterName + '(opacity=' + value + ')';
33895  	}
33896  }
33897
33898  // @function testProp(props: String[]): String|false
33899  // Goes through the array of style names and returns the first name
33900  // that is a valid style name for an element. If no such name is found,
33901  // it returns false. Useful for vendor-prefixed styles like `transform`.
33902  function testProp(props) {
33903  	var style = document.documentElement.style;
33904
33905  	for (var i = 0; i < props.length; i++) {
33906  		if (props[i] in style) {
33907  			return props[i];
33908  		}
33909  	}
33910  	return false;
33911  }
33912
33913  // @function setTransform(el: HTMLElement, offset: Point, scale?: Number)
33914  // Resets the 3D CSS transform of `el` so it is translated by `offset` pixels
33915  // and optionally scaled by `scale`. Does not have an effect if the
33916  // browser doesn't support 3D CSS transforms.
33917  function setTransform(el, offset, scale) {
33918  	var pos = offset || new Point(0, 0);
33919
33920  	el.style[TRANSFORM] =
33921  		(Browser.ie3d ?
33922  			'translate(' + pos.x + 'px,' + pos.y + 'px)' :
33923  			'translate3d(' + pos.x + 'px,' + pos.y + 'px,0)') +
33924  		(scale ? ' scale(' + scale + ')' : '');
33925  }
33926
33927  // @function setPosition(el: HTMLElement, position: Point)
33928  // Sets the position of `el` to coordinates specified by `position`,
33929  // using CSS translate or top/left positioning depending on the browser
33930  // (used by Leaflet internally to position its layers).
33931  function setPosition(el, point) {
33932
33933  	/*eslint-disable */
33934  	el._leaflet_pos = point;
33935  	/* eslint-enable */
33936
33937  	if (Browser.any3d) {
33938  		setTransform(el, point);
33939  	} else {
33940  		el.style.left = point.x + 'px';
33941  		el.style.top = point.y + 'px';
33942  	}
33943  }
33944
33945  // @function getPosition(el: HTMLElement): Point
33946  // Returns the coordinates of an element previously positioned with setPosition.
33947  function getPosition(el) {
33948  	// this method is only used for elements previously positioned using setPosition,
33949  	// so it's safe to cache the position for performance
33950
33951  	return el._leaflet_pos || new Point(0, 0);
33952  }
33953
33954  // @function disableTextSelection()
33955  // Prevents the user from generating `selectstart` DOM events, usually generated
33956  // when the user drags the mouse through a page with text. Used internally
33957  // by Leaflet to override the behaviour of any click-and-drag interaction on
33958  // the map. Affects drag interactions on the whole document.
33959
33960  // @function enableTextSelection()
33961  // Cancels the effects of a previous [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection).
33962  var disableTextSelection;
33963  var enableTextSelection;
33964  var _userSelect;
33965  if ('onselectstart' in document) {
33966  	disableTextSelection = function () {
33967  		on(window, 'selectstart', preventDefault);
33968  	};
33969  	enableTextSelection = function () {
33970  		off(window, 'selectstart', preventDefault);
33971  	};
33972  } else {
33973  	var userSelectProperty = testProp(
33974  		['userSelect', 'WebkitUserSelect', 'OUserSelect', 'MozUserSelect', 'msUserSelect']);
33975
33976  	disableTextSelection = function () {
33977  		if (userSelectProperty) {
33978  			var style = document.documentElement.style;
33979  			_userSelect = style[userSelectProperty];
33980  			style[userSelectProperty] = 'none';
33981  		}
33982  	};
33983  	enableTextSelection = function () {
33984  		if (userSelectProperty) {
33985  			document.documentElement.style[userSelectProperty] = _userSelect;
33986  			_userSelect = undefined;
33987  		}
33988  	};
33989  }
33990
33991  // @function disableImageDrag()
33992  // As [`L.DomUtil.disableTextSelection`](#domutil-disabletextselection), but
33993  // for `dragstart` DOM events, usually generated when the user drags an image.
33994  function disableImageDrag() {
33995  	on(window, 'dragstart', preventDefault);
33996  }
33997
33998  // @function enableImageDrag()
33999  // Cancels the effects of a previous [`L.DomUtil.disableImageDrag`](#domutil-disabletextselection).
34000  function enableImageDrag() {
34001  	off(window, 'dragstart', preventDefault);
34002  }
34003
34004  var _outlineElement, _outlineStyle;
34005  // @function preventOutline(el: HTMLElement)
34006  // Makes the [outline](https://developer.mozilla.org/docs/Web/CSS/outline)
34007  // of the element `el` invisible. Used internally by Leaflet to prevent
34008  // focusable elements from displaying an outline when the user performs a
34009  // drag interaction on them.
34010  function preventOutline(element) {
34011  	while (element.tabIndex === -1) {
34012  		element = element.parentNode;
34013  	}
34014  	if (!element.style) { return; }
34015  	restoreOutline();
34016  	_outlineElement = element;
34017  	_outlineStyle = element.style.outline;
34018  	element.style.outline = 'none';
34019  	on(window, 'keydown', restoreOutline);
34020  }
34021
34022  // @function restoreOutline()
34023  // Cancels the effects of a previous [`L.DomUtil.preventOutline`]().
34024  function restoreOutline() {
34025  	if (!_outlineElement) { return; }
34026  	_outlineElement.style.outline = _outlineStyle;
34027  	_outlineElement = undefined;
34028  	_outlineStyle = undefined;
34029  	off(window, 'keydown', restoreOutline);
34030  }
34031
34032  // @function getSizedParentNode(el: HTMLElement): HTMLElement
34033  // Finds the closest parent node which size (width and height) is not null.
34034  function getSizedParentNode(element) {
34035  	do {
34036  		element = element.parentNode;
34037  	} while ((!element.offsetWidth || !element.offsetHeight) && element !== document.body);
34038  	return element;
34039  }
34040
34041  // @function getScale(el: HTMLElement): Object
34042  // Computes the CSS scale currently applied on the element.
34043  // Returns an object with `x` and `y` members as horizontal and vertical scales respectively,
34044  // and `boundingClientRect` as the result of [`getBoundingClientRect()`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
34045  function getScale(element) {
34046  	var rect = element.getBoundingClientRect(); // Read-only in old browsers.
34047
34048  	return {
34049  		x: rect.width / element.offsetWidth || 1,
34050  		y: rect.height / element.offsetHeight || 1,
34051  		boundingClientRect: rect
34052  	};
34053  }
34054
34055  var DomUtil = {
34056    __proto__: null,
34057    TRANSFORM: TRANSFORM,
34058    TRANSITION: TRANSITION,
34059    TRANSITION_END: TRANSITION_END,
34060    get: get,
34061    getStyle: getStyle,
34062    create: create$1,
34063    remove: remove,
34064    empty: empty,
34065    toFront: toFront,
34066    toBack: toBack,
34067    hasClass: hasClass,
34068    addClass: addClass,
34069    removeClass: removeClass,
34070    setClass: setClass,
34071    getClass: getClass,
34072    setOpacity: setOpacity,
34073    testProp: testProp,
34074    setTransform: setTransform,
34075    setPosition: setPosition,
34076    getPosition: getPosition,
34077    get disableTextSelection () { return disableTextSelection; },
34078    get enableTextSelection () { return enableTextSelection; },
34079    disableImageDrag: disableImageDrag,
34080    enableImageDrag: enableImageDrag,
34081    preventOutline: preventOutline,
34082    restoreOutline: restoreOutline,
34083    getSizedParentNode: getSizedParentNode,
34084    getScale: getScale
34085  };
34086
34087  /*
34088   * @namespace DomEvent
34089   * Utility functions to work with the [DOM events](https://developer.mozilla.org/docs/Web/API/Event), used by Leaflet internally.
34090   */
34091
34092  // Inspired by John Resig, Dean Edwards and YUI addEvent implementations.
34093
34094  // @function on(el: HTMLElement, types: String, fn: Function, context?: Object): this
34095  // Adds a listener function (`fn`) to a particular DOM event type of the
34096  // element `el`. You can optionally specify the context of the listener
34097  // (object the `this` keyword will point to). You can also pass several
34098  // space-separated types (e.g. `'click dblclick'`).
34099
34100  // @alternative
34101  // @function on(el: HTMLElement, eventMap: Object, context?: Object): this
34102  // Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
34103  function on(obj, types, fn, context) {
34104
34105  	if (types && typeof types === 'object') {
34106  		for (var type in types) {
34107  			addOne(obj, type, types[type], fn);
34108  		}
34109  	} else {
34110  		types = splitWords(types);
34111
34112  		for (var i = 0, len = types.length; i < len; i++) {
34113  			addOne(obj, types[i], fn, context);
34114  		}
34115  	}
34116
34117  	return this;
34118  }
34119
34120  var eventsKey = '_leaflet_events';
34121
34122  // @function off(el: HTMLElement, types: String, fn: Function, context?: Object): this
34123  // Removes a previously added listener function.
34124  // Note that if you passed a custom context to on, you must pass the same
34125  // context to `off` in order to remove the listener.
34126
34127  // @alternative
34128  // @function off(el: HTMLElement, eventMap: Object, context?: Object): this
34129  // Removes a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
34130
34131  // @alternative
34132  // @function off(el: HTMLElement, types: String): this
34133  // Removes all previously added listeners of given types.
34134
34135  // @alternative
34136  // @function off(el: HTMLElement): this
34137  // Removes all previously added listeners from given HTMLElement
34138  function off(obj, types, fn, context) {
34139
34140  	if (arguments.length === 1) {
34141  		batchRemove(obj);
34142  		delete obj[eventsKey];
34143
34144  	} else if (types && typeof types === 'object') {
34145  		for (var type in types) {
34146  			removeOne(obj, type, types[type], fn);
34147  		}
34148
34149  	} else {
34150  		types = splitWords(types);
34151
34152  		if (arguments.length === 2) {
34153  			batchRemove(obj, function (type) {
34154  				return indexOf(types, type) !== -1;
34155  			});
34156  		} else {
34157  			for (var i = 0, len = types.length; i < len; i++) {
34158  				removeOne(obj, types[i], fn, context);
34159  			}
34160  		}
34161  	}
34162
34163  	return this;
34164  }
34165
34166  function batchRemove(obj, filterFn) {
34167  	for (var id in obj[eventsKey]) {
34168  		var type = id.split(/\d/)[0];
34169  		if (!filterFn || filterFn(type)) {
34170  			removeOne(obj, type, null, null, id);
34171  		}
34172  	}
34173  }
34174
34175  var mouseSubst = {
34176  	mouseenter: 'mouseover',
34177  	mouseleave: 'mouseout',
34178  	wheel: !('onwheel' in window) && 'mousewheel'
34179  };
34180
34181  function addOne(obj, type, fn, context) {
34182  	var id = type + stamp(fn) + (context ? '_' + stamp(context) : '');
34183
34184  	if (obj[eventsKey] && obj[eventsKey][id]) { return this; }
34185
34186  	var handler = function (e) {
34187  		return fn.call(context || obj, e || window.event);
34188  	};
34189
34190  	var originalHandler = handler;
34191
34192  	if (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {
34193  		// Needs DomEvent.Pointer.js
34194  		handler = addPointerListener(obj, type, handler);
34195
34196  	} else if (Browser.touch && (type === 'dblclick')) {
34197  		handler = addDoubleTapListener(obj, handler);
34198
34199  	} else if ('addEventListener' in obj) {
34200
34201  		if (type === 'touchstart' || type === 'touchmove' || type === 'wheel' ||  type === 'mousewheel') {
34202  			obj.addEventListener(mouseSubst[type] || type, handler, Browser.passiveEvents ? {passive: false} : false);
34203
34204  		} else if (type === 'mouseenter' || type === 'mouseleave') {
34205  			handler = function (e) {
34206  				e = e || window.event;
34207  				if (isExternalTarget(obj, e)) {
34208  					originalHandler(e);
34209  				}
34210  			};
34211  			obj.addEventListener(mouseSubst[type], handler, false);
34212
34213  		} else {
34214  			obj.addEventListener(type, originalHandler, false);
34215  		}
34216
34217  	} else {
34218  		obj.attachEvent('on' + type, handler);
34219  	}
34220
34221  	obj[eventsKey] = obj[eventsKey] || {};
34222  	obj[eventsKey][id] = handler;
34223  }
34224
34225  function removeOne(obj, type, fn, context, id) {
34226  	id = id || type + stamp(fn) + (context ? '_' + stamp(context) : '');
34227  	var handler = obj[eventsKey] && obj[eventsKey][id];
34228
34229  	if (!handler) { return this; }
34230
34231  	if (!Browser.touchNative && Browser.pointer && type.indexOf('touch') === 0) {
34232  		removePointerListener(obj, type, handler);
34233
34234  	} else if (Browser.touch && (type === 'dblclick')) {
34235  		removeDoubleTapListener(obj, handler);
34236
34237  	} else if ('removeEventListener' in obj) {
34238
34239  		obj.removeEventListener(mouseSubst[type] || type, handler, false);
34240
34241  	} else {
34242  		obj.detachEvent('on' + type, handler);
34243  	}
34244
34245  	obj[eventsKey][id] = null;
34246  }
34247
34248  // @function stopPropagation(ev: DOMEvent): this
34249  // Stop the given event from propagation to parent elements. Used inside the listener functions:
34250  // ```js
34251  // L.DomEvent.on(div, 'click', function (ev) {
34252  // 	L.DomEvent.stopPropagation(ev);
34253  // });
34254  // ```
34255  function stopPropagation(e) {
34256
34257  	if (e.stopPropagation) {
34258  		e.stopPropagation();
34259  	} else if (e.originalEvent) {  // In case of Leaflet event.
34260  		e.originalEvent._stopped = true;
34261  	} else {
34262  		e.cancelBubble = true;
34263  	}
34264
34265  	return this;
34266  }
34267
34268  // @function disableScrollPropagation(el: HTMLElement): this
34269  // Adds `stopPropagation` to the element's `'wheel'` events (plus browser variants).
34270  function disableScrollPropagation(el) {
34271  	addOne(el, 'wheel', stopPropagation);
34272  	return this;
34273  }
34274
34275  // @function disableClickPropagation(el: HTMLElement): this
34276  // Adds `stopPropagation` to the element's `'click'`, `'dblclick'`, `'contextmenu'`,
34277  // `'mousedown'` and `'touchstart'` events (plus browser variants).
34278  function disableClickPropagation(el) {
34279  	on(el, 'mousedown touchstart dblclick contextmenu', stopPropagation);
34280  	el['_leaflet_disable_click'] = true;
34281  	return this;
34282  }
34283
34284  // @function preventDefault(ev: DOMEvent): this
34285  // Prevents the default action of the DOM Event `ev` from happening (such as
34286  // following a link in the href of the a element, or doing a POST request
34287  // with page reload when a `<form>` is submitted).
34288  // Use it inside listener functions.
34289  function preventDefault(e) {
34290  	if (e.preventDefault) {
34291  		e.preventDefault();
34292  	} else {
34293  		e.returnValue = false;
34294  	}
34295  	return this;
34296  }
34297
34298  // @function stop(ev: DOMEvent): this
34299  // Does `stopPropagation` and `preventDefault` at the same time.
34300  function stop(e) {
34301  	preventDefault(e);
34302  	stopPropagation(e);
34303  	return this;
34304  }
34305
34306  // @function getMousePosition(ev: DOMEvent, container?: HTMLElement): Point
34307  // Gets normalized mouse position from a DOM event relative to the
34308  // `container` (border excluded) or to the whole page if not specified.
34309  function getMousePosition(e, container) {
34310  	if (!container) {
34311  		return new Point(e.clientX, e.clientY);
34312  	}
34313
34314  	var scale = getScale(container),
34315  	    offset = scale.boundingClientRect; // left and top  values are in page scale (like the event clientX/Y)
34316
34317  	return new Point(
34318  		// offset.left/top values are in page scale (like clientX/Y),
34319  		// whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).
34320  		(e.clientX - offset.left) / scale.x - container.clientLeft,
34321  		(e.clientY - offset.top) / scale.y - container.clientTop
34322  	);
34323  }
34324
34325  // Chrome on Win scrolls double the pixels as in other platforms (see #4538),
34326  // and Firefox scrolls device pixels, not CSS pixels
34327  var wheelPxFactor =
34328  	(Browser.win && Browser.chrome) ? 2 * window.devicePixelRatio :
34329  	Browser.gecko ? window.devicePixelRatio : 1;
34330
34331  // @function getWheelDelta(ev: DOMEvent): Number
34332  // Gets normalized wheel delta from a wheel DOM event, in vertical
34333  // pixels scrolled (negative if scrolling down).
34334  // Events from pointing devices without precise scrolling are mapped to
34335  // a best guess of 60 pixels.
34336  function getWheelDelta(e) {
34337  	return (Browser.edge) ? e.wheelDeltaY / 2 : // Don't trust window-geometry-based delta
34338  	       (e.deltaY && e.deltaMode === 0) ? -e.deltaY / wheelPxFactor : // Pixels
34339  	       (e.deltaY && e.deltaMode === 1) ? -e.deltaY * 20 : // Lines
34340  	       (e.deltaY && e.deltaMode === 2) ? -e.deltaY * 60 : // Pages
34341  	       (e.deltaX || e.deltaZ) ? 0 :	// Skip horizontal/depth wheel events
34342  	       e.wheelDelta ? (e.wheelDeltaY || e.wheelDelta) / 2 : // Legacy IE pixels
34343  	       (e.detail && Math.abs(e.detail) < 32765) ? -e.detail * 20 : // Legacy Moz lines
34344  	       e.detail ? e.detail / -32765 * 60 : // Legacy Moz pages
34345  	       0;
34346  }
34347
34348  // check if element really left/entered the event target (for mouseenter/mouseleave)
34349  function isExternalTarget(el, e) {
34350
34351  	var related = e.relatedTarget;
34352
34353  	if (!related) { return true; }
34354
34355  	try {
34356  		while (related && (related !== el)) {
34357  			related = related.parentNode;
34358  		}
34359  	} catch (err) {
34360  		return false;
34361  	}
34362  	return (related !== el);
34363  }
34364
34365  var DomEvent = {
34366    __proto__: null,
34367    on: on,
34368    off: off,
34369    stopPropagation: stopPropagation,
34370    disableScrollPropagation: disableScrollPropagation,
34371    disableClickPropagation: disableClickPropagation,
34372    preventDefault: preventDefault,
34373    stop: stop,
34374    getMousePosition: getMousePosition,
34375    getWheelDelta: getWheelDelta,
34376    isExternalTarget: isExternalTarget,
34377    addListener: on,
34378    removeListener: off
34379  };
34380
34381  /*
34382   * @class PosAnimation
34383   * @aka L.PosAnimation
34384   * @inherits Evented
34385   * Used internally for panning animations, utilizing CSS3 Transitions for modern browsers and a timer fallback for IE6-9.
34386   *
34387   * @example
34388   * ```js
34389   * var fx = new L.PosAnimation();
34390   * fx.run(el, [300, 500], 0.5);
34391   * ```
34392   *
34393   * @constructor L.PosAnimation()
34394   * Creates a `PosAnimation` object.
34395   *
34396   */
34397
34398  var PosAnimation = Evented.extend({
34399
34400  	// @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)
34401  	// Run an animation of a given element to a new position, optionally setting
34402  	// duration in seconds (`0.25` by default) and easing linearity factor (3rd
34403  	// argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),
34404  	// `0.5` by default).
34405  	run: function (el, newPos, duration, easeLinearity) {
34406  		this.stop();
34407
34408  		this._el = el;
34409  		this._inProgress = true;
34410  		this._duration = duration || 0.25;
34411  		this._easeOutPower = 1 / Math.max(easeLinearity || 0.5, 0.2);
34412
34413  		this._startPos = getPosition(el);
34414  		this._offset = newPos.subtract(this._startPos);
34415  		this._startTime = +new Date();
34416
34417  		// @event start: Event
34418  		// Fired when the animation starts
34419  		this.fire('start');
34420
34421  		this._animate();
34422  	},
34423
34424  	// @method stop()
34425  	// Stops the animation (if currently running).
34426  	stop: function () {
34427  		if (!this._inProgress) { return; }
34428
34429  		this._step(true);
34430  		this._complete();
34431  	},
34432
34433  	_animate: function () {
34434  		// animation loop
34435  		this._animId = requestAnimFrame(this._animate, this);
34436  		this._step();
34437  	},
34438
34439  	_step: function (round) {
34440  		var elapsed = (+new Date()) - this._startTime,
34441  		    duration = this._duration * 1000;
34442
34443  		if (elapsed < duration) {
34444  			this._runFrame(this._easeOut(elapsed / duration), round);
34445  		} else {
34446  			this._runFrame(1);
34447  			this._complete();
34448  		}
34449  	},
34450
34451  	_runFrame: function (progress, round) {
34452  		var pos = this._startPos.add(this._offset.multiplyBy(progress));
34453  		if (round) {
34454  			pos._round();
34455  		}
34456  		setPosition(this._el, pos);
34457
34458  		// @event step: Event
34459  		// Fired continuously during the animation.
34460  		this.fire('step');
34461  	},
34462
34463  	_complete: function () {
34464  		cancelAnimFrame(this._animId);
34465
34466  		this._inProgress = false;
34467  		// @event end: Event
34468  		// Fired when the animation ends.
34469  		this.fire('end');
34470  	},
34471
34472  	_easeOut: function (t) {
34473  		return 1 - Math.pow(1 - t, this._easeOutPower);
34474  	}
34475  });
34476
34477  /*
34478   * @class Map
34479   * @aka L.Map
34480   * @inherits Evented
34481   *
34482   * The central class of the API — it is used to create a map on a page and manipulate it.
34483   *
34484   * @example
34485   *
34486   * ```js
34487   * // initialize the map on the "map" div with a given center and zoom
34488   * var map = L.map('map', {
34489   * 	center: [51.505, -0.09],
34490   * 	zoom: 13
34491   * });
34492   * ```
34493   *
34494   */
34495
34496  var Map = Evented.extend({
34497
34498  	options: {
34499  		// @section Map State Options
34500  		// @option crs: CRS = L.CRS.EPSG3857
34501  		// The [Coordinate Reference System](#crs) to use. Don't change this if you're not
34502  		// sure what it means.
34503  		crs: EPSG3857,
34504
34505  		// @option center: LatLng = undefined
34506  		// Initial geographic center of the map
34507  		center: undefined,
34508
34509  		// @option zoom: Number = undefined
34510  		// Initial map zoom level
34511  		zoom: undefined,
34512
34513  		// @option minZoom: Number = *
34514  		// Minimum zoom level of the map.
34515  		// If not specified and at least one `GridLayer` or `TileLayer` is in the map,
34516  		// the lowest of their `minZoom` options will be used instead.
34517  		minZoom: undefined,
34518
34519  		// @option maxZoom: Number = *
34520  		// Maximum zoom level of the map.
34521  		// If not specified and at least one `GridLayer` or `TileLayer` is in the map,
34522  		// the highest of their `maxZoom` options will be used instead.
34523  		maxZoom: undefined,
34524
34525  		// @option layers: Layer[] = []
34526  		// Array of layers that will be added to the map initially
34527  		layers: [],
34528
34529  		// @option maxBounds: LatLngBounds = null
34530  		// When this option is set, the map restricts the view to the given
34531  		// geographical bounds, bouncing the user back if the user tries to pan
34532  		// outside the view. To set the restriction dynamically, use
34533  		// [`setMaxBounds`](#map-setmaxbounds) method.
34534  		maxBounds: undefined,
34535
34536  		// @option renderer: Renderer = *
34537  		// The default method for drawing vector layers on the map. `L.SVG`
34538  		// or `L.Canvas` by default depending on browser support.
34539  		renderer: undefined,
34540
34541
34542  		// @section Animation Options
34543  		// @option zoomAnimation: Boolean = true
34544  		// Whether the map zoom animation is enabled. By default it's enabled
34545  		// in all browsers that support CSS3 Transitions except Android.
34546  		zoomAnimation: true,
34547
34548  		// @option zoomAnimationThreshold: Number = 4
34549  		// Won't animate zoom if the zoom difference exceeds this value.
34550  		zoomAnimationThreshold: 4,
34551
34552  		// @option fadeAnimation: Boolean = true
34553  		// Whether the tile fade animation is enabled. By default it's enabled
34554  		// in all browsers that support CSS3 Transitions except Android.
34555  		fadeAnimation: true,
34556
34557  		// @option markerZoomAnimation: Boolean = true
34558  		// Whether markers animate their zoom with the zoom animation, if disabled
34559  		// they will disappear for the length of the animation. By default it's
34560  		// enabled in all browsers that support CSS3 Transitions except Android.
34561  		markerZoomAnimation: true,
34562
34563  		// @option transform3DLimit: Number = 2^23
34564  		// Defines the maximum size of a CSS translation transform. The default
34565  		// value should not be changed unless a web browser positions layers in
34566  		// the wrong place after doing a large `panBy`.
34567  		transform3DLimit: 8388608, // Precision limit of a 32-bit float
34568
34569  		// @section Interaction Options
34570  		// @option zoomSnap: Number = 1
34571  		// Forces the map's zoom level to always be a multiple of this, particularly
34572  		// right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.
34573  		// By default, the zoom level snaps to the nearest integer; lower values
34574  		// (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`
34575  		// means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.
34576  		zoomSnap: 1,
34577
34578  		// @option zoomDelta: Number = 1
34579  		// Controls how much the map's zoom level will change after a
34580  		// [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`
34581  		// or `-` on the keyboard, or using the [zoom controls](#control-zoom).
34582  		// Values smaller than `1` (e.g. `0.5`) allow for greater granularity.
34583  		zoomDelta: 1,
34584
34585  		// @option trackResize: Boolean = true
34586  		// Whether the map automatically handles browser window resize to update itself.
34587  		trackResize: true
34588  	},
34589
34590  	initialize: function (id, options) { // (HTMLElement or String, Object)
34591  		options = setOptions(this, options);
34592
34593  		// Make sure to assign internal flags at the beginning,
34594  		// to avoid inconsistent state in some edge cases.
34595  		this._handlers = [];
34596  		this._layers = {};
34597  		this._zoomBoundLayers = {};
34598  		this._sizeChanged = true;
34599
34600  		this._initContainer(id);
34601  		this._initLayout();
34602
34603  		// hack for https://github.com/Leaflet/Leaflet/issues/1980
34604  		this._onResize = bind(this._onResize, this);
34605
34606  		this._initEvents();
34607
34608  		if (options.maxBounds) {
34609  			this.setMaxBounds(options.maxBounds);
34610  		}
34611
34612  		if (options.zoom !== undefined) {
34613  			this._zoom = this._limitZoom(options.zoom);
34614  		}
34615
34616  		if (options.center && options.zoom !== undefined) {
34617  			this.setView(toLatLng(options.center), options.zoom, {reset: true});
34618  		}
34619
34620  		this.callInitHooks();
34621
34622  		// don't animate on browsers without hardware-accelerated transitions or old Android/Opera
34623  		this._zoomAnimated = TRANSITION && Browser.any3d && !Browser.mobileOpera &&
34624  				this.options.zoomAnimation;
34625
34626  		// zoom transitions run with the same duration for all layers, so if one of transitionend events
34627  		// happens after starting zoom animation (propagating to the map pane), we know that it ended globally
34628  		if (this._zoomAnimated) {
34629  			this._createAnimProxy();
34630  			on(this._proxy, TRANSITION_END, this._catchTransitionEnd, this);
34631  		}
34632
34633  		this._addLayers(this.options.layers);
34634  	},
34635
34636
34637  	// @section Methods for modifying map state
34638
34639  	// @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this
34640  	// Sets the view of the map (geographical center and zoom) with the given
34641  	// animation options.
34642  	setView: function (center, zoom, options) {
34643
34644  		zoom = zoom === undefined ? this._zoom : this._limitZoom(zoom);
34645  		center = this._limitCenter(toLatLng(center), zoom, this.options.maxBounds);
34646  		options = options || {};
34647
34648  		this._stop();
34649
34650  		if (this._loaded && !options.reset && options !== true) {
34651
34652  			if (options.animate !== undefined) {
34653  				options.zoom = extend({animate: options.animate}, options.zoom);
34654  				options.pan = extend({animate: options.animate, duration: options.duration}, options.pan);
34655  			}
34656
34657  			// try animating pan or zoom
34658  			var moved = (this._zoom !== zoom) ?
34659  				this._tryAnimatedZoom && this._tryAnimatedZoom(center, zoom, options.zoom) :
34660  				this._tryAnimatedPan(center, options.pan);
34661
34662  			if (moved) {
34663  				// prevent resize handler call, the view will refresh after animation anyway
34664  				clearTimeout(this._sizeTimer);
34665  				return this;
34666  			}
34667  		}
34668
34669  		// animation didn't start, just reset the map view
34670  		this._resetView(center, zoom);
34671
34672  		return this;
34673  	},
34674
34675  	// @method setZoom(zoom: Number, options?: Zoom/pan options): this
34676  	// Sets the zoom of the map.
34677  	setZoom: function (zoom, options) {
34678  		if (!this._loaded) {
34679  			this._zoom = zoom;
34680  			return this;
34681  		}
34682  		return this.setView(this.getCenter(), zoom, {zoom: options});
34683  	},
34684
34685  	// @method zoomIn(delta?: Number, options?: Zoom options): this
34686  	// Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
34687  	zoomIn: function (delta, options) {
34688  		delta = delta || (Browser.any3d ? this.options.zoomDelta : 1);
34689  		return this.setZoom(this._zoom + delta, options);
34690  	},
34691
34692  	// @method zoomOut(delta?: Number, options?: Zoom options): this
34693  	// Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
34694  	zoomOut: function (delta, options) {
34695  		delta = delta || (Browser.any3d ? this.options.zoomDelta : 1);
34696  		return this.setZoom(this._zoom - delta, options);
34697  	},
34698
34699  	// @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this
34700  	// Zooms the map while keeping a specified geographical point on the map
34701  	// stationary (e.g. used internally for scroll zoom and double-click zoom).
34702  	// @alternative
34703  	// @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this
34704  	// Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.
34705  	setZoomAround: function (latlng, zoom, options) {
34706  		var scale = this.getZoomScale(zoom),
34707  		    viewHalf = this.getSize().divideBy(2),
34708  		    containerPoint = latlng instanceof Point ? latlng : this.latLngToContainerPoint(latlng),
34709
34710  		    centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),
34711  		    newCenter = this.containerPointToLatLng(viewHalf.add(centerOffset));
34712
34713  		return this.setView(newCenter, zoom, {zoom: options});
34714  	},
34715
34716  	_getBoundsCenterZoom: function (bounds, options) {
34717
34718  		options = options || {};
34719  		bounds = bounds.getBounds ? bounds.getBounds() : toLatLngBounds(bounds);
34720
34721  		var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
34722  		    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
34723
34724  		    zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR));
34725
34726  		zoom = (typeof options.maxZoom === 'number') ? Math.min(options.maxZoom, zoom) : zoom;
34727
34728  		if (zoom === Infinity) {
34729  			return {
34730  				center: bounds.getCenter(),
34731  				zoom: zoom
34732  			};
34733  		}
34734
34735  		var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2),
34736
34737  		    swPoint = this.project(bounds.getSouthWest(), zoom),
34738  		    nePoint = this.project(bounds.getNorthEast(), zoom),
34739  		    center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom);
34740
34741  		return {
34742  			center: center,
34743  			zoom: zoom
34744  		};
34745  	},
34746
34747  	// @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this
34748  	// Sets a map view that contains the given geographical bounds with the
34749  	// maximum zoom level possible.
34750  	fitBounds: function (bounds, options) {
34751
34752  		bounds = toLatLngBounds(bounds);
34753
34754  		if (!bounds.isValid()) {
34755  			throw new Error('Bounds are not valid.');
34756  		}
34757
34758  		var target = this._getBoundsCenterZoom(bounds, options);
34759  		return this.setView(target.center, target.zoom, options);
34760  	},
34761
34762  	// @method fitWorld(options?: fitBounds options): this
34763  	// Sets a map view that mostly contains the whole world with the maximum
34764  	// zoom level possible.
34765  	fitWorld: function (options) {
34766  		return this.fitBounds([[-90, -180], [90, 180]], options);
34767  	},
34768
34769  	// @method panTo(latlng: LatLng, options?: Pan options): this
34770  	// Pans the map to a given center.
34771  	panTo: function (center, options) { // (LatLng)
34772  		return this.setView(center, this._zoom, {pan: options});
34773  	},
34774
34775  	// @method panBy(offset: Point, options?: Pan options): this
34776  	// Pans the map by a given number of pixels (animated).
34777  	panBy: function (offset, options) {
34778  		offset = toPoint(offset).round();
34779  		options = options || {};
34780
34781  		if (!offset.x && !offset.y) {
34782  			return this.fire('moveend');
34783  		}
34784  		// If we pan too far, Chrome gets issues with tiles
34785  		// and makes them disappear or appear in the wrong place (slightly offset) #2602
34786  		if (options.animate !== true && !this.getSize().contains(offset)) {
34787  			this._resetView(this.unproject(this.project(this.getCenter()).add(offset)), this.getZoom());
34788  			return this;
34789  		}
34790
34791  		if (!this._panAnim) {
34792  			this._panAnim = new PosAnimation();
34793
34794  			this._panAnim.on({
34795  				'step': this._onPanTransitionStep,
34796  				'end': this._onPanTransitionEnd
34797  			}, this);
34798  		}
34799
34800  		// don't fire movestart if animating inertia
34801  		if (!options.noMoveStart) {
34802  			this.fire('movestart');
34803  		}
34804
34805  		// animate pan unless animate: false specified
34806  		if (options.animate !== false) {
34807  			addClass(this._mapPane, 'leaflet-pan-anim');
34808
34809  			var newPos = this._getMapPanePos().subtract(offset).round();
34810  			this._panAnim.run(this._mapPane, newPos, options.duration || 0.25, options.easeLinearity);
34811  		} else {
34812  			this._rawPanBy(offset);
34813  			this.fire('move').fire('moveend');
34814  		}
34815
34816  		return this;
34817  	},
34818
34819  	// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this
34820  	// Sets the view of the map (geographical center and zoom) performing a smooth
34821  	// pan-zoom animation.
34822  	flyTo: function (targetCenter, targetZoom, options) {
34823
34824  		options = options || {};
34825  		if (options.animate === false || !Browser.any3d) {
34826  			return this.setView(targetCenter, targetZoom, options);
34827  		}
34828
34829  		this._stop();
34830
34831  		var from = this.project(this.getCenter()),
34832  		    to = this.project(targetCenter),
34833  		    size = this.getSize(),
34834  		    startZoom = this._zoom;
34835
34836  		targetCenter = toLatLng(targetCenter);
34837  		targetZoom = targetZoom === undefined ? startZoom : targetZoom;
34838
34839  		var w0 = Math.max(size.x, size.y),
34840  		    w1 = w0 * this.getZoomScale(startZoom, targetZoom),
34841  		    u1 = (to.distanceTo(from)) || 1,
34842  		    rho = 1.42,
34843  		    rho2 = rho * rho;
34844
34845  		function r(i) {
34846  			var s1 = i ? -1 : 1,
34847  			    s2 = i ? w1 : w0,
34848  			    t1 = w1 * w1 - w0 * w0 + s1 * rho2 * rho2 * u1 * u1,
34849  			    b1 = 2 * s2 * rho2 * u1,
34850  			    b = t1 / b1,
34851  			    sq = Math.sqrt(b * b + 1) - b;
34852
34853  			    // workaround for floating point precision bug when sq = 0, log = -Infinite,
34854  			    // thus triggering an infinite loop in flyTo
34855  			    var log = sq < 0.000000001 ? -18 : Math.log(sq);
34856
34857  			return log;
34858  		}
34859
34860  		function sinh(n) { return (Math.exp(n) - Math.exp(-n)) / 2; }
34861  		function cosh(n) { return (Math.exp(n) + Math.exp(-n)) / 2; }
34862  		function tanh(n) { return sinh(n) / cosh(n); }
34863
34864  		var r0 = r(0);
34865
34866  		function w(s) { return w0 * (cosh(r0) / cosh(r0 + rho * s)); }
34867  		function u(s) { return w0 * (cosh(r0) * tanh(r0 + rho * s) - sinh(r0)) / rho2; }
34868
34869  		function easeOut(t) { return 1 - Math.pow(1 - t, 1.5); }
34870
34871  		var start = Date.now(),
34872  		    S = (r(1) - r0) / rho,
34873  		    duration = options.duration ? 1000 * options.duration : 1000 * S * 0.8;
34874
34875  		function frame() {
34876  			var t = (Date.now() - start) / duration,
34877  			    s = easeOut(t) * S;
34878
34879  			if (t <= 1) {
34880  				this._flyToFrame = requestAnimFrame(frame, this);
34881
34882  				this._move(
34883  					this.unproject(from.add(to.subtract(from).multiplyBy(u(s) / u1)), startZoom),
34884  					this.getScaleZoom(w0 / w(s), startZoom),
34885  					{flyTo: true});
34886
34887  			} else {
34888  				this
34889  					._move(targetCenter, targetZoom)
34890  					._moveEnd(true);
34891  			}
34892  		}
34893
34894  		this._moveStart(true, options.noMoveStart);
34895
34896  		frame.call(this);
34897  		return this;
34898  	},
34899
34900  	// @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this
34901  	// Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),
34902  	// but takes a bounds parameter like [`fitBounds`](#map-fitbounds).
34903  	flyToBounds: function (bounds, options) {
34904  		var target = this._getBoundsCenterZoom(bounds, options);
34905  		return this.flyTo(target.center, target.zoom, options);
34906  	},
34907
34908  	// @method setMaxBounds(bounds: LatLngBounds): this
34909  	// Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).
34910  	setMaxBounds: function (bounds) {
34911  		bounds = toLatLngBounds(bounds);
34912
34913  		if (!bounds.isValid()) {
34914  			this.options.maxBounds = null;
34915  			return this.off('moveend', this._panInsideMaxBounds);
34916  		} else if (this.options.maxBounds) {
34917  			this.off('moveend', this._panInsideMaxBounds);
34918  		}
34919
34920  		this.options.maxBounds = bounds;
34921
34922  		if (this._loaded) {
34923  			this._panInsideMaxBounds();
34924  		}
34925
34926  		return this.on('moveend', this._panInsideMaxBounds);
34927  	},
34928
34929  	// @method setMinZoom(zoom: Number): this
34930  	// Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).
34931  	setMinZoom: function (zoom) {
34932  		var oldZoom = this.options.minZoom;
34933  		this.options.minZoom = zoom;
34934
34935  		if (this._loaded && oldZoom !== zoom) {
34936  			this.fire('zoomlevelschange');
34937
34938  			if (this.getZoom() < this.options.minZoom) {
34939  				return this.setZoom(zoom);
34940  			}
34941  		}
34942
34943  		return this;
34944  	},
34945
34946  	// @method setMaxZoom(zoom: Number): this
34947  	// Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).
34948  	setMaxZoom: function (zoom) {
34949  		var oldZoom = this.options.maxZoom;
34950  		this.options.maxZoom = zoom;
34951
34952  		if (this._loaded && oldZoom !== zoom) {
34953  			this.fire('zoomlevelschange');
34954
34955  			if (this.getZoom() > this.options.maxZoom) {
34956  				return this.setZoom(zoom);
34957  			}
34958  		}
34959
34960  		return this;
34961  	},
34962
34963  	// @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this
34964  	// Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.
34965  	panInsideBounds: function (bounds, options) {
34966  		this._enforcingBounds = true;
34967  		var center = this.getCenter(),
34968  		    newCenter = this._limitCenter(center, this._zoom, toLatLngBounds(bounds));
34969
34970  		if (!center.equals(newCenter)) {
34971  			this.panTo(newCenter, options);
34972  		}
34973
34974  		this._enforcingBounds = false;
34975  		return this;
34976  	},
34977
34978  	// @method panInside(latlng: LatLng, options?: padding options): this
34979  	// Pans the map the minimum amount to make the `latlng` visible. Use
34980  	// padding options to fit the display to more restricted bounds.
34981  	// If `latlng` is already within the (optionally padded) display bounds,
34982  	// the map will not be panned.
34983  	panInside: function (latlng, options) {
34984  		options = options || {};
34985
34986  		var paddingTL = toPoint(options.paddingTopLeft || options.padding || [0, 0]),
34987  		    paddingBR = toPoint(options.paddingBottomRight || options.padding || [0, 0]),
34988  		    pixelCenter = this.project(this.getCenter()),
34989  		    pixelPoint = this.project(latlng),
34990  		    pixelBounds = this.getPixelBounds(),
34991  		    paddedBounds = toBounds([pixelBounds.min.add(paddingTL), pixelBounds.max.subtract(paddingBR)]),
34992  		    paddedSize = paddedBounds.getSize();
34993
34994  		if (!paddedBounds.contains(pixelPoint)) {
34995  			this._enforcingBounds = true;
34996  			var centerOffset = pixelPoint.subtract(paddedBounds.getCenter());
34997  			var offset = paddedBounds.extend(pixelPoint).getSize().subtract(paddedSize);
34998  			pixelCenter.x += centerOffset.x < 0 ? -offset.x : offset.x;
34999  			pixelCenter.y += centerOffset.y < 0 ? -offset.y : offset.y;
35000  			this.panTo(this.unproject(pixelCenter), options);
35001  			this._enforcingBounds = false;
35002  		}
35003  		return this;
35004  	},
35005
35006  	// @method invalidateSize(options: Zoom/pan options): this
35007  	// Checks if the map container size changed and updates the map if so —
35008  	// call it after you've changed the map size dynamically, also animating
35009  	// pan by default. If `options.pan` is `false`, panning will not occur.
35010  	// If `options.debounceMoveend` is `true`, it will delay `moveend` event so
35011  	// that it doesn't happen often even if the method is called many
35012  	// times in a row.
35013
35014  	// @alternative
35015  	// @method invalidateSize(animate: Boolean): this
35016  	// Checks if the map container size changed and updates the map if so —
35017  	// call it after you've changed the map size dynamically, also animating
35018  	// pan by default.
35019  	invalidateSize: function (options) {
35020  		if (!this._loaded) { return this; }
35021
35022  		options = extend({
35023  			animate: false,
35024  			pan: true
35025  		}, options === true ? {animate: true} : options);
35026
35027  		var oldSize = this.getSize();
35028  		this._sizeChanged = true;
35029  		this._lastCenter = null;
35030
35031  		var newSize = this.getSize(),
35032  		    oldCenter = oldSize.divideBy(2).round(),
35033  		    newCenter = newSize.divideBy(2).round(),
35034  		    offset = oldCenter.subtract(newCenter);
35035
35036  		if (!offset.x && !offset.y) { return this; }
35037
35038  		if (options.animate && options.pan) {
35039  			this.panBy(offset);
35040
35041  		} else {
35042  			if (options.pan) {
35043  				this._rawPanBy(offset);
35044  			}
35045
35046  			this.fire('move');
35047
35048  			if (options.debounceMoveend) {
35049  				clearTimeout(this._sizeTimer);
35050  				this._sizeTimer = setTimeout(bind(this.fire, this, 'moveend'), 200);
35051  			} else {
35052  				this.fire('moveend');
35053  			}
35054  		}
35055
35056  		// @section Map state change events
35057  		// @event resize: ResizeEvent
35058  		// Fired when the map is resized.
35059  		return this.fire('resize', {
35060  			oldSize: oldSize,
35061  			newSize: newSize
35062  		});
35063  	},
35064
35065  	// @section Methods for modifying map state
35066  	// @method stop(): this
35067  	// Stops the currently running `panTo` or `flyTo` animation, if any.
35068  	stop: function () {
35069  		this.setZoom(this._limitZoom(this._zoom));
35070  		if (!this.options.zoomSnap) {
35071  			this.fire('viewreset');
35072  		}
35073  		return this._stop();
35074  	},
35075
35076  	// @section Geolocation methods
35077  	// @method locate(options?: Locate options): this
35078  	// Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)
35079  	// event with location data on success or a [`locationerror`](#map-locationerror) event on failure,
35080  	// and optionally sets the map view to the user's location with respect to
35081  	// detection accuracy (or to the world view if geolocation failed).
35082  	// Note that, if your page doesn't use HTTPS, this method will fail in
35083  	// modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))
35084  	// See `Locate options` for more details.
35085  	locate: function (options) {
35086
35087  		options = this._locateOptions = extend({
35088  			timeout: 10000,
35089  			watch: false
35090  			// setView: false
35091  			// maxZoom: <Number>
35092  			// maximumAge: 0
35093  			// enableHighAccuracy: false
35094  		}, options);
35095
35096  		if (!('geolocation' in navigator)) {
35097  			this._handleGeolocationError({
35098  				code: 0,
35099  				message: 'Geolocation not supported.'
35100  			});
35101  			return this;
35102  		}
35103
35104  		var onResponse = bind(this._handleGeolocationResponse, this),
35105  		    onError = bind(this._handleGeolocationError, this);
35106
35107  		if (options.watch) {
35108  			this._locationWatchId =
35109  			        navigator.geolocation.watchPosition(onResponse, onError, options);
35110  		} else {
35111  			navigator.geolocation.getCurrentPosition(onResponse, onError, options);
35112  		}
35113  		return this;
35114  	},
35115
35116  	// @method stopLocate(): this
35117  	// Stops watching location previously initiated by `map.locate({watch: true})`
35118  	// and aborts resetting the map view if map.locate was called with
35119  	// `{setView: true}`.
35120  	stopLocate: function () {
35121  		if (navigator.geolocation && navigator.geolocation.clearWatch) {
35122  			navigator.geolocation.clearWatch(this._locationWatchId);
35123  		}
35124  		if (this._locateOptions) {
35125  			this._locateOptions.setView = false;
35126  		}
35127  		return this;
35128  	},
35129
35130  	_handleGeolocationError: function (error) {
35131  		if (!this._container._leaflet_id) { return; }
35132
35133  		var c = error.code,
35134  		    message = error.message ||
35135  		            (c === 1 ? 'permission denied' :
35136  		            (c === 2 ? 'position unavailable' : 'timeout'));
35137
35138  		if (this._locateOptions.setView && !this._loaded) {
35139  			this.fitWorld();
35140  		}
35141
35142  		// @section Location events
35143  		// @event locationerror: ErrorEvent
35144  		// Fired when geolocation (using the [`locate`](#map-locate) method) failed.
35145  		this.fire('locationerror', {
35146  			code: c,
35147  			message: 'Geolocation error: ' + message + '.'
35148  		});
35149  	},
35150
35151  	_handleGeolocationResponse: function (pos) {
35152  		if (!this._container._leaflet_id) { return; }
35153
35154  		var lat = pos.coords.latitude,
35155  		    lng = pos.coords.longitude,
35156  		    latlng = new LatLng(lat, lng),
35157  		    bounds = latlng.toBounds(pos.coords.accuracy * 2),
35158  		    options = this._locateOptions;
35159
35160  		if (options.setView) {
35161  			var zoom = this.getBoundsZoom(bounds);
35162  			this.setView(latlng, options.maxZoom ? Math.min(zoom, options.maxZoom) : zoom);
35163  		}
35164
35165  		var data = {
35166  			latlng: latlng,
35167  			bounds: bounds,
35168  			timestamp: pos.timestamp
35169  		};
35170
35171  		for (var i in pos.coords) {
35172  			if (typeof pos.coords[i] === 'number') {
35173  				data[i] = pos.coords[i];
35174  			}
35175  		}
35176
35177  		// @event locationfound: LocationEvent
35178  		// Fired when geolocation (using the [`locate`](#map-locate) method)
35179  		// went successfully.
35180  		this.fire('locationfound', data);
35181  	},
35182
35183  	// TODO Appropriate docs section?
35184  	// @section Other Methods
35185  	// @method addHandler(name: String, HandlerClass: Function): this
35186  	// Adds a new `Handler` to the map, given its name and constructor function.
35187  	addHandler: function (name, HandlerClass) {
35188  		if (!HandlerClass) { return this; }
35189
35190  		var handler = this[name] = new HandlerClass(this);
35191
35192  		this._handlers.push(handler);
35193
35194  		if (this.options[name]) {
35195  			handler.enable();
35196  		}
35197
35198  		return this;
35199  	},
35200
35201  	// @method remove(): this
35202  	// Destroys the map and clears all related event listeners.
35203  	remove: function () {
35204
35205  		this._initEvents(true);
35206  		if (this.options.maxBounds) { this.off('moveend', this._panInsideMaxBounds); }
35207
35208  		if (this._containerId !== this._container._leaflet_id) {
35209  			throw new Error('Map container is being reused by another instance');
35210  		}
35211
35212  		try {
35213  			// throws error in IE6-8
35214  			delete this._container._leaflet_id;
35215  			delete this._containerId;
35216  		} catch (e) {
35217  			/*eslint-disable */
35218  			this._container._leaflet_id = undefined;
35219  			/* eslint-enable */
35220  			this._containerId = undefined;
35221  		}
35222
35223  		if (this._locationWatchId !== undefined) {
35224  			this.stopLocate();
35225  		}
35226
35227  		this._stop();
35228
35229  		remove(this._mapPane);
35230
35231  		if (this._clearControlPos) {
35232  			this._clearControlPos();
35233  		}
35234  		if (this._resizeRequest) {
35235  			cancelAnimFrame(this._resizeRequest);
35236  			this._resizeRequest = null;
35237  		}
35238
35239  		this._clearHandlers();
35240
35241  		if (this._loaded) {
35242  			// @section Map state change events
35243  			// @event unload: Event
35244  			// Fired when the map is destroyed with [remove](#map-remove) method.
35245  			this.fire('unload');
35246  		}
35247
35248  		var i;
35249  		for (i in this._layers) {
35250  			this._layers[i].remove();
35251  		}
35252  		for (i in this._panes) {
35253  			remove(this._panes[i]);
35254  		}
35255
35256  		this._layers = [];
35257  		this._panes = [];
35258  		delete this._mapPane;
35259  		delete this._renderer;
35260
35261  		return this;
35262  	},
35263
35264  	// @section Other Methods
35265  	// @method createPane(name: String, container?: HTMLElement): HTMLElement
35266  	// Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,
35267  	// then returns it. The pane is created as a child of `container`, or
35268  	// as a child of the main map pane if not set.
35269  	createPane: function (name, container) {
35270  		var className = 'leaflet-pane' + (name ? ' leaflet-' + name.replace('Pane', '') + '-pane' : ''),
35271  		    pane = create$1('div', className, container || this._mapPane);
35272
35273  		if (name) {
35274  			this._panes[name] = pane;
35275  		}
35276  		return pane;
35277  	},
35278
35279  	// @section Methods for Getting Map State
35280
35281  	// @method getCenter(): LatLng
35282  	// Returns the geographical center of the map view
35283  	getCenter: function () {
35284  		this._checkIfLoaded();
35285
35286  		if (this._lastCenter && !this._moved()) {
35287  			return this._lastCenter;
35288  		}
35289  		return this.layerPointToLatLng(this._getCenterLayerPoint());
35290  	},
35291
35292  	// @method getZoom(): Number
35293  	// Returns the current zoom level of the map view
35294  	getZoom: function () {
35295  		return this._zoom;
35296  	},
35297
35298  	// @method getBounds(): LatLngBounds
35299  	// Returns the geographical bounds visible in the current map view
35300  	getBounds: function () {
35301  		var bounds = this.getPixelBounds(),
35302  		    sw = this.unproject(bounds.getBottomLeft()),
35303  		    ne = this.unproject(bounds.getTopRight());
35304
35305  		return new LatLngBounds(sw, ne);
35306  	},
35307
35308  	// @method getMinZoom(): Number
35309  	// Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.
35310  	getMinZoom: function () {
35311  		return this.options.minZoom === undefined ? this._layersMinZoom || 0 : this.options.minZoom;
35312  	},
35313
35314  	// @method getMaxZoom(): Number
35315  	// Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).
35316  	getMaxZoom: function () {
35317  		return this.options.maxZoom === undefined ?
35318  			(this._layersMaxZoom === undefined ? Infinity : this._layersMaxZoom) :
35319  			this.options.maxZoom;
35320  	},
35321
35322  	// @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number
35323  	// Returns the maximum zoom level on which the given bounds fit to the map
35324  	// view in its entirety. If `inside` (optional) is set to `true`, the method
35325  	// instead returns the minimum zoom level on which the map view fits into
35326  	// the given bounds in its entirety.
35327  	getBoundsZoom: function (bounds, inside, padding) { // (LatLngBounds[, Boolean, Point]) -> Number
35328  		bounds = toLatLngBounds(bounds);
35329  		padding = toPoint(padding || [0, 0]);
35330
35331  		var zoom = this.getZoom() || 0,
35332  		    min = this.getMinZoom(),
35333  		    max = this.getMaxZoom(),
35334  		    nw = bounds.getNorthWest(),
35335  		    se = bounds.getSouthEast(),
35336  		    size = this.getSize().subtract(padding),
35337  		    boundsSize = toBounds(this.project(se, zoom), this.project(nw, zoom)).getSize(),
35338  		    snap = Browser.any3d ? this.options.zoomSnap : 1,
35339  		    scalex = size.x / boundsSize.x,
35340  		    scaley = size.y / boundsSize.y,
35341  		    scale = inside ? Math.max(scalex, scaley) : Math.min(scalex, scaley);
35342
35343  		zoom = this.getScaleZoom(scale, zoom);
35344
35345  		if (snap) {
35346  			zoom = Math.round(zoom / (snap / 100)) * (snap / 100); // don't jump if within 1% of a snap level
35347  			zoom = inside ? Math.ceil(zoom / snap) * snap : Math.floor(zoom / snap) * snap;
35348  		}
35349
35350  		return Math.max(min, Math.min(max, zoom));
35351  	},
35352
35353  	// @method getSize(): Point
35354  	// Returns the current size of the map container (in pixels).
35355  	getSize: function () {
35356  		if (!this._size || this._sizeChanged) {
35357  			this._size = new Point(
35358  				this._container.clientWidth || 0,
35359  				this._container.clientHeight || 0);
35360
35361  			this._sizeChanged = false;
35362  		}
35363  		return this._size.clone();
35364  	},
35365
35366  	// @method getPixelBounds(): Bounds
35367  	// Returns the bounds of the current map view in projected pixel
35368  	// coordinates (sometimes useful in layer and overlay implementations).
35369  	getPixelBounds: function (center, zoom) {
35370  		var topLeftPoint = this._getTopLeftPoint(center, zoom);
35371  		return new Bounds(topLeftPoint, topLeftPoint.add(this.getSize()));
35372  	},
35373
35374  	// TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to
35375  	// the map pane? "left point of the map layer" can be confusing, specially
35376  	// since there can be negative offsets.
35377  	// @method getPixelOrigin(): Point
35378  	// Returns the projected pixel coordinates of the top left point of
35379  	// the map layer (useful in custom layer and overlay implementations).
35380  	getPixelOrigin: function () {
35381  		this._checkIfLoaded();
35382  		return this._pixelOrigin;
35383  	},
35384
35385  	// @method getPixelWorldBounds(zoom?: Number): Bounds
35386  	// Returns the world's bounds in pixel coordinates for zoom level `zoom`.
35387  	// If `zoom` is omitted, the map's current zoom level is used.
35388  	getPixelWorldBounds: function (zoom) {
35389  		return this.options.crs.getProjectedBounds(zoom === undefined ? this.getZoom() : zoom);
35390  	},
35391
35392  	// @section Other Methods
35393
35394  	// @method getPane(pane: String|HTMLElement): HTMLElement
35395  	// Returns a [map pane](#map-pane), given its name or its HTML element (its identity).
35396  	getPane: function (pane) {
35397  		return typeof pane === 'string' ? this._panes[pane] : pane;
35398  	},
35399
35400  	// @method getPanes(): Object
35401  	// Returns a plain object containing the names of all [panes](#map-pane) as keys and
35402  	// the panes as values.
35403  	getPanes: function () {
35404  		return this._panes;
35405  	},
35406
35407  	// @method getContainer: HTMLElement
35408  	// Returns the HTML element that contains the map.
35409  	getContainer: function () {
35410  		return this._container;
35411  	},
35412
35413
35414  	// @section Conversion Methods
35415
35416  	// @method getZoomScale(toZoom: Number, fromZoom: Number): Number
35417  	// Returns the scale factor to be applied to a map transition from zoom level
35418  	// `fromZoom` to `toZoom`. Used internally to help with zoom animations.
35419  	getZoomScale: function (toZoom, fromZoom) {
35420  		// TODO replace with universal implementation after refactoring projections
35421  		var crs = this.options.crs;
35422  		fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
35423  		return crs.scale(toZoom) / crs.scale(fromZoom);
35424  	},
35425
35426  	// @method getScaleZoom(scale: Number, fromZoom: Number): Number
35427  	// Returns the zoom level that the map would end up at, if it is at `fromZoom`
35428  	// level and everything is scaled by a factor of `scale`. Inverse of
35429  	// [`getZoomScale`](#map-getZoomScale).
35430  	getScaleZoom: function (scale, fromZoom) {
35431  		var crs = this.options.crs;
35432  		fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
35433  		var zoom = crs.zoom(scale * crs.scale(fromZoom));
35434  		return isNaN(zoom) ? Infinity : zoom;
35435  	},
35436
35437  	// @method project(latlng: LatLng, zoom: Number): Point
35438  	// Projects a geographical coordinate `LatLng` according to the projection
35439  	// of the map's CRS, then scales it according to `zoom` and the CRS's
35440  	// `Transformation`. The result is pixel coordinate relative to
35441  	// the CRS origin.
35442  	project: function (latlng, zoom) {
35443  		zoom = zoom === undefined ? this._zoom : zoom;
35444  		return this.options.crs.latLngToPoint(toLatLng(latlng), zoom);
35445  	},
35446
35447  	// @method unproject(point: Point, zoom: Number): LatLng
35448  	// Inverse of [`project`](#map-project).
35449  	unproject: function (point, zoom) {
35450  		zoom = zoom === undefined ? this._zoom : zoom;
35451  		return this.options.crs.pointToLatLng(toPoint(point), zoom);
35452  	},
35453
35454  	// @method layerPointToLatLng(point: Point): LatLng
35455  	// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
35456  	// returns the corresponding geographical coordinate (for the current zoom level).
35457  	layerPointToLatLng: function (point) {
35458  		var projectedPoint = toPoint(point).add(this.getPixelOrigin());
35459  		return this.unproject(projectedPoint);
35460  	},
35461
35462  	// @method latLngToLayerPoint(latlng: LatLng): Point
35463  	// Given a geographical coordinate, returns the corresponding pixel coordinate
35464  	// relative to the [origin pixel](#map-getpixelorigin).
35465  	latLngToLayerPoint: function (latlng) {
35466  		var projectedPoint = this.project(toLatLng(latlng))._round();
35467  		return projectedPoint._subtract(this.getPixelOrigin());
35468  	},
35469
35470  	// @method wrapLatLng(latlng: LatLng): LatLng
35471  	// Returns a `LatLng` where `lat` and `lng` has been wrapped according to the
35472  	// map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the
35473  	// CRS's bounds.
35474  	// By default this means longitude is wrapped around the dateline so its
35475  	// value is between -180 and +180 degrees.
35476  	wrapLatLng: function (latlng) {
35477  		return this.options.crs.wrapLatLng(toLatLng(latlng));
35478  	},
35479
35480  	// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
35481  	// Returns a `LatLngBounds` with the same size as the given one, ensuring that
35482  	// its center is within the CRS's bounds.
35483  	// By default this means the center longitude is wrapped around the dateline so its
35484  	// value is between -180 and +180 degrees, and the majority of the bounds
35485  	// overlaps the CRS's bounds.
35486  	wrapLatLngBounds: function (latlng) {
35487  		return this.options.crs.wrapLatLngBounds(toLatLngBounds(latlng));
35488  	},
35489
35490  	// @method distance(latlng1: LatLng, latlng2: LatLng): Number
35491  	// Returns the distance between two geographical coordinates according to
35492  	// the map's CRS. By default this measures distance in meters.
35493  	distance: function (latlng1, latlng2) {
35494  		return this.options.crs.distance(toLatLng(latlng1), toLatLng(latlng2));
35495  	},
35496
35497  	// @method containerPointToLayerPoint(point: Point): Point
35498  	// Given a pixel coordinate relative to the map container, returns the corresponding
35499  	// pixel coordinate relative to the [origin pixel](#map-getpixelorigin).
35500  	containerPointToLayerPoint: function (point) { // (Point)
35501  		return toPoint(point).subtract(this._getMapPanePos());
35502  	},
35503
35504  	// @method layerPointToContainerPoint(point: Point): Point
35505  	// Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
35506  	// returns the corresponding pixel coordinate relative to the map container.
35507  	layerPointToContainerPoint: function (point) { // (Point)
35508  		return toPoint(point).add(this._getMapPanePos());
35509  	},
35510
35511  	// @method containerPointToLatLng(point: Point): LatLng
35512  	// Given a pixel coordinate relative to the map container, returns
35513  	// the corresponding geographical coordinate (for the current zoom level).
35514  	containerPointToLatLng: function (point) {
35515  		var layerPoint = this.containerPointToLayerPoint(toPoint(point));
35516  		return this.layerPointToLatLng(layerPoint);
35517  	},
35518
35519  	// @method latLngToContainerPoint(latlng: LatLng): Point
35520  	// Given a geographical coordinate, returns the corresponding pixel coordinate
35521  	// relative to the map container.
35522  	latLngToContainerPoint: function (latlng) {
35523  		return this.layerPointToContainerPoint(this.latLngToLayerPoint(toLatLng(latlng)));
35524  	},
35525
35526  	// @method mouseEventToContainerPoint(ev: MouseEvent): Point
35527  	// Given a MouseEvent object, returns the pixel coordinate relative to the
35528  	// map container where the event took place.
35529  	mouseEventToContainerPoint: function (e) {
35530  		return getMousePosition(e, this._container);
35531  	},
35532
35533  	// @method mouseEventToLayerPoint(ev: MouseEvent): Point
35534  	// Given a MouseEvent object, returns the pixel coordinate relative to
35535  	// the [origin pixel](#map-getpixelorigin) where the event took place.
35536  	mouseEventToLayerPoint: function (e) {
35537  		return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(e));
35538  	},
35539
35540  	// @method mouseEventToLatLng(ev: MouseEvent): LatLng
35541  	// Given a MouseEvent object, returns geographical coordinate where the
35542  	// event took place.
35543  	mouseEventToLatLng: function (e) { // (MouseEvent)
35544  		return this.layerPointToLatLng(this.mouseEventToLayerPoint(e));
35545  	},
35546
35547
35548  	// map initialization methods
35549
35550  	_initContainer: function (id) {
35551  		var container = this._container = get(id);
35552
35553  		if (!container) {
35554  			throw new Error('Map container not found.');
35555  		} else if (container._leaflet_id) {
35556  			throw new Error('Map container is already initialized.');
35557  		}
35558
35559  		on(container, 'scroll', this._onScroll, this);
35560  		this._containerId = stamp(container);
35561  	},
35562
35563  	_initLayout: function () {
35564  		var container = this._container;
35565
35566  		this._fadeAnimated = this.options.fadeAnimation && Browser.any3d;
35567
35568  		addClass(container, 'leaflet-container' +
35569  			(Browser.touch ? ' leaflet-touch' : '') +
35570  			(Browser.retina ? ' leaflet-retina' : '') +
35571  			(Browser.ielt9 ? ' leaflet-oldie' : '') +
35572  			(Browser.safari ? ' leaflet-safari' : '') +
35573  			(this._fadeAnimated ? ' leaflet-fade-anim' : ''));
35574
35575  		var position = getStyle(container, 'position');
35576
35577  		if (position !== 'absolute' && position !== 'relative' && position !== 'fixed') {
35578  			container.style.position = 'relative';
35579  		}
35580
35581  		this._initPanes();
35582
35583  		if (this._initControlPos) {
35584  			this._initControlPos();
35585  		}
35586  	},
35587
35588  	_initPanes: function () {
35589  		var panes = this._panes = {};
35590  		this._paneRenderers = {};
35591
35592  		// @section
35593  		//
35594  		// Panes are DOM elements used to control the ordering of layers on the map. You
35595  		// can access panes with [`map.getPane`](#map-getpane) or
35596  		// [`map.getPanes`](#map-getpanes) methods. New panes can be created with the
35597  		// [`map.createPane`](#map-createpane) method.
35598  		//
35599  		// Every map has the following default panes that differ only in zIndex.
35600  		//
35601  		// @pane mapPane: HTMLElement = 'auto'
35602  		// Pane that contains all other map panes
35603
35604  		this._mapPane = this.createPane('mapPane', this._container);
35605  		setPosition(this._mapPane, new Point(0, 0));
35606
35607  		// @pane tilePane: HTMLElement = 200
35608  		// Pane for `GridLayer`s and `TileLayer`s
35609  		this.createPane('tilePane');
35610  		// @pane overlayPane: HTMLElement = 400
35611  		// Pane for vectors (`Path`s, like `Polyline`s and `Polygon`s), `ImageOverlay`s and `VideoOverlay`s
35612  		this.createPane('overlayPane');
35613  		// @pane shadowPane: HTMLElement = 500
35614  		// Pane for overlay shadows (e.g. `Marker` shadows)
35615  		this.createPane('shadowPane');
35616  		// @pane markerPane: HTMLElement = 600
35617  		// Pane for `Icon`s of `Marker`s
35618  		this.createPane('markerPane');
35619  		// @pane tooltipPane: HTMLElement = 650
35620  		// Pane for `Tooltip`s.
35621  		this.createPane('tooltipPane');
35622  		// @pane popupPane: HTMLElement = 700
35623  		// Pane for `Popup`s.
35624  		this.createPane('popupPane');
35625
35626  		if (!this.options.markerZoomAnimation) {
35627  			addClass(panes.markerPane, 'leaflet-zoom-hide');
35628  			addClass(panes.shadowPane, 'leaflet-zoom-hide');
35629  		}
35630  	},
35631
35632
35633  	// private methods that modify map state
35634
35635  	// @section Map state change events
35636  	_resetView: function (center, zoom) {
35637  		setPosition(this._mapPane, new Point(0, 0));
35638
35639  		var loading = !this._loaded;
35640  		this._loaded = true;
35641  		zoom = this._limitZoom(zoom);
35642
35643  		this.fire('viewprereset');
35644
35645  		var zoomChanged = this._zoom !== zoom;
35646  		this
35647  			._moveStart(zoomChanged, false)
35648  			._move(center, zoom)
35649  			._moveEnd(zoomChanged);
35650
35651  		// @event viewreset: Event
35652  		// Fired when the map needs to redraw its content (this usually happens
35653  		// on map zoom or load). Very useful for creating custom overlays.
35654  		this.fire('viewreset');
35655
35656  		// @event load: Event
35657  		// Fired when the map is initialized (when its center and zoom are set
35658  		// for the first time).
35659  		if (loading) {
35660  			this.fire('load');
35661  		}
35662  	},
35663
35664  	_moveStart: function (zoomChanged, noMoveStart) {
35665  		// @event zoomstart: Event
35666  		// Fired when the map zoom is about to change (e.g. before zoom animation).
35667  		// @event movestart: Event
35668  		// Fired when the view of the map starts changing (e.g. user starts dragging the map).
35669  		if (zoomChanged) {
35670  			this.fire('zoomstart');
35671  		}
35672  		if (!noMoveStart) {
35673  			this.fire('movestart');
35674  		}
35675  		return this;
35676  	},
35677
35678  	_move: function (center, zoom, data, supressEvent) {
35679  		if (zoom === undefined) {
35680  			zoom = this._zoom;
35681  		}
35682  		var zoomChanged = this._zoom !== zoom;
35683
35684  		this._zoom = zoom;
35685  		this._lastCenter = center;
35686  		this._pixelOrigin = this._getNewPixelOrigin(center);
35687
35688  		if (!supressEvent) {
35689  			// @event zoom: Event
35690  			// Fired repeatedly during any change in zoom level,
35691  			// including zoom and fly animations.
35692  			if (zoomChanged || (data && data.pinch)) {	// Always fire 'zoom' if pinching because #3530
35693  				this.fire('zoom', data);
35694  			}
35695
35696  			// @event move: Event
35697  			// Fired repeatedly during any movement of the map,
35698  			// including pan and fly animations.
35699  			this.fire('move', data);
35700  		} else if (data && data.pinch) {	// Always fire 'zoom' if pinching because #3530
35701  			this.fire('zoom', data);
35702  		}
35703  		return this;
35704  	},
35705
35706  	_moveEnd: function (zoomChanged) {
35707  		// @event zoomend: Event
35708  		// Fired when the map zoom changed, after any animations.
35709  		if (zoomChanged) {
35710  			this.fire('zoomend');
35711  		}
35712
35713  		// @event moveend: Event
35714  		// Fired when the center of the map stops changing
35715  		// (e.g. user stopped dragging the map or after non-centered zoom).
35716  		return this.fire('moveend');
35717  	},
35718
35719  	_stop: function () {
35720  		cancelAnimFrame(this._flyToFrame);
35721  		if (this._panAnim) {
35722  			this._panAnim.stop();
35723  		}
35724  		return this;
35725  	},
35726
35727  	_rawPanBy: function (offset) {
35728  		setPosition(this._mapPane, this._getMapPanePos().subtract(offset));
35729  	},
35730
35731  	_getZoomSpan: function () {
35732  		return this.getMaxZoom() - this.getMinZoom();
35733  	},
35734
35735  	_panInsideMaxBounds: function () {
35736  		if (!this._enforcingBounds) {
35737  			this.panInsideBounds(this.options.maxBounds);
35738  		}
35739  	},
35740
35741  	_checkIfLoaded: function () {
35742  		if (!this._loaded) {
35743  			throw new Error('Set map center and zoom first.');
35744  		}
35745  	},
35746
35747  	// DOM event handling
35748
35749  	// @section Interaction events
35750  	_initEvents: function (remove) {
35751  		this._targets = {};
35752  		this._targets[stamp(this._container)] = this;
35753
35754  		var onOff = remove ? off : on;
35755
35756  		// @event click: MouseEvent
35757  		// Fired when the user clicks (or taps) the map.
35758  		// @event dblclick: MouseEvent
35759  		// Fired when the user double-clicks (or double-taps) the map.
35760  		// @event mousedown: MouseEvent
35761  		// Fired when the user pushes the mouse button on the map.
35762  		// @event mouseup: MouseEvent
35763  		// Fired when the user releases the mouse button on the map.
35764  		// @event mouseover: MouseEvent
35765  		// Fired when the mouse enters the map.
35766  		// @event mouseout: MouseEvent
35767  		// Fired when the mouse leaves the map.
35768  		// @event mousemove: MouseEvent
35769  		// Fired while the mouse moves over the map.
35770  		// @event contextmenu: MouseEvent
35771  		// Fired when the user pushes the right mouse button on the map, prevents
35772  		// default browser context menu from showing if there are listeners on
35773  		// this event. Also fired on mobile when the user holds a single touch
35774  		// for a second (also called long press).
35775  		// @event keypress: KeyboardEvent
35776  		// Fired when the user presses a key from the keyboard that produces a character value while the map is focused.
35777  		// @event keydown: KeyboardEvent
35778  		// Fired when the user presses a key from the keyboard while the map is focused. Unlike the `keypress` event,
35779  		// the `keydown` event is fired for keys that produce a character value and for keys
35780  		// that do not produce a character value.
35781  		// @event keyup: KeyboardEvent
35782  		// Fired when the user releases a key from the keyboard while the map is focused.
35783  		onOff(this._container, 'click dblclick mousedown mouseup ' +
35784  			'mouseover mouseout mousemove contextmenu keypress keydown keyup', this._handleDOMEvent, this);
35785
35786  		if (this.options.trackResize) {
35787  			onOff(window, 'resize', this._onResize, this);
35788  		}
35789
35790  		if (Browser.any3d && this.options.transform3DLimit) {
35791  			(remove ? this.off : this.on).call(this, 'moveend', this._onMoveEnd);
35792  		}
35793  	},
35794
35795  	_onResize: function () {
35796  		cancelAnimFrame(this._resizeRequest);
35797  		this._resizeRequest = requestAnimFrame(
35798  		        function () { this.invalidateSize({debounceMoveend: true}); }, this);
35799  	},
35800
35801  	_onScroll: function () {
35802  		this._container.scrollTop  = 0;
35803  		this._container.scrollLeft = 0;
35804  	},
35805
35806  	_onMoveEnd: function () {
35807  		var pos = this._getMapPanePos();
35808  		if (Math.max(Math.abs(pos.x), Math.abs(pos.y)) >= this.options.transform3DLimit) {
35809  			// https://bugzilla.mozilla.org/show_bug.cgi?id=1203873 but Webkit also have
35810  			// a pixel offset on very high values, see: https://jsfiddle.net/dg6r5hhb/
35811  			this._resetView(this.getCenter(), this.getZoom());
35812  		}
35813  	},
35814
35815  	_findEventTargets: function (e, type) {
35816  		var targets = [],
35817  		    target,
35818  		    isHover = type === 'mouseout' || type === 'mouseover',
35819  		    src = e.target || e.srcElement,
35820  		    dragging = false;
35821
35822  		while (src) {
35823  			target = this._targets[stamp(src)];
35824  			if (target && (type === 'click' || type === 'preclick') && this._draggableMoved(target)) {
35825  				// Prevent firing click after you just dragged an object.
35826  				dragging = true;
35827  				break;
35828  			}
35829  			if (target && target.listens(type, true)) {
35830  				if (isHover && !isExternalTarget(src, e)) { break; }
35831  				targets.push(target);
35832  				if (isHover) { break; }
35833  			}
35834  			if (src === this._container) { break; }
35835  			src = src.parentNode;
35836  		}
35837  		if (!targets.length && !dragging && !isHover && this.listens(type, true)) {
35838  			targets = [this];
35839  		}
35840  		return targets;
35841  	},
35842
35843  	_isClickDisabled: function (el) {
35844  		while (el !== this._container) {
35845  			if (el['_leaflet_disable_click']) { return true; }
35846  			el = el.parentNode;
35847  		}
35848  	},
35849
35850  	_handleDOMEvent: function (e) {
35851  		var el = (e.target || e.srcElement);
35852  		if (!this._loaded || el['_leaflet_disable_events'] || e.type === 'click' && this._isClickDisabled(el)) {
35853  			return;
35854  		}
35855
35856  		var type = e.type;
35857
35858  		if (type === 'mousedown') {
35859  			// prevents outline when clicking on keyboard-focusable element
35860  			preventOutline(el);
35861  		}
35862
35863  		this._fireDOMEvent(e, type);
35864  	},
35865
35866  	_mouseEvents: ['click', 'dblclick', 'mouseover', 'mouseout', 'contextmenu'],
35867
35868  	_fireDOMEvent: function (e, type, canvasTargets) {
35869
35870  		if (e.type === 'click') {
35871  			// Fire a synthetic 'preclick' event which propagates up (mainly for closing popups).
35872  			// @event preclick: MouseEvent
35873  			// Fired before mouse click on the map (sometimes useful when you
35874  			// want something to happen on click before any existing click
35875  			// handlers start running).
35876  			var synth = extend({}, e);
35877  			synth.type = 'preclick';
35878  			this._fireDOMEvent(synth, synth.type, canvasTargets);
35879  		}
35880
35881  		// Find the layer the event is propagating from and its parents.
35882  		var targets = this._findEventTargets(e, type);
35883
35884  		if (canvasTargets) {
35885  			var filtered = []; // pick only targets with listeners
35886  			for (var i = 0; i < canvasTargets.length; i++) {
35887  				if (canvasTargets[i].listens(type, true)) {
35888  					filtered.push(canvasTargets[i]);
35889  				}
35890  			}
35891  			targets = filtered.concat(targets);
35892  		}
35893
35894  		if (!targets.length) { return; }
35895
35896  		if (type === 'contextmenu') {
35897  			preventDefault(e);
35898  		}
35899
35900  		var target = targets[0];
35901  		var data = {
35902  			originalEvent: e
35903  		};
35904
35905  		if (e.type !== 'keypress' && e.type !== 'keydown' && e.type !== 'keyup') {
35906  			var isMarker = target.getLatLng && (!target._radius || target._radius <= 10);
35907  			data.containerPoint = isMarker ?
35908  				this.latLngToContainerPoint(target.getLatLng()) : this.mouseEventToContainerPoint(e);
35909  			data.layerPoint = this.containerPointToLayerPoint(data.containerPoint);
35910  			data.latlng = isMarker ? target.getLatLng() : this.layerPointToLatLng(data.layerPoint);
35911  		}
35912
35913  		for (i = 0; i < targets.length; i++) {
35914  			targets[i].fire(type, data, true);
35915  			if (data.originalEvent._stopped ||
35916  				(targets[i].options.bubblingMouseEvents === false && indexOf(this._mouseEvents, type) !== -1)) { return; }
35917  		}
35918  	},
35919
35920  	_draggableMoved: function (obj) {
35921  		obj = obj.dragging && obj.dragging.enabled() ? obj : this;
35922  		return (obj.dragging && obj.dragging.moved()) || (this.boxZoom && this.boxZoom.moved());
35923  	},
35924
35925  	_clearHandlers: function () {
35926  		for (var i = 0, len = this._handlers.length; i < len; i++) {
35927  			this._handlers[i].disable();
35928  		}
35929  	},
35930
35931  	// @section Other Methods
35932
35933  	// @method whenReady(fn: Function, context?: Object): this
35934  	// Runs the given function `fn` when the map gets initialized with
35935  	// a view (center and zoom) and at least one layer, or immediately
35936  	// if it's already initialized, optionally passing a function context.
35937  	whenReady: function (callback, context) {
35938  		if (this._loaded) {
35939  			callback.call(context || this, {target: this});
35940  		} else {
35941  			this.on('load', callback, context);
35942  		}
35943  		return this;
35944  	},
35945
35946
35947  	// private methods for getting map state
35948
35949  	_getMapPanePos: function () {
35950  		return getPosition(this._mapPane) || new Point(0, 0);
35951  	},
35952
35953  	_moved: function () {
35954  		var pos = this._getMapPanePos();
35955  		return pos && !pos.equals([0, 0]);
35956  	},
35957
35958  	_getTopLeftPoint: function (center, zoom) {
35959  		var pixelOrigin = center && zoom !== undefined ?
35960  			this._getNewPixelOrigin(center, zoom) :
35961  			this.getPixelOrigin();
35962  		return pixelOrigin.subtract(this._getMapPanePos());
35963  	},
35964
35965  	_getNewPixelOrigin: function (center, zoom) {
35966  		var viewHalf = this.getSize()._divideBy(2);
35967  		return this.project(center, zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();
35968  	},
35969
35970  	_latLngToNewLayerPoint: function (latlng, zoom, center) {
35971  		var topLeft = this._getNewPixelOrigin(center, zoom);
35972  		return this.project(latlng, zoom)._subtract(topLeft);
35973  	},
35974
35975  	_latLngBoundsToNewLayerBounds: function (latLngBounds, zoom, center) {
35976  		var topLeft = this._getNewPixelOrigin(center, zoom);
35977  		return toBounds([
35978  			this.project(latLngBounds.getSouthWest(), zoom)._subtract(topLeft),
35979  			this.project(latLngBounds.getNorthWest(), zoom)._subtract(topLeft),
35980  			this.project(latLngBounds.getSouthEast(), zoom)._subtract(topLeft),
35981  			this.project(latLngBounds.getNorthEast(), zoom)._subtract(topLeft)
35982  		]);
35983  	},
35984
35985  	// layer point of the current center
35986  	_getCenterLayerPoint: function () {
35987  		return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
35988  	},
35989
35990  	// offset of the specified place to the current center in pixels
35991  	_getCenterOffset: function (latlng) {
35992  		return this.latLngToLayerPoint(latlng).subtract(this._getCenterLayerPoint());
35993  	},
35994
35995  	// adjust center for view to get inside bounds
35996  	_limitCenter: function (center, zoom, bounds) {
35997
35998  		if (!bounds) { return center; }
35999
36000  		var centerPoint = this.project(center, zoom),
36001  		    viewHalf = this.getSize().divideBy(2),
36002  		    viewBounds = new Bounds(centerPoint.subtract(viewHalf), centerPoint.add(viewHalf)),
36003  		    offset = this._getBoundsOffset(viewBounds, bounds, zoom);
36004
36005  		// If offset is less than a pixel, ignore.
36006  		// This prevents unstable projections from getting into
36007  		// an infinite loop of tiny offsets.
36008  		if (offset.round().equals([0, 0])) {
36009  			return center;
36010  		}
36011
36012  		return this.unproject(centerPoint.add(offset), zoom);
36013  	},
36014
36015  	// adjust offset for view to get inside bounds
36016  	_limitOffset: function (offset, bounds) {
36017  		if (!bounds) { return offset; }
36018
36019  		var viewBounds = this.getPixelBounds(),
36020  		    newBounds = new Bounds(viewBounds.min.add(offset), viewBounds.max.add(offset));
36021
36022  		return offset.add(this._getBoundsOffset(newBounds, bounds));
36023  	},
36024
36025  	// returns offset needed for pxBounds to get inside maxBounds at a specified zoom
36026  	_getBoundsOffset: function (pxBounds, maxBounds, zoom) {
36027  		var projectedMaxBounds = toBounds(
36028  		        this.project(maxBounds.getNorthEast(), zoom),
36029  		        this.project(maxBounds.getSouthWest(), zoom)
36030  		    ),
36031  		    minOffset = projectedMaxBounds.min.subtract(pxBounds.min),
36032  		    maxOffset = projectedMaxBounds.max.subtract(pxBounds.max),
36033
36034  		    dx = this._rebound(minOffset.x, -maxOffset.x),
36035  		    dy = this._rebound(minOffset.y, -maxOffset.y);
36036
36037  		return new Point(dx, dy);
36038  	},
36039
36040  	_rebound: function (left, right) {
36041  		return left + right > 0 ?
36042  			Math.round(left - right) / 2 :
36043  			Math.max(0, Math.ceil(left)) - Math.max(0, Math.floor(right));
36044  	},
36045
36046  	_limitZoom: function (zoom) {
36047  		var min = this.getMinZoom(),
36048  		    max = this.getMaxZoom(),
36049  		    snap = Browser.any3d ? this.options.zoomSnap : 1;
36050  		if (snap) {
36051  			zoom = Math.round(zoom / snap) * snap;
36052  		}
36053  		return Math.max(min, Math.min(max, zoom));
36054  	},
36055
36056  	_onPanTransitionStep: function () {
36057  		this.fire('move');
36058  	},
36059
36060  	_onPanTransitionEnd: function () {
36061  		removeClass(this._mapPane, 'leaflet-pan-anim');
36062  		this.fire('moveend');
36063  	},
36064
36065  	_tryAnimatedPan: function (center, options) {
36066  		// difference between the new and current centers in pixels
36067  		var offset = this._getCenterOffset(center)._trunc();
36068
36069  		// don't animate too far unless animate: true specified in options
36070  		if ((options && options.animate) !== true && !this.getSize().contains(offset)) { return false; }
36071
36072  		this.panBy(offset, options);
36073
36074  		return true;
36075  	},
36076
36077  	_createAnimProxy: function () {
36078
36079  		var proxy = this._proxy = create$1('div', 'leaflet-proxy leaflet-zoom-animated');
36080  		this._panes.mapPane.appendChild(proxy);
36081
36082  		this.on('zoomanim', function (e) {
36083  			var prop = TRANSFORM,
36084  			    transform = this._proxy.style[prop];
36085
36086  			setTransform(this._proxy, this.project(e.center, e.zoom), this.getZoomScale(e.zoom, 1));
36087
36088  			// workaround for case when transform is the same and so transitionend event is not fired
36089  			if (transform === this._proxy.style[prop] && this._animatingZoom) {
36090  				this._onZoomTransitionEnd();
36091  			}
36092  		}, this);
36093
36094  		this.on('load moveend', this._animMoveEnd, this);
36095
36096  		this._on('unload', this._destroyAnimProxy, this);
36097  	},
36098
36099  	_destroyAnimProxy: function () {
36100  		remove(this._proxy);
36101  		this.off('load moveend', this._animMoveEnd, this);
36102  		delete this._proxy;
36103  	},
36104
36105  	_animMoveEnd: function () {
36106  		var c = this.getCenter(),
36107  		    z = this.getZoom();
36108  		setTransform(this._proxy, this.project(c, z), this.getZoomScale(z, 1));
36109  	},
36110
36111  	_catchTransitionEnd: function (e) {
36112  		if (this._animatingZoom && e.propertyName.indexOf('transform') >= 0) {
36113  			this._onZoomTransitionEnd();
36114  		}
36115  	},
36116
36117  	_nothingToAnimate: function () {
36118  		return !this._container.getElementsByClassName('leaflet-zoom-animated').length;
36119  	},
36120
36121  	_tryAnimatedZoom: function (center, zoom, options) {
36122
36123  		if (this._animatingZoom) { return true; }
36124
36125  		options = options || {};
36126
36127  		// don't animate if disabled, not supported or zoom difference is too large
36128  		if (!this._zoomAnimated || options.animate === false || this._nothingToAnimate() ||
36129  		        Math.abs(zoom - this._zoom) > this.options.zoomAnimationThreshold) { return false; }
36130
36131  		// offset is the pixel coords of the zoom origin relative to the current center
36132  		var scale = this.getZoomScale(zoom),
36133  		    offset = this._getCenterOffset(center)._divideBy(1 - 1 / scale);
36134
36135  		// don't animate if the zoom origin isn't within one screen from the current center, unless forced
36136  		if (options.animate !== true && !this.getSize().contains(offset)) { return false; }
36137
36138  		requestAnimFrame(function () {
36139  			this
36140  			    ._moveStart(true, false)
36141  			    ._animateZoom(center, zoom, true);
36142  		}, this);
36143
36144  		return true;
36145  	},
36146
36147  	_animateZoom: function (center, zoom, startAnim, noUpdate) {
36148  		if (!this._mapPane) { return; }
36149
36150  		if (startAnim) {
36151  			this._animatingZoom = true;
36152
36153  			// remember what center/zoom to set after animation
36154  			this._animateToCenter = center;
36155  			this._animateToZoom = zoom;
36156
36157  			addClass(this._mapPane, 'leaflet-zoom-anim');
36158  		}
36159
36160  		// @section Other Events
36161  		// @event zoomanim: ZoomAnimEvent
36162  		// Fired at least once per zoom animation. For continuous zoom, like pinch zooming, fired once per frame during zoom.
36163  		this.fire('zoomanim', {
36164  			center: center,
36165  			zoom: zoom,
36166  			noUpdate: noUpdate
36167  		});
36168
36169  		if (!this._tempFireZoomEvent) {
36170  			this._tempFireZoomEvent = this._zoom !== this._animateToZoom;
36171  		}
36172
36173  		this._move(this._animateToCenter, this._animateToZoom, undefined, true);
36174
36175  		// Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693
36176  		setTimeout(bind(this._onZoomTransitionEnd, this), 250);
36177  	},
36178
36179  	_onZoomTransitionEnd: function () {
36180  		if (!this._animatingZoom) { return; }
36181
36182  		if (this._mapPane) {
36183  			removeClass(this._mapPane, 'leaflet-zoom-anim');
36184  		}
36185
36186  		this._animatingZoom = false;
36187
36188  		this._move(this._animateToCenter, this._animateToZoom, undefined, true);
36189
36190  		if (this._tempFireZoomEvent) {
36191  			this.fire('zoom');
36192  		}
36193  		delete this._tempFireZoomEvent;
36194
36195  		this.fire('move');
36196
36197  		this._moveEnd(true);
36198  	}
36199  });
36200
36201  // @section
36202
36203  // @factory L.map(id: String, options?: Map options)
36204  // Instantiates a map object given the DOM ID of a `<div>` element
36205  // and optionally an object literal with `Map options`.
36206  //
36207  // @alternative
36208  // @factory L.map(el: HTMLElement, options?: Map options)
36209  // Instantiates a map object given an instance of a `<div>` HTML element
36210  // and optionally an object literal with `Map options`.
36211  function createMap(id, options) {
36212  	return new Map(id, options);
36213  }
36214
36215  /*
36216   * @class Control
36217   * @aka L.Control
36218   * @inherits Class
36219   *
36220   * L.Control is a base class for implementing map controls. Handles positioning.
36221   * All other controls extend from this class.
36222   */
36223
36224  var Control = Class.extend({
36225  	// @section
36226  	// @aka Control Options
36227  	options: {
36228  		// @option position: String = 'topright'
36229  		// The position of the control (one of the map corners). Possible values are `'topleft'`,
36230  		// `'topright'`, `'bottomleft'` or `'bottomright'`
36231  		position: 'topright'
36232  	},
36233
36234  	initialize: function (options) {
36235  		setOptions(this, options);
36236  	},
36237
36238  	/* @section
36239  	 * Classes extending L.Control will inherit the following methods:
36240  	 *
36241  	 * @method getPosition: string
36242  	 * Returns the position of the control.
36243  	 */
36244  	getPosition: function () {
36245  		return this.options.position;
36246  	},
36247
36248  	// @method setPosition(position: string): this
36249  	// Sets the position of the control.
36250  	setPosition: function (position) {
36251  		var map = this._map;
36252
36253  		if (map) {
36254  			map.removeControl(this);
36255  		}
36256
36257  		this.options.position = position;
36258
36259  		if (map) {
36260  			map.addControl(this);
36261  		}
36262
36263  		return this;
36264  	},
36265
36266  	// @method getContainer: HTMLElement
36267  	// Returns the HTMLElement that contains the control.
36268  	getContainer: function () {
36269  		return this._container;
36270  	},
36271
36272  	// @method addTo(map: Map): this
36273  	// Adds the control to the given map.
36274  	addTo: function (map) {
36275  		this.remove();
36276  		this._map = map;
36277
36278  		var container = this._container = this.onAdd(map),
36279  		    pos = this.getPosition(),
36280  		    corner = map._controlCorners[pos];
36281
36282  		addClass(container, 'leaflet-control');
36283
36284  		if (pos.indexOf('bottom') !== -1) {
36285  			corner.insertBefore(container, corner.firstChild);
36286  		} else {
36287  			corner.appendChild(container);
36288  		}
36289
36290  		this._map.on('unload', this.remove, this);
36291
36292  		return this;
36293  	},
36294
36295  	// @method remove: this
36296  	// Removes the control from the map it is currently active on.
36297  	remove: function () {
36298  		if (!this._map) {
36299  			return this;
36300  		}
36301
36302  		remove(this._container);
36303
36304  		if (this.onRemove) {
36305  			this.onRemove(this._map);
36306  		}
36307
36308  		this._map.off('unload', this.remove, this);
36309  		this._map = null;
36310
36311  		return this;
36312  	},
36313
36314  	_refocusOnMap: function (e) {
36315  		// if map exists and event is not a keyboard event
36316  		if (this._map && e && e.screenX > 0 && e.screenY > 0) {
36317  			this._map.getContainer().focus();
36318  		}
36319  	}
36320  });
36321
36322  var control = function (options) {
36323  	return new Control(options);
36324  };
36325
36326  /* @section Extension methods
36327   * @uninheritable
36328   *
36329   * Every control should extend from `L.Control` and (re-)implement the following methods.
36330   *
36331   * @method onAdd(map: Map): HTMLElement
36332   * Should return the container DOM element for the control and add listeners on relevant map events. Called on [`control.addTo(map)`](#control-addTo).
36333   *
36334   * @method onRemove(map: Map)
36335   * Optional method. Should contain all clean up code that removes the listeners previously added in [`onAdd`](#control-onadd). Called on [`control.remove()`](#control-remove).
36336   */
36337
36338  /* @namespace Map
36339   * @section Methods for Layers and Controls
36340   */
36341  Map.include({
36342  	// @method addControl(control: Control): this
36343  	// Adds the given control to the map
36344  	addControl: function (control) {
36345  		control.addTo(this);
36346  		return this;
36347  	},
36348
36349  	// @method removeControl(control: Control): this
36350  	// Removes the given control from the map
36351  	removeControl: function (control) {
36352  		control.remove();
36353  		return this;
36354  	},
36355
36356  	_initControlPos: function () {
36357  		var corners = this._controlCorners = {},
36358  		    l = 'leaflet-',
36359  		    container = this._controlContainer =
36360  		            create$1('div', l + 'control-container', this._container);
36361
36362  		function createCorner(vSide, hSide) {
36363  			var className = l + vSide + ' ' + l + hSide;
36364
36365  			corners[vSide + hSide] = create$1('div', className, container);
36366  		}
36367
36368  		createCorner('top', 'left');
36369  		createCorner('top', 'right');
36370  		createCorner('bottom', 'left');
36371  		createCorner('bottom', 'right');
36372  	},
36373
36374  	_clearControlPos: function () {
36375  		for (var i in this._controlCorners) {
36376  			remove(this._controlCorners[i]);
36377  		}
36378  		remove(this._controlContainer);
36379  		delete this._controlCorners;
36380  		delete this._controlContainer;
36381  	}
36382  });
36383
36384  /*
36385   * @class Control.Layers
36386   * @aka L.Control.Layers
36387   * @inherits Control
36388   *
36389   * The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the [detailed example](https://leafletjs.com/examples/layers-control/)). Extends `Control`.
36390   *
36391   * @example
36392   *
36393   * ```js
36394   * var baseLayers = {
36395   * 	"Mapbox": mapbox,
36396   * 	"OpenStreetMap": osm
36397   * };
36398   *
36399   * var overlays = {
36400   * 	"Marker": marker,
36401   * 	"Roads": roadsLayer
36402   * };
36403   *
36404   * L.control.layers(baseLayers, overlays).addTo(map);
36405   * ```
36406   *
36407   * The `baseLayers` and `overlays` parameters are object literals with layer names as keys and `Layer` objects as values:
36408   *
36409   * ```js
36410   * {
36411   *     "<someName1>": layer1,
36412   *     "<someName2>": layer2
36413   * }
36414   * ```
36415   *
36416   * The layer names can contain HTML, which allows you to add additional styling to the items:
36417   *
36418   * ```js
36419   * {"<img src='my-layer-icon' /> <span class='my-layer-item'>My Layer</span>": myLayer}
36420   * ```
36421   */
36422
36423  var Layers = Control.extend({
36424  	// @section
36425  	// @aka Control.Layers options
36426  	options: {
36427  		// @option collapsed: Boolean = true
36428  		// If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.
36429  		collapsed: true,
36430  		position: 'topright',
36431
36432  		// @option autoZIndex: Boolean = true
36433  		// If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.
36434  		autoZIndex: true,
36435
36436  		// @option hideSingleBase: Boolean = false
36437  		// If `true`, the base layers in the control will be hidden when there is only one.
36438  		hideSingleBase: false,
36439
36440  		// @option sortLayers: Boolean = false
36441  		// Whether to sort the layers. When `false`, layers will keep the order
36442  		// in which they were added to the control.
36443  		sortLayers: false,
36444
36445  		// @option sortFunction: Function = *
36446  		// A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
36447  		// that will be used for sorting the layers, when `sortLayers` is `true`.
36448  		// The function receives both the `L.Layer` instances and their names, as in
36449  		// `sortFunction(layerA, layerB, nameA, nameB)`.
36450  		// By default, it sorts layers alphabetically by their name.
36451  		sortFunction: function (layerA, layerB, nameA, nameB) {
36452  			return nameA < nameB ? -1 : (nameB < nameA ? 1 : 0);
36453  		}
36454  	},
36455
36456  	initialize: function (baseLayers, overlays, options) {
36457  		setOptions(this, options);
36458
36459  		this._layerControlInputs = [];
36460  		this._layers = [];
36461  		this._lastZIndex = 0;
36462  		this._handlingClick = false;
36463
36464  		for (var i in baseLayers) {
36465  			this._addLayer(baseLayers[i], i);
36466  		}
36467
36468  		for (i in overlays) {
36469  			this._addLayer(overlays[i], i, true);
36470  		}
36471  	},
36472
36473  	onAdd: function (map) {
36474  		this._initLayout();
36475  		this._update();
36476
36477  		this._map = map;
36478  		map.on('zoomend', this._checkDisabledLayers, this);
36479
36480  		for (var i = 0; i < this._layers.length; i++) {
36481  			this._layers[i].layer.on('add remove', this._onLayerChange, this);
36482  		}
36483
36484  		return this._container;
36485  	},
36486
36487  	addTo: function (map) {
36488  		Control.prototype.addTo.call(this, map);
36489  		// Trigger expand after Layers Control has been inserted into DOM so that is now has an actual height.
36490  		return this._expandIfNotCollapsed();
36491  	},
36492
36493  	onRemove: function () {
36494  		this._map.off('zoomend', this._checkDisabledLayers, this);
36495
36496  		for (var i = 0; i < this._layers.length; i++) {
36497  			this._layers[i].layer.off('add remove', this._onLayerChange, this);
36498  		}
36499  	},
36500
36501  	// @method addBaseLayer(layer: Layer, name: String): this
36502  	// Adds a base layer (radio button entry) with the given name to the control.
36503  	addBaseLayer: function (layer, name) {
36504  		this._addLayer(layer, name);
36505  		return (this._map) ? this._update() : this;
36506  	},
36507
36508  	// @method addOverlay(layer: Layer, name: String): this
36509  	// Adds an overlay (checkbox entry) with the given name to the control.
36510  	addOverlay: function (layer, name) {
36511  		this._addLayer(layer, name, true);
36512  		return (this._map) ? this._update() : this;
36513  	},
36514
36515  	// @method removeLayer(layer: Layer): this
36516  	// Remove the given layer from the control.
36517  	removeLayer: function (layer) {
36518  		layer.off('add remove', this._onLayerChange, this);
36519
36520  		var obj = this._getLayer(stamp(layer));
36521  		if (obj) {
36522  			this._layers.splice(this._layers.indexOf(obj), 1);
36523  		}
36524  		return (this._map) ? this._update() : this;
36525  	},
36526
36527  	// @method expand(): this
36528  	// Expand the control container if collapsed.
36529  	expand: function () {
36530  		addClass(this._container, 'leaflet-control-layers-expanded');
36531  		this._section.style.height = null;
36532  		var acceptableHeight = this._map.getSize().y - (this._container.offsetTop + 50);
36533  		if (acceptableHeight < this._section.clientHeight) {
36534  			addClass(this._section, 'leaflet-control-layers-scrollbar');
36535  			this._section.style.height = acceptableHeight + 'px';
36536  		} else {
36537  			removeClass(this._section, 'leaflet-control-layers-scrollbar');
36538  		}
36539  		this._checkDisabledLayers();
36540  		return this;
36541  	},
36542
36543  	// @method collapse(): this
36544  	// Collapse the control container if expanded.
36545  	collapse: function () {
36546  		removeClass(this._container, 'leaflet-control-layers-expanded');
36547  		return this;
36548  	},
36549
36550  	_initLayout: function () {
36551  		var className = 'leaflet-control-layers',
36552  		    container = this._container = create$1('div', className),
36553  		    collapsed = this.options.collapsed;
36554
36555  		// makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released
36556  		container.setAttribute('aria-haspopup', true);
36557
36558  		disableClickPropagation(container);
36559  		disableScrollPropagation(container);
36560
36561  		var section = this._section = create$1('section', className + '-list');
36562
36563  		if (collapsed) {
36564  			this._map.on('click', this.collapse, this);
36565
36566  			on(container, {
36567  				mouseenter: function () {
36568  					on(section, 'click', preventDefault);
36569  					this.expand();
36570  					setTimeout(function () {
36571  						off(section, 'click', preventDefault);
36572  					});
36573  				},
36574  				mouseleave: this.collapse
36575  			}, this);
36576  		}
36577
36578  		var link = this._layersLink = create$1('a', className + '-toggle', container);
36579  		link.href = '#';
36580  		link.title = 'Layers';
36581  		link.setAttribute('role', 'button');
36582
36583  		on(link, 'click', preventDefault); // prevent link function
36584  		on(link, 'focus', this.expand, this);
36585
36586  		if (!collapsed) {
36587  			this.expand();
36588  		}
36589
36590  		this._baseLayersList = create$1('div', className + '-base', section);
36591  		this._separator = create$1('div', className + '-separator', section);
36592  		this._overlaysList = create$1('div', className + '-overlays', section);
36593
36594  		container.appendChild(section);
36595  	},
36596
36597  	_getLayer: function (id) {
36598  		for (var i = 0; i < this._layers.length; i++) {
36599
36600  			if (this._layers[i] && stamp(this._layers[i].layer) === id) {
36601  				return this._layers[i];
36602  			}
36603  		}
36604  	},
36605
36606  	_addLayer: function (layer, name, overlay) {
36607  		if (this._map) {
36608  			layer.on('add remove', this._onLayerChange, this);
36609  		}
36610
36611  		this._layers.push({
36612  			layer: layer,
36613  			name: name,
36614  			overlay: overlay
36615  		});
36616
36617  		if (this.options.sortLayers) {
36618  			this._layers.sort(bind(function (a, b) {
36619  				return this.options.sortFunction(a.layer, b.layer, a.name, b.name);
36620  			}, this));
36621  		}
36622
36623  		if (this.options.autoZIndex && layer.setZIndex) {
36624  			this._lastZIndex++;
36625  			layer.setZIndex(this._lastZIndex);
36626  		}
36627
36628  		this._expandIfNotCollapsed();
36629  	},
36630
36631  	_update: function () {
36632  		if (!this._container) { return this; }
36633
36634  		empty(this._baseLayersList);
36635  		empty(this._overlaysList);
36636
36637  		this._layerControlInputs = [];
36638  		var baseLayersPresent, overlaysPresent, i, obj, baseLayersCount = 0;
36639
36640  		for (i = 0; i < this._layers.length; i++) {
36641  			obj = this._layers[i];
36642  			this._addItem(obj);
36643  			overlaysPresent = overlaysPresent || obj.overlay;
36644  			baseLayersPresent = baseLayersPresent || !obj.overlay;
36645  			baseLayersCount += !obj.overlay ? 1 : 0;
36646  		}
36647
36648  		// Hide base layers section if there's only one layer.
36649  		if (this.options.hideSingleBase) {
36650  			baseLayersPresent = baseLayersPresent && baseLayersCount > 1;
36651  			this._baseLayersList.style.display = baseLayersPresent ? '' : 'none';
36652  		}
36653
36654  		this._separator.style.display = overlaysPresent && baseLayersPresent ? '' : 'none';
36655
36656  		return this;
36657  	},
36658
36659  	_onLayerChange: function (e) {
36660  		if (!this._handlingClick) {
36661  			this._update();
36662  		}
36663
36664  		var obj = this._getLayer(stamp(e.target));
36665
36666  		// @namespace Map
36667  		// @section Layer events
36668  		// @event baselayerchange: LayersControlEvent
36669  		// Fired when the base layer is changed through the [layers control](#control-layers).
36670  		// @event overlayadd: LayersControlEvent
36671  		// Fired when an overlay is selected through the [layers control](#control-layers).
36672  		// @event overlayremove: LayersControlEvent
36673  		// Fired when an overlay is deselected through the [layers control](#control-layers).
36674  		// @namespace Control.Layers
36675  		var type = obj.overlay ?
36676  			(e.type === 'add' ? 'overlayadd' : 'overlayremove') :
36677  			(e.type === 'add' ? 'baselayerchange' : null);
36678
36679  		if (type) {
36680  			this._map.fire(type, obj);
36681  		}
36682  	},
36683
36684  	// IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)
36685  	_createRadioElement: function (name, checked) {
36686
36687  		var radioHtml = '<input type="radio" class="leaflet-control-layers-selector" name="' +
36688  				name + '"' + (checked ? ' checked="checked"' : '') + '/>';
36689
36690  		var radioFragment = document.createElement('div');
36691  		radioFragment.innerHTML = radioHtml;
36692
36693  		return radioFragment.firstChild;
36694  	},
36695
36696  	_addItem: function (obj) {
36697  		var label = document.createElement('label'),
36698  		    checked = this._map.hasLayer(obj.layer),
36699  		    input;
36700
36701  		if (obj.overlay) {
36702  			input = document.createElement('input');
36703  			input.type = 'checkbox';
36704  			input.className = 'leaflet-control-layers-selector';
36705  			input.defaultChecked = checked;
36706  		} else {
36707  			input = this._createRadioElement('leaflet-base-layers_' + stamp(this), checked);
36708  		}
36709
36710  		this._layerControlInputs.push(input);
36711  		input.layerId = stamp(obj.layer);
36712
36713  		on(input, 'click', this._onInputClick, this);
36714
36715  		var name = document.createElement('span');
36716  		name.innerHTML = ' ' + obj.name;
36717
36718  		// Helps from preventing layer control flicker when checkboxes are disabled
36719  		// https://github.com/Leaflet/Leaflet/issues/2771
36720  		var holder = document.createElement('span');
36721
36722  		label.appendChild(holder);
36723  		holder.appendChild(input);
36724  		holder.appendChild(name);
36725
36726  		var container = obj.overlay ? this._overlaysList : this._baseLayersList;
36727  		container.appendChild(label);
36728
36729  		this._checkDisabledLayers();
36730  		return label;
36731  	},
36732
36733  	_onInputClick: function () {
36734  		var inputs = this._layerControlInputs,
36735  		    input, layer;
36736  		var addedLayers = [],
36737  		    removedLayers = [];
36738
36739  		this._handlingClick = true;
36740
36741  		for (var i = inputs.length - 1; i >= 0; i--) {
36742  			input = inputs[i];
36743  			layer = this._getLayer(input.layerId).layer;
36744
36745  			if (input.checked) {
36746  				addedLayers.push(layer);
36747  			} else if (!input.checked) {
36748  				removedLayers.push(layer);
36749  			}
36750  		}
36751
36752  		// Bugfix issue 2318: Should remove all old layers before readding new ones
36753  		for (i = 0; i < removedLayers.length; i++) {
36754  			if (this._map.hasLayer(removedLayers[i])) {
36755  				this._map.removeLayer(removedLayers[i]);
36756  			}
36757  		}
36758  		for (i = 0; i < addedLayers.length; i++) {
36759  			if (!this._map.hasLayer(addedLayers[i])) {
36760  				this._map.addLayer(addedLayers[i]);
36761  			}
36762  		}
36763
36764  		this._handlingClick = false;
36765
36766  		this._refocusOnMap();
36767  	},
36768
36769  	_checkDisabledLayers: function () {
36770  		var inputs = this._layerControlInputs,
36771  		    input,
36772  		    layer,
36773  		    zoom = this._map.getZoom();
36774
36775  		for (var i = inputs.length - 1; i >= 0; i--) {
36776  			input = inputs[i];
36777  			layer = this._getLayer(input.layerId).layer;
36778  			input.disabled = (layer.options.minZoom !== undefined && zoom < layer.options.minZoom) ||
36779  			                 (layer.options.maxZoom !== undefined && zoom > layer.options.maxZoom);
36780
36781  		}
36782  	},
36783
36784  	_expandIfNotCollapsed: function () {
36785  		if (this._map && !this.options.collapsed) {
36786  			this.expand();
36787  		}
36788  		return this;
36789  	}
36790
36791  });
36792
36793
36794  // @factory L.control.layers(baselayers?: Object, overlays?: Object, options?: Control.Layers options)
36795  // Creates a layers control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes. Note that all base layers should be passed in the base layers object, but only one should be added to the map during map instantiation.
36796  var layers = function (baseLayers, overlays, options) {
36797  	return new Layers(baseLayers, overlays, options);
36798  };
36799
36800  /*
36801   * @class Control.Zoom
36802   * @aka L.Control.Zoom
36803   * @inherits Control
36804   *
36805   * A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its [`zoomControl` option](#map-zoomcontrol) to `false`. Extends `Control`.
36806   */
36807
36808  var Zoom = Control.extend({
36809  	// @section
36810  	// @aka Control.Zoom options
36811  	options: {
36812  		position: 'topleft',
36813
36814  		// @option zoomInText: String = '<span aria-hidden="true">+</span>'
36815  		// The text set on the 'zoom in' button.
36816  		zoomInText: '<span aria-hidden="true">+</span>',
36817
36818  		// @option zoomInTitle: String = 'Zoom in'
36819  		// The title set on the 'zoom in' button.
36820  		zoomInTitle: 'Zoom in',
36821
36822  		// @option zoomOutText: String = '<span aria-hidden="true">&#x2212;</span>'
36823  		// The text set on the 'zoom out' button.
36824  		zoomOutText: '<span aria-hidden="true">&#x2212;</span>',
36825
36826  		// @option zoomOutTitle: String = 'Zoom out'
36827  		// The title set on the 'zoom out' button.
36828  		zoomOutTitle: 'Zoom out'
36829  	},
36830
36831  	onAdd: function (map) {
36832  		var zoomName = 'leaflet-control-zoom',
36833  		    container = create$1('div', zoomName + ' leaflet-bar'),
36834  		    options = this.options;
36835
36836  		this._zoomInButton  = this._createButton(options.zoomInText, options.zoomInTitle,
36837  		        zoomName + '-in',  container, this._zoomIn);
36838  		this._zoomOutButton = this._createButton(options.zoomOutText, options.zoomOutTitle,
36839  		        zoomName + '-out', container, this._zoomOut);
36840
36841  		this._updateDisabled();
36842  		map.on('zoomend zoomlevelschange', this._updateDisabled, this);
36843
36844  		return container;
36845  	},
36846
36847  	onRemove: function (map) {
36848  		map.off('zoomend zoomlevelschange', this._updateDisabled, this);
36849  	},
36850
36851  	disable: function () {
36852  		this._disabled = true;
36853  		this._updateDisabled();
36854  		return this;
36855  	},
36856
36857  	enable: function () {
36858  		this._disabled = false;
36859  		this._updateDisabled();
36860  		return this;
36861  	},
36862
36863  	_zoomIn: function (e) {
36864  		if (!this._disabled && this._map._zoom < this._map.getMaxZoom()) {
36865  			this._map.zoomIn(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));
36866  		}
36867  	},
36868
36869  	_zoomOut: function (e) {
36870  		if (!this._disabled && this._map._zoom > this._map.getMinZoom()) {
36871  			this._map.zoomOut(this._map.options.zoomDelta * (e.shiftKey ? 3 : 1));
36872  		}
36873  	},
36874
36875  	_createButton: function (html, title, className, container, fn) {
36876  		var link = create$1('a', className, container);
36877  		link.innerHTML = html;
36878  		link.href = '#';
36879  		link.title = title;
36880
36881  		/*
36882  		 * Will force screen readers like VoiceOver to read this as "Zoom in - button"
36883  		 */
36884  		link.setAttribute('role', 'button');
36885  		link.setAttribute('aria-label', title);
36886
36887  		disableClickPropagation(link);
36888  		on(link, 'click', stop);
36889  		on(link, 'click', fn, this);
36890  		on(link, 'click', this._refocusOnMap, this);
36891
36892  		return link;
36893  	},
36894
36895  	_updateDisabled: function () {
36896  		var map = this._map,
36897  		    className = 'leaflet-disabled';
36898
36899  		removeClass(this._zoomInButton, className);
36900  		removeClass(this._zoomOutButton, className);
36901  		this._zoomInButton.setAttribute('aria-disabled', 'false');
36902  		this._zoomOutButton.setAttribute('aria-disabled', 'false');
36903
36904  		if (this._disabled || map._zoom === map.getMinZoom()) {
36905  			addClass(this._zoomOutButton, className);
36906  			this._zoomOutButton.setAttribute('aria-disabled', 'true');
36907  		}
36908  		if (this._disabled || map._zoom === map.getMaxZoom()) {
36909  			addClass(this._zoomInButton, className);
36910  			this._zoomInButton.setAttribute('aria-disabled', 'true');
36911  		}
36912  	}
36913  });
36914
36915  // @namespace Map
36916  // @section Control options
36917  // @option zoomControl: Boolean = true
36918  // Whether a [zoom control](#control-zoom) is added to the map by default.
36919  Map.mergeOptions({
36920  	zoomControl: true
36921  });
36922
36923  Map.addInitHook(function () {
36924  	if (this.options.zoomControl) {
36925  		// @section Controls
36926  		// @property zoomControl: Control.Zoom
36927  		// The default zoom control (only available if the
36928  		// [`zoomControl` option](#map-zoomcontrol) was `true` when creating the map).
36929  		this.zoomControl = new Zoom();
36930  		this.addControl(this.zoomControl);
36931  	}
36932  });
36933
36934  // @namespace Control.Zoom
36935  // @factory L.control.zoom(options: Control.Zoom options)
36936  // Creates a zoom control
36937  var zoom = function (options) {
36938  	return new Zoom(options);
36939  };
36940
36941  /*
36942   * @class Control.Scale
36943   * @aka L.Control.Scale
36944   * @inherits Control
36945   *
36946   * A simple scale control that shows the scale of the current center of screen in metric (m/km) and imperial (mi/ft) systems. Extends `Control`.
36947   *
36948   * @example
36949   *
36950   * ```js
36951   * L.control.scale().addTo(map);
36952   * ```
36953   */
36954
36955  var Scale = Control.extend({
36956  	// @section
36957  	// @aka Control.Scale options
36958  	options: {
36959  		position: 'bottomleft',
36960
36961  		// @option maxWidth: Number = 100
36962  		// Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).
36963  		maxWidth: 100,
36964
36965  		// @option metric: Boolean = True
36966  		// Whether to show the metric scale line (m/km).
36967  		metric: true,
36968
36969  		// @option imperial: Boolean = True
36970  		// Whether to show the imperial scale line (mi/ft).
36971  		imperial: true
36972
36973  		// @option updateWhenIdle: Boolean = false
36974  		// If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).
36975  	},
36976
36977  	onAdd: function (map) {
36978  		var className = 'leaflet-control-scale',
36979  		    container = create$1('div', className),
36980  		    options = this.options;
36981
36982  		this._addScales(options, className + '-line', container);
36983
36984  		map.on(options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
36985  		map.whenReady(this._update, this);
36986
36987  		return container;
36988  	},
36989
36990  	onRemove: function (map) {
36991  		map.off(this.options.updateWhenIdle ? 'moveend' : 'move', this._update, this);
36992  	},
36993
36994  	_addScales: function (options, className, container) {
36995  		if (options.metric) {
36996  			this._mScale = create$1('div', className, container);
36997  		}
36998  		if (options.imperial) {
36999  			this._iScale = create$1('div', className, container);
37000  		}
37001  	},
37002
37003  	_update: function () {
37004  		var map = this._map,
37005  		    y = map.getSize().y / 2;
37006
37007  		var maxMeters = map.distance(
37008  			map.containerPointToLatLng([0, y]),
37009  			map.containerPointToLatLng([this.options.maxWidth, y]));
37010
37011  		this._updateScales(maxMeters);
37012  	},
37013
37014  	_updateScales: function (maxMeters) {
37015  		if (this.options.metric && maxMeters) {
37016  			this._updateMetric(maxMeters);
37017  		}
37018  		if (this.options.imperial && maxMeters) {
37019  			this._updateImperial(maxMeters);
37020  		}
37021  	},
37022
37023  	_updateMetric: function (maxMeters) {
37024  		var meters = this._getRoundNum(maxMeters),
37025  		    label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';
37026
37027  		this._updateScale(this._mScale, label, meters / maxMeters);
37028  	},
37029
37030  	_updateImperial: function (maxMeters) {
37031  		var maxFeet = maxMeters * 3.2808399,
37032  		    maxMiles, miles, feet;
37033
37034  		if (maxFeet > 5280) {
37035  			maxMiles = maxFeet / 5280;
37036  			miles = this._getRoundNum(maxMiles);
37037  			this._updateScale(this._iScale, miles + ' mi', miles / maxMiles);
37038
37039  		} else {
37040  			feet = this._getRoundNum(maxFeet);
37041  			this._updateScale(this._iScale, feet + ' ft', feet / maxFeet);
37042  		}
37043  	},
37044
37045  	_updateScale: function (scale, text, ratio) {
37046  		scale.style.width = Math.round(this.options.maxWidth * ratio) + 'px';
37047  		scale.innerHTML = text;
37048  	},
37049
37050  	_getRoundNum: function (num) {
37051  		var pow10 = Math.pow(10, (Math.floor(num) + '').length - 1),
37052  		    d = num / pow10;
37053
37054  		d = d >= 10 ? 10 :
37055  		    d >= 5 ? 5 :
37056  		    d >= 3 ? 3 :
37057  		    d >= 2 ? 2 : 1;
37058
37059  		return pow10 * d;
37060  	}
37061  });
37062
37063
37064  // @factory L.control.scale(options?: Control.Scale options)
37065  // Creates an scale control with the given options.
37066  var scale = function (options) {
37067  	return new Scale(options);
37068  };
37069
37070  var ukrainianFlag = '<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg>';
37071
37072
37073  /*
37074   * @class Control.Attribution
37075   * @aka L.Control.Attribution
37076   * @inherits Control
37077   *
37078   * The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its [`attributionControl` option](#map-attributioncontrol) to `false`, and it fetches attribution texts from layers with the [`getAttribution` method](#layer-getattribution) automatically. Extends Control.
37079   */
37080
37081  var Attribution = Control.extend({
37082  	// @section
37083  	// @aka Control.Attribution options
37084  	options: {
37085  		position: 'bottomright',
37086
37087  		// @option prefix: String|false = 'Leaflet'
37088  		// The HTML text shown before the attributions. Pass `false` to disable.
37089  		prefix: '<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">' + (Browser.inlineSvg ? ukrainianFlag + ' ' : '') + 'Leaflet</a>'
37090  	},
37091
37092  	initialize: function (options) {
37093  		setOptions(this, options);
37094
37095  		this._attributions = {};
37096  	},
37097
37098  	onAdd: function (map) {
37099  		map.attributionControl = this;
37100  		this._container = create$1('div', 'leaflet-control-attribution');
37101  		disableClickPropagation(this._container);
37102
37103  		// TODO ugly, refactor
37104  		for (var i in map._layers) {
37105  			if (map._layers[i].getAttribution) {
37106  				this.addAttribution(map._layers[i].getAttribution());
37107  			}
37108  		}
37109
37110  		this._update();
37111
37112  		map.on('layeradd', this._addAttribution, this);
37113
37114  		return this._container;
37115  	},
37116
37117  	onRemove: function (map) {
37118  		map.off('layeradd', this._addAttribution, this);
37119  	},
37120
37121  	_addAttribution: function (ev) {
37122  		if (ev.layer.getAttribution) {
37123  			this.addAttribution(ev.layer.getAttribution());
37124  			ev.layer.once('remove', function () {
37125  				this.removeAttribution(ev.layer.getAttribution());
37126  			}, this);
37127  		}
37128  	},
37129
37130  	// @method setPrefix(prefix: String|false): this
37131  	// The HTML text shown before the attributions. Pass `false` to disable.
37132  	setPrefix: function (prefix) {
37133  		this.options.prefix = prefix;
37134  		this._update();
37135  		return this;
37136  	},
37137
37138  	// @method addAttribution(text: String): this
37139  	// Adds an attribution text (e.g. `'Vector data &copy; Mapbox'`).
37140  	addAttribution: function (text) {
37141  		if (!text) { return this; }
37142
37143  		if (!this._attributions[text]) {
37144  			this._attributions[text] = 0;
37145  		}
37146  		this._attributions[text]++;
37147
37148  		this._update();
37149
37150  		return this;
37151  	},
37152
37153  	// @method removeAttribution(text: String): this
37154  	// Removes an attribution text.
37155  	removeAttribution: function (text) {
37156  		if (!text) { return this; }
37157
37158  		if (this._attributions[text]) {
37159  			this._attributions[text]--;
37160  			this._update();
37161  		}
37162
37163  		return this;
37164  	},
37165
37166  	_update: function () {
37167  		if (!this._map) { return; }
37168
37169  		var attribs = [];
37170
37171  		for (var i in this._attributions) {
37172  			if (this._attributions[i]) {
37173  				attribs.push(i);
37174  			}
37175  		}
37176
37177  		var prefixAndAttribs = [];
37178
37179  		if (this.options.prefix) {
37180  			prefixAndAttribs.push(this.options.prefix);
37181  		}
37182  		if (attribs.length) {
37183  			prefixAndAttribs.push(attribs.join(', '));
37184  		}
37185
37186  		this._container.innerHTML = prefixAndAttribs.join(' <span aria-hidden="true">|</span> ');
37187  	}
37188  });
37189
37190  // @namespace Map
37191  // @section Control options
37192  // @option attributionControl: Boolean = true
37193  // Whether a [attribution control](#control-attribution) is added to the map by default.
37194  Map.mergeOptions({
37195  	attributionControl: true
37196  });
37197
37198  Map.addInitHook(function () {
37199  	if (this.options.attributionControl) {
37200  		new Attribution().addTo(this);
37201  	}
37202  });
37203
37204  // @namespace Control.Attribution
37205  // @factory L.control.attribution(options: Control.Attribution options)
37206  // Creates an attribution control.
37207  var attribution = function (options) {
37208  	return new Attribution(options);
37209  };
37210
37211  Control.Layers = Layers;
37212  Control.Zoom = Zoom;
37213  Control.Scale = Scale;
37214  Control.Attribution = Attribution;
37215
37216  control.layers = layers;
37217  control.zoom = zoom;
37218  control.scale = scale;
37219  control.attribution = attribution;
37220
37221  /*
37222  	L.Handler is a base class for handler classes that are used internally to inject
37223  	interaction features like dragging to classes like Map and Marker.
37224  */
37225
37226  // @class Handler
37227  // @aka L.Handler
37228  // Abstract class for map interaction handlers
37229
37230  var Handler = Class.extend({
37231  	initialize: function (map) {
37232  		this._map = map;
37233  	},
37234
37235  	// @method enable(): this
37236  	// Enables the handler
37237  	enable: function () {
37238  		if (this._enabled) { return this; }
37239
37240  		this._enabled = true;
37241  		this.addHooks();
37242  		return this;
37243  	},
37244
37245  	// @method disable(): this
37246  	// Disables the handler
37247  	disable: function () {
37248  		if (!this._enabled) { return this; }
37249
37250  		this._enabled = false;
37251  		this.removeHooks();
37252  		return this;
37253  	},
37254
37255  	// @method enabled(): Boolean
37256  	// Returns `true` if the handler is enabled
37257  	enabled: function () {
37258  		return !!this._enabled;
37259  	}
37260
37261  	// @section Extension methods
37262  	// Classes inheriting from `Handler` must implement the two following methods:
37263  	// @method addHooks()
37264  	// Called when the handler is enabled, should add event hooks.
37265  	// @method removeHooks()
37266  	// Called when the handler is disabled, should remove the event hooks added previously.
37267  });
37268
37269  // @section There is static function which can be called without instantiating L.Handler:
37270  // @function addTo(map: Map, name: String): this
37271  // Adds a new Handler to the given map with the given name.
37272  Handler.addTo = function (map, name) {
37273  	map.addHandler(name, this);
37274  	return this;
37275  };
37276
37277  var Mixin = {Events: Events};
37278
37279  /*
37280   * @class Draggable
37281   * @aka L.Draggable
37282   * @inherits Evented
37283   *
37284   * A class for making DOM elements draggable (including touch support).
37285   * Used internally for map and marker dragging. Only works for elements
37286   * that were positioned with [`L.DomUtil.setPosition`](#domutil-setposition).
37287   *
37288   * @example
37289   * ```js
37290   * var draggable = new L.Draggable(elementToDrag);
37291   * draggable.enable();
37292   * ```
37293   */
37294
37295  var START = Browser.touch ? 'touchstart mousedown' : 'mousedown';
37296
37297  var Draggable = Evented.extend({
37298
37299  	options: {
37300  		// @section
37301  		// @aka Draggable options
37302  		// @option clickTolerance: Number = 3
37303  		// The max number of pixels a user can shift the mouse pointer during a click
37304  		// for it to be considered a valid click (as opposed to a mouse drag).
37305  		clickTolerance: 3
37306  	},
37307
37308  	// @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)
37309  	// Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).
37310  	initialize: function (element, dragStartTarget, preventOutline, options) {
37311  		setOptions(this, options);
37312
37313  		this._element = element;
37314  		this._dragStartTarget = dragStartTarget || element;
37315  		this._preventOutline = preventOutline;
37316  	},
37317
37318  	// @method enable()
37319  	// Enables the dragging ability
37320  	enable: function () {
37321  		if (this._enabled) { return; }
37322
37323  		on(this._dragStartTarget, START, this._onDown, this);
37324
37325  		this._enabled = true;
37326  	},
37327
37328  	// @method disable()
37329  	// Disables the dragging ability
37330  	disable: function () {
37331  		if (!this._enabled) { return; }
37332
37333  		// If we're currently dragging this draggable,
37334  		// disabling it counts as first ending the drag.
37335  		if (Draggable._dragging === this) {
37336  			this.finishDrag(true);
37337  		}
37338
37339  		off(this._dragStartTarget, START, this._onDown, this);
37340
37341  		this._enabled = false;
37342  		this._moved = false;
37343  	},
37344
37345  	_onDown: function (e) {
37346  		// Ignore the event if disabled; this happens in IE11
37347  		// under some circumstances, see #3666.
37348  		if (!this._enabled) { return; }
37349
37350  		this._moved = false;
37351
37352  		if (hasClass(this._element, 'leaflet-zoom-anim')) { return; }
37353
37354  		if (e.touches && e.touches.length !== 1) {
37355  			// Finish dragging to avoid conflict with touchZoom
37356  			if (Draggable._dragging === this) {
37357  				this.finishDrag();
37358  			}
37359  			return;
37360  		}
37361
37362  		if (Draggable._dragging || e.shiftKey || ((e.which !== 1) && (e.button !== 1) && !e.touches)) { return; }
37363  		Draggable._dragging = this;  // Prevent dragging multiple objects at once.
37364
37365  		if (this._preventOutline) {
37366  			preventOutline(this._element);
37367  		}
37368
37369  		disableImageDrag();
37370  		disableTextSelection();
37371
37372  		if (this._moving) { return; }
37373
37374  		// @event down: Event
37375  		// Fired when a drag is about to start.
37376  		this.fire('down');
37377
37378  		var first = e.touches ? e.touches[0] : e,
37379  		    sizedParent = getSizedParentNode(this._element);
37380
37381  		this._startPoint = new Point(first.clientX, first.clientY);
37382  		this._startPos = getPosition(this._element);
37383
37384  		// Cache the scale, so that we can continuously compensate for it during drag (_onMove).
37385  		this._parentScale = getScale(sizedParent);
37386
37387  		var mouseevent = e.type === 'mousedown';
37388  		on(document, mouseevent ? 'mousemove' : 'touchmove', this._onMove, this);
37389  		on(document, mouseevent ? 'mouseup' : 'touchend touchcancel', this._onUp, this);
37390  	},
37391
37392  	_onMove: function (e) {
37393  		// Ignore the event if disabled; this happens in IE11
37394  		// under some circumstances, see #3666.
37395  		if (!this._enabled) { return; }
37396
37397  		if (e.touches && e.touches.length > 1) {
37398  			this._moved = true;
37399  			return;
37400  		}
37401
37402  		var first = (e.touches && e.touches.length === 1 ? e.touches[0] : e),
37403  		    offset = new Point(first.clientX, first.clientY)._subtract(this._startPoint);
37404
37405  		if (!offset.x && !offset.y) { return; }
37406  		if (Math.abs(offset.x) + Math.abs(offset.y) < this.options.clickTolerance) { return; }
37407
37408  		// We assume that the parent container's position, border and scale do not change for the duration of the drag.
37409  		// Therefore there is no need to account for the position and border (they are eliminated by the subtraction)
37410  		// and we can use the cached value for the scale.
37411  		offset.x /= this._parentScale.x;
37412  		offset.y /= this._parentScale.y;
37413
37414  		preventDefault(e);
37415
37416  		if (!this._moved) {
37417  			// @event dragstart: Event
37418  			// Fired when a drag starts
37419  			this.fire('dragstart');
37420
37421  			this._moved = true;
37422
37423  			addClass(document.body, 'leaflet-dragging');
37424
37425  			this._lastTarget = e.target || e.srcElement;
37426  			// IE and Edge do not give the <use> element, so fetch it
37427  			// if necessary
37428  			if (window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance) {
37429  				this._lastTarget = this._lastTarget.correspondingUseElement;
37430  			}
37431  			addClass(this._lastTarget, 'leaflet-drag-target');
37432  		}
37433
37434  		this._newPos = this._startPos.add(offset);
37435  		this._moving = true;
37436
37437  		this._lastEvent = e;
37438  		this._updatePosition();
37439  	},
37440
37441  	_updatePosition: function () {
37442  		var e = {originalEvent: this._lastEvent};
37443
37444  		// @event predrag: Event
37445  		// Fired continuously during dragging *before* each corresponding
37446  		// update of the element's position.
37447  		this.fire('predrag', e);
37448  		setPosition(this._element, this._newPos);
37449
37450  		// @event drag: Event
37451  		// Fired continuously during dragging.
37452  		this.fire('drag', e);
37453  	},
37454
37455  	_onUp: function () {
37456  		// Ignore the event if disabled; this happens in IE11
37457  		// under some circumstances, see #3666.
37458  		if (!this._enabled) { return; }
37459  		this.finishDrag();
37460  	},
37461
37462  	finishDrag: function (noInertia) {
37463  		removeClass(document.body, 'leaflet-dragging');
37464
37465  		if (this._lastTarget) {
37466  			removeClass(this._lastTarget, 'leaflet-drag-target');
37467  			this._lastTarget = null;
37468  		}
37469
37470  		off(document, 'mousemove touchmove', this._onMove, this);
37471  		off(document, 'mouseup touchend touchcancel', this._onUp, this);
37472
37473  		enableImageDrag();
37474  		enableTextSelection();
37475
37476  		if (this._moved && this._moving) {
37477
37478  			// @event dragend: DragEndEvent
37479  			// Fired when the drag ends.
37480  			this.fire('dragend', {
37481  				noInertia: noInertia,
37482  				distance: this._newPos.distanceTo(this._startPos)
37483  			});
37484  		}
37485
37486  		this._moving = false;
37487  		Draggable._dragging = false;
37488  	}
37489
37490  });
37491
37492  /*
37493   * @namespace LineUtil
37494   *
37495   * Various utility functions for polyline points processing, used by Leaflet internally to make polylines lightning-fast.
37496   */
37497
37498  // Simplify polyline with vertex reduction and Douglas-Peucker simplification.
37499  // Improves rendering performance dramatically by lessening the number of points to draw.
37500
37501  // @function simplify(points: Point[], tolerance: Number): Point[]
37502  // Dramatically reduces the number of points in a polyline while retaining
37503  // its shape and returns a new array of simplified points, using the
37504  // [Ramer-Douglas-Peucker algorithm](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm).
37505  // Used for a huge performance boost when processing/displaying Leaflet polylines for
37506  // each zoom level and also reducing visual noise. tolerance affects the amount of
37507  // simplification (lesser value means higher quality but slower and with more points).
37508  // Also released as a separated micro-library [Simplify.js](https://mourner.github.io/simplify-js/).
37509  function simplify(points, tolerance) {
37510  	if (!tolerance || !points.length) {
37511  		return points.slice();
37512  	}
37513
37514  	var sqTolerance = tolerance * tolerance;
37515
37516  	    // stage 1: vertex reduction
37517  	    points = _reducePoints(points, sqTolerance);
37518
37519  	    // stage 2: Douglas-Peucker simplification
37520  	    points = _simplifyDP(points, sqTolerance);
37521
37522  	return points;
37523  }
37524
37525  // @function pointToSegmentDistance(p: Point, p1: Point, p2: Point): Number
37526  // Returns the distance between point `p` and segment `p1` to `p2`.
37527  function pointToSegmentDistance(p, p1, p2) {
37528  	return Math.sqrt(_sqClosestPointOnSegment(p, p1, p2, true));
37529  }
37530
37531  // @function closestPointOnSegment(p: Point, p1: Point, p2: Point): Number
37532  // Returns the closest point from a point `p` on a segment `p1` to `p2`.
37533  function closestPointOnSegment(p, p1, p2) {
37534  	return _sqClosestPointOnSegment(p, p1, p2);
37535  }
37536
37537  // Ramer-Douglas-Peucker simplification, see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
37538  function _simplifyDP(points, sqTolerance) {
37539
37540  	var len = points.length,
37541  	    ArrayConstructor = typeof Uint8Array !== undefined + '' ? Uint8Array : Array,
37542  	    markers = new ArrayConstructor(len);
37543
37544  	    markers[0] = markers[len - 1] = 1;
37545
37546  	_simplifyDPStep(points, markers, sqTolerance, 0, len - 1);
37547
37548  	var i,
37549  	    newPoints = [];
37550
37551  	for (i = 0; i < len; i++) {
37552  		if (markers[i]) {
37553  			newPoints.push(points[i]);
37554  		}
37555  	}
37556
37557  	return newPoints;
37558  }
37559
37560  function _simplifyDPStep(points, markers, sqTolerance, first, last) {
37561
37562  	var maxSqDist = 0,
37563  	index, i, sqDist;
37564
37565  	for (i = first + 1; i <= last - 1; i++) {
37566  		sqDist = _sqClosestPointOnSegment(points[i], points[first], points[last], true);
37567
37568  		if (sqDist > maxSqDist) {
37569  			index = i;
37570  			maxSqDist = sqDist;
37571  		}
37572  	}
37573
37574  	if (maxSqDist > sqTolerance) {
37575  		markers[index] = 1;
37576
37577  		_simplifyDPStep(points, markers, sqTolerance, first, index);
37578  		_simplifyDPStep(points, markers, sqTolerance, index, last);
37579  	}
37580  }
37581
37582  // reduce points that are too close to each other to a single point
37583  function _reducePoints(points, sqTolerance) {
37584  	var reducedPoints = [points[0]];
37585
37586  	for (var i = 1, prev = 0, len = points.length; i < len; i++) {
37587  		if (_sqDist(points[i], points[prev]) > sqTolerance) {
37588  			reducedPoints.push(points[i]);
37589  			prev = i;
37590  		}
37591  	}
37592  	if (prev < len - 1) {
37593  		reducedPoints.push(points[len - 1]);
37594  	}
37595  	return reducedPoints;
37596  }
37597
37598  var _lastCode;
37599
37600  // @function clipSegment(a: Point, b: Point, bounds: Bounds, useLastCode?: Boolean, round?: Boolean): Point[]|Boolean
37601  // Clips the segment a to b by rectangular bounds with the
37602  // [Cohen-Sutherland algorithm](https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm)
37603  // (modifying the segment points directly!). Used by Leaflet to only show polyline
37604  // points that are on the screen or near, increasing performance.
37605  function clipSegment(a, b, bounds, useLastCode, round) {
37606  	var codeA = useLastCode ? _lastCode : _getBitCode(a, bounds),
37607  	    codeB = _getBitCode(b, bounds),
37608
37609  	    codeOut, p, newCode;
37610
37611  	    // save 2nd code to avoid calculating it on the next segment
37612  	    _lastCode = codeB;
37613
37614  	while (true) {
37615  		// if a,b is inside the clip window (trivial accept)
37616  		if (!(codeA | codeB)) {
37617  			return [a, b];
37618  		}
37619
37620  		// if a,b is outside the clip window (trivial reject)
37621  		if (codeA & codeB) {
37622  			return false;
37623  		}
37624
37625  		// other cases
37626  		codeOut = codeA || codeB;
37627  		p = _getEdgeIntersection(a, b, codeOut, bounds, round);
37628  		newCode = _getBitCode(p, bounds);
37629
37630  		if (codeOut === codeA) {
37631  			a = p;
37632  			codeA = newCode;
37633  		} else {
37634  			b = p;
37635  			codeB = newCode;
37636  		}
37637  	}
37638  }
37639
37640  function _getEdgeIntersection(a, b, code, bounds, round) {
37641  	var dx = b.x - a.x,
37642  	    dy = b.y - a.y,
37643  	    min = bounds.min,
37644  	    max = bounds.max,
37645  	    x, y;
37646
37647  	if (code & 8) { // top
37648  		x = a.x + dx * (max.y - a.y) / dy;
37649  		y = max.y;
37650
37651  	} else if (code & 4) { // bottom
37652  		x = a.x + dx * (min.y - a.y) / dy;
37653  		y = min.y;
37654
37655  	} else if (code & 2) { // right
37656  		x = max.x;
37657  		y = a.y + dy * (max.x - a.x) / dx;
37658
37659  	} else if (code & 1) { // left
37660  		x = min.x;
37661  		y = a.y + dy * (min.x - a.x) / dx;
37662  	}
37663
37664  	return new Point(x, y, round);
37665  }
37666
37667  function _getBitCode(p, bounds) {
37668  	var code = 0;
37669
37670  	if (p.x < bounds.min.x) { // left
37671  		code |= 1;
37672  	} else if (p.x > bounds.max.x) { // right
37673  		code |= 2;
37674  	}
37675
37676  	if (p.y < bounds.min.y) { // bottom
37677  		code |= 4;
37678  	} else if (p.y > bounds.max.y) { // top
37679  		code |= 8;
37680  	}
37681
37682  	return code;
37683  }
37684
37685  // square distance (to avoid unnecessary Math.sqrt calls)
37686  function _sqDist(p1, p2) {
37687  	var dx = p2.x - p1.x,
37688  	    dy = p2.y - p1.y;
37689  	return dx * dx + dy * dy;
37690  }
37691
37692  // return closest point on segment or distance to that point
37693  function _sqClosestPointOnSegment(p, p1, p2, sqDist) {
37694  	var x = p1.x,
37695  	    y = p1.y,
37696  	    dx = p2.x - x,
37697  	    dy = p2.y - y,
37698  	    dot = dx * dx + dy * dy,
37699  	    t;
37700
37701  	if (dot > 0) {
37702  		t = ((p.x - x) * dx + (p.y - y) * dy) / dot;
37703
37704  		if (t > 1) {
37705  			x = p2.x;
37706  			y = p2.y;
37707  		} else if (t > 0) {
37708  			x += dx * t;
37709  			y += dy * t;
37710  		}
37711  	}
37712
37713  	dx = p.x - x;
37714  	dy = p.y - y;
37715
37716  	return sqDist ? dx * dx + dy * dy : new Point(x, y);
37717  }
37718
37719
37720  // @function isFlat(latlngs: LatLng[]): Boolean
37721  // Returns true if `latlngs` is a flat array, false is nested.
37722  function isFlat(latlngs) {
37723  	return !isArray(latlngs[0]) || (typeof latlngs[0][0] !== 'object' && typeof latlngs[0][0] !== 'undefined');
37724  }
37725
37726  function _flat(latlngs) {
37727  	console.warn('Deprecated use of _flat, please use L.LineUtil.isFlat instead.');
37728  	return isFlat(latlngs);
37729  }
37730
37731  var LineUtil = {
37732    __proto__: null,
37733    simplify: simplify,
37734    pointToSegmentDistance: pointToSegmentDistance,
37735    closestPointOnSegment: closestPointOnSegment,
37736    clipSegment: clipSegment,
37737    _getEdgeIntersection: _getEdgeIntersection,
37738    _getBitCode: _getBitCode,
37739    _sqClosestPointOnSegment: _sqClosestPointOnSegment,
37740    isFlat: isFlat,
37741    _flat: _flat
37742  };
37743
37744  /*
37745   * @namespace PolyUtil
37746   * Various utility functions for polygon geometries.
37747   */
37748
37749  /* @function clipPolygon(points: Point[], bounds: Bounds, round?: Boolean): Point[]
37750   * Clips the polygon geometry defined by the given `points` by the given bounds (using the [Sutherland-Hodgman algorithm](https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm)).
37751   * Used by Leaflet to only show polygon points that are on the screen or near, increasing
37752   * performance. Note that polygon points needs different algorithm for clipping
37753   * than polyline, so there's a separate method for it.
37754   */
37755  function clipPolygon(points, bounds, round) {
37756  	var clippedPoints,
37757  	    edges = [1, 4, 2, 8],
37758  	    i, j, k,
37759  	    a, b,
37760  	    len, edge, p;
37761
37762  	for (i = 0, len = points.length; i < len; i++) {
37763  		points[i]._code = _getBitCode(points[i], bounds);
37764  	}
37765
37766  	// for each edge (left, bottom, right, top)
37767  	for (k = 0; k < 4; k++) {
37768  		edge = edges[k];
37769  		clippedPoints = [];
37770
37771  		for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
37772  			a = points[i];
37773  			b = points[j];
37774
37775  			// if a is inside the clip window
37776  			if (!(a._code & edge)) {
37777  				// if b is outside the clip window (a->b goes out of screen)
37778  				if (b._code & edge) {
37779  					p = _getEdgeIntersection(b, a, edge, bounds, round);
37780  					p._code = _getBitCode(p, bounds);
37781  					clippedPoints.push(p);
37782  				}
37783  				clippedPoints.push(a);
37784
37785  			// else if b is inside the clip window (a->b enters the screen)
37786  			} else if (!(b._code & edge)) {
37787  				p = _getEdgeIntersection(b, a, edge, bounds, round);
37788  				p._code = _getBitCode(p, bounds);
37789  				clippedPoints.push(p);
37790  			}
37791  		}
37792  		points = clippedPoints;
37793  	}
37794
37795  	return points;
37796  }
37797
37798  var PolyUtil = {
37799    __proto__: null,
37800    clipPolygon: clipPolygon
37801  };
37802
37803  /*
37804   * @namespace Projection
37805   * @section
37806   * Leaflet comes with a set of already defined Projections out of the box:
37807   *
37808   * @projection L.Projection.LonLat
37809   *
37810   * Equirectangular, or Plate Carree projection — the most simple projection,
37811   * mostly used by GIS enthusiasts. Directly maps `x` as longitude, and `y` as
37812   * latitude. Also suitable for flat worlds, e.g. game maps. Used by the
37813   * `EPSG:4326` and `Simple` CRS.
37814   */
37815
37816  var LonLat = {
37817  	project: function (latlng) {
37818  		return new Point(latlng.lng, latlng.lat);
37819  	},
37820
37821  	unproject: function (point) {
37822  		return new LatLng(point.y, point.x);
37823  	},
37824
37825  	bounds: new Bounds([-180, -90], [180, 90])
37826  };
37827
37828  /*
37829   * @namespace Projection
37830   * @projection L.Projection.Mercator
37831   *
37832   * Elliptical Mercator projection — more complex than Spherical Mercator. Assumes that Earth is an ellipsoid. Used by the EPSG:3395 CRS.
37833   */
37834
37835  var Mercator = {
37836  	R: 6378137,
37837  	R_MINOR: 6356752.314245179,
37838
37839  	bounds: new Bounds([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]),
37840
37841  	project: function (latlng) {
37842  		var d = Math.PI / 180,
37843  		    r = this.R,
37844  		    y = latlng.lat * d,
37845  		    tmp = this.R_MINOR / r,
37846  		    e = Math.sqrt(1 - tmp * tmp),
37847  		    con = e * Math.sin(y);
37848
37849  		var ts = Math.tan(Math.PI / 4 - y / 2) / Math.pow((1 - con) / (1 + con), e / 2);
37850  		y = -r * Math.log(Math.max(ts, 1E-10));
37851
37852  		return new Point(latlng.lng * d * r, y);
37853  	},
37854
37855  	unproject: function (point) {
37856  		var d = 180 / Math.PI,
37857  		    r = this.R,
37858  		    tmp = this.R_MINOR / r,
37859  		    e = Math.sqrt(1 - tmp * tmp),
37860  		    ts = Math.exp(-point.y / r),
37861  		    phi = Math.PI / 2 - 2 * Math.atan(ts);
37862
37863  		for (var i = 0, dphi = 0.1, con; i < 15 && Math.abs(dphi) > 1e-7; i++) {
37864  			con = e * Math.sin(phi);
37865  			con = Math.pow((1 - con) / (1 + con), e / 2);
37866  			dphi = Math.PI / 2 - 2 * Math.atan(ts * con) - phi;
37867  			phi += dphi;
37868  		}
37869
37870  		return new LatLng(phi * d, point.x * d / r);
37871  	}
37872  };
37873
37874  /*
37875   * @class Projection
37876
37877   * An object with methods for projecting geographical coordinates of the world onto
37878   * a flat surface (and back). See [Map projection](https://en.wikipedia.org/wiki/Map_projection).
37879
37880   * @property bounds: Bounds
37881   * The bounds (specified in CRS units) where the projection is valid
37882
37883   * @method project(latlng: LatLng): Point
37884   * Projects geographical coordinates into a 2D point.
37885   * Only accepts actual `L.LatLng` instances, not arrays.
37886
37887   * @method unproject(point: Point): LatLng
37888   * The inverse of `project`. Projects a 2D point into a geographical location.
37889   * Only accepts actual `L.Point` instances, not arrays.
37890
37891   * Note that the projection instances do not inherit from Leaflet's `Class` object,
37892   * and can't be instantiated. Also, new classes can't inherit from them,
37893   * and methods can't be added to them with the `include` function.
37894
37895   */
37896
37897  var index = {
37898    __proto__: null,
37899    LonLat: LonLat,
37900    Mercator: Mercator,
37901    SphericalMercator: SphericalMercator
37902  };
37903
37904  /*
37905   * @namespace CRS
37906   * @crs L.CRS.EPSG3395
37907   *
37908   * Rarely used by some commercial tile providers. Uses Elliptical Mercator projection.
37909   */
37910  var EPSG3395 = extend({}, Earth, {
37911  	code: 'EPSG:3395',
37912  	projection: Mercator,
37913
37914  	transformation: (function () {
37915  		var scale = 0.5 / (Math.PI * Mercator.R);
37916  		return toTransformation(scale, 0.5, -scale, 0.5);
37917  	}())
37918  });
37919
37920  /*
37921   * @namespace CRS
37922   * @crs L.CRS.EPSG4326
37923   *
37924   * A common CRS among GIS enthusiasts. Uses simple Equirectangular projection.
37925   *
37926   * Leaflet 1.0.x complies with the [TMS coordinate scheme for EPSG:4326](https://wiki.osgeo.org/wiki/Tile_Map_Service_Specification#global-geodetic),
37927   * which is a breaking change from 0.7.x behaviour.  If you are using a `TileLayer`
37928   * with this CRS, ensure that there are two 256x256 pixel tiles covering the
37929   * whole earth at zoom level zero, and that the tile coordinate origin is (-180,+90),
37930   * or (-180,-90) for `TileLayer`s with [the `tms` option](#tilelayer-tms) set.
37931   */
37932
37933  var EPSG4326 = extend({}, Earth, {
37934  	code: 'EPSG:4326',
37935  	projection: LonLat,
37936  	transformation: toTransformation(1 / 180, 1, -1 / 180, 0.5)
37937  });
37938
37939  /*
37940   * @namespace CRS
37941   * @crs L.CRS.Simple
37942   *
37943   * A simple CRS that maps longitude and latitude into `x` and `y` directly.
37944   * May be used for maps of flat surfaces (e.g. game maps). Note that the `y`
37945   * axis should still be inverted (going from bottom to top). `distance()` returns
37946   * simple euclidean distance.
37947   */
37948
37949  var Simple = extend({}, CRS, {
37950  	projection: LonLat,
37951  	transformation: toTransformation(1, 0, -1, 0),
37952
37953  	scale: function (zoom) {
37954  		return Math.pow(2, zoom);
37955  	},
37956
37957  	zoom: function (scale) {
37958  		return Math.log(scale) / Math.LN2;
37959  	},
37960
37961  	distance: function (latlng1, latlng2) {
37962  		var dx = latlng2.lng - latlng1.lng,
37963  		    dy = latlng2.lat - latlng1.lat;
37964
37965  		return Math.sqrt(dx * dx + dy * dy);
37966  	},
37967
37968  	infinite: true
37969  });
37970
37971  CRS.Earth = Earth;
37972  CRS.EPSG3395 = EPSG3395;
37973  CRS.EPSG3857 = EPSG3857;
37974  CRS.EPSG900913 = EPSG900913;
37975  CRS.EPSG4326 = EPSG4326;
37976  CRS.Simple = Simple;
37977
37978  /*
37979   * @class Layer
37980   * @inherits Evented
37981   * @aka L.Layer
37982   * @aka ILayer
37983   *
37984   * A set of methods from the Layer base class that all Leaflet layers use.
37985   * Inherits all methods, options and events from `L.Evented`.
37986   *
37987   * @example
37988   *
37989   * ```js
37990   * var layer = L.marker(latlng).addTo(map);
37991   * layer.addTo(map);
37992   * layer.remove();
37993   * ```
37994   *
37995   * @event add: Event
37996   * Fired after the layer is added to a map
37997   *
37998   * @event remove: Event
37999   * Fired after the layer is removed from a map
38000   */
38001
38002
38003  var Layer = Evented.extend({
38004
38005  	// Classes extending `L.Layer` will inherit the following options:
38006  	options: {
38007  		// @option pane: String = 'overlayPane'
38008  		// By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.
38009  		pane: 'overlayPane',
38010
38011  		// @option attribution: String = null
38012  		// String to be shown in the attribution control, e.g. "© OpenStreetMap contributors". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.
38013  		attribution: null,
38014
38015  		bubblingMouseEvents: true
38016  	},
38017
38018  	/* @section
38019  	 * Classes extending `L.Layer` will inherit the following methods:
38020  	 *
38021  	 * @method addTo(map: Map|LayerGroup): this
38022  	 * Adds the layer to the given map or layer group.
38023  	 */
38024  	addTo: function (map) {
38025  		map.addLayer(this);
38026  		return this;
38027  	},
38028
38029  	// @method remove: this
38030  	// Removes the layer from the map it is currently active on.
38031  	remove: function () {
38032  		return this.removeFrom(this._map || this._mapToAdd);
38033  	},
38034
38035  	// @method removeFrom(map: Map): this
38036  	// Removes the layer from the given map
38037  	//
38038  	// @alternative
38039  	// @method removeFrom(group: LayerGroup): this
38040  	// Removes the layer from the given `LayerGroup`
38041  	removeFrom: function (obj) {
38042  		if (obj) {
38043  			obj.removeLayer(this);
38044  		}
38045  		return this;
38046  	},
38047
38048  	// @method getPane(name? : String): HTMLElement
38049  	// Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.
38050  	getPane: function (name) {
38051  		return this._map.getPane(name ? (this.options[name] || name) : this.options.pane);
38052  	},
38053
38054  	addInteractiveTarget: function (targetEl) {
38055  		this._map._targets[stamp(targetEl)] = this;
38056  		return this;
38057  	},
38058
38059  	removeInteractiveTarget: function (targetEl) {
38060  		delete this._map._targets[stamp(targetEl)];
38061  		return this;
38062  	},
38063
38064  	// @method getAttribution: String
38065  	// Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).
38066  	getAttribution: function () {
38067  		return this.options.attribution;
38068  	},
38069
38070  	_layerAdd: function (e) {
38071  		var map = e.target;
38072
38073  		// check in case layer gets added and then removed before the map is ready
38074  		if (!map.hasLayer(this)) { return; }
38075
38076  		this._map = map;
38077  		this._zoomAnimated = map._zoomAnimated;
38078
38079  		if (this.getEvents) {
38080  			var events = this.getEvents();
38081  			map.on(events, this);
38082  			this.once('remove', function () {
38083  				map.off(events, this);
38084  			}, this);
38085  		}
38086
38087  		this.onAdd(map);
38088
38089  		this.fire('add');
38090  		map.fire('layeradd', {layer: this});
38091  	}
38092  });
38093
38094  /* @section Extension methods
38095   * @uninheritable
38096   *
38097   * Every layer should extend from `L.Layer` and (re-)implement the following methods.
38098   *
38099   * @method onAdd(map: Map): this
38100   * Should contain code that creates DOM elements for the layer, adds them to `map panes` where they should belong and puts listeners on relevant map events. Called on [`map.addLayer(layer)`](#map-addlayer).
38101   *
38102   * @method onRemove(map: Map): this
38103   * Should contain all clean up code that removes the layer's elements from the DOM and removes listeners previously added in [`onAdd`](#layer-onadd). Called on [`map.removeLayer(layer)`](#map-removelayer).
38104   *
38105   * @method getEvents(): Object
38106   * This optional method should return an object like `{ viewreset: this._reset }` for [`addEventListener`](#evented-addeventlistener). The event handlers in this object will be automatically added and removed from the map with your layer.
38107   *
38108   * @method getAttribution(): String
38109   * This optional method should return a string containing HTML to be shown on the `Attribution control` whenever the layer is visible.
38110   *
38111   * @method beforeAdd(map: Map): this
38112   * Optional method. Called on [`map.addLayer(layer)`](#map-addlayer), before the layer is added to the map, before events are initialized, without waiting until the map is in a usable state. Use for early initialization only.
38113   */
38114
38115
38116  /* @namespace Map
38117   * @section Layer events
38118   *
38119   * @event layeradd: LayerEvent
38120   * Fired when a new layer is added to the map.
38121   *
38122   * @event layerremove: LayerEvent
38123   * Fired when some layer is removed from the map
38124   *
38125   * @section Methods for Layers and Controls
38126   */
38127  Map.include({
38128  	// @method addLayer(layer: Layer): this
38129  	// Adds the given layer to the map
38130  	addLayer: function (layer) {
38131  		if (!layer._layerAdd) {
38132  			throw new Error('The provided object is not a Layer.');
38133  		}
38134
38135  		var id = stamp(layer);
38136  		if (this._layers[id]) { return this; }
38137  		this._layers[id] = layer;
38138
38139  		layer._mapToAdd = this;
38140
38141  		if (layer.beforeAdd) {
38142  			layer.beforeAdd(this);
38143  		}
38144
38145  		this.whenReady(layer._layerAdd, layer);
38146
38147  		return this;
38148  	},
38149
38150  	// @method removeLayer(layer: Layer): this
38151  	// Removes the given layer from the map.
38152  	removeLayer: function (layer) {
38153  		var id = stamp(layer);
38154
38155  		if (!this._layers[id]) { return this; }
38156
38157  		if (this._loaded) {
38158  			layer.onRemove(this);
38159  		}
38160
38161  		delete this._layers[id];
38162
38163  		if (this._loaded) {
38164  			this.fire('layerremove', {layer: layer});
38165  			layer.fire('remove');
38166  		}
38167
38168  		layer._map = layer._mapToAdd = null;
38169
38170  		return this;
38171  	},
38172
38173  	// @method hasLayer(layer: Layer): Boolean
38174  	// Returns `true` if the given layer is currently added to the map
38175  	hasLayer: function (layer) {
38176  		return stamp(layer) in this._layers;
38177  	},
38178
38179  	/* @method eachLayer(fn: Function, context?: Object): this
38180  	 * Iterates over the layers of the map, optionally specifying context of the iterator function.
38181  	 * ```
38182  	 * map.eachLayer(function(layer){
38183  	 *     layer.bindPopup('Hello');
38184  	 * });
38185  	 * ```
38186  	 */
38187  	eachLayer: function (method, context) {
38188  		for (var i in this._layers) {
38189  			method.call(context, this._layers[i]);
38190  		}
38191  		return this;
38192  	},
38193
38194  	_addLayers: function (layers) {
38195  		layers = layers ? (isArray(layers) ? layers : [layers]) : [];
38196
38197  		for (var i = 0, len = layers.length; i < len; i++) {
38198  			this.addLayer(layers[i]);
38199  		}
38200  	},
38201
38202  	_addZoomLimit: function (layer) {
38203  		if (!isNaN(layer.options.maxZoom) || !isNaN(layer.options.minZoom)) {
38204  			this._zoomBoundLayers[stamp(layer)] = layer;
38205  			this._updateZoomLevels();
38206  		}
38207  	},
38208
38209  	_removeZoomLimit: function (layer) {
38210  		var id = stamp(layer);
38211
38212  		if (this._zoomBoundLayers[id]) {
38213  			delete this._zoomBoundLayers[id];
38214  			this._updateZoomLevels();
38215  		}
38216  	},
38217
38218  	_updateZoomLevels: function () {
38219  		var minZoom = Infinity,
38220  		    maxZoom = -Infinity,
38221  		    oldZoomSpan = this._getZoomSpan();
38222
38223  		for (var i in this._zoomBoundLayers) {
38224  			var options = this._zoomBoundLayers[i].options;
38225
38226  			minZoom = options.minZoom === undefined ? minZoom : Math.min(minZoom, options.minZoom);
38227  			maxZoom = options.maxZoom === undefined ? maxZoom : Math.max(maxZoom, options.maxZoom);
38228  		}
38229
38230  		this._layersMaxZoom = maxZoom === -Infinity ? undefined : maxZoom;
38231  		this._layersMinZoom = minZoom === Infinity ? undefined : minZoom;
38232
38233  		// @section Map state change events
38234  		// @event zoomlevelschange: Event
38235  		// Fired when the number of zoomlevels on the map is changed due
38236  		// to adding or removing a layer.
38237  		if (oldZoomSpan !== this._getZoomSpan()) {
38238  			this.fire('zoomlevelschange');
38239  		}
38240
38241  		if (this.options.maxZoom === undefined && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom) {
38242  			this.setZoom(this._layersMaxZoom);
38243  		}
38244  		if (this.options.minZoom === undefined && this._layersMinZoom && this.getZoom() < this._layersMinZoom) {
38245  			this.setZoom(this._layersMinZoom);
38246  		}
38247  	}
38248  });
38249
38250  /*
38251   * @class LayerGroup
38252   * @aka L.LayerGroup
38253   * @inherits Interactive layer
38254   *
38255   * Used to group several layers and handle them as one. If you add it to the map,
38256   * any layers added or removed from the group will be added/removed on the map as
38257   * well. Extends `Layer`.
38258   *
38259   * @example
38260   *
38261   * ```js
38262   * L.layerGroup([marker1, marker2])
38263   * 	.addLayer(polyline)
38264   * 	.addTo(map);
38265   * ```
38266   */
38267
38268  var LayerGroup = Layer.extend({
38269
38270  	initialize: function (layers, options) {
38271  		setOptions(this, options);
38272
38273  		this._layers = {};
38274
38275  		var i, len;
38276
38277  		if (layers) {
38278  			for (i = 0, len = layers.length; i < len; i++) {
38279  				this.addLayer(layers[i]);
38280  			}
38281  		}
38282  	},
38283
38284  	// @method addLayer(layer: Layer): this
38285  	// Adds the given layer to the group.
38286  	addLayer: function (layer) {
38287  		var id = this.getLayerId(layer);
38288
38289  		this._layers[id] = layer;
38290
38291  		if (this._map) {
38292  			this._map.addLayer(layer);
38293  		}
38294
38295  		return this;
38296  	},
38297
38298  	// @method removeLayer(layer: Layer): this
38299  	// Removes the given layer from the group.
38300  	// @alternative
38301  	// @method removeLayer(id: Number): this
38302  	// Removes the layer with the given internal ID from the group.
38303  	removeLayer: function (layer) {
38304  		var id = layer in this._layers ? layer : this.getLayerId(layer);
38305
38306  		if (this._map && this._layers[id]) {
38307  			this._map.removeLayer(this._layers[id]);
38308  		}
38309
38310  		delete this._layers[id];
38311
38312  		return this;
38313  	},
38314
38315  	// @method hasLayer(layer: Layer): Boolean
38316  	// Returns `true` if the given layer is currently added to the group.
38317  	// @alternative
38318  	// @method hasLayer(id: Number): Boolean
38319  	// Returns `true` if the given internal ID is currently added to the group.
38320  	hasLayer: function (layer) {
38321  		var layerId = typeof layer === 'number' ? layer : this.getLayerId(layer);
38322  		return layerId in this._layers;
38323  	},
38324
38325  	// @method clearLayers(): this
38326  	// Removes all the layers from the group.
38327  	clearLayers: function () {
38328  		return this.eachLayer(this.removeLayer, this);
38329  	},
38330
38331  	// @method invoke(methodName: String, …): this
38332  	// Calls `methodName` on every layer contained in this group, passing any
38333  	// additional parameters. Has no effect if the layers contained do not
38334  	// implement `methodName`.
38335  	invoke: function (methodName) {
38336  		var args = Array.prototype.slice.call(arguments, 1),
38337  		    i, layer;
38338
38339  		for (i in this._layers) {
38340  			layer = this._layers[i];
38341
38342  			if (layer[methodName]) {
38343  				layer[methodName].apply(layer, args);
38344  			}
38345  		}
38346
38347  		return this;
38348  	},
38349
38350  	onAdd: function (map) {
38351  		this.eachLayer(map.addLayer, map);
38352  	},
38353
38354  	onRemove: function (map) {
38355  		this.eachLayer(map.removeLayer, map);
38356  	},
38357
38358  	// @method eachLayer(fn: Function, context?: Object): this
38359  	// Iterates over the layers of the group, optionally specifying context of the iterator function.
38360  	// ```js
38361  	// group.eachLayer(function (layer) {
38362  	// 	layer.bindPopup('Hello');
38363  	// });
38364  	// ```
38365  	eachLayer: function (method, context) {
38366  		for (var i in this._layers) {
38367  			method.call(context, this._layers[i]);
38368  		}
38369  		return this;
38370  	},
38371
38372  	// @method getLayer(id: Number): Layer
38373  	// Returns the layer with the given internal ID.
38374  	getLayer: function (id) {
38375  		return this._layers[id];
38376  	},
38377
38378  	// @method getLayers(): Layer[]
38379  	// Returns an array of all the layers added to the group.
38380  	getLayers: function () {
38381  		var layers = [];
38382  		this.eachLayer(layers.push, layers);
38383  		return layers;
38384  	},
38385
38386  	// @method setZIndex(zIndex: Number): this
38387  	// Calls `setZIndex` on every layer contained in this group, passing the z-index.
38388  	setZIndex: function (zIndex) {
38389  		return this.invoke('setZIndex', zIndex);
38390  	},
38391
38392  	// @method getLayerId(layer: Layer): Number
38393  	// Returns the internal ID for a layer
38394  	getLayerId: function (layer) {
38395  		return stamp(layer);
38396  	}
38397  });
38398
38399
38400  // @factory L.layerGroup(layers?: Layer[], options?: Object)
38401  // Create a layer group, optionally given an initial set of layers and an `options` object.
38402  var layerGroup = function (layers, options) {
38403  	return new LayerGroup(layers, options);
38404  };
38405
38406  /*
38407   * @class FeatureGroup
38408   * @aka L.FeatureGroup
38409   * @inherits LayerGroup
38410   *
38411   * Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:
38412   *  * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))
38413   *  * Events are propagated to the `FeatureGroup`, so if the group has an event
38414   * handler, it will handle events from any of the layers. This includes mouse events
38415   * and custom events.
38416   *  * Has `layeradd` and `layerremove` events
38417   *
38418   * @example
38419   *
38420   * ```js
38421   * L.featureGroup([marker1, marker2, polyline])
38422   * 	.bindPopup('Hello world!')
38423   * 	.on('click', function() { alert('Clicked on a member of the group!'); })
38424   * 	.addTo(map);
38425   * ```
38426   */
38427
38428  var FeatureGroup = LayerGroup.extend({
38429
38430  	addLayer: function (layer) {
38431  		if (this.hasLayer(layer)) {
38432  			return this;
38433  		}
38434
38435  		layer.addEventParent(this);
38436
38437  		LayerGroup.prototype.addLayer.call(this, layer);
38438
38439  		// @event layeradd: LayerEvent
38440  		// Fired when a layer is added to this `FeatureGroup`
38441  		return this.fire('layeradd', {layer: layer});
38442  	},
38443
38444  	removeLayer: function (layer) {
38445  		if (!this.hasLayer(layer)) {
38446  			return this;
38447  		}
38448  		if (layer in this._layers) {
38449  			layer = this._layers[layer];
38450  		}
38451
38452  		layer.removeEventParent(this);
38453
38454  		LayerGroup.prototype.removeLayer.call(this, layer);
38455
38456  		// @event layerremove: LayerEvent
38457  		// Fired when a layer is removed from this `FeatureGroup`
38458  		return this.fire('layerremove', {layer: layer});
38459  	},
38460
38461  	// @method setStyle(style: Path options): this
38462  	// Sets the given path options to each layer of the group that has a `setStyle` method.
38463  	setStyle: function (style) {
38464  		return this.invoke('setStyle', style);
38465  	},
38466
38467  	// @method bringToFront(): this
38468  	// Brings the layer group to the top of all other layers
38469  	bringToFront: function () {
38470  		return this.invoke('bringToFront');
38471  	},
38472
38473  	// @method bringToBack(): this
38474  	// Brings the layer group to the back of all other layers
38475  	bringToBack: function () {
38476  		return this.invoke('bringToBack');
38477  	},
38478
38479  	// @method getBounds(): LatLngBounds
38480  	// Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
38481  	getBounds: function () {
38482  		var bounds = new LatLngBounds();
38483
38484  		for (var id in this._layers) {
38485  			var layer = this._layers[id];
38486  			bounds.extend(layer.getBounds ? layer.getBounds() : layer.getLatLng());
38487  		}
38488  		return bounds;
38489  	}
38490  });
38491
38492  // @factory L.featureGroup(layers?: Layer[], options?: Object)
38493  // Create a feature group, optionally given an initial set of layers and an `options` object.
38494  var featureGroup = function (layers, options) {
38495  	return new FeatureGroup(layers, options);
38496  };
38497
38498  /*
38499   * @class Icon
38500   * @aka L.Icon
38501   *
38502   * Represents an icon to provide when creating a marker.
38503   *
38504   * @example
38505   *
38506   * ```js
38507   * var myIcon = L.icon({
38508   *     iconUrl: 'my-icon.png',
38509   *     iconRetinaUrl: '[email protected]',
38510   *     iconSize: [38, 95],
38511   *     iconAnchor: [22, 94],
38512   *     popupAnchor: [-3, -76],
38513   *     shadowUrl: 'my-icon-shadow.png',
38514   *     shadowRetinaUrl: '[email protected]',
38515   *     shadowSize: [68, 95],
38516   *     shadowAnchor: [22, 94]
38517   * });
38518   *
38519   * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
38520   * ```
38521   *
38522   * `L.Icon.Default` extends `L.Icon` and is the blue icon Leaflet uses for markers by default.
38523   *
38524   */
38525
38526  var Icon = Class.extend({
38527
38528  	/* @section
38529  	 * @aka Icon options
38530  	 *
38531  	 * @option iconUrl: String = null
38532  	 * **(required)** The URL to the icon image (absolute or relative to your script path).
38533  	 *
38534  	 * @option iconRetinaUrl: String = null
38535  	 * The URL to a retina sized version of the icon image (absolute or relative to your
38536  	 * script path). Used for Retina screen devices.
38537  	 *
38538  	 * @option iconSize: Point = null
38539  	 * Size of the icon image in pixels.
38540  	 *
38541  	 * @option iconAnchor: Point = null
38542  	 * The coordinates of the "tip" of the icon (relative to its top left corner). The icon
38543  	 * will be aligned so that this point is at the marker's geographical location. Centered
38544  	 * by default if size is specified, also can be set in CSS with 
38544negative margins.
38545  	 *
38546  	 * @option popupAnchor: Point = [0, 0]
38547  	 * The coordinates of the point from which popups will "open", relative to the icon anchor.
38548  	 *
38549  	 * @option tooltipAnchor: Point = [0, 0]
38550  	 * The coordinates of the point from which tooltips will "open", relative to the icon anchor.
38551  	 *
38552  	 * @option shadowUrl: String = null
38553  	 * The URL to the icon shadow image. If not specified, no shadow image will be created.
38554  	 *
38555  	 * @option shadowRetinaUrl: String = null
38556  	 *
38557  	 * @option shadowSize: Point = null
38558  	 * Size of the shadow image in pixels.
38559  	 *
38560  	 * @option shadowAnchor: Point = null
38561  	 * The coordinates of the "tip" of the shadow (relative to its top left corner) (the same
38562  	 * as iconAnchor if not specified).
38563  	 *
38564  	 * @option className: String = ''
38565  	 * A custom class name to assign to both icon and shadow images. Empty by default.
38566  	 */
38567
38568  	options: {
38569  		popupAnchor: [0, 0],
38570  		tooltipAnchor: [0, 0],
38571
38572  		// @option crossOrigin: Boolean|String = false
38573  		// Whether the crossOrigin attribute will be added to the tiles.
38574  		// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
38575  		// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
38576  		crossOrigin: false
38577  	},
38578
38579  	initialize: function (options) {
38580  		setOptions(this, options);
38581  	},
38582
38583  	// @method createIcon(oldIcon?: HTMLElement): HTMLElement
38584  	// Called internally when the icon has to be shown, returns a `<img>` HTML element
38585  	// styled according to the options.
38586  	createIcon: function (oldIcon) {
38587  		return this._createIcon('icon', oldIcon);
38588  	},
38589
38590  	// @method createShadow(oldIcon?: HTMLElement): HTMLElement
38591  	// As `createIcon`, but for the shadow beneath it.
38592  	createShadow: function (oldIcon) {
38593  		return this._createIcon('shadow', oldIcon);
38594  	},
38595
38596  	_createIcon: function (name, oldIcon) {
38597  		var src = this._getIconUrl(name);
38598
38599  		if (!src) {
38600  			if (name === 'icon') {
38601  				throw new Error('iconUrl not set in Icon options (see the docs).');
38602  			}
38603  			return null;
38604  		}
38605
38606  		var img = this._createImg(src, oldIcon && oldIcon.tagName === 'IMG' ? oldIcon : null);
38607  		this._setIconStyles(img, name);
38608
38609  		if (this.options.crossOrigin || this.options.crossOrigin === '') {
38610  			img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
38611  		}
38612
38613  		return img;
38614  	},
38615
38616  	_setIconStyles: function (img, name) {
38617  		var options = this.options;
38618  		var sizeOption = options[name + 'Size'];
38619
38620  		if (typeof sizeOption === 'number') {
38621  			sizeOption = [sizeOption, sizeOption];
38622  		}
38623
38624  		var size = toPoint(sizeOption),
38625  		    anchor = toPoint(name === 'shadow' && options.shadowAnchor || options.iconAnchor ||
38626  		            size && size.divideBy(2, true));
38627
38628  		img.className = 'leaflet-marker-' + name + ' ' + (options.className || '');
38629
38630  		if (anchor) {
38631  			img.style.marginLeft = (-anchor.x) + 'px';
38632  			img.style.marginTop  = (-anchor.y) + 'px';
38633  		}
38634
38635  		if (size) {
38636  			img.style.width  = size.x + 'px';
38637  			img.style.height = size.y + 'px';
38638  		}
38639  	},
38640
38641  	_createImg: function (src, el) {
38642  		el = el || document.createElement('img');
38643  		el.src = src;
38644  		return el;
38645  	},
38646
38647  	_getIconUrl: function (name) {
38648  		return Browser.retina && this.options[name + 'RetinaUrl'] || this.options[name + 'Url'];
38649  	}
38650  });
38651
38652
38653  // @factory L.icon(options: Icon options)
38654  // Creates an icon instance with the given options.
38655  function icon(options) {
38656  	return new Icon(options);
vendor: 6,652 bytes, lines 38656-38878
38656
38657  }
38658
38659  /*
38660   * @miniclass Icon.Default (Icon)
38661   * @aka L.Icon.Default
38662   * @section
38663   *
38664   * A trivial subclass of `Icon`, represents the icon to use in `Marker`s when
38665   * no icon is specified. Points to the blue marker image distributed with Leaflet
38666   * releases.
38667   *
38668   * In order to customize the default icon, just change the properties of `L.Icon.Default.prototype.options`
38669   * (which is a set of `Icon options`).
38670   *
38671   * If you want to _completely_ replace the default icon, override the
38672   * `L.Marker.prototype.options.icon` with your own icon instead.
38673   */
38674
38675  var IconDefault = Icon.extend({
38676
38677  	options: {
38678  		iconUrl:       'marker-icon.png',
38679  		iconRetinaUrl: 'marker-icon-2x.png',
38680  		shadowUrl:     'marker-shadow.png',
38681  		iconSize:    [25, 41],
38682  		iconAnchor:  [12, 41],
38683  		popupAnchor: [1, -34],
38684  		tooltipAnchor: [16, -28],
38685  		shadowSize:  [41, 41]
38686  	},
38687
38688  	_getIconUrl: function (name) {
38689  		if (typeof IconDefault.imagePath !== 'string') {	// Deprecated, backwards-compatibility only
38690  			IconDefault.imagePath = this._detectIconPath();
38691  		}
38692
38693  		// @option imagePath: String
38694  		// `Icon.Default` will try to auto-detect the location of the
38695  		// blue icon images. If you are placing these images in a non-standard
38696  		// way, set this option to point to the right path.
38697  		return (this.options.imagePath || IconDefault.imagePath) + Icon.prototype._getIconUrl.call(this, name);
38698  	},
38699
38700  	_stripUrl: function (path) {	// separate function to use in tests
38701  		var strip = function (str, re, idx) {
38702  			var match = re.exec(str);
38703  			return match && match[idx];
38704  		};
38705  		path = strip(path, /^url\((['"])?(.+)\1\)$/, 2);
38706  		return path && strip(path, /^(.*)marker-icon\.png$/, 1);
38707  	},
38708
38709  	_detectIconPath: function () {
38710  		var el = create$1('div',  'leaflet-default-icon-path', document.body);
38711  		var path = getStyle(el, 'background-image') ||
38712  		           getStyle(el, 'backgroundImage');	// IE8
38713
38714  		document.body.removeChild(el);
38715  		path = this._stripUrl(path);
38716  		if (path) { return path; }
38717  		var link = document.querySelector('link[href$="leaflet.css"]');
38718  		if (!link) { return ''; }
38719  		return link.href.substring(0, link.href.length - 'leaflet.css'.length - 1);
38720  	}
38721  });
38722
38723  /*
38724   * L.Handler.MarkerDrag is used internally by L.Marker to make the markers draggable.
38725   */
38726
38727
38728  /* @namespace Marker
38729   * @section Interaction handlers
38730   *
38731   * Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see `Handler` methods). Example:
38732   *
38733   * ```js
38734   * marker.dragging.disable();
38735   * ```
38736   *
38737   * @property dragging: Handler
38738   * Marker dragging handler (by both mouse and touch). Only valid when the marker is on the map (Otherwise set [`marker.options.draggable`](#marker-draggable)).
38739   */
38740
38741  var MarkerDrag = Handler.extend({
38742  	initialize: function (marker) {
38743  		this._marker = marker;
38744  	},
38745
38746  	addHooks: function () {
38747  		var icon = this._marker._icon;
38748
38749  		if (!this._draggable) {
38750  			this._draggable = new Draggable(icon, icon, true);
38751  		}
38752
38753  		this._draggable.on({
38754  			dragstart: this._onDragStart,
38755  			predrag: this._onPreDrag,
38756  			drag: this._onDrag,
38757  			dragend: this._onDragEnd
38758  		}, this).enable();
38759
38760  		addClass(icon, 'leaflet-marker-draggable');
38761  	},
38762
38763  	removeHooks: function () {
38764  		this._draggable.off({
38765  			dragstart: this._onDragStart,
38766  			predrag: this._onPreDrag,
38767  			drag: this._onDrag,
38768  			dragend: this._onDragEnd
38769  		}, this).disable();
38770
38771  		if (this._marker._icon) {
38772  			removeClass(this._marker._icon, 'leaflet-marker-draggable');
38773  		}
38774  	},
38775
38776  	moved: function () {
38777  		return this._draggable && this._draggable._moved;
38778  	},
38779
38780  	_adjustPan: function (e) {
38781  		var marker = this._marker,
38782  		    map = marker._map,
38783  		    speed = this._marker.options.autoPanSpeed,
38784  		    padding = this._marker.options.autoPanPadding,
38785  		    iconPos = getPosition(marker._icon),
38786  		    bounds = map.getPixelBounds(),
38787  		    origin = map.getPixelOrigin();
38788
38789  		var panBounds = toBounds(
38790  			bounds.min._subtract(origin).add(padding),
38791  			bounds.max._subtract(origin).subtract(padding)
38792  		);
38793
38794  		if (!panBounds.contains(iconPos)) {
38795  			// Compute incremental movement
38796  			var movement = toPoint(
38797  				(Math.max(panBounds.max.x, iconPos.x) - panBounds.max.x) / (bounds.max.x - panBounds.max.x) -
38798  				(Math.min(panBounds.min.x, iconPos.x) - panBounds.min.x) / (bounds.min.x - panBounds.min.x),
38799
38800  				(Math.max(panBounds.max.y, iconPos.y) - panBounds.max.y) / (bounds.max.y - panBounds.max.y) -
38801  				(Math.min(panBounds.min.y, iconPos.y) - panBounds.min.y) / (bounds.min.y - panBounds.min.y)
38802  			).multiplyBy(speed);
38803
38804  			map.panBy(movement, {animate: false});
38805
38806  			this._draggable._newPos._add(movement);
38807  			this._draggable._startPos._add(movement);
38808
38809  			setPosition(marker._icon, this._draggable._newPos);
38810  			this._onDrag(e);
38811
38812  			this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));
38813  		}
38814  	},
38815
38816  	_onDragStart: function () {
38817  		// @section Dragging events
38818  		// @event dragstart: Event
38819  		// Fired when the user starts dragging the marker.
38820
38821  		// @event movestart: Event
38822  		// Fired when the marker starts moving (because of dragging).
38823
38824  		this._oldLatLng = this._marker.getLatLng();
38825
38826  		// When using ES6 imports it could not be set when `Popup` was not imported as well
38827  		this._marker.closePopup && this._marker.closePopup();
38828
38829  		this._marker
38830  			.fire('movestart')
38831  			.fire('dragstart');
38832  	},
38833
38834  	_onPreDrag: function (e) {
38835  		if (this._marker.options.autoPan) {
38836  			cancelAnimFrame(this._panRequest);
38837  			this._panRequest = requestAnimFrame(this._adjustPan.bind(this, e));
38838  		}
38839  	},
38840
38841  	_onDrag: function (e) {
38842  		var marker = this._marker,
38843  		    shadow = marker._shadow,
38844  		    iconPos = getPosition(marker._icon),
38845  		    latlng = marker._map.layerPointToLatLng(iconPos);
38846
38847  		// update shadow position
38848  		if (shadow) {
38849  			setPosition(shadow, iconPos);
38850  		}
38851
38852  		marker._latlng = latlng;
38853  		e.latlng = latlng;
38854  		e.oldLatLng = this._oldLatLng;
38855
38856  		// @event drag: Event
38857  		// Fired repeatedly while the user drags the marker.
38858  		marker
38859  		    .fire('move', e)
38860  		    .fire('drag', e);
38861  	},
38862
38863  	_onDragEnd: function (e) {
38864  		// @event dragend: DragEndEvent
38865  		// Fired when the user stops dragging the marker.
38866
38867  		 cancelAnimFrame(this._panRequest);
38868
38869  		// @event moveend: Event
38870  		// Fired when the marker stops moving (because of dragging).
38871  		delete this._oldLatLng;
38872  		this._marker
38873  		    .fire('moveend')
38874  		    .fire('dragend', e);
38875  	}
38876  });
38877
38878  /*
38878
38879   * @class Marker
38880   * @inherits Interactive layer
38881   * @aka L.Marker
38882   * L.Marker is used to display clickable/draggable icons on the map. Extends `Layer`.
38883   *
38884   * @example
38885   *
38886   * ```js
38887   * L.marker([50.5, 30.5]).addTo(map);
38888   * ```
38889   */
38890
38891  var Marker = Layer.extend({
38892
38893  	// @section
38894  	// @aka Marker options
38895  	options: {
38896  		// @option icon: Icon = *
38897  		// Icon instance to use for rendering the marker.
38898  		// See [Icon documentation](#L.Icon) for details on how to customize the marker icon.
38899  		// If not specified, a common instance of `L.Icon.Default` is used.
38900  		icon: new IconDefault(),
38901
38902  		// Option inherited from "Interactive layer" abstract class
38903  		interactive: true,
38904
38905  		// @option keyboard: Boolean = true
38906  		// Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.
38907  		keyboard: true,
38908
38909  		// @option title: String = ''
38910  		// Text for the browser tooltip that appear on marker hover (no tooltip by default).
38911  		// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
38912  		title: '',
38913
38914  		// @option alt: String = 'Marker'
38915  		// Text for the `alt` attribute of the icon image.
38916  		// [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
38917  		alt: 'Marker',
38918
38919  		// @option zIndexOffset: Number = 0
38920  		// By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).
38921  		zIndexOffset: 0,
38922
38923  		// @option opacity: Number = 1.0
38924  		// The opacity of the marker.
38925  		opacity: 1,
38926
38927  		// @option riseOnHover: Boolean = false
38928  		// If `true`, the marker will get on top of others when you hover the mouse over it.
38929  		riseOnHover: false,
38930
38931  		// @option riseOffset: Number = 250
38932  		// The z-index offset used for the `riseOnHover` feature.
38933  		riseOffset: 250,
38934
38935  		// @option pane: String = 'markerPane'
38936  		// `Map pane` where the markers icon will be added.
38937  		pane: 'markerPane',
38938
38939  		// @option shadowPane: String = 'shadowPane'
38940  		// `Map pane` where the markers shadow will be added.
38941  		shadowPane: 'shadowPane',
38942
38943  		// @option bubblingMouseEvents: Boolean = false
38944  		// When `true`, a mouse event on this marker will trigger the same event on the map
38945  		// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
38946  		bubblingMouseEvents: false,
38947
38948  		// @option autoPanOnFocus: Boolean = true
38949  		// When `true`, the map will pan whenever the marker is focused (via
38950  		// e.g. pressing `tab` on the keyboard) to ensure the marker is
38951  		// visible within the map's bounds
38952  		autoPanOnFocus: true,
38953
38954  		// @section Draggable marker options
38955  		// @option draggable: Boolean = false
38956  		// Whether the marker is draggable with mouse/touch or not.
38957  		draggable: false,
38958
38959  		// @option autoPan: Boolean = false
38960  		// Whether to pan the map when dragging this marker near its edge or not.
38961  		autoPan: false,
38962
38963  		// @option autoPanPadding: Point = Point(50, 50)
38964  		// Distance (in pixels to the left/right and to the top/bottom) of the
38965  		// map edge to start panning the map.
38966  		autoPanPadding: [50, 50],
38967
38968  		// @option autoPanSpeed: Number = 10
38969  		// Number of pixels the map should pan by.
38970  		autoPanSpeed: 10
38971  	},
38972
38973  	/* @section
38974  	 *
38975  	 * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:
38976  	 */
38977
38978  	initialize: function (latlng, options) {
38979  		setOptions(this, options);
38980  		this._latlng = toLatLng(latlng);
38981  	},
38982
38983  	onAdd: function (map) {
38984  		this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;
38985
38986  		if (this._zoomAnimated) {
38987  			map.on('zoomanim', this._animateZoom, this);
38988  		}
38989
38990  		this._initIcon();
38991  		this.update();
38992  	},
38993
38994  	onRemove: function (map) {
38995  		if (this.dragging && this.dragging.enabled()) {
38996  			this.options.draggable = true;
38997  			this.dragging.removeHooks();
38998  		}
38999  		delete this.dragging;
39000
39001  		if (this._zoomAnimated) {
39002  			map.off('zoomanim', this._animateZoom, this);
39003  		}
39004
39005  		this._removeIcon();
39006  		this._removeShadow();
39007  	},
39008
39009  	getEvents: function () {
39010  		return {
39011  			zoom: this.update,
39012  			viewreset: this.update
39013  		};
39014  	},
39015
39016  	// @method getLatLng: LatLng
39017  	// Returns the current geographical position of the marker.
39018  	getLatLng: function () {
39019  		return this._latlng;
39020  	},
39021
39022  	// @method setLatLng(latlng: LatLng): this
39023  	// Changes the marker position to the given point.
39024  	setLatLng: function (latlng) {
39025  		var oldLatLng = this._latlng;
39026  		this._latlng = toLatLng(latlng);
39027  		this.update();
39028
39029  		// @event move: Event
39030  		// Fired when the marker is moved via [`setLatLng`](#marker-setlatlng) or by [dragging](#marker-dragging). Old and new co
vendor: 5,630 bytes, lines 39030-39286
39030ordinates are included in event arguments as `oldLatLng`, `latlng`.
39031  		return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});
39032  	},
39033
39034  	// @method setZIndexOffset(offset: Number): this
39035  	// Changes the [zIndex offset](#marker-zindexoffset) of the marker.
39036  	setZIndexOffset: function (offset) {
39037  		this.options.zIndexOffset = offset;
39038  		return this.update();
39039  	},
39040
39041  	// @method getIcon: Icon
39042  	// Returns the current icon used by the marker
39043  	getIcon: function () {
39044  		return this.options.icon;
39045  	},
39046
39047  	// @method setIcon(icon: Icon): this
39048  	// Changes the marker icon.
39049  	setIcon: function (icon) {
39050
39051  		this.options.icon = icon;
39052
39053  		if (this._map) {
39054  			this._initIcon();
39055  			this.update();
39056  		}
39057
39058  		if (this._popup) {
39059  			this.bindPopup(this._popup, this._popup.options);
39060  		}
39061
39062  		return this;
39063  	},
39064
39065  	getElement: function () {
39066  		return this._icon;
39067  	},
39068
39069  	update: function () {
39070
39071  		if (this._icon && this._map) {
39072  			var pos = this._map.latLngToLayerPoint(this._latlng).round();
39073  			this._setPos(pos);
39074  		}
39075
39076  		return this;
39077  	},
39078
39079  	_initIcon: function () {
39080  		var options = this.options,
39081  		    classToAdd = 'leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
39082
39083  		var icon = options.icon.createIcon(this._icon),
39084  		    addIcon = false;
39085
39086  		// if we're not reusing the icon, remove the old one and init new one
39087  		if (icon !== this._icon) {
39088  			if (this._icon) {
39089  				this._removeIcon();
39090  			}
39091  			addIcon = true;
39092
39093  			if (options.title) {
39094  				icon.title = options.title;
39095  			}
39096
39097  			if (icon.tagName === 'IMG') {
39098  				icon.alt = options.alt || '';
39099  			}
39100  		}
39101
39102  		addClass(icon, classToAdd);
39103
39104  		if (options.keyboard) {
39105  			icon.tabIndex = '0';
39106  			icon.setAttribute('role', 'button');
39107  		}
39108
39109  		this._icon = icon;
39110
39111  		if (options.riseOnHover) {
39112  			this.on({
39113  				mouseover: this._bringToFront,
39114  				mouseout: this._resetZIndex
39115  			});
39116  		}
39117
39118  		if (this.options.autoPanOnFocus) {
39119  			on(icon, 'focus', this._panOnFocus, this);
39120  		}
39121
39122  		var newShadow = options.icon.createShadow(this._shadow),
39123  		    addShadow = false;
39124
39125  		if (newShadow !== this._shadow) {
39126  			this._removeShadow();
39127  			addShadow = true;
39128  		}
39129
39130  		if (newShadow) {
39131  			addClass(newShadow, classToAdd);
39132  			newShadow.alt = '';
39133  		}
39134  		this._shadow = newShadow;
39135
39136
39137  		if (options.opacity < 1) {
39138  			this._updateOpacity();
39139  		}
39140
39141
39142  		if (addIcon) {
39143  			this.getPane().appendChild(this._icon);
39144  		}
39145  		this._initInteraction();
39146  		if (newShadow && addShadow) {
39147  			this.getPane(options.shadowPane).appendChild(this._shadow);
39148  		}
39149  	},
39150
39151  	_removeIcon: function () {
39152  		if (this.options.riseOnHover) {
39153  			this.off({
39154  				mouseover: this._bringToFront,
39155  				mouseout: this._resetZIndex
39156  			});
39157  		}
39158
39159  		if (this.options.autoPanOnFocus) {
39160  			off(this._icon, 'focus', this._panOnFocus, this);
39161  		}
39162
39163  		remove(this._icon);
39164  		this.removeInteractiveTarget(this._icon);
39165
39166  		this._icon = null;
39167  	},
39168
39169  	_removeShadow: function () {
39170  		if (this._shadow) {
39171  			remove(this._shadow);
39172  		}
39173  		this._shadow = null;
39174  	},
39175
39176  	_setPos: function (pos) {
39177
39178  		if (this._icon) {
39179  			setPosition(this._icon, pos);
39180  		}
39181
39182  		if (this._shadow) {
39183  			setPosition(this._shadow, pos);
39184  		}
39185
39186  		this._zIndex = pos.y + this.options.zIndexOffset;
39187
39188  		this._resetZIndex();
39189  	},
39190
39191  	_updateZIndex: function (offset) {
39192  		if (this._icon) {
39193  			this._icon.style.zIndex = this._zIndex + offset;
39194  		}
39195  	},
39196
39197  	_animateZoom: function (opt) {
39198  		var pos = this._map._latLngToNewLayerPoint(this._latlng, opt.zoom, opt.center).round();
39199
39200  		this._setPos(pos);
39201  	},
39202
39203  	_initInteraction: function () {
39204
39205  		if (!this.options.interactive) { return; }
39206
39207  		addClass(this._icon, 'leaflet-interactive');
39208
39209  		this.addInteractiveTarget(this._icon);
39210
39211  		if (MarkerDrag) {
39212  			var draggable = this.options.draggable;
39213  			if (this.dragging) {
39214  				draggable = this.dragging.enabled();
39215  				this.dragging.disable();
39216  			}
39217
39218  			this.dragging = new MarkerDrag(this);
39219
39220  			if (draggable) {
39221  				this.dragging.enable();
39222  			}
39223  		}
39224  	},
39225
39226  	// @method setOpacity(opacity: Number): this
39227  	// Changes the opacity of the marker.
39228  	setOpacity: function (opacity) {
39229  		this.options.opacity = opacity;
39230  		if (this._map) {
39231  			this._updateOpacity();
39232  		}
39233
39234  		return this;
39235  	},
39236
39237  	_updateOpacity: function () {
39238  		var opacity = this.options.opacity;
39239
39240  		if (this._icon) {
39241  			setOpacity(this._icon, opacity);
39242  		}
39243
39244  		if (this._shadow) {
39245  			setOpacity(this._shadow, opacity);
39246  		}
39247  	},
39248
39249  	_bringToFront: function () {
39250  		this._updateZIndex(this.options.riseOffset);
39251  	},
39252
39253  	_resetZIndex: function () {
39254  		this._updateZIndex(0);
39255  	},
39256
39257  	_panOnFocus: function () {
39258  		var map = this._map;
39259  		if (!map) { return; }
39260
39261  		var iconOpts = this.options.icon.options;
39262  		var size = iconOpts.iconSize ? toPoint(iconOpts.iconSize) : toPoint(0, 0);
39263  		var anchor = iconOpts.iconAnchor ? toPoint(iconOpts.iconAnchor) : toPoint(0, 0);
39264
39265  		map.panInside(this._latlng, {
39266  			paddingTopLeft: anchor,
39267  			paddingBottomRight: size.subtract(anchor)
39268  		});
39269  	},
39270
39271  	_getPopupAnchor: function () {
39272  		return this.options.icon.options.popupAnchor;
39273  	},
39274
39275  	_getTooltipAnchor: function () {
39276  		return this.options.icon.options.tooltipAnchor;
39277  	}
39278  });
39279
39280
39281  // factory L.marker(latlng: LatLng, options? : Marker options)
39282
39283  // @factory L.marker(latlng: LatLng, options? : Marker options)
39284  // Instantiates a Marker object given a geographical point and optionally an options object.
39285  function marker(latlng, options) {
39286  	return new Marker(latlng, options);
vendor: 14,084 bytes, lines 39286-39758
39286
39287  }
39288
39289  /*
39290   * @class Path
39291   * @aka L.Path
39292   * @inherits Interactive layer
39293   *
39294   * An abstract class that contains options and constants shared between vector
39295   * overlays (Polygon, Polyline, Circle). Do not use it directly. Extends `Layer`.
39296   */
39297
39298  var Path = Layer.extend({
39299
39300  	// @section
39301  	// @aka Path options
39302  	options: {
39303  		// @option stroke: Boolean = true
39304  		// Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.
39305  		stroke: true,
39306
39307  		// @option color: String = '#3388ff'
39308  		// Stroke color
39309  		color: '#3388ff',
39310
39311  		// @option weight: Number = 3
39312  		// Stroke width in pixels
39313  		weight: 3,
39314
39315  		// @option opacity: Number = 1.0
39316  		// Stroke opacity
39317  		opacity: 1,
39318
39319  		// @option lineCap: String= 'round'
39320  		// A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.
39321  		lineCap: 'round',
39322
39323  		// @option lineJoin: String = 'round'
39324  		// A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.
39325  		lineJoin: 'round',
39326
39327  		// @option dashArray: String = null
39328  		// A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
39329  		dashArray: null,
39330
39331  		// @option dashOffset: String = null
39332  		// A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
39333  		dashOffset: null,
39334
39335  		// @option fill: Boolean = depends
39336  		// Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.
39337  		fill: false,
39338
39339  		// @option fillColor: String = *
39340  		// Fill color. Defaults to the value of the [`color`](#path-color) option
39341  		fillColor: null,
39342
39343  		// @option fillOpacity: Number = 0.2
39344  		// Fill opacity.
39345  		fillOpacity: 0.2,
39346
39347  		// @option fillRule: String = 'evenodd'
39348  		// A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.
39349  		fillRule: 'evenodd',
39350
39351  		// className: '',
39352
39353  		// Option inherited from "Interactive layer" abstract class
39354  		interactive: true,
39355
39356  		// @option bubblingMouseEvents: Boolean = true
39357  		// When `true`, a mouse event on this path will trigger the same event on the map
39358  		// (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
39359  		bubblingMouseEvents: true
39360  	},
39361
39362  	beforeAdd: function (map) {
39363  		// Renderer is set here because we need to call renderer.getEvents
39364  		// before this.getEvents.
39365  		this._renderer = map.getRenderer(this);
39366  	},
39367
39368  	onAdd: function () {
39369  		this._renderer._initPath(this);
39370  		this._reset();
39371  		this._renderer._addPath(this);
39372  	},
39373
39374  	onRemove: function () {
39375  		this._renderer._removePath(this);
39376  	},
39377
39378  	// @method redraw(): this
39379  	// Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.
39380  	redraw: function () {
39381  		if (this._map) {
39382  			this._renderer._updatePath(this);
39383  		}
39384  		return this;
39385  	},
39386
39387  	// @method setStyle(style: Path options): this
39388  	// Changes the appearance of a Path based on the options in the `Path options` object.
39389  	setStyle: function (style) {
39390  		setOptions(this, style);
39391  		if (this._renderer) {
39392  			this._renderer._updateStyle(this);
39393  			if (this.options.stroke && style && Object.prototype.hasOwnProperty.call(style, 'weight')) {
39394  				this._updateBounds();
39395  			}
39396  		}
39397  		return this;
39398  	},
39399
39400  	// @method bringToFront(): this
39401  	// Brings the layer to the top of all path layers.
39402  	bringToFront: function () {
39403  		if (this._renderer) {
39404  			this._renderer._bringToFront(this);
39405  		}
39406  		return this;
39407  	},
39408
39409  	// @method bringToBack(): this
39410  	// Brings the layer to the bottom of all path layers.
39411  	bringToBack: function () {
39412  		if (this._renderer) {
39413  			this._renderer._bringToBack(this);
39414  		}
39415  		return this;
39416  	},
39417
39418  	getElement: function () {
39419  		return this._path;
39420  	},
39421
39422  	_reset: function () {
39423  		// defined in child classes
39424  		this._project();
39425  		this._update();
39426  	},
39427
39428  	_clickTolerance: function () {
39429  		// used when doing hit detection for Canvas layers
39430  		return (this.options.stroke ? this.options.weight / 2 : 0) +
39431  		  (this._renderer.options.tolerance || 0);
39432  	}
39433  });
39434
39435  /*
39436   * @class CircleMarker
39437   * @aka L.CircleMarker
39438   * @inherits Path
39439   *
39440   * A circle of a fixed size with radius specified in pixels. Extends `Path`.
39441   */
39442
39443  var CircleMarker = Path.extend({
39444
39445  	// @section
39446  	// @aka CircleMarker options
39447  	options: {
39448  		fill: true,
39449
39450  		// @option radius: Number = 10
39451  		// Radius of the circle marker, in pixels
39452  		radius: 10
39453  	},
39454
39455  	initialize: function (latlng, options) {
39456  		setOptions(this, options);
39457  		this._latlng = toLatLng(latlng);
39458  		this._radius = this.options.radius;
39459  	},
39460
39461  	// @method setLatLng(latLng: LatLng): this
39462  	// Sets the position of a circle marker to a new location.
39463  	setLatLng: function (latlng) {
39464  		var oldLatLng = this._latlng;
39465  		this._latlng = toLatLng(latlng);
39466  		this.redraw();
39467
39468  		// @event move: Event
39469  		// Fired when the marker is moved via [`setLatLng`](#circlemarker-setlatlng). Old and new coordinates are included in event arguments as `oldLatLng`, `latlng`.
39470  		return this.fire('move', {oldLatLng: oldLatLng, latlng: this._latlng});
39471  	},
39472
39473  	// @method getLatLng(): LatLng
39474  	// Returns the current geographical position of the circle marker
39475  	getLatLng: function () {
39476  		return this._latlng;
39477  	},
39478
39479  	// @method setRadius(radius: Number): this
39480  	// Sets the radius of a circle marker. Units are in pixels.
39481  	setRadius: function (radius) {
39482  		this.options.radius = this._radius = radius;
39483  		return this.redraw();
39484  	},
39485
39486  	// @method getRadius(): Number
39487  	// Returns the current radius of the circle
39488  	getRadius: function () {
39489  		return this._radius;
39490  	},
39491
39492  	setStyle : function (options) {
39493  		var radius = options && options.radius || this._radius;
39494  		Path.prototype.setStyle.call(this, options);
39495  		this.setRadius(radius);
39496  		return this;
39497  	},
39498
39499  	_project: function () {
39500  		this._point = this._map.latLngToLayerPoint(this._latlng);
39501  		this._updateBounds();
39502  	},
39503
39504  	_updateBounds: function () {
39505  		var r = this._radius,
39506  		    r2 = this._radiusY || r,
39507  		    w = this._clickTolerance(),
39508  		    p = [r + w, r2 + w];
39509  		this._pxBounds = new Bounds(this._point.subtract(p), this._point.add(p));
39510  	},
39511
39512  	_update: function () {
39513  		if (this._map) {
39514  			this._updatePath();
39515  		}
39516  	},
39517
39518  	_updatePath: function () {
39519  		this._renderer._updateCircle(this);
39520  	},
39521
39522  	_empty: function () {
39523  		return this._radius && !this._renderer._bounds.intersects(this._pxBounds);
39524  	},
39525
39526  	// Needed by the `Canvas` renderer for interactivity
39527  	_containsPoint: function (p) {
39528  		return p.distanceTo(this._point) <= this._radius + this._clickTolerance();
39529  	}
39530  });
39531
39532
39533  // @factory L.circleMarker(latlng: LatLng, options?: CircleMarker options)
39534  // Instantiates a circle marker object given a geographical point, and an optional options object.
39535  function circleMarker(latlng, options) {
39536  	return new CircleMarker(latlng, options);
39537  }
39538
39539  /*
39540   * @class Circle
39541   * @aka L.Circle
39542   * @inherits CircleMarker
39543   *
39544   * A class for drawing circle overlays on a map. Extends `CircleMarker`.
39545   *
39546   * It's an approximation and starts to diverge from a real circle closer to poles (due to projection distortion).
39547   *
39548   * @example
39549   *
39550   * ```js
39551   * L.circle([50.5, 30.5], {radius: 200}).addTo(map);
39552   * ```
39553   */
39554
39555  var Circle = CircleMarker.extend({
39556
39557  	initialize: function (latlng, options, legacyOptions) {
39558  		if (typeof options === 'number') {
39559  			// Backwards compatibility with 0.7.x factory (latlng, radius, options?)
39560  			options = extend({}, legacyOptions, {radius: options});
39561  		}
39562  		setOptions(this, options);
39563  		this._latlng = toLatLng(latlng);
39564
39565  		if (isNaN(this.options.radius)) { throw new Error('Circle radius cannot be NaN'); }
39566
39567  		// @section
39568  		// @aka Circle options
39569  		// @option radius: Number; Radius of the circle, in meters.
39570  		this._mRadius = this.options.radius;
39571  	},
39572
39573  	// @method setRadius(radius: Number): this
39574  	// Sets the radius of a circle. Units are in meters.
39575  	setRadius: function (radius) {
39576  		this._mRadius = radius;
39577  		return this.redraw();
39578  	},
39579
39580  	// @method getRadius(): Number
39581  	// Returns the current radius of a circle. Units are in meters.
39582  	getRadius: function () {
39583  		return this._mRadius;
39584  	},
39585
39586  	// @method getBounds(): LatLngBounds
39587  	// Returns the `LatLngBounds` of the path.
39588  	getBounds: function () {
39589  		var half = [this._radius, this._radiusY || this._radius];
39590
39591  		return new LatLngBounds(
39592  			this._map.layerPointToLatLng(this._point.subtract(half)),
39593  			this._map.layerPointToLatLng(this._point.add(half)));
39594  	},
39595
39596  	setStyle: Path.prototype.setStyle,
39597
39598  	_project: function () {
39599
39600  		var lng = this._latlng.lng,
39601  		    lat = this._latlng.lat,
39602  		    map = this._map,
39603  		    crs = map.options.crs;
39604
39605  		if (crs.distance === Earth.distance) {
39606  			var d = Math.PI / 180,
39607  			    latR = (this._mRadius / Earth.R) / d,
39608  			    top = map.project([lat + latR, lng]),
39609  			    bottom = map.project([lat - latR, lng]),
39610  			    p = top.add(bottom).divideBy(2),
39611  			    lat2 = map.unproject(p).lat,
39612  			    lngR = Math.acos((Math.cos(latR * d) - Math.sin(lat * d) * Math.sin(lat2 * d)) /
39613  			            (Math.cos(lat * d) * Math.cos(lat2 * d))) / d;
39614
39615  			if (isNaN(lngR) || lngR === 0) {
39616  				lngR = latR / Math.cos(Math.PI / 180 * lat); // Fallback for edge case, #2425
39617  			}
39618
39619  			this._point = p.subtract(map.getPixelOrigin());
39620  			this._radius = isNaN(lngR) ? 0 : p.x - map.project([lat2, lng - lngR]).x;
39621  			this._radiusY = p.y - top.y;
39622
39623  		} else {
39624  			var latlng2 = crs.unproject(crs.project(this._latlng).subtract([this._mRadius, 0]));
39625
39626  			this._point = map.latLngToLayerPoint(this._latlng);
39627  			this._radius = this._point.x - map.latLngToLayerPoint(latlng2).x;
39628  		}
39629
39630  		this._updateBounds();
39631  	}
39632  });
39633
39634  // @factory L.circle(latlng: LatLng, options?: Circle options)
39635  // Instantiates a circle object given a geographical point, and an options object
39636  // which contains the circle radius.
39637  // @alternative
39638  // @factory L.circle(latlng: LatLng, radius: Number, options?: Circle options)
39639  // Obsolete way of instantiating a circle, for compatibility with 0.7.x code.
39640  // Do not use in new applications or plugins.
39641  function circle(latlng, options, legacyOptions) {
39642  	return new Circle(latlng, options, legacyOptions);
39643  }
39644
39645  /*
39646   * @class Polyline
39647   * @aka L.Polyline
39648   * @inherits Path
39649   *
39650   * A class for drawing polyline overlays on a map. Extends `Path`.
39651   *
39652   * @example
39653   *
39654   * ```js
39655   * // create a red polyline from an array of LatLng points
39656   * var latlngs = [
39657   * 	[45.51, -122.68],
39658   * 	[37.77, -122.43],
39659   * 	[34.04, -118.2]
39660   * ];
39661   *
39662   * var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
39663   *
39664   * // zoom the map to the polyline
39665   * map.fitBounds(polyline.getBounds());
39666   * ```
39667   *
39668   * You can also pass a multi-dimensional array to represent a `MultiPolyline` shape:
39669   *
39670   * ```js
39671   * // create a red polyline from an array of arrays of LatLng points
39672   * var latlngs = [
39673   * 	[[45.51, -122.68],
39674   * 	 [37.77, -122.43],
39675   * 	 [34.04, -118.2]],
39676   * 	[[40.78, -73.91],
39677   * 	 [41.83, -87.62],
39678   * 	 [32.76, -96.72]]
39679   * ];
39680   * ```
39681   */
39682
39683
39684  var Polyline = Path.extend({
39685
39686  	// @section
39687  	// @aka Polyline options
39688  	options: {
39689  		// @option smoothFactor: Number = 1.0
39690  		// How much to simplify the polyline on each zoom level. More means
39691  		// better performance and smoother look, and less means more accurate representation.
39692  		smoothFactor: 1.0,
39693
39694  		// @option noClip: Boolean = false
39695  		// Disable polyline clipping.
39696  		noClip: false
39697  	},
39698
39699  	initialize: function (latlngs, options) {
39700  		setOptions(this, options);
39701  		this._setLatLngs(latlngs);
39702  	},
39703
39704  	// @method getLatLngs(): LatLng[]
39705  	// Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.
39706  	getLatLngs: function () {
39707  		return this._latlngs;
39708  	},
39709
39710  	// @method setLatLngs(latlngs: LatLng[]): this
39711  	// Replaces all the points in the polyline with the given array of geographical points.
39712  	setLatLngs: function (latlngs) {
39713  		this._setLatLngs(latlngs);
39714  		return this.redraw();
39715  	},
39716
39717  	// @method isEmpty(): Boolean
39718  	// Returns `true` if the Polyline has no LatLngs.
39719  	isEmpty: function () {
39720  		return !this._latlngs.length;
39721  	},
39722
39723  	// @method closestLayerPoint(p: Point): Point
39724  	// Returns the point closest to `p` on the Polyline.
39725  	closestLayerPoint: function (p) {
39726  		var minDistance = Infinity,
39727  		    minPoint = null,
39728  		    closest = _sqClosestPointOnSegment,
39729  		    p1, p2;
39730
39731  		for (var j = 0, jLen = this._parts.length; j < jLen; j++) {
39732  			var points = this._parts[j];
39733
39734  			for (var i = 1, len = points.length; i < len; i++) {
39735  				p1 = points[i - 1];
39736  				p2 = points[i];
39737
39738  				var sqDist = closest(p, p1, p2, true);
39739
39740  				if (sqDist < minDistance) {
39741  					minDistance = sqDist;
39742  					minPoint = closest(p, p1, p2);
39743  				}
39744  			}
39745  		}
39746  		if (minPoint) {
39747  			minPoint.distance = Math.sqrt(minDistance);
39748  		}
39749  		return minPoint;
39750  	},
39751
39752  	// @method getCenter(): LatLng
39753  	// Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.
39754  	getCenter: function () {
39755  		// throws error when not yet added to map as this center calculation requires projected coordinates
39756  		if (!this._map) {
39757  			throw new Error('Must add layer to map before using getCenter()');
39758  		}
39759
39760  		var i, halfDist, segDist, dist, p1, p2, ratio,
39761  		    points = this._rings[0],
39762  		    len = points.length;
39763
39764  		if (!len) { return null; }
39765
39766  		// polyline centroid algorithm; only uses the first ring if there are multiple
39767
39768  		for (i = 0, halfDist = 0; i < len - 1; i++) {
39769  			halfDist += points[i].distanceTo(points[i + 1]) / 2;
39770  		}
39771
39772  		// The line is so small in the current view that all points are on the same pixel.
39773  		if (halfDist === 0) {
39774  			return this._map.layerPointToLatLng(points[0]);
39775  		}
39776
39777  		for (i = 0, dist = 0; i < len - 1; i++) {
39778  			p1 = points[i];
39779  			p2 = points[i + 1];
39780  			segDist = p1.distanceTo(p2);
39781  			dist += segDist;
39782
39783  			if (dist > halfDist) {
39784  				ratio = (dist - halfDist) / segDist;
39785  				return this._map.layerPointToLatLng([
39786  					p2.x - ratio * (p2.x - p1.x),
39787  					p2.y - ratio * (p2.y - p1.y)
39788  				]);
39789  			}
39790  		}
39791  	},
39792
39793  	// @method getBounds(): LatLngBounds
39794  	// Returns the `LatLngBounds` of the path.
vendor: 11,124 bytes, lines 39795-40191
39795  	getBounds: function () {
39796  		return this._bounds;
39797  	},
39798
39799  	// @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this
39800  	// Adds a given point to the polyline. By default, adds to the first ring of
39801  	// the polyline in case of a multi-polyline, but can be overridden by passing
39802  	// a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).
39803  	addLatLng: function (latlng, latlngs) {
39804  		latlngs = latlngs || this._defaultShape();
39805  		latlng = toLatLng(latlng);
39806  		latlngs.push(latlng);
39807  		this._bounds.extend(latlng);
39808  		return this.redraw();
39809  	},
39810
39811  	_setLatLngs: function (latlngs) {
39812  		this._bounds = new LatLngBounds();
39813  		this._latlngs = this._convertLatLngs(latlngs);
39814  	},
39815
39816  	_defaultShape: function () {
39817  		return isFlat(this._latlngs) ? this._latlngs : this._latlngs[0];
39818  	},
39819
39820  	// recursively convert latlngs input into actual LatLng instances; calculate bounds along the way
39821  	_convertLatLngs: function (latlngs) {
39822  		var result = [],
39823  		    flat = isFlat(latlngs);
39824
39825  		for (var i = 0, len = latlngs.length; i < len; i++) {
39826  			if (flat) {
39827  				result[i] = toLatLng(latlngs[i]);
39828  				this._bounds.extend(result[i]);
39829  			} else {
39830  				result[i] = this._convertLatLngs(latlngs[i]);
39831  			}
39832  		}
39833
39834  		return result;
39835  	},
39836
39837  	_project: function () {
39838  		var pxBounds = new Bounds();
39839  		this._rings = [];
39840  		this._projectLatlngs(this._latlngs, this._rings, pxBounds);
39841
39842  		if (this._bounds.isValid() && pxBounds.isValid()) {
39843  			this._rawPxBounds = pxBounds;
39844  			this._updateBounds();
39845  		}
39846  	},
39847
39848  	_updateBounds: function () {
39849  		var w = this._clickTolerance(),
39850  		    p = new Point(w, w);
39851
39852  		if (!this._rawPxBounds) {
39853  			return;
39854  		}
39855
39856  		this._pxBounds = new Bounds([
39857  			this._rawPxBounds.min.subtract(p),
39858  			this._rawPxBounds.max.add(p)
39859  		]);
39860  	},
39861
39862  	// recursively turns latlngs into a set of rings with projected coordinates
39863  	_projectLatlngs: function (latlngs, result, projectedBounds) {
39864  		var flat = latlngs[0] instanceof LatLng,
39865  		    len = latlngs.length,
39866  		    i, ring;
39867
39868  		if (flat) {
39869  			ring = [];
39870  			for (i = 0; i < len; i++) {
39871  				ring[i] = this._map.latLngToLayerPoint(latlngs[i]);
39872  				projectedBounds.extend(ring[i]);
39873  			}
39874  			result.push(ring);
39875  		} else {
39876  			for (i = 0; i < len; i++) {
39877  				this._projectLatlngs(latlngs[i], result, projectedBounds);
39878  			}
39879  		}
39880  	},
39881
39882  	// clip polyline by renderer bounds so that we have less to render for performance
39883  	_clipPoints: function () {
39884  		var bounds = this._renderer._bounds;
39885
39886  		this._parts = [];
39887  		if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
39888  			return;
39889  		}
39890
39891  		if (this.options.noClip) {
39892  			this._parts = this._rings;
39893  			return;
39894  		}
39895
39896  		var parts = this._parts,
39897  		    i, j, k, len, len2, segment, points;
39898
39899  		for (i = 0, k = 0, len = this._rings.length; i < len; i++) {
39900  			points = this._rings[i];
39901
39902  			for (j = 0, len2 = points.length; j < len2 - 1; j++) {
39903  				segment = clipSegment(points[j], points[j + 1], bounds, j, true);
39904
39905  				if (!segment) { continue; }
39906
39907  				parts[k] = parts[k] || [];
39908  				parts[k].push(segment[0]);
39909
39910  				// if segment goes out of screen, or it's the last one, it's the end of the line part
39911  				if ((segment[1] !== points[j + 1]) || (j === len2 - 2)) {
39912  					parts[k].push(segment[1]);
39913  					k++;
39914  				}
39915  			}
39916  		}
39917  	},
39918
39919  	// simplify each clipped part of the polyline for performance
39920  	_simplifyPoints: function () {
39921  		var parts = this._parts,
39922  		    tolerance = this.options.smoothFactor;
39923
39924  		for (var i = 0, len = parts.length; i < len; i++) {
39925  			parts[i] = simplify(parts[i], tolerance);
39926  		}
39927  	},
39928
39929  	_update: function () {
39930  		if (!this._map) { return; }
39931
39932  		this._clipPoints();
39933  		this._simplifyPoints();
39934  		this._updatePath();
39935  	},
39936
39937  	_updatePath: function () {
39938  		this._renderer._updatePoly(this);
39939  	},
39940
39941  	// Needed by the `Canvas` renderer for interactivity
39942  	_containsPoint: function (p, closed) {
39943  		var i, j, k, len, len2, part,
39944  		    w = this._clickTolerance();
39945
39946  		if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
39947
39948  		// hit detection for polylines
39949  		for (i = 0, len = this._parts.length; i < len; i++) {
39950  			part = this._parts[i];
39951
39952  			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
39953  				if (!closed && (j === 0)) { continue; }
39954
39955  				if (pointToSegmentDistance(p, part[k], part[j]) <= w) {
39956  					return true;
39957  				}
39958  			}
39959  		}
39960  		return false;
39961  	}
39962  });
39963
39964  // @factory L.polyline(latlngs: LatLng[], options?: Polyline options)
39965  // Instantiates a polyline object given an array of geographical points and
39966  // optionally an options object. You can create a `Polyline` object with
39967  // multiple separate lines (`MultiPolyline`) by passing an array of arrays
39968  // of geographic points.
39969  function polyline(latlngs, options) {
39970  	return new Polyline(latlngs, options);
39971  }
39972
39973  // Retrocompat. Allow plugins to support Leaflet versions before and after 1.1.
39974  Polyline._flat = _flat;
39975
39976  /*
39977   * @class Polygon
39978   * @aka L.Polygon
39979   * @inherits Polyline
39980   *
39981   * A class for drawing polygon overlays on a map. Extends `Polyline`.
39982   *
39983   * Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one — it's better to filter out such points.
39984   *
39985   *
39986   * @example
39987   *
39988   * ```js
39989   * // create a red polygon from an array of LatLng points
39990   * var latlngs = [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]];
39991   *
39992   * var polygon = L.polygon(latlngs, {color: 'red'}).addTo(map);
39993   *
39994   * // zoom the map to the polygon
39995   * map.fitBounds(polygon.getBounds());
39996   * ```
39997   *
39998   * You can also pass an array of arrays of latlngs, with the first array representing the outer shape and the other arrays representing holes in the outer shape:
39999   *
40000   * ```js
40001   * var latlngs = [
40002   *   [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
40003   *   [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
40004   * ];
40005   * ```
40006   *
40007   * Additionally, you can pass a multi-dimensional array to represent a MultiPolygon shape.
40008   *
40009   * ```js
40010   * var latlngs = [
40011   *   [ // first polygon
40012   *     [[37, -109.05],[41, -109.03],[41, -102.05],[37, -102.04]], // outer ring
40013   *     [[37.29, -108.58],[40.71, -108.58],[40.71, -102.50],[37.29, -102.50]] // hole
40014   *   ],
40015   *   [ // second polygon
40016   *     [[41, -111.03],[45, -111.04],[45, -104.05],[41, -104.05]]
40017   *   ]
40018   * ];
40019   * ```
40020   */
40021
40022  var Polygon = Polyline.extend({
40023
40024  	options: {
40025  		fill: true
40026  	},
40027
40028  	isEmpty: function () {
40029  		return !this._latlngs.length || !this._latlngs[0].length;
40030  	},
40031
40032  	getCenter: function () {
40033  		// throws error when not yet added to map as this center calculation requires projected coordinates
40034  		if (!this._map) {
40035  			throw new Error('Must add layer to map before using getCenter()');
40036  		}
40037
40038  		var i, j, p1, p2, f, area, x, y, center,
40039  		    points = this._rings[0],
40040  		    len = points.length;
40041
40042  		if (!len) { return null; }
40043
40044  		// polygon centroid algorithm; only uses the first ring if there are multiple
40045
40046  		area = x = y = 0;
40047
40048  		for (i = 0, j = len - 1; i < len; j = i++) {
40049  			p1 = points[i];
40050  			p2 = points[j];
40051
40052  			f = p1.y * p2.x - p2.y * p1.x;
40053  			x += (p1.x + p2.x) * f;
40054  			y += (p1.y + p2.y) * f;
40055  			area += f * 3;
40056  		}
40057
40058  		if (area === 0) {
40059  			// Polygon is so small that all points are on same pixel.
40060  			center = points[0];
40061  		} else {
40062  			center = [x / area, y / area];
40063  		}
40064  		return this._map.layerPointToLatLng(center);
40065  	},
40066
40067  	_convertLatLngs: function (latlngs) {
40068  		var result = Polyline.prototype._convertLatLngs.call(this, latlngs),
40069  		    len = result.length;
40070
40071  		// remove last point if it equals first one
40072  		if (len >= 2 && result[0] instanceof LatLng && result[0].equals(result[len - 1])) {
40073  			result.pop();
40074  		}
40075  		return result;
40076  	},
40077
40078  	_setLatLngs: function (latlngs) {
40079  		Polyline.prototype._setLatLngs.call(this, latlngs);
40080  		if (isFlat(this._latlngs)) {
40081  			this._latlngs = [this._latlngs];
40082  		}
40083  	},
40084
40085  	_defaultShape: function () {
40086  		return isFlat(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];
40087  	},
40088
40089  	_clipPoints: function () {
40090  		// polygons need a different clipping algorithm so we redefine that
40091
40092  		var bounds = this._renderer._bounds,
40093  		    w = this.options.weight,
40094  		    p = new Point(w, w);
40095
40096  		// increase clip padding by stroke width to avoid stroke on clip edges
40097  		bounds = new Bounds(bounds.min.subtract(p), bounds.max.add(p));
40098
40099  		this._parts = [];
40100  		if (!this._pxBounds || !this._pxBounds.intersects(bounds)) {
40101  			return;
40102  		}
40103
40104  		if (this.options.noClip) {
40105  			this._parts = this._rings;
40106  			return;
40107  		}
40108
40109  		for (var i = 0, len = this._rings.length, clipped; i < len; i++) {
40110  			clipped = clipPolygon(this._rings[i], bounds, true);
40111  			if (clipped.length) {
40112  				this._parts.push(clipped);
40113  			}
40114  		}
40115  	},
40116
40117  	_updatePath: function () {
40118  		this._renderer._updatePoly(this, true);
40119  	},
40120
40121  	// Needed by the `Canvas` renderer for interactivity
40122  	_containsPoint: function (p) {
40123  		var inside = false,
40124  		    part, p1, p2, i, j, k, len, len2;
40125
40126  		if (!this._pxBounds || !this._pxBounds.contains(p)) { return false; }
40127
40128  		// ray casting algorithm for detecting if point is in polygon
40129  		for (i = 0, len = this._parts.length; i < len; i++) {
40130  			part = this._parts[i];
40131
40132  			for (j = 0, len2 = part.length, k = len2 - 1; j < len2; k = j++) {
40133  				p1 = part[j];
40134  				p2 = part[k];
40135
40136  				if (((p1.y > p.y) !== (p2.y > p.y)) && (p.x < (p2.x - p1.x) * (p.y - p1.y) / (p2.y - p1.y) + p1.x)) {
40137  					inside = !inside;
40138  				}
40139  			}
40140  		}
40141
40142  		// also check if it's on polygon stroke
40143  		return inside || Polyline.prototype._containsPoint.call(this, p, true);
40144  	}
40145
40146  });
40147
40148
40149  // @factory L.polygon(latlngs: LatLng[], options?: Polyline options)
40150  function polygon(latlngs, options) {
40151  	return new Polygon(latlngs, options);
40152  }
40153
40154  /*
40155   * @class GeoJSON
40156   * @aka L.GeoJSON
40157   * @inherits FeatureGroup
40158   *
40159   * Represents a GeoJSON object or an array of GeoJSON objects. Allows you to parse
40160   * GeoJSON data and display it on the map. Extends `FeatureGroup`.
40161   *
40162   * @example
40163   *
40164   * ```js
40165   * L.geoJSON(data, {
40166   * 	style: function (feature) {
40167   * 		return {color: feature.properties.color};
40168   * 	}
40169   * }).bindPopup(function (layer) {
40170   * 	return layer.feature.properties.description;
40171   * }).addTo(map);
40172   * ```
40173   */
40174
40175  var GeoJSON = FeatureGroup.extend({
40176
40177  	/* @section
40178  	 * @aka GeoJSON options
40179  	 *
40180  	 * @option pointToLayer: Function = *
40181  	 * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally
40182  	 * called when data is added, passing the GeoJSON point feature and its `LatLng`.
40183  	 * The default is to spawn a default `Marker`:
40184  	 * ```js
40185  	 * function(geoJsonPoint, latlng) {
40186  	 * 	return L.marker(latlng);
40187  	 * }
40188  	 * ```
40189  	 *
40190  	 * @option style: Function = *
40191  	 * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,
40192  	 * called internally when data is added.
40193  	 * The default value is to not override any defaults:
40194  	 * ```js
40195  	 * function (geoJsonFeature) {
40196  	 * 	return {}
40197  	 * }
40198  	 * ```
40199  	 *
40200  	 * @option onEachFeature: Function = *
40201  	 * A `Function` that will be called once for each created `Feature`, after it has
40202  	 * been created and styled. Useful for attaching events and popups to features.
40203  	 * The default is to do nothing with the newly created layers:
40204  	 * ```js
40205  	 * function (feature, layer) {}
40206  	 * ```
40207  	 *
40208  	 * @option filter: Function = *
40209  	 * A `Function` that will be used to decide whether to include a feature or not.
40210  	 * The default is to include all features:
40211  	 * ```js
40212  	 * function (geoJsonFeature) {
40213  	 * 	return true;
40214  	 * }
40215  	 * ```
40216  	 * Note: dynamically changing the `filter` option will have effect only on newly
40217  	 * added data. It will _not_ re-evaluate already included features.
40218  	 *
40219  	 * @option coordsToLatLng: Function = *
40220  	 * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.
40221  	 * The default is the `coordsToLatLng` static method.
40222  	 *
40223  	 * @option markersInheritOptions: Boolean = false
40224  	 * Whether default Markers for "Point" type Features inherit from group options.
40225  	 */
40226
40227  	initialize: function (geojson, options) {
40228  		setOptions(this, options);
40229
40230  		this._layers = {};
40231
40232  		if (geojson) {
40233  			this.addData(geojson);
40234  		}
40235  	},
40236
40237  	// @method addData( <GeoJSON> data ): this
40238  	// Adds a GeoJSON object to the layer.
40239  	addData: function (geojson) {
40240  		var features = isArray(geojson) ? geojson : geojson.features,
40241  		    i, len, feature;
40242
40243  		if (features) {
40244  			for (i = 0, len = features.length; i < len; i++) {
40245  				// only add this if geometry or geometries are set and not null
40246  				feature = features[i];
40247  				if (feature.geometries || feature.geometry || feature.features || feature.coordinates) {
40248  					this.addData(feature);
40249  				}
40250  			}
40251  			return this;
40252  		}
40253
40254  		var options = this.options;
40255
40256  		if (options.filter && !options.filter(geojson)) { return this; }
40257
40258  		var layer = geometryToLayer(geojson, options);
40259  		if (!layer) {
40260  			return this;
40261  		}
40262  		layer.feature = asFeature(geojson);
40263
40264  		layer.defaultOptions = layer.options;
40265  		this.resetStyle(layer);
40266
40267  		if (options.onEachFeature) {
40268  			options.onEachFeature(geojson, layer);
40269  		}
40270
40271  		return this.addLayer(layer);
40272  	},
40273
40274  	// @method resetStyle( <Path> layer? ): this
40275  	// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.
40276  	// If `layer` is omitted, the style of all features in the current layer is reset.
40277  	resetStyle: function (layer) {
40278  		if (layer === undefined) {
40279  			return this.eachLayer(this.resetStyle, this);
40280  		}
40281  		// reset any custom styles
40282  		layer.options = extend({}, layer.defaultOptions);
40283  		this._setLayerStyle(layer, this.options.style);
40284  		return this;
40285  	},
40286
40287  	// @method setStyle( <Function> style ): this
40288  	// Changes styles of GeoJSON vector layers with the given style function.
40289  	setStyle: function (style) {
40290  		return this.eachLayer(function (layer) {
40291  			this._setLayerStyle(layer, style);
40292  		}, this);
40293  	},
40294
40295  	_setLayerStyle: function (layer, style) {
40296  		if (layer.setStyle) {
40297  			if (typeof style === 'function') {
40298  				style = style(layer.feature);
40299  			}
40300  			layer.setStyle(style);
40301  		}
40302  	}
40303  });
40304
40305  // @section
40306  // There are several static functions which can be called without instantiating L.GeoJSON:
40307
40308  // @function geometryToLayer(featureData: Object, options?: GeoJSON options): Layer
40309  // Creates a `Layer` from a given GeoJSON feature. Can use a custom
40310  // [`pointToLayer`](#geojson-pointtolayer) and/or [`coordsToLatLng`](#geojson-coordstolatlng)
40311  // functions if provided as options.
40312  function geometryToLayer(geojson, options) {
40313
40314  	var geometry = geojson.type === 'Feature' ? geojson.geometry : geojson,
40315  	    coords = geometry ? geometry.coordinates : null,
40316  	    layers = [],
40317  	    pointToLayer = options && options.pointToLayer,
40318  	    _coordsToLatLng = options && options.coordsToLatLng || coordsToLatLng,
40319  	    latlng, latlngs, i, len;
40320
40321  	if (!coords && !geometry) {
40322  		return null;
40323  	}
40324
40325  	switch (geometry.type) {
40326  	case 'Point':
40327  		latlng = _coordsToLatLng(coords);
40328  		return _pointToLayer(pointToLayer, geojson, latlng, options);
40329
40330  	case 'MultiPoint':
vendor: 54,946 bytes, lines 40331-42134
40331  		for (i = 0, len = coords.length; i < len; i++) {
40332  			latlng = _coordsToLatLng(coords[i]);
40333  			layers.push(_pointToLayer(pointToLayer, geojson, latlng, options));
40334  		}
40335  		return new FeatureGroup(layers);
40336
40337  	case 'LineString':
40338  	case 'MultiLineString':
40339  		latlngs = coordsToLatLngs(coords, geometry.type === 'LineString' ? 0 : 1, _coordsToLatLng);
40340  		return new Polyline(latlngs, options);
40341
40342  	case 'Polygon':
40343  	case 'MultiPolygon':
40344  		latlngs = coordsToLatLngs(coords, geometry.type === 'Polygon' ? 1 : 2, _coordsToLatLng);
40345  		return new Polygon(latlngs, options);
40346
40347  	case 'GeometryCollection':
40348  		for (i = 0, len = geometry.geometries.length; i < len; i++) {
40349  			var layer = geometryToLayer({
40350  				geometry: geometry.geometries[i],
40351  				type: 'Feature',
40352  				properties: geojson.properties
40353  			}, options);
40354
40355  			if (layer) {
40356  				layers.push(layer);
40357  			}
40358  		}
40359  		return new FeatureGroup(layers);
40360
40361  	default:
40362  		throw new Error('Invalid GeoJSON object.');
40363  	}
40364  }
40365
40366  function _pointToLayer(pointToLayerFn, geojson, latlng, options) {
40367  	return pointToLayerFn ?
40368  		pointToLayerFn(geojson, latlng) :
40369  		new Marker(latlng, options && options.markersInheritOptions && options);
40370  }
40371
40372  // @function coordsToLatLng(coords: Array): LatLng
40373  // Creates a `LatLng` object from an array of 2 numbers (longitude, latitude)
40374  // or 3 numbers (longitude, latitude, altitude) used in GeoJSON for points.
40375  function coordsToLatLng(coords) {
40376  	return new LatLng(coords[1], coords[0], coords[2]);
40377  }
40378
40379  // @function coordsToLatLngs(coords: Array, levelsDeep?: Number, coordsToLatLng?: Function): Array
40380  // Creates a multidimensional array of `LatLng`s from a GeoJSON coordinates array.
40381  // `levelsDeep` specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default).
40382  // Can use a custom [`coordsToLatLng`](#geojson-coordstolatlng) function.
40383  function coordsToLatLngs(coords, levelsDeep, _coordsToLatLng) {
40384  	var latlngs = [];
40385
40386  	for (var i = 0, len = coords.length, latlng; i < len; i++) {
40387  		latlng = levelsDeep ?
40388  			coordsToLatLngs(coords[i], levelsDeep - 1, _coordsToLatLng) :
40389  			(_coordsToLatLng || coordsToLatLng)(coords[i]);
40390
40391  		latlngs.push(latlng);
40392  	}
40393
40394  	return latlngs;
40395  }
40396
40397  // @function latLngToCoords(latlng: LatLng, precision?: Number|false): Array
40398  // Reverse of [`coordsToLatLng`](#geojson-coordstolatlng)
40399  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function.
40400  function latLngToCoords(latlng, precision) {
40401  	latlng = toLatLng(latlng);
40402  	return latlng.alt !== undefined ?
40403  		[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision), formatNum(latlng.alt, precision)] :
40404  		[formatNum(latlng.lng, precision), formatNum(latlng.lat, precision)];
40405  }
40406
40407  // @function latLngsToCoords(latlngs: Array, levelsDeep?: Number, closed?: Boolean, precision?: Number|false): Array
40408  // Reverse of [`coordsToLatLngs`](#geojson-coordstolatlngs)
40409  // `closed` determines whether the first point should be appended to the end of the array to close the feature, only used when `levelsDeep` is 0. False by default.
40410  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function.
40411  function latLngsToCoords(latlngs, levelsDeep, closed, precision) {
40412  	var coords = [];
40413
40414  	for (var i = 0, len = latlngs.length; i < len; i++) {
40415  		coords.push(levelsDeep ?
40416  			latLngsToCoords(latlngs[i], levelsDeep - 1, closed, precision) :
40417  			latLngToCoords(latlngs[i], precision));
40418  	}
40419
40420  	if (!levelsDeep && closed) {
40421  		coords.push(coords[0]);
40422  	}
40423
40424  	return coords;
40425  }
40426
40427  function getFeature(layer, newGeometry) {
40428  	return layer.feature ?
40429  		extend({}, layer.feature, {geometry: newGeometry}) :
40430  		asFeature(newGeometry);
40431  }
40432
40433  // @function asFeature(geojson: Object): Object
40434  // Normalize GeoJSON geometries/features into GeoJSON features.
40435  function asFeature(geojson) {
40436  	if (geojson.type === 'Feature' || geojson.type === 'FeatureCollection') {
40437  		return geojson;
40438  	}
40439
40440  	return {
40441  		type: 'Feature',
40442  		properties: {},
40443  		geometry: geojson
40444  	};
40445  }
40446
40447  var PointToGeoJSON = {
40448  	toGeoJSON: function (precision) {
40449  		return getFeature(this, {
40450  			type: 'Point',
40451  			coordinates: latLngToCoords(this.getLatLng(), precision)
40452  		});
40453  	}
40454  };
40455
40456  // @namespace Marker
40457  // @section Other methods
40458  // @method toGeoJSON(precision?: Number|false): Object
40459  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
40460  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the marker (as a GeoJSON `Point` Feature).
40461  Marker.include(PointToGeoJSON);
40462
40463  // @namespace CircleMarker
40464  // @method toGeoJSON(precision?: Number|false): Object
40465  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
40466  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the circle marker (as a GeoJSON `Point` Feature).
40467  Circle.include(PointToGeoJSON);
40468  CircleMarker.include(PointToGeoJSON);
40469
40470
40471  // @namespace Polyline
40472  // @method toGeoJSON(precision?: Number|false): Object
40473  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
40474  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polyline (as a GeoJSON `LineString` or `MultiLineString` Feature).
40475  Polyline.include({
40476  	toGeoJSON: function (precision) {
40477  		var multi = !isFlat(this._latlngs);
40478
40479  		var coords = latLngsToCoords(this._latlngs, multi ? 1 : 0, false, precision);
40480
40481  		return getFeature(this, {
40482  			type: (multi ? 'Multi' : '') + 'LineString',
40483  			coordinates: coords
40484  		});
40485  	}
40486  });
40487
40488  // @namespace Polygon
40489  // @method toGeoJSON(precision?: Number|false): Object
40490  // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
40491  // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the polygon (as a GeoJSON `Polygon` or `MultiPolygon` Feature).
40492  Polygon.include({
40493  	toGeoJSON: function (precision) {
40494  		var holes = !isFlat(this._latlngs),
40495  		    multi = holes && !isFlat(this._latlngs[0]);
40496
40497  		var coords = latLngsToCoords(this._latlngs, multi ? 2 : holes ? 1 : 0, true, precision);
40498
40499  		if (!holes) {
40500  			coords = [coords];
40501  		}
40502
40503  		return getFeature(this, {
40504  			type: (multi ? 'Multi' : '') + 'Polygon',
40505  			coordinates: coords
40506  		});
40507  	}
40508  });
40509
40510
40511  // @namespace LayerGroup
40512  LayerGroup.include({
40513  	toMultiPoint: function (precision) {
40514  		var coords = [];
40515
40516  		this.eachLayer(function (layer) {
40517  			coords.push(layer.toGeoJSON(precision).geometry.coordinates);
40518  		});
40519
40520  		return getFeature(this, {
40521  			type: 'MultiPoint',
40522  			coordinates: coords
40523  		});
40524  	},
40525
40526  	// @method toGeoJSON(precision?: Number|false): Object
40527  	// Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
40528  	// Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).
40529  	toGeoJSON: function (precision) {
40530
40531  		var type = this.feature && this.feature.geometry && this.feature.geometry.type;
40532
40533  		if (type === 'MultiPoint') {
40534  			return this.toMultiPoint(precision);
40535  		}
40536
40537  		var isGeometryCollection = type === 'GeometryCollection',
40538  		    jsons = [];
40539
40540  		this.eachLayer(function (layer) {
40541  			if (layer.toGeoJSON) {
40542  				var json = layer.toGeoJSON(precision);
40543  				if (isGeometryCollection) {
40544  					jsons.push(json.geometry);
40545  				} else {
40546  					var feature = asFeature(json);
40547  					// Squash nested feature collections
40548  					if (feature.type === 'FeatureCollection') {
40549  						jsons.push.apply(jsons, feature.features);
40550  					} else {
40551  						jsons.push(feature);
40552  					}
40553  				}
40554  			}
40555  		});
40556
40557  		if (isGeometryCollection) {
40558  			return getFeature(this, {
40559  				geometries: jsons,
40560  				type: 'GeometryCollection'
40561  			});
40562  		}
40563
40564  		return {
40565  			type: 'FeatureCollection',
40566  			features: jsons
40567  		};
40568  	}
40569  });
40570
40571  // @namespace GeoJSON
40572  // @factory L.geoJSON(geojson?: Object, options?: GeoJSON options)
40573  // Creates a GeoJSON layer. Optionally accepts an object in
40574  // [GeoJSON format](https://tools.ietf.org/html/rfc7946) to display on the map
40575  // (you can alternatively add it later with `addData` method) and an `options` object.
40576  function geoJSON(geojson, options) {
40577  	return new GeoJSON(geojson, options);
40578  }
40579
40580  // Backward compatibility.
40581  var geoJson = geoJSON;
40582
40583  /*
40584   * @class ImageOverlay
40585   * @aka L.ImageOverlay
40586   * @inherits Interactive layer
40587   *
40588   * Used to load and display a single image over specific bounds of the map. Extends `Layer`.
40589   *
40590   * @example
40591   *
40592   * ```js
40593   * var imageUrl = 'https://maps.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
40594   * 	imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];
40595   * L.imageOverlay(imageUrl, imageBounds).addTo(map);
40596   * ```
40597   */
40598
40599  var ImageOverlay = Layer.extend({
40600
40601  	// @section
40602  	// @aka ImageOverlay options
40603  	options: {
40604  		// @option opacity: Number = 1.0
40605  		// The opacity of the image overlay.
40606  		opacity: 1,
40607
40608  		// @option alt: String = ''
40609  		// Text for the `alt` attribute of the image (useful for accessibility).
40610  		alt: '',
40611
40612  		// @option interactive: Boolean = false
40613  		// If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.
40614  		interactive: false,
40615
40616  		// @option crossOrigin: Boolean|String = false
40617  		// Whether the crossOrigin attribute will be added to the image.
40618  		// If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.
40619  		// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
40620  		crossOrigin: false,
40621
40622  		// @option errorOverlayUrl: String = ''
40623  		// URL to the overlay image to show in place of the overlay that failed to load.
40624  		errorOverlayUrl: '',
40625
40626  		// @option zIndex: Number = 1
40627  		// The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.
40628  		zIndex: 1,
40629
40630  		// @option className: String = ''
40631  		// A custom class name to assign to the image. Empty by default.
40632  		className: ''
40633  	},
40634
40635  	initialize: function (url, bounds, options) { // (String, LatLngBounds, Object)
40636  		this._url = url;
40637  		this._bounds = toLatLngBounds(bounds);
40638
40639  		setOptions(this, options);
40640  	},
40641
40642  	onAdd: function () {
40643  		if (!this._image) {
40644  			this._initImage();
40645
40646  			if (this.options.opacity < 1) {
40647  				this._updateOpacity();
40648  			}
40649  		}
40650
40651  		if (this.options.interactive) {
40652  			addClass(this._image, 'leaflet-interactive');
40653  			this.addInteractiveTarget(this._image);
40654  		}
40655
40656  		this.getPane().appendChild(this._image);
40657  		this._reset();
40658  	},
40659
40660  	onRemove: function () {
40661  		remove(this._image);
40662  		if (this.options.interactive) {
40663  			this.removeInteractiveTarget(this._image);
40664  		}
40665  	},
40666
40667  	// @method setOpacity(opacity: Number): this
40668  	// Sets the opacity of the overlay.
40669  	setOpacity: function (opacity) {
40670  		this.options.opacity = opacity;
40671
40672  		if (this._image) {
40673  			this._updateOpacity();
40674  		}
40675  		return this;
40676  	},
40677
40678  	setStyle: function (styleOpts) {
40679  		if (styleOpts.opacity) {
40680  			this.setOpacity(styleOpts.opacity);
40681  		}
40682  		return this;
40683  	},
40684
40685  	// @method bringToFront(): this
40686  	// Brings the layer to the top of all overlays.
40687  	bringToFront: function () {
40688  		if (this._map) {
40689  			toFront(this._image);
40690  		}
40691  		return this;
40692  	},
40693
40694  	// @method bringToBack(): this
40695  	// Brings the layer to the bottom of all overlays.
40696  	bringToBack: function () {
40697  		if (this._map) {
40698  			toBack(this._image);
40699  		}
40700  		return this;
40701  	},
40702
40703  	// @method setUrl(url: String): this
40704  	// Changes the URL of the image.
40705  	setUrl: function (url) {
40706  		this._url = url;
40707
40708  		if (this._image) {
40709  			this._image.src = url;
40710  		}
40711  		return this;
40712  	},
40713
40714  	// @method setBounds(bounds: LatLngBounds): this
40715  	// Update the bounds that this ImageOverlay covers
40716  	setBounds: function (bounds) {
40717  		this._bounds = toLatLngBounds(bounds);
40718
40719  		if (this._map) {
40720  			this._reset();
40721  		}
40722  		return this;
40723  	},
40724
40725  	getEvents: function () {
40726  		var events = {
40727  			zoom: this._reset,
40728  			viewreset: this._reset
40729  		};
40730
40731  		if (this._zoomAnimated) {
40732  			events.zoomanim = this._animateZoom;
40733  		}
40734
40735  		return events;
40736  	},
40737
40738  	// @method setZIndex(value: Number): this
40739  	// Changes the [zIndex](#imageoverlay-zindex) of the image overlay.
40740  	setZIndex: function (value) {
40741  		this.options.zIndex = value;
40742  		this._updateZIndex();
40743  		return this;
40744  	},
40745
40746  	// @method getBounds(): LatLngBounds
40747  	// Get the bounds that this ImageOverlay covers
40748  	getBounds: function () {
40749  		return this._bounds;
40750  	},
40751
40752  	// @method getElement(): HTMLElement
40753  	// Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)
40754  	// used by this overlay.
40755  	getElement: function () {
40756  		return this._image;
40757  	},
40758
40759  	_initImage: function () {
40760  		var wasElementSupplied = this._url.tagName === 'IMG';
40761  		var img = this._image = wasElementSupplied ? this._url : create$1('img');
40762
40763  		addClass(img, 'leaflet-image-layer');
40764  		if (this._zoomAnimated) { addClass(img, 'leaflet-zoom-animated'); }
40765  		if (this.options.className) { addClass(img, this.options.className); }
40766
40767  		img.onselectstart = falseFn;
40768  		img.onmousemove = falseFn;
40769
40770  		// @event load: Event
40771  		// Fired when the ImageOverlay layer has loaded its image
40772  		img.onload = bind(this.fire, this, 'load');
40773  		img.onerror = bind(this._overlayOnError, this, 'error');
40774
40775  		if (this.options.crossOrigin || this.options.crossOrigin === '') {
40776  			img.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
40777  		}
40778
40779  		if (this.options.zIndex) {
40780  			this._updateZIndex();
40781  		}
40782
40783  		if (wasElementSupplied) {
40784  			this._url = img.src;
40785  			return;
40786  		}
40787
40788  		img.src = this._url;
40789  		img.alt = this.options.alt;
40790  	},
40791
40792  	_animateZoom: function (e) {
40793  		var scale = this._map.getZoomScale(e.zoom),
40794  		    offset = this._map._latLngBoundsToNewLayerBounds(this._bounds, e.zoom, e.center).min;
40795
40796  		setTransform(this._image, offset, scale);
40797  	},
40798
40799  	_reset: function () {
40800  		var image = this._image,
40801  		    bounds = new Bounds(
40802  		        this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
40803  		        this._map.latLngToLayerPoint(this._bounds.getSouthEast())),
40804  		    size = bounds.getSize();
40805
40806  		setPosition(image, bounds.min);
40807
40808  		image.style.width  = size.x + 'px';
40809  		image.style.height = size.y + 'px';
40810  	},
40811
40812  	_updateOpacity: function () {
40813  		setOpacity(this._image, this.options.opacity);
40814  	},
40815
40816  	_updateZIndex: function () {
40817  		if (this._image && this.options.zIndex !== undefined && this.options.zIndex !== null) {
40818  			this._image.style.zIndex = this.options.zIndex;
40819  		}
40820  	},
40821
40822  	_overlayOnError: function () {
40823  		// @event error: Event
40824  		// Fired when the ImageOverlay layer fails to load its image
40825  		this.fire('error');
40826
40827  		var errorUrl = this.options.errorOverlayUrl;
40828  		if (errorUrl && this._url !== errorUrl) {
40829  			this._url = errorUrl;
40830  			this._image.src = errorUrl;
40831  		}
40832  	},
40833
40834  	// @method getCenter(): LatLng
40835  	// Returns the center of the ImageOverlay.
40836  	getCenter: function () {
40837  		return this._bounds.getCenter();
40838  	}
40839  });
40840
40841  // @factory L.imageOverlay(imageUrl: String, bounds: LatLngBounds, options?: ImageOverlay options)
40842  // Instantiates an image overlay object given the URL of the image and the
40843  // geographical bounds it is tied to.
40844  var imageOverlay = function (url, bounds, options) {
40845  	return new ImageOverlay(url, bounds, options);
40846  };
40847
40848  /*
40849   * @class VideoOverlay
40850   * @aka L.VideoOverlay
40851   * @inherits ImageOverlay
40852   *
40853   * Used to load and display a video player over specific bounds of the map. Extends `ImageOverlay`.
40854   *
40855   * A video overlay uses the [`<video>`](https://developer.mozilla.org/docs/Web/HTML/Element/video)
40856   * HTML5 element.
40857   *
40858   * @example
40859   *
40860   * ```js
40861   * var videoUrl = 'https://www.mapbox.com/bites/00188/patricia_nasa.webm',
40862   * 	videoBounds = [[ 32, -130], [ 13, -100]];
40863   * L.videoOverlay(videoUrl, videoBounds ).addTo(map);
40864   * ```
40865   */
40866
40867  var VideoOverlay = ImageOverlay.extend({
40868
40869  	// @section
40870  	// @aka VideoOverlay options
40871  	options: {
40872  		// @option autoplay: Boolean = true
40873  		// Whether the video starts playing automatically when loaded.
40874  		// On some browsers autoplay will only work with `muted: true`
40875  		autoplay: true,
40876
40877  		// @option loop: Boolean = true
40878  		// Whether the video will loop back to the beginning when played.
40879  		loop: true,
40880
40881  		// @option keepAspectRatio: Boolean = true
40882  		// Whether the video will save aspect ratio after the projection.
40883  		// Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)
40884  		keepAspectRatio: true,
40885
40886  		// @option muted: Boolean = false
40887  		// Whether the video starts on mute when loaded.
40888  		muted: false,
40889
40890  		// @option playsInline: Boolean = true
40891  		// Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.
40892  		playsInline: true
40893  	},
40894
40895  	_initImage: function () {
40896  		var wasElementSupplied = this._url.tagName === 'VIDEO';
40897  		var vid = this._image = wasElementSupplied ? this._url : create$1('video');
40898
40899  		addClass(vid, 'leaflet-image-layer');
40900  		if (this._zoomAnimated) { addClass(vid, 'leaflet-zoom-animated'); }
40901  		if (this.options.className) { addClass(vid, this.options.className); }
40902
40903  		vid.onselectstart = falseFn;
40904  		vid.onmousemove = falseFn;
40905
40906  		// @event load: Event
40907  		// Fired when the video has finished loading the first frame
40908  		vid.onloadeddata = bind(this.fire, this, 'load');
40909
40910  		if (wasElementSupplied) {
40911  			var sourceElements = vid.getElementsByTagName('source');
40912  			var sources = [];
40913  			for (var j = 0; j < sourceElements.length; j++) {
40914  				sources.push(sourceElements[j].src);
40915  			}
40916
40917  			this._url = (sourceElements.length > 0) ? sources : [vid.src];
40918  			return;
40919  		}
40920
40921  		if (!isArray(this._url)) { this._url = [this._url]; }
40922
40923  		if (!this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(vid.style, 'objectFit')) {
40924  			vid.style['objectFit'] = 'fill';
40925  		}
40926  		vid.autoplay = !!this.options.autoplay;
40927  		vid.loop = !!this.options.loop;
40928  		vid.muted = !!this.options.muted;
40929  		vid.playsInline = !!this.options.playsInline;
40930  		for (var i = 0; i < this._url.length; i++) {
40931  			var source = create$1('source');
40932  			source.src = this._url[i];
40933  			vid.appendChild(source);
40934  		}
40935  	}
40936
40937  	// @method getElement(): HTMLVideoElement
40938  	// Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)
40939  	// used by this overlay.
40940  });
40941
40942
40943  // @factory L.videoOverlay(video: String|Array|HTMLVideoElement, bounds: LatLngBounds, options?: VideoOverlay options)
40944  // Instantiates an image overlay object given the URL of the video (or array of URLs, or even a video element) and the
40945  // geographical bounds it is tied to.
40946
40947  function videoOverlay(video, bounds, options) {
40948  	return new VideoOverlay(video, bounds, options);
40949  }
40950
40951  /*
40952   * @class SVGOverlay
40953   * @aka L.SVGOverlay
40954   * @inherits ImageOverlay
40955   *
40956   * Used to load, display and provide DOM access to an SVG file over specific bounds of the map. Extends `ImageOverlay`.
40957   *
40958   * An SVG overlay uses the [`<svg>`](https://developer.mozilla.org/docs/Web/SVG/Element/svg) element.
40959   *
40960   * @example
40961   *
40962   * ```js
40963   * var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
40964   * svgElement.setAttribute('xmlns', "http://www.w3.org/2000/svg");
40965   * svgElement.setAttribute('viewBox', "0 0 200 200");
40966   * svgElement.innerHTML = '<rect width="200" height="200"/><rect x="75" y="23" width="50" height="50" style="fill:red"/><rect x="75" y="123" width="50" height="50" style="fill:#0013ff"/>';
40967   * var svgElementBounds = [ [ 32, -130 ], [ 13, -100 ] ];
40968   * L.svgOverlay(svgElement, svgElementBounds).addTo(map);
40969   * ```
40970   */
40971
40972  var SVGOverlay = ImageOverlay.extend({
40973  	_initImage: function () {
40974  		var el = this._image = this._url;
40975
40976  		addClass(el, 'leaflet-image-layer');
40977  		if (this._zoomAnimated) { addClass(el, 'leaflet-zoom-animated'); }
40978  		if (this.options.className) { addClass(el, this.options.className); }
40979
40980  		el.onselectstart = falseFn;
40981  		el.onmousemove = falseFn;
40982  	}
40983
40984  	// @method getElement(): SVGElement
40985  	// Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)
40986  	// used by this overlay.
40987  });
40988
40989
40990  // @factory L.svgOverlay(svg: String|SVGElement, bounds: LatLngBounds, options?: SVGOverlay options)
40991  // Instantiates an image overlay object given an SVG element and the geographical bounds it is tied to.
40992  // A viewBox attribute is required on the SVG element to zoom in and out properly.
40993
40994  function svgOverlay(el, bounds, options) {
40995  	return new SVGOverlay(el, bounds, options);
40996  }
40997
40998  /*
40999   * @class DivOverlay
41000   * @inherits Interactive layer
41001   * @aka L.DivOverlay
41002   * Base model for L.Popup and L.Tooltip. Inherit from it for custom overlays like plugins.
41003   */
41004
41005  // @namespace DivOverlay
41006  var DivOverlay = Layer.extend({
41007
41008  	// @section
41009  	// @aka DivOverlay options
41010  	options: {
41011  		// @option interactive: Boolean = false
41012  		// If true, the popup/tooltip will listen to the mouse events.
41013  		interactive: false,
41014
41015  		// @option offset: Point = Point(0, 0)
41016  		// The offset of the overlay position.
41017  		offset: [0, 0],
41018
41019  		// @option className: String = ''
41020  		// A custom CSS class name to assign to the overlay.
41021  		className: '',
41022
41023  		// @option pane: String = undefined
41024  		// `Map pane` where the overlay will be added.
41025  		pane: undefined
41026  	},
41027
41028  	initialize: function (options, source) {
41029  		setOptions(this, options);
41030
41031  		this._source = source;
41032  	},
41033
41034  	// @method openOn(map: Map): this
41035  	// Adds the overlay to the map.
41036  	// Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.
41037  	openOn: function (map) {
41038  		map = arguments.length ? map : this._source._map; // experimental, not the part of public api
41039  		if (!map.hasLayer(this)) {
41040  			map.addLayer(this);
41041  		}
41042  		return this;
41043  	},
41044
41045  	// @method close(): this
41046  	// Closes the overlay.
41047  	// Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`
41048  	// and `layer.closePopup()`/`.closeTooltip()`.
41049  	close: function () {
41050  		if (this._map) {
41051  			this._map.removeLayer(this);
41052  		}
41053  		return this;
41054  	},
41055
41056  	// @method toggle(layer?: Layer): this
41057  	// Opens or closes the overlay bound to layer depending on its current state.
41058  	// Argument may be omitted only for overlay bound to layer.
41059  	// Alternative to `layer.togglePopup()`/`.toggleTooltip()`.
41060  	toggle: function (layer) {
41061  		if (this._map) {
41062  			this.close();
41063  		} else {
41064  			if (arguments.length) {
41065  				this._source = layer;
41066  			} else {
41067  				layer = this._source;
41068  			}
41069  			this._prepareOpen();
41070
41071  			// open the overlay on the map
41072  			this.openOn(layer._map);
41073  		}
41074  		return this;
41075  	},
41076
41077  	onAdd: function (map) {
41078  		this._zoomAnimated = map._zoomAnimated;
41079
41080  		if (!this._container) {
41081  			this._initLayout();
41082  		}
41083
41084  		if (map._fadeAnimated) {
41085  			setOpacity(this._container, 0);
41086  		}
41087
41088  		clearTimeout(this._removeTimeout);
41089  		this.getPane().appendChild(this._container);
41090  		this.update();
41091
41092  		if (map._fadeAnimated) {
41093  			setOpacity(this._container, 1);
41094  		}
41095
41096  		this.bringToFront();
41097
41098  		if (this.options.interactive) {
41099  			addClass(this._container, 'leaflet-interactive');
41100  			this.addInteractiveTarget(this._container);
41101  		}
41102  	},
41103
41104  	onRemove: function (map) {
41105  		if (map._fadeAnimated) {
41106  			setOpacity(this._container, 0);
41107  			this._removeTimeout = setTimeout(bind(remove, undefined, this._container), 200);
41108  		} else {
41109  			remove(this._container);
41110  		}
41111
41112  		if (this.options.interactive) {
41113  			removeClass(this._container, 'leaflet-interactive');
41114  			this.removeInteractiveTarget(this._container);
41115  		}
41116  	},
41117
41118  	// @namespace DivOverlay
41119  	// @method getLatLng: LatLng
41120  	// Returns the geographical point of the overlay.
41121  	getLatLng: function () {
41122  		return this._latlng;
41123  	},
41124
41125  	// @method setLatLng(latlng: LatLng): this
41126  	// Sets the geographical point where the overlay will open.
41127  	setLatLng: function (latlng) {
41128  		this._latlng = toLatLng(latlng);
41129  		if (this._map) {
41130  			this._updatePosition();
41131  			this._adjustPan();
41132  		}
41133  		return this;
41134  	},
41135
41136  	// @method getContent: String|HTMLElement
41137  	// Returns the content of the overlay.
41138  	getContent: function () {
41139  		return this._content;
41140  	},
41141
41142  	// @method setContent(htmlContent: String|HTMLElement|Function): this
41143  	// Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.
41144  	// The function should return a `String` or `HTMLElement` to be used in the overlay.
41145  	setContent: function (content) {
41146  		this._content = content;
41147  		this.update();
41148  		return this;
41149  	},
41150
41151  	// @method getElement: String|HTMLElement
41152  	// Returns the HTML container of the overlay.
41153  	getElement: function () {
41154  		return this._container;
41155  	},
41156
41157  	// @method update: null
41158  	// Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.
41159  	update: function () {
41160  		if (!this._map) { return; }
41161
41162  		this._container.style.visibility = 'hidden';
41163
41164  		this._updateContent();
41165  		this._updateLayout();
41166  		this._updatePosition();
41167
41168  		this._container.style.visibility = '';
41169
41170  		this._adjustPan();
41171  	},
41172
41173  	getEvents: function () {
41174  		var events = {
41175  			zoom: this._updatePosition,
41176  			viewreset: this._updatePosition
41177  		};
41178
41179  		if (this._zoomAnimated) {
41180  			events.zoomanim = this._animateZoom;
41181  		}
41182  		return events;
41183  	},
41184
41185  	// @method isOpen: Boolean
41186  	// Returns `true` when the overlay is visible on the map.
41187  	isOpen: function () {
41188  		return !!this._map && this._map.hasLayer(this);
41189  	},
41190
41191  	// @method bringToFront: this
41192  	// Brings this overlay in front of other overlays (in the same map pane).
41193  	bringToFront: function () {
41194  		if (this._map) {
41195  			toFront(this._container);
41196  		}
41197  		return this;
41198  	},
41199
41200  	// @method bringToBack: this
41201  	// Brings this overlay to the back of other overlays (in the same map pane).
41202  	bringToBack: function () {
41203  		if (this._map) {
41204  			toBack(this._container);
41205  		}
41206  		return this;
41207  	},
41208
41209  	// prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)
41210  	_prepareOpen: function (latlng) {
41211  		var source = this._source;
41212  		if (!source._map) { return false; }
41213
41214  		if (source instanceof FeatureGroup) {
41215  			source = null;
41216  			var layers = this._source._layers;
41217  			for (var id in layers) {
41218  				if (layers[id]._map) {
41219  					source = layers[id];
41220  					break;
41221  				}
41222  			}
41223  			if (!source) { return false; } // Unable to get source layer.
41224
41225  			// set overlay source to this layer
41226  			this._source = source;
41227  		}
41228
41229  		if (!latlng) {
41230  			if (source.getCenter) {
41231  				latlng = source.getCenter();
41232  			} else if (source.getLatLng) {
41233  				latlng = source.getLatLng();
41234  			} else if (source.getBounds) {
41235  				latlng = source.getBounds().getCenter();
41236  			} else {
41237  				throw new Error('Unable to get source layer LatLng.');
41238  			}
41239  		}
41240  		this.setLatLng(latlng);
41241
41242  		if (this._map) {
41243  			// update the overlay (content, layout, etc...)
41244  			this.update();
41245  		}
41246
41247  		return true;
41248  	},
41249
41250  	_updateContent: function () {
41251  		if (!this._content) { return; }
41252
41253  		var node = this._contentNode;
41254  		var content = (typeof this._content === 'function') ? this._content(this._source || this) : this._content;
41255
41256  		if (typeof content === 'string') {
41257  			node.innerHTML = content;
41258  		} else {
41259  			while (node.hasChildNodes()) {
41260  				node.removeChild(node.firstChild);
41261  			}
41262  			node.appendChild(content);
41263  		}
41264
41265  		// @namespace DivOverlay
41266  		// @section DivOverlay events
41267  		// @event contentupdate: Event
41268  		// Fired when the content of the overlay is updated
41269  		this.fire('contentupdate');
41270  	},
41271
41272  	_updatePosition: function () {
41273  		if (!this._map) { return; }
41274
41275  		var pos = this._map.latLngToLayerPoint(this._latlng),
41276  		    offset = toPoint(this.options.offset),
41277  		    anchor = this._getAnchor();
41278
41279  		if (this._zoomAnimated) {
41280  			setPosition(this._container, pos.add(anchor));
41281  		} else {
41282  			offset = offset.add(pos).add(anchor);
41283  		}
41284
41285  		var bottom = this._containerBottom = -offset.y,
41286  		    left = this._containerLeft = -Math.round(this._containerWidth / 2) + offset.x;
41287
41288  		// bottom position the overlay in case the height of the overlay changes (images loading etc)
41289  		this._container.style.bottom = bottom + 'px';
41290  		this._container.style.left = left + 'px';
41291  	},
41292
41293  	_getAnchor: function () {
41294  		return [0, 0];
41295  	}
41296
41297  });
41298
41299  Map.include({
41300  	_initOverlay: function (OverlayClass, content, latlng, options) {
41301  		var overlay = content;
41302  		if (!(overlay instanceof OverlayClass)) {
41303  			overlay = new OverlayClass(options).setContent(content);
41304  		}
41305  		if (latlng) {
41306  			overlay.setLatLng(latlng);
41307  		}
41308  		return overlay;
41309  	}
41310  });
41311
41312
41313  Layer.include({
41314  	_initOverlay: function (OverlayClass, old, content, options) {
41315  		var overlay = content;
41316  		if (overlay instanceof OverlayClass) {
41317  			setOptions(overlay, options);
41318  			overlay._source = this;
41319  		} else {
41320  			overlay = (old && !options) ? old : new OverlayClass(options, this);
41321  			overlay.setContent(content);
41322  		}
41323  		return overlay;
41324  	}
41325  });
41326
41327  /*
41328   * @class Popup
41329   * @inherits DivOverlay
41330   * @aka L.Popup
41331   * Used to open popups in certain places of the map. Use [Map.openPopup](#map-openpopup) to
41332   * open popups while making sure that only one popup is open at one time
41333   * (recommended for usability), or use [Map.addLayer](#map-addlayer) to open as many as you want.
41334   *
41335   * @example
41336   *
41337   * If you want to just bind a popup to marker click and then open it, it's really easy:
41338   *
41339   * ```js
41340   * marker.bindPopup(popupContent).openPopup();
41341   * ```
41342   * Path overlays like polylines also have a `bindPopup` method.
41343   * Here's a more complicated way to open a popup on a map:
41344   *
41345   * ```js
41346   * var popup = L.popup()
41347   * 	.setLatLng(latlng)
41348   * 	.setContent('<p>Hello world!<br />This is a nice popup.</p>')
41349   * 	.openOn(map);
41350   * ```
41351   */
41352
41353
41354  // @namespace Popup
41355  var Popup = DivOverlay.extend({
41356
41357  	// @section
41358  	// @aka Popup options
41359  	options: {
41360  		// @option pane: String = 'popupPane'
41361  		// `Map pane` where the popup will be added.
41362  		pane: 'popupPane',
41363
41364  		// @option offset: Point = Point(0, 7)
41365  		// The offset of the popup position.
41366  		offset: [0, 7],
41367
41368  		// @option maxWidth: Number = 300
41369  		// Max width of the popup, in pixels.
41370  		maxWidth: 300,
41371
41372  		// @option minWidth: Number = 50
41373  		// Min width of the popup, in pixels.
41374  		minWidth: 50,
41375
41376  		// @option maxHeight: Number = null
41377  		// If set, creates a scrollable container of the given height
41378  		// inside a popup if its content exceeds it.
41379  		maxHeight: null,
41380
41381  		// @option autoPan: Boolean = true
41382  		// Set it to `false` if you don't want the map to do panning animation
41383  		// to fit the opened popup.
41384  		autoPan: true,
41385
41386  		// @option autoPanPaddingTopLeft: Point = null
41387  		// The margin between the popup and the top left corner of the map
41388  		// view after autopanning was performed.
41389  		autoPanPaddingTopLeft: null,
41390
41391  		// @option autoPanPaddingBottomRight: Point = null
41392  		// The margin between the popup and the bottom right corner of the map
41393  		// view after autopanning was performed.
41394  		autoPanPaddingBottomRight: null,
41395
41396  		// @option autoPanPadding: Point = Point(5, 5)
41397  		// Equivalent of setting both top left and bottom right autopan padding to the same value.
41398  		autoPanPadding: [5, 5],
41399
41400  		// @option keepInView: Boolean = false
41401  		// Set it to `true` if you want to prevent users from panning the popup
41402  		// off of the screen while it is open.
41403  		keepInView: false,
41404
41405  		// @option closeButton: Boolean = true
41406  		// Controls the presence of a close button in the popup.
41407  		closeButton: true,
41408
41409  		// @option autoClose: Boolean = true
41410  		// Set it to `false` if you want to override the default behavior of
41411  		// the popup closing when another popup is opened.
41412  		autoClose: true,
41413
41414  		// @option closeOnEscapeKey: Boolean = true
41415  		// Set it to `false` if you want to override the default behavior of
41416  		// the ESC key for closing of the popup.
41417  		closeOnEscapeKey: true,
41418
41419  		// @option closeOnClick: Boolean = *
41420  		// Set it if you want to override the default behavior of the popup closing when user clicks
41421  		// on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.
41422
41423  		// @option className: String = ''
41424  		// A custom CSS class name to assign to the popup.
41425  		className: ''
41426  	},
41427
41428  	// @namespace Popup
41429  	// @method openOn(map: Map): this
41430  	// Alternative to `map.openPopup(popup)`.
41431  	// Adds the popup to the map and closes the previous one.
41432  	openOn: function (map) {
41433  		map = arguments.length ? map : this._source._map; // experimental, not the part of public api
41434
41435  		if (!map.hasLayer(this) && map._popup && map._popup.options.autoClose) {
41436  			map.removeLayer(map._popup);
41437  		}
41438  		map._popup = this;
41439
41440  		return DivOverlay.prototype.openOn.call(this, map);
41441  	},
41442
41443  	onAdd: function (map) {
41444  		DivOverlay.prototype.onAdd.call(this, map);
41445
41446  		// @namespace Map
41447  		// @section Popup events
41448  		// @event popupopen: PopupEvent
41449  		// Fired when a popup is opened in the map
41450  		map.fire('popupopen', {popup: this});
41451
41452  		if (this._source) {
41453  			// @namespace Layer
41454  			// @section Popup events
41455  			// @event popupopen: PopupEvent
41456  			// Fired when a popup bound to this layer is opened
41457  			this._source.fire('popupopen', {popup: this}, true);
41458  			// For non-path layers, we toggle the popup when clicking
41459  			// again the layer, so prevent the map to reopen it.
41460  			if (!(this._source instanceof Path)) {
41461  				this._source.on('preclick', stopPropagation);
41462  			}
41463  		}
41464  	},
41465
41466  	onRemove: function (map) {
41467  		DivOverlay.prototype.onRemove.call(this, map);
41468
41469  		// @namespace Map
41470  		// @section Popup events
41471  		// @event popupclose: PopupEvent
41472  		// Fired when a popup in the map is closed
41473  		map.fire('popupclose', {popup: this});
41474
41475  		if (this._source) {
41476  			// @namespace Layer
41477  			// @section Popup events
41478  			// @event popupclose: PopupEvent
41479  			// Fired when a popup bound to this layer is closed
41480  			this._source.fire('popupclose', {popup: this}, true);
41481  			if (!(this._source instanceof Path)) {
41482  				this._source.off('preclick', stopPropagation);
41483  			}
41484  		}
41485  	},
41486
41487  	getEvents: function () {
41488  		var events = DivOverlay.prototype.getEvents.call(this);
41489
41490  		if (this.options.closeOnClick !== undefined ? this.options.closeOnClick : this._map.options.closePopupOnClick) {
41491  			events.preclick = this.close;
41492  		}
41493
41494  		if (this.options.keepInView) {
41495  			events.moveend = this._adjustPan;
41496  		}
41497
41498  		return events;
41499  	},
41500
41501  	_initLayout: function () {
41502  		var prefix = 'leaflet-popup',
41503  		    container = this._container = create$1('div',
41504  			prefix + ' ' + (this.options.className || '') +
41505  			' leaflet-zoom-animated');
41506
41507  		var wrapper = this._wrapper = create$1('div', prefix + '-content-wrapper', container);
41508  		this._contentNode = create$1('div', prefix + '-content', wrapper);
41509
41510  		disableClickPropagation(container);
41511  		disableScrollPropagation(this._contentNode);
41512  		on(container, 'contextmenu', stopPropagation);
41513
41514  		this._tipContainer = create$1('div', prefix + '-tip-container', container);
41515  		this._tip = create$1('div', prefix + '-tip', this._tipContainer);
41516
41517  		if (this.options.closeButton) {
41518  			var closeButton = this._closeButton = create$1('a', prefix + '-close-button', container);
41519  			closeButton.setAttribute('role', 'button'); // overrides the implicit role=link of <a> elements #7399
41520  			closeButton.setAttribute('aria-label', 'Close popup');
41521  			closeButton.href = '#close';
41522  			closeButton.innerHTML = '<span aria-hidden="true">&#215;</span>';
41523
41524  			on(closeButton, 'click', this.close, this);
41525  		}
41526  	},
41527
41528  	_updateLayout: function () {
41529  		var container = this._contentNode,
41530  		    style = container.style;
41531
41532  		style.width = '';
41533  		style.whiteSpace = 'nowrap';
41534
41535  		var width = container.offsetWidth;
41536  		width = Math.min(width, this.options.maxWidth);
41537  		width = Math.max(width, this.options.minWidth);
41538
41539  		style.width = (width + 1) + 'px';
41540  		style.whiteSpace = '';
41541
41542  		style.height = '';
41543
41544  		var height = container.offsetHeight,
41545  		    maxHeight = this.options.maxHeight,
41546  		    scrolledClass = 'leaflet-popup-scrolled';
41547
41548  		if (maxHeight && height > maxHeight) {
41549  			style.height = maxHeight + 'px';
41550  			addClass(container, scrolledClass);
41551  		} else {
41552  			removeClass(container, scrolledClass);
41553  		}
41554
41555  		this._containerWidth = this._container.offsetWidth;
41556  	},
41557
41558  	_animateZoom: function (e) {
41559  		var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center),
41560  		    anchor = this._getAnchor();
41561  		setPosition(this._container, pos.add(anchor));
41562  	},
41563
41564  	_adjustPan: function (e) {
41565  		if (!this.options.autoPan) { return; }
41566  		if (this._map._panAnim) { this._map._panAnim.stop(); }
41567
41568  		var map = this._map,
41569  		    marginBottom = parseInt(getStyle(this._container, 'marginBottom'), 10) || 0,
41570  		    containerHeight = this._container.offsetHeight + marginBottom,
41571  		    containerWidth = this._containerWidth,
41572  		    layerPos = new Point(this._containerLeft, -containerHeight - this._containerBottom);
41573
41574  		layerPos._add(getPosition(this._container));
41575
41576  		var containerPos = map.layerPointToContainerPoint(layerPos),
41577  		    padding = toPoint(this.options.autoPanPadding),
41578  		    paddingTL = toPoint(this.options.autoPanPaddingTopLeft || padding),
41579  		    paddingBR = toPoint(this.options.autoPanPaddingBottomRight || padding),
41580  		    size = map.getSize(),
41581  		    dx = 0,
41582  		    dy = 0;
41583
41584  		if (containerPos.x + containerWidth + paddingBR.x > size.x) { // right
41585  			dx = containerPos.x + containerWidth - size.x + paddingBR.x;
41586  		}
41587  		if (containerPos.x - dx - paddingTL.x < 0) { // left
41588  			dx = containerPos.x - paddingTL.x;
41589  		}
41590  		if (containerPos.y + containerHeight + paddingBR.y > size.y) { // bottom
41591  			dy = containerPos.y + containerHeight - size.y + paddingBR.y;
41592  		}
41593  		if (containerPos.y - dy - paddingTL.y < 0) { // top
41594  			dy = containerPos.y - paddingTL.y;
41595  		}
41596
41597  		// @namespace Map
41598  		// @section Popup events
41599  		// @event autopanstart: Event
41600  		// Fired when the map starts autopanning when opening a popup.
41601  		if (dx || dy) {
41602  			map
41603  			    .fire('autopanstart')
41604  			    .panBy([dx, dy], {animate: e && e.type === 'moveend'});
41605  		}
41606  	},
41607
41608  	_getAnchor: function () {
41609  		// Where should we anchor the popup on the source layer?
41610  		return toPoint(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);
41611  	}
41612
41613  });
41614
41615  // @namespace Popup
41616  // @factory L.popup(options?: Popup options, source?: Layer)
41617  // Instantiates a `Popup` object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the popup with a reference to the Layer to which it refers.
41618  var popup = function (options, source) {
41619  	return new Popup(options, source);
41620  };
41621
41622
41623  /* @namespace Map
41624   * @section Interaction Options
41625   * @option closePopupOnClick: Boolean = true
41626   * Set it to `false` if you don't want popups to close when user clicks the map.
41627   */
41628  Map.mergeOptions({
41629  	closePopupOnClick: true
41630  });
41631
41632
41633  // @namespace Map
41634  // @section Methods for Layers and Controls
41635  Map.include({
41636  	// @method openPopup(popup: Popup): this
41637  	// Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).
41638  	// @alternative
41639  	// @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this
41640  	// Creates a popup with the specified content and options and opens it in the given point on a map.
41641  	openPopup: function (popup, latlng, options) {
41642  		this._initOverlay(Popup, popup, latlng, options)
41643  		  .openOn(this);
41644
41645  		return this;
41646  	},
41647
41648  	// @method closePopup(popup?: Popup): this
41649  	// Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).
41650  	closePopup: function (popup) {
41651  		popup = arguments.length ? popup : this._popup;
41652  		if (popup) {
41653  			popup.close();
41654  		}
41655  		return this;
41656  	}
41657  });
41658
41659  /*
41660   * @namespace Layer
41661   * @section Popup methods example
41662   *
41663   * All layers share a set of methods convenient for binding popups to it.
41664   *
41665   * ```js
41666   * var layer = L.Polygon(latlngs).bindPopup('Hi There!').addTo(map);
41667   * layer.openPopup();
41668   * layer.closePopup();
41669   * ```
41670   *
41671   * Popups will also be automatically opened when the layer is clicked on and closed when the layer is removed from the map or another popup is opened.
41672   */
41673
41674  // @section Popup methods
41675  Layer.include({
41676
41677  	// @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this
41678  	// Binds a popup to the layer with the passed `content` and sets up the
41679  	// necessary event listeners. If a `Function` is passed it will receive
41680  	// the layer as the first argument and should return a `String` or `HTMLElement`.
41681  	bindPopup: function (content, options) {
41682  		this._popup = this._initOverlay(Popup, this._popup, content, options);
41683  		if (!this._popupHandlersAdded) {
41684  			this.on({
41685  				click: this._openPopup,
41686  				keypress: this._onKeyPress,
41687  				remove: this.closePopup,
41688  				move: this._movePopup
41689  			});
41690  			this._popupHandlersAdded = true;
41691  		}
41692
41693  		return this;
41694  	},
41695
41696  	// @method unbindPopup(): this
41697  	// Removes the popup previously bound with `bindPopup`.
41698  	unbindPopup: function () {
41699  		if (this._popup) {
41700  			this.off({
41701  				click: this._openPopup,
41702  				keypress: this._onKeyPress,
41703  				remove: this.closePopup,
41704  				move: this._movePopup
41705  			});
41706  			this._popupHandlersAdded = false;
41707  			this._popup = null;
41708  		}
41709  		return this;
41710  	},
41711
41712  	// @method openPopup(latlng?: LatLng): this
41713  	// Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.
41714  	openPopup: function (latlng) {
41715  		if (this._popup && this._popup._prepareOpen(latlng)) {
41716  			// open the popup on the map
41717  			this._popup.openOn(this._map);
41718  		}
41719  		return this;
41720  	},
41721
41722  	// @method closePopup(): this
41723  	// Closes the popup bound to this layer if it is open.
41724  	closePopup: function () {
41725  		if (this._popup) {
41726  			this._popup.close();
41727  		}
41728  		return this;
41729  	},
41730
41731  	// @method togglePopup(): this
41732  	// Opens or closes the popup bound to this layer depending on its current state.
41733  	togglePopup: function () {
41734  		if (this._popup) {
41735  			this._popup.toggle(this);
41736  		}
41737  		return this;
41738  	},
41739
41740  	// @method isPopupOpen(): boolean
41741  	// Returns `true` if the popup bound to this layer is currently open.
41742  	isPopupOpen: function () {
41743  		return (this._popup ? this._popup.isOpen() : false);
41744  	},
41745
41746  	// @method setPopupContent(content: String|HTMLElement|Popup): this
41747  	// Sets the content of the popup bound to this layer.
41748  	setPopupContent: function (content) {
41749  		if (this._popup) {
41750  			this._popup.setContent(content);
41751  		}
41752  		return this;
41753  	},
41754
41755  	// @method getPopup(): Popup
41756  	// Returns the popup bound to this layer.
41757  	getPopup: function () {
41758  		return this._popup;
41759  	},
41760
41761  	_openPopup: function (e) {
41762  		if (!this._popup || !this._map) {
41763  			return;
41764  		}
41765  		// prevent map click
41766  		stop(e);
41767
41768  		var target = e.layer || e.target;
41769  		if (this._popup._source === target && !(target instanceof Path)) {
41770  			// treat it like a marker and figure out
41771  			// if we should toggle it open/closed
41772  			if (this._map.hasLayer(this._popup)) {
41773  				this.closePopup();
41774  			} else {
41775  				this.openPopup(e.latlng);
41776  			}
41777  			return;
41778  		}
41779  		this._popup._source = target;
41780  		this.openPopup(e.latlng);
41781  	},
41782
41783  	_movePopup: function (e) {
41784  		this._popup.setLatLng(e.latlng);
41785  	},
41786
41787  	_onKeyPress: function (e) {
41788  		if (e.originalEvent.keyCode === 13) {
41789  			this._openPopup(e);
41790  		}
41791  	}
41792  });
41793
41794  /*
41795   * @class Tooltip
41796   * @inherits DivOverlay
41797   * @aka L.Tooltip
41798   * Used to display small texts on top of map layers.
41799   *
41800   * @example
41801   *
41802   * ```js
41803   * marker.bindTooltip("my tooltip text").openTooltip();
41804   * ```
41805   * Note about tooltip offset. Leaflet takes two options in consideration
41806   * for computing tooltip offsetting:
41807   * - the `offset` Tooltip option: it defaults to [0, 0], and it's specific to one tooltip.
41808   *   Add a positive x offset to move the tooltip to the right, and a positive y offset to
41809   *   move it to the bottom. Negatives will move to the left and top.
41810   * - the `tooltipAnchor` Icon option: this will only be considered for Marker. You
41811   *   should adapt this value if you use a custom icon.
41812   */
41813
41814
41815  // @namespace Tooltip
41816  var Tooltip = DivOverlay.extend({
41817
41818  	// @section
41819  	// @aka Tooltip options
41820  	options: {
41821  		// @option pane: String = 'tooltipPane'
41822  		// `Map pane` where the tooltip will be added.
41823  		pane: 'tooltipPane',
41824
41825  		// @option offset: Point = Point(0, 0)
41826  		// Optional offset of the tooltip position.
41827  		offset: [0, 0],
41828
41829  		// @option direction: String = 'auto'
41830  		// Direction where to open the tooltip. Possible values are: `right`, `left`,
41831  		// `top`, `bottom`, `center`, `auto`.
41832  		// `auto` will dynamically switch between `right` and `left` according to the tooltip
41833  		// position on the map.
41834  		direction: 'auto',
41835
41836  		// @option permanent: Boolean = false
41837  		// Whether to open the tooltip permanently or only on mouseover.
41838  		permanent: false,
41839
41840  		// @option sticky: Boolean = false
41841  		// If true, the tooltip will follow the mouse instead of being fixed at the feature center.
41842  		sticky: false,
41843
41844  		// @option opacity: Number = 0.9
41845  		// Tooltip container opacity.
41846  		opacity: 0.9
41847  	},
41848
41849  	onAdd: function (map) {
41850  		DivOverlay.prototype.onAdd.call(this, map);
41851  		this.setOpacity(this.options.opacity);
41852
41853  		// @namespace Map
41854  		// @section Tooltip events
41855  		// @event tooltipopen: TooltipEvent
41856  		// Fired when a tooltip is opened in the map.
41857  		map.fire('tooltipopen', {tooltip: this});
41858
41859  		if (this._source) {
41860  			this.addEventParent(this._source);
41861
41862  			// @namespace Layer
41863  			// @section Tooltip events
41864  			// @event tooltipopen: TooltipEvent
41865  			// Fired when a tooltip bound to this layer is opened.
41866  			this._source.fire('tooltipopen', {tooltip: this}, true);
41867  		}
41868  	},
41869
41870  	onRemove: function (map) {
41871  		DivOverlay.prototype.onRemove.call(this, map);
41872
41873  		// @namespace Map
41874  		// @section Tooltip events
41875  		// @event tooltipclose: TooltipEvent
41876  		// Fired when a tooltip in the map is closed.
41877  		map.fire('tooltipclose', {tooltip: this});
41878
41879  		if (this._source) {
41880  			this.removeEventParent(this._source);
41881
41882  			// @namespace Layer
41883  			// @section Tooltip events
41884  			// @event tooltipclose: TooltipEvent
41885  			// Fired when a tooltip bound to this layer is closed.
41886  			this._source.fire('tooltipclose', {tooltip: this}, true);
41887  		}
41888  	},
41889
41890  	getEvents: function () {
41891  		var events = DivOverlay.prototype.getEvents.call(this);
41892
41893  		if (!this.options.permanent) {
41894  			events.preclick = this.close;
41895  		}
41896
41897  		return events;
41898  	},
41899
41900  	_initLayout: function () {
41901  		var prefix = 'leaflet-tooltip',
41902  		    className = prefix + ' ' + (this.options.className || '') + ' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide');
41903
41904  		this._contentNode = this._container = create$1('div', className);
41905  	},
41906
41907  	_updateLayout: function () {},
41908
41909  	_adjustPan: function () {},
41910
41911  	_setPosition: function (pos) {
41912  		var subX, subY,
41913  		    map = this._map,
41914  		    container = this._container,
41915  		    centerPoint = map.latLngToContainerPoint(map.getCenter()),
41916  		    tooltipPoint = map.layerPointToContainerPoint(pos),
41917  		    direction = this.options.direction,
41918  		    tooltipWidth = container.offsetWidth,
41919  		    tooltipHeight = container.offsetHeight,
41920  		    offset = toPoint(this.options.offset),
41921  		    anchor = this._getAnchor();
41922
41923  		if (direction === 'top') {
41924  			subX = tooltipWidth / 2;
41925  			subY = tooltipHeight;
41926  		} else if (direction === 'bottom') {
41927  			subX = tooltipWidth / 2;
41928  			subY = 0;
41929  		} else if (direction === 'center') {
41930  			subX = tooltipWidth / 2;
41931  			subY = tooltipHeight / 2;
41932  		} else if (direction === 'right') {
41933  			subX = 0;
41934  			subY = tooltipHeight / 2;
41935  		} else if (direction === 'left') {
41936  			subX = tooltipWidth;
41937  			subY = tooltipHeight / 2;
41938  		} else if (tooltipPoint.x < centerPoint.x) {
41939  			direction = 'right';
41940  			subX = 0;
41941  			subY = tooltipHeight / 2;
41942  		} else {
41943  			direction = 'left';
41944  			subX = tooltipWidth + (offset.x + anchor.x) * 2;
41945  			subY = tooltipHeight / 2;
41946  		}
41947
41948  		pos = pos.subtract(toPoint(subX, subY, true)).add(offset).add(anchor);
41949
41950  		removeClass(container, 'leaflet-tooltip-right');
41951  		removeClass(container, 'leaflet-tooltip-left');
41952  		removeClass(container, 'leaflet-tooltip-top');
41953  		removeClass(container, 'leaflet-tooltip-bottom');
41954  		addClass(container, 'leaflet-tooltip-' + direction);
41955  		setPosition(container, pos);
41956  	},
41957
41958  	_updatePosition: function () {
41959  		var pos = this._map.latLngToLayerPoint(this._latlng);
41960  		this._setPosition(pos);
41961  	},
41962
41963  	setOpacity: function (opacity) {
41964  		this.options.opacity = opacity;
41965
41966  		if (this._container) {
41967  			setOpacity(this._container, opacity);
41968  		}
41969  	},
41970
41971  	_animateZoom: function (e) {
41972  		var pos = this._map._latLngToNewLayerPoint(this._latlng, e.zoom, e.center);
41973  		this._setPosition(pos);
41974  	},
41975
41976  	_getAnchor: function () {
41977  		// Where should we anchor the tooltip on the source layer?
41978  		return toPoint(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
41979  	}
41980
41981  });
41982
41983  // @namespace Tooltip
41984  // @factory L.tooltip(options?: Tooltip options, source?: Layer)
41985  // Instantiates a Tooltip object given an optional `options` object that describes its appearance and location and an optional `source` object that is used to tag the tooltip with a reference to the Layer to which it refers.
41986  var tooltip = function (options, source) {
41987  	return new Tooltip(options, source);
41988  };
41989
41990  // @namespace Map
41991  // @section Methods for Layers and Controls
41992  Map.include({
41993
41994  	// @method openTooltip(tooltip: Tooltip): this
41995  	// Opens the specified tooltip.
41996  	// @alternative
41997  	// @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this
41998  	// Creates a tooltip with the specified content and options and open it.
41999  	openTooltip: function (tooltip, latlng, options) {
42000  		this._initOverlay(Tooltip, tooltip, latlng, options)
42001  		  .openOn(this);
42002
42003  		return this;
42004  	},
42005
42006  	// @method closeTooltip(tooltip: Tooltip): this
42007  	// Closes the tooltip given as parameter.
42008  	closeTooltip: function (tooltip) {
42009  		tooltip.close();
42010  		return this;
42011  	}
42012
42013  });
42014
42015  /*
42016   * @namespace Layer
42017   * @section Tooltip methods example
42018   *
42019   * All layers share a set of methods convenient for binding tooltips to it.
42020   *
42021   * ```js
42022   * var layer = L.Polygon(latlngs).bindTooltip('Hi There!').addTo(map);
42023   * layer.openTooltip();
42024   * layer.closeTooltip();
42025   * ```
42026   */
42027
42028  // @section Tooltip methods
42029  Layer.include({
42030
42031  	// @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this
42032  	// Binds a tooltip to the layer with the passed `content` and sets up the
42033  	// necessary event listeners. If a `Function` is passed it will receive
42034  	// the layer as the first argument and should return a `String` or `HTMLElement`.
42035  	bindTooltip: function (content, options) {
42036
42037  		if (this._tooltip && this.isTooltipOpen()) {
42038  			this.unbindTooltip();
42039  		}
42040
42041  		this._tooltip = this._initOverlay(Tooltip, this._tooltip, content, options);
42042  		this._initTooltipInteractions();
42043
42044  		if (this._tooltip.options.permanent && this._map && this._map.hasLayer(this)) {
42045  			this.openTooltip();
42046  		}
42047
42048  		return this;
42049  	},
42050
42051  	// @method unbindTooltip(): this
42052  	// Removes the tooltip previously bound with `bindTooltip`.
42053  	unbindTooltip: function () {
42054  		if (this._tooltip) {
42055  			this._initTooltipInteractions(true);
42056  			this.closeTooltip();
42057  			this._tooltip = null;
42058  		}
42059  		return this;
42060  	},
42061
42062  	_initTooltipInteractions: function (remove) {
42063  		if (!remove && this._tooltipHandlersAdded) { return; }
42064  		var onOff = remove ? 'off' : 'on',
42065  		    events = {
42066  			remove: this.closeTooltip,
42067  			move: this._moveTooltip
42068  		    };
42069  		if (!this._tooltip.options.permanent) {
42070  			events.mouseover = this._openTooltip;
42071  			events.mouseout = this.closeTooltip;
42072  			events.click = this._openTooltip;
42073  		} else {
42074  			events.add = this._openTooltip;
42075  		}
42076  		if (this._tooltip.options.sticky) {
42077  			events.mousemove = this._moveTooltip;
42078  		}
42079  		this[onOff](events);
42080  		this._tooltipHandlersAdded = !remove;
42081  	},
42082
42083  	// @method openTooltip(latlng?: LatLng): this
42084  	// Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.
42085  	openTooltip: function (latlng) {
42086  		if (this._tooltip && this._tooltip._prepareOpen(latlng)) {
42087  			// open the tooltip on the map
42088  			this._tooltip.openOn(this._map);
42089  		}
42090  		return this;
42091  	},
42092
42093  	// @method closeTooltip(): this
42094  	// Closes the tooltip bound to this layer if it is open.
42095  	closeTooltip: function () {
42096  		if (this._tooltip) {
42097  			return this._tooltip.close();
42098  		}
42099  	},
42100
42101  	// @method toggleTooltip(): this
42102  	// Opens or closes the tooltip bound to this layer depending on its current state.
42103  	toggleTooltip: function () {
42104  		if (this._tooltip) {
42105  			this._tooltip.toggle(this);
42106  		}
42107  		return this;
42108  	},
42109
42110  	// @method isTooltipOpen(): boolean
42111  	// Returns `true` if the tooltip bound to this layer is currently open.
42112  	isTooltipOpen: function () {
42113  		return this._tooltip.isOpen();
42114  	},
42115
42116  	// @method setTooltipContent(content: String|HTMLElement|Tooltip): this
42117  	// Sets the content of the tooltip bound to this layer.
42118  	setTooltipContent: function (content) {
42119  		if (this._tooltip) {
42120  			this._tooltip.setContent(content);
42121  		}
42122  		return this;
42123  	},
42124
42125  	// @method getTooltip(): Tooltip
42126  	// Returns the tooltip bound to this layer.
42127  	getTooltip: function () {
42128  		return this._tooltip;
42129  	},
42130
42131  	_openTooltip: function (e) {
42132  		if (!this._tooltip || !this._map || (this._map.dragging && this._map.dragging.moving())) {
42133  			return;
42134  		}
vendor: 29,161 bytes, lines 42134-43140
42134
42135  		this._tooltip._source = e.layer || e.target;
42136
42137  		this.openTooltip(this._tooltip.options.sticky ? e.latlng : undefined);
42138  	},
42139
42140  	_moveTooltip: function (e) {
42141  		var latlng = e.latlng, containerPoint, layerPoint;
42142  		if (this._tooltip.options.sticky && e.originalEvent) {
42143  			containerPoint = this._map.mouseEventToContainerPoint(e.originalEvent);
42144  			layerPoint = this._map.containerPointToLayerPoint(containerPoint);
42145  			latlng = this._map.layerPointToLatLng(layerPoint);
42146  		}
42147  		this._tooltip.setLatLng(latlng);
42148  	}
42149  });
42150
42151  /*
42152   * @class DivIcon
42153   * @aka L.DivIcon
42154   * @inherits Icon
42155   *
42156   * Represents a lightweight icon for markers that uses a simple `<div>`
42157   * element instead of an image. Inherits from `Icon` but ignores the `iconUrl` and shadow options.
42158   *
42159   * @example
42160   * ```js
42161   * var myIcon = L.divIcon({className: 'my-div-icon'});
42162   * // you can set .my-div-icon styles in CSS
42163   *
42164   * L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
42165   * ```
42166   *
42167   * By default, it has a 'leaflet-div-icon' CSS class and is styled as a little white square with a shadow.
42168   */
42169
42170  var DivIcon = Icon.extend({
42171  	options: {
42172  		// @section
42173  		// @aka DivIcon options
42174  		iconSize: [12, 12], // also can be set through CSS
42175
42176  		// iconAnchor: (Point),
42177  		// popupAnchor: (Point),
42178
42179  		// @option html: String|HTMLElement = ''
42180  		// Custom HTML code to put inside the div element, empty by default. Alternatively,
42181  		// an instance of `HTMLElement`.
42182  		html: false,
42183
42184  		// @option bgPos: Point = [0, 0]
42185  		// Optional relative position of the background, in pixels
42186  		bgPos: null,
42187
42188  		className: 'leaflet-div-icon'
42189  	},
42190
42191  	createIcon: function (oldIcon) {
42192  		var div = (oldIcon && oldIcon.tagName === 'DIV') ? oldIcon : document.createElement('div'),
42193  		    options = this.options;
42194
42195  		if (options.html instanceof Element) {
42196  			empty(div);
42197  			div.appendChild(options.html);
42198  		} else {
42199  			div.innerHTML = options.html !== false ? options.html : '';
42200  		}
42201
42202  		if (options.bgPos) {
42203  			var bgPos = toPoint(options.bgPos);
42204  			div.style.backgroundPosition = (-bgPos.x) + 'px ' + (-bgPos.y) + 'px';
42205  		}
42206  		this._setIconStyles(div, 'icon');
42207
42208  		return div;
42209  	},
42210
42211  	createShadow: function () {
42212  		return null;
42213  	}
42214  });
42215
42216  // @factory L.divIcon(options: DivIcon options)
42217  // Creates a `DivIcon` instance with the given options.
42218  function divIcon(options) {
42219  	return new DivIcon(options);
42220  }
42221
42222  Icon.Default = IconDefault;
42223
42224  /*
42225   * @class GridLayer
42226   * @inherits Layer
42227   * @aka L.GridLayer
42228   *
42229   * Generic class for handling a tiled grid of HTML elements. This is the base class for all tile layers and replaces `TileLayer.Canvas`.
42230   * GridLayer can be extended to create a tiled grid of HTML elements like `<canvas>`, `<img>` or `<div>`. GridLayer will handle creating and animating these DOM elements for you.
42231   *
42232   *
42233   * @section Synchronous usage
42234   * @example
42235   *
42236   * To create a custom layer, extend GridLayer and implement the `createTile()` method, which will be passed a `Point` object with the `x`, `y`, and `z` (zoom level) coordinates to draw your tile.
42237   *
42238   * ```js
42239   * var CanvasLayer = L.GridLayer.extend({
42240   *     createTile: function(coords){
42241   *         // create a <canvas> element for drawing
42242   *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');
42243   *
42244   *         // setup tile width and height according to the options
42245   *         var size = this.getTileSize();
42246   *         tile.width = size.x;
42247   *         tile.height = size.y;
42248   *
42249   *         // get a canvas context and draw something on it using coords.x, coords.y and coords.z
42250   *         var ctx = tile.getContext('2d');
42251   *
42252   *         // return the tile so it can be rendered on screen
42253   *         return tile;
42254   *     }
42255   * });
42256   * ```
42257   *
42258   * @section Asynchronous usage
42259   * @example
42260   *
42261   * Tile creation can also be asynchronous, this is useful when using a third-party drawing library. Once the tile is finished drawing it can be passed to the `done()` callback.
42262   *
42263   * ```js
42264   * var CanvasLayer = L.GridLayer.extend({
42265   *     createTile: function(coords, done){
42266   *         var error;
42267   *
42268   *         // create a <canvas> element for drawing
42269   *         var tile = L.DomUtil.create('canvas', 'leaflet-tile');
42270   *
42271   *         // setup tile width and height according to the options
42272   *         var size = this.getTileSize();
42273   *         tile.width = size.x;
42274   *         tile.height = size.y;
42275   *
42276   *         // draw something asynchronously and pass the tile to the done() callback
42277   *         setTimeout(function() {
42278   *             done(error, tile);
42279   *         }, 1000);
42280   *
42281   *         return tile;
42282   *     }
42283   * });
42284   * ```
42285   *
42286   * @section
42287   */
42288
42289
42290  var GridLayer = Layer.extend({
42291
42292  	// @section
42293  	// @aka GridLayer options
42294  	options: {
42295  		// @option tileSize: Number|Point = 256
42296  		// Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.
42297  		tileSize: 256,
42298
42299  		// @option opacity: Number = 1.0
42300  		// Opacity of the tiles. Can be used in the `createTile()` function.
42301  		opacity: 1,
42302
42303  		// @option updateWhenIdle: Boolean = (depends)
42304  		// Load new tiles only when panning ends.
42305  		// `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.
42306  		// `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the
42307  		// [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.
42308  		updateWhenIdle: Browser.mobile,
42309
42310  		// @option updateWhenZooming: Boolean = true
42311  		// By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.
42312  		updateWhenZooming: true,
42313
42314  		// @option updateInterval: Number = 200
42315  		// Tiles will not update more than once every `updateInterval` milliseconds when panning.
42316  		updateInterval: 200,
42317
42318  		// @option zIndex: Number = 1
42319  		// The explicit zIndex of the tile layer.
42320  		zIndex: 1,
42321
42322  		// @option bounds: LatLngBounds = undefined
42323  		// If set, tiles will only be loaded inside the set `LatLngBounds`.
42324  		bounds: null,
42325
42326  		// @option minZoom: Number = 0
42327  		// The minimum zoom level down to which this layer will be displayed (inclusive).
42328  		minZoom: 0,
42329
42330  		// @option maxZoom: Number = undefined
42331  		// The maximum zoom level up to which this layer will be displayed (inclusive).
42332  		maxZoom: undefined,
42333
42334  		// @option maxNativeZoom: Number = undefined
42335  		// Maximum zoom number the tile source has available. If it is specified,
42336  		// the tiles on all zoom levels higher than `maxNativeZoom` will be loaded
42337  		// from `maxNativeZoom` level and auto-scaled.
42338  		maxNativeZoom: undefined,
42339
42340  		// @option minNativeZoom: Number = undefined
42341  		// Minimum zoom number the tile source has available. If it is specified,
42342  		// the tiles on all zoom levels lower than `minNativeZoom` will be loaded
42343  		// from `minNativeZoom` level and auto-scaled.
42344  		minNativeZoom: undefined,
42345
42346  		// @option noWrap: Boolean = false
42347  		// Whether the layer is wrapped around the antimeridian. If `true`, the
42348  		// GridLayer will only be displayed once at low zoom levels. Has no
42349  		// effect when the [map CRS](#map-crs) doesn't wrap around. Can be used
42350  		// in combination with [`bounds`](#gridlayer-bounds) to prevent requesting
42351  		// tiles outside the CRS limits.
42352  		noWrap: false,
42353
42354  		// @option pane: String = 'tilePane'
42355  		// `Map pane` where the grid layer will be added.
42356  		pane: 'tilePane',
42357
42358  		// @option className: String = ''
42359  		// A custom class name to assign to the tile layer. Empty by default.
42360  		className: '',
42361
42362  		// @option keepBuffer: Number = 2
42363  		// When panning the map, keep this many rows and columns of tiles before unloading them.
42364  		keepBuffer: 2
42365  	},
42366
42367  	initialize: function (options) {
42368  		setOptions(this, options);
42369  	},
42370
42371  	onAdd: function () {
42372  		this._initContainer();
42373
42374  		this._levels = {};
42375  		this._tiles = {};
42376
42377  		this._resetView(); // implicit _update() call
42378  	},
42379
42380  	beforeAdd: function (map) {
42381  		map._addZoomLimit(this);
42382  	},
42383
42384  	onRemove: function (map) {
42385  		this._removeAllTiles();
42386  		remove(this._container);
42387  		map._removeZoomLimit(this);
42388  		this._container = null;
42389  		this._tileZoom = undefined;
42390  	},
42391
42392  	// @method bringToFront: this
42393  	// Brings the tile layer to the top of all tile layers.
42394  	bringToFront: function () {
42395  		if (this._map) {
42396  			toFront(this._container);
42397  			this._setAutoZIndex(Math.max);
42398  		}
42399  		return this;
42400  	},
42401
42402  	// @method bringToBack: this
42403  	// Brings the tile layer to the bottom of all tile layers.
42404  	bringToBack: function () {
42405  		if (this._map) {
42406  			toBack(this._container);
42407  			this._setAutoZIndex(Math.min);
42408  		}
42409  		return this;
42410  	},
42411
42412  	// @method getContainer: HTMLElement
42413  	// Returns the HTML element that contains the tiles for this layer.
42414  	getContainer: function () {
42415  		return this._container;
42416  	},
42417
42418  	// @method setOpacity(opacity: Number): this
42419  	// Changes the [opacity](#gridlayer-opacity) of the grid layer.
42420  	setOpacity: function (opacity) {
42421  		this.options.opacity = opacity;
42422  		this._updateOpacity();
42423  		return this;
42424  	},
42425
42426  	// @method setZIndex(zIndex: Number): this
42427  	// Changes the [zIndex](#gridlayer-zindex) of the grid layer.
42428  	setZIndex: function (zIndex) {
42429  		this.options.zIndex = zIndex;
42430  		this._updateZIndex();
42431
42432  		return this;
42433  	},
42434
42435  	// @method isLoading: Boolean
42436  	// Returns `true` if any tile in the grid layer has not finished loading.
42437  	isLoading: function () {
42438  		return this._loading;
42439  	},
42440
42441  	// @method redraw: this
42442  	// Causes the layer to clear all the tiles and request them again.
42443  	redraw: function () {
42444  		if (this._map) {
42445  			this._removeAllTiles();
42446  			var tileZoom = this._clampZoom(this._map.getZoom());
42447  			if (tileZoom !== this._tileZoom) {
42448  				this._tileZoom = tileZoom;
42449  				this._updateLevels();
42450  			}
42451  			this._update();
42452  		}
42453  		return this;
42454  	},
42455
42456  	getEvents: function () {
42457  		var events = {
42458  			viewprereset: this._invalidateAll,
42459  			viewreset: this._resetView,
42460  			zoom: this._resetView,
42461  			moveend: this._onMoveEnd
42462  		};
42463
42464  		if (!this.options.updateWhenIdle) {
42465  			// update tiles on move, but not more often than once per given interval
42466  			if (!this._onMove) {
42467  				this._onMove = throttle(this._onMoveEnd, this.options.updateInterval, this);
42468  			}
42469
42470  			events.move = this._onMove;
42471  		}
42472
42473  		if (this._zoomAnimated) {
42474  			events.zoomanim = this._animateZoom;
42475  		}
42476
42477  		return events;
42478  	},
42479
42480  	// @section Extension methods
42481  	// Layers extending `GridLayer` shall reimplement the following method.
42482  	// @method createTile(coords: Object, done?: Function): HTMLElement
42483  	// Called only internally, must be overridden by classes extending `GridLayer`.
42484  	// Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback
42485  	// is specified, it must be called when the tile has finished loading and drawing.
42486  	createTile: function () {
42487  		return document.createElement('div');
42488  	},
42489
42490  	// @section
42491  	// @method getTileSize: Point
42492  	// Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.
42493  	getTileSize: function () {
42494  		var s = this.options.tileSize;
42495  		return s instanceof Point ? s : new Point(s, s);
42496  	},
42497
42498  	_updateZIndex: function () {
42499  		if (this._container && this.options.zIndex !== undefined && this.options.zIndex !== null) {
42500  			this._container.style.zIndex = this.options.zIndex;
42501  		}
42502  	},
42503
42504  	_setAutoZIndex: function (compare) {
42505  		// go through all other layers of the same pane, set zIndex to max + 1 (front) or min - 1 (back)
42506
42507  		var layers = this.getPane().children,
42508  		    edgeZIndex = -compare(-Infinity, Infinity); // -Infinity for max, Infinity for min
42509
42510  		for (var i = 0, len = layers.length, zIndex; i < len; i++) {
42511
42512  			zIndex = layers[i].style.zIndex;
42513
42514  			if (layers[i] !== this._container && zIndex) {
42515  				edgeZIndex = compare(edgeZIndex, +zIndex);
42516  			}
42517  		}
42518
42519  		if (isFinite(edgeZIndex)) {
42520  			this.options.zIndex = edgeZIndex + compare(-1, 1);
42521  			this._updateZIndex();
42522  		}
42523  	},
42524
42525  	_updateOpacity: function () {
42526  		if (!this._map) { return; }
42527
42528  		// IE doesn't inherit filter opacity properly, so we're forced to set it on tiles
42529  		if (Browser.ielt9) { return; }
42530
42531  		setOpacity(this._container, this.options.opacity);
42532
42533  		var now = +new Date(),
42534  		    nextFrame = false,
42535  		    willPrune = false;
42536
42537  		for (var key in this._tiles) {
42538  			var tile = this._tiles[key];
42539  			if (!tile.current || !tile.loaded) { continue; }
42540
42541  			var fade = Math.min(1, (now - tile.loaded) / 200);
42542
42543  			setOpacity(tile.el, fade);
42544  			if (fade < 1) {
42545  				nextFrame = true;
42546  			} else {
42547  				if (tile.active) {
42548  					willPrune = true;
42549  				} else {
42550  					this._onOpaqueTile(tile);
42551  				}
42552  				tile.active = true;
42553  			}
42554  		}
42555
42556  		if (willPrune && !this._noPrune) { this._pruneTiles(); }
42557
42558  		if (nextFrame) {
42559  			cancelAnimFrame(this._fadeFrame);
42560  			this._fadeFrame = requestAnimFrame(this._updateOpacity, this);
42561  		}
42562  	},
42563
42564  	_onOpaqueTile: falseFn,
42565
42566  	_initContainer: function () {
42567  		if (this._container) { return; }
42568
42569  		this._container = create$1('div', 'leaflet-layer ' + (this.options.className || ''));
42570  		this._updateZIndex();
42571
42572  		if (this.options.opacity < 1) {
42573  			this._updateOpacity();
42574  		}
42575
42576  		this.getPane().appendChild(this._container);
42577  	},
42578
42579  	_updateLevels: function () {
42580
42581  		var zoom = this._tileZoom,
42582  		    maxZoom = this.options.maxZoom;
42583
42584  		if (zoom === undefined) { return undefined; }
42585
42586  		for (var z in this._levels) {
42587  			z = Number(z);
42588  			if (this._levels[z].el.children.length || z === zoom) {
42589  				this._levels[z].el.style.zIndex = maxZoom - Math.abs(zoom - z);
42590  				this._onUpdateLevel(z);
42591  			} else {
42592  				remove(this._levels[z].el);
42593  				this._removeTilesAtZoom(z);
42594  				this._onRemoveLevel(z);
42595  				delete this._levels[z];
42596  			}
42597  		}
42598
42599  		var level = this._levels[zoom],
42600  		    map = this._map;
42601
42602  		if (!level) {
42603  			level = this._levels[zoom] = {};
42604
42605  			level.el = create$1('div', 'leaflet-tile-container leaflet-zoom-animated', this._container);
42606  			level.el.style.zIndex = maxZoom;
42607
42608  			level.origin = map.project(map.unproject(map.getPixelOrigin()), zoom).round();
42609  			level.zoom = zoom;
42610
42611  			this._setZoomTransform(level, map.getCenter(), map.getZoom());
42612
42613  			// force the browser to consider the newly added element for transition
42614  			falseFn(level.el.offsetWidth);
42615
42616  			this._onCreateLevel(level);
42617  		}
42618
42619  		this._level = level;
42620
42621  		return level;
42622  	},
42623
42624  	_onUpdateLevel: falseFn,
42625
42626  	_onRemoveLevel: falseFn,
42627
42628  	_onCreateLevel: falseFn,
42629
42630  	_pruneTiles: function () {
42631  		if (!this._map) {
42632  			return;
42633  		}
42634
42635  		var key, tile;
42636
42637  		var zoom = this._map.getZoom();
42638  		if (zoom > this.options.maxZoom ||
42639  			zoom < this.options.minZoom) {
42640  			this._removeAllTiles();
42641  			return;
42642  		}
42643
42644  		for (key in this._tiles) {
42645  			tile = this._tiles[key];
42646  			tile.retain = tile.current;
42647  		}
42648
42649  		for (key in this._tiles) {
42650  			tile = this._tiles[key];
42651  			if (tile.current && !tile.active) {
42652  				var coords = tile.coords;
42653  				if (!this._retainParent(coords.x, coords.y, coords.z, coords.z - 5)) {
42654  					this._retainChildren(coords.x, coords.y, coords.z, coords.z + 2);
42655  				}
42656  			}
42657  		}
42658
42659  		for (key in this._tiles) {
42660  			if (!this._tiles[key].retain) {
42661  				this._removeTile(key);
42662  			}
42663  		}
42664  	},
42665
42666  	_removeTilesAtZoom: function (zoom) {
42667  		for (var key in this._tiles) {
42668  			if (this._tiles[key].coords.z !== zoom) {
42669  				continue;
42670  			}
42671  			this._removeTile(key);
42672  		}
42673  	},
42674
42675  	_removeAllTiles: function () {
42676  		for (var key in this._tiles) {
42677  			this._removeTile(key);
42678  		}
42679  	},
42680
42681  	_invalidateAll: function () {
42682  		for (var z in this._levels) {
42683  			remove(this._levels[z].el);
42684  			this._onRemoveLevel(Number(z));
42685  			delete this._levels[z];
42686  		}
42687  		this._removeAllTiles();
42688
42689  		this._tileZoom = undefined;
42690  	},
42691
42692  	_retainParent: function (x, y, z, minZoom) {
42693  		var x2 = Math.floor(x / 2),
42694  		    y2 = Math.floor(y / 2),
42695  		    z2 = z - 1,
42696  		    coords2 = new Point(+x2, +y2);
42697  		coords2.z = +z2;
42698
42699  		var key = this._tileCoordsToKey(coords2),
42700  		    tile = this._tiles[key];
42701
42702  		if (tile && tile.active) {
42703  			tile.retain = true;
42704  			return true;
42705
42706  		} else if (tile && tile.loaded) {
42707  			tile.retain = true;
42708  		}
42709
42710  		if (z2 > minZoom) {
42711  			return this._retainParent(x2, y2, z2, minZoom);
42712  		}
42713
42714  		return false;
42715  	},
42716
42717  	_retainChildren: function (x, y, z, maxZoom) {
42718
42719  		for (var i = 2 * x; i < 2 * x + 2; i++) {
42720  			for (var j = 2 * y; j < 2 * y + 2; j++) {
42721
42722  				var coords = new Point(i, j);
42723  				coords.z = z + 1;
42724
42725  				var key = this._tileCoordsToKey(coords),
42726  				    tile = this._tiles[key];
42727
42728  				if (tile && tile.active) {
42729  					tile.retain = true;
42730  					continue;
42731
42732  				} else if (tile && tile.loaded) {
42733  					tile.retain = true;
42734  				}
42735
42736  				if (z + 1 < maxZoom) {
42737  					this._retainChildren(i, j, z + 1, maxZoom);
42738  				}
42739  			}
42740  		}
42741  	},
42742
42743  	_resetView: function (e) {
42744  		var animating = e && (e.pinch || e.flyTo);
42745  		this._setView(this._map.getCenter(), this._map.getZoom(), animating, animating);
42746  	},
42747
42748  	_animateZoom: function (e) {
42749  		this._setView(e.center, e.zoom, true, e.noUpdate);
42750  	},
42751
42752  	_clampZoom: function (zoom) {
42753  		var options = this.options;
42754
42755  		if (undefined !== options.minNativeZoom && zoom < options.minNativeZoom) {
42756  			return options.minNativeZoom;
42757  		}
42758
42759  		if (undefined !== options.maxNativeZoom && options.maxNativeZoom < zoom) {
42760  			return options.maxNativeZoom;
42761  		}
42762
42763  		return zoom;
42764  	},
42765
42766  	_setView: function (center, zoom, noPrune, noUpdate) {
42767  		var tileZoom = Math.round(zoom);
42768  		if ((this.options.maxZoom !== undefined && tileZoom > this.options.maxZoom) ||
42769  		    (this.options.minZoom !== undefined && tileZoom < this.options.minZoom)) {
42770  			tileZoom = undefined;
42771  		} else {
42772  			tileZoom = this._clampZoom(tileZoom);
42773  		}
42774
42775  		var tileZoomChanged = this.options.updateWhenZooming && (tileZoom !== this._tileZoom);
42776
42777  		if (!noUpdate || tileZoomChanged) {
42778
42779  			this._tileZoom = tileZoom;
42780
42781  			if (this._abortLoading) {
42782  				this._abortLoading();
42783  			}
42784
42785  			this._updateLevels();
42786  			this._resetGrid();
42787
42788  			if (tileZoom !== undefined) {
42789  				this._update(center);
42790  			}
42791
42792  			if (!noPrune) {
42793  				this._pruneTiles();
42794  			}
42795
42796  			// Flag to prevent _updateOpacity from pruning tiles during
42797  			// a zoom anim or a pinch gesture
42798  			this._noPrune = !!noPrune;
42799  		}
42800
42801  		this._setZoomTransforms(center, zoom);
42802  	},
42803
42804  	_setZoomTransforms: function (center, zoom) {
42805  		for (var i in this._levels) {
42806  			this._setZoomTransform(this._levels[i], center, zoom);
42807  		}
42808  	},
42809
42810  	_setZoomTransform: function (level, center, zoom) {
42811  		var scale = this._map.getZoomScale(zoom, level.zoom),
42812  		    translate = level.origin.multiplyBy(scale)
42813  		        .subtract(this._map._getNewPixelOrigin(center, zoom)).round();
42814
42815  		if (Browser.any3d) {
42816  			setTransform(level.el, translate, scale);
42817  		} else {
42818  			setPosition(level.el, translate);
42819  		}
42820  	},
42821
42822  	_resetGrid: function () {
42823  		var map = this._map,
42824  		    crs = map.options.crs,
42825  		    tileSize = this._tileSize = this.getTileSize(),
42826  		    tileZoom = this._tileZoom;
42827
42828  		var bounds = this._map.getPixelWorldBounds(this._tileZoom);
42829  		if (bounds) {
42830  			this._globalTileRange = this._pxBoundsToTileRange(bounds);
42831  		}
42832
42833  		this._wrapX = crs.wrapLng && !this.options.noWrap && [
42834  			Math.floor(map.project([0, crs.wrapLng[0]], tileZoom).x / tileSize.x),
42835  			Math.ceil(map.project([0, crs.wrapLng[1]], tileZoom).x / tileSize.y)
42836  		];
42837  		this._wrapY = crs.wrapLat && !this.options.noWrap && [
42838  			Math.floor(map.project([crs.wrapLat[0], 0], tileZoom).y / tileSize.x),
42839  			Math.ceil(map.project([crs.wrapLat[1], 0], tileZoom).y / tileSize.y)
42840  		];
42841  	},
42842
42843  	_onMoveEnd: function () {
42844  		if (!this._map || this._map._animatingZoom) { return; }
42845
42846  		this._update();
42847  	},
42848
42849  	_getTiledPixelBounds: function (center) {
42850  		var map = this._map,
42851  		    mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom(),
42852  		    scale = map.getZoomScale(mapZoom, this._tileZoom),
42853  		    pixelCenter = map.project(center, this._tileZoom).floor(),
42854  		    halfSize = map.getSize().divideBy(scale * 2);
42855
42856  		return new Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize));
42857  	},
42858
42859  	// Private method to load tiles in the grid's active zoom level according to map bounds
42860  	_update: function (center) {
42861  		var map = this._map;
42862  		if (!map) { return; }
42863  		var zoom = this._clampZoom(map.getZoom());
42864
42865  		if (center === undefined) { center = map.getCenter(); }
42866  		if (this._tileZoom === undefined) { return; }	// if out of minzoom/maxzoom
42867
42868  		var pixelBounds = this._getTiledPixelBounds(center),
42869  		    tileRange = this._pxBoundsToTileRange(pixelBounds),
42870  		    tileCenter = tileRange.getCenter(),
42871  		    queue = [],
42872  		    margin = this.options.keepBuffer,
42873  		    noPruneRange = new Bounds(tileRange.getBottomLeft().subtract([margin, -margin]),
42874  		                              tileRange.getTopRight().add([margin, -margin]));
42875
42876  		// Sanity check: panic if the tile range contains Infinity somewhere.
42877  		if (!(isFinite(tileRange.min.x) &&
42878  		      isFinite(tileRange.min.y) &&
42879  		      isFinite(tileRange.max.x) &&
42880  		      isFinite(tileRange.max.y))) { throw new Error('Attempted to load an infinite number of tiles'); }
42881
42882  		for (var key in this._tiles) {
42883  			var c = this._tiles[key].coords;
42884  			if (c.z !== this._tileZoom || !noPruneRange.contains(new Point(c.x, c.y))) {
42885  				this._tiles[key].current = false;
42886  			}
42887  		}
42888
42889  		// _update just loads more tiles. If the tile zoom level differs too much
42890  		// from the map's, let _setView reset levels and prune old tiles.
42891  		if (Math.abs(zoom - this._tileZoom) > 1) { this._setView(center, zoom); return; }
42892
42893  		// create a queue of coordinates to load tiles from
42894  		for (var j = tileRange.min.y; j <= tileRange.max.y; j++) {
42895  			for (var i = tileRange.min.x; i <= tileRange.max.x; i++) {
42896  				var coords = new Point(i, j);
42897  				coords.z = this._tileZoom;
42898
42899  				if (!this._isValidTile(coords)) { continue; }
42900
42901  				var tile = this._tiles[this._tileCoordsToKey(coords)];
42902  				if (tile) {
42903  					tile.current = true;
42904  				} else {
42905  					queue.push(coords);
42906  				}
42907  			}
42908  		}
42909
42910  		// sort tile queue to load tiles in order of their distance to center
42911  		queue.sort(function (a, b) {
42912  			return a.distanceTo(tileCenter) - b.distanceTo(tileCenter);
42913  		});
42914
42915  		if (queue.length !== 0) {
42916  			// if it's the first batch of tiles to load
42917  			if (!this._loading) {
42918  				this._loading = true;
42919  				// @event loading: Event
42920  				// Fired when the grid layer starts loading tiles.
42921  				this.fire('loading');
42922  			}
42923
42924  			// create DOM fragment to append tiles in one batch
42925  			var fragment = document.createDocumentFragment();
42926
42927  			for (i = 0; i < queue.length; i++) {
42928  				this._addTile(queue[i], fragment);
42929  			}
42930
42931  			this._level.el.appendChild(fragment);
42932  		}
42933  	},
42934
42935  	_isValidTile: function (coords) {
42936  		var crs = this._map.options.crs;
42937
42938  		if (!crs.infinite) {
42939  			// don't load tile if it's out of bounds and not wrapped
42940  			var bounds = this._globalTileRange;
42941  			if ((!crs.wrapLng && (coords.x < bounds.min.x || coords.x > bounds.max.x)) ||
42942  			    (!crs.wrapLat && (coords.y < bounds.min.y || coords.y > bounds.max.y))) { return false; }
42943  		}
42944
42945  		if (!this.options.bounds) { return true; }
42946
42947  		// don't load tile if it doesn't intersect the bounds in options
42948  		var tileBounds = this._tileCoordsToBounds(coords);
42949  		return toLatLngBounds(this.options.bounds).overlaps(tileBounds);
42950  	},
42951
42952  	_keyToBounds: function (key) {
42953  		return this._tileCoordsToBounds(this._keyToTileCoords(key));
42954  	},
42955
42956  	_tileCoordsToNwSe: function (coords) {
42957  		var map = this._map,
42958  		    tileSize = this.getTileSize(),
42959  		    nwPoint = coords.scaleBy(tileSize),
42960  		    sePoint = nwPoint.add(tileSize),
42961  		    nw = map.unproject(nwPoint, coords.z),
42962  		    se = map.unproject(sePoint, coords.z);
42963  		return [nw, se];
42964  	},
42965
42966  	// converts tile coordinates to its geographical bounds
42967  	_tileCoordsToBounds: function (coords) {
42968  		var bp = this._tileCoordsToNwSe(coords),
42969  		    bounds = new LatLngBounds(bp[0], bp[1]);
42970
42971  		if (!this.options.noWrap) {
42972  			bounds = this._map.wrapLatLngBounds(bounds);
42973  		}
42974  		return bounds;
42975  	},
42976  	// converts tile coordinates to key for the tile cache
42977  	_tileCoordsToKey: function (coords) {
42978  		return coords.x + ':' + coords.y + ':' + coords.z;
42979  	},
42980
42981  	// converts tile cache key to coordinates
42982  	_keyToTileCoords: function (key) {
42983  		var k = key.split(':'),
42984  		    coords = new Point(+k[0], +k[1]);
42985  		coords.z = +k[2];
42986  		return coords;
42987  	},
42988
42989  	_removeTile: function (key) {
42990  		var tile = this._tiles[key];
42991  		if (!tile) { return; }
42992
42993  		remove(tile.el);
42994
42995  		delete this._tiles[key];
42996
42997  		// @event tileunload: TileEvent
42998  		// Fired when a tile is removed (e.g. when a tile goes off the screen).
42999  		this.fire('tileunload', {
43000  			tile: tile.el,
43001  			coords: this._keyToTileCoords(key)
43002  		});
43003  	},
43004
43005  	_initTile: function (tile) {
43006  		addClass(tile, 'leaflet-tile');
43007
43008  		var tileSize = this.getTileSize();
43009  		tile.style.width = tileSize.x + 'px';
43010  		tile.style.height = tileSize.y + 'px';
43011
43012  		tile.onselectstart = falseFn;
43013  		tile.onmousemove = falseFn;
43014
43015  		// update opacity on tiles in IE7-8 because of filter inheritance problems
43016  		if (Browser.ielt9 && this.options.opacity < 1) {
43017  			setOpacity(tile, this.options.opacity);
43018  		}
43019  	},
43020
43021  	_addTile: function (coords, container) {
43022  		var tilePos = this._getTilePos(coords),
43023  		    key = this._tileCoordsToKey(coords);
43024
43025  		var tile = this.createTile(this._wrapCoords(coords), bind(this._tileReady, this, coords));
43026
43027  		this._initTile(tile);
43028
43029  		// if createTile is defined with a second argument ("done" callback),
43030  		// we know that tile is async and will be ready later; otherwise
43031  		if (this.createTile.length < 2) {
43032  			// mark tile as ready, but delay one frame for opacity animation to happen
43033  			requestAnimFrame(bind(this._tileReady, this, coords, null, tile));
43034  		}
43035
43036  		setPosition(tile, tilePos);
43037
43038  		// save tile in cache
43039  		this._tiles[key] = {
43040  			el: tile,
43041  			coords: coords,
43042  			current: true
43043  		};
43044
43045  		container.appendChild(tile);
43046  		// @event tileloadstart: TileEvent
43047  		// Fired when a tile is requested and starts loading.
43048  		this.fire('tileloadstart', {
43049  			tile: tile,
43050  			coords: coords
43051  		});
43052  	},
43053
43054  	_tileReady: function (coords, err, tile) {
43055  		if (err) {
43056  			// @event tileerror: TileErrorEvent
43057  			// Fired when there is an error loading a tile.
43058  			this.fire('tileerror', {
43059  				error: err,
43060  				tile: tile,
43061  				coords: coords
43062  			});
43063  		}
43064
43065  		var key = this._tileCoordsToKey(coords);
43066
43067  		tile = this._tiles[key];
43068  		if (!tile) { return; }
43069
43070  		tile.loaded = +new Date();
43071  		if (this._map._fadeAnimated) {
43072  			setOpacity(tile.el, 0);
43073  			cancelAnimFrame(this._fadeFrame);
43074  			this._fadeFrame = requestAnimFrame(this._updateOpacity, this);
43075  		} else {
43076  			tile.active = true;
43077  			this._pruneTiles();
43078  		}
43079
43080  		if (!err) {
43081  			addClass(tile.el, 'leaflet-tile-loaded');
43082
43083  			// @event tileload: TileEvent
43084  			// Fired when a tile loads.
43085  			this.fire('tileload', {
43086  				tile: tile.el,
43087  				coords: coords
43088  			});
43089  		}
43090
43091  		if (this._noTilesToLoad()) {
43092  			this._loading = false;
43093  			// @event load: Event
43094  			// Fired when the grid layer loaded all visible tiles.
43095  			this.fire('load');
43096
43097  			if (Browser.ielt9 || !this._map._fadeAnimated) {
43098  				requestAnimFrame(this._pruneTiles, this);
43099  			} else {
43100  				// Wait a bit more than 0.2 secs (the duration of the tile fade-in)
43101  				// to trigger a pruning.
43102  				setTimeout(bind(this._pruneTiles, this), 250);
43103  			}
43104  		}
43105  	},
43106
43107  	_getTilePos: function (coords) {
43108  		return coords.scaleBy(this.getTileSize()).subtract(this._level.origin);
43109  	},
43110
43111  	_wrapCoords: function (coords) {
43112  		var newCoords = new Point(
43113  			this._wrapX ? wrapNum(coords.x, this._wrapX) : coords.x,
43114  			this._wrapY ? wrapNum(coords.y, this._wrapY) : coords.y);
43115  		newCoords.z = coords.z;
43116  		return newCoords;
43117  	},
43118
43119  	_pxBoundsToTileRange: function (bounds) {
43120  		var tileSize = this.getTileSize();
43121  		return new Bounds(
43122  			bounds.min.unscaleBy(tileSize).floor(),
43123  			bounds.max.unscaleBy(tileSize).ceil().subtract([1, 1]));
43124  	},
43125
43126  	_noTilesToLoad: function () {
43127  		for (var key in this._tiles) {
43128  			if (!this._tiles[key].loaded) { return false; }
43129  		}
43130  		return true;
43131  	}
43132  });
43133
43134  // @factory L.gridLayer(options?: GridLayer options)
43135  // Creates a new instance of GridLayer with the supplied options.
43136  function gridLayer(options) {
43137  	return new GridLayer(options);
43138  }
43139
43140  /*
43140
43141   * @class TileLayer
43142   * @inherits GridLayer
43143   * @aka L.TileLayer
43144   * Used to load and display tile layers on the map. Note that most tile servers require attribution, which you can set under `Layer`. Extends `GridLayer`.
43145   *
43146   * @example
43147   *
43148   * ```js
43149   * L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(map);
43150   * ```
43151   *
43152   * @section URL template
43153   * @example
43154   *
43155   * A string of the following form:
43156   *
43157   * ```
43158   * 'https://{s}.somedomain.com/blabla/{z}/{x}/{y}{r}.png'
43159   * ```
43160   *
43161   * `{s}` means one of the available subdomains (used sequentially to help with browser parallel requests per domain limitation; subdomain values are specified in options; `a`, `b` or `c` by default, can be omitted), `{z}` — zoom level, `{x}` and `{y}` — tile coordinates. `{r}` can be used to add "&commat;2x" to the URL to load retina tiles.
43162   *
43163   * You can use custom keys in the template, which will be [evaluated](#util-template) from TileLayer options, like this:
43164   *
43165   * ```
43166   * L.tileLayer('https://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});
43167   * ```
43168   */
43169
43170
43171  var TileLayer = GridLayer.extend({
43172
43173  	// @section
43174  	// @aka TileLayer options
43175  	options: {
43176  		// @option minZoom: Number = 0
43177  		// The minimum zoom level down to which this layer will be displayed (inclusive).
43178  		minZoom: 0,
43179
43180  		// @option maxZoom: Number = 18
43181  		// The maximum zoom level up to which this layer will be displayed (inclusive).
43182  		maxZoom: 18,
43183
43184  		// @option subdomains: String|String[] = 'abc'
43185  		// Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of str
vendor: 13,264 bytes, lines 43185-43601
43185ings.
43186  		subdomains: 'abc',
43187
43188  		// @option errorTileUrl: String = ''
43189  		// URL to the tile image to show in place of the tile that failed to load.
43190  		errorTileUrl: '',
43191
43192  		// @option zoomOffset: Number = 0
43193  		// The zoom number used in tile URLs will be offset with this value.
43194  		zoomOffset: 0,
43195
43196  		// @option tms: Boolean = false
43197  		// If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).
43198  		tms: false,
43199
43200  		// @option zoomReverse: Boolean = false
43201  		// If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)
43202  		zoomReverse: false,
43203
43204  		// @option detectRetina: Boolean = false
43205  		// If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.
43206  		detectRetina: false,
43207
43208  		// @option crossOrigin: Boolean|String = false
43209  		// Whether the crossOrigin attribute will be added to the tiles.
43210  		// If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
43211  		// Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
43212  		crossOrigin: false,
43213
43214  		// @option referrerPolicy: Boolean|String = false
43215  		// Whether the referrerPolicy attribute will be added to the tiles.
43216  		// If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.
43217  		// This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer
43218  		// (e.g. to validate an API token).
43219  		// Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.
43220  		referrerPolicy: false
43221  	},
43222
43223  	initialize: function (url, options) {
43224
43225  		this._url = url;
43226
43227  		options = setOptions(this, options);
43228
43229  		// detecting retina displays, adjusting tileSize and zoom levels
43230  		if (options.detectRetina && Browser.retina && options.maxZoom > 0) {
43231
43232  			options.tileSize = Math.floor(options.tileSize / 2);
43233
43234  			if (!options.zoomReverse) {
43235  				options.zoomOffset++;
43236  				options.maxZoom--;
43237  			} else {
43238  				options.zoomOffset--;
43239  				options.minZoom++;
43240  			}
43241
43242  			options.minZoom = Math.max(0, options.minZoom);
43243  		}
43244
43245  		if (typeof options.subdomains === 'string') {
43246  			options.subdomains = options.subdomains.split('');
43247  		}
43248
43249  		this.on('tileunload', this._onTileRemove);
43250  	},
43251
43252  	// @method setUrl(url: String, noRedraw?: Boolean): this
43253  	// Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).
43254  	// If the URL does not change, the layer will not be redrawn unless
43255  	// the noRedraw parameter is set to false.
43256  	setUrl: function (url, noRedraw) {
43257  		if (this._url === url && noRedraw === undefined) {
43258  			noRedraw = true;
43259  		}
43260
43261  		this._url = url;
43262
43263  		if (!noRedraw) {
43264  			this.redraw();
43265  		}
43266  		return this;
43267  	},
43268
43269  	// @method createTile(coords: Object, done?: Function): HTMLElement
43270  	// Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)
43271  	// to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`
43272  	// callback is called when the tile has been loaded.
43273  	createTile: function (coords, done) {
43274  		var tile = document.createElement('img');
43275
43276  		on(tile, 'load', bind(this._tileOnLoad, this, done, tile));
43277  		on(tile, 'error', bind(this._tileOnError, this, done, tile));
43278
43279  		if (this.options.crossOrigin || this.options.crossOrigin === '') {
43280  			tile.crossOrigin = this.options.crossOrigin === true ? '' : this.options.crossOrigin;
43281  		}
43282
43283  		// for this new option we follow the documented behavior
43284  		// more closely by only setting the property when string
43285  		if (typeof this.options.referrerPolicy === 'string') {
43286  			tile.referrerPolicy = this.options.referrerPolicy;
43287  		}
43288
43289  		/*
43290  		 Alt tag is set to empty string to keep screen readers from reading URL and for compliance reasons
43291  		 https://www.w3.org/TR/WCAG20-TECHS/H67
43292  		*/
43293  		tile.alt = '';
43294
43295  		/*
43296  		 Set role="presentation" to force screen readers to ignore this
43297  		 https://www.w3.org/TR/wai-aria/roles#textalternativecomputation
43298  		*/
43299  		tile.setAttribute('role', 'presentation');
43300
43301  		tile.src = this.getTileUrl(coords);
43302
43303  		return tile;
43304  	},
43305
43306  	// @section Extension methods
43307  	// @uninheritable
43308  	// Layers extending `TileLayer` might reimplement the following method.
43309  	// @method getTileUrl(coords: Object): String
43310  	// Called only internally, returns the URL for a tile given its coordinates.
43311  	// Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.
43312  	getTileUrl: function (coords) {
43313  		var data = {
43314  			r: Browser.retina ? '@2x' : '',
43315  			s: this._getSubdomain(coords),
43316  			x: coords.x,
43317  			y: coords.y,
43318  			z: this._getZoomForUrl()
43319  		};
43320  		if (this._map && !this._map.options.crs.infinite) {
43321  			var invertedY = this._globalTileRange.max.y - coords.y;
43322  			if (this.options.tms) {
43323  				data['y'] = invertedY;
43324  			}
43325  			data['-y'] = invertedY;
43326  		}
43327
43328  		return template(this._url, extend(data, this.options));
43329  	},
43330
43331  	_tileOnLoad: function (done, tile) {
43332  		// For https://github.com/Leaflet/Leaflet/issues/3332
43333  		if (Browser.ielt9) {
43334  			setTimeout(bind(done, this, null, tile), 0);
43335  		} else {
43336  			done(null, tile);
43337  		}
43338  	},
43339
43340  	_tileOnError: function (done, tile, e) {
43341  		var errorUrl = this.options.errorTileUrl;
43342  		if (errorUrl && tile.getAttribute('src') !== errorUrl) {
43343  			tile.src = errorUrl;
43344  		}
43345  		done(e, tile);
43346  	},
43347
43348  	_onTileRemove: function (e) {
43349  		e.tile.onload = null;
43350  	},
43351
43352  	_getZoomForUrl: function () {
43353  		var zoom = this._tileZoom,
43354  		maxZoom = this.options.maxZoom,
43355  		zoomReverse = this.options.zoomReverse,
43356  		zoomOffset = this.options.zoomOffset;
43357
43358  		if (zoomReverse) {
43359  			zoom = maxZoom - zoom;
43360  		}
43361
43362  		return zoom + zoomOffset;
43363  	},
43364
43365  	_getSubdomain: function (tilePoint) {
43366  		var index = Math.abs(tilePoint.x + tilePoint.y) % this.options.subdomains.length;
43367  		return this.options.subdomains[index];
43368  	},
43369
43370  	// stops loading all tiles in the background layer
43371  	_abortLoading: function () {
43372  		var i, tile;
43373  		for (i in this._tiles) {
43374  			if (this._tiles[i].coords.z !== this._tileZoom) {
43375  				tile = this._tiles[i].el;
43376
43377  				tile.onload = falseFn;
43378  				tile.onerror = falseFn;
43379
43380  				if (!tile.complete) {
43381  					tile.src = emptyImageUrl;
43382  					var coords = this._tiles[i].coords;
43383  					remove(tile);
43384  					delete this._tiles[i];
43385  					// @event tileabort: TileEvent
43386  					// Fired when a tile was loading but is now not wanted.
43387  					this.fire('tileabort', {
43388  						tile: tile,
43389  						coords: coords
43390  					});
43391  				}
43392  			}
43393  		}
43394  	},
43395
43396  	_removeTile: function (key) {
43397  		var tile = this._tiles[key];
43398  		if (!tile) { return; }
43399
43400  		// Cancels any pending http requests associated with the tile
43401  		tile.el.setAttribute('src', emptyImageUrl);
43402
43403  		return GridLayer.prototype._removeTile.call(this, key);
43404  	},
43405
43406  	_tileReady: function (coords, err, tile) {
43407  		if (!this._map || (tile && tile.getAttribute('src') === emptyImageUrl)) {
43408  			return;
43409  		}
43410
43411  		return GridLayer.prototype._tileReady.call(this, coords, err, tile);
43412  	}
43413  });
43414
43415
43416  // @factory L.tilelayer(urlTemplate: String, options?: TileLayer options)
43417  // Instantiates a tile layer object given a `URL template` and optionally an options object.
43418
43419  function tileLayer(url, options) {
43420  	return new TileLayer(url, options);
43421  }
43422
43423  /*
43424   * @class TileLayer.WMS
43425   * @inherits TileLayer
43426   * @aka L.TileLayer.WMS
43427   * Used to display [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services as tile layers on the map. Extends `TileLayer`.
43428   *
43429   * @example
43430   *
43431   * ```js
43432   * var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
43433   * 	layers: 'nexrad-n0r-900913',
43434   * 	format: 'image/png',
43435   * 	transparent: true,
43436   * 	attribution: "Weather data © 2012 IEM Nexrad"
43437   * });
43438   * ```
43439   */
43440
43441  var TileLayerWMS = TileLayer.extend({
43442
43443  	// @section
43444  	// @aka TileLayer.WMS options
43445  	// If any custom options not documented here are used, they will be sent to the
43446  	// WMS server as extra parameters in each request URL. This can be useful for
43447  	// [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).
43448  	defaultWmsParams: {
43449  		service: 'WMS',
43450  		request: 'GetMap',
43451
43452  		// @option layers: String = ''
43453  		// **(required)** Comma-separated list of WMS layers to show.
43454  		layers: '',
43455
43456  		// @option styles: String = ''
43457  		// Comma-separated list of WMS styles.
43458  		styles: '',
43459
43460  		// @option format: String = 'image/jpeg'
43461  		// WMS image format (use `'image/png'` for layers with transparency).
43462  		format: 'image/jpeg',
43463
43464  		// @option transparent: Boolean = false
43465  		// If `true`, the WMS service will return images with transparency.
43466  		transparent: false,
43467
43468  		// @option version: String = '1.1.1'
43469  		// Version of the WMS service to use
43470  		version: '1.1.1'
43471  	},
43472
43473  	options: {
43474  		// @option crs: CRS = null
43475  		// Coordinate Reference System to use for the WMS requests, defaults to
43476  		// map CRS. Don't change this if you're not sure what it means.
43477  		crs: null,
43478
43479  		// @option uppercase: Boolean = false
43480  		// If `true`, WMS request parameter keys will be uppercase.
43481  		uppercase: false
43482  	},
43483
43484  	initialize: function (url, options) {
43485
43486  		this._url = url;
43487
43488  		var wmsParams = extend({}, this.defaultWmsParams);
43489
43490  		// all keys that are not TileLayer options go to WMS params
43491  		for (var i in options) {
43492  			if (!(i in this.options)) {
43493  				wmsParams[i] = options[i];
43494  			}
43495  		}
43496
43497  		options = setOptions(this, options);
43498
43499  		var realRetina = options.detectRetina && Browser.retina ? 2 : 1;
43500  		var tileSize = this.getTileSize();
43501  		wmsParams.width = tileSize.x * realRetina;
43502  		wmsParams.height = tileSize.y * realRetina;
43503
43504  		this.wmsParams = wmsParams;
43505  	},
43506
43507  	onAdd: function (map) {
43508
43509  		this._crs = this.options.crs || map.options.crs;
43510  		this._wmsVersion = parseFloat(this.wmsParams.version);
43511
43512  		var projectionKey = this._wmsVersion >= 1.3 ? 'crs' : 'srs';
43513  		this.wmsParams[projectionKey] = this._crs.code;
43514
43515  		TileLayer.prototype.onAdd.call(this, map);
43516  	},
43517
43518  	getTileUrl: function (coords) {
43519
43520  		var tileBounds = this._tileCoordsToNwSe(coords),
43521  		    crs = this._crs,
43522  		    bounds = toBounds(crs.project(tileBounds[0]), crs.project(tileBounds[1])),
43523  		    min = bounds.min,
43524  		    max = bounds.max,
43525  		    bbox = (this._wmsVersion >= 1.3 && this._crs === EPSG4326 ?
43526  		    [min.y, min.x, max.y, max.x] :
43527  		    [min.x, min.y, max.x, max.y]).join(','),
43528  		    url = TileLayer.prototype.getTileUrl.call(this, coords);
43529  		return url +
43530  			getParamString(this.wmsParams, url, this.options.uppercase) +
43531  			(this.options.uppercase ? '&BBOX=' : '&bbox=') + bbox;
43532  	},
43533
43534  	// @method setParams(params: Object, noRedraw?: Boolean): this
43535  	// Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).
43536  	setParams: function (params, noRedraw) {
43537
43538  		extend(this.wmsParams, params);
43539
43540  		if (!noRedraw) {
43541  			this.redraw();
43542  		}
43543
43544  		return this;
43545  	}
43546  });
43547
43548
43549  // @factory L.tileLayer.wms(baseUrl: String, options: TileLayer.WMS options)
43550  // Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.
43551  function tileLayerWMS(url, options) {
43552  	return new TileLayerWMS(url, options);
43553  }
43554
43555  TileLayer.WMS = TileLayerWMS;
43556  tileLayer.wms = tileLayerWMS;
43557
43558  /*
43559   * @class Renderer
43560   * @inherits Layer
43561   * @aka L.Renderer
43562   *
43563   * Base class for vector renderer implementations (`SVG`, `Canvas`). Handles the
43564   * DOM container of the renderer, its bounds, and its zoom animation.
43565   *
43566   * A `Renderer` works as an implicit layer group for all `Path`s - the renderer
43567   * itself can be added or removed to the map. All paths use a renderer, which can
43568   * be implicit (the map will decide the type of renderer and use it automatically)
43569   * or explicit (using the [`renderer`](#path-renderer) option of the path).
43570   *
43571   * Do not use this class directly, use `SVG` and `Canvas` instead.
43572   *
43573   * @event update: Event
43574   * Fired when the renderer updates its bounds, center and zoom, for example when
43575   * its map has moved
43576   */
43577
43578  var Renderer = Layer.extend({
43579
43580  	// @section
43581  	// @aka Renderer options
43582  	options: {
43583  		// @option padding: Number = 0.1
43584  		// How much to extend the clip area around the map view (relative to its size)
43585  		// e.g. 0.1 would be 10% of map view in each direction
43586  		padding: 0.1
43587  	},
43588
43589  	initialize: function (options) {
43590  		setOptions(this, options);
43591  		stamp(this);
43592  		this._layers = this._layers || {};
43593  	},
43594
43595  	onAdd: function () {
43596  		if (!this._container) {
43597  			this._initContainer(); // defined by renderer implementations
43598
43599  			if (this._zoomAnimated) {
43600  				addClass(this._container, 'leaflet-zoom-animated');
43601  			}
vendor: 43,109 bytes, lines 43601-45192
43601
43602  		}
43603
43604  		this.getPane().appendChild(this._container);
43605  		this._update();
43606  		this.on('update', this._updatePaths, this);
43607  	},
43608
43609  	onRemove: function () {
43610  		this.off('update', this._updatePaths, this);
43611  		this._destroyContainer();
43612  	},
43613
43614  	getEvents: function () {
43615  		var events = {
43616  			viewreset: this._reset,
43617  			zoom: this._onZoom,
43618  			moveend: this._update,
43619  			zoomend: this._onZoomEnd
43620  		};
43621  		if (this._zoomAnimated) {
43622  			events.zoomanim = this._onAnimZoom;
43623  		}
43624  		return events;
43625  	},
43626
43627  	_onAnimZoom: function (ev) {
43628  		this._updateTransform(ev.center, ev.zoom);
43629  	},
43630
43631  	_onZoom: function () {
43632  		this._updateTransform(this._map.getCenter(), this._map.getZoom());
43633  	},
43634
43635  	_updateTransform: function (center, zoom) {
43636  		var scale = this._map.getZoomScale(zoom, this._zoom),
43637  		    viewHalf = this._map.getSize().multiplyBy(0.5 + this.options.padding),
43638  		    currentCenterPoint = this._map.project(this._center, zoom),
43639
43640  		    topLeftOffset = viewHalf.multiplyBy(-scale).add(currentCenterPoint)
43641  				  .subtract(this._map._getNewPixelOrigin(center, zoom));
43642
43643  		if (Browser.any3d) {
43644  			setTransform(this._container, topLeftOffset, scale);
43645  		} else {
43646  			setPosition(this._container, topLeftOffset);
43647  		}
43648  	},
43649
43650  	_reset: function () {
43651  		this._update();
43652  		this._updateTransform(this._center, this._zoom);
43653
43654  		for (var id in this._layers) {
43655  			this._layers[id]._reset();
43656  		}
43657  	},
43658
43659  	_onZoomEnd: function () {
43660  		for (var id in this._layers) {
43661  			this._layers[id]._project();
43662  		}
43663  	},
43664
43665  	_updatePaths: function () {
43666  		for (var id in this._layers) {
43667  			this._layers[id]._update();
43668  		}
43669  	},
43670
43671  	_update: function () {
43672  		// Update pixel bounds of renderer container (for positioning/sizing/clipping later)
43673  		// Subclasses are responsible of firing the 'update' event.
43674  		var p = this.options.padding,
43675  		    size = this._map.getSize(),
43676  		    min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();
43677
43678  		this._bounds = new Bounds(min, min.add(size.multiplyBy(1 + p * 2)).round());
43679
43680  		this._center = this._map.getCenter();
43681  		this._zoom = this._map.getZoom();
43682  	}
43683  });
43684
43685  /*
43686   * @class Canvas
43687   * @inherits Renderer
43688   * @aka L.Canvas
43689   *
43690   * Allows vector layers to be displayed with [`<canvas>`](https://developer.mozilla.org/docs/Web/API/Canvas_API).
43691   * Inherits `Renderer`.
43692   *
43693   * Due to [technical limitations](https://caniuse.com/canvas), Canvas is not
43694   * available in all web browsers, notably IE8, and overlapping geometries might
43695   * not display properly in some edge cases.
43696   *
43697   * @example
43698   *
43699   * Use Canvas by default for all paths in the map:
43700   *
43701   * ```js
43702   * var map = L.map('map', {
43703   * 	renderer: L.canvas()
43704   * });
43705   * ```
43706   *
43707   * Use a Canvas renderer with extra padding for specific vector geometries:
43708   *
43709   * ```js
43710   * var map = L.map('map');
43711   * var myRenderer = L.canvas({ padding: 0.5 });
43712   * var line = L.polyline( coordinates, { renderer: myRenderer } );
43713   * var circle = L.circle( center, { renderer: myRenderer } );
43714   * ```
43715   */
43716
43717  var Canvas = Renderer.extend({
43718
43719  	// @section
43720  	// @aka Canvas options
43721  	options: {
43722  		// @option tolerance: Number = 0
43723  		// How much to extend the click tolerance around a path/object on the map.
43724  		tolerance: 0
43725  	},
43726
43727  	getEvents: function () {
43728  		var events = Renderer.prototype.getEvents.call(this);
43729  		events.viewprereset = this._onViewPreReset;
43730  		return events;
43731  	},
43732
43733  	_onViewPreReset: function () {
43734  		// Set a flag so that a viewprereset+moveend+viewreset only updates&redraws once
43735  		this._postponeUpdatePaths = true;
43736  	},
43737
43738  	onAdd: function () {
43739  		Renderer.prototype.onAdd.call(this);
43740
43741  		// Redraw vectors since canvas is cleared upon removal,
43742  		// in case of removing the renderer itself from the map.
43743  		this._draw();
43744  	},
43745
43746  	_initContainer: function () {
43747  		var container = this._container = document.createElement('canvas');
43748
43749  		on(container, 'mousemove', this._onMouseMove, this);
43750  		on(container, 'click dblclick mousedown mouseup contextmenu', this._onClick, this);
43751  		on(container, 'mouseout', this._handleMouseOut, this);
43752  		container['_leaflet_disable_events'] = true;
43753
43754  		this._ctx = container.getContext('2d');
43755  	},
43756
43757  	_destroyContainer: function () {
43758  		cancelAnimFrame(this._redrawRequest);
43759  		delete this._ctx;
43760  		remove(this._container);
43761  		off(this._container);
43762  		delete this._container;
43763  	},
43764
43765  	_updatePaths: function () {
43766  		if (this._postponeUpdatePaths) { return; }
43767
43768  		var layer;
43769  		this._redrawBounds = null;
43770  		for (var id in this._layers) {
43771  			layer = this._layers[id];
43772  			layer._update();
43773  		}
43774  		this._redraw();
43775  	},
43776
43777  	_update: function () {
43778  		if (this._map._animatingZoom && this._bounds) { return; }
43779
43780  		Renderer.prototype._update.call(this);
43781
43782  		var b = this._bounds,
43783  		    container = this._container,
43784  		    size = b.getSize(),
43785  		    m = Browser.retina ? 2 : 1;
43786
43787  		setPosition(container, b.min);
43788
43789  		// set canvas size (also clearing it); use double size on retina
43790  		container.width = m * size.x;
43791  		container.height = m * size.y;
43792  		container.style.width = size.x + 'px';
43793  		container.style.height = size.y + 'px';
43794
43795  		if (Browser.retina) {
43796  			this._ctx.scale(2, 2);
43797  		}
43798
43799  		// translate so we use the same path coordinates after canvas element moves
43800  		this._ctx.translate(-b.min.x, -b.min.y);
43801
43802  		// Tell paths to redraw themselves
43803  		this.fire('update');
43804  	},
43805
43806  	_reset: function () {
43807  		Renderer.prototype._reset.call(this);
43808
43809  		if (this._postponeUpdatePaths) {
43810  			this._postponeUpdatePaths = false;
43811  			this._updatePaths();
43812  		}
43813  	},
43814
43815  	_initPath: function (layer) {
43816  		this._updateDashArray(layer);
43817  		this._layers[stamp(layer)] = layer;
43818
43819  		var order = layer._order = {
43820  			layer: layer,
43821  			prev: this._drawLast,
43822  			next: null
43823  		};
43824  		if (this._drawLast) { this._drawLast.next = order; }
43825  		this._drawLast = order;
43826  		this._drawFirst = this._drawFirst || this._drawLast;
43827  	},
43828
43829  	_addPath: function (layer) {
43830  		this._requestRedraw(layer);
43831  	},
43832
43833  	_removePath: function (layer) {
43834  		var order = layer._order;
43835  		var next = order.next;
43836  		var prev = order.prev;
43837
43838  		if (next) {
43839  			next.prev = prev;
43840  		} else {
43841  			this._drawLast = prev;
43842  		}
43843  		if (prev) {
43844  			prev.next = next;
43845  		} else {
43846  			this._drawFirst = next;
43847  		}
43848
43849  		delete layer._order;
43850
43851  		delete this._layers[stamp(layer)];
43852
43853  		this._requestRedraw(layer);
43854  	},
43855
43856  	_updatePath: function (layer) {
43857  		// Redraw the union of the layer's old pixel
43858  		// bounds and the new pixel bounds.
43859  		this._extendRedrawBounds(layer);
43860  		layer._project();
43861  		layer._update();
43862  		// The redraw will extend the redraw bounds
43863  		// with the new pixel bounds.
43864  		this._requestRedraw(layer);
43865  	},
43866
43867  	_updateStyle: function (layer) {
43868  		this._updateDashArray(layer);
43869  		this._requestRedraw(layer);
43870  	},
43871
43872  	_updateDashArray: function (layer) {
43873  		if (typeof layer.options.dashArray === 'string') {
43874  			var parts = layer.options.dashArray.split(/[, ]+/),
43875  			    dashArray = [],
43876  			    dashValue,
43877  			    i;
43878  			for (i = 0; i < parts.length; i++) {
43879  				dashValue = Number(parts[i]);
43880  				// Ignore dash array containing invalid lengths
43881  				if (isNaN(dashValue)) { return; }
43882  				dashArray.push(dashValue);
43883  			}
43884  			layer.options._dashArray = dashArray;
43885  		} else {
43886  			layer.options._dashArray = layer.options.dashArray;
43887  		}
43888  	},
43889
43890  	_requestRedraw: function (layer) {
43891  		if (!this._map) { return; }
43892
43893  		this._extendRedrawBounds(layer);
43894  		this._redrawRequest = this._redrawRequest || requestAnimFrame(this._redraw, this);
43895  	},
43896
43897  	_extendRedrawBounds: function (layer) {
43898  		if (layer._pxBounds) {
43899  			var padding = (layer.options.weight || 0) + 1;
43900  			this._redrawBounds = this._redrawBounds || new Bounds();
43901  			this._redrawBounds.extend(layer._pxBounds.min.subtract([padding, padding]));
43902  			this._redrawBounds.extend(layer._pxBounds.max.add([padding, padding]));
43903  		}
43904  	},
43905
43906  	_redraw: function () {
43907  		this._redrawRequest = null;
43908
43909  		if (this._redrawBounds) {
43910  			this._redrawBounds.min._floor();
43911  			this._redrawBounds.max._ceil();
43912  		}
43913
43914  		this._clear(); // clear layers in redraw bounds
43915  		this._draw(); // draw layers
43916
43917  		this._redrawBounds = null;
43918  	},
43919
43920  	_clear: function () {
43921  		var bounds = this._redrawBounds;
43922  		if (bounds) {
43923  			var size = bounds.getSize();
43924  			this._ctx.clearRect(bounds.min.x, bounds.min.y, size.x, size.y);
43925  		} else {
43926  			this._ctx.save();
43927  			this._ctx.setTransform(1, 0, 0, 1, 0, 0);
43928  			this._ctx.clearRect(0, 0, this._container.width, this._container.height);
43929  			this._ctx.restore();
43930  		}
43931  	},
43932
43933  	_draw: function () {
43934  		var layer, bounds = this._redrawBounds;
43935  		this._ctx.save();
43936  		if (bounds) {
43937  			var size = bounds.getSize();
43938  			this._ctx.beginPath();
43939  			this._ctx.rect(bounds.min.x, bounds.min.y, size.x, size.y);
43940  			this._ctx.clip();
43941  		}
43942
43943  		this._drawing = true;
43944
43945  		for (var order = this._drawFirst; order; order = order.next) {
43946  			layer = order.layer;
43947  			if (!bounds || (layer._pxBounds && layer._pxBounds.intersects(bounds))) {
43948  				layer._updatePath();
43949  			}
43950  		}
43951
43952  		this._drawing = false;
43953
43954  		this._ctx.restore();  // Restore state before clipping.
43955  	},
43956
43957  	_updatePoly: function (layer, closed) {
43958  		if (!this._drawing) { return; }
43959
43960  		var i, j, len2, p,
43961  		    parts = layer._parts,
43962  		    len = parts.length,
43963  		    ctx = this._ctx;
43964
43965  		if (!len) { return; }
43966
43967  		ctx.beginPath();
43968
43969  		for (i = 0; i < len; i++) {
43970  			for (j = 0, len2 = parts[i].length; j < len2; j++) {
43971  				p = parts[i][j];
43972  				ctx[j ? 'lineTo' : 'moveTo'](p.x, p.y);
43973  			}
43974  			if (closed) {
43975  				ctx.closePath();
43976  			}
43977  		}
43978
43979  		this._fillStroke(ctx, layer);
43980
43981  		// TODO optimization: 1 fill/stroke for all features with equal style instead of 1 for each feature
43982  	},
43983
43984  	_updateCircle: function (layer) {
43985
43986  		if (!this._drawing || layer._empty()) { return; }
43987
43988  		var p = layer._point,
43989  		    ctx = this._ctx,
43990  		    r = Math.max(Math.round(layer._radius), 1),
43991  		    s = (Math.max(Math.round(layer._radiusY), 1) || r) / r;
43992
43993  		if (s !== 1) {
43994  			ctx.save();
43995  			ctx.scale(1, s);
43996  		}
43997
43998  		ctx.beginPath();
43999  		ctx.arc(p.x, p.y / s, r, 0, Math.PI * 2, false);
44000
44001  		if (s !== 1) {
44002  			ctx.restore();
44003  		}
44004
44005  		this._fillStroke(ctx, layer);
44006  	},
44007
44008  	_fillStroke: function (ctx, layer) {
44009  		var options = layer.options;
44010
44011  		if (options.fill) {
44012  			ctx.globalAlpha = options.fillOpacity;
44013  			ctx.fillStyle = options.fillColor || options.color;
44014  			ctx.fill(options.fillRule || 'evenodd');
44015  		}
44016
44017  		if (options.stroke && options.weight !== 0) {
44018  			if (ctx.setLineDash) {
44019  				ctx.setLineDash(layer.options && layer.options._dashArray || []);
44020  			}
44021  			ctx.globalAlpha = options.opacity;
44022  			ctx.lineWidth = options.weight;
44023  			ctx.strokeStyle = options.color;
44024  			ctx.lineCap = options.lineCap;
44025  			ctx.lineJoin = options.lineJoin;
44026  			ctx.stroke();
44027  		}
44028  	},
44029
44030  	// Canvas obviously doesn't have mouse events for individual drawn objects,
44031  	// so we emulate that by calculating what's under the mouse on mousemove/click manually
44032
44033  	_onClick: function (e) {
44034  		var point = this._map.mouseEventToLayerPoint(e), layer, clickedLayer;
44035
44036  		for (var order = this._drawFirst; order; order = order.next) {
44037  			layer = order.layer;
44038  			if (layer.options.interactive && layer._containsPoint(point)) {
44039  				if (!(e.type === 'click' || e.type === 'preclick') || !this._map._draggableMoved(layer)) {
44040  					clickedLayer = layer;
44041  				}
44042  			}
44043  		}
44044  		this._fireEvent(clickedLayer ? [clickedLayer] : false, e);
44045  	},
44046
44047  	_onMouseMove: function (e) {
44048  		if (!this._map || this._map.dragging.moving() || this._map._animatingZoom) { return; }
44049
44050  		var point = this._map.mouseEventToLayerPoint(e);
44051  		this._handleMouseHover(e, point);
44052  	},
44053
44054
44055  	_handleMouseOut: function (e) {
44056  		var layer = this._hoveredLayer;
44057  		if (layer) {
44058  			// if we're leaving the layer, fire mouseout
44059  			removeClass(this._container, 'leaflet-interactive');
44060  			this._fireEvent([layer], e, 'mouseout');
44061  			this._hoveredLayer = null;
44062  			this._mouseHoverThrottled = false;
44063  		}
44064  	},
44065
44066  	_handleMouseHover: function (e, point) {
44067  		if (this._mouseHoverThrottled) {
44068  			return;
44069  		}
44070
44071  		var layer, candidateHoveredLayer;
44072
44073  		for (var order = this._drawFirst; order; order = order.next) {
44074  			layer = order.layer;
44075  			if (layer.options.interactive && layer._containsPoint(point)) {
44076  				candidateHoveredLayer = layer;
44077  			}
44078  		}
44079
44080  		if (candidateHoveredLayer !== this._hoveredLayer) {
44081  			this._handleMouseOut(e);
44082
44083  			if (candidateHoveredLayer) {
44084  				addClass(this._container, 'leaflet-interactive'); // change cursor
44085  				this._fireEvent([candidateHoveredLayer], e, 'mouseover');
44086  				this._hoveredLayer = candidateHoveredLayer;
44087  			}
44088  		}
44089
44090  		this._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : false, e);
44091
44092  		this._mouseHoverThrottled = true;
44093  		setTimeout(bind(function () {
44094  			this._mouseHoverThrottled = false;
44095  		}, this), 32);
44096  	},
44097
44098  	_fireEvent: function (layers, e, type) {
44099  		this._map._fireDOMEvent(e, type || e.type, layers);
44100  	},
44101
44102  	_bringToFront: function (layer) {
44103  		var order = layer._order;
44104
44105  		if (!order) { return; }
44106
44107  		var next = order.next;
44108  		var prev = order.prev;
44109
44110  		if (next) {
44111  			next.prev = prev;
44112  		} else {
44113  			// Already last
44114  			return;
44115  		}
44116  		if (prev) {
44117  			prev.next = next;
44118  		} else if (next) {
44119  			// Update first entry unless this is the
44120  			// single entry
44121  			this._drawFirst = next;
44122  		}
44123
44124  		order.prev = this._drawLast;
44125  		this._drawLast.next = order;
44126
44127  		order.next = null;
44128  		this._drawLast = order;
44129
44130  		this._requestRedraw(layer);
44131  	},
44132
44133  	_bringToBack: function (layer) {
44134  		var order = layer._order;
44135
44136  		if (!order) { return; }
44137
44138  		var next = order.next;
44139  		var prev = order.prev;
44140
44141  		if (prev) {
44142  			prev.next = next;
44143  		} else {
44144  			// Already first
44145  			return;
44146  		}
44147  		if (next) {
44148  			next.prev = prev;
44149  		} else if (prev) {
44150  			// Update last entry unless this is the
44151  			// single entry
44152  			this._drawLast = prev;
44153  		}
44154
44155  		order.prev = null;
44156
44157  		order.next = this._drawFirst;
44158  		this._drawFirst.prev = order;
44159  		this._drawFirst = order;
44160
44161  		this._requestRedraw(layer);
44162  	}
44163  });
44164
44165  // @factory L.canvas(options?: Renderer options)
44166  // Creates a Canvas renderer with the given options.
44167  function canvas(options) {
44168  	return Browser.canvas ? new Canvas(options) : null;
44169  }
44170
44171  /*
44172   * Thanks to Dmitry Baranovsky and his Raphael library for inspiration!
44173   */
44174
44175
44176  var vmlCreate = (function () {
44177  	try {
44178  		document.namespaces.add('lvml', 'urn:schemas-microsoft-com:vml');
44179  		return function (name) {
44180  			return document.createElement('<lvml:' + name + ' class="lvml">');
44181  		};
44182  	} catch (e) {
44183  		// Do not return fn from catch block so `e` can be garbage collected
44184  		// See https://github.com/Leaflet/Leaflet/pull/7279
44185  	}
44186  	return function (name) {
44187  		return document.createElement('<' + name + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
44188  	};
44189  })();
44190
44191
44192  /*
44193   * @class SVG
44194   *
44195   *
44196   * VML was deprecated in 2012, which means VML functionality exists only for backwards compatibility
44197   * with old versions of Internet Explorer.
44198   */
44199
44200  // mixin to redefine some SVG methods to handle VML syntax which is similar but with some differences
44201  var vmlMixin = {
44202
44203  	_initContainer: function () {
44204  		this._container = create$1('div', 'leaflet-vml-container');
44205  	},
44206
44207  	_update: function () {
44208  		if (this._map._animatingZoom) { return; }
44209  		Renderer.prototype._update.call(this);
44210  		this.fire('update');
44211  	},
44212
44213  	_initPath: function (layer) {
44214  		var container = layer._container = vmlCreate('shape');
44215
44216  		addClass(container, 'leaflet-vml-shape ' + (this.options.className || ''));
44217
44218  		container.coordsize = '1 1';
44219
44220  		layer._path = vmlCreate('path');
44221  		container.appendChild(layer._path);
44222
44223  		this._updateStyle(layer);
44224  		this._layers[stamp(layer)] = layer;
44225  	},
44226
44227  	_addPath: function (layer) {
44228  		var container = layer._container;
44229  		this._container.appendChild(container);
44230
44231  		if (layer.options.interactive) {
44232  			layer.addInteractiveTarget(container);
44233  		}
44234  	},
44235
44236  	_removePath: function (layer) {
44237  		var container = layer._container;
44238  		remove(container);
44239  		layer.removeInteractiveTarget(container);
44240  		delete this._layers[stamp(layer)];
44241  	},
44242
44243  	_updateStyle: function (layer) {
44244  		var stroke = layer._stroke,
44245  		    fill = layer._fill,
44246  		    options = layer.options,
44247  		    container = layer._container;
44248
44249  		container.stroked = !!options.stroke;
44250  		container.filled = !!options.fill;
44251
44252  		if (options.stroke) {
44253  			if (!stroke) {
44254  				stroke = layer._stroke = vmlCreate('stroke');
44255  			}
44256  			container.appendChild(stroke);
44257  			stroke.weight = options.weight + 'px';
44258  			stroke.color = options.color;
44259  			stroke.opacity = options.opacity;
44260
44261  			if (options.dashArray) {
44262  				stroke.dashStyle = isArray(options.dashArray) ?
44263  				    options.dashArray.join(' ') :
44264  				    options.dashArray.replace(/( *, *)/g, ' ');
44265  			} else {
44266  				stroke.dashStyle = '';
44267  			}
44268  			stroke.endcap = options.lineCap.replace('butt', 'flat');
44269  			stroke.joinstyle = options.lineJoin;
44270
44271  		} else if (stroke) {
44272  			container.removeChild(stroke);
44273  			layer._stroke = null;
44274  		}
44275
44276  		if (options.fill) {
44277  			if (!fill) {
44278  				fill = layer._fill = vmlCreate('fill');
44279  			}
44280  			container.appendChild(fill);
44281  			fill.color = options.fillColor || options.color;
44282  			fill.opacity = options.fillOpacity;
44283
44284  		} else if (fill) {
44285  			container.removeChild(fill);
44286  			layer._fill = null;
44287  		}
44288  	},
44289
44290  	_updateCircle: function (layer) {
44291  		var p = layer._point.round(),
44292  		    r = Math.round(layer._radius),
44293  		    r2 = Math.round(layer._radiusY || r);
44294
44295  		this._setPath(layer, layer._empty() ? 'M0 0' :
44296  			'AL ' + p.x + ',' + p.y + ' ' + r + ',' + r2 + ' 0,' + (65535 * 360));
44297  	},
44298
44299  	_setPath: function (layer, path) {
44300  		layer._path.v = path;
44301  	},
44302
44303  	_bringToFront: function (layer) {
44304  		toFront(layer._container);
44305  	},
44306
44307  	_bringToBack: function (layer) {
44308  		toBack(layer._container);
44309  	}
44310  };
44311
44312  var create = Browser.vml ? vmlCreate : svgCreate;
44313
44314  /*
44315   * @class SVG
44316   * @inherits Renderer
44317   * @aka L.SVG
44318   *
44319   * Allows vector layers to be displayed with [SVG](https://developer.mozilla.org/docs/Web/SVG).
44320   * Inherits `Renderer`.
44321   *
44322   * Due to [technical limitations](https://caniuse.com/svg), SVG is not
44323   * available in all web browsers, notably Android 2.x and 3.x.
44324   *
44325   * Although SVG is not available on IE7 and IE8, these browsers support
44326   * [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language)
44327   * (a now deprecated technology), and the SVG renderer will fall back to VML in
44328   * this case.
44329   *
44330   * @example
44331   *
44332   * Use SVG by default for all paths in the map:
44333   *
44334   * ```js
44335   * var map = L.map('map', {
44336   * 	renderer: L.svg()
44337   * });
44338   * ```
44339   *
44340   * Use a SVG renderer with extra padding for specific vector geometries:
44341   *
44342   * ```js
44343   * var map = L.map('map');
44344   * var myRenderer = L.svg({ padding: 0.5 });
44345   * var line = L.polyline( coordinates, { renderer: myRenderer } );
44346   * var circle = L.circle( center, { renderer: myRenderer } );
44347   * ```
44348   */
44349
44350  var SVG = Renderer.extend({
44351
44352  	_initContainer: function () {
44353  		this._container = create('svg');
44354
44355  		// makes it possible to click through svg root; we'll reset it back in individual paths
44356  		this._container.setAttribute('pointer-events', 'none');
44357
44358  		this._rootGroup = create('g');
44359  		this._container.appendChild(this._rootGroup);
44360  	},
44361
44362  	_destroyContainer: function () {
44363  		remove(this._container);
44364  		off(this._container);
44365  		delete this._container;
44366  		delete this._rootGroup;
44367  		delete this._svgSize;
44368  	},
44369
44370  	_update: function () {
44371  		if (this._map._animatingZoom && this._bounds) { return; }
44372
44373  		Renderer.prototype._update.call(this);
44374
44375  		var b = this._bounds,
44376  		    size = b.getSize(),
44377  		    container = this._container;
44378
44379  		// set size of svg-container if changed
44380  		if (!this._svgSize || !this._svgSize.equals(size)) {
44381  			this._svgSize = size;
44382  			container.setAttribute('width', size.x);
44383  			container.setAttribute('height', size.y);
44384  		}
44385
44386  		// movement: update container viewBox so that we don't have to change coordinates of individual layers
44387  		setPosition(container, b.min);
44388  		container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));
44389
44390  		this.fire('update');
44391  	},
44392
44393  	// methods below are called by vector layers implementations
44394
44395  	_initPath: function (layer) {
44396  		var path = layer._path = create('path');
44397
44398  		// @namespace Path
44399  		// @option className: String = null
44400  		// Custom class name set on an element. Only for SVG renderer.
44401  		if (layer.options.className) {
44402  			addClass(path, layer.options.className);
44403  		}
44404
44405  		if (layer.options.interactive) {
44406  			addClass(path, 'leaflet-interactive');
44407  		}
44408
44409  		this._updateStyle(layer);
44410  		this._layers[stamp(layer)] = layer;
44411  	},
44412
44413  	_addPath: function (layer) {
44414  		if (!this._rootGroup) { this._initContainer(); }
44415  		this._rootGroup.appendChild(layer._path);
44416  		layer.addInteractiveTarget(layer._path);
44417  	},
44418
44419  	_removePath: function (layer) {
44420  		remove(layer._path);
44421  		layer.removeInteractiveTarget(layer._path);
44422  		delete this._layers[stamp(layer)];
44423  	},
44424
44425  	_updatePath: function (layer) {
44426  		layer._project();
44427  		layer._update();
44428  	},
44429
44430  	_updateStyle: function (layer) {
44431  		var path = layer._path,
44432  		    options = layer.options;
44433
44434  		if (!path) { return; }
44435
44436  		if (options.stroke) {
44437  			path.setAttribute('stroke', options.color);
44438  			path.setAttribute('stroke-opacity', options.opacity);
44439  			path.setAttribute('stroke-width', options.weight);
44440  			path.setAttribute('stroke-linecap', options.lineCap);
44441  			path.setAttribute('stroke-linejoin', options.lineJoin);
44442
44443  			if (options.dashArray) {
44444  				path.setAttribute('stroke-dasharray', options.dashArray);
44445  			} else {
44446  				path.removeAttribute('stroke-dasharray');
44447  			}
44448
44449  			if (options.dashOffset) {
44450  				path.setAttribute('stroke-dashoffset', options.dashOffset);
44451  			} else {
44452  				path.removeAttribute('stroke-dashoffset');
44453  			}
44454  		} else {
44455  			path.setAttribute('stroke', 'none');
44456  		}
44457
44458  		if (options.fill) {
44459  			path.setAttribute('fill', options.fillColor || options.color);
44460  			path.setAttribute('fill-opacity', options.fillOpacity);
44461  			path.setAttribute('fill-rule', options.fillRule || 'evenodd');
44462  		} else {
44463  			path.setAttribute('fill', 'none');
44464  		}
44465  	},
44466
44467  	_updatePoly: function (layer, closed) {
44468  		this._setPath(layer, pointsToPath(layer._parts, closed));
44469  	},
44470
44471  	_updateCircle: function (layer) {
44472  		var p = layer._point,
44473  		    r = Math.max(Math.round(layer._radius), 1),
44474  		    r2 = Math.max(Math.round(layer._radiusY), 1) || r,
44475  		    arc = 'a' + r + ',' + r2 + ' 0 1,0 ';
44476
44477  		// drawing a circle with two half-arcs
44478  		var d = layer._empty() ? 'M0 0' :
44479  			'M' + (p.x - r) + ',' + p.y +
44480  			arc + (r * 2) + ',0 ' +
44481  			arc + (-r * 2) + ',0 ';
44482
44483  		this._setPath(layer, d);
44484  	},
44485
44486  	_setPath: function (layer, path) {
44487  		layer._path.setAttribute('d', path);
44488  	},
44489
44490  	// SVG does not have the concept of zIndex so we resort to changing the DOM order of elements
44491  	_bringToFront: function (layer) {
44492  		toFront(layer._path);
44493  	},
44494
44495  	_bringToBack: function (layer) {
44496  		toBack(layer._path);
44497  	}
44498  });
44499
44500  if (Browser.vml) {
44501  	SVG.include(vmlMixin);
44502  }
44503
44504  // @namespace SVG
44505  // @factory L.svg(options?: Renderer options)
44506  // Creates a SVG renderer with the given options.
44507  function svg(options) {
44508  	return Browser.svg || Browser.vml ? new SVG(options) : null;
44509  }
44510
44511  Map.include({
44512  	// @namespace Map; @method getRenderer(layer: Path): Renderer
44513  	// Returns the instance of `Renderer` that should be used to render the given
44514  	// `Path`. It will ensure that the `renderer` options of the map and paths
44515  	// are respected, and that the renderers do exist on the map.
44516  	getRenderer: function (layer) {
44517  		// @namespace Path; @option renderer: Renderer
44518  		// Use this specific instance of `Renderer` for this path. Takes
44519  		// precedence over the map's [default renderer](#map-renderer).
44520  		var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
44521
44522  		if (!renderer) {
44523  			renderer = this._renderer = this._createRenderer();
44524  		}
44525
44526  		if (!this.hasLayer(renderer)) {
44527  			this.addLayer(renderer);
44528  		}
44529  		return renderer;
44530  	},
44531
44532  	_getPaneRenderer: function (name) {
44533  		if (name === 'overlayPane' || name === undefined) {
44534  			return false;
44535  		}
44536
44537  		var renderer = this._paneRenderers[name];
44538  		if (renderer === undefined) {
44539  			renderer = this._createRenderer({pane: name});
44540  			this._paneRenderers[name] = renderer;
44541  		}
44542  		return renderer;
44543  	},
44544
44545  	_createRenderer: function (options) {
44546  		// @namespace Map; @option preferCanvas: Boolean = false
44547  		// Whether `Path`s should be rendered on a `Canvas` renderer.
44548  		// By default, all `Path`s are rendered in a `SVG` renderer.
44549  		return (this.options.preferCanvas && canvas(options)) || svg(options);
44550  	}
44551  });
44552
44553  /*
44554   * L.Rectangle extends Polygon and creates a rectangle when passed a LatLngBounds object.
44555   */
44556
44557  /*
44558   * @class Rectangle
44559   * @aka L.Rectangle
44560   * @inherits Polygon
44561   *
44562   * A class for drawing rectangle overlays on a map. Extends `Polygon`.
44563   *
44564   * @example
44565   *
44566   * ```js
44567   * // define rectangle geographical bounds
44568   * var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
44569   *
44570   * // create an orange rectangle
44571   * L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
44572   *
44573   * // zoom the map to the rectangle bounds
44574   * map.fitBounds(bounds);
44575   * ```
44576   *
44577   */
44578
44579
44580  var Rectangle = Polygon.extend({
44581  	initialize: function (latLngBounds, options) {
44582  		Polygon.prototype.initialize.call(this, this._boundsToLatLngs(latLngBounds), options);
44583  	},
44584
44585  	// @method setBounds(latLngBounds: LatLngBounds): this
44586  	// Redraws the rectangle with the passed bounds.
44587  	setBounds: function (latLngBounds) {
44588  		return this.setLatLngs(this._boundsToLatLngs(latLngBounds));
44589  	},
44590
44591  	_boundsToLatLngs: function (latLngBounds) {
44592  		latLngBounds = toLatLngBounds(latLngBounds);
44593  		return [
44594  			latLngBounds.getSouthWest(),
44595  			latLngBounds.getNorthWest(),
44596  			latLngBounds.getNorthEast(),
44597  			latLngBounds.getSouthEast()
44598  		];
44599  	}
44600  });
44601
44602
44603  // @factory L.rectangle(latLngBounds: LatLngBounds, options?: Polyline options)
44604  function rectangle(latLngBounds, options) {
44605  	return new Rectangle(latLngBounds, options);
44606  }
44607
44608  SVG.create = create;
44609  SVG.pointsToPath = pointsToPath;
44610
44611  GeoJSON.geometryToLayer = geometryToLayer;
44612  GeoJSON.coordsToLatLng = coordsToLatLng;
44613  GeoJSON.coordsToLatLngs = coordsToLatLngs;
44614  GeoJSON.latLngToCoords = latLngToCoords;
44615  GeoJSON.latLngsToCoords = latLngsToCoords;
44616  GeoJSON.getFeature = getFeature;
44617  GeoJSON.asFeature = asFeature;
44618
44619  /*
44620   * L.Handler.BoxZoom is used to add shift-drag zoom interaction to the map
44621   * (zoom to a selected bounding box), enabled by default.
44622   */
44623
44624  // @namespace Map
44625  // @section Interaction Options
44626  Map.mergeOptions({
44627  	// @option boxZoom: Boolean = true
44628  	// Whether the map can be zoomed to a rectangular area specified by
44629  	// dragging the mouse while pressing the shift key.
44630  	boxZoom: true
44631  });
44632
44633  var BoxZoom = Handler.extend({
44634  	initialize: function (map) {
44635  		this._map = map;
44636  		this._container = map._container;
44637  		this._pane = map._panes.overlayPane;
44638  		this._resetStateTimeout = 0;
44639  		map.on('unload', this._destroy, this);
44640  	},
44641
44642  	addHooks: function () {
44643  		on(this._container, 'mousedown', this._onMouseDown, this);
44644  	},
44645
44646  	removeHooks: function () {
44647  		off(this._container, 'mousedown', this._onMouseDown, this);
44648  	},
44649
44650  	moved: function () {
44651  		return this._moved;
44652  	},
44653
44654  	_destroy: function () {
44655  		remove(this._pane);
44656  		delete this._pane;
44657  	},
44658
44659  	_resetState: function () {
44660  		this._resetStateTimeout = 0;
44661  		this._moved = false;
44662  	},
44663
44664  	_clearDeferredResetState: function () {
44665  		if (this._resetStateTimeout !== 0) {
44666  			clearTimeout(this._resetStateTimeout);
44667  			this._resetStateTimeout = 0;
44668  		}
44669  	},
44670
44671  	_onMouseDown: function (e) {
44672  		if (!e.shiftKey || ((e.which !== 1) && (e.button !== 1))) { return false; }
44673
44674  		// Clear the deferred resetState if it hasn't executed yet, otherwise it
44675  		// will interrupt the interaction and orphan a box element in the container.
44676  		this._clearDeferredResetState();
44677  		this._resetState();
44678
44679  		disableTextSelection();
44680  		disableImageDrag();
44681
44682  		this._startPoint = this._map.mouseEventToContainerPoint(e);
44683
44684  		on(document, {
44685  			contextmenu: stop,
44686  			mousemove: this._onMouseMove,
44687  			mouseup: this._onMouseUp,
44688  			keydown: this._onKeyDown
44689  		}, this);
44690  	},
44691
44692  	_onMouseMove: function (e) {
44693  		if (!this._moved) {
44694  			this._moved = true;
44695
44696  			this._box = create$1('div', 'leaflet-zoom-box', this._container);
44697  			addClass(this._container, 'leaflet-crosshair');
44698
44699  			this._map.fire('boxzoomstart');
44700  		}
44701
44702  		this._point = this._map.mouseEventToContainerPoint(e);
44703
44704  		var bounds = new Bounds(this._point, this._startPoint),
44705  		    size = bounds.getSize();
44706
44707  		setPosition(this._box, bounds.min);
44708
44709  		this._box.style.width  = size.x + 'px';
44710  		this._box.style.height = size.y + 'px';
44711  	},
44712
44713  	_finish: function () {
44714  		if (this._moved) {
44715  			remove(this._box);
44716  			removeClass(this._container, 'leaflet-crosshair');
44717  		}
44718
44719  		enableTextSelection();
44720  		enableImageDrag();
44721
44722  		off(document, {
44723  			contextmenu: stop,
44724  			mousemove: this._onMouseMove,
44725  			mouseup: this._onMouseUp,
44726  			keydown: this._onKeyDown
44727  		}, this);
44728  	},
44729
44730  	_onMouseUp: function (e) {
44731  		if ((e.which !== 1) && (e.button !== 1)) { return; }
44732
44733  		this._finish();
44734
44735  		if (!this._moved) { return; }
44736  		// Postpone to next JS tick so internal click event handling
44737  		// still see it as "moved".
44738  		this._clearDeferredResetState();
44739  		this._resetStateTimeout = setTimeout(bind(this._resetState, this), 0);
44740
44741  		var bounds = new LatLngBounds(
44742  		        this._map.containerPointToLatLng(this._startPoint),
44743  		        this._map.containerPointToLatLng(this._point));
44744
44745  		this._map
44746  			.fitBounds(bounds)
44747  			.fire('boxzoomend', {boxZoomBounds: bounds});
44748  	},
44749
44750  	_onKeyDown: function (e) {
44751  		if (e.keyCode === 27) {
44752  			this._finish();
44753  			this._clearDeferredResetState();
44754  			this._resetState();
44755  		}
44756  	}
44757  });
44758
44759  // @section Handlers
44760  // @property boxZoom: Handler
44761  // Box (shift-drag with mouse) zoom handler.
44762  Map.addInitHook('addHandler', 'boxZoom', BoxZoom);
44763
44764  /*
44765   * L.Handler.DoubleClickZoom is used to handle double-click zoom on the map, enabled by default.
44766   */
44767
44768  // @namespace Map
44769  // @section Interaction Options
44770
44771  Map.mergeOptions({
44772  	// @option doubleClickZoom: Boolean|String = true
44773  	// Whether the map can be zoomed in by double clicking on it and
44774  	// zoomed out by double clicking while holding shift. If passed
44775  	// `'center'`, double-click zoom will zoom to the center of the
44776  	//  view regardless of where the mouse was.
44777  	doubleClickZoom: true
44778  });
44779
44780  var DoubleClickZoom = Handler.extend({
44781  	addHooks: function () {
44782  		this._map.on('dblclick', this._onDoubleClick, this);
44783  	},
44784
44785  	removeHooks: function () {
44786  		this._map.off('dblclick', this._onDoubleClick, this);
44787  	},
44788
44789  	_onDoubleClick: function (e) {
44790  		var map = this._map,
44791  		    oldZoom = map.getZoom(),
44792  		    delta = map.options.zoomDelta,
44793  		    zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;
44794
44795  		if (map.options.doubleClickZoom === 'center') {
44796  			map.setZoom(zoom);
44797  		} else {
44798  			map.setZoomAround(e.containerPoint, zoom);
44799  		}
44800  	}
44801  });
44802
44803  // @section Handlers
44804  //
44805  // Map properties include interaction handlers that allow you to control
44806  // interaction behavior in runtime, enabling or disabling certain features such
44807  // as dragging or touch zoom (see `Handler` methods). For example:
44808  //
44809  // ```js
44810  // map.doubleClickZoom.disable();
44811  // ```
44812  //
44813  // @property doubleClickZoom: Handler
44814  // Double click zoom handler.
44815  Map.addInitHook('addHandler', 'doubleClickZoom', DoubleClickZoom);
44816
44817  /*
44818   * L.Handler.MapDrag is used to make the map draggable (with panning inertia), enabled by default.
44819   */
44820
44821  // @namespace Map
44822  // @section Interaction Options
44823  Map.mergeOptions({
44824  	// @option dragging: Boolean = true
44825  	// Whether the map is draggable with mouse/touch or not.
44826  	dragging: true,
44827
44828  	// @section Panning Inertia Options
44829  	// @option inertia: Boolean = *
44830  	// If enabled, panning of the map will have an inertia effect where
44831  	// the map builds momentum while dragging and continues moving in
44832  	// the same direction for some time. Feels especially nice on touch
44833  	// devices. Enabled by default.
44834  	inertia: true,
44835
44836  	// @option inertiaDeceleration: Number = 3000
44837  	// The rate with which the inertial movement slows down, in pixels/second².
44838  	inertiaDeceleration: 3400, // px/s^2
44839
44840  	// @option inertiaMaxSpeed: Number = Infinity
44841  	// Max speed of the inertial movement, in pixels/second.
44842  	inertiaMaxSpeed: Infinity, // px/s
44843
44844  	// @option easeLinearity: Number = 0.2
44845  	easeLinearity: 0.2,
44846
44847  	// TODO refactor, move to CRS
44848  	// @option worldCopyJump: Boolean = false
44849  	// With this option enabled, the map tracks when you pan to another "copy"
44850  	// of the world and seamlessly jumps to the original one so that all overlays
44851  	// like markers and vector layers are still visible.
44852  	worldCopyJump: false,
44853
44854  	// @option maxBoundsViscosity: Number = 0.0
44855  	// If `maxBounds` is set, this option will control how solid the bounds
44856  	// are when dragging the map around. The default value of `0.0` allows the
44857  	// user to drag outside the bounds at normal speed, higher values will
44858  	// slow down map dragging outside bounds, and `1.0` makes the bounds fully
44859  	// solid, preventing the user from dragging outside the bounds.
44860  	maxBoundsViscosity: 0.0
44861  });
44862
44863  var Drag = Handler.extend({
44864  	addHooks: function () {
44865  		if (!this._draggable) {
44866  			var map = this._map;
44867
44868  			this._draggable = new Draggable(map._mapPane, map._container);
44869
44870  			this._draggable.on({
44871  				dragstart: this._onDragStart,
44872  				drag: this._onDrag,
44873  				dragend: this._onDragEnd
44874  			}, this);
44875
44876  			this._draggable.on('predrag', this._onPreDragLimit, this);
44877  			if (map.options.worldCopyJump) {
44878  				this._draggable.on('predrag', this._onPreDragWrap, this);
44879  				map.on('zoomend', this._onZoomEnd, this);
44880
44881  				map.whenReady(this._onZoomEnd, this);
44882  			}
44883  		}
44884  		addClass(this._map._container, 'leaflet-grab leaflet-touch-drag');
44885  		this._draggable.enable();
44886  		this._positions = [];
44887  		this._times = [];
44888  	},
44889
44890  	removeHooks: function () {
44891  		removeClass(this._map._container, 'leaflet-grab');
44892  		removeClass(this._map._container, 'leaflet-touch-drag');
44893  		this._draggable.disable();
44894  	},
44895
44896  	moved: function () {
44897  		return this._draggable && this._draggable._moved;
44898  	},
44899
44900  	moving: function () {
44901  		return this._draggable && this._draggable._moving;
44902  	},
44903
44904  	_onDragStart: function () {
44905  		var map = this._map;
44906
44907  		map._stop();
44908  		if (this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {
44909  			var bounds = toLatLngBounds(this._map.options.maxBounds);
44910
44911  			this._offsetLimit = toBounds(
44912  				this._map.latLngToContainerPoint(bounds.getNorthWest()).multiplyBy(-1),
44913  				this._map.latLngToContainerPoint(bounds.getSouthEast()).multiplyBy(-1)
44914  					.add(this._map.getSize()));
44915
44916  			this._viscosity = Math.min(1.0, Math.max(0.0, this._map.options.maxBoundsViscosity));
44917  		} else {
44918  			this._offsetLimit = null;
44919  		}
44920
44921  		map
44922  		    .fire('movestart')
44923  		    .fire('dragstart');
44924
44925  		if (map.options.inertia) {
44926  			this._positions = [];
44927  			this._times = [];
44928  		}
44929  	},
44930
44931  	_onDrag: function (e) {
44932  		if (this._map.options.inertia) {
44933  			var time = this._lastTime = +new Date(),
44934  			    pos = this._lastPos = this._draggable._absPos || this._draggable._newPos;
44935
44936  			this._positions.push(pos);
44937  			this._times.push(time);
44938
44939  			this._prunePositions(time);
44940  		}
44941
44942  		this._map
44943  		    .fire('move', e)
44944  		    .fire('drag', e);
44945  	},
44946
44947  	_prunePositions: function (time) {
44948  		while (this._positions.length > 1 && time - this._times[0] > 50) {
44949  			this._positions.shift();
44950  			this._times.shift();
44951  		}
44952  	},
44953
44954  	_onZoomEnd: function () {
44955  		var pxCenter = this._map.getSize().divideBy(2),
44956  		    pxWorldCenter = this._map.latLngToLayerPoint([0, 0]);
44957
44958  		this._initialWorldOffset = pxWorldCenter.subtract(pxCenter).x;
44959  		this._worldWidth = this._map.getPixelWorldBounds().getSize().x;
44960  	},
44961
44962  	_viscousLimit: function (value, threshold) {
44963  		return value - (value - threshold) * this._viscosity;
44964  	},
44965
44966  	_onPreDragLimit: function () {
44967  		if (!this._viscosity || !this._offsetLimit) { return; }
44968
44969  		var offset = this._draggable._newPos.subtract(this._draggable._startPos);
44970
44971  		var limit = this._offsetLimit;
44972  		if (offset.x < limit.min.x) { offset.x = this._viscousLimit(offset.x, limit.min.x); }
44973  		if (offset.y < limit.min.y) { offset.y = this._viscousLimit(offset.y, limit.min.y); }
44974  		if (offset.x > limit.max.x) { offset.x = this._viscousLimit(offset.x, limit.max.x); }
44975  		if (offset.y > limit.max.y) { offset.y = this._viscousLimit(offset.y, limit.max.y); }
44976
44977  		this._draggable._newPos = this._draggable._startPos.add(offset);
44978  	},
44979
44980  	_onPreDragWrap: function () {
44981  		// TODO refactor to be able to adjust map pane position after zoom
44982  		var worldWidth = this._worldWidth,
44983  		    halfWidth = Math.round(worldWidth / 2),
44984  		    dx = this._initialWorldOffset,
44985  		    x = this._draggable._newPos.x,
44986  		    newX1 = (x - halfWidth + dx) % worldWidth + halfWidth - dx,
44987  		    newX2 = (x + halfWidth + dx) % worldWidth - halfWidth - dx,
44988  		    newX = Math.abs(newX1 + dx) < Math.abs(newX2 + dx) ? newX1 : newX2;
44989
44990  		this._draggable._absPos = this._draggable._newPos.clone();
44991  		this._draggable._newPos.x = newX;
44992  	},
44993
44994  	_onDragEnd: function (e) {
44995  		var map = this._map,
44996  		    options = map.options,
44997
44998  		    noInertia = !options.inertia || e.noInertia || this._times.length < 2;
44999
45000  		map.fire('dragend', e);
45001
45002  		if (noInertia) {
45003  			map.fire('moveend');
45004
45005  		} else {
45006  			this._prunePositions(+new Date());
45007
45008  			var direction = this._lastPos.subtract(this._positions[0]),
45009  			    duration = (this._lastTime - this._times[0]) / 1000,
45010  			    ease = options.easeLinearity,
45011
45012  			    speedVector = direction.multiplyBy(ease / duration),
45013  			    speed = speedVector.distanceTo([0, 0]),
45014
45015  			    limitedSpeed = Math.min(options.inertiaMaxSpeed, speed),
45016  			    limitedSpeedVector = speedVector.multiplyBy(limitedSpeed / speed),
45017
45018  			    decelerationDuration = limitedSpeed / (options.inertiaDeceleration * ease),
45019  			    offset = limitedSpeedVector.multiplyBy(-decelerationDuration / 2).round();
45020
45021  			if (!offset.x && !offset.y) {
45022  				map.fire('moveend');
45023
45024  			} else {
45025  				offset = map._limitOffset(offset, map.options.maxBounds);
45026
45027  				requestAnimFrame(function () {
45028  					map.panBy(offset, {
45029  						duration: decelerationDuration,
45030  						easeLinearity: ease,
45031  						noMoveStart: true,
45032  						animate: true
45033  					});
45034  				});
45035  			}
45036  		}
45037  	}
45038  });
45039
45040  // @section Handlers
45041  // @property dragging: Handler
45042  // Map dragging handler (by both mouse and touch).
45043  Map.addInitHook('addHandler', 'dragging', Drag);
45044
45045  /*
45046   * L.Map.Keyboard is handling keyboard interaction with the map, enabled by default.
45047   */
45048
45049  // @namespace Map
45050  // @section Keyboard Navigation Options
45051  Map.mergeOptions({
45052  	// @option keyboard: Boolean = true
45053  	// Makes the map focusable and allows users to navigate the map with keyboard
45054  	// arrows and `+`/`-` keys.
45055  	keyboard: true,
45056
45057  	// @option keyboardPanDelta: Number = 80
45058  	// Amount of pixels to pan when pressing an arrow key.
45059  	keyboardPanDelta: 80
45060  });
45061
45062  var Keyboard = Handler.extend({
45063
45064  	keyCodes: {
45065  		left:    [37],
45066  		right:   [39],
45067  		down:    [40],
45068  		up:      [38],
45069  		zoomIn:  [187, 107, 61, 171],
45070  		zoomOut: [189, 109, 54, 173]
45071  	},
45072
45073  	initialize: function (map) {
45074  		this._map = map;
45075
45076  		this._setPanDelta(map.options.keyboardPanDelta);
45077  		this._setZoomDelta(map.options.zoomDelta);
45078  	},
45079
45080  	addHooks: function () {
45081  		var container = this._map._container;
45082
45083  		// make the container focusable by tabbing
45084  		if (container.tabIndex <= 0) {
45085  			container.tabIndex = '0';
45086  		}
45087
45088  		on(container, {
45089  			focus: this._onFocus,
45090  			blur: this._onBlur,
45091  			mousedown: this._onMouseDown
45092  		}, this);
45093
45094  		this._map.on({
45095  			focus: this._addHooks,
45096  			blur: this._removeHooks
45097  		}, this);
45098  	},
45099
45100  	removeHooks: function () {
45101  		this._removeHooks();
45102
45103  		off(this._map._container, {
45104  			focus: this._onFocus,
45105  			blur: this._onBlur,
45106  			mousedown: this._onMouseDown
45107  		}, this);
45108
45109  		this._map.off({
45110  			focus: this._addHooks,
45111  			blur: this._removeHooks
45112  		}, this);
45113  	},
45114
45115  	_onMouseDown: function () {
45116  		if (this._focused) { return; }
45117
45118  		var body = document.body,
45119  		    docEl = document.documentElement,
45120  		    top = body.scrollTop || docEl.scrollTop,
45121  		    left = body.scrollLeft || docEl.scrollLeft;
45122
45123  		this._map._container.focus();
45124
45125  		window.scrollTo(left, top);
45126  	},
45127
45128  	_onFocus: function () {
45129  		this._focused = true;
45130  		this._map.fire('focus');
45131  	},
45132
45133  	_onBlur: function () {
45134  		this._focused = false;
45135  		this._map.fire('blur');
45136  	},
45137
45138  	_setPanDelta: function (panDelta) {
45139  		var keys = this._panKeys = {},
45140  		    codes = this.keyCodes,
45141  		    i, len;
45142
45143  		for (i = 0, len = codes.left.length; i < len; i++) {
45144  			keys[codes.left[i]] = [-1 * panDelta, 0];
45145  		}
45146  		for (i = 0, len = codes.right.length; i < len; i++) {
45147  			keys[codes.right[i]] = [panDelta, 0];
45148  		}
45149  		for (i = 0, len = codes.down.length; i < len; i++) {
45150  			keys[codes.down[i]] = [0, panDelta];
45151  		}
45152  		for (i = 0, len = codes.up.length; i < len; i++) {
45153  			keys[codes.up[i]] = [0, -1 * panDelta];
45154  		}
45155  	},
45156
45157  	_setZoomDelta: function (zoomDelta) {
45158  		var keys = this._zoomKeys = {},
45159  		    codes = this.keyCodes,
45160  		    i, len;
45161
45162  		for (i = 0, len = codes.zoomIn.length; i < len; i++) {
45163  			keys[codes.zoomIn[i]] = zoomDelta;
45164  		}
45165  		for (i = 0, len = codes.zoomOut.length; i < len; i++) {
45166  			keys[codes.zoomOut[i]] = -zoomDelta;
45167  		}
45168  	},
45169
45170  	_addHooks: function () {
45171  		on(document, 'keydown', this._onKeyDown, this);
45172  	},
45173
45174  	_removeHooks: function () {
45175  		off(document, 'keydown', this._onKeyDown, this);
45176  	},
45177
45178  	_onKeyDown: function (e) {
45179  		if (e.altKey || e.ctrlKey || e.metaKey) { return; }
45180
45181  		var key = e.keyCode,
45182  		    map = this._map,
45183  		    offset;
45184
45185  		if (key in this._panKeys) {
45186  			if (!map._panAnim || !map._panAnim._inProgress) {
45187  				offset = this._panKeys[key];
45188  				if (e.shiftKey) {
45189  					offset = toPoint(offset).multiplyBy(3);
45190  				}
45191
45192  				
45192map.panBy(offset);
45193
45194  				if (map.options.maxBounds) {
45195  					map.panInsideBounds(map.options.maxBounds
vendor: 9,225 bytes, lines 45195-45493
45195);
45196  				}
45197  			}
45198  		} else if (key in this._zoomKeys) {
45199  			map.setZoom(map.getZoom() + (e.shiftKey ? 3 : 1) * this._zoomKeys[key]);
45200
45201  		} else if (key === 27 && map._popup && map._popup.options.closeOnEscapeKey) {
45202  			map.closePopup();
45203
45204  		} else {
45205  			return;
45206  		}
45207
45208  		stop(e);
45209  	}
45210  });
45211
45212  // @section Handlers
45213  // @section Handlers
45214  // @property keyboard: Handler
45215  // Keyboard navigation handler.
45216  Map.addInitHook('addHandler', 'keyboard', Keyboard);
45217
45218  /*
45219   * L.Handler.ScrollWheelZoom is used by L.Map to enable mouse scroll wheel zoom on the map.
45220   */
45221
45222  // @namespace Map
45223  // @section Interaction Options
45224  Map.mergeOptions({
45225  	// @section Mouse wheel options
45226  	// @option scrollWheelZoom: Boolean|String = true
45227  	// Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,
45228  	// it will zoom to the center of the view regardless of where the mouse was.
45229  	scrollWheelZoom: true,
45230
45231  	// @option wheelDebounceTime: Number = 40
45232  	// Limits the rate at which a wheel can fire (in milliseconds). By default
45233  	// user can't zoom via wheel more often than once per 40 ms.
45234  	wheelDebounceTime: 40,
45235
45236  	// @option wheelPxPerZoomLevel: Number = 60
45237  	// How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))
45238  	// mean a change of one full zoom level. Smaller values will make wheel-zooming
45239  	// faster (and vice versa).
45240  	wheelPxPerZoomLevel: 60
45241  });
45242
45243  var ScrollWheelZoom = Handler.extend({
45244  	addHooks: function () {
45245  		on(this._map._container, 'wheel', this._onWheelScroll, this);
45246
45247  		this._delta = 0;
45248  	},
45249
45250  	removeHooks: function () {
45251  		off(this._map._container, 'wheel', this._onWheelScroll, this);
45252  	},
45253
45254  	_onWheelScroll: function (e) {
45255  		var delta = getWheelDelta(e);
45256
45257  		var debounce = this._map.options.wheelDebounceTime;
45258
45259  		this._delta += delta;
45260  		this._lastMousePos = this._map.mouseEventToContainerPoint(e);
45261
45262  		if (!this._startTime) {
45263  			this._startTime = +new Date();
45264  		}
45265
45266  		var left = Math.max(debounce - (+new Date() - this._startTime), 0);
45267
45268  		clearTimeout(this._timer);
45269  		this._timer = setTimeout(bind(this._performZoom, this), left);
45270
45271  		stop(e);
45272  	},
45273
45274  	_performZoom: function () {
45275  		var map = this._map,
45276  		    zoom = map.getZoom(),
45277  		    snap = this._map.options.zoomSnap || 0;
45278
45279  		map._stop(); // stop panning and fly animations if any
45280
45281  		// map the delta with a sigmoid function to -4..4 range leaning on -1..1
45282  		var d2 = this._delta / (this._map.options.wheelPxPerZoomLevel * 4),
45283  		    d3 = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(d2)))) / Math.LN2,
45284  		    d4 = snap ? Math.ceil(d3 / snap) * snap : d3,
45285  		    delta = map._limitZoom(zoom + (this._delta > 0 ? d4 : -d4)) - zoom;
45286
45287  		this._delta = 0;
45288  		this._startTime = null;
45289
45290  		if (!delta) { return; }
45291
45292  		if (map.options.scrollWheelZoom === 'center') {
45293  			map.setZoom(zoom + delta);
45294  		} else {
45295  			map.setZoomAround(this._lastMousePos, zoom + delta);
45296  		}
45297  	}
45298  });
45299
45300  // @section Handlers
45301  // @property scrollWheelZoom: Handler
45302  // Scroll wheel zoom handler.
45303  Map.addInitHook('addHandler', 'scrollWheelZoom', ScrollWheelZoom);
45304
45305  /*
45306   * L.Map.TapHold is used to simulate `contextmenu` event on long hold,
45307   * which otherwise is not fired by mobile Safari.
45308   */
45309
45310  var tapHoldDelay = 600;
45311
45312  // @namespace Map
45313  // @section Interaction Options
45314  Map.mergeOptions({
45315  	// @section Touch interaction options
45316  	// @option tapHold: Boolean
45317  	// Enables simulation of `contextmenu` event, default is `true` for mobile Safari.
45318  	tapHold: Browser.touchNative && Browser.safari && Browser.mobile,
45319
45320  	// @option tapTolerance: Number = 15
45321  	// The max number of pixels a user can shift his finger during touch
45322  	// for it to be considered a valid tap.
45323  	tapTolerance: 15
45324  });
45325
45326  var TapHold = Handler.extend({
45327  	addHooks: function () {
45328  		on(this._map._container, 'touchstart', this._onDown, this);
45329  	},
45330
45331  	removeHooks: function () {
45332  		off(this._map._container, 'touchstart', this._onDown, this);
45333  	},
45334
45335  	_onDown: function (e) {
45336  		clearTimeout(this._holdTimeout);
45337  		if (e.touches.length !== 1) { return; }
45338
45339  		var first = e.touches[0];
45340  		this._startPos = this._newPos = new Point(first.clientX, first.clientY);
45341
45342  		this._holdTimeout = setTimeout(bind(function () {
45343  			this._cancel();
45344  			if (!this._isTapValid()) { return; }
45345
45346  			// prevent simulated mouse events https://w3c.github.io/touch-events/#mouse-events
45347  			on(document, 'touchend', preventDefault);
45348  			on(document, 'touchend touchcancel', this._cancelClickPrevent);
45349  			this._simulateEvent('contextmenu', first);
45350  		}, this), tapHoldDelay);
45351
45352  		on(document, 'touchend touchcancel contextmenu', this._cancel, this);
45353  		on(document, 'touchmove', this._onMove, this);
45354  	},
45355
45356  	_cancelClickPrevent: function cancelClickPrevent() {
45357  		off(document, 'touchend', preventDefault);
45358  		off(document, 'touchend touchcancel', cancelClickPrevent);
45359  	},
45360
45361  	_cancel: function () {
45362  		clearTimeout(this._holdTimeout);
45363  		off(document, 'touchend touchcancel contextmenu', this._cancel, this);
45364  		off(document, 'touchmove', this._onMove, this);
45365  	},
45366
45367  	_onMove: function (e) {
45368  		var first = e.touches[0];
45369  		this._newPos = new Point(first.clientX, first.clientY);
45370  	},
45371
45372  	_isTapValid: function () {
45373  		return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
45374  	},
45375
45376  	_simulateEvent: function (type, e) {
45377  		var simulatedEvent = new MouseEvent(type, {
45378  			bubbles: true,
45379  			cancelable: true,
45380  			view: window,
45381  			// detail: 1,
45382  			screenX: e.screenX,
45383  			screenY: e.screenY,
45384  			clientX: e.clientX,
45385  			clientY: e.clientY,
45386  			// button: 2,
45387  			// buttons: 2
45388  		});
45389
45390  		simulatedEvent._simulated = true;
45391
45392  		e.target.dispatchEvent(simulatedEvent);
45393  	}
45394  });
45395
45396  // @section Handlers
45397  // @property tapHold: Handler
45398  // Long tap handler to simulate `contextmenu` event (useful in mobile Safari).
45399  Map.addInitHook('addHandler', 'tapHold', TapHold);
45400
45401  /*
45402   * L.Handler.TouchZoom is used by L.Map to add pinch zoom on supported mobile browsers.
45403   */
45404
45405  // @namespace Map
45406  // @section Interaction Options
45407  Map.mergeOptions({
45408  	// @section Touch interaction options
45409  	// @option touchZoom: Boolean|String = *
45410  	// Whether the map can be zoomed by touch-dragging with two fingers. If
45411  	// passed `'center'`, it will zoom to the center of the view regardless of
45412  	// where the touch events (fingers) were. Enabled for touch-capable web
45413  	// browsers.
45414  	touchZoom: Browser.touch,
45415
45416  	// @option bounceAtZoomLimits: Boolean = true
45417  	// Set it to false if you don't want the map to zoom beyond min/max zoom
45418  	// and then bounce back when pinch-zooming.
45419  	bounceAtZoomLimits: true
45420  });
45421
45422  var TouchZoom = Handler.extend({
45423  	addHooks: function () {
45424  		addClass(this._map._container, 'leaflet-touch-zoom');
45425  		on(this._map._container, 'touchstart', this._onTouchStart, this);
45426  	},
45427
45428  	removeHooks: function () {
45429  		removeClass(this._map._container, 'leaflet-touch-zoom');
45430  		off(this._map._container, 'touchstart', this._onTouchStart, this);
45431  	},
45432
45433  	_onTouchStart: function (e) {
45434  		var map = this._map;
45435  		if (!e.touches || e.touches.length !== 2 || map._animatingZoom || this._zooming) { return; }
45436
45437  		var p1 = map.mouseEventToContainerPoint(e.touches[0]),
45438  		    p2 = map.mouseEventToContainerPoint(e.touches[1]);
45439
45440  		this._centerPoint = map.getSize()._divideBy(2);
45441  		this._startLatLng = map.containerPointToLatLng(this._centerPoint);
45442  		if (map.options.touchZoom !== 'center') {
45443  			this._pinchStartLatLng = map.containerPointToLatLng(p1.add(p2)._divideBy(2));
45444  		}
45445
45446  		this._startDist = p1.distanceTo(p2);
45447  		this._startZoom = map.getZoom();
45448
45449  		this._moved = false;
45450  		this._zooming = true;
45451
45452  		map._stop();
45453
45454  		on(document, 'touchmove', this._onTouchMove, this);
45455  		on(document, 'touchend touchcancel', this._onTouchEnd, this);
45456
45457  		preventDefault(e);
45458  	},
45459
45460  	_onTouchMove: function (e) {
45461  		if (!e.touches || e.touches.length !== 2 || !this._zooming) { return; }
45462
45463  		var map = this._map,
45464  		    p1 = map.mouseEventToContainerPoint(e.touches[0]),
45465  		    p2 = map.mouseEventToContainerPoint(e.touches[1]),
45466  		    scale = p1.distanceTo(p2) / this._startDist;
45467
45468  		this._zoom = map.getScaleZoom(scale, this._startZoom);
45469
45470  		if (!map.options.bounceAtZoomLimits && (
45471  			(this._zoom < map.getMinZoom() && scale < 1) ||
45472  			(this._zoom > map.getMaxZoom() && scale > 1))) {
45473  			this._zoom = map._limitZoom(this._zoom);
45474  		}
45475
45476  		if (map.options.touchZoom === 'center') {
45477  			this._center = this._startLatLng;
45478  			if (scale === 1) { return; }
45479  		} else {
45480  			// Get delta from pinch to center, so centerLatLng is delta applied to initial pinchLatLng
45481  			var delta = p1._add(p2)._divideBy(2)._subtract(this._centerPoint);
45482  			if (scale === 1 && delta.x === 0 && delta.y === 0) { return; }
45483  			this._center = map.unproject(map.project(this._pinchStartLatLng, this._zoom).subtract(delta), this._zoom);
45484  		}
45485
45486  		if (!this._moved) {
45487  			map._moveStart(true, false);
45488  			this._moved = true;
45489  		}
45490
45491  		cancelAnimFrame(this._animRequest);
45492
45493  		var moveFn = bind(map._move, map, this._center, this._zoom, {pinch: true, round: false}
vendor: 1,625 bytes, lines 45493-45549
45493);
45494  		this._animRequest = requestAnimFrame(moveFn, this, true);
45495
45496  		preventDefault(e);
45497  	},
45498
45499  	_onTouchEnd: function () {
45500  		if (!this._moved || !this._zooming) {
45501  			this._zooming = false;
45502  			return;
45503  		}
45504
45505  		this._zooming = false;
45506  		cancelAnimFrame(this._animRequest);
45507
45508  		off(document, 'touchmove', this._onTouchMove, this);
45509  		off(document, 'touchend touchcancel', this._onTouchEnd, this);
45510
45511  		// Pinch updates GridLayers' levels only when zoomSnap is off, so zoomSnap becomes noUpdate.
45512  		if (this._map.options.zoomAnimation) {
45513  			this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), true, this._map.options.zoomSnap);
45514  		} else {
45515  			this._map._resetView(this._center, this._map._limitZoom(this._zoom));
45516  		}
45517  	}
45518  });
45519
45520  // @section Handlers
45521  // @property touchZoom: Handler
45522  // Touch zoom handler.
45523  Map.addInitHook('addHandler', 'touchZoom', TouchZoom);
45524
45525  Map.BoxZoom = BoxZoom;
45526  Map.DoubleClickZoom = DoubleClickZoom;
45527  Map.Drag = Drag;
45528  Map.Keyboard = Keyboard;
45529  Map.ScrollWheelZoom = ScrollWheelZoom;
45530  Map.TapHold = TapHold;
45531  Map.TouchZoom = TouchZoom;
45532
45533  exports.Bounds = Bounds;
45534  exports.Browser = Browser;
45535  exports.CRS = CRS;
45536  exports.Canvas = Canvas;
45537  exports.Circle = Circle;
45538  exports.CircleMarker = CircleMarker;
45539  exports.Class = Class;
45540  exports.Control = Control;
45541  exports.DivIcon = DivIcon;
45542  exports.DivOverlay = DivOverlay;
45543  exports.DomEvent = DomEvent;
45544  exports.DomUtil = DomUtil;
45545  exports.Draggable = Draggable;
45546  exports.Evented = Evented;
45547  exports.FeatureGroup = FeatureGroup;
45548  exports.GeoJSON = GeoJSON;
45549  exports.GridLayer = GridLayer;
45550  exports.Handler = Handler;
45551  exports.Icon = Icon;
45552  exports.ImageOverlay = ImageOverlay;
45553  exports.LatLng = LatLng;
45554  exports.LatLngBounds = LatLngBounds;
45555  exports.Layer = Layer;
45556  exports.LayerGroup = LayerGroup;
45557  exports.LineUtil = LineUtil;
45558  exports.Map = Map;
45559  exports.Marker = Marker;
45560  exports.Mixin = Mixin;
45561  exports.Path = Path;
45562  exports.Point = Point;
45563  exports.PolyUtil = PolyUtil;
45564  exports.Polygon = Polygon;
45565  exports.Polyline = Polyline;
45566  exports.Popup = Popup;
45567  exports.PosAnimation = PosAnimation;
45568  exports.Projection = index;
45569  exports.Rectangle = Rectangle;
45570  exports.Renderer = Renderer;
45571  exports.SVG = SVG;
45572  exports.SVGOverlay = SVGOverlay;
45573  exports.TileLayer = TileLayer;
45574  exports.Tooltip = Tooltip;
45575  exports.Transformation = Transformation;
45576  exports.Util = Util;
45577  exports.VideoOverlay = VideoOverlay;
45578  exports.bind = bind;
45579  exports.bounds = toBounds;
45580  exports.canvas = canvas;
45581  exports.circle = circle;
45582  exports.circleMarker = circleMarker;
45583  exports.control = control;
45584  exports.divIcon = divIcon;
45585  exports.extend = extend;
45586  exports.featureGroup = featureGroup;
45587  exports.geoJSON = geoJSON;
45588  exports.geoJson = geoJson;
45589  exports.gridLayer = gridLayer;
45590  exports.icon = icon;
45591  exports.imageOverlay = imageOverlay;
45592  exports.latLng = toLatLng;
45593  exports.latLngBounds = toLatLngBounds;
45594  exports.layerGroup = layerGroup;
45595  exports.map = createMap;
45596  exports.marker = marker;
45597  exports.point = toPoint;
45598  exports.polygon = polygon;
45599  exports.polyline = polyline;
45600  exports.popup = popup;
45601  exports.rectangle = rectangle;
45602  exports.setOptions = setOptions;
45603  exports.stamp = stamp;
45604  exports.svg = svg;
45605  exports.svgOverlay = svgOverlay;
45606  exports.tileLayer = tileLayer;
45607  exports.tooltip = tooltip;
45608  exports.transformation = toTransformation;
45609  exports.version = version;
45610  exports.videoOverlay = videoOverlay;
45611
45612  var oldL = window.L;
45613  exports.noConflict = function() {
45614  	window.L = oldL;
45615  	return this;
45616  }
45617  // Always export us to window global (see #2364)
45618  window.L = exports;
45619
45620}));
45621//# sourceMappingURL=leaflet-src.js.map
45622
45623
45624/***/ }),
45625
45626/***/ 96280:
45627/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
45628
45629"use strict";
45630// ESM COMPAT FLAG
45631__webpack_require__.r(__webpack_exports__);
45632
45633// EXPORTS
45634__webpack_require__.d(__webpack_exports__, {
45635  "default": () => (/* binding */ lib)
45636});
45637
45638;// CONCATENATED MODULE: ./node_modules/proj4/lib/global.js
45639/* harmony default export */ function global(defs) {
45640  defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
45641  defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
45642  defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
45643
45644  defs.WGS84 = defs['EPSG:4326'];
45645  defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857
45646  defs.GOOGLE = defs['EPSG:3857'];
45647  defs['EPSG:900913'] = defs['EPSG:3857'];
45648  defs['EPSG:102113'] = defs['EPSG:3857'];
45649}
45650
45651;// CONCATENATED MODULE: ./node_modules/proj4/lib/constants/values.js
45652var PJD_3PARAM = 1;
45653var PJD_7PARAM = 2;
45654var PJD_GRIDSHIFT = 3;
45655var PJD_WGS84 = 4; // WGS84 or equivalent
vendor: 5,020 bytes, lines 45656-45830
45656var PJD_NODATUM = 5; // WGS84 or equivalent
45657var SRS_WGS84_SEMIMAJOR = 6378137.0;  // only used in grid shift transforms
45658var SRS_WGS84_SEMIMINOR = 6356752.314;  // only used in grid shift transforms
45659var SRS_WGS84_ESQUARED = 0.0066943799901413165; // only used in grid shift transforms
45660var SEC_TO_RAD = 4.84813681109535993589914102357e-6;
45661var HALF_PI = Math.PI/2;
45662// ellipoid pj_set_ell.c
45663var SIXTH = 0.1666666666666666667;
45664/* 1/6 */
45665var RA4 = 0.04722222222222222222;
45666/* 17/360 */
45667var RA6 = 0.02215608465608465608;
45668var EPSLN = 1.0e-10;
45669// you'd think you could use Number.EPSILON above but that makes
45670// Mollweide get into an infinate loop.
45671
45672var D2R = 0.01745329251994329577;
45673var R2D = 57.29577951308232088;
45674var FORTPI = Math.PI/4;
45675var TWO_PI = Math.PI * 2;
45676// SPI is slightly greater than Math.PI, so values that exceed the -180..180
45677// degree range by a tiny amount don't get wrapped. This prevents points that
45678// have drifted from their original location along the 180th meridian (due to
45679// floating point error) from changing their sign.
45680var SPI = 3.14159265359;
45681
45682;// CONCATENATED MODULE: ./node_modules/proj4/lib/constants/PrimeMeridian.js
45683var PrimeMeridian_exports = {};
45684
45685
45686PrimeMeridian_exports.greenwich = 0.0; //"0dE",
45687PrimeMeridian_exports.lisbon = -9.131906111111; //"9d07'54.862\"W",
45688PrimeMeridian_exports.paris = 2.337229166667; //"2d20'14.025\"E",
45689PrimeMeridian_exports.bogota = -74.080916666667; //"74d04'51.3\"W",
45690PrimeMeridian_exports.madrid = -3.687938888889; //"3d41'16.58\"W",
45691PrimeMeridian_exports.rome = 12.452333333333; //"12d27'8.4\"E",
45692PrimeMeridian_exports.bern = 7.439583333333; //"7d26'22.5\"E",
45693PrimeMeridian_exports.jakarta = 106.807719444444; //"106d48'27.79\"E",
45694PrimeMeridian_exports.ferro = -17.666666666667; //"17d40'W",
45695PrimeMeridian_exports.brussels = 4.367975; //"4d22'4.71\"E",
45696PrimeMeridian_exports.stockholm = 18.058277777778; //"18d3'29.8\"E",
45697PrimeMeridian_exports.athens = 23.7163375; //"23d42'58.815\"E",
45698PrimeMeridian_exports.oslo = 10.722916666667; //"10d43'22.5\"E"
45699
45700;// CONCATENATED MODULE: ./node_modules/proj4/lib/constants/units.js
45701/* harmony default export */ const units = ({
45702  ft: {to_meter: 0.3048},
45703  'us-ft': {to_meter: 1200 / 3937}
45704});
45705
45706;// CONCATENATED MODULE: ./node_modules/proj4/lib/match.js
45707var ignoredChar = /[\s_\-\/\(\)]/g;
45708function match(obj, key) {
45709  if (obj[key]) {
45710    return obj[key];
45711  }
45712  var keys = Object.keys(obj);
45713  var lkey = key.toLowerCase().replace(ignoredChar, '');
45714  var i = -1;
45715  var testkey, processedKey;
45716  while (++i < keys.length) {
45717    testkey = keys[i];
45718    processedKey = testkey.toLowerCase().replace(ignoredChar, '');
45719    if (processedKey === lkey) {
45720      return obj[testkey];
45721    }
45722  }
45723}
45724
45725;// CONCATENATED MODULE: ./node_modules/proj4/lib/projString.js
45726
45727
45728
45729
45730
45731/* harmony default export */ function projString(defData) {
45732  var self = {};
45733  var paramObj = defData.split('+').map(function(v) {
45734    return v.trim();
45735  }).filter(function(a) {
45736    return a;
45737  }).reduce(function(p, a) {
45738    var split = a.split('=');
45739    split.push(true);
45740    p[split[0].toLowerCase()] = split[1];
45741    return p;
45742  }, {});
45743  var paramName, paramVal, paramOutname;
45744  var params = {
45745    proj: 'projName',
45746    datum: 'datumCode',
45747    rf: function(v) {
45748      self.rf = parseFloat(v);
45749    },
45750    lat_0: function(v) {
45751      self.lat0 = v * D2R;
45752    },
45753    lat_1: function(v) {
45754      self.lat1 = v * D2R;
45755    },
45756    lat_2: function(v) {
45757      self.lat2 = v * D2R;
45758    },
45759    lat_ts: function(v) {
45760      self.lat_ts = v * D2R;
45761    },
45762    lon_0: function(v) {
45763      self.long0 = v * D2R;
45764    },
45765    lon_1: function(v) {
45766      self.long1 = v * D2R;
45767    },
45768    lon_2: function(v) {
45769      self.long2 = v * D2R;
45770    },
45771    alpha: function(v) {
45772      self.alpha = parseFloat(v) * D2R;
45773    },
45774    lonc: function(v) {
45775      self.longc = v * D2R;
45776    },
45777    x_0: function(v) {
45778      self.x0 = parseFloat(v);
45779    },
45780    y_0: function(v) {
45781      self.y0 = parseFloat(v);
45782    },
45783    k_0: function(v) {
45784      self.k0 = parseFloat(v);
45785    },
45786    k: function(v) {
45787      self.k0 = parseFloat(v);
45788    },
45789    a: function(v) {
45790      self.a = parseFloat(v);
45791    },
45792    b: function(v) {
45793      self.b = parseFloat(v);
45794    },
45795    r_a: function() {
45796      self.R_A = true;
45797    },
45798    zone: function(v) {
45799      self.zone = parseInt(v, 10);
45800    },
45801    south: function() {
45802      self.utmSouth = true;
45803    },
45804    towgs84: function(v) {
45805      self.datum_params = v.split(",").map(function(a) {
45806        return parseFloat(a);
45807      });
45808    },
45809    to_meter: function(v) {
45810      self.to_meter = parseFloat(v);
45811    },
45812    units: function(v) {
45813      self.units = v;
45814      var unit = match(units, v);
45815      if (unit) {
45816        self.to_meter = unit.to_meter;
45817      }
45818    },
45819    from_greenwich: function(v) {
45820      self.from_greenwich = v * D2R;
45821    },
45822    pm: function(v) {
45823      var pm = match(PrimeMeridian_exports, v);
45824      self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;
45825    },
45826    nadgrids: function(v) {
45827      if (v === '@null') {
45828        self.datumCode = 'none';
45829      }
45830      else {
vendor: 28,049 bytes, lines 45831-47109
45831        self.nadgrids = v;
45832      }
45833    },
45834    axis: function(v) {
45835      var legalAxis = "ewnsud";
45836      if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
45837        self.axis = v;
45838      }
45839    },
45840    approx: function() {
45841      self.approx = true;
45842    }
45843  };
45844  for (paramName in paramObj) {
45845    paramVal = paramObj[paramName];
45846    if (paramName in params) {
45847      paramOutname = params[paramName];
45848      if (typeof paramOutname === 'function') {
45849        paramOutname(paramVal);
45850      }
45851      else {
45852        self[paramOutname] = paramVal;
45853      }
45854    }
45855    else {
45856      self[paramName] = paramVal;
45857    }
45858  }
45859  if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
45860    self.datumCode = self.datumCode.toLowerCase();
45861  }
45862  return self;
45863}
45864
45865;// CONCATENATED MODULE: ./node_modules/wkt-parser/parser.js
45866/* harmony default export */ const parser = (parseString);
45867
45868var NEUTRAL = 1;
45869var KEYWORD = 2;
45870var NUMBER = 3;
45871var QUOTED = 4;
45872var AFTERQUOTE = 5;
45873var ENDED = -1;
45874var whitespace = /\s/;
45875var latin = /[A-Za-z]/;
45876var keyword = /[A-Za-z84]/;
45877var endThings = /[,\]]/;
45878var digets = /[\d\.E\-\+]/;
45879// const ignoredChar = /[\s_\-\/\(\)]/g;
45880function Parser(text) {
45881  if (typeof text !== 'string') {
45882    throw new Error('not a string');
45883  }
45884  this.text = text.trim();
45885  this.level = 0;
45886  this.place = 0;
45887  this.root = null;
45888  this.stack = [];
45889  this.currentObject = null;
45890  this.state = NEUTRAL;
45891}
45892Parser.prototype.readCharicter = function() {
45893  var char = this.text[this.place++];
45894  if (this.state !== QUOTED) {
45895    while (whitespace.test(char)) {
45896      if (this.place >= this.text.length) {
45897        return;
45898      }
45899      char = this.text[this.place++];
45900    }
45901  }
45902  switch (this.state) {
45903    case NEUTRAL:
45904      return this.neutral(char);
45905    case KEYWORD:
45906      return this.keyword(char)
45907    case QUOTED:
45908      return this.quoted(char);
45909    case AFTERQUOTE:
45910      return this.afterquote(char);
45911    case NUMBER:
45912      return this.number(char);
45913    case ENDED:
45914      return;
45915  }
45916};
45917Parser.prototype.afterquote = function(char) {
45918  if (char === '"') {
45919    this.word += '"';
45920    this.state = QUOTED;
45921    return;
45922  }
45923  if (endThings.test(char)) {
45924    this.word = this.word.trim();
45925    this.afterItem(char);
45926    return;
45927  }
45928  throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place);
45929};
45930Parser.prototype.afterItem = function(char) {
45931  if (char === ',') {
45932    if (this.word !== null) {
45933      this.currentObject.push(this.word);
45934    }
45935    this.word = null;
45936    this.state = NEUTRAL;
45937    return;
45938  }
45939  if (char === ']') {
45940    this.level--;
45941    if (this.word !== null) {
45942      this.currentObject.push(this.word);
45943      this.word = null;
45944    }
45945    this.state = NEUTRAL;
45946    this.currentObject = this.stack.pop();
45947    if (!this.currentObject) {
45948      this.state = ENDED;
45949    }
45950
45951    return;
45952  }
45953};
45954Parser.prototype.number = function(char) {
45955  if (digets.test(char)) {
45956    this.word += char;
45957    return;
45958  }
45959  if (endThings.test(char)) {
45960    this.word = parseFloat(this.word);
45961    this.afterItem(char);
45962    return;
45963  }
45964  throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place);
45965};
45966Parser.prototype.quoted = function(char) {
45967  if (char === '"') {
45968    this.state = AFTERQUOTE;
45969    return;
45970  }
45971  this.word += char;
45972  return;
45973};
45974Parser.prototype.keyword = function(char) {
45975  if (keyword.test(char)) {
45976    this.word += char;
45977    return;
45978  }
45979  if (char === '[') {
45980    var newObjects = [];
45981    newObjects.push(this.word);
45982    this.level++;
45983    if (this.root === null) {
45984      this.root = newObjects;
45985    } else {
45986      this.currentObject.push(newObjects);
45987    }
45988    this.stack.push(this.currentObject);
45989    this.currentObject = newObjects;
45990    this.state = NEUTRAL;
45991    return;
45992  }
45993  if (endThings.test(char)) {
45994    this.afterItem(char);
45995    return;
45996  }
45997  throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place);
45998};
45999Parser.prototype.neutral = function(char) {
46000  if (latin.test(char)) {
46001    this.word = char;
46002    this.state = KEYWORD;
46003    return;
46004  }
46005  if (char === '"') {
46006    this.word = '';
46007    this.state = QUOTED;
46008    return;
46009  }
46010  if (digets.test(char)) {
46011    this.word = char;
46012    this.state = NUMBER;
46013    return;
46014  }
46015  if (endThings.test(char)) {
46016    this.afterItem(char);
46017    return;
46018  }
46019  throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place);
46020};
46021Parser.prototype.output = function() {
46022  while (this.place < this.text.length) {
46023    this.readCharicter();
46024  }
46025  if (this.state === ENDED) {
46026    return this.root;
46027  }
46028  throw new Error('unable to parse string "' +this.text + '". State is ' + this.state);
46029};
46030
46031function parseString(txt) {
46032  var parser = new Parser(txt);
46033  return parser.output();
46034}
46035
46036;// CONCATENATED MODULE: ./node_modules/wkt-parser/process.js
46037
46038
46039function mapit(obj, key, value) {
46040  if (Array.isArray(key)) {
46041    value.unshift(key);
46042    key = null;
46043  }
46044  var thing = key ? {} : obj;
46045
46046  var out = value.reduce(function(newObj, item) {
46047    sExpr(item, newObj);
46048    return newObj
46049  }, thing);
46050  if (key) {
46051    obj[key] = out;
46052  }
46053}
46054
46055function sExpr(v, obj) {
46056  if (!Array.isArray(v)) {
46057    obj[v] = true;
46058    return;
46059  }
46060  var key = v.shift();
46061  if (key === 'PARAMETER') {
46062    key = v.shift();
46063  }
46064  if (v.length === 1) {
46065    if (Array.isArray(v[0])) {
46066      obj[key] = {};
46067      sExpr(v[0], obj[key]);
46068      return;
46069    }
46070    obj[key] = v[0];
46071    return;
46072  }
46073  if (!v.length) {
46074    obj[key] = true;
46075    return;
46076  }
46077  if (key === 'TOWGS84') {
46078    obj[key] = v;
46079    return;
46080  }
46081  if (key === 'AXIS') {
46082    if (!(key in obj)) {
46083      obj[key] = [];
46084    }
46085    obj[key].push(v);
46086    return;
46087  }
46088  if (!Array.isArray(key)) {
46089    obj[key] = {};
46090  }
46091
46092  var i;
46093  switch (key) {
46094    case 'UNIT':
46095    case 'PRIMEM':
46096    case 'VERT_DATUM':
46097      obj[key] = {
46098        name: v[0].toLowerCase(),
46099        convert: v[1]
46100      };
46101      if (v.length === 3) {
46102        sExpr(v[2], obj[key]);
46103      }
46104      return;
46105    case 'SPHEROID':
46106    case 'ELLIPSOID':
46107      obj[key] = {
46108        name: v[0],
46109        a: v[1],
46110        rf: v[2]
46111      };
46112      if (v.length === 4) {
46113        sExpr(v[3], obj[key]);
46114      }
46115      return;
46116    case 'PROJECTEDCRS':
46117    case 'PROJCRS':
46118    case 'GEOGCS':
46119    case 'GEOCCS':
46120    case 'PROJCS':
46121    case 'LOCAL_CS':
46122    case 'GEODCRS':
46123    case 'GEODETICCRS':
46124    case 'GEODETICDATUM':
46125    case 'EDATUM':
46126    case 'ENGINEERINGDATUM':
46127    case 'VERT_CS':
46128    case 'VERTCRS':
46129    case 'VERTICALCRS':
46130    case 'COMPD_CS':
46131    case 'COMPOUNDCRS':
46132    case 'ENGINEERINGCRS':
46133    case 'ENGCRS':
46134    case 'FITTED_CS':
46135    case 'LOCAL_DATUM':
46136    case 'DATUM':
46137      v[0] = ['name', v[0]];
46138      mapit(obj, key, v);
46139      return;
46140    default:
46141      i = -1;
46142      while (++i < v.length) {
46143        if (!Array.isArray(v[i])) {
46144          return sExpr(v, obj[key]);
46145        }
46146      }
46147      return mapit(obj, key, v);
46148  }
46149}
46150
46151;// CONCATENATED MODULE: ./node_modules/wkt-parser/index.js
46152var wkt_parser_D2R = 0.01745329251994329577;
46153
46154
46155
46156
46157
46158function rename(obj, params) {
46159  var outName = params[0];
46160  var inName = params[1];
46161  if (!(outName in obj) && (inName in obj)) {
46162    obj[outName] = obj[inName];
46163    if (params.length === 3) {
46164      obj[outName] = params[2](obj[outName]);
46165    }
46166  }
46167}
46168
46169function d2r(input) {
46170  return input * wkt_parser_D2R;
46171}
46172
46173function cleanWKT(wkt) {
46174  if (wkt.type === 'GEOGCS') {
46175    wkt.projName = 'longlat';
46176  } else if (wkt.type === 'LOCAL_CS') {
46177    wkt.projName = 'identity';
46178    wkt.local = true;
46179  } else {
46180    if (typeof wkt.PROJECTION === 'object') {
46181      wkt.projName = Object.keys(wkt.PROJECTION)[0];
46182    } else {
46183      wkt.projName = wkt.PROJECTION;
46184    }
46185  }
46186  if (wkt.AXIS) {
46187    var axisOrder = '';
46188    for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {
46189      var axis = wkt.AXIS[i];
46190      var descriptor = axis[0].toLowerCase();
46191      if (descriptor.indexOf('north') !== -1) {
46192        axisOrder += 'n';
46193      } else if (descriptor.indexOf('south') !== -1) {
46194        axisOrder += 's';
46195      } else if (descriptor.indexOf('east') !== -1) {
46196        axisOrder += 'e';
46197      } else if (descriptor.indexOf('west') !== -1) {
46198        axisOrder += 'w';
46199      }
46200    }
46201    if (axisOrder.length === 2) {
46202      axisOrder += 'u';
46203    }
46204    if (axisOrder.length === 3) {
46205      wkt.axis = axisOrder;
46206    }
46207  }
46208  if (wkt.UNIT) {
46209    wkt.units = wkt.UNIT.name.toLowerCase();
46210    if (wkt.units === 'metre') {
46211      wkt.units = 'meter';
46212    }
46213    if (wkt.UNIT.convert) {
46214      if (wkt.type === 'GEOGCS') {
46215        if (wkt.DATUM && wkt.DATUM.SPHEROID) {
46216          wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;
46217        }
46218      } else {
46219        wkt.to_meter = wkt.UNIT.convert;
46220      }
46221    }
46222  }
46223  var geogcs = wkt.GEOGCS;
46224  if (wkt.type === 'GEOGCS') {
46225    geogcs = wkt;
46226  }
46227  if (geogcs) {
46228    //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){
46229    //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;
46230    //}
46231    if (geogcs.DATUM) {
46232      wkt.datumCode = geogcs.DATUM.name.toLowerCase();
46233    } else {
46234      wkt.datumCode = geogcs.name.toLowerCase();
46235    }
46236    if (wkt.datumCode.slice(0, 2) === 'd_') {
46237      wkt.datumCode = wkt.datumCode.slice(2);
46238    }
46239    if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {
46240      wkt.datumCode = 'nzgd49';
46241    }
46242    if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {
46243      if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {
46244        wkt.sphere = true;
46245      }
46246      wkt.datumCode = 'wgs84';
46247    }
46248    if (wkt.datumCode.slice(-6) === '_ferro') {
46249      wkt.datumCode = wkt.datumCode.slice(0, - 6);
46250    }
46251    if (wkt.datumCode.slice(-8) === '_jakarta') {
46252      wkt.datumCode = wkt.datumCode.slice(0, - 8);
46253    }
46254    if (~wkt.datumCode.indexOf('belge')) {
46255      wkt.datumCode = 'rnb72';
46256    }
46257    if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {
46258      wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk');
46259      if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {
46260        wkt.ellps = 'intl';
46261      }
46262
46263      wkt.a = geogcs.DATUM.SPHEROID.a;
46264      wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);
46265    }
46266
46267    if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {
46268      wkt.datum_params = geogcs.DATUM.TOWGS84;
46269    }
46270    if (~wkt.datumCode.indexOf('osgb_1936')) {
46271      wkt.datumCode = 'osgb36';
46272    }
46273    if (~wkt.datumCode.indexOf('osni_1952')) {
46274      wkt.datumCode = 'osni52';
46275    }
46276    if (~wkt.datumCode.indexOf('tm65')
46277      || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {
46278      wkt.datumCode = 'ire65';
46279    }
46280    if (wkt.datumCode === 'ch1903+') {
46281      wkt.datumCode = 'ch1903';
46282    }
46283    if (~wkt.datumCode.indexOf('israel')) {
46284      wkt.datumCode = 'isr93';
46285    }
46286  }
46287  if (wkt.b && !isFinite(wkt.b)) {
46288    wkt.b = wkt.a;
46289  }
46290
46291  function toMeter(input) {
46292    var ratio = wkt.to_meter || 1;
46293    return input * ratio;
46294  }
46295  var renamer = function(a) {
46296    return rename(wkt, a);
46297  };
46298  var list = [
46299    ['standard_parallel_1', 'Standard_Parallel_1'],
46300    ['standard_parallel_2', 'Standard_Parallel_2'],
46301    ['false_easting', 'False_Easting'],
46302    ['false_northing', 'False_Northing'],
46303    ['central_meridian', 'Central_Meridian'],
46304    ['latitude_of_origin', 'Latitude_Of_Origin'],
46305    ['latitude_of_origin', 'Central_Parallel'],
46306    ['scale_factor', 'Scale_Factor'],
46307    ['k0', 'scale_factor'],
46308    ['latitude_of_center', 'Latitude_Of_Center'],
46309    ['latitude_of_center', 'Latitude_of_center'],
46310    ['lat0', 'latitude_of_center', d2r],
46311    ['longitude_of_center', 'Longitude_Of_Center'],
46312    ['longitude_of_center', 'Longitude_of_center'],
46313    ['longc', 'longitude_of_center', d2r],
46314    ['x0', 'false_easting', toMeter],
46315    ['y0', 'false_northing', toMeter],
46316    ['long0', 'central_meridian', d2r],
46317    ['lat0', 'latitude_of_origin', d2r],
46318    ['lat0', 'standard_parallel_1', d2r],
46319    ['lat1', 'standard_parallel_1', d2r],
46320    ['lat2', 'standard_parallel_2', d2r],
46321    ['azimuth', 'Azimuth'],
46322    ['alpha', 'azimuth', d2r],
46323    ['srsCode', 'name']
46324  ];
46325  list.forEach(renamer);
46326  if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {
46327    wkt.long0 = wkt.longc;
46328  }
46329  if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {
46330    wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);
46331    wkt.lat_ts = wkt.lat1;
46332  }
46333}
46334/* harmony default export */ function wkt_parser(wkt) {
46335  var lisp = parser(wkt);
46336  var type = lisp.shift();
46337  var name = lisp.shift();
46338  lisp.unshift(['name', name]);
46339  lisp.unshift(['type', type]);
46340  var obj = {};
46341  sExpr(lisp, obj);
46342  cleanWKT(obj);
46343  return obj;
46344}
46345
46346;// CONCATENATED MODULE: ./node_modules/proj4/lib/defs.js
46347
46348
46349
46350
46351function defs(name) {
46352  /*global console*/
46353  var that = this;
46354  if (arguments.length === 2) {
46355    var def = arguments[1];
46356    if (typeof def === 'string') {
46357      if (def.charAt(0) === '+') {
46358        defs[name] = projString(arguments[1]);
46359      }
46360      else {
46361        defs[name] = wkt_parser(arguments[1]);
46362      }
46363    } else {
46364      defs[name] = def;
46365    }
46366  }
46367  else if (arguments.length === 1) {
46368    if (Array.isArray(name)) {
46369      return name.map(function(v) {
46370        if (Array.isArray(v)) {
46371          defs.apply(that, v);
46372        }
46373        else {
46374          defs(v);
46375        }
46376      });
46377    }
46378    else if (typeof name === 'string') {
46379      if (name in defs) {
46380        return defs[name];
46381      }
46382    }
46383    else if ('EPSG' in name) {
46384      defs['EPSG:' + name.EPSG] = name;
46385    }
46386    else if ('ESRI' in name) {
46387      defs['ESRI:' + name.ESRI] = name;
46388    }
46389    else if ('IAU2000' in name) {
46390      defs['IAU2000:' + name.IAU2000] = name;
46391    }
46392    else {
46393      console.log(name);
46394    }
46395    return;
46396  }
46397
46398
46399}
46400global(defs);
46401/* harmony default export */ const lib_defs = (defs);
46402
46403;// CONCATENATED MODULE: ./node_modules/proj4/lib/parseCode.js
46404
46405
46406
46407
46408function testObj(code){
46409  return typeof code === 'string';
46410}
46411function testDef(code){
46412  return code in lib_defs;
46413}
46414var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];
46415function testWKT(code){
46416  return codeWords.some(function (word) {
46417    return code.indexOf(word) > -1;
46418  });
46419}
46420var codes = ['3857', '900913', '3785', '102113'];
46421function checkMercator(item) {
46422  var auth = match(item, 'authority');
46423  if (!auth) {
46424    return;
46425  }
46426  var code = match(auth, 'epsg');
46427  return code && codes.indexOf(code) > -1;
46428}
46429function checkProjStr(item) {
46430  var ext = match(item, 'extension');
46431  if (!ext) {
46432    return;
46433  }
46434  return match(ext, 'proj4');
46435}
46436function testProj(code){
46437  return code[0] === '+';
46438}
46439function parse(code){
46440  if (testObj(code)) {
46441    //check to see if this is a WKT string
46442    if (testDef(code)) {
46443      return lib_defs[code];
46444    }
46445    if (testWKT(code)) {
46446      var out = wkt_parser(code);
46447      // test of spetial case, due to this being a very common and often malformed
46448      if (checkMercator(out)) {
46449        return lib_defs["EPSG:3857"];
46450      }
46451      var maybeProjStr = checkProjStr(out);
46452      if (maybeProjStr) {
46453        return projString(maybeProjStr);
46454      }
46455      return out;
46456    }
46457    if (testProj(code)) {
46458      return projString(code);
46459    }
46460  }else{
46461    return code;
46462  }
46463}
46464
46465/* harmony default export */ const parseCode = (parse);
46466
46467;// CONCATENATED MODULE: ./node_modules/proj4/lib/extend.js
46468/* harmony default export */ function extend(destination, source) {
46469  destination = destination || {};
46470  var value, property;
46471  if (!source) {
46472    return destination;
46473  }
46474  for (property in source) {
46475    value = source[property];
46476    if (value !== undefined) {
46477      destination[property] = value;
46478    }
46479  }
46480  return destination;
46481}
46482
46483;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/msfnz.js
46484/* harmony default export */ function msfnz(eccent, sinphi, cosphi) {
46485  var con = eccent * sinphi;
46486  return cosphi / (Math.sqrt(1 - con * con));
46487}
46488;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/sign.js
46489/* harmony default export */ function sign(x) {
46490  return x<0 ? -1 : 1;
46491}
46492;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/adjust_lon.js
46493
46494
46495
46496
46497/* harmony default export */ function adjust_lon(x) {
46498  return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
46499}
46500
46501;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/tsfnz.js
46502
46503
46504/* harmony default export */ function tsfnz(eccent, phi, sinphi) {
46505  var con = eccent * sinphi;
46506  var com = 0.5 * eccent;
46507  con = Math.pow(((1 - con) / (1 + con)), com);
46508  return (Math.tan(0.5 * (HALF_PI - phi)) / con);
46509}
46510
46511;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/phi2z.js
46512
46513
46514/* harmony default export */ function phi2z(eccent, ts) {
46515  var eccnth = 0.5 * eccent;
46516  var con, dphi;
46517  var phi = HALF_PI - 2 * Math.atan(ts);
46518  for (var i = 0; i <= 15; i++) {
46519    con = eccent * Math.sin(phi);
46520    dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
46521    phi += dphi;
46522    if (Math.abs(dphi) <= 0.0000000001) {
46523      return phi;
46524    }
46525  }
46526  //console.log("phi2z has NoConvergence");
46527  return -9999;
46528}
46529
46530;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/merc.js
46531
46532
46533
46534
46535
46536
46537function init() {
46538  var con = this.b / this.a;
46539  this.es = 1 - con * con;
46540  if(!('x0' in this)){
46541    this.x0 = 0;
46542  }
46543  if(!('y0' in this)){
46544    this.y0 = 0;
46545  }
46546  this.e = Math.sqrt(this.es);
46547  if (this.lat_ts) {
46548    if (this.sphere) {
46549      this.k0 = Math.cos(this.lat_ts);
46550    }
46551    else {
46552      this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
46553    }
46554  }
46555  else {
46556    if (!this.k0) {
46557      if (this.k) {
46558        this.k0 = this.k;
46559      }
46560      else {
46561        this.k0 = 1;
46562      }
46563    }
46564  }
46565}
46566
46567/* Mercator forward equations--mapping lat,long to x,y
46568  --------------------------------------------------*/
46569
46570function forward(p) {
46571  var lon = p.x;
46572  var lat = p.y;
46573  // convert to radians
46574  if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {
46575    return null;
46576  }
46577
46578  var x, y;
46579  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
46580    return null;
46581  }
46582  else {
46583    if (this.sphere) {
46584      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
46585      y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));
46586    }
46587    else {
46588      var sinphi = Math.sin(lat);
46589      var ts = tsfnz(this.e, lat, sinphi);
46590      x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
46591      y = this.y0 - this.a * this.k0 * Math.log(ts);
46592    }
46593    p.x = x;
46594    p.y = y;
46595    return p;
46596  }
46597}
46598
46599/* Mercator inverse equations--mapping x,y to lat/long
46600  --------------------------------------------------*/
46601function inverse(p) {
46602
46603  var x = p.x - this.x0;
46604  var y = p.y - this.y0;
46605  var lon, lat;
46606
46607  if (this.sphere) {
46608    lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));
46609  }
46610  else {
46611    var ts = Math.exp(-y / (this.a * this.k0));
46612    lat = phi2z(this.e, ts);
46613    if (lat === -9999) {
46614      return null;
46615    }
46616  }
46617  lon = adjust_lon(this.long0 + x / (this.a * this.k0));
46618
46619  p.x = lon;
46620  p.y = lat;
46621  return p;
46622}
46623
46624var names = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"];
46625/* harmony default export */ const merc = ({
46626  init: init,
46627  forward: forward,
46628  inverse: inverse,
46629  names: names
46630});
46631
46632;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/longlat.js
46633function longlat_init() {
46634  //no-op for longlat
46635}
46636
46637function identity(pt) {
46638  return pt;
46639}
46640
46641
46642var longlat_names = ["longlat", "identity"];
46643/* harmony default export */ const longlat = ({
46644  init: longlat_init,
46645  forward: identity,
46646  inverse: identity,
46647  names: longlat_names
46648});
46649
46650;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections.js
46651
46652
46653var projs = [merc, longlat];
46654var projections_names = {};
46655var projStore = [];
46656
46657function add(proj, i) {
46658  var len = projStore.length;
46659  if (!proj.names) {
46660    console.log(i);
46661    return true;
46662  }
46663  projStore[len] = proj;
46664  proj.names.forEach(function(n) {
46665    projections_names[n.toLowerCase()] = len;
46666  });
46667  return this;
46668}
46669
46670
46671
46672function get(name) {
46673  if (!name) {
46674    return false;
46675  }
46676  var n = name.toLowerCase();
46677  if (typeof projections_names[n] !== 'undefined' && projStore[projections_names[n]]) {
46678    return projStore[projections_names[n]];
46679  }
46680}
46681
46682function start() {
46683  projs.forEach(add);
46684}
46685/* harmony default export */ const projections = ({
46686  start: start,
46687  add: add,
46688  get: get
46689});
46690
46691;// CONCATENATED MODULE: ./node_modules/proj4/lib/constants/Ellipsoid.js
46692var Ellipsoid_exports = {};
46693
46694Ellipsoid_exports.MERIT = {
46695  a: 6378137.0,
46696  rf: 298.257,
46697  ellipseName: "MERIT 1983"
46698};
46699
46700Ellipsoid_exports.SGS85 = {
46701  a: 6378136.0,
46702  rf: 298.257,
46703  ellipseName: "Soviet Geodetic System 85"
46704};
46705
46706Ellipsoid_exports.GRS80 = {
46707  a: 6378137.0,
46708  rf: 298.257222101,
46709  ellipseName: "GRS 1980(IUGG, 1980)"
46710};
46711
46712Ellipsoid_exports.IAU76 = {
46713  a: 6378140.0,
46714  rf: 298.257,
46715  ellipseName: "IAU 1976"
46716};
46717
46718Ellipsoid_exports.airy = {
46719  a: 6377563.396,
46720  b: 6356256.910,
46721  ellipseName: "Airy 1830"
46722};
46723
46724Ellipsoid_exports.APL4 = {
46725  a: 6378137,
46726  rf: 298.25,
46727  ellipseName: "Appl. Physics. 1965"
46728};
46729
46730Ellipsoid_exports.NWL9D = {
46731  a: 6378145.0,
46732  rf: 298.25,
46733  ellipseName: "Naval Weapons Lab., 1965"
46734};
46735
46736Ellipsoid_exports.mod_airy = {
46737  a: 6377340.189,
46738  b: 6356034.446,
46739  ellipseName: "Modified Airy"
46740};
46741
46742Ellipsoid_exports.andrae = {
46743  a: 6377104.43,
46744  rf: 300.0,
46745  ellipseName: "Andrae 1876 (Den., Iclnd.)"
46746};
46747
46748Ellipsoid_exports.aust_SA = {
46749  a: 6378160.0,
46750  rf: 298.25,
46751  ellipseName: "Australian Natl & S. Amer. 1969"
46752};
46753
46754Ellipsoid_exports.GRS67 = {
46755  a: 6378160.0,
46756  rf: 298.2471674270,
46757  ellipseName: "GRS 67(IUGG 1967)"
46758};
46759
46760Ellipsoid_exports.bessel = {
46761  a: 6377397.155,
46762  rf: 299.1528128,
46763  ellipseName: "Bessel 1841"
46764};
46765
46766Ellipsoid_exports.bess_nam = {
46767  a: 6377483.865,
46768  rf: 299.1528128,
46769  ellipseName: "Bessel 1841 (Namibia)"
46770};
46771
46772Ellipsoid_exports.clrk66 = {
46773  a: 6378206.4,
46774  b: 6356583.8,
46775  ellipseName: "Clarke 1866"
46776};
46777
46778Ellipsoid_exports.clrk80 = {
46779  a: 6378249.145,
46780  rf: 293.4663,
46781  ellipseName: "Clarke 1880 mod."
46782};
46783
46784Ellipsoid_exports.clrk58 = {
46785  a: 6378293.645208759,
46786  rf: 294.2606763692654,
46787  ellipseName: "Clarke 1858"
46788};
46789
46790Ellipsoid_exports.CPM = {
46791  a: 6375738.7,
46792  rf: 334.29,
46793  ellipseName: "Comm. des Poids et Mesures 1799"
46794};
46795
46796Ellipsoid_exports.delmbr = {
46797  a: 6376428.0,
46798  rf: 311.5,
46799  ellipseName: "Delambre 1810 (Belgium)"
46800};
46801
46802Ellipsoid_exports.engelis = {
46803  a: 6378136.05,
46804  rf: 298.2566,
46805  ellipseName: "Engelis 1985"
46806};
46807
46808Ellipsoid_exports.evrst30 = {
46809  a: 6377276.345,
46810  rf: 300.8017,
46811  ellipseName: "Everest 1830"
46812};
46813
46814Ellipsoid_exports.evrst48 = {
46815  a: 6377304.063,
46816  rf: 300.8017,
46817  ellipseName: "Everest 1948"
46818};
46819
46820Ellipsoid_exports.evrst56 = {
46821  a: 6377301.243,
46822  rf: 300.8017,
46823  ellipseName: "Everest 1956"
46824};
46825
46826Ellipsoid_exports.evrst69 = {
46827  a: 6377295.664,
46828  rf: 300.8017,
46829  ellipseName: "Everest 1969"
46830};
46831
46832Ellipsoid_exports.evrstSS = {
46833  a: 6377298.556,
46834  rf: 300.8017,
46835  ellipseName: "Everest (Sabah & Sarawak)"
46836};
46837
46838Ellipsoid_exports.fschr60 = {
46839  a: 6378166.0,
46840  rf: 298.3,
46841  ellipseName: "Fischer (Mercury Datum) 1960"
46842};
46843
46844Ellipsoid_exports.fschr60m = {
46845  a: 6378155.0,
46846  rf: 298.3,
46847  ellipseName: "Fischer 1960"
46848};
46849
46850Ellipsoid_exports.fschr68 = {
46851  a: 6378150.0,
46852  rf: 298.3,
46853  ellipseName: "Fischer 1968"
46854};
46855
46856Ellipsoid_exports.helmert = {
46857  a: 6378200.0,
46858  rf: 298.3,
46859  ellipseName: "Helmert 1906"
46860};
46861
46862Ellipsoid_exports.hough = {
46863  a: 6378270.0,
46864  rf: 297.0,
46865  ellipseName: "Hough"
46866};
46867
46868Ellipsoid_exports.intl = {
46869  a: 6378388.0,
46870  rf: 297.0,
46871  ellipseName: "International 1909 (Hayford)"
46872};
46873
46874Ellipsoid_exports.kaula = {
46875  a: 6378163.0,
46876  rf: 298.24,
46877  ellipseName: "Kaula 1961"
46878};
46879
46880Ellipsoid_exports.lerch = {
46881  a: 6378139.0,
46882  rf: 298.257,
46883  ellipseName: "Lerch 1979"
46884};
46885
46886Ellipsoid_exports.mprts = {
46887  a: 6397300.0,
46888  rf: 191.0,
46889  ellipseName: "Maupertius 1738"
46890};
46891
46892Ellipsoid_exports.new_intl = {
46893  a: 6378157.5,
46894  b: 6356772.2,
46895  ellipseName: "New International 1967"
46896};
46897
46898Ellipsoid_exports.plessis = {
46899  a: 6376523.0,
46900  rf: 6355863.0,
46901  ellipseName: "Plessis 1817 (France)"
46902};
46903
46904Ellipsoid_exports.krass = {
46905  a: 6378245.0,
46906  rf: 298.3,
46907  ellipseName: "Krassovsky, 1942"
46908};
46909
46910Ellipsoid_exports.SEasia = {
46911  a: 6378155.0,
46912  b: 6356773.3205,
46913  ellipseName: "Southeast Asia"
46914};
46915
46916Ellipsoid_exports.walbeck = {
46917  a: 6376896.0,
46918  b: 6355834.8467,
46919  ellipseName: "Walbeck"
46920};
46921
46922Ellipsoid_exports.WGS60 = {
46923  a: 6378165.0,
46924  rf: 298.3,
46925  ellipseName: "WGS 60"
46926};
46927
46928Ellipsoid_exports.WGS66 = {
46929  a: 6378145.0,
46930  rf: 298.25,
46931  ellipseName: "WGS 66"
46932};
46933
46934Ellipsoid_exports.WGS7 = {
46935  a: 6378135.0,
46936  rf: 298.26,
46937  ellipseName: "WGS 72"
46938};
46939
46940var WGS84 = Ellipsoid_exports.WGS84 = {
46941  a: 6378137.0,
46942  rf: 298.257223563,
46943  ellipseName: "WGS 84"
46944};
46945
46946Ellipsoid_exports.sphere = {
46947  a: 6370997.0,
46948  b: 6370997.0,
46949  ellipseName: "Normal Sphere (r=6370997)"
46950};
46951
46952;// CONCATENATED MODULE: ./node_modules/proj4/lib/deriveConstants.js
46953
46954
46955
46956
46957function eccentricity(a, b, rf, R_A) {
46958  var a2 = a * a; // used in geocentric
46959  var b2 = b * b; // used in geocentric
46960  var es = (a2 - b2) / a2; // e ^ 2
46961  var e = 0;
46962  if (R_A) {
46963    a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));
46964    a2 = a * a;
46965    es = 0;
46966  } else {
46967    e = Math.sqrt(es); // eccentricity
46968  }
46969  var ep2 = (a2 - b2) / b2; // used in geocentric
46970  return {
46971    es: es,
46972    e: e,
46973    ep2: ep2
46974  };
46975}
46976function sphere(a, b, rf, ellps, sphere) {
46977  if (!a) { // do we have an ellipsoid?
46978    var ellipse = match(Ellipsoid_exports, ellps);
46979    if (!ellipse) {
46980      ellipse = WGS84;
46981    }
46982    a = ellipse.a;
46983    b = ellipse.b;
46984    rf = ellipse.rf;
46985  }
46986
46987  if (rf && !b) {
46988    b = (1.0 - 1.0 / rf) * a;
46989  }
46990  if (rf === 0 || Math.abs(a - b) < EPSLN) {
46991    sphere = true;
46992    b = a;
46993  }
46994  return {
46995    a: a,
46996    b: b,
46997    rf: rf,
46998    sphere: sphere
46999  };
47000}
47001
47002;// CONCATENATED MODULE: ./node_modules/proj4/lib/constants/Datum.js
47003var Datum_exports = {};
47004
47005Datum_exports.wgs84 = {
47006  towgs84: "0,0,0",
47007  ellipse: "WGS84",
47008  datumName: "WGS84"
47009};
47010
47011Datum_exports.ch1903 = {
47012  towgs84: "674.374,15.056,405.346",
47013  ellipse: "bessel",
47014  datumName: "swiss"
47015};
47016
47017Datum_exports.ggrs87 = {
47018  towgs84: "-199.87,74.79,246.62",
47019  ellipse: "GRS80",
47020  datumName: "Greek_Geodetic_Reference_System_1987"
47021};
47022
47023Datum_exports.nad83 = {
47024  towgs84: "0,0,0",
47025  ellipse: "GRS80",
47026  datumName: "North_American_Datum_1983"
47027};
47028
47029Datum_exports.nad27 = {
47030  nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
47031  ellipse: "clrk66",
47032  datumName: "North_American_Datum_1927"
47033};
47034
47035Datum_exports.potsdam = {
47036  towgs84: "606.0,23.0,413.0",
47037  ellipse: "bessel",
47038  datumName: "Potsdam Rauenberg 1950 DHDN"
47039};
47040
47041Datum_exports.carthage = {
47042  towgs84: "-263.0,6.0,431.0",
47043  ellipse: "clark80",
47044  datumName: "Carthage 1934 Tunisia"
47045};
47046
47047Datum_exports.hermannskogel = {
47048  towgs84: "653.0,-212.0,449.0",
47049  ellipse: "bessel",
47050  datumName: "Hermannskogel"
47051};
47052
47053Datum_exports.osni52 = {
47054  towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
47055  ellipse: "airy",
47056  datumName: "Irish National"
47057};
47058
47059Datum_exports.ire65 = {
47060  towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
47061  ellipse: "mod_airy",
47062  datumName: "Ireland 1965"
47063};
47064
47065Datum_exports.rassadiran = {
47066  towgs84: "-133.63,-157.5,-158.62",
47067  ellipse: "intl",
47068  datumName: "Rassadiran"
47069};
47070
47071Datum_exports.nzgd49 = {
47072  towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
47073  ellipse: "intl",
47074  datumName: "New Zealand Geodetic Datum 1949"
47075};
47076
47077Datum_exports.osgb36 = {
47078  towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
47079  ellipse: "airy",
47080  datumName: "Airy 1830"
47081};
47082
47083Datum_exports.s_jtsk = {
47084  towgs84: "589,76,480",
47085  ellipse: 'bessel',
47086  datumName: 'S-JTSK (Ferro)'
47087};
47088
47089Datum_exports.beduaram = {
47090  towgs84: '-106,-87,188',
47091  ellipse: 'clrk80',
47092  datumName: 'Beduaram'
47093};
47094
47095Datum_exports.gunung_segara = {
47096  towgs84: '-403,684,41',
47097  ellipse: 'bessel',
47098  datumName: 'Gunung Segara Jakarta'
47099};
47100
47101Datum_exports.rnb72 = {
47102  towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
47103  ellipse: "intl",
47104  datumName: "Reseau National Belge 1972"
47105};
47106
47107;// CONCATENATED MODULE: ./node_modules/proj4/lib/datum.js
47108
47109
47110function datum(datumCode, datum_params, a, b, es, ep2, nadgrids) {
47111  var out = {};
47112
47113  if (datumCode === undefined || datumCode === 'none') {
47114    out.datum_type = PJD_NODATUM;
47115  } else {
47116    out.datum_type = PJD_WGS84;
47117  }
47118
47119  if (datum_params) {
47120    out.datum_params = datum_params.map(parseFloat);
47121    if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {
47122      out.datum_type = PJD_3PARAM;
47123    }
47124    if (out.datum_params.length > 3) {
47125      if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {
47126        out.datum_type = PJD_7PARAM;
47127        out.datum_params[3] *= SEC_TO_RAD;
47128        out.datum_params[4] *= SEC_TO_RAD;
47129        out.datum_params[5] *= SEC_TO_RAD;
47130        out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;
47131      }
47132    }
47133  }
47134
47135  if (nadgrids) {
47136    out.datum_type = PJD_GRIDSHIFT;
47137    out.grids = nadgrids;
47138  }
47139  out.a = a; //datum object also uses these values
47140  out.b = b;
47141  out.es = es;
47142  out.ep2 = ep2;
47143  return out;
47144}
47145
47146/* harmony default export */ const lib_datum = (datum);
47147
47148;// CONCATENATED MODULE: ./node_modules/proj4/lib/nadgrid.js
47149/**
47150 * Resources for details of NTv2 file formats:
47151 * - https://web.archive.org/web/20140127204822if_/http://www.mgs.gov.on.ca:80/stdprodconsume/groups/content/@mgs/@iandit/documents/resourcelist/stel02_047447.pdf
47152 * - http://mimaka.com/help/gs/html/004_NTV2%20Data%20Format.htm
47153 */
47154
47155var loadedNadgrids = {};
47156
47157/**
47158 * Load a binary NTv2 file (.gsb) to a key that can be used in a proj string like +nadgrids=<key>. Pass the NTv2 file
47159 * as an ArrayBuffer.
47160 */
47161function nadgrid(key, data) {
47162  var view = new DataView(data);
47163  var isLittleEndian = detectLittleEndian(view);
47164  var header = readHeader(view, isLittleEndian);
47165  if (header.nSubgrids > 1) {
47166    console.log('Only single NTv2 subgrids are currently supported, subsequent sub grids are ignored');
47167  }
47168  var subgrids = readSubgrids(view, header, isLittleEndian);
47169  var nadgrid = {header: header, subgrids: subgrids};
47170  loadedNadgrids[key] = nadgrid;
47171  return nadgrid;
47172}
47173
47174/**
47175 * Given a proj4 value for nadgrids, return an array of loaded grids
47176 */
47177function getNadgrids(nadgrids) {
47178  // Format details: http://proj.maptools.org/gen_parms.html
47179  if (nadgrids === undefined) { return null; }
47180  var grids = nadgrids.split(',');
vendor: 4,342 bytes, lines 47181-47315
47181  return grids.map(parseNadgridString);
47182}
47183
47184function parseNadgridString(value) {
47185  if (value.length === 0) {
47186    return null;
47187  }
47188  var optional = value[0] === '@';
47189  if (optional) {
47190    value = value.slice(1);
47191  }
47192  if (value === 'null') {
47193    return {name: 'null', mandatory: !optional, grid: null, isNull: true};
47194  }
47195  return {
47196    name: value,
47197    mandatory: !optional,
47198    grid: loadedNadgrids[value] || null,
47199    isNull: false
47200  };
47201}
47202
47203function secondsToRadians(seconds) {
47204  return (seconds / 3600) * Math.PI / 180;
47205}
47206
47207function detectLittleEndian(view) {
47208  var nFields = view.getInt32(8, false);
47209  if (nFields === 11) {
47210    return false;
47211  }
47212  nFields = view.getInt32(8, true);
47213  if (nFields !== 11) {
47214    console.warn('Failed to detect nadgrid endian-ness, defaulting to little-endian');
47215  }
47216  return true;
47217}
47218
47219function readHeader(view, isLittleEndian) {
47220  return {
47221    nFields: view.getInt32(8, isLittleEndian),
47222    nSubgridFields: view.getInt32(24, isLittleEndian),
47223    nSubgrids: view.getInt32(40, isLittleEndian),
47224    shiftType: decodeString(view, 56, 56 + 8).trim(),
47225    fromSemiMajorAxis: view.getFloat64(120, isLittleEndian),
47226    fromSemiMinorAxis: view.getFloat64(136, isLittleEndian),
47227    toSemiMajorAxis: view.getFloat64(152, isLittleEndian),
47228    toSemiMinorAxis: view.getFloat64(168, isLittleEndian),
47229  };
47230}
47231
47232function decodeString(view, start, end) {
47233  return String.fromCharCode.apply(null, new Uint8Array(view.buffer.slice(start, end)));
47234}
47235
47236function readSubgrids(view, header, isLittleEndian) {
47237  var gridOffset = 176;
47238  var grids = [];
47239  for (var i = 0; i < header.nSubgrids; i++) {
47240    var subHeader = readGridHeader(view, gridOffset, isLittleEndian);
47241    var nodes = readGridNodes(view, gridOffset, subHeader, isLittleEndian);
47242    var lngColumnCount = Math.round(
47243      1 + (subHeader.upperLongitude - subHeader.lowerLongitude) / subHeader.longitudeInterval);
47244    var latColumnCount = Math.round(
47245      1 + (subHeader.upperLatitude - subHeader.lowerLatitude) / subHeader.latitudeInterval);
47246    // Proj4 operates on radians whereas the coordinates are in seconds in the grid
47247    grids.push({
47248      ll: [secondsToRadians(subHeader.lowerLongitude), secondsToRadians(subHeader.lowerLatitude)],
47249      del: [secondsToRadians(subHeader.longitudeInterval), secondsToRadians(subHeader.latitudeInterval)],
47250      lim: [lngColumnCount, latColumnCount],
47251      count: subHeader.gridNodeCount,
47252      cvs: mapNodes(nodes)
47253    });
47254  }
47255  return grids;
47256}
47257
47258function mapNodes(nodes) {
47259  return nodes.map(function (r) {return [secondsToRadians(r.longitudeShift), secondsToRadians(r.latitudeShift)];});
47260}
47261
47262function readGridHeader(view, offset, isLittleEndian) {
47263  return {
47264    name: decodeString(view, offset + 8, offset + 16).trim(),
47265    parent: decodeString(view, offset + 24, offset + 24 + 8).trim(),
47266    lowerLatitude: view.getFloat64(offset + 72, isLittleEndian),
47267    upperLatitude: view.getFloat64(offset + 88, isLittleEndian),
47268    lowerLongitude: view.getFloat64(offset + 104, isLittleEndian),
47269    upperLongitude: view.getFloat64(offset + 120, isLittleEndian),
47270    latitudeInterval: view.getFloat64(offset + 136, isLittleEndian),
47271    longitudeInterval: view.getFloat64(offset + 152, isLittleEndian),
47272    gridNodeCount: view.getInt32(offset + 168, isLittleEndian)
47273  };
47274}
47275
47276function readGridNodes(view, offset, gridHeader, isLittleEndian) {
47277  var nodesOffset = offset + 176;
47278  var gridRecordLength = 16;
47279  var gridShiftRecords = [];
47280  for (var i = 0; i < gridHeader.gridNodeCount; i++) {
47281    var record = {
47282      latitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength, isLittleEndian),
47283      longitudeShift: view.getFloat32(nodesOffset + i * gridRecordLength + 4, isLittleEndian),
47284      latitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 8, isLittleEndian),
47285      longitudeAccuracy: view.getFloat32(nodesOffset + i * gridRecordLength + 12, isLittleEndian),
47286    };
47287    gridShiftRecords.push(record);
47288  }
47289  return gridShiftRecords;
47290}
47291
47292;// CONCATENATED MODULE: ./node_modules/proj4/lib/Proj.js
47293
47294
47295
47296
47297
47298
47299
47300
47301
47302function Projection(srsCode,callback) {
47303  if (!(this instanceof Projection)) {
47304    return new Projection(srsCode);
47305  }
47306  callback = callback || function(error){
47307    if(error){
47308      throw error;
47309    }
47310  };
47311  var json = parseCode(srsCode);
47312  if(typeof json !== 'object'){
47313    callback(srsCode);
47314    return;
47315  }
47316  var ourProj = Projection.projections.get(json.projName);
47317  if(!ourProj){
47318    callback(srsCode);
47319    return;
47320  }
47321  if (json.datumCode && json.datumCode !== 'none') {
47322    var datumDef = match(Datum_exports, json.datumCode);
47323    if (datumDef) {
47324      json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;
47325      json.ellps = datumDef.ellipse;
47326      json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
47327    }
47328  }
47329  json.k0 = json.k0 || 1.0;
47330  json.axis = json.axis || 'enu';
47331  json.ellps = json.ellps || 'wgs84';
47332  var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);
47333  var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);
47334  var nadgrids = getNadgrids(json.nadgrids);
47335  var datumObj = json.datum || lib_datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2,
47336    nadgrids);
47337
47338  extend(this, json); // transfer everything over from the projection because we don't know what we'll need
47339  extend(this, ourProj); // transfer all the methods from the projection
47340
47341  // copy the 4 things over we calulated in deriveConstants.sphere
47342  this.a = sphere_.a;
47343  this.b = sphere_.b;
47344  this.rf = sphere_.rf;
47345  this.sphere = sphere_.sphere;
47346
47347  // copy the 3 things we calculated in deriveConstants.eccentricity
47348  this.es = ecc.es;
47349  this.e = ecc.e;
47350  this.ep2 = ecc.ep2;
47351
47352  // add in the datum object
47353  this.datum = datumObj;
47354
47355  // init the projection
47356  this.init();
47357
47358  // legecy callback from back in the day when it went to spatialreference.org
47359  callback(null, this);
47360
47361}
47362Projection.projections = projections;
47363Projection.projections.start();
47364/* harmony default export */ const Proj = (Projection);
47365
47366;// CONCATENATED MODULE: ./node_modules/proj4/lib/datumUtils.js
vendor: 8,482 bytes, lines 47367-47612
47367
47368
47369function compareDatums(source, dest) {
47370  if (source.datum_type !== dest.datum_type) {
47371    return false; // false, datums are not equal
47372  } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {
47373    // the tolerance for es is to ensure that GRS80 and WGS84
47374    // are considered identical
47375    return false;
47376  } else if (source.datum_type === PJD_3PARAM) {
47377    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);
47378  } else if (source.datum_type === PJD_7PARAM) {
47379    return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);
47380  } else {
47381    return true; // datums are equal
47382  }
47383} // cs_compare_datums()
47384
47385/*
47386 * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
47387 * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
47388 * according to the current ellipsoid parameters.
47389 *
47390 *    Latitude  : Geodetic latitude in radians                     (input)
47391 *    Longitude : Geodetic longitude in radians                    (input)
47392 *    Height    : Geodetic height, in meters                       (input)
47393 *    X         : Calculated Geocentric X coordinate, in meters    (output)
47394 *    Y         : Calculated Geocentric Y coordinate, in meters    (output)
47395 *    Z         : Calculated Geocentric Z coordinate, in meters    (output)
47396 *
47397 */
47398function geodeticToGeocentric(p, es, a) {
47399  var Longitude = p.x;
47400  var Latitude = p.y;
47401  var Height = p.z ? p.z : 0; //Z value not always supplied
47402
47403  var Rn; /*  Earth radius at location  */
47404  var Sin_Lat; /*  Math.sin(Latitude)  */
47405  var Sin2_Lat; /*  Square of Math.sin(Latitude)  */
47406  var Cos_Lat; /*  Math.cos(Latitude)  */
47407
47408  /*
47409   ** Don't blow up if Latitude is just a little out of the value
47410   ** range as it may just be a rounding issue.  Also removed longitude
47411   ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.
47412   */
47413  if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {
47414    Latitude = -HALF_PI;
47415  } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {
47416    Latitude = HALF_PI;
47417  } else if (Latitude < -HALF_PI) {
47418    /* Latitude out of range */
47419    //..reportError('geocent:lat out of range:' + Latitude);
47420    return { x: -Infinity, y: -Infinity, z: p.z };
47421  } else if (Latitude > HALF_PI) {
47422    /* Latitude out of range */
47423    return { x: Infinity, y: Infinity, z: p.z };
47424  }
47425
47426  if (Longitude > Math.PI) {
47427    Longitude -= (2 * Math.PI);
47428  }
47429  Sin_Lat = Math.sin(Latitude);
47430  Cos_Lat = Math.cos(Latitude);
47431  Sin2_Lat = Sin_Lat * Sin_Lat;
47432  Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));
47433  return {
47434    x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),
47435    y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),
47436    z: ((Rn * (1 - es)) + Height) * Sin_Lat
47437  };
47438} // cs_geodetic_to_geocentric()
47439
47440function geocentricToGeodetic(p, es, a, b) {
47441  /* local defintions and variables */
47442  /* end-criterium of loop, accuracy of sin(Latitude) */
47443  var genau = 1e-12;
47444  var genau2 = (genau * genau);
47445  var maxiter = 30;
47446
47447  var P; /* distance between semi-minor axis and location */
47448  var RR; /* distance between center and location */
47449  var CT; /* sin of geocentric latitude */
47450  var ST; /* cos of geocentric latitude */
47451  var RX;
47452  var RK;
47453  var RN; /* Earth radius at location */
47454  var CPHI0; /* cos of start or old geodetic latitude in iterations */
47455  var SPHI0; /* sin of start or old geodetic latitude in iterations */
47456  var CPHI; /* cos of searched geodetic latitude */
47457  var SPHI; /* sin of searched geodetic latitude */
47458  var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
47459  var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
47460
47461  var X = p.x;
47462  var Y = p.y;
47463  var Z = p.z ? p.z : 0.0; //Z value not always supplied
47464  var Longitude;
47465  var Latitude;
47466  var Height;
47467
47468  P = Math.sqrt(X * X + Y * Y);
47469  RR = Math.sqrt(X * X + Y * Y + Z * Z);
47470
47471  /*      special cases for latitude and longitude */
47472  if (P / a < genau) {
47473
47474    /*  special case, if P=0. (X=0., Y=0.) */
47475    Longitude = 0.0;
47476
47477    /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
47478     *  of ellipsoid (=center of mass), Latitude becomes PI/2 */
47479    if (RR / a < genau) {
47480      Latitude = HALF_PI;
47481      Height = -b;
47482      return {
47483        x: p.x,
47484        y: p.y,
47485        z: p.z
47486      };
47487    }
47488  } else {
47489    /*  ellipsoidal (geodetic) longitude
47490     *  interval: -PI < Longitude <= +PI */
47491    Longitude = Math.atan2(Y, X);
47492  }
47493
47494  /* --------------------------------------------------------------
47495   * Following iterative algorithm was developped by
47496   * "Institut for Erdmessung", University of Hannover, July 1988.
47497   * Internet: www.ife.uni-hannover.de
47498   * Iterative computation of CPHI,SPHI and Height.
47499   * Iteration of CPHI and SPHI to 10**-12 radian resp.
47500   * 2*10**-7 arcsec.
47501   * --------------------------------------------------------------
47502   */
47503  CT = Z / RR;
47504  ST = P / RR;
47505  RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);
47506  CPHI0 = ST * (1.0 - es) * RX;
47507  SPHI0 = CT * RX;
47508  iter = 0;
47509
47510  /* loop to find sin(Latitude) resp. Latitude
47511   * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
47512  do {
47513    iter++;
47514    RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);
47515
47516    /*  ellipsoidal (geodetic) height */
47517    Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);
47518
47519    RK = es * RN / (RN + Height);
47520    RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);
47521    CPHI = ST * (1.0 - RK) * RX;
47522    SPHI = CT * RX;
47523    SDPHI = SPHI * CPHI0 - CPHI * SPHI0;
47524    CPHI0 = CPHI;
47525    SPHI0 = SPHI;
47526  }
47527  while (SDPHI * SDPHI > genau2 && iter < maxiter);
47528
47529  /*      ellipsoidal (geodetic) latitude */
47530  Latitude = Math.atan(SPHI / Math.abs(CPHI));
47531  return {
47532    x: Longitude,
47533    y: Latitude,
47534    z: Height
47535  };
47536} // cs_geocentric_to_geodetic()
47537
47538/****************************************************************/
47539// pj_geocentic_to_wgs84( p )
47540//  p = point to transform in geocentric coordinates (x,y,z)
47541
47542
47543/** point object, nothing fancy, just allows values to be
47544    passed back and forth by reference rather than by value.
47545    Other point classes may be used as long as they have
47546    x and y properties, which will get modified in the transform method.
47547*/
47548function geocentricToWgs84(p, datum_type, datum_params) {
47549
47550  if (datum_type === PJD_3PARAM) {
47551    // if( x[io] === HUGE_VAL )
47552    //    continue;
47553    return {
47554      x: p.x + datum_params[0],
47555      y: p.y + datum_params[1],
47556      z: p.z + datum_params[2],
47557    };
47558  } else if (datum_type === PJD_7PARAM) {
47559    var Dx_BF = datum_params[0];
47560    var Dy_BF = datum_params[1];
47561    var Dz_BF = datum_params[2];
47562    var Rx_BF = datum_params[3];
47563    var Ry_BF = datum_params[4];
47564    var Rz_BF = datum_params[5];
47565    var M_BF = datum_params[6];
47566    // if( x[io] === HUGE_VAL )
47567    //    continue;
47568    return {
47569      x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,
47570      y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,
47571      z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF
47572    };
47573  }
47574} // cs_geocentric_to_wgs84
47575
47576/****************************************************************/
47577// pj_geocentic_from_wgs84()
47578//  coordinate system definition,
47579//  point to transform in geocentric coordinates (x,y,z)
47580function geocentricFromWgs84(p, datum_type, datum_params) {
47581
47582  if (datum_type === PJD_3PARAM) {
47583    //if( x[io] === HUGE_VAL )
47584    //    continue;
47585    return {
47586      x: p.x - datum_params[0],
47587      y: p.y - datum_params[1],
47588      z: p.z - datum_params[2],
47589    };
47590
47591  } else if (datum_type === PJD_7PARAM) {
47592    var Dx_BF = datum_params[0];
47593    var Dy_BF = datum_params[1];
47594    var Dz_BF = datum_params[2];
47595    var Rx_BF = datum_params[3];
47596    var Ry_BF = datum_params[4];
47597    var Rz_BF = datum_params[5];
47598    var M_BF = datum_params[6];
47599    var x_tmp = (p.x - Dx_BF) / M_BF;
47600    var y_tmp = (p.y - Dy_BF) / M_BF;
47601    var z_tmp = (p.z - Dz_BF) / M_BF;
47602    //if( x[io] === HUGE_VAL )
47603    //    continue;
47604
47605    return {
47606      x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,
47607      y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,
47608      z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp
47609    };
47610  } //cs_geocentric_from_wgs84()
47611}
47612
vendor: 11,754 bytes, lines 47613-48043
47613;// CONCATENATED MODULE: ./node_modules/proj4/lib/datum_transform.js
47614
47615
47616
47617
47618function checkParams(type) {
47619  return (type === PJD_3PARAM || type === PJD_7PARAM);
47620}
47621
47622/* harmony default export */ function datum_transform(source, dest, point) {
47623  // Short cut if the datums are identical.
47624  if (compareDatums(source, dest)) {
47625    return point; // in this case, zero is sucess,
47626    // whereas cs_compare_datums returns 1 to indicate TRUE
47627    // confusing, should fix this
47628  }
47629
47630  // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest
47631  if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {
47632    return point;
47633  }
47634
47635  // If this datum requires grid shifts, then apply it to geodetic coordinates.
47636  var source_a = source.a;
47637  var source_es = source.es;
47638  if (source.datum_type === PJD_GRIDSHIFT) {
47639    var gridShiftCode = applyGridShift(source, false, point);
47640    if (gridShiftCode !== 0) {
47641      return undefined;
47642    }
47643    source_a = SRS_WGS84_SEMIMAJOR;
47644    source_es = SRS_WGS84_ESQUARED;
47645  }
47646
47647  var dest_a = dest.a;
47648  var dest_b = dest.b;
47649  var dest_es = dest.es;
47650  if (dest.datum_type === PJD_GRIDSHIFT) {
47651    dest_a = SRS_WGS84_SEMIMAJOR;
47652    dest_b = SRS_WGS84_SEMIMINOR;
47653    dest_es = SRS_WGS84_ESQUARED;
47654  }
47655
47656  // Do we need to go through geocentric coordinates?
47657  if (source_es === dest_es && source_a === dest_a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {
47658    return point;
47659  }
47660
47661  // Convert to geocentric coordinates.
47662  point = geodeticToGeocentric(point, source_es, source_a);
47663  // Convert between datums
47664  if (checkParams(source.datum_type)) {
47665    point = geocentricToWgs84(point, source.datum_type, source.datum_params);
47666  }
47667  if (checkParams(dest.datum_type)) {
47668    point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);
47669  }
47670  point = geocentricToGeodetic(point, dest_es, dest_a, dest_b);
47671
47672  if (dest.datum_type === PJD_GRIDSHIFT) {
47673    var destGridShiftResult = applyGridShift(dest, true, point);
47674    if (destGridShiftResult !== 0) {
47675      return undefined;
47676    }
47677  }
47678
47679  return point;
47680}
47681
47682function applyGridShift(source, inverse, point) {
47683  if (source.grids === null || source.grids.length === 0) {
47684    console.log('Grid shift grids not found');
47685    return -1;
47686  }
47687  var input = {x: -point.x, y: point.y};
47688  var output = {x: Number.NaN, y: Number.NaN};
47689  var onlyMandatoryGrids = false;
47690  var attemptedGrids = [];
47691  for (var i = 0; i < source.grids.length; i++) {
47692    var grid = source.grids[i];
47693    attemptedGrids.push(grid.name);
47694    if (grid.isNull) {
47695      output = input;
47696      break;
47697    }
47698    onlyMandatoryGrids = grid.mandatory;
47699    if (grid.grid === null) {
47700      if (grid.mandatory) {
47701        console.log("Unable to find mandatory grid '" + grid.name + "'");
47702        return -1;
47703      }
47704      continue;
47705    }
47706    var subgrid = grid.grid.subgrids[0];
47707    // skip tables that don't match our point at all
47708    var epsilon = (Math.abs(subgrid.del[1]) + Math.abs(subgrid.del[0])) / 10000.0;
47709    var minX = subgrid.ll[0] - epsilon;
47710    var minY = subgrid.ll[1] - epsilon;
47711    var maxX = subgrid.ll[0] + (subgrid.lim[0] - 1) * subgrid.del[0] + epsilon;
47712    var maxY = subgrid.ll[1] + (subgrid.lim[1] - 1) * subgrid.del[1] + epsilon;
47713    if (minY > input.y || minX > input.x || maxY < input.y || maxX < input.x ) {
47714      continue;
47715    }
47716    output = applySubgridShift(input, inverse, subgrid);
47717    if (!isNaN(output.x)) {
47718      break;
47719    }
47720  }
47721  if (isNaN(output.x)) {
47722    console.log("Failed to find a grid shift table for location '"+
47723      -input.x * R2D + " " + input.y * R2D + " tried: '" + attemptedGrids + "'");
47724    return -1;
47725  }
47726  point.x = -output.x;
47727  point.y = output.y;
47728  return 0;
47729}
47730
47731function applySubgridShift(pin, inverse, ct) {
47732  var val = {x: Number.NaN, y: Number.NaN};
47733  if (isNaN(pin.x)) { return val; }
47734  var tb = {x: pin.x, y: pin.y};
47735  tb.x -= ct.ll[0];
47736  tb.y -= ct.ll[1];
47737  tb.x = adjust_lon(tb.x - Math.PI) + Math.PI;
47738  var t = nadInterpolate(tb, ct);
47739  if (inverse) {
47740    if (isNaN(t.x)) {
47741      return val;
47742    }
47743    t.x = tb.x - t.x;
47744    t.y = tb.y - t.y;
47745    var i = 9, tol = 1e-12;
47746    var dif, del;
47747    do {
47748      del = nadInterpolate(t, ct);
47749      if (isNaN(del.x)) {
47750        console.log("Inverse grid shift iteration failed, presumably at grid edge.  Using first approximation.");
47751        break;
47752      }
47753      dif = {x: tb.x - (del.x + t.x), y: tb.y - (del.y + t.y)};
47754      t.x += dif.x;
47755      t.y += dif.y;
47756    } while (i-- && Math.abs(dif.x) > tol && Math.abs(dif.y) > tol);
47757    if (i < 0) {
47758      console.log("Inverse grid shift iterator failed to converge.");
47759      return val;
47760    }
47761    val.x = adjust_lon(t.x + ct.ll[0]);
47762    val.y = t.y + ct.ll[1];
47763  } else {
47764    if (!isNaN(t.x)) {
47765      val.x = pin.x + t.x;
47766      val.y = pin.y + t.y;
47767    }
47768  }
47769  return val;
47770}
47771
47772function nadInterpolate(pin, ct) {
47773  var t = {x: pin.x / ct.del[0], y: pin.y / ct.del[1]};
47774  var indx = {x: Math.floor(t.x), y: Math.floor(t.y)};
47775  var frct = {x: t.x - 1.0 * indx.x, y: t.y - 1.0 * indx.y};
47776  var val= {x: Number.NaN, y: Number.NaN};
47777  var inx;
47778  if (indx.x < 0 || indx.x >= ct.lim[0]) {
47779    return val;
47780  }
47781  if (indx.y < 0 || indx.y >= ct.lim[1]) {
47782    return val;
47783  }
47784  inx = (indx.y * ct.lim[0]) + indx.x;
47785  var f00 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
47786  inx++;
47787  var f10= {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
47788  inx += ct.lim[0];
47789  var f11 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
47790  inx--;
47791  var f01 = {x: ct.cvs[inx][0], y: ct.cvs[inx][1]};
47792  var m11 = frct.x * frct.y, m10 = frct.x * (1.0 - frct.y),
47793    m00 = (1.0 - frct.x) * (1.0 - frct.y), m01 = (1.0 - frct.x) * frct.y;
47794  val.x = (m00 * f00.x + m10 * f10.x + m01 * f01.x + m11 * f11.x);
47795  val.y = (m00 * f00.y + m10 * f10.y + m01 * f01.y + m11 * f11.y);
47796  return val;
47797}
47798
47799;// CONCATENATED MODULE: ./node_modules/proj4/lib/adjust_axis.js
47800/* harmony default export */ function adjust_axis(crs, denorm, point) {
47801  var xin = point.x,
47802    yin = point.y,
47803    zin = point.z || 0.0;
47804  var v, t, i;
47805  var out = {};
47806  for (i = 0; i < 3; i++) {
47807    if (denorm && i === 2 && point.z === undefined) {
47808      continue;
47809    }
47810    if (i === 0) {
47811      v = xin;
47812      if ("ew".indexOf(crs.axis[i]) !== -1) {
47813        t = 'x';
47814      } else {
47815        t = 'y';
47816      }
47817
47818    }
47819    else if (i === 1) {
47820      v = yin;
47821      if ("ns".indexOf(crs.axis[i]) !== -1) {
47822        t = 'y';
47823      } else {
47824        t = 'x';
47825      }
47826    }
47827    else {
47828      v = zin;
47829      t = 'z';
47830    }
47831    switch (crs.axis[i]) {
47832    case 'e':
47833      out[t] = v;
47834      break;
47835    case 'w':
47836      out[t] = -v;
47837      break;
47838    case 'n':
47839      out[t] = v;
47840      break;
47841    case 's':
47842      out[t] = -v;
47843      break;
47844    case 'u':
47845      if (point[t] !== undefined) {
47846        out.z = v;
47847      }
47848      break;
47849    case 'd':
47850      if (point[t] !== undefined) {
47851        out.z = -v;
47852      }
47853      break;
47854    default:
47855      //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName);
47856      return null;
47857    }
47858  }
47859  return out;
47860}
47861
47862;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/toPoint.js
47863/* harmony default export */ function toPoint(array){
47864  var out = {
47865    x: array[0],
47866    y: array[1]
47867  };
47868  if (array.length>2) {
47869    out.z = array[2];
47870  }
47871  if (array.length>3) {
47872    out.m = array[3];
47873  }
47874  return out;
47875}
47876;// CONCATENATED MODULE: ./node_modules/proj4/lib/checkSanity.js
47877/* harmony default export */ function checkSanity(point) {
47878  checkCoord(point.x);
47879  checkCoord(point.y);
47880}
47881function checkCoord(num) {
47882  if (typeof Number.isFinite === 'function') {
47883    if (Number.isFinite(num)) {
47884      return;
47885    }
47886    throw new TypeError('coordinates must be finite numbers');
47887  }
47888  if (typeof num !== 'number' || num !== num || !isFinite(num)) {
47889    throw new TypeError('coordinates must be finite numbers');
47890  }
47891}
47892
47893;// CONCATENATED MODULE: ./node_modules/proj4/lib/transform.js
47894
47895
47896
47897
47898
47899
47900
47901function checkNotWGS(source, dest) {
47902  return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');
47903}
47904
47905function transform(source, dest, point) {
47906  var wgs84;
47907  if (Array.isArray(point)) {
47908    point = toPoint(point);
47909  }
47910  checkSanity(point);
47911  // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84
47912  if (source.datum && dest.datum && checkNotWGS(source, dest)) {
47913    wgs84 = new Proj('WGS84');
47914    point = transform(source, wgs84, point);
47915    source = wgs84;
47916  }
47917  // DGR, 2010/11/12
47918  if (source.axis !== 'enu') {
47919    point = adjust_axis(source, false, point);
47920  }
47921  // Transform source points to long/lat, if they aren't already.
47922  if (source.projName === 'longlat') {
47923    point = {
47924      x: point.x * D2R,
47925      y: point.y * D2R,
47926      z: point.z || 0
47927    };
47928  } else {
47929    if (source.to_meter) {
47930      point = {
47931        x: point.x * source.to_meter,
47932        y: point.y * source.to_meter,
47933        z: point.z || 0
47934      };
47935    }
47936    point = source.inverse(point); // Convert Cartesian to longlat
47937    if (!point) {
47938      return;
47939    }
47940  }
47941  // Adjust for the prime meridian if necessary
47942  if (source.from_greenwich) {
47943    point.x += source.from_greenwich;
47944  }
47945
47946  // Convert datums if needed, and if possible.
47947  point = datum_transform(source.datum, dest.datum, point);
47948  if (!point) {
47949    return;
47950  }
47951
47952  // Adjust for the prime meridian if necessary
47953  if (dest.from_greenwich) {
47954    point = {
47955      x: point.x - dest.from_greenwich,
47956      y: point.y,
47957      z: point.z || 0
47958    };
47959  }
47960
47961  if (dest.projName === 'longlat') {
47962    // convert radians to decimal degrees
47963    point = {
47964      x: point.x * R2D,
47965      y: point.y * R2D,
47966      z: point.z || 0
47967    };
47968  } else { // else project
47969    point = dest.forward(point);
47970    if (dest.to_meter) {
47971      point = {
47972        x: point.x / dest.to_meter,
47973        y: point.y / dest.to_meter,
47974        z: point.z || 0
47975      };
47976    }
47977  }
47978
47979  // DGR, 2010/11/12
47980  if (dest.axis !== 'enu') {
47981    return adjust_axis(dest, true, point);
47982  }
47983
47984  return point;
47985}
47986
47987;// CONCATENATED MODULE: ./node_modules/proj4/lib/core.js
47988
47989
47990var wgs84 = Proj('WGS84');
47991
47992function transformer(from, to, coords) {
47993  var transformedArray, out, keys;
47994  if (Array.isArray(coords)) {
47995    transformedArray = transform(from, to, coords) || {x: NaN, y: NaN};
47996    if (coords.length > 2) {
47997      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {
47998        if (typeof transformedArray.z === 'number') {
47999          return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));
48000        } else {
48001          return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));
48002        }
48003      } else {
48004        return [transformedArray.x, transformedArray.y].concat(coords.splice(2));
48005      }
48006    } else {
48007      return [transformedArray.x, transformedArray.y];
48008    }
48009  } else {
48010    out = transform(from, to, coords);
48011    keys = Object.keys(coords);
48012    if (keys.length === 2) {
48013      return out;
48014    }
48015    keys.forEach(function (key) {
48016      if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {
48017        if (key === 'x' || key === 'y' || key === 'z') {
48018          return;
48019        }
48020      } else {
48021        if (key === 'x' || key === 'y') {
48022          return;
48023        }
48024      }
48025      out[key] = coords[key];
48026    });
48027    return out;
48028  }
48029}
48030
48031function checkProj(item) {
48032  if (item instanceof Proj) {
48033    return item;
48034  }
48035  if (item.oProj) {
48036    return item.oProj;
48037  }
48038  return Proj(item);
48039}
48040
48041function proj4(fromProj, toProj, coord) {
48042  fromProj = checkProj(fromProj);
48043  var single = false;
48044  var obj;
48045  if (typeof toProj === 'undefined') {
48046    toProj = fromProj;
48047    fromProj = wgs84;
48048    single = true;
48049  } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
48050    coord = toProj;
48051    toProj = fromProj;
48052    fromProj = wgs84;
48053    single = true;
48054  }
48055  toProj = checkProj(toProj);
48056  if (coord) {
48057    return transformer(fromProj, toProj, coord);
48058  } else {
48059    obj = {
48060      forward: function (coords) {
48061        return transformer(fromProj, toProj, coords);
48062      },
48063      inverse: function (coords) {
48064        return transformer(toProj, fromProj, coords);
48065      }
48066    };
48067    if (single) {
48068      obj.oProj = toProj;
48069    }
48070    return obj;
48071  }
48072}
48073/* harmony default export */ const core = (proj4);
48074;// CONCATENATED MODULE: ./node_modules/mgrs/mgrs.js
48075
48076
48077
48078/**
48079 * UTM zones are grouped, and assigned to one of a group of 6
48080 * sets.
48081 *
48082 * {int} @private
48083 */
48084var NUM_100K_SETS = 6;
48085
48086/**
48087 * The column letters (for easting) of the lower left value, per
48088 * set.
48089 *
48090 * {string} @private
48091 */
48092var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';
48093
48094/**
48095 * The row letters (for northing) of the lower left value, per
48096 * set.
48097 *
48098 * {string} @private
48099 */
48100var SET_ORIGIN_ROW_LETTERS = 'AFAFAF';
48101
48102var A = 65; // A
48103var I = 73; // I
48104var O = 79; // O
48105var V = 86; // V
48106var Z = 90; // Z
48107/* harmony default export */ const mgrs = ({
48108  forward: mgrs_forward,
48109  inverse: mgrs_inverse,
48110  toPoint: mgrs_toPoint
48111});
48112/**
48113 * Conversion of lat/lon to MGRS.
48114 *
48115 * @param {object} ll Object literal with lat and lon properties on a
48116 *     WGS84 ellipsoid.
48117 * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for
48118 *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.
48119 * @return {string} the MGRS string for the given location and accuracy.
48120 */
48121function mgrs_forward(ll, accuracy) {
48122  accuracy = accuracy || 5; // default accuracy 1m
48123  return encode(LLtoUTM({
48124    lat: ll[1],
48125    lon: ll[0]
48126  }), accuracy);
48127};
48128
48129/**
48130 * Conversion of MGRS to lat/lon.
48131 *
48132 * @param {string} mgrs MGRS string.
48133 * @return {array} An array with left (longitude), bottom (latitude), right
48134 *     (longitude) and top (latitude) values in WGS84, representing the
48135 *     bounding box for the provided MGRS reference.
48136 */
48137function mgrs_inverse(mgrs) {
48138  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
48139  if (bbox.lat && bbox.lon) {
48140    return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];
48141  }
48142  return [bbox.left, bbox.bottom, bbox.right, bbox.top];
48143};
48144
48145function mgrs_toPoint(mgrs) {
48146  var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
48147  if (bbox.lat && bbox.lon) {
48148    return [bbox.lon, bbox.lat];
48149  }
48150  return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];
48151};
vendor: 8,781 bytes, lines 48152-48429
48152/**
48153 * Conversion from degrees to radians.
48154 *
48155 * @private
48156 * @param {number} deg the angle in degrees.
48157 * @return {number} the angle in radians.
48158 */
48159function degToRad(deg) {
48160  return (deg * (Math.PI / 180.0));
48161}
48162
48163/**
48164 * Conversion from radians to degrees.
48165 *
48166 * @private
48167 * @param {number} rad the angle in radians.
48168 * @return {number} the angle in degrees.
48169 */
48170function radToDeg(rad) {
48171  return (180.0 * (rad / Math.PI));
48172}
48173
48174/**
48175 * Converts a set of Longitude and Latitude co-ordinates to UTM
48176 * using the WGS84 ellipsoid.
48177 *
48178 * @private
48179 * @param {object} ll Object literal with lat and lon properties
48180 *     representing the WGS84 coordinate to be converted.
48181 * @return {object} Object literal containing the UTM value with easting,
48182 *     northing, zoneNumber and zoneLetter properties, and an optional
48183 *     accuracy property in digits. Returns null if the conversion failed.
48184 */
48185function LLtoUTM(ll) {
48186  var Lat = ll.lat;
48187  var Long = ll.lon;
48188  var a = 6378137.0; //ellip.radius;
48189  var eccSquared = 0.00669438; //ellip.eccsq;
48190  var k0 = 0.9996;
48191  var LongOrigin;
48192  var eccPrimeSquared;
48193  var N, T, C, A, M;
48194  var LatRad = degToRad(Lat);
48195  var LongRad = degToRad(Long);
48196  var LongOriginRad;
48197  var ZoneNumber;
48198  // (int)
48199  ZoneNumber = Math.floor((Long + 180) / 6) + 1;
48200
48201  //Make sure the longitude 180.00 is in Zone 60
48202  if (Long === 180) {
48203    ZoneNumber = 60;
48204  }
48205
48206  // Special zone for Norway
48207  if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {
48208    ZoneNumber = 32;
48209  }
48210
48211  // Special zones for Svalbard
48212  if (Lat >= 72.0 && Lat < 84.0) {
48213    if (Long >= 0.0 && Long < 9.0) {
48214      ZoneNumber = 31;
48215    }
48216    else if (Long >= 9.0 && Long < 21.0) {
48217      ZoneNumber = 33;
48218    }
48219    else if (Long >= 21.0 && Long < 33.0) {
48220      ZoneNumber = 35;
48221    }
48222    else if (Long >= 33.0 && Long < 42.0) {
48223      ZoneNumber = 37;
48224    }
48225  }
48226
48227  LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin
48228  // in middle of
48229  // zone
48230  LongOriginRad = degToRad(LongOrigin);
48231
48232  eccPrimeSquared = (eccSquared) / (1 - eccSquared);
48233
48234  N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));
48235  T = Math.tan(LatRad) * Math.tan(LatRad);
48236  C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
48237  A = Math.cos(LatRad) * (LongRad - LongOriginRad);
48238
48239  M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));
48240
48241  var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);
48242
48243  var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));
48244  if (Lat < 0.0) {
48245    UTMNorthing += 10000000.0; //10000000 meter offset for
48246    // southern hemisphere
48247  }
48248
48249  return {
48250    northing: Math.round(UTMNorthing),
48251    easting: Math.round(UTMEasting),
48252    zoneNumber: ZoneNumber,
48253    zoneLetter: getLetterDesignator(Lat)
48254  };
48255}
48256
48257/**
48258 * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience
48259 * class where the Zone can be specified as a single string eg."60N" which
48260 * is then broken down into the ZoneNumber and ZoneLetter.
48261 *
48262 * @private
48263 * @param {object} utm An object literal with northing, easting, zoneNumber
48264 *     and zoneLetter properties. If an optional accuracy property is
48265 *     provided (in meters), a bounding box will be returned instead of
48266 *     latitude and longitude.
48267 * @return {object} An object literal containing either lat and lon values
48268 *     (if no accuracy was provided), or top, right, bottom and left values
48269 *     for the bounding box calculated according to the provided accuracy.
48270 *     Returns null if the conversion failed.
48271 */
48272function UTMtoLL(utm) {
48273
48274  var UTMNorthing = utm.northing;
48275  var UTMEasting = utm.easting;
48276  var zoneLetter = utm.zoneLetter;
48277  var zoneNumber = utm.zoneNumber;
48278  // check the ZoneNummber is valid
48279  if (zoneNumber < 0 || zoneNumber > 60) {
48280    return null;
48281  }
48282
48283  var k0 = 0.9996;
48284  var a = 6378137.0; //ellip.radius;
48285  var eccSquared = 0.00669438; //ellip.eccsq;
48286  var eccPrimeSquared;
48287  var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));
48288  var N1, T1, C1, R1, D, M;
48289  var LongOrigin;
48290  var mu, phi1Rad;
48291
48292  // remove 500,000 meter offset for longitude
48293  var x = UTMEasting - 500000.0;
48294  var y = UTMNorthing;
48295
48296  // We must know somehow if we are in the Northern or Southern
48297  // hemisphere, this is the only time we use the letter So even
48298  // if the Zone letter isn't exactly correct it should indicate
48299  // the hemisphere correctly
48300  if (zoneLetter < 'N') {
48301    y -= 10000000.0; // remove 10,000,000 meter offset used
48302    // for southern hemisphere
48303  }
48304
48305  // There are 60 zones with zone 1 being at West -180 to -174
48306  LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin
48307  // in middle of
48308  // zone
48309
48310  eccPrimeSquared = (eccSquared) / (1 - eccSquared);
48311
48312  M = y / k0;
48313  mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));
48314
48315  phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);
48316  // double phi1 = ProjMath.radToDeg(phi1Rad);
48317
48318  N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));
48319  T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);
48320  C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);
48321  R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);
48322  D = x / (N1 * k0);
48323
48324  var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);
48325  lat = radToDeg(lat);
48326
48327  var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);
48328  lon = LongOrigin + radToDeg(lon);
48329
48330  var result;
48331  if (utm.accuracy) {
48332    var topRight = UTMtoLL({
48333      northing: utm.northing + utm.accuracy,
48334      easting: utm.easting + utm.accuracy,
48335      zoneLetter: utm.zoneLetter,
48336      zoneNumber: utm.zoneNumber
48337    });
48338    result = {
48339      top: topRight.lat,
48340      right: topRight.lon,
48341      bottom: lat,
48342      left: lon
48343    };
48344  }
48345  else {
48346    result = {
48347      lat: lat,
48348      lon: lon
48349    };
48350  }
48351  return result;
48352}
48353
48354/**
48355 * Calculates the MGRS letter designator for the given latitude.
48356 *
48357 * @private
48358 * @param {number} lat The latitude in WGS84 to get the letter designator
48359 *     for.
48360 * @return {char} The letter designator.
48361 */
48362function getLetterDesignator(lat) {
48363  //This is here as an error flag to show that the Latitude is
48364  //outside MGRS limits
48365  var LetterDesignator = 'Z';
48366
48367  if ((84 >= lat) && (lat >= 72)) {
48368    LetterDesignator = 'X';
48369  }
48370  else if ((72 > lat) && (lat >= 64)) {
48371    LetterDesignator = 'W';
48372  }
48373  else if ((64 > lat) && (lat >= 56)) {
48374    LetterDesignator = 'V';
48375  }
48376  else if ((56 > lat) && (lat >= 48)) {
48377    LetterDesignator = 'U';
48378  }
48379  else if ((48 > lat) && (lat >= 40)) {
48380    LetterDesignator = 'T';
48381  }
48382  else if ((40 > lat) && (lat >= 32)) {
48383    LetterDesignator = 'S';
48384  }
48385  else if ((32 > lat) && (lat >= 24)) {
48386    LetterDesignator = 'R';
48387  }
48388  else if ((24 > lat) && (lat >= 16)) {
48389    LetterDesignator = 'Q';
48390  }
48391  else if ((16 > lat) && (lat >= 8)) {
48392    LetterDesignator = 'P';
48393  }
48394  else if ((8 > lat) && (lat >= 0)) {
48395    LetterDesignator = 'N';
48396  }
48397  else if ((0 > lat) && (lat >= -8)) {
48398    LetterDesignator = 'M';
48399  }
48400  else if ((-8 > lat) && (lat >= -16)) {
48401    LetterDesignator = 'L';
48402  }
48403  else if ((-16 > lat) && (lat >= -24)) {
48404    LetterDesignator = 'K';
48405  }
48406  else if ((-24 > lat) && (lat >= -32)) {
48407    LetterDesignator = 'J';
48408  }
48409  else if ((-32 > lat) && (lat >= -40)) {
48410    LetterDesignator = 'H';
48411  }
48412  else if ((-40 > lat) && (lat >= -48)) {
48413    LetterDesignator = 'G';
48414  }
48415  else if ((-48 > lat) && (lat >= -56)) {
48416    LetterDesignator = 'F';
48417  }
48418  else if ((-56 > lat) && (lat >= -64)) {
48419    LetterDesignator = 'E';
48420  }
48421  else if ((-64 > lat) && (lat >= -72)) {
48422    LetterDesignator = 'D';
48423  }
48424  else if ((-72 > lat) && (lat >= -80)) {
48425    LetterDesignator = 'C';
48426  }
48427  return LetterDesignator;
48428}
48429
vendor: 5,094 bytes, lines 48430-48609
48430/**
48431 * Encodes a UTM location as MGRS string.
48432 *
48433 * @private
48434 * @param {object} utm An object literal with easting, northing,
48435 *     zoneLetter, zoneNumber
48436 * @param {number} accuracy Accuracy in digits (1-5).
48437 * @return {string} MGRS string for the given UTM location.
48438 */
48439function encode(utm, accuracy) {
48440  // prepend with leading zeroes
48441  var seasting = "00000" + utm.easting,
48442    snorthing = "00000" + utm.northing;
48443
48444  return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);
48445}
48446
48447/**
48448 * Get the two letter 100k designator for a given UTM easting,
48449 * northing and zone number value.
48450 *
48451 * @private
48452 * @param {number} easting
48453 * @param {number} northing
48454 * @param {number} zoneNumber
48455 * @return the two letter 100k designator for the given UTM location.
48456 */
48457function get100kID(easting, northing, zoneNumber) {
48458  var setParm = get100kSetForZone(zoneNumber);
48459  var setColumn = Math.floor(easting / 100000);
48460  var setRow = Math.floor(northing / 100000) % 20;
48461  return getLetter100kID(setColumn, setRow, setParm);
48462}
48463
48464/**
48465 * Given a UTM zone number, figure out the MGRS 100K set it is in.
48466 *
48467 * @private
48468 * @param {number} i An UTM zone number.
48469 * @return {number} the 100k set the UTM zone is in.
48470 */
48471function get100kSetForZone(i) {
48472  var setParm = i % NUM_100K_SETS;
48473  if (setParm === 0) {
48474    setParm = NUM_100K_SETS;
48475  }
48476
48477  return setParm;
48478}
48479
48480/**
48481 * Get the two-letter MGRS 100k designator given information
48482 * translated from the UTM northing, easting and zone number.
48483 *
48484 * @private
48485 * @param {number} column the column index as it relates to the MGRS
48486 *        100k set spreadsheet, created from the UTM easting.
48487 *        Values are 1-8.
48488 * @param {number} row the row index as it relates to the MGRS 100k set
48489 *        spreadsheet, created from the UTM northing value. Values
48490 *        are from 0-19.
48491 * @param {number} parm the set block, as it relates to the MGRS 100k set
48492 *        spreadsheet, created from the UTM zone. Values are from
48493 *        1-60.
48494 * @return two letter MGRS 100k code.
48495 */
48496function getLetter100kID(column, row, parm) {
48497  // colOrigin and rowOrigin are the letters at the origin of the set
48498  var index = parm - 1;
48499  var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);
48500  var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);
48501
48502  // colInt and rowInt are the letters to build to return
48503  var colInt = colOrigin + column - 1;
48504  var rowInt = rowOrigin + row;
48505  var rollover = false;
48506
48507  if (colInt > Z) {
48508    colInt = colInt - Z + A - 1;
48509    rollover = true;
48510  }
48511
48512  if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {
48513    colInt++;
48514  }
48515
48516  if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {
48517    colInt++;
48518
48519    if (colInt === I) {
48520      colInt++;
48521    }
48522  }
48523
48524  if (colInt > Z) {
48525    colInt = colInt - Z + A - 1;
48526  }
48527
48528  if (rowInt > V) {
48529    rowInt = rowInt - V + A - 1;
48530    rollover = true;
48531  }
48532  else {
48533    rollover = false;
48534  }
48535
48536  if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {
48537    rowInt++;
48538  }
48539
48540  if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {
48541    rowInt++;
48542
48543    if (rowInt === I) {
48544      rowInt++;
48545    }
48546  }
48547
48548  if (rowInt > V) {
48549    rowInt = rowInt - V + A - 1;
48550  }
48551
48552  var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);
48553  return twoLetter;
48554}
48555
48556/**
48557 * Decode the UTM parameters from a MGRS string.
48558 *
48559 * @private
48560 * @param {string} mgrsString an UPPERCASE coordinate string is expected.
48561 * @return {object} An object literal with easting, northing, zoneLetter,
48562 *     zoneNumber and accuracy (in meters) properties.
48563 */
48564function decode(mgrsString) {
48565
48566  if (mgrsString && mgrsString.length === 0) {
48567    throw ("MGRSPoint coverting from nothing");
48568  }
48569
48570  var length = mgrsString.length;
48571
48572  var hunK = null;
48573  var sb = "";
48574  var testChar;
48575  var i = 0;
48576
48577  // get Zone number
48578  while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {
48579    if (i >= 2) {
48580      throw ("MGRSPoint bad conversion from: " + mgrsString);
48581    }
48582    sb += testChar;
48583    i++;
48584  }
48585
48586  var zoneNumber = parseInt(sb, 10);
48587
48588  if (i === 0 || i + 3 > length) {
48589    // A good MGRS string has to be 4-5 digits long,
48590    // ##AAA/#AAA at least.
48591    throw ("MGRSPoint bad conversion from: " + mgrsString);
48592  }
48593
48594  var zoneLetter = mgrsString.charAt(i++);
48595
48596  // Should we check the zone letter here? Why not.
48597  if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {
48598    throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString);
48599  }
48600
48601  hunK = mgrsString.substring(i, i += 2);
48602
48603  var set = get100kSetForZone(zoneNumber);
48604
48605  var east100k = getEastingFromChar(hunK.charAt(0), set);
48606  var north100k = getNorthingFromChar(hunK.charAt(1), set);
48607
48608  // We have a bug where the northing may be 2000000 too low.
48609  // How
vendor: 1,787 bytes, lines 48610-48663
48610  // do we know when to roll over?
48611
48612  while (north100k < getMinNorthing(zoneLetter)) {
48613    north100k += 2000000;
48614  }
48615
48616  // calculate the char index for easting/northing separator
48617  var remainder = length - i;
48618
48619  if (remainder % 2 !== 0) {
48620    throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString);
48621  }
48622
48623  var sep = remainder / 2;
48624
48625  var sepEasting = 0.0;
48626  var sepNorthing = 0.0;
48627  var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;
48628  if (sep > 0) {
48629    accuracyBonus = 100000.0 / Math.pow(10, sep);
48630    sepEastingString = mgrsString.substring(i, i + sep);
48631    sepEasting = parseFloat(sepEastingString) * accuracyBonus;
48632    sepNorthingString = mgrsString.substring(i + sep);
48633    sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;
48634  }
48635
48636  easting = sepEasting + east100k;
48637  northing = sepNorthing + north100k;
48638
48639  return {
48640    easting: easting,
48641    northing: northing,
48642    zoneLetter: zoneLetter,
48643    zoneNumber: zoneNumber,
48644    accuracy: accuracyBonus
48645  };
48646}
48647
48648/**
48649 * Given the first letter from a two-letter MGRS 100k zone, and given the
48650 * MGRS table set for the zone number, figure out the easting value that
48651 * should be added to the other, secondary easting value.
48652 *
48653 * @private
48654 * @param {char} e The first letter from a two-letter MGRS 100´k zone.
48655 * @param {number} set The MGRS table set for the zone number.
48656 * @return {number} The easting value for the given letter and set.
48657 */
48658function getEastingFromChar(e, set) {
48659  // colOrigin is the letter at the origin of the set for the
48660  // column
48661  var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);
48662  var eastingValue = 100000.0;
48663  var rewindMarker = false;
vendor: 3,322 bytes, lines 48664-48811
48664
48665  while (curCol !== e.charCodeAt(0)) {
48666    curCol++;
48667    if (curCol === I) {
48668      curCol++;
48669    }
48670    if (curCol === O) {
48671      curCol++;
48672    }
48673    if (curCol > Z) {
48674      if (rewindMarker) {
48675        throw ("Bad character: " + e);
48676      }
48677      curCol = A;
48678      rewindMarker = true;
48679    }
48680    eastingValue += 100000.0;
48681  }
48682
48683  return eastingValue;
48684}
48685
48686/**
48687 * Given the second letter from a two-letter MGRS 100k zone, and given the
48688 * MGRS table set for the zone number, figure out the northing value that
48689 * should be added to the other, secondary northing value. You have to
48690 * remember that Northings are determined from the equator, and the vertical
48691 * cycle of letters mean a 2000000 additional northing meters. This happens
48692 * approx. every 18 degrees of latitude. This method does *NOT* count any
48693 * additional northings. You have to figure out how many 2000000 meters need
48694 * to be added for the zone letter of the MGRS coordinate.
48695 *
48696 * @private
48697 * @param {char} n Second letter of the MGRS 100k zone
48698 * @param {number} set The MGRS table set number, which is dependent on the
48699 *     UTM zone number.
48700 * @return {number} The northing value for the given letter and set.
48701 */
48702function getNorthingFromChar(n, set) {
48703
48704  if (n > 'V') {
48705    throw ("MGRSPoint given invalid Northing " + n);
48706  }
48707
48708  // rowOrigin is the letter at the origin of the set for the
48709  // column
48710  var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);
48711  var northingValue = 0.0;
48712  var rewindMarker = false;
48713
48714  while (curRow !== n.charCodeAt(0)) {
48715    curRow++;
48716    if (curRow === I) {
48717      curRow++;
48718    }
48719    if (curRow === O) {
48720      curRow++;
48721    }
48722    // fixing a bug making whole application hang in this loop
48723    // when 'n' is a wrong character
48724    if (curRow > V) {
48725      if (rewindMarker) { // making sure that this loop ends
48726        throw ("Bad character: " + n);
48727      }
48728      curRow = A;
48729      rewindMarker = true;
48730    }
48731    northingValue += 100000.0;
48732  }
48733
48734  return northingValue;
48735}
48736
48737/**
48738 * The function getMinNorthing returns the minimum northing value of a MGRS
48739 * zone.
48740 *
48741 * Ported from Geotrans' c Lattitude_Band_Value structure table.
48742 *
48743 * @private
48744 * @param {char} zoneLetter The MGRS zone to get the min northing for.
48745 * @return {number}
48746 */
48747function getMinNorthing(zoneLetter) {
48748  var northing;
48749  switch (zoneLetter) {
48750  case 'C':
48751    northing = 1100000.0;
48752    break;
48753  case 'D':
48754    northing = 2000000.0;
48755    break;
48756  case 'E':
48757    northing = 2800000.0;
48758    break;
48759  case 'F':
48760    northing = 3700000.0;
48761    break;
48762  case 'G':
48763    northing = 4600000.0;
48764    break;
48765  case 'H':
48766    northing = 5500000.0;
48767    break;
48768  case 'J':
48769    northing = 6400000.0;
48770    break;
48771  case 'K':
48772    northing = 7300000.0;
48773    break;
48774  case 'L':
48775    northing = 8200000.0;
48776    break;
48777  case 'M':
48778    northing = 9100000.0;
48779    break;
48780  case 'N':
48781    northing = 0.0;
48782    break;
48783  case 'P':
48784    northing = 800000.0;
48785    break;
48786  case 'Q':
48787    northing = 1700000.0;
48788    break;
48789  case 'R':
48790    northing = 2600000.0;
48791    break;
48792  case 'S':
48793    northing = 3500000.0;
48794    break;
48795  case 'T':
48796    northing = 4400000.0;
48797    break;
48798  case 'U':
48799    northing = 5300000.0;
48800    break;
48801  case 'V':
48802    northing = 6200000.0;
48803    break;
48804  case 'W':
48805    northing = 7000000.0;
48806    break;
48807  case 'X':
48808    northing = 7900000.0;
48809    break;
48810  default:
48811    northing = -1
vendor: 7,091 bytes, lines 48811-49086
48811.0;
48812  }
48813  if (northing >= 0.0) {
48814    return northing;
48815  }
48816  else {
48817    throw ("Invalid zone letter: " + zoneLetter);
48818  }
48819
48820}
48821
48822;// CONCATENATED MODULE: ./node_modules/proj4/lib/Point.js
48823
48824
48825function Point(x, y, z) {
48826  if (!(this instanceof Point)) {
48827    return new Point(x, y, z);
48828  }
48829  if (Array.isArray(x)) {
48830    this.x = x[0];
48831    this.y = x[1];
48832    this.z = x[2] || 0.0;
48833  } else if(typeof x === 'object') {
48834    this.x = x.x;
48835    this.y = x.y;
48836    this.z = x.z || 0.0;
48837  } else if (typeof x === 'string' && typeof y === 'undefined') {
48838    var coords = x.split(',');
48839    this.x = parseFloat(coords[0], 10);
48840    this.y = parseFloat(coords[1], 10);
48841    this.z = parseFloat(coords[2], 10) || 0.0;
48842  } else {
48843    this.x = x;
48844    this.y = y;
48845    this.z = z || 0.0;
48846  }
48847  console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');
48848}
48849
48850Point.fromMGRS = function(mgrsStr) {
48851  return new Point(mgrs_toPoint(mgrsStr));
48852};
48853Point.prototype.toMGRS = function(accuracy) {
48854  return mgrs_forward([this.x, this.y], accuracy);
48855};
48856/* harmony default export */ const lib_Point = (Point);
48857
48858;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/pj_enfn.js
48859var C00 = 1;
48860var C02 = 0.25;
48861var C04 = 0.046875;
48862var C06 = 0.01953125;
48863var C08 = 0.01068115234375;
48864var C22 = 0.75;
48865var C44 = 0.46875;
48866var C46 = 0.01302083333333333333;
48867var C48 = 0.00712076822916666666;
48868var C66 = 0.36458333333333333333;
48869var C68 = 0.00569661458333333333;
48870var C88 = 0.3076171875;
48871
48872/* harmony default export */ function pj_enfn(es) {
48873  var en = [];
48874  en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
48875  en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
48876  var t = es * es;
48877  en[2] = t * (C44 - es * (C46 + es * C48));
48878  t *= es;
48879  en[3] = t * (C66 - es * C68);
48880  en[4] = t * es * C88;
48881  return en;
48882}
48883;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/pj_mlfn.js
48884/* harmony default export */ function pj_mlfn(phi, sphi, cphi, en) {
48885  cphi *= sphi;
48886  sphi *= sphi;
48887  return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));
48888}
48889;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/pj_inv_mlfn.js
48890
48891
48892
48893var MAX_ITER = 20;
48894
48895/* harmony default export */ function pj_inv_mlfn(arg, es, en) {
48896  var k = 1 / (1 - es);
48897  var phi = arg;
48898  for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */
48899    var s = Math.sin(phi);
48900    var t = 1 - es * s * s;
48901    //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;
48902    //phi -= t * (t * Math.sqrt(t)) * k;
48903    t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;
48904    phi -= t;
48905    if (Math.abs(t) < EPSLN) {
48906      return phi;
48907    }
48908  }
48909  //..reportError("cass:pj_inv_mlfn: Convergence error");
48910  return phi;
48911}
48912
48913;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/tmerc.js
48914// Heavily based on this tmerc projection implementation
48915// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js
48916
48917
48918
48919
48920
48921
48922
48923
48924
48925function tmerc_init() {
48926  this.x0 = this.x0 !== undefined ? this.x0 : 0;
48927  this.y0 = this.y0 !== undefined ? this.y0 : 0;
48928  this.long0 = this.long0 !== undefined ? this.long0 : 0;
48929  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
48930
48931  if (this.es) {
48932    this.en = pj_enfn(this.es);
48933    this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);
48934  }
48935}
48936
48937/**
48938    Transverse Mercator Forward  - long/lat to x/y
48939    long/lat in radians
48940  */
48941function tmerc_forward(p) {
48942  var lon = p.x;
48943  var lat = p.y;
48944
48945  var delta_lon = adjust_lon(lon - this.long0);
48946  var con;
48947  var x, y;
48948  var sin_phi = Math.sin(lat);
48949  var cos_phi = Math.cos(lat);
48950
48951  if (!this.es) {
48952    var b = cos_phi * Math.sin(delta_lon);
48953
48954    if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {
48955      return (93);
48956    }
48957    else {
48958      x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;
48959      y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));
48960      b = Math.abs(y);
48961
48962      if (b >= 1) {
48963        if ((b - 1) > EPSLN) {
48964          return (93);
48965        }
48966        else {
48967          y = 0;
48968        }
48969      }
48970      else {
48971        y = Math.acos(y);
48972      }
48973
48974      if (lat < 0) {
48975        y = -y;
48976      }
48977
48978      y = this.a * this.k0 * (y - this.lat0) + this.y0;
48979    }
48980  }
48981  else {
48982    var al = cos_phi * delta_lon;
48983    var als = Math.pow(al, 2);
48984    var c = this.ep2 * Math.pow(cos_phi, 2);
48985    var cs = Math.pow(c, 2);
48986    var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;
48987    var t = Math.pow(tq, 2);
48988    var ts = Math.pow(t, 2);
48989    con = 1 - this.es * Math.pow(sin_phi, 2);
48990    al = al / Math.sqrt(con);
48991    var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);
48992
48993    x = this.a * (this.k0 * al * (1 +
48994      als / 6 * (1 - t + c +
48995      als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +
48996      als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +
48997      this.x0;
48998
48999    y = this.a * (this.k0 * (ml - this.ml0 +
49000      sin_phi * delta_lon * al / 2 * (1 +
49001      als / 12 * (5 - t + 9 * c + 4 * cs +
49002      als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +
49003      als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +
49004      this.y0;
49005  }
49006
49007  p.x = x;
49008  p.y = y;
49009
49010  return p;
49011}
49012
49013/**
49014    Transverse Mercator Inverse  -  x/y to long/lat
49015  */
49016function tmerc_inverse(p) {
49017  var con, phi;
49018  var lat, lon;
49019  var x = (p.x - this.x0) * (1 / this.a);
49020  var y = (p.y - this.y0) * (1 / this.a);
49021
49022  if (!this.es) {
49023    var f = Math.exp(x / this.k0);
49024    var g = 0.5 * (f - 1 / f);
49025    var temp = this.lat0 + y / this.k0;
49026    var h = Math.cos(temp);
49027    con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));
49028    lat = Math.asin(con);
49029
49030    if (y < 0) {
49031      lat = -lat;
49032    }
49033
49034    if ((g === 0) && (h === 0)) {
49035      lon = 0;
49036    }
49037    else {
49038      lon = adjust_lon(Math.atan2(g, h) + this.long0);
49039    }
49040  }
49041  else { // ellipsoidal form
49042    con = this.ml0 + y / this.k0;
49043    phi = pj_inv_mlfn(con, this.es, this.en);
49044
49045    if (Math.abs(phi) < HALF_PI) {
49046      var sin_phi = Math.sin(phi);
49047      var cos_phi = Math.cos(phi);
49048      var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;
49049      var c = this.ep2 * Math.pow(cos_phi, 2);
49050      var cs = Math.pow(c, 2);
49051      var t = Math.pow(tan_phi, 2);
49052      var ts = Math.pow(t, 2);
49053      con = 1 - this.es * Math.pow(sin_phi, 2);
49054      var d = x * Math.sqrt(con) / this.k0;
49055      var ds = Math.pow(d, 2);
49056      con = con * tan_phi;
49057
49058      lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -
49059        ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -
49060        ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -
49061        ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));
49062
49063      lon = adjust_lon(this.long0 + (d * (1 -
49064        ds / 6 * (1 + 2 * t + c -
49065        ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -
49066        ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));
49067    }
49068    else {
49069      lat = HALF_PI * sign(y);
49070      lon = 0;
49071    }
49072  }
49073
49074  p.x = lon;
49075  p.y = lat;
49076
49077  return p;
49078}
49079
49080var tmerc_names = ["Fast_Transverse_Mercator", "Fast Transverse Mercator"];
49081/* harmony default export */ const tmerc = ({
49082  init: tmerc_init,
49083  forward: tmerc_forward,
49084  inverse: tmerc_inverse,
49085  names: tmerc_names
49086}
vendor: 5,690 bytes, lines 49086-49282
49086);
49087
49088;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/sinh.js
49089/* harmony default export */ function sinh(x) {
49090  var r = Math.exp(x);
49091  r = (r - 1 / r) / 2;
49092  return r;
49093}
49094;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/hypot.js
49095/* harmony default export */ function hypot(x, y) {
49096  x = Math.abs(x);
49097  y = Math.abs(y);
49098  var a = Math.max(x, y);
49099  var b = Math.min(x, y) / (a ? a : 1);
49100
49101  return a * Math.sqrt(1 + Math.pow(b, 2));
49102}
49103
49104;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/log1py.js
49105/* harmony default export */ function log1py(x) {
49106  var y = 1 + x;
49107  var z = y - 1;
49108
49109  return z === 0 ? x : x * Math.log(y) / z;
49110}
49111
49112;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/asinhy.js
49113
49114
49115
49116/* harmony default export */ function asinhy(x) {
49117  var y = Math.abs(x);
49118  y = log1py(y * (1 + y / (hypot(1, y) + 1)));
49119
49120  return x < 0 ? -y : y;
49121}
49122
49123;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/gatg.js
49124/* harmony default export */ function gatg(pp, B) {
49125  var cos_2B = 2 * Math.cos(2 * B);
49126  var i = pp.length - 1;
49127  var h1 = pp[i];
49128  var h2 = 0;
49129  var h;
49130
49131  while (--i >= 0) {
49132    h = -h2 + cos_2B * h1 + pp[i];
49133    h2 = h1;
49134    h1 = h;
49135  }
49136
49137  return (B + h * Math.sin(2 * B));
49138}
49139
49140;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/clens.js
49141/* harmony default export */ function clens(pp, arg_r) {
49142  var r = 2 * Math.cos(arg_r);
49143  var i = pp.length - 1;
49144  var hr1 = pp[i];
49145  var hr2 = 0;
49146  var hr;
49147
49148  while (--i >= 0) {
49149    hr = -hr2 + r * hr1 + pp[i];
49150    hr2 = hr1;
49151    hr1 = hr;
49152  }
49153
49154  return Math.sin(arg_r) * hr;
49155}
49156
49157;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/cosh.js
49158/* harmony default export */ function cosh(x) {
49159  var r = Math.exp(x);
49160  r = (r + 1 / r) / 2;
49161  return r;
49162}
49163;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/clens_cmplx.js
49164
49165
49166
49167/* harmony default export */ function clens_cmplx(pp, arg_r, arg_i) {
49168  var sin_arg_r = Math.sin(arg_r);
49169  var cos_arg_r = Math.cos(arg_r);
49170  var sinh_arg_i = sinh(arg_i);
49171  var cosh_arg_i = cosh(arg_i);
49172  var r = 2 * cos_arg_r * cosh_arg_i;
49173  var i = -2 * sin_arg_r * sinh_arg_i;
49174  var j = pp.length - 1;
49175  var hr = pp[j];
49176  var hi1 = 0;
49177  var hr1 = 0;
49178  var hi = 0;
49179  var hr2;
49180  var hi2;
49181
49182  while (--j >= 0) {
49183    hr2 = hr1;
49184    hi2 = hi1;
49185    hr1 = hr;
49186    hi1 = hi;
49187    hr = -hr2 + r * hr1 - i * hi1 + pp[j];
49188    hi = -hi2 + i * hr1 + r * hi1;
49189  }
49190
49191  r = sin_arg_r * cosh_arg_i;
49192  i = cos_arg_r * sinh_arg_i;
49193
49194  return [r * hr - i * hi, r * hi + i * hr];
49195}
49196
49197;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/etmerc.js
49198// Heavily based on this etmerc projection implementation
49199// https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js
49200
49201
49202
49203
49204
49205
49206
49207
49208
49209
49210function etmerc_init() {
49211  if (!this.approx && (isNaN(this.es) || this.es <= 0)) {
49212    throw new Error('Incorrect elliptical usage. Try using the +approx option in the proj string, or PROJECTION["Fast_Transverse_Mercator"] in the WKT.');
49213  }
49214  if (this.approx) {
49215    // When '+approx' is set, use tmerc instead
49216    tmerc.init.apply(this);
49217    this.forward = tmerc.forward;
49218    this.inverse = tmerc.inverse;
49219  }
49220
49221  this.x0 = this.x0 !== undefined ? this.x0 : 0;
49222  this.y0 = this.y0 !== undefined ? this.y0 : 0;
49223  this.long0 = this.long0 !== undefined ? this.long0 : 0;
49224  this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
49225
49226  this.cgb = [];
49227  this.cbg = [];
49228  this.utg = [];
49229  this.gtu = [];
49230
49231  var f = this.es / (1 + Math.sqrt(1 - this.es));
49232  var n = f / (2 - f);
49233  var np = n;
49234
49235  this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));
49236  this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));
49237
49238  np = np * n;
49239  this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));
49240  this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));
49241
49242  np = np * n;
49243  this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));
49244  this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));
49245
49246  np = np * n;
49247  this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));
49248  this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));
49249
49250  np = np * n;
49251  this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));
49252  this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));
49253
49254  np = np * n;
49255  this.cgb[5] = np * (601676 / 22275);
49256  this.cbg[5] = np * (444337 / 155925);
49257
49258  np = Math.pow(n, 2);
49259  this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));
49260
49261  this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));
49262  this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));
49263
49264  this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));
49265  this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));
49266
49267  np = np * n;
49268  this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));
49269  this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));
49270
49271  np = np * n;
49272  this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));
49273  this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));
49274
49275  np = np * n;
49276  this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));
49277  this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));
49278
49279  np = np * n;
49280  this.utg[5] = np * (-20648693 / 638668800);
49281  this.gtu[5] = np * (212378941 / 319334400);
49282
vendor: 13,266 bytes, lines 49283-49756
49283  var Z = gatg(this.cbg, this.lat0);
49284  this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));
49285}
49286
49287function etmerc_forward(p) {
49288  var Ce = adjust_lon(p.x - this.long0);
49289  var Cn = p.y;
49290
49291  Cn = gatg(this.cbg, Cn);
49292  var sin_Cn = Math.sin(Cn);
49293  var cos_Cn = Math.cos(Cn);
49294  var sin_Ce = Math.sin(Ce);
49295  var cos_Ce = Math.cos(Ce);
49296
49297  Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);
49298  Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));
49299  Ce = asinhy(Math.tan(Ce));
49300
49301  var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);
49302
49303  Cn = Cn + tmp[0];
49304  Ce = Ce + tmp[1];
49305
49306  var x;
49307  var y;
49308
49309  if (Math.abs(Ce) <= 2.623395162778) {
49310    x = this.a * (this.Qn * Ce) + this.x0;
49311    y = this.a * (this.Qn * Cn + this.Zb) + this.y0;
49312  }
49313  else {
49314    x = Infinity;
49315    y = Infinity;
49316  }
49317
49318  p.x = x;
49319  p.y = y;
49320
49321  return p;
49322}
49323
49324function etmerc_inverse(p) {
49325  var Ce = (p.x - this.x0) * (1 / this.a);
49326  var Cn = (p.y - this.y0) * (1 / this.a);
49327
49328  Cn = (Cn - this.Zb) / this.Qn;
49329  Ce = Ce / this.Qn;
49330
49331  var lon;
49332  var lat;
49333
49334  if (Math.abs(Ce) <= 2.623395162778) {
49335    var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);
49336
49337    Cn = Cn + tmp[0];
49338    Ce = Ce + tmp[1];
49339    Ce = Math.atan(sinh(Ce));
49340
49341    var sin_Cn = Math.sin(Cn);
49342    var cos_Cn = Math.cos(Cn);
49343    var sin_Ce = Math.sin(Ce);
49344    var cos_Ce = Math.cos(Ce);
49345
49346    Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));
49347    Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);
49348
49349    lon = adjust_lon(Ce + this.long0);
49350    lat = gatg(this.cgb, Cn);
49351  }
49352  else {
49353    lon = Infinity;
49354    lat = Infinity;
49355  }
49356
49357  p.x = lon;
49358  p.y = lat;
49359
49360  return p;
49361}
49362
49363var etmerc_names = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc", "Transverse_Mercator", "Transverse Mercator", "tmerc"];
49364/* harmony default export */ const etmerc = ({
49365  init: etmerc_init,
49366  forward: etmerc_forward,
49367  inverse: etmerc_inverse,
49368  names: etmerc_names
49369});
49370
49371;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/adjust_zone.js
49372
49373
49374/* harmony default export */ function adjust_zone(zone, lon) {
49375  if (zone === undefined) {
49376    zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;
49377
49378    if (zone < 0) {
49379      return 0;
49380    } else if (zone > 60) {
49381      return 60;
49382    }
49383  }
49384  return zone;
49385}
49386
49387;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/utm.js
49388
49389
49390var dependsOn = 'etmerc';
49391
49392
49393
49394function utm_init() {
49395  var zone = adjust_zone(this.zone, this.long0);
49396  if (zone === undefined) {
49397    throw new Error('unknown utm zone');
49398  }
49399  this.lat0 = 0;
49400  this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;
49401  this.x0 = 500000;
49402  this.y0 = this.utmSouth ? 10000000 : 0;
49403  this.k0 = 0.9996;
49404
49405  etmerc.init.apply(this);
49406  this.forward = etmerc.forward;
49407  this.inverse = etmerc.inverse;
49408}
49409
49410var utm_names = ["Universal Transverse Mercator System", "utm"];
49411/* harmony default export */ const utm = ({
49412  init: utm_init,
49413  names: utm_names,
49414  dependsOn: dependsOn
49415});
49416
49417;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/srat.js
49418/* harmony default export */ function srat(esinp, exp) {
49419  return (Math.pow((1 - esinp) / (1 + esinp), exp));
49420}
49421;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/gauss.js
49422
49423var gauss_MAX_ITER = 20;
49424
49425
49426function gauss_init() {
49427  var sphi = Math.sin(this.lat0);
49428  var cphi = Math.cos(this.lat0);
49429  cphi *= cphi;
49430  this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);
49431  this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));
49432  this.phic0 = Math.asin(sphi / this.C);
49433  this.ratexp = 0.5 * this.C * this.e;
49434  this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));
49435}
49436
49437function gauss_forward(p) {
49438  var lon = p.x;
49439  var lat = p.y;
49440
49441  p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;
49442  p.x = this.C * lon;
49443  return p;
49444}
49445
49446function gauss_inverse(p) {
49447  var DEL_TOL = 1e-14;
49448  var lon = p.x / this.C;
49449  var lat = p.y;
49450  var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);
49451  for (var i = gauss_MAX_ITER; i > 0; --i) {
49452    lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;
49453    if (Math.abs(lat - p.y) < DEL_TOL) {
49454      break;
49455    }
49456    p.y = lat;
49457  }
49458  /* convergence failed */
49459  if (!i) {
49460    return null;
49461  }
49462  p.x = lon;
49463  p.y = lat;
49464  return p;
49465}
49466
49467var gauss_names = ["gauss"];
49468/* harmony default export */ const gauss = ({
49469  init: gauss_init,
49470  forward: gauss_forward,
49471  inverse: gauss_inverse,
49472  names: gauss_names
49473});
49474
49475;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/sterea.js
49476
49477
49478
49479function sterea_init() {
49480  gauss.init.apply(this);
49481  if (!this.rc) {
49482    return;
49483  }
49484  this.sinc0 = Math.sin(this.phic0);
49485  this.cosc0 = Math.cos(this.phic0);
49486  this.R2 = 2 * this.rc;
49487  if (!this.title) {
49488    this.title = "Oblique Stereographic Alternative";
49489  }
49490}
49491
49492function sterea_forward(p) {
49493  var sinc, cosc, cosl, k;
49494  p.x = adjust_lon(p.x - this.long0);
49495  gauss.forward.apply(this, [p]);
49496  sinc = Math.sin(p.y);
49497  cosc = Math.cos(p.y);
49498  cosl = Math.cos(p.x);
49499  k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);
49500  p.x = k * cosc * Math.sin(p.x);
49501  p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);
49502  p.x = this.a * p.x + this.x0;
49503  p.y = this.a * p.y + this.y0;
49504  return p;
49505}
49506
49507function sterea_inverse(p) {
49508  var sinc, cosc, lon, lat, rho;
49509  p.x = (p.x - this.x0) / this.a;
49510  p.y = (p.y - this.y0) / this.a;
49511
49512  p.x /= this.k0;
49513  p.y /= this.k0;
49514  if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {
49515    var c = 2 * Math.atan2(rho, this.R2);
49516    sinc = Math.sin(c);
49517    cosc = Math.cos(c);
49518    lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);
49519    lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);
49520  }
49521  else {
49522    lat = this.phic0;
49523    lon = 0;
49524  }
49525
49526  p.x = lon;
49527  p.y = lat;
49528  gauss.inverse.apply(this, [p]);
49529  p.x = adjust_lon(p.x + this.long0);
49530  return p;
49531}
49532
49533var sterea_names = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"];
49534/* harmony default export */ const sterea = ({
49535  init: sterea_init,
49536  forward: sterea_forward,
49537  inverse: sterea_inverse,
49538  names: sterea_names
49539});
49540
49541;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/stere.js
49542
49543
49544
49545
49546
49547
49548
49549
49550function ssfn_(phit, sinphi, eccen) {
49551  sinphi *= eccen;
49552  return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));
49553}
49554
49555function stere_init() {
49556  this.coslat0 = Math.cos(this.lat0);
49557  this.sinlat0 = Math.sin(this.lat0);
49558  if (this.sphere) {
49559    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
49560      this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));
49561    }
49562  }
49563  else {
49564    if (Math.abs(this.coslat0) <= EPSLN) {
49565      if (this.lat0 > 0) {
49566        //North pole
49567        //trace('stere:north pole');
49568        this.con = 1;
49569      }
49570      else {
49571        //South pole
49572        //trace('stere:south pole');
49573        this.con = -1;
49574      }
49575    }
49576    this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));
49577    if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
49578      this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));
49579    }
49580    this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);
49581    this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;
49582    this.cosX0 = Math.cos(this.X0);
49583    this.sinX0 = Math.sin(this.X0);
49584  }
49585}
49586
49587// Stereographic forward equations--mapping lat,long to x,y
49588function stere_forward(p) {
49589  var lon = p.x;
49590  var lat = p.y;
49591  var sinlat = Math.sin(lat);
49592  var coslat = Math.cos(lat);
49593  var A, X, sinX, cosX, ts, rh;
49594  var dlon = adjust_lon(lon - this.long0);
49595
49596  if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {
49597    //case of the origine point
49598    //trace('stere:this is the origin point');
49599    p.x = NaN;
49600    p.y = NaN;
49601    return p;
49602  }
49603  if (this.sphere) {
49604    //trace('stere:sphere case');
49605    A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));
49606    p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;
49607    p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;
49608    return p;
49609  }
49610  else {
49611    X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;
49612    cosX = Math.cos(X);
49613    sinX = Math.sin(X);
49614    if (Math.abs(this.coslat0) <= EPSLN) {
49615      ts = tsfnz(this.e, lat * this.con, this.con * sinlat);
49616      rh = 2 * this.a * this.k0 * ts / this.cons;
49617      p.x = this.x0 + rh * Math.sin(lon - this.long0);
49618      p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);
49619      //trace(p.toString());
49620      return p;
49621    }
49622    else if (Math.abs(this.sinlat0) < EPSLN) {
49623      //Eq
49624      //trace('stere:equateur');
49625      A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));
49626      p.y = A * sinX;
49627    }
49628    else {
49629      //other case
49630      //trace('stere:normal case');
49631      A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));
49632      p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;
49633    }
49634    p.x = A * cosX * Math.sin(dlon) + this.x0;
49635  }
49636  //trace(p.toString());
49637  return p;
49638}
49639
49640//* Stereographic inverse equations--mapping x,y to lat/long
49641function stere_inverse(p) {
49642  p.x -= this.x0;
49643  p.y -= this.y0;
49644  var lon, lat, ts, ce, Chi;
49645  var rh = Math.sqrt(p.x * p.x + p.y * p.y);
49646  if (this.sphere) {
49647    var c = 2 * Math.atan(rh / (2 * this.a * this.k0));
49648    lon = this.long0;
49649    lat = this.lat0;
49650    if (rh <= EPSLN) {
49651      p.x = lon;
49652      p.y = lat;
49653      return p;
49654    }
49655    lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);
49656    if (Math.abs(this.coslat0) < EPSLN) {
49657      if (this.lat0 > 0) {
49658        lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
49659      }
49660      else {
49661        lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
49662      }
49663    }
49664    else {
49665      lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));
49666    }
49667    p.x = lon;
49668    p.y = lat;
49669    return p;
49670  }
49671  else {
49672    if (Math.abs(this.coslat0) <= EPSLN) {
49673      if (rh <= EPSLN) {
49674        lat = this.lat0;
49675        lon = this.long0;
49676        p.x = lon;
49677        p.y = lat;
49678        //trace(p.toString());
49679        return p;
49680      }
49681      p.x *= this.con;
49682      p.y *= this.con;
49683      ts = rh * this.cons / (2 * this.a * this.k0);
49684      lat = this.con * phi2z(this.e, ts);
49685      lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));
49686    }
49687    else {
49688      ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));
49689      lon = this.long0;
49690      if (rh <= EPSLN) {
49691        Chi = this.X0;
49692      }
49693      else {
49694        Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);
49695        lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));
49696      }
49697      lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));
49698    }
49699  }
49700  p.x = lon;
49701  p.y = lat;
49702
49703  //trace(p.toString());
49704  return p;
49705
49706}
49707
49708var stere_names = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"];
49709/* harmony default export */ const stere = ({
49710  init: stere_init,
49711  forward: stere_forward,
49712  inverse: stere_inverse,
49713  names: stere_names,
49714  ssfn_: ssfn_
49715});
49716
49717;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/somerc.js
49718/*
49719  references:
49720    Formules et constantes pour le Calcul pour la
49721    projection cylindrique conforme à axe oblique et pour la transformation entre
49722    des systèmes de référence.
49723    http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf
49724  */
49725
49726function somerc_init() {
49727  var phy0 = this.lat0;
49728  this.lambda0 = this.long0;
49729  var sinPhy0 = Math.sin(phy0);
49730  var semiMajorAxis = this.a;
49731  var invF = this.rf;
49732  var flattening = 1 / invF;
49733  var e2 = 2 * flattening - Math.pow(flattening, 2);
49734  var e = this.e = Math.sqrt(e2);
49735  this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));
49736  this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));
49737  this.b0 = Math.asin(sinPhy0 / this.alpha);
49738  var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));
49739  var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));
49740  var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));
49741  this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;
49742}
49743
49744function somerc_forward(p) {
49745  var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));
49746  var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));
49747  var S = -this.alpha * (Sa1 + Sa2) + this.K;
49748
49749  // spheric latitude
49750  var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);
49751
49752  // spheric longitude
49753  var I = this.alpha * (p.x - this.lambda0);
49754
49755  // psoeudo equatorial rotation
49756  var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.
49756cos(this.b0) * Math.cos(I)));
49757
49758  var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));
49759
49760  p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;
49761  p.x = this.R * rotI + this.x0;
49762  return p;
49763}
49764
49765function somerc_inverse(p) {
49766  var Y = p.x - this.x0;
49767  var X = p.y - this.y0;
49768
49769  var rotI = Y / this.R;
49770  var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);
49771
49772  var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));
49773  var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));
49774
49775  var lambda = this.lambda0 + I / this.alpha;
49776
49777  var S = 0;
49778  var phy = b;
49779  var prevPhy = -1000;
49780  var iteration = 0;
49781  while (Math.abs(phy - prevPhy) > 0.0000001) {
49782    if (++iteration > 20) {
49783      //...reportError("omercFwdInfinity");
49784      return;
49785    }
49786    //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));
49787    S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));
49788    prevPhy = phy;
49789    phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;
49790  }
49791
49792  p.x = lambda;
49793  p.y = phy;
49794  return p;
49795}
49796
49797var somerc_names = ["somerc"];
49798/* harmony default export */ const somerc = ({
49799  init: somerc_init,
49800  forward: somerc_forward,
49801  inverse: somerc_inverse,
49802  names: somerc_names
49803});
49804
49805;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/omerc.js
49806
49807
49808
49809
49810
49811/* Initialize the Oblique Mercator  projection
49812    ------------------------------------------*/
49813function omerc_init() {
49814  this.no_off = this.no_off || false;
49815  this.no_rot = this.no_rot || false;
49816
49817  if (isNaN(this.k0)) {
49818    this.k0 = 1;
49819  }
49820  var sinlat = Math.sin(this.lat0);
49821  var coslat = Math.cos(this.lat0);
49822  var con = this.e * sinlat;
49823
49824  this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));
49825  this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);
49826  var t0 = tsfnz(this.e, this.lat0, sinlat);
49827  var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));
49828  if (dl * dl < 1) {
49829    dl = 1;
49830  }
49831  var fl;
49832  var gl;
49833  if (!isNaN(this.longc)) {
49834    //Central point and azimuth method
49835
49836    if (this.lat0 >= 0) {
49837      fl = dl + Math.sqrt(dl * dl - 1);
49838    }
49839    else {
49840      fl = dl - Math.sqrt(dl * dl - 1);
49841    }
49842    this.el = fl * Math.pow(t0, this.bl);
49843    gl = 0.5 * (fl - 1 / fl);
49844    this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);
49845    this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;
49846
49847  }
49848  else {
49849    //2 points method
49850    var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));
49851    var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));
49852    if (this.lat0 >= 0) {
49853      this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
49854    }
49855    else {
49856      this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
49857    }
49858    var hl = Math.pow(t1, this.bl);
49859    var ll = Math.pow(t2, this.bl);
49860    fl = this.el / hl;
49861    gl = 0.5 * (fl - 1 / fl);
49862    var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);
49863    var pl = (ll - hl) / (ll + hl);
49864    var dlon12 = adjust_lon(this.long1 - this.long2);
49865    this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;
49866    this.long0 = adjust_lon(this.long0);
49867    var dlon10 = adjust_lon(this.long1 - this.long0);
49868    this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);
49869    this.alpha = Math.asin(dl * Math.sin(this.gamma0));
49870  }
49871
49872  if (this.no_off) {
49873    this.uc = 0;
49874  }
49875  else {
49876    if (this.lat0 >= 0) {
49877      this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
49878    }
49879    else {
49880      this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
49881    }
49882  }
49883
49884}
49885
49886/* Oblique Mercator forward equations--mapping lat,long to x,y
49887    ----------------------------------------------------------*/
49888function omerc_forward(p) {
49889  var lon = p.x;
49890  var lat = p.y;
49891  var dlon = adjust_lon(lon - this.long0);
49892  var us, vs;
49893  var con;
49894  if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
49895    if (lat > 0) {
49896      con = -1;
49897    }
49898    else {
49899      con = 1;
49900    }
49901    vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));
49902    us = -1 * con * HALF_PI * this.al / this.bl;
49903  }
49904  else {
49905    var t = tsfnz(this.e, lat, Math.sin(lat));
49906    var ql = this.el / Math.pow(t, this.bl);
49907    var sl = 0.5 * (ql - 1 / ql);
49908    var tl = 0.5 * (ql + 1 / ql);
49909    var vl = Math.sin(this.bl * (dlon));
49910    var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;
49911    if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {
49912      vs = Number.POSITIVE_INFINITY;
49913    }
49914    else {
49915      vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;
49916    }
49917    if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {
49918      us = this.al * this.bl * (dlon);
49919    }
49920    else {
49921      us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;
49922    }
49923  }
49924
49925  if (this.no_rot) {
49926    p.x = this.x0 + us;
49927    p.y = this.y0 + vs;
49928  }
49929  else {
49930
49931    us -= this.uc;
49932    p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);
49933    p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);
49934  }
49935  return p;
49936}
49937
49938function omerc_inverse(p) {
49939  var us, vs;
49940  if (this.no_rot) {
49941    vs = p.y - this.y0;
49942    us = p.x - this.x0;
49943  }
49944  else {
49945    vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);
49946    us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);
49947    us += this.uc;
49948  }
49949  var qp = Math.exp(-1 * this.bl * vs / this.al);
49950  var sp = 0.5 * (qp - 1 / qp);
49951  var tp = 0.5 * (qp + 1 / qp);
49952  var vp = Math.sin(this.bl * us / this.al);
49953  var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;
49954  var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);
49955  if (Math.abs(up - 1) < EPSLN) {
49956    p.x = this.long0;
49957    p.y = HALF_PI;
49958  }
49959  else if (Math.abs(up + 1) < EPSLN) {
49960    p.x = this.long0;
49961    p.y = -1 * HALF_PI;
49962  }
49963  else {
49964    p.y = phi2z(this.e, ts);
49965    p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);
49966  }
49967  return p;
49968}
49969
49970var omerc_names = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"];
49971/* harmony default export */ const omerc = ({
49972  init: omerc_init,
49973  forward: omerc_forward,
49974  inverse: omerc_inverse,
49975  names: omerc_names
49976}
vendor: 62,020 bytes, lines 49976-52317
49976);
49977
49978;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/lcc.js
49979
49980
49981
49982
49983
49984
49985function lcc_init() {
49986
49987  // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north
49988  //double c_lat;                   /* center latitude                      */
49989  //double c_lon;                   /* center longitude                     */
49990  //double lat1;                    /* first standard parallel              */
49991  //double lat2;                    /* second standard parallel             */
49992  //double r_maj;                   /* major axis                           */
49993  //double r_min;                   /* minor axis                           */
49994  //double false_east;              /* x offset in meters                   */
49995  //double false_north;             /* y offset in meters                   */
49996
49997  if (!this.lat2) {
49998    this.lat2 = this.lat1;
49999  } //if lat2 is not defined
50000  if (!this.k0) {
50001    this.k0 = 1;
50002  }
50003  this.x0 = this.x0 || 0;
50004  this.y0 = this.y0 || 0;
50005  // Standard Parallels cannot be equal and on opposite sides of the equator
50006  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
50007    return;
50008  }
50009
50010  var temp = this.b / this.a;
50011  this.e = Math.sqrt(1 - temp * temp);
50012
50013  var sin1 = Math.sin(this.lat1);
50014  var cos1 = Math.cos(this.lat1);
50015  var ms1 = msfnz(this.e, sin1, cos1);
50016  var ts1 = tsfnz(this.e, this.lat1, sin1);
50017
50018  var sin2 = Math.sin(this.lat2);
50019  var cos2 = Math.cos(this.lat2);
50020  var ms2 = msfnz(this.e, sin2, cos2);
50021  var ts2 = tsfnz(this.e, this.lat2, sin2);
50022
50023  var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));
50024
50025  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
50026    this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);
50027  }
50028  else {
50029    this.ns = sin1;
50030  }
50031  if (isNaN(this.ns)) {
50032    this.ns = sin1;
50033  }
50034  this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));
50035  this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);
50036  if (!this.title) {
50037    this.title = "Lambert Conformal Conic";
50038  }
50039}
50040
50041// Lambert Conformal conic forward equations--mapping lat,long to x,y
50042// -----------------------------------------------------------------
50043function lcc_forward(p) {
50044
50045  var lon = p.x;
50046  var lat = p.y;
50047
50048  // singular cases :
50049  if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {
50050    lat = sign(lat) * (HALF_PI - 2 * EPSLN);
50051  }
50052
50053  var con = Math.abs(Math.abs(lat) - HALF_PI);
50054  var ts, rh1;
50055  if (con > EPSLN) {
50056    ts = tsfnz(this.e, lat, Math.sin(lat));
50057    rh1 = this.a * this.f0 * Math.pow(ts, this.ns);
50058  }
50059  else {
50060    con = lat * this.ns;
50061    if (con <= 0) {
50062      return null;
50063    }
50064    rh1 = 0;
50065  }
50066  var theta = this.ns * adjust_lon(lon - this.long0);
50067  p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;
50068  p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;
50069
50070  return p;
50071}
50072
50073// Lambert Conformal Conic inverse equations--mapping x,y to lat/long
50074// -----------------------------------------------------------------
50075function lcc_inverse(p) {
50076
50077  var rh1, con, ts;
50078  var lat, lon;
50079  var x = (p.x - this.x0) / this.k0;
50080  var y = (this.rh - (p.y - this.y0) / this.k0);
50081  if (this.ns > 0) {
50082    rh1 = Math.sqrt(x * x + y * y);
50083    con = 1;
50084  }
50085  else {
50086    rh1 = -Math.sqrt(x * x + y * y);
50087    con = -1;
50088  }
50089  var theta = 0;
50090  if (rh1 !== 0) {
50091    theta = Math.atan2((con * x), (con * y));
50092  }
50093  if ((rh1 !== 0) || (this.ns > 0)) {
50094    con = 1 / this.ns;
50095    ts = Math.pow((rh1 / (this.a * this.f0)), con);
50096    lat = phi2z(this.e, ts);
50097    if (lat === -9999) {
50098      return null;
50099    }
50100  }
50101  else {
50102    lat = -HALF_PI;
50103  }
50104  lon = adjust_lon(theta / this.ns + this.long0);
50105
50106  p.x = lon;
50107  p.y = lat;
50108  return p;
50109}
50110
50111var lcc_names = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"];
50112/* harmony default export */ const lcc = ({
50113  init: lcc_init,
50114  forward: lcc_forward,
50115  inverse: lcc_inverse,
50116  names: lcc_names
50117});
50118
50119;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/krovak.js
50120
50121
50122function krovak_init() {
50123  this.a = 6377397.155;
50124  this.es = 0.006674372230614;
50125  this.e = Math.sqrt(this.es);
50126  if (!this.lat0) {
50127    this.lat0 = 0.863937979737193;
50128  }
50129  if (!this.long0) {
50130    this.long0 = 0.7417649320975901 - 0.308341501185665;
50131  }
50132  /* if scale not set default to 0.9999 */
50133  if (!this.k0) {
50134    this.k0 = 0.9999;
50135  }
50136  this.s45 = 0.785398163397448; /* 45 */
50137  this.s90 = 2 * this.s45;
50138  this.fi0 = this.lat0;
50139  this.e2 = this.es;
50140  this.e = Math.sqrt(this.e2);
50141  this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));
50142  this.uq = 1.04216856380474;
50143  this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);
50144  this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);
50145  this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;
50146  this.k1 = this.k0;
50147  this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));
50148  this.s0 = 1.37008346281555;
50149  this.n = Math.sin(this.s0);
50150  this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);
50151  this.ad = this.s90 - this.uq;
50152}
50153
50154/* ellipsoid */
50155/* calculate xy from lat/lon */
50156/* Constants, identical to inverse transform function */
50157function krovak_forward(p) {
50158  var gfi, u, deltav, s, d, eps, ro;
50159  var lon = p.x;
50160  var lat = p.y;
50161  var delta_lon = adjust_lon(lon - this.long0);
50162  /* Transformation */
50163  gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));
50164  u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);
50165  deltav = -delta_lon * this.alfa;
50166  s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));
50167  d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));
50168  eps = this.n * d;
50169  ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);
50170  p.y = ro * Math.cos(eps) / 1;
50171  p.x = ro * Math.sin(eps) / 1;
50172
50173  if (!this.czech) {
50174    p.y *= -1;
50175    p.x *= -1;
50176  }
50177  return (p);
50178}
50179
50180/* calculate lat/lon from xy */
50181function krovak_inverse(p) {
50182  var u, deltav, s, d, eps, ro, fi1;
50183  var ok;
50184
50185  /* Transformation */
50186  /* revert y, x*/
50187  var tmp = p.x;
50188  p.x = p.y;
50189  p.y = tmp;
50190  if (!this.czech) {
50191    p.y *= -1;
50192    p.x *= -1;
50193  }
50194  ro = Math.sqrt(p.x * p.x + p.y * p.y);
50195  eps = Math.atan2(p.y, p.x);
50196  d = eps / Math.sin(this.s0);
50197  s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);
50198  u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));
50199  deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));
50200  p.x = this.long0 - deltav / this.alfa;
50201  fi1 = u;
50202  ok = 0;
50203  var iter = 0;
50204  do {
50205    p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);
50206    if (Math.abs(fi1 - p.y) < 0.0000000001) {
50207      ok = 1;
50208    }
50209    fi1 = p.y;
50210    iter += 1;
50211  } while (ok === 0 && iter < 15);
50212  if (iter >= 15) {
50213    return null;
50214  }
50215
50216  return (p);
50217}
50218
50219var krovak_names = ["Krovak", "krovak"];
50220/* harmony default export */ const krovak = ({
50221  init: krovak_init,
50222  forward: krovak_forward,
50223  inverse: krovak_inverse,
50224  names: krovak_names
50225});
50226
50227;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/mlfn.js
50228/* harmony default export */ function mlfn(e0, e1, e2, e3, phi) {
50229  return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));
50230}
50231;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/e0fn.js
50232/* harmony default export */ function e0fn(x) {
50233  return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));
50234}
50235;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/e1fn.js
50236/* harmony default export */ function e1fn(x) {
50237  return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));
50238}
50239;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/e2fn.js
50240/* harmony default export */ function e2fn(x) {
50241  return (0.05859375 * x * x * (1 + 0.75 * x));
50242}
50243;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/e3fn.js
50244/* harmony default export */ function e3fn(x) {
50245  return (x * x * x * (35 / 3072));
50246}
50247;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/gN.js
50248/* harmony default export */ function gN(a, e, sinphi) {
50249  var temp = e * sinphi;
50250  return a / Math.sqrt(1 - temp * temp);
50251}
50252;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/adjust_lat.js
50253
50254
50255
50256/* harmony default export */ function adjust_lat(x) {
50257  return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));
50258}
50259
50260;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/imlfn.js
50261/* harmony default export */ function imlfn(ml, e0, e1, e2, e3) {
50262  var phi;
50263  var dphi;
50264
50265  phi = ml / e0;
50266  for (var i = 0; i < 15; i++) {
50267    dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));
50268    phi += dphi;
50269    if (Math.abs(dphi) <= 0.0000000001) {
50270      return phi;
50271    }
50272  }
50273
50274  //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations");
50275  return NaN;
50276}
50277;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/cass.js
50278
50279
50280
50281
50282
50283
50284
50285
50286
50287
50288
50289function cass_init() {
50290  if (!this.sphere) {
50291    this.e0 = e0fn(this.es);
50292    this.e1 = e1fn(this.es);
50293    this.e2 = e2fn(this.es);
50294    this.e3 = e3fn(this.es);
50295    this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
50296  }
50297}
50298
50299/* Cassini forward equations--mapping lat,long to x,y
50300  -----------------------------------------------------------------------*/
50301function cass_forward(p) {
50302
50303  /* Forward equations
50304      -----------------*/
50305  var x, y;
50306  var lam = p.x;
50307  var phi = p.y;
50308  lam = adjust_lon(lam - this.long0);
50309
50310  if (this.sphere) {
50311    x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));
50312    y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);
50313  }
50314  else {
50315    //ellipsoid
50316    var sinphi = Math.sin(phi);
50317    var cosphi = Math.cos(phi);
50318    var nl = gN(this.a, this.e, sinphi);
50319    var tl = Math.tan(phi) * Math.tan(phi);
50320    var al = lam * Math.cos(phi);
50321    var asq = al * al;
50322    var cl = this.es * cosphi * cosphi / (1 - this.es);
50323    var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
50324
50325    x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));
50326    y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);
50327
50328
50329  }
50330
50331  p.x = x + this.x0;
50332  p.y = y + this.y0;
50333  return p;
50334}
50335
50336/* Inverse equations
50337  -----------------*/
50338function cass_inverse(p) {
50339  p.x -= this.x0;
50340  p.y -= this.y0;
50341  var x = p.x / this.a;
50342  var y = p.y / this.a;
50343  var phi, lam;
50344
50345  if (this.sphere) {
50346    var dd = y + this.lat0;
50347    phi = Math.asin(Math.sin(dd) * Math.cos(x));
50348    lam = Math.atan2(Math.tan(x), Math.cos(dd));
50349  }
50350  else {
50351    /* ellipsoid */
50352    var ml1 = this.ml0 / this.a + y;
50353    var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);
50354    if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {
50355      p.x = this.long0;
50356      p.y = HALF_PI;
50357      if (y < 0) {
50358        p.y *= -1;
50359      }
50360      return p;
50361    }
50362    var nl1 = gN(this.a, this.e, Math.sin(phi1));
50363
50364    var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);
50365    var tl1 = Math.pow(Math.tan(phi1), 2);
50366    var dl = x * this.a / nl1;
50367    var dsq = dl * dl;
50368    phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);
50369    lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);
50370
50371  }
50372
50373  p.x = adjust_lon(lam + this.long0);
50374  p.y = adjust_lat(phi);
50375  return p;
50376
50377}
50378
50379var cass_names = ["Cassini", "Cassini_Soldner", "cass"];
50380/* harmony default export */ const cass = ({
50381  init: cass_init,
50382  forward: cass_forward,
50383  inverse: cass_inverse,
50384  names: cass_names
50385});
50386
50387;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/qsfnz.js
50388/* harmony default export */ function qsfnz(eccent, sinphi) {
50389  var con;
50390  if (eccent > 1.0e-7) {
50391    con = eccent * sinphi;
50392    return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));
50393  }
50394  else {
50395    return (2 * sinphi);
50396  }
50397}
50398;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/laea.js
50399
50400
50401
50402
50403
50404
50405/*
50406  reference
50407    "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
50408    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
50409  */
50410
50411var S_POLE = 1;
50412
50413var N_POLE = 2;
50414var EQUIT = 3;
50415var OBLIQ = 4;
50416
50417/* Initialize the Lambert Azimuthal Equal Area projection
50418  ------------------------------------------------------*/
50419function laea_init() {
50420  var t = Math.abs(this.lat0);
50421  if (Math.abs(t - HALF_PI) < EPSLN) {
50422    this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;
50423  }
50424  else if (Math.abs(t) < EPSLN) {
50425    this.mode = this.EQUIT;
50426  }
50427  else {
50428    this.mode = this.OBLIQ;
50429  }
50430  if (this.es > 0) {
50431    var sinphi;
50432
50433    this.qp = qsfnz(this.e, 1);
50434    this.mmf = 0.5 / (1 - this.es);
50435    this.apa = authset(this.es);
50436    switch (this.mode) {
50437    case this.N_POLE:
50438      this.dd = 1;
50439      break;
50440    case this.S_POLE:
50441      this.dd = 1;
50442      break;
50443    case this.EQUIT:
50444      this.rq = Math.sqrt(0.5 * this.qp);
50445      this.dd = 1 / this.rq;
50446      this.xmf = 1;
50447      this.ymf = 0.5 * this.qp;
50448      break;
50449    case this.OBLIQ:
50450      this.rq = Math.sqrt(0.5 * this.qp);
50451      sinphi = Math.sin(this.lat0);
50452      this.sinb1 = qsfnz(this.e, sinphi) / this.qp;
50453      this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);
50454      this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);
50455      this.ymf = (this.xmf = this.rq) / this.dd;
50456      this.xmf *= this.dd;
50457      break;
50458    }
50459  }
50460  else {
50461    if (this.mode === this.OBLIQ) {
50462      this.sinph0 = Math.sin(this.lat0);
50463      this.cosph0 = Math.cos(this.lat0);
50464    }
50465  }
50466}
50467
50468/* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y
50469  -----------------------------------------------------------------------*/
50470function laea_forward(p) {
50471
50472  /* Forward equations
50473      -----------------*/
50474  var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;
50475  var lam = p.x;
50476  var phi = p.y;
50477
50478  lam = adjust_lon(lam - this.long0);
50479  if (this.sphere) {
50480    sinphi = Math.sin(phi);
50481    cosphi = Math.cos(phi);
50482    coslam = Math.cos(lam);
50483    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
50484      y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
50485      if (y <= EPSLN) {
50486        return null;
50487      }
50488      y = Math.sqrt(2 / y);
50489      x = y * cosphi * Math.sin(lam);
50490      y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
50491    }
50492    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
50493      if (this.mode === this.N_POLE) {
50494        coslam = -coslam;
50495      }
50496      if (Math.abs(phi + this.lat0) < EPSLN) {
50497        return null;
50498      }
50499      y = FORTPI - phi * 0.5;
50500      y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));
50501      x = y * Math.sin(lam);
50502      y *= coslam;
50503    }
50504  }
50505  else {
50506    sinb = 0;
50507    cosb = 0;
50508    b = 0;
50509    coslam = Math.cos(lam);
50510    sinlam = Math.sin(lam);
50511    sinphi = Math.sin(phi);
50512    q = qsfnz(this.e, sinphi);
50513    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
50514      sinb = q / this.qp;
50515      cosb = Math.sqrt(1 - sinb * sinb);
50516    }
50517    switch (this.mode) {
50518    case this.OBLIQ:
50519      b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;
50520      break;
50521    case this.EQUIT:
50522      b = 1 + cosb * coslam;
50523      break;
50524    case this.N_POLE:
50525      b = HALF_PI + phi;
50526      q = this.qp - q;
50527      break;
50528    case this.S_POLE:
50529      b = phi - HALF_PI;
50530      q = this.qp + q;
50531      break;
50532    }
50533    if (Math.abs(b) < EPSLN) {
50534      return null;
50535    }
50536    switch (this.mode) {
50537    case this.OBLIQ:
50538    case this.EQUIT:
50539      b = Math.sqrt(2 / b);
50540      if (this.mode === this.OBLIQ) {
50541        y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);
50542      }
50543      else {
50544        y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;
50545      }
50546      x = this.xmf * b * cosb * sinlam;
50547      break;
50548    case this.N_POLE:
50549    case this.S_POLE:
50550      if (q >= 0) {
50551        x = (b = Math.sqrt(q)) * sinlam;
50552        y = coslam * ((this.mode === this.S_POLE) ? b : -b);
50553      }
50554      else {
50555        x = y = 0;
50556      }
50557      break;
50558    }
50559  }
50560
50561  p.x = this.a * x + this.x0;
50562  p.y = this.a * y + this.y0;
50563  return p;
50564}
50565
50566/* Inverse equations
50567  -----------------*/
50568function laea_inverse(p) {
50569  p.x -= this.x0;
50570  p.y -= this.y0;
50571  var x = p.x / this.a;
50572  var y = p.y / this.a;
50573  var lam, phi, cCe, sCe, q, rho, ab;
50574  if (this.sphere) {
50575    var cosz = 0,
50576      rh, sinz = 0;
50577
50578    rh = Math.sqrt(x * x + y * y);
50579    phi = rh * 0.5;
50580    if (phi > 1) {
50581      return null;
50582    }
50583    phi = 2 * Math.asin(phi);
50584    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
50585      sinz = Math.sin(phi);
50586      cosz = Math.cos(phi);
50587    }
50588    switch (this.mode) {
50589    case this.EQUIT:
50590      phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);
50591      x *= sinz;
50592      y = cosz * rh;
50593      break;
50594    case this.OBLIQ:
50595      phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);
50596      x *= sinz * this.cosph0;
50597      y = (cosz - Math.sin(phi) * this.sinph0) * rh;
50598      break;
50599    case this.N_POLE:
50600      y = -y;
50601      phi = HALF_PI - phi;
50602      break;
50603    case this.S_POLE:
50604      phi -= HALF_PI;
50605      break;
50606    }
50607    lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);
50608  }
50609  else {
50610    ab = 0;
50611    if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
50612      x /= this.dd;
50613      y *= this.dd;
50614      rho = Math.sqrt(x * x + y * y);
50615      if (rho < EPSLN) {
50616        p.x = this.long0;
50617        p.y = this.lat0;
50618        return p;
50619      }
50620      sCe = 2 * Math.asin(0.5 * rho / this.rq);
50621      cCe = Math.cos(sCe);
50622      x *= (sCe = Math.sin(sCe));
50623      if (this.mode === this.OBLIQ) {
50624        ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;
50625        q = this.qp * ab;
50626        y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;
50627      }
50628      else {
50629        ab = y * sCe / rho;
50630        q = this.qp * ab;
50631        y = rho * cCe;
50632      }
50633    }
50634    else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
50635      if (this.mode === this.N_POLE) {
50636        y = -y;
50637      }
50638      q = (x * x + y * y);
50639      if (!q) {
50640        p.x = this.long0;
50641        p.y = this.lat0;
50642        return p;
50643      }
50644      ab = 1 - q / this.qp;
50645      if (this.mode === this.S_POLE) {
50646        ab = -ab;
50647      }
50648    }
50649    lam = Math.atan2(x, y);
50650    phi = authlat(Math.asin(ab), this.apa);
50651  }
50652
50653  p.x = adjust_lon(this.long0 + lam);
50654  p.y = phi;
50655  return p;
50656}
50657
50658/* determine latitude from authalic latitude */
50659var P00 = 0.33333333333333333333;
50660
50661var P01 = 0.17222222222222222222;
50662var P02 = 0.10257936507936507936;
50663var P10 = 0.06388888888888888888;
50664var P11 = 0.06640211640211640211;
50665var P20 = 0.01641501294219154443;
50666
50667function authset(es) {
50668  var t;
50669  var APA = [];
50670  APA[0] = es * P00;
50671  t = es * es;
50672  APA[0] += t * P01;
50673  APA[1] = t * P10;
50674  t *= es;
50675  APA[0] += t * P02;
50676  APA[1] += t * P11;
50677  APA[2] = t * P20;
50678  return APA;
50679}
50680
50681function authlat(beta, APA) {
50682  var t = beta + beta;
50683  return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));
50684}
50685
50686var laea_names = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"];
50687/* harmony default export */ const laea = ({
50688  init: laea_init,
50689  forward: laea_forward,
50690  inverse: laea_inverse,
50691  names: laea_names,
50692  S_POLE: S_POLE,
50693  N_POLE: N_POLE,
50694  EQUIT: EQUIT,
50695  OBLIQ: OBLIQ
50696});
50697
50698;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/asinz.js
50699/* harmony default export */ function asinz(x) {
50700  if (Math.abs(x) > 1) {
50701    x = (x > 1) ? 1 : -1;
50702  }
50703  return Math.asin(x);
50704}
50705;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/aea.js
50706
50707
50708
50709
50710
50711
50712function aea_init() {
50713
50714  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
50715    return;
50716  }
50717  this.temp = this.b / this.a;
50718  this.es = 1 - Math.pow(this.temp, 2);
50719  this.e3 = Math.sqrt(this.es);
50720
50721  this.sin_po = Math.sin(this.lat1);
50722  this.cos_po = Math.cos(this.lat1);
50723  this.t1 = this.sin_po;
50724  this.con = this.sin_po;
50725  this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);
50726  this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);
50727
50728  this.sin_po = Math.sin(this.lat2);
50729  this.cos_po = Math.cos(this.lat2);
50730  this.t2 = this.sin_po;
50731  this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);
50732  this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);
50733
50734  this.sin_po = Math.sin(this.lat0);
50735  this.cos_po = Math.cos(this.lat0);
50736  this.t3 = this.sin_po;
50737  this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);
50738
50739  if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
50740    this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);
50741  }
50742  else {
50743    this.ns0 = this.con;
50744  }
50745  this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;
50746  this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;
50747}
50748
50749/* Albers Conical Equal Area forward equations--mapping lat,long to x,y
50750  -------------------------------------------------------------------*/
50751function aea_forward(p) {
50752
50753  var lon = p.x;
50754  var lat = p.y;
50755
50756  this.sin_phi = Math.sin(lat);
50757  this.cos_phi = Math.cos(lat);
50758
50759  var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);
50760  var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;
50761  var theta = this.ns0 * adjust_lon(lon - this.long0);
50762  var x = rh1 * Math.sin(theta) + this.x0;
50763  var y = this.rh - rh1 * Math.cos(theta) + this.y0;
50764
50765  p.x = x;
50766  p.y = y;
50767  return p;
50768}
50769
50770function aea_inverse(p) {
50771  var rh1, qs, con, theta, lon, lat;
50772
50773  p.x -= this.x0;
50774  p.y = this.rh - p.y + this.y0;
50775  if (this.ns0 >= 0) {
50776    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
50777    con = 1;
50778  }
50779  else {
50780    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
50781    con = -1;
50782  }
50783  theta = 0;
50784  if (rh1 !== 0) {
50785    theta = Math.atan2(con * p.x, con * p.y);
50786  }
50787  con = rh1 * this.ns0 / this.a;
50788  if (this.sphere) {
50789    lat = Math.asin((this.c - con * con) / (2 * this.ns0));
50790  }
50791  else {
50792    qs = (this.c - con * con) / this.ns0;
50793    lat = this.phi1z(this.e3, qs);
50794  }
50795
50796  lon = adjust_lon(theta / this.ns0 + this.long0);
50797  p.x = lon;
50798  p.y = lat;
50799  return p;
50800}
50801
50802/* Function to compute phi1, the latitude for the inverse of the
50803   Albers Conical Equal-Area projection.
50804-------------------------------------------*/
50805function phi1z(eccent, qs) {
50806  var sinphi, cosphi, con, com, dphi;
50807  var phi = asinz(0.5 * qs);
50808  if (eccent < EPSLN) {
50809    return phi;
50810  }
50811
50812  var eccnts = eccent * eccent;
50813  for (var i = 1; i <= 25; i++) {
50814    sinphi = Math.sin(phi);
50815    cosphi = Math.cos(phi);
50816    con = eccent * sinphi;
50817    com = 1 - con * con;
50818    dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
50819    phi = phi + dphi;
50820    if (Math.abs(dphi) <= 1e-7) {
50821      return phi;
50822    }
50823  }
50824  return null;
50825}
50826
50827var aea_names = ["Albers_Conic_Equal_Area", "Albers", "aea"];
50828/* harmony default export */ const aea = ({
50829  init: aea_init,
50830  forward: aea_forward,
50831  inverse: aea_inverse,
50832  names: aea_names,
50833  phi1z: phi1z
50834});
50835
50836;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/gnom.js
50837
50838
50839
50840
50841/*
50842  reference:
50843    Wolfram Mathworld "Gnomonic Projection"
50844    http://mathworld.wolfram.com/GnomonicProjection.html
50845    Accessed: 12th November 2009
50846  */
50847function gnom_init() {
50848
50849  /* Place parameters in static storage for common use
50850      -------------------------------------------------*/
50851  this.sin_p14 = Math.sin(this.lat0);
50852  this.cos_p14 = Math.cos(this.lat0);
50853  // Approximation for projecting points to the horizon (infinity)
50854  this.infinity_dist = 1000 * this.a;
50855  this.rc = 1;
50856}
50857
50858/* Gnomonic forward equations--mapping lat,long to x,y
50859    ---------------------------------------------------*/
50860function gnom_forward(p) {
50861  var sinphi, cosphi; /* sin and cos value        */
50862  var dlon; /* delta longitude value      */
50863  var coslon; /* cos of longitude        */
50864  var ksp; /* scale factor          */
50865  var g;
50866  var x, y;
50867  var lon = p.x;
50868  var lat = p.y;
50869  /* Forward equations
50870      -----------------*/
50871  dlon = adjust_lon(lon - this.long0);
50872
50873  sinphi = Math.sin(lat);
50874  cosphi = Math.cos(lat);
50875
50876  coslon = Math.cos(dlon);
50877  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
50878  ksp = 1;
50879  if ((g > 0) || (Math.abs(g) <= EPSLN)) {
50880    x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;
50881    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;
50882  }
50883  else {
50884
50885    // Point is in the opposing hemisphere and is unprojectable
50886    // We still need to return a reasonable point, so we project
50887    // to infinity, on a bearing
50888    // equivalent to the northern hemisphere equivalent
50889    // This is a reasonable approximation for short shapes and lines that
50890    // straddle the horizon.
50891
50892    x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);
50893    y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
50894
50895  }
50896  p.x = x;
50897  p.y = y;
50898  return p;
50899}
50900
50901function gnom_inverse(p) {
50902  var rh; /* Rho */
50903  var sinc, cosc;
50904  var c;
50905  var lon, lat;
50906
50907  /* Inverse equations
50908      -----------------*/
50909  p.x = (p.x - this.x0) / this.a;
50910  p.y = (p.y - this.y0) / this.a;
50911
50912  p.x /= this.k0;
50913  p.y /= this.k0;
50914
50915  if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {
50916    c = Math.atan2(rh, this.rc);
50917    sinc = Math.sin(c);
50918    cosc = Math.cos(c);
50919
50920    lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);
50921    lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);
50922    lon = adjust_lon(this.long0 + lon);
50923  }
50924  else {
50925    lat = this.phic0;
50926    lon = 0;
50927  }
50928
50929  p.x = lon;
50930  p.y = lat;
50931  return p;
50932}
50933
50934var gnom_names = ["gnom"];
50935/* harmony default export */ const gnom = ({
50936  init: gnom_init,
50937  forward: gnom_forward,
50938  inverse: gnom_inverse,
50939  names: gnom_names
50940});
50941
50942;// CONCATENATED MODULE: ./node_modules/proj4/lib/common/iqsfnz.js
50943
50944
50945/* harmony default export */ function iqsfnz(eccent, q) {
50946  var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));
50947  if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {
50948    if (q < 0) {
50949      return (-1 * HALF_PI);
50950    }
50951    else {
50952      return HALF_PI;
50953    }
50954  }
50955  //var phi = 0.5* q/(1-eccent*eccent);
50956  var phi = Math.asin(0.5 * q);
50957  var dphi;
50958  var sin_phi;
50959  var cos_phi;
50960  var con;
50961  for (var i = 0; i < 30; i++) {
50962    sin_phi = Math.sin(phi);
50963    cos_phi = Math.cos(phi);
50964    con = eccent * sin_phi;
50965    dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
50966    phi += dphi;
50967    if (Math.abs(dphi) <= 0.0000000001) {
50968      return phi;
50969    }
50970  }
50971
50972  //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations");
50973  return NaN;
50974}
50975
50976;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/cea.js
50977
50978
50979
50980
50981
50982/*
50983  reference:
50984    "Cartographic Projection Procedures for the UNIX Environment-
50985    A User's Manual" by Gerald I. Evenden,
50986    USGS Open File Report 90-284and Release 4 Interim Reports (2003)
50987*/
50988function cea_init() {
50989  //no-op
50990  if (!this.sphere) {
50991    this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
50992  }
50993}
50994
50995/* Cylindrical Equal Area forward equations--mapping lat,long to x,y
50996    ------------------------------------------------------------*/
50997function cea_forward(p) {
50998  var lon = p.x;
50999  var lat = p.y;
51000  var x, y;
51001  /* Forward equations
51002      -----------------*/
51003  var dlon = adjust_lon(lon - this.long0);
51004  if (this.sphere) {
51005    x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);
51006    y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);
51007  }
51008  else {
51009    var qs = qsfnz(this.e, Math.sin(lat));
51010    x = this.x0 + this.a * this.k0 * dlon;
51011    y = this.y0 + this.a * qs * 0.5 / this.k0;
51012  }
51013
51014  p.x = x;
51015  p.y = y;
51016  return p;
51017}
51018
51019/* Cylindrical Equal Area inverse equations--mapping x,y to lat/long
51020    ------------------------------------------------------------*/
51021function cea_inverse(p) {
51022  p.x -= this.x0;
51023  p.y -= this.y0;
51024  var lon, lat;
51025
51026  if (this.sphere) {
51027    lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));
51028    lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));
51029  }
51030  else {
51031    lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);
51032    lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));
51033  }
51034
51035  p.x = lon;
51036  p.y = lat;
51037  return p;
51038}
51039
51040var cea_names = ["cea"];
51041/* harmony default export */ const cea = ({
51042  init: cea_init,
51043  forward: cea_forward,
51044  inverse: cea_inverse,
51045  names: cea_names
51046});
51047
51048;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/eqc.js
51049
51050
51051
51052function eqc_init() {
51053
51054  this.x0 = this.x0 || 0;
51055  this.y0 = this.y0 || 0;
51056  this.lat0 = this.lat0 || 0;
51057  this.long0 = this.long0 || 0;
51058  this.lat_ts = this.lat_ts || 0;
51059  this.title = this.title || "Equidistant Cylindrical (Plate Carre)";
51060
51061  this.rc = Math.cos(this.lat_ts);
51062}
51063
51064// forward equations--mapping lat,long to x,y
51065// -----------------------------------------------------------------
51066function eqc_forward(p) {
51067
51068  var lon = p.x;
51069  var lat = p.y;
51070
51071  var dlon = adjust_lon(lon - this.long0);
51072  var dlat = adjust_lat(lat - this.lat0);
51073  p.x = this.x0 + (this.a * dlon * this.rc);
51074  p.y = this.y0 + (this.a * dlat);
51075  return p;
51076}
51077
51078// inverse equations--mapping x,y to lat/long
51079// -----------------------------------------------------------------
51080function eqc_inverse(p) {
51081
51082  var x = p.x;
51083  var y = p.y;
51084
51085  p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));
51086  p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));
51087  return p;
51088}
51089
51090var eqc_names = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
51091/* harmony default export */ const eqc = ({
51092  init: eqc_init,
51093  forward: eqc_forward,
51094  inverse: eqc_inverse,
51095  names: eqc_names
51096});
51097
51098;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/poly.js
51099
51100
51101
51102
51103
51104
51105
51106
51107
51108
51109var poly_MAX_ITER = 20;
51110
51111function poly_init() {
51112  /* Place parameters in static storage for common use
51113      -------------------------------------------------*/
51114  this.temp = this.b / this.a;
51115  this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles
51116  this.e = Math.sqrt(this.es);
51117  this.e0 = e0fn(this.es);
51118  this.e1 = e1fn(this.es);
51119  this.e2 = e2fn(this.es);
51120  this.e3 = e3fn(this.es);
51121  this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas
51122}
51123
51124/* Polyconic forward equations--mapping lat,long to x,y
51125    ---------------------------------------------------*/
51126function poly_forward(p) {
51127  var lon = p.x;
51128  var lat = p.y;
51129  var x, y, el;
51130  var dlon = adjust_lon(lon - this.long0);
51131  el = dlon * Math.sin(lat);
51132  if (this.sphere) {
51133    if (Math.abs(lat) <= EPSLN) {
51134      x = this.a * dlon;
51135      y = -1 * this.a * this.lat0;
51136    }
51137    else {
51138      x = this.a * Math.sin(el) / Math.tan(lat);
51139      y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));
51140    }
51141  }
51142  else {
51143    if (Math.abs(lat) <= EPSLN) {
51144      x = this.a * dlon;
51145      y = -1 * this.ml0;
51146    }
51147    else {
51148      var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);
51149      x = nl * Math.sin(el);
51150      y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));
51151    }
51152
51153  }
51154  p.x = x + this.x0;
51155  p.y = y + this.y0;
51156  return p;
51157}
51158
51159/* Inverse equations
51160  -----------------*/
51161function poly_inverse(p) {
51162  var lon, lat, x, y, i;
51163  var al, bl;
51164  var phi, dphi;
51165  x = p.x - this.x0;
51166  y = p.y - this.y0;
51167
51168  if (this.sphere) {
51169    if (Math.abs(y + this.a * this.lat0) <= EPSLN) {
51170      lon = adjust_lon(x / this.a + this.long0);
51171      lat = 0;
51172    }
51173    else {
51174      al = this.lat0 + y / this.a;
51175      bl = x * x / this.a / this.a + al * al;
51176      phi = al;
51177      var tanphi;
51178      for (i = poly_MAX_ITER; i; --i) {
51179        tanphi = Math.tan(phi);
51180        dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);
51181        phi += dphi;
51182        if (Math.abs(dphi) <= EPSLN) {
51183          lat = phi;
51184          break;
51185        }
51186      }
51187      lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));
51188    }
51189  }
51190  else {
51191    if (Math.abs(y + this.ml0) <= EPSLN) {
51192      lat = 0;
51193      lon = adjust_lon(this.long0 + x / this.a);
51194    }
51195    else {
51196
51197      al = (this.ml0 + y) / this.a;
51198      bl = x * x / this.a / this.a + al * al;
51199      phi = al;
51200      var cl, mln, mlnp, ma;
51201      var con;
51202      for (i = poly_MAX_ITER; i; --i) {
51203        con = this.e * Math.sin(phi);
51204        cl = Math.sqrt(1 - con * con) * Math.tan(phi);
51205        mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
51206        mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);
51207        ma = mln / this.a;
51208        dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);
51209        phi -= dphi;
51210        if (Math.abs(dphi) <= EPSLN) {
51211          lat = phi;
51212          break;
51213        }
51214      }
51215
51216      //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);
51217      cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);
51218      lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));
51219    }
51220  }
51221
51222  p.x = lon;
51223  p.y = lat;
51224  return p;
51225}
51226
51227var poly_names = ["Polyconic", "poly"];
51228/* harmony default export */ const poly = ({
51229  init: poly_init,
51230  forward: poly_forward,
51231  inverse: poly_inverse,
51232  names: poly_names
51233});
51234
51235;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/nzmg.js
51236
51237
51238/*
51239  reference
51240    Department of Land and Survey Technical Circular 1973/32
51241      http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf
51242    OSG Technical Report 4.1
51243      http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf
51244  */
51245
51246/**
51247 * iterations: Number of iterations to refine inverse transform.
51248 *     0 -> km accuracy
51249 *     1 -> m accuracy -- suitable for most mapping applications
51250 *     2 -> mm accuracy
51251 */
51252var iterations = 1;
51253
51254function nzmg_init() {
51255  this.A = [];
51256  this.A[1] = 0.6399175073;
51257  this.A[2] = -0.1358797613;
51258  this.A[3] = 0.063294409;
51259  this.A[4] = -0.02526853;
51260  this.A[5] = 0.0117879;
51261  this.A[6] = -0.0055161;
51262  this.A[7] = 0.0026906;
51263  this.A[8] = -0.001333;
51264  this.A[9] = 0.00067;
51265  this.A[10] = -0.00034;
51266
51267  this.B_re = [];
51268  this.B_im = [];
51269  this.B_re[1] = 0.7557853228;
51270  this.B_im[1] = 0;
51271  this.B_re[2] = 0.249204646;
51272  this.B_im[2] = 0.003371507;
51273  this.B_re[3] = -0.001541739;
51274  this.B_im[3] = 0.041058560;
51275  this.B_re[4] = -0.10162907;
51276  this.B_im[4] = 0.01727609;
51277  this.B_re[5] = -0.26623489;
51278  this.B_im[5] = -0.36249218;
51279  this.B_re[6] = -0.6870983;
51280  this.B_im[6] = -1.1651967;
51281
51282  this.C_re = [];
51283  this.C_im = [];
51284  this.C_re[1] = 1.3231270439;
51285  this.C_im[1] = 0;
51286  this.C_re[2] = -0.577245789;
51287  this.C_im[2] = -0.007809598;
51288  this.C_re[3] = 0.508307513;
51289  this.C_im[3] = -0.112208952;
51290  this.C_re[4] = -0.15094762;
51291  this.C_im[4] = 0.18200602;
51292  this.C_re[5] = 1.01418179;
51293  this.C_im[5] = 1.64497696;
51294  this.C_re[6] = 1.9660549;
51295  this.C_im[6] = 2.5127645;
51296
51297  this.D = [];
51298  this.D[1] = 1.5627014243;
51299  this.D[2] = 0.5185406398;
51300  this.D[3] = -0.03333098;
51301  this.D[4] = -0.1052906;
51302  this.D[5] = -0.0368594;
51303  this.D[6] = 0.007317;
51304  this.D[7] = 0.01220;
51305  this.D[8] = 0.00394;
51306  this.D[9] = -0.0013;
51307}
51308
51309/**
51310    New Zealand Map Grid Forward  - long/lat to x/y
51311    long/lat in radians
51312  */
51313function nzmg_forward(p) {
51314  var n;
51315  var lon = p.x;
51316  var lat = p.y;
51317
51318  var delta_lat = lat - this.lat0;
51319  var delta_lon = lon - this.long0;
51320
51321  // 1. Calculate d_phi and d_psi    ...                          // and d_lambda
51322  // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.
51323  var d_phi = delta_lat / SEC_TO_RAD * 1E-5;
51324  var d_lambda = delta_lon;
51325  var d_phi_n = 1; // d_phi^0
51326
51327  var d_psi = 0;
51328  for (n = 1; n <= 10; n++) {
51329    d_phi_n = d_phi_n * d_phi;
51330    d_psi = d_psi + this.A[n] * d_phi_n;
51331  }
51332
51333  // 2. Calculate theta
51334  var th_re = d_psi;
51335  var th_im = d_lambda;
51336
51337  // 3. Calculate z
51338  var th_n_re = 1;
51339  var th_n_im = 0; // theta^0
51340  var th_n_re1;
51341  var th_n_im1;
51342
51343  var z_re = 0;
51344  var z_im = 0;
51345  for (n = 1; n <= 6; n++) {
51346    th_n_re1 = th_n_re * th_re - th_n_im * th_im;
51347    th_n_im1 = th_n_im * th_re + th_n_re * th_im;
51348    th_n_re = th_n_re1;
51349    th_n_im = th_n_im1;
51350    z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;
51351    z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;
51352  }
51353
51354  // 4. Calculate easting and northing
51355  p.x = (z_im * this.a) + this.x0;
51356  p.y = (z_re * this.a) + this.y0;
51357
51358  return p;
51359}
51360
51361/**
51362    New Zealand Map Grid Inverse  -  x/y to long/lat
51363  */
51364function nzmg_inverse(p) {
51365  var n;
51366  var x = p.x;
51367  var y = p.y;
51368
51369  var delta_x = x - this.x0;
51370  var delta_y = y - this.y0;
51371
51372  // 1. Calculate z
51373  var z_re = delta_y / this.a;
51374  var z_im = delta_x / this.a;
51375
51376  // 2a. Calculate theta - first approximation gives km accuracy
51377  var z_n_re = 1;
51378  var z_n_im = 0; // z^0
51379  var z_n_re1;
51380  var z_n_im1;
51381
51382  var th_re = 0;
51383  var th_im = 0;
51384  for (n = 1; n <= 6; n++) {
51385    z_n_re1 = z_n_re * z_re - z_n_im * z_im;
51386    z_n_im1 = z_n_im * z_re + z_n_re * z_im;
51387    z_n_re = z_n_re1;
51388    z_n_im = z_n_im1;
51389    th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;
51390    th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;
51391  }
51392
51393  // 2b. Iterate to refine the accuracy of the calculation
51394  //        0 iterations gives km accuracy
51395  //        1 iteration gives m accuracy -- good enough for most mapping applications
51396  //        2 iterations bives mm accuracy
51397  for (var i = 0; i < this.iterations; i++) {
51398    var th_n_re = th_re;
51399    var th_n_im = th_im;
51400    var th_n_re1;
51401    var th_n_im1;
51402
51403    var num_re = z_re;
51404    var num_im = z_im;
51405    for (n = 2; n <= 6; n++) {
51406      th_n_re1 = th_n_re * th_re - th_n_im * th_im;
51407      th_n_im1 = th_n_im * th_re + th_n_re * th_im;
51408      th_n_re = th_n_re1;
51409      th_n_im = th_n_im1;
51410      num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
51411      num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
51412    }
51413
51414    th_n_re = 1;
51415    th_n_im = 0;
51416    var den_re = this.B_re[1];
51417    var den_im = this.B_im[1];
51418    for (n = 2; n <= 6; n++) {
51419      th_n_re1 = th_n_re * th_re - th_n_im * th_im;
51420      th_n_im1 = th_n_im * th_re + th_n_re * th_im;
51421      th_n_re = th_n_re1;
51422      th_n_im = th_n_im1;
51423      den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
51424      den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
51425    }
51426
51427    // Complex division
51428    var den2 = den_re * den_re + den_im * den_im;
51429    th_re = (num_re * den_re + num_im * den_im) / den2;
51430    th_im = (num_im * den_re - num_re * den_im) / den2;
51431  }
51432
51433  // 3. Calculate d_phi              ...                                    // and d_lambda
51434  var d_psi = th_re;
51435  var d_lambda = th_im;
51436  var d_psi_n = 1; // d_psi^0
51437
51438  var d_phi = 0;
51439  for (n = 1; n <= 9; n++) {
51440    d_psi_n = d_psi_n * d_psi;
51441    d_phi = d_phi + this.D[n] * d_psi_n;
51442  }
51443
51444  // 4. Calculate latitude and longitude
51445  // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.
51446  var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);
51447  var lon = this.long0 + d_lambda;
51448
51449  p.x = lon;
51450  p.y = lat;
51451
51452  return p;
51453}
51454
51455var nzmg_names = ["New_Zealand_Map_Grid", "nzmg"];
51456/* harmony default export */ const nzmg = ({
51457  init: nzmg_init,
51458  forward: nzmg_forward,
51459  inverse: nzmg_inverse,
51460  names: nzmg_names
51461});
51462
51463;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/mill.js
51464
51465
51466/*
51467  reference
51468    "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
51469    The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
51470  */
51471
51472
51473/* Initialize the Miller Cylindrical projection
51474  -------------------------------------------*/
51475function mill_init() {
51476  //no-op
51477}
51478
51479/* Miller Cylindrical forward equations--mapping lat,long to x,y
51480    ------------------------------------------------------------*/
51481function mill_forward(p) {
51482  var lon = p.x;
51483  var lat = p.y;
51484  /* Forward equations
51485      -----------------*/
51486  var dlon = adjust_lon(lon - this.long0);
51487  var x = this.x0 + this.a * dlon;
51488  var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;
51489
51490  p.x = x;
51491  p.y = y;
51492  return p;
51493}
51494
51495/* Miller Cylindrical inverse equations--mapping x,y to lat/long
51496    ------------------------------------------------------------*/
51497function mill_inverse(p) {
51498  p.x -= this.x0;
51499  p.y -= this.y0;
51500
51501  var lon = adjust_lon(this.long0 + p.x / this.a);
51502  var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);
51503
51504  p.x = lon;
51505  p.y = lat;
51506  return p;
51507}
51508
51509var mill_names = ["Miller_Cylindrical", "mill"];
51510/* harmony default export */ const mill = ({
51511  init: mill_init,
51512  forward: mill_forward,
51513  inverse: mill_inverse,
51514  names: mill_names
51515});
51516
51517;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/sinu.js
51518
51519
51520
51521var sinu_MAX_ITER = 20;
51522
51523
51524
51525
51526
51527
51528
51529function sinu_init() {
51530  /* Place parameters in static storage for common use
51531    -------------------------------------------------*/
51532
51533
51534  if (!this.sphere) {
51535    this.en = pj_enfn(this.es);
51536  }
51537  else {
51538    this.n = 1;
51539    this.m = 0;
51540    this.es = 0;
51541    this.C_y = Math.sqrt((this.m + 1) / this.n);
51542    this.C_x = this.C_y / (this.m + 1);
51543  }
51544
51545}
51546
51547/* Sinusoidal forward equations--mapping lat,long to x,y
51548  -----------------------------------------------------*/
51549function sinu_forward(p) {
51550  var x, y;
51551  var lon = p.x;
51552  var lat = p.y;
51553  /* Forward equations
51554    -----------------*/
51555  lon = adjust_lon(lon - this.long0);
51556
51557  if (this.sphere) {
51558    if (!this.m) {
51559      lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;
51560    }
51561    else {
51562      var k = this.n * Math.sin(lat);
51563      for (var i = sinu_MAX_ITER; i; --i) {
51564        var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));
51565        lat -= V;
51566        if (Math.abs(V) < EPSLN) {
51567          break;
51568        }
51569      }
51570    }
51571    x = this.a * this.C_x * lon * (this.m + Math.cos(lat));
51572    y = this.a * this.C_y * lat;
51573
51574  }
51575  else {
51576
51577    var s = Math.sin(lat);
51578    var c = Math.cos(lat);
51579    y = this.a * pj_mlfn(lat, s, c, this.en);
51580    x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);
51581  }
51582
51583  p.x = x;
51584  p.y = y;
51585  return p;
51586}
51587
51588function sinu_inverse(p) {
51589  var lat, temp, lon, s;
51590
51591  p.x -= this.x0;
51592  lon = p.x / this.a;
51593  p.y -= this.y0;
51594  lat = p.y / this.a;
51595
51596  if (this.sphere) {
51597    lat /= this.C_y;
51598    lon = lon / (this.C_x * (this.m + Math.cos(lat)));
51599    if (this.m) {
51600      lat = asinz((this.m * lat + Math.sin(lat)) / this.n);
51601    }
51602    else if (this.n !== 1) {
51603      lat = asinz(Math.sin(lat) / this.n);
51604    }
51605    lon = adjust_lon(lon + this.long0);
51606    lat = adjust_lat(lat);
51607  }
51608  else {
51609    lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);
51610    s = Math.abs(lat);
51611    if (s < HALF_PI) {
51612      s = Math.sin(lat);
51613      temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));
51614      //temp = this.long0 + p.x / (this.a * Math.cos(lat));
51615      lon = adjust_lon(temp);
51616    }
51617    else if ((s - EPSLN) < HALF_PI) {
51618      lon = this.long0;
51619    }
51620  }
51621  p.x = lon;
51622  p.y = lat;
51623  return p;
51624}
51625
51626var sinu_names = ["Sinusoidal", "sinu"];
51627/* harmony default export */ const sinu = ({
51628  init: sinu_init,
51629  forward: sinu_forward,
51630  inverse: sinu_inverse,
51631  names: sinu_names
51632});
51633
51634;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/moll.js
51635
51636function moll_init() {}
51637
51638/* Mollweide forward equations--mapping lat,long to x,y
51639    ----------------------------------------------------*/
51640function moll_forward(p) {
51641
51642  /* Forward equations
51643      -----------------*/
51644  var lon = p.x;
51645  var lat = p.y;
51646
51647  var delta_lon = adjust_lon(lon - this.long0);
51648  var theta = lat;
51649  var con = Math.PI * Math.sin(lat);
51650
51651  /* Iterate using the Newton-Raphson method to find theta
51652      -----------------------------------------------------*/
51653  while (true) {
51654    var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));
51655    theta += delta_theta;
51656    if (Math.abs(delta_theta) < EPSLN) {
51657      break;
51658    }
51659  }
51660  theta /= 2;
51661
51662  /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting"
51663       this is done here because of precision problems with "cos(theta)"
51664       --------------------------------------------------------------------------*/
51665  if (Math.PI / 2 - Math.abs(lat) < EPSLN) {
51666    delta_lon = 0;
51667  }
51668  var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;
51669  var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;
51670
51671  p.x = x;
51672  p.y = y;
51673  return p;
51674}
51675
51676function moll_inverse(p) {
51677  var theta;
51678  var arg;
51679
51680  /* Inverse equations
51681      -----------------*/
51682  p.x -= this.x0;
51683  p.y -= this.y0;
51684  arg = p.y / (1.4142135623731 * this.a);
51685
51686  /* Because of division by zero problems, 'arg' can not be 1.  Therefore
51687       a number very close to one is used instead.
51688       -------------------------------------------------------------------*/
51689  if (Math.abs(arg) > 0.999999999999) {
51690    arg = 0.999999999999;
51691  }
51692  theta = Math.asin(arg);
51693  var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));
51694  if (lon < (-Math.PI)) {
51695    lon = -Math.PI;
51696  }
51697  if (lon > Math.PI) {
51698    lon = Math.PI;
51699  }
51700  arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;
51701  if (Math.abs(arg) > 1) {
51702    arg = 1;
51703  }
51704  var lat = Math.asin(arg);
51705
51706  p.x = lon;
51707  p.y = lat;
51708  return p;
51709}
51710
51711var moll_names = ["Mollweide", "moll"];
51712/* harmony default export */ const moll = ({
51713  init: moll_init,
51714  forward: moll_forward,
51715  inverse: moll_inverse,
51716  names: moll_names
51717});
51718
51719;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/eqdc.js
51720
51721
51722
51723
51724
51725
51726
51727
51728
51729
51730
51731function eqdc_init() {
51732
51733  /* Place parameters in static storage for common use
51734      -------------------------------------------------*/
51735  // Standard Parallels cannot be equal and on opposite sides of the equator
51736  if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
51737    return;
51738  }
51739  this.lat2 = this.lat2 || this.lat1;
51740  this.temp = this.b / this.a;
51741  this.es = 1 - Math.pow(this.temp, 2);
51742  this.e = Math.sqrt(this.es);
51743  this.e0 = e0fn(this.es);
51744  this.e1 = e1fn(this.es);
51745  this.e2 = e2fn(this.es);
51746  this.e3 = e3fn(this.es);
51747
51748  this.sinphi = Math.sin(this.lat1);
51749  this.cosphi = Math.cos(this.lat1);
51750
51751  this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);
51752  this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);
51753
51754  if (Math.abs(this.lat1 - this.lat2) < EPSLN) {
51755    this.ns = this.sinphi;
51756  }
51757  else {
51758    this.sinphi = Math.sin(this.lat2);
51759    this.cosphi = Math.cos(this.lat2);
51760    this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);
51761    this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);
51762    this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);
51763  }
51764  this.g = this.ml1 + this.ms1 / this.ns;
51765  this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
51766  this.rh = this.a * (this.g - this.ml0);
51767}
51768
51769/* Equidistant Conic forward equations--mapping lat,long to x,y
51770  -----------------------------------------------------------*/
51771function eqdc_forward(p) {
51772  var lon = p.x;
51773  var lat = p.y;
51774  var rh1;
51775
51776  /* Forward equations
51777      -----------------*/
51778  if (this.sphere) {
51779    rh1 = this.a * (this.g - lat);
51780  }
51781  else {
51782    var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);
51783    rh1 = this.a * (this.g - ml);
51784  }
51785  var theta = this.ns * adjust_lon(lon - this.long0);
51786  var x = this.x0 + rh1 * Math.sin(theta);
51787  var y = this.y0 + this.rh - rh1 * Math.cos(theta);
51788  p.x = x;
51789  p.y = y;
51790  return p;
51791}
51792
51793/* Inverse equations
51794  -----------------*/
51795function eqdc_inverse(p) {
51796  p.x -= this.x0;
51797  p.y = this.rh - p.y + this.y0;
51798  var con, rh1, lat, lon;
51799  if (this.ns >= 0) {
51800    rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
51801    con = 1;
51802  }
51803  else {
51804    rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
51805    con = -1;
51806  }
51807  var theta = 0;
51808  if (rh1 !== 0) {
51809    theta = Math.atan2(con * p.x, con * p.y);
51810  }
51811
51812  if (this.sphere) {
51813    lon = adjust_lon(this.long0 + theta / this.ns);
51814    lat = adjust_lat(this.g - rh1 / this.a);
51815    p.x = lon;
51816    p.y = lat;
51817    return p;
51818  }
51819  else {
51820    var ml = this.g - rh1 / this.a;
51821    lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);
51822    lon = adjust_lon(this.long0 + theta / this.ns);
51823    p.x = lon;
51824    p.y = lat;
51825    return p;
51826  }
51827
51828}
51829
51830var eqdc_names = ["Equidistant_Conic", "eqdc"];
51831/* harmony default export */ const eqdc = ({
51832  init: eqdc_init,
51833  forward: eqdc_forward,
51834  inverse: eqdc_inverse,
51835  names: eqdc_names
51836});
51837
51838;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/vandg.js
51839
51840
51841
51842
51843
51844
51845/* Initialize the Van Der Grinten projection
51846  ----------------------------------------*/
51847function vandg_init() {
51848  //this.R = 6370997; //Radius of earth
51849  this.R = this.a;
51850}
51851
51852function vandg_forward(p) {
51853
51854  var lon = p.x;
51855  var lat = p.y;
51856
51857  /* Forward equations
51858    -----------------*/
51859  var dlon = adjust_lon(lon - this.long0);
51860  var x, y;
51861
51862  if (Math.abs(lat) <= EPSLN) {
51863    x = this.x0 + this.R * dlon;
51864    y = this.y0;
51865  }
51866  var theta = asinz(2 * Math.abs(lat / Math.PI));
51867  if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {
51868    x = this.x0;
51869    if (lat >= 0) {
51870      y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);
51871    }
51872    else {
51873      y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);
51874    }
51875    //  return(OK);
51876  }
51877  var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));
51878  var asq = al * al;
51879  var sinth = Math.sin(theta);
51880  var costh = Math.cos(theta);
51881
51882  var g = costh / (sinth + costh - 1);
51883  var gsq = g * g;
51884  var m = g * (2 / sinth - 1);
51885  var msq = m * m;
51886  var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);
51887  if (dlon < 0) {
51888    con = -con;
51889  }
51890  x = this.x0 + con;
51891  //con = Math.abs(con / (Math.PI * this.R));
51892  var q = asq + g;
51893  con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);
51894  if (lat >= 0) {
51895    //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
51896    y = this.y0 + con;
51897  }
51898  else {
51899    //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
51900    y = this.y0 - con;
51901  }
51902  p.x = x;
51903  p.y = y;
51904  return p;
51905}
51906
51907/* Van Der Grinten inverse equations--mapping x,y to lat/long
51908  ---------------------------------------------------------*/
51909function vandg_inverse(p) {
51910  var lon, lat;
51911  var xx, yy, xys, c1, c2, c3;
51912  var a1;
51913  var m1;
51914  var con;
51915  var th1;
51916  var d;
51917
51918  /* inverse equations
51919    -----------------*/
51920  p.x -= this.x0;
51921  p.y -= this.y0;
51922  con = Math.PI * this.R;
51923  xx = p.x / con;
51924  yy = p.y / con;
51925  xys = xx * xx + yy * yy;
51926  c1 = -Math.abs(yy) * (1 + xys);
51927  c2 = c1 - 2 * yy * yy + xx * xx;
51928  c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;
51929  d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;
51930  a1 = (c1 - c2 * c2 / 3 / c3) / c3;
51931  m1 = 2 * Math.sqrt(-a1 / 3);
51932  con = ((3 * d) / a1) / m1;
51933  if (Math.abs(con) > 1) {
51934    if (con >= 0) {
51935      con = 1;
51936    }
51937    else {
51938      con = -1;
51939    }
51940  }
51941  th1 = Math.acos(con) / 3;
51942  if (p.y >= 0) {
51943    lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
51944  }
51945  else {
51946    lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
51947  }
51948
51949  if (Math.abs(xx) < EPSLN) {
51950    lon = this.long0;
51951  }
51952  else {
51953    lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);
51954  }
51955
51956  p.x = lon;
51957  p.y = lat;
51958  return p;
51959}
51960
51961var vandg_names = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"];
51962/* harmony default export */ const vandg = ({
51963  init: vandg_init,
51964  forward: vandg_forward,
51965  inverse: vandg_inverse,
51966  names: vandg_names
51967});
51968
51969;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/aeqd.js
51970
51971
51972
51973
51974
51975
51976
51977
51978
51979
51980
51981
51982
51983
51984function aeqd_init() {
51985  this.sin_p12 = Math.sin(this.lat0);
51986  this.cos_p12 = Math.cos(this.lat0);
51987}
51988
51989function aeqd_forward(p) {
51990  var lon = p.x;
51991  var lat = p.y;
51992  var sinphi = Math.sin(p.y);
51993  var cosphi = Math.cos(p.y);
51994  var dlon = adjust_lon(lon - this.long0);
51995  var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;
51996  if (this.sphere) {
51997    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
51998      //North Pole case
51999      p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);
52000      p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);
52001      return p;
52002    }
52003    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
52004      //South Pole case
52005      p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);
52006      p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);
52007      return p;
52008    }
52009    else {
52010      //default case
52011      cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);
52012      c = Math.acos(cos_c);
52013      kp = c ? c / Math.sin(c) : 1;
52014      p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);
52015      p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));
52016      return p;
52017    }
52018  }
52019  else {
52020    e0 = e0fn(this.es);
52021    e1 = e1fn(this.es);
52022    e2 = e2fn(this.es);
52023    e3 = e3fn(this.es);
52024    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
52025      //North Pole case
52026      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
52027      Ml = this.a * mlfn(e0, e1, e2, e3, lat);
52028      p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);
52029      p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);
52030      return p;
52031    }
52032    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
52033      //South Pole case
52034      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
52035      Ml = this.a * mlfn(e0, e1, e2, e3, lat);
52036      p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);
52037      p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);
52038      return p;
52039    }
52040    else {
52041      //Default case
52042      tanphi = sinphi / cosphi;
52043      Nl1 = gN(this.a, this.e, this.sin_p12);
52044      Nl = gN(this.a, this.e, sinphi);
52045      psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));
52046      Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));
52047      if (Az === 0) {
52048        s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
52049      }
52050      else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {
52051        s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
52052      }
52053      else {
52054        s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));
52055      }
52056      G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);
52057      H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);
52058      GH = G * H;
52059      Hs = H * H;
52060      s2 = s * s;
52061      s3 = s2 * s;
52062      s4 = s3 * s;
52063      s5 = s4 * s;
52064      c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);
52065      p.x = this.x0 + c * Math.sin(Az);
52066      p.y = this.y0 + c * Math.cos(Az);
52067      return p;
52068    }
52069  }
52070
52071
52072}
52073
52074function aeqd_inverse(p) {
52075  p.x -= this.x0;
52076  p.y -= this.y0;
52077  var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;
52078  if (this.sphere) {
52079    rh = Math.sqrt(p.x * p.x + p.y * p.y);
52080    if (rh > (2 * HALF_PI * this.a)) {
52081      return;
52082    }
52083    z = rh / this.a;
52084
52085    sinz = Math.sin(z);
52086    cosz = Math.cos(z);
52087
52088    lon = this.long0;
52089    if (Math.abs(rh) <= EPSLN) {
52090      lat = this.lat0;
52091    }
52092    else {
52093      lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);
52094      con = Math.abs(this.lat0) - HALF_PI;
52095      if (Math.abs(con) <= EPSLN) {
52096        if (this.lat0 >= 0) {
52097          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
52098        }
52099        else {
52100          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
52101        }
52102      }
52103      else {
52104        /*con = cosz - this.sin_p12 * Math.sin(lat);
52105        if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {
52106          //no-op, just keep the lon value as is
52107        } else {
52108          var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));
52109          lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));
52110        }*/
52111        lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));
52112      }
52113    }
52114
52115    p.x = lon;
52116    p.y = lat;
52117    return p;
52118  }
52119  else {
52120    e0 = e0fn(this.es);
52121    e1 = e1fn(this.es);
52122    e2 = e2fn(this.es);
52123    e3 = e3fn(this.es);
52124    if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
52125      //North pole case
52126      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
52127      rh = Math.sqrt(p.x * p.x + p.y * p.y);
52128      M = Mlp - rh;
52129      lat = imlfn(M / this.a, e0, e1, e2, e3);
52130      lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
52131      p.x = lon;
52132      p.y = lat;
52133      return p;
52134    }
52135    else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
52136      //South pole case
52137      Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
52138      rh = Math.sqrt(p.x * p.x + p.y * p.y);
52139      M = rh - Mlp;
52140
52141      lat = imlfn(M / this.a, e0, e1, e2, e3);
52142      lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
52143      p.x = lon;
52144      p.y = lat;
52145      return p;
52146    }
52147    else {
52148      //default case
52149      rh = Math.sqrt(p.x * p.x + p.y * p.y);
52150      Az = Math.atan2(p.x, p.y);
52151      N1 = gN(this.a, this.e, this.sin_p12);
52152      cosAz = Math.cos(Az);
52153      tmp = this.e * this.cos_p12 * cosAz;
52154      A = -tmp * tmp / (1 - this.es);
52155      B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);
52156      D = rh / N1;
52157      Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;
52158      F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;
52159      psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);
52160      lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));
52161      sinpsi = Math.sin(psi);
52162      lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));
52163      p.x = lon;
52164      p.y = lat;
52165      return p;
52166    }
52167  }
52168
52169}
52170
52171var aeqd_names = ["Azimuthal_Equidistant", "aeqd"];
52172/* harmony default export */ const aeqd = ({
52173  init: aeqd_init,
52174  forward: aeqd_forward,
52175  inverse: aeqd_inverse,
52176  names: aeqd_names
52177});
52178
52179;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/ortho.js
52180
52181
52182
52183
52184function ortho_init() {
52185  //double temp;      /* temporary variable    */
52186
52187  /* Place parameters in static storage for common use
52188      -------------------------------------------------*/
52189  this.sin_p14 = Math.sin(this.lat0);
52190  this.cos_p14 = Math.cos(this.lat0);
52191}
52192
52193/* Orthographic forward equations--mapping lat,long to x,y
52194    ---------------------------------------------------*/
52195function ortho_forward(p) {
52196  var sinphi, cosphi; /* sin and cos value        */
52197  var dlon; /* delta longitude value      */
52198  var coslon; /* cos of longitude        */
52199  var ksp; /* scale factor          */
52200  var g, x, y;
52201  var lon = p.x;
52202  var lat = p.y;
52203  /* Forward equations
52204      -----------------*/
52205  dlon = adjust_lon(lon - this.long0);
52206
52207  sinphi = Math.sin(lat);
52208  cosphi = Math.cos(lat);
52209
52210  coslon = Math.cos(dlon);
52211  g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
52212  ksp = 1;
52213  if ((g > 0) || (Math.abs(g) <= EPSLN)) {
52214    x = this.a * ksp * cosphi * Math.sin(dlon);
52215    y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
52216  }
52217  p.x = x;
52218  p.y = y;
52219  return p;
52220}
52221
52222function ortho_inverse(p) {
52223  var rh; /* height above ellipsoid      */
52224  var z; /* angle          */
52225  var sinz, cosz; /* sin of z and cos of z      */
52226  var con;
52227  var lon, lat;
52228  /* Inverse equations
52229      -----------------*/
52230  p.x -= this.x0;
52231  p.y -= this.y0;
52232  rh = Math.sqrt(p.x * p.x + p.y * p.y);
52233  z = asinz(rh / this.a);
52234
52235  sinz = Math.sin(z);
52236  cosz = Math.cos(z);
52237
52238  lon = this.long0;
52239  if (Math.abs(rh) <= EPSLN) {
52240    lat = this.lat0;
52241    p.x = lon;
52242    p.y = lat;
52243    return p;
52244  }
52245  lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);
52246  con = Math.abs(this.lat0) - HALF_PI;
52247  if (Math.abs(con) <= EPSLN) {
52248    if (this.lat0 >= 0) {
52249      lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
52250    }
52251    else {
52252      lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
52253    }
52254    p.x = lon;
52255    p.y = lat;
52256    return p;
52257  }
52258  lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));
52259  p.x = lon;
52260  p.y = lat;
52261  return p;
52262}
52263
52264var ortho_names = ["ortho"];
52265/* harmony default export */ const ortho = ({
52266  init: ortho_init,
52267  forward: ortho_forward,
52268  inverse: ortho_inverse,
52269  names: ortho_names
52270});
52271
52272;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/qsc.js
52273// QSC projection rewritten from the original PROJ4
52274// https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c
52275
52276
52277
52278/* constants */
52279var FACE_ENUM = {
52280    FRONT: 1,
52281    RIGHT: 2,
52282    BACK: 3,
52283    LEFT: 4,
52284    TOP: 5,
52285    BOTTOM: 6
52286};
52287
52288var AREA_ENUM = {
52289    AREA_0: 1,
52290    AREA_1: 2,
52291    AREA_2: 3,
52292    AREA_3: 4
52293};
52294
52295function qsc_init() {
52296
52297  this.x0 = this.x0 || 0;
52298  this.y0 = this.y0 || 0;
52299  this.lat0 = this.lat0 || 0;
52300  this.long0 = this.long0 || 0;
52301  this.lat_ts = this.lat_ts || 0;
52302  this.title = this.title || "Quadrilateralized Spherical Cube";
52303
52304  /* Determine the cube face from the center of projection. */
52305  if (this.lat0 >= HALF_PI - FORTPI / 2.0) {
52306    this.face = FACE_ENUM.TOP;
52307  } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {
52308    this.face = FACE_ENUM.BOTTOM;
52309  } else if (Math.abs(this.long0) <= FORTPI) {
52310    this.face = FACE_ENUM.FRONT;
52311  } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {
52312    this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;
52313  } else {
52314    this.face = FACE_ENUM.BACK;
52315  }
52316
52317  /* Fill in useful values for the ellipsoid <-> sphere shift
vendor: 5,209 bytes, lines 52318-52478
52318   * described in [LK12]. */
52319  if (this.es !== 0) {
52320    this.one_minus_f = 1 - (this.a - this.b) / this.a;
52321    this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;
52322  }
52323}
52324
52325// QSC forward equations--mapping lat,long to x,y
52326// -----------------------------------------------------------------
52327function qsc_forward(p) {
52328  var xy = {x: 0, y: 0};
52329  var lat, lon;
52330  var theta, phi;
52331  var t, mu;
52332  /* nu; */
52333  var area = {value: 0};
52334
52335  // move lon according to projection's lon
52336  p.x -= this.long0;
52337
52338  /* Convert the geodetic latitude to a geocentric latitude.
52339   * This corresponds to the shift from the ellipsoid to the sphere
52340   * described in [LK12]. */
52341  if (this.es !== 0) {//if (P->es != 0) {
52342    lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));
52343  } else {
52344    lat = p.y;
52345  }
52346
52347  /* Convert the input lat, lon into theta, phi as used by QSC.
52348   * This depends on the cube face and the area on it.
52349   * For the top and bottom face, we can compute theta and phi
52350   * directly from phi, lam. For the other faces, we must use
52351   * unit sphere cartesian coordinates as an intermediate step. */
52352  lon = p.x; //lon = lp.lam;
52353  if (this.face === FACE_ENUM.TOP) {
52354    phi = HALF_PI - lat;
52355    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
52356      area.value = AREA_ENUM.AREA_0;
52357      theta = lon - HALF_PI;
52358    } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {
52359      area.value = AREA_ENUM.AREA_1;
52360      theta = (lon > 0.0 ? lon - SPI : lon + SPI);
52361    } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {
52362      area.value = AREA_ENUM.AREA_2;
52363      theta = lon + HALF_PI;
52364    } else {
52365      area.value = AREA_ENUM.AREA_3;
52366      theta = lon;
52367    }
52368  } else if (this.face === FACE_ENUM.BOTTOM) {
52369    phi = HALF_PI + lat;
52370    if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
52371      area.value = AREA_ENUM.AREA_0;
52372      theta = -lon + HALF_PI;
52373    } else if (lon < FORTPI && lon >= -FORTPI) {
52374      area.value = AREA_ENUM.AREA_1;
52375      theta = -lon;
52376    } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {
52377      area.value = AREA_ENUM.AREA_2;
52378      theta = -lon - HALF_PI;
52379    } else {
52380      area.value = AREA_ENUM.AREA_3;
52381      theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);
52382    }
52383  } else {
52384    var q, r, s;
52385    var sinlat, coslat;
52386    var sinlon, coslon;
52387
52388    if (this.face === FACE_ENUM.RIGHT) {
52389      lon = qsc_shift_lon_origin(lon, +HALF_PI);
52390    } else if (this.face === FACE_ENUM.BACK) {
52391      lon = qsc_shift_lon_origin(lon, +SPI);
52392    } else if (this.face === FACE_ENUM.LEFT) {
52393      lon = qsc_shift_lon_origin(lon, -HALF_PI);
52394    }
52395    sinlat = Math.sin(lat);
52396    coslat = Math.cos(lat);
52397    sinlon = Math.sin(lon);
52398    coslon = Math.cos(lon);
52399    q = coslat * coslon;
52400    r = coslat * sinlon;
52401    s = sinlat;
52402
52403    if (this.face === FACE_ENUM.FRONT) {
52404      phi = Math.acos(q);
52405      theta = qsc_fwd_equat_face_theta(phi, s, r, area);
52406    } else if (this.face === FACE_ENUM.RIGHT) {
52407      phi = Math.acos(r);
52408      theta = qsc_fwd_equat_face_theta(phi, s, -q, area);
52409    } else if (this.face === FACE_ENUM.BACK) {
52410      phi = Math.acos(-q);
52411      theta = qsc_fwd_equat_face_theta(phi, s, -r, area);
52412    } else if (this.face === FACE_ENUM.LEFT) {
52413      phi = Math.acos(-r);
52414      theta = qsc_fwd_equat_face_theta(phi, s, q, area);
52415    } else {
52416      /* Impossible */
52417      phi = theta = 0;
52418      area.value = AREA_ENUM.AREA_0;
52419    }
52420  }
52421
52422  /* Compute mu and nu for the area of definition.
52423   * For mu, see Eq. (3-21) in [OL76], but note the typos:
52424   * compare with Eq. (3-14). For nu, see Eq. (3-38). */
52425  mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));
52426  t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));
52427
52428  /* Apply the result to the real area. */
52429  if (area.value === AREA_ENUM.AREA_1) {
52430    mu += HALF_PI;
52431  } else if (area.value === AREA_ENUM.AREA_2) {
52432    mu += SPI;
52433  } else if (area.value === AREA_ENUM.AREA_3) {
52434    mu += 1.5 * SPI;
52435  }
52436
52437  /* Now compute x, y from mu and nu */
52438  xy.x = t * Math.cos(mu);
52439  xy.y = t * Math.sin(mu);
52440  xy.x = xy.x * this.a + this.x0;
52441  xy.y = xy.y * this.a + this.y0;
52442
52443  p.x = xy.x;
52444  p.y = xy.y;
52445  return p;
52446}
52447
52448// QSC inverse equations--mapping x,y to lat/long
52449// -----------------------------------------------------------------
52450function qsc_inverse(p) {
52451  var lp = {lam: 0, phi: 0};
52452  var mu, nu, cosmu, tannu;
52453  var tantheta, theta, cosphi, phi;
52454  var t;
52455  var area = {value: 0};
52456
52457  /* de-offset */
52458  p.x = (p.x - this.x0) / this.a;
52459  p.y = (p.y - this.y0) / this.a;
52460
52461  /* Convert the input x, y to the mu and nu angles as used by QSC.
52462   * This depends on the area of the cube face. */
52463  nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));
52464  mu = Math.atan2(p.y, p.x);
52465  if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {
52466    area.value = AREA_ENUM.AREA_0;
52467  } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {
52468    area.value = AREA_ENUM.AREA_1;
52469    mu -= HALF_PI;
52470  } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {
52471    area.value = AREA_ENUM.AREA_2;
52472    mu = (mu < 0.0 ? mu + SPI : mu - SPI);
52473  } else {
52474    area.value = AREA_ENUM.AREA_3;
52475    mu += HALF_PI;
52476  }
52477
52478  /* Compute phi and theta for the area of definition.
vendor: 4,827 bytes, lines 52479-52639
52479   * The inverse projection is not described in the original paper, but some
52480   * good hints can be found here (as of 2011-12-14):
52481   * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302
52482   * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */
52483  t = (SPI / 12) * Math.tan(mu);
52484  tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));
52485  theta = Math.atan(tantheta);
52486  cosmu = Math.cos(mu);
52487  tannu = Math.tan(nu);
52488  cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));
52489  if (cosphi < -1) {
52490    cosphi = -1;
52491  } else if (cosphi > +1) {
52492    cosphi = +1;
52493  }
52494
52495  /* Apply the result to the real area on the cube face.
52496   * For the top and bottom face, we can compute phi and lam directly.
52497   * For the other faces, we must use unit sphere cartesian coordinates
52498   * as an intermediate step. */
52499  if (this.face === FACE_ENUM.TOP) {
52500    phi = Math.acos(cosphi);
52501    lp.phi = HALF_PI - phi;
52502    if (area.value === AREA_ENUM.AREA_0) {
52503      lp.lam = theta + HALF_PI;
52504    } else if (area.value === AREA_ENUM.AREA_1) {
52505      lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);
52506    } else if (area.value === AREA_ENUM.AREA_2) {
52507      lp.lam = theta - HALF_PI;
52508    } else /* area.value == AREA_ENUM.AREA_3 */ {
52509      lp.lam = theta;
52510    }
52511  } else if (this.face === FACE_ENUM.BOTTOM) {
52512    phi = Math.acos(cosphi);
52513    lp.phi = phi - HALF_PI;
52514    if (area.value === AREA_ENUM.AREA_0) {
52515      lp.lam = -theta + HALF_PI;
52516    } else if (area.value === AREA_ENUM.AREA_1) {
52517      lp.lam = -theta;
52518    } else if (area.value === AREA_ENUM.AREA_2) {
52519      lp.lam = -theta - HALF_PI;
52520    } else /* area.value == AREA_ENUM.AREA_3 */ {
52521      lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);
52522    }
52523  } else {
52524    /* Compute phi and lam via cartesian unit sphere coordinates. */
52525    var q, r, s;
52526    q = cosphi;
52527    t = q * q;
52528    if (t >= 1) {
52529      s = 0;
52530    } else {
52531      s = Math.sqrt(1 - t) * Math.sin(theta);
52532    }
52533    t += s * s;
52534    if (t >= 1) {
52535      r = 0;
52536    } else {
52537      r = Math.sqrt(1 - t);
52538    }
52539    /* Rotate q,r,s into the correct area. */
52540    if (area.value === AREA_ENUM.AREA_1) {
52541      t = r;
52542      r = -s;
52543      s = t;
52544    } else if (area.value === AREA_ENUM.AREA_2) {
52545      r = -r;
52546      s = -s;
52547    } else if (area.value === AREA_ENUM.AREA_3) {
52548      t = r;
52549      r = s;
52550      s = -t;
52551    }
52552    /* Rotate q,r,s into the correct cube face. */
52553    if (this.face === FACE_ENUM.RIGHT) {
52554      t = q;
52555      q = -r;
52556      r = t;
52557    } else if (this.face === FACE_ENUM.BACK) {
52558      q = -q;
52559      r = -r;
52560    } else if (this.face === FACE_ENUM.LEFT) {
52561      t = q;
52562      q = r;
52563      r = -t;
52564    }
52565    /* Now compute phi and lam from the unit sphere coordinates. */
52566    lp.phi = Math.acos(-s) - HALF_PI;
52567    lp.lam = Math.atan2(r, q);
52568    if (this.face === FACE_ENUM.RIGHT) {
52569      lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);
52570    } else if (this.face === FACE_ENUM.BACK) {
52571      lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);
52572    } else if (this.face === FACE_ENUM.LEFT) {
52573      lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);
52574    }
52575  }
52576
52577  /* Apply the shift from the sphere to the ellipsoid as described
52578   * in [LK12]. */
52579  if (this.es !== 0) {
52580    var invert_sign;
52581    var tanphi, xa;
52582    invert_sign = (lp.phi < 0 ? 1 : 0);
52583    tanphi = Math.tan(lp.phi);
52584    xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);
52585    lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));
52586    if (invert_sign) {
52587      lp.phi = -lp.phi;
52588    }
52589  }
52590
52591  lp.lam += this.long0;
52592  p.x = lp.lam;
52593  p.y = lp.phi;
52594  return p;
52595}
52596
52597/* Helper function for forward projection: compute the theta angle
52598 * and determine the area number. */
52599function qsc_fwd_equat_face_theta(phi, y, x, area) {
52600  var theta;
52601  if (phi < EPSLN) {
52602    area.value = AREA_ENUM.AREA_0;
52603    theta = 0.0;
52604  } else {
52605    theta = Math.atan2(y, x);
52606    if (Math.abs(theta) <= FORTPI) {
52607      area.value = AREA_ENUM.AREA_0;
52608    } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {
52609      area.value = AREA_ENUM.AREA_1;
52610      theta -= HALF_PI;
52611    } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {
52612      area.value = AREA_ENUM.AREA_2;
52613      theta = (theta >= 0.0 ? theta - SPI : theta + SPI);
52614    } else {
52615      area.value = AREA_ENUM.AREA_3;
52616      theta += HALF_PI;
52617    }
52618  }
52619  return theta;
52620}
52621
52622/* Helper function: shift the longitude. */
52623function qsc_shift_lon_origin(lon, offset) {
52624  var slon = lon + offset;
52625  if (slon < -SPI) {
52626    slon += TWO_PI;
52627  } else if (slon > +SPI) {
52628    slon -= TWO_PI;
52629  }
52630  return slon;
52631}
52632
52633var qsc_names = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"];
52634/* harmony default export */ const qsc = ({
52635  init: qsc_init,
52636  forward: qsc_forward,
52637  inverse: qsc_inverse,
52638  names: qsc_names
52639}
vendor: 1,883 bytes, lines 52639-52683
52639);
52640
52641
52642;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/robin.js
52643// Robinson projection
52644// Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c
52645// Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039
52646
52647
52648
52649
52650var COEFS_X = [
52651    [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],
52652    [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],
52653    [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],
52654    [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],
52655    [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],
52656    [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],
52657    [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],
52658    [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],
52659    [0.9216, -0.00467746, -0.00010457, 4.81243e-06],
52660    [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],
52661    [0.8679, -0.00609363, -0.000113898, 3.32484e-06],
52662    [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],
52663    [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],
52664    [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],
52665    [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],
52666    [0.6732, -0.00986209, -0.000199569, 1.91974e-05],
52667    [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],
52668    [0.5722, -0.00906601, 0.000182, 6.24051e-06],
52669    [0.5322, -0.00677797, 0.000275608, 6.24051e-06]
52670];
52671
52672var COEFS_Y = [
52673    [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],
52674    [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],
52675    [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],
52676    [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],
52677    [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],
52678    [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],
52679    [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],
52680    [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],
52681    [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],
52682    [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],
52683    [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],
vendor: 4,317 bytes, lines 52684-52850
52684    [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],
52685    [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],
52686    [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],
52687    [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],
52688    [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],
52689    [0.9394, 0.00840947, -0.000192841, -4.2106e-06],
52690    [0.9761, 0.00616527, -0.000256, -4.2106e-06],
52691    [1.0000, 0.00328947, -0.000319159, -4.2106e-06]
52692];
52693
52694var FXC = 0.8487;
52695var FYC = 1.3523;
52696var C1 = R2D/5; // rad to 5-degree interval
52697var RC1 = 1/C1;
52698var NODES = 18;
52699
52700var poly3_val = function(coefs, x) {
52701    return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));
52702};
52703
52704var poly3_der = function(coefs, x) {
52705    return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);
52706};
52707
52708function newton_rapshon(f_df, start, max_err, iters) {
52709    var x = start;
52710    for (; iters; --iters) {
52711        var upd = f_df(x);
52712        x -= upd;
52713        if (Math.abs(upd) < max_err) {
52714            break;
52715        }
52716    }
52717    return x;
52718}
52719
52720function robin_init() {
52721    this.x0 = this.x0 || 0;
52722    this.y0 = this.y0 || 0;
52723    this.long0 = this.long0 || 0;
52724    this.es = 0;
52725    this.title = this.title || "Robinson";
52726}
52727
52728function robin_forward(ll) {
52729    var lon = adjust_lon(ll.x - this.long0);
52730
52731    var dphi = Math.abs(ll.y);
52732    var i = Math.floor(dphi * C1);
52733    if (i < 0) {
52734        i = 0;
52735    } else if (i >= NODES) {
52736        i = NODES - 1;
52737    }
52738    dphi = R2D * (dphi - RC1 * i);
52739    var xy = {
52740        x: poly3_val(COEFS_X[i], dphi) * lon,
52741        y: poly3_val(COEFS_Y[i], dphi)
52742    };
52743    if (ll.y < 0) {
52744        xy.y = -xy.y;
52745    }
52746
52747    xy.x = xy.x * this.a * FXC + this.x0;
52748    xy.y = xy.y * this.a * FYC + this.y0;
52749    return xy;
52750}
52751
52752function robin_inverse(xy) {
52753    var ll = {
52754        x: (xy.x - this.x0) / (this.a * FXC),
52755        y: Math.abs(xy.y - this.y0) / (this.a * FYC)
52756    };
52757
52758    if (ll.y >= 1) { // pathologic case
52759        ll.x /= COEFS_X[NODES][0];
52760        ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;
52761    } else {
52762        // find table interval
52763        var i = Math.floor(ll.y * NODES);
52764        if (i < 0) {
52765            i = 0;
52766        } else if (i >= NODES) {
52767            i = NODES - 1;
52768        }
52769        for (;;) {
52770            if (COEFS_Y[i][0] > ll.y) {
52771                --i;
52772            } else if (COEFS_Y[i+1][0] <= ll.y) {
52773                ++i;
52774            } else {
52775                break;
52776            }
52777        }
52778        // linear interpolation in 5 degree interval
52779        var coefs = COEFS_Y[i];
52780        var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);
52781        // find t so that poly3_val(coefs, t) = ll.y
52782        t = newton_rapshon(function(x) {
52783            return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);
52784        }, t, EPSLN, 100);
52785
52786        ll.x /= poly3_val(COEFS_X[i], t);
52787        ll.y = (5 * i + t) * D2R;
52788        if (xy.y < 0) {
52789            ll.y = -ll.y;
52790        }
52791    }
52792
52793    ll.x = adjust_lon(ll.x + this.long0);
52794    return ll;
52795}
52796
52797var robin_names = ["Robinson", "robin"];
52798/* harmony default export */ const robin = ({
52799  init: robin_init,
52800  forward: robin_forward,
52801  inverse: robin_inverse,
52802  names: robin_names
52803});
52804
52805;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/geocent.js
52806
52807
52808function geocent_init() {
52809    this.name = 'geocent';
52810
52811}
52812
52813function geocent_forward(p) {
52814    var point = geodeticToGeocentric(p, this.es, this.a);
52815    return point;
52816}
52817
52818function geocent_inverse(p) {
52819    var point = geocentricToGeodetic(p, this.es, this.a, this.b);
52820    return point;
52821}
52822
52823var geocent_names = ["Geocentric", 'geocentric', "geocent", "Geocent"];
52824/* harmony default export */ const geocent = ({
52825    init: geocent_init,
52826    forward: geocent_forward,
52827    inverse: geocent_inverse,
52828    names: geocent_names
52829});
52830;// CONCATENATED MODULE: ./node_modules/proj4/lib/projections/tpers.js
52831
52832var mode = {
52833  N_POLE: 0,
52834  S_POLE: 1,
52835  EQUIT: 2,
52836  OBLIQ: 3
52837};
52838
52839
52840
52841
52842var params = {
52843  h:     { def: 100000, num: true },           // default is Karman line, no default in PROJ.7
52844  azi:   { def: 0, num: true, degrees: true }, // default is North
52845  tilt:  { def: 0, num: true, degrees: true }, // default is Nadir
52846  long0: { def: 0, num: true },                // default is Greenwich, conversion to rad is automatic
52847  lat0:  { def: 0, num: true }                 // default is Equator, conversion to rad is automatic
52848};
52849
52850function tpers_init() {
vendor: 4,742 bytes, lines 52851-53057
52851  Object.keys(params).forEach(function (p) {
52852    if (typeof this[p] === "undefined") {
52853      this[p] = params[p].def;
52854    } else if (params[p].num && isNaN(this[p])) {
52855      throw new Error("Invalid parameter value, must be numeric " + p + " = " + this[p]);
52856    } else if (params[p].num) {
52857      this[p] = parseFloat(this[p]);
52858    }
52859    if (params[p].degrees) {
52860      this[p] = this[p] * D2R;
52861    }
52862  }.bind(this));
52863
52864  if (Math.abs((Math.abs(this.lat0) - HALF_PI)) < EPSLN) {
52865    this.mode = this.lat0 < 0 ? mode.S_POLE : mode.N_POLE;
52866  } else if (Math.abs(this.lat0) < EPSLN) {
52867    this.mode = mode.EQUIT;
52868  } else {
52869    this.mode = mode.OBLIQ;
52870    this.sinph0 = Math.sin(this.lat0);
52871    this.cosph0 = Math.cos(this.lat0);
52872  }
52873
52874  this.pn1 = this.h / this.a;  // Normalize relative to the Earth's radius
52875
52876  if (this.pn1 <= 0 || this.pn1 > 1e10) {
52877    throw new Error("Invalid height");
52878  }
52879  
52880  this.p = 1 + this.pn1;
52881  this.rp = 1 / this.p;
52882  this.h1 = 1 / this.pn1;
52883  this.pfact = (this.p + 1) * this.h1;
52884  this.es = 0;
52885
52886  var omega = this.tilt;
52887  var gamma = this.azi;
52888  this.cg = Math.cos(gamma);
52889  this.sg = Math.sin(gamma);
52890  this.cw = Math.cos(omega);
52891  this.sw = Math.sin(omega);
52892}
52893
52894function tpers_forward(p) {
52895  p.x -= this.long0;
52896  var sinphi = Math.sin(p.y);
52897  var cosphi = Math.cos(p.y);
52898  var coslam = Math.cos(p.x);
52899  var x, y;
52900  switch (this.mode) {
52901    case mode.OBLIQ:
52902      y = this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
52903      break;
52904    case mode.EQUIT:
52905      y = cosphi * coslam;
52906      break;
52907    case mode.S_POLE:
52908      y = -sinphi;
52909      break;
52910    case mode.N_POLE:
52911      y = sinphi;
52912      break;
52913  }
52914  y = this.pn1 / (this.p - y);
52915  x = y * cosphi * Math.sin(p.x);
52916
52917  switch (this.mode) {
52918    case mode.OBLIQ:
52919      y *= this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
52920      break;
52921    case mode.EQUIT:
52922      y *= sinphi;
52923      break;
52924    case mode.N_POLE:
52925      y *= -(cosphi * coslam);
52926      break;
52927    case mode.S_POLE:
52928      y *= cosphi * coslam;
52929      break;
52930  }
52931
52932  // Tilt 
52933  var yt, ba;
52934  yt = y * this.cg + x * this.sg;
52935  ba = 1 / (yt * this.sw * this.h1 + this.cw);
52936  x = (x * this.cg - y * this.sg) * this.cw * ba;
52937  y = yt * ba;
52938
52939  p.x = x * this.a;
52940  p.y = y * this.a;
52941  return p;
52942}
52943
52944function tpers_inverse(p) {
52945  p.x /= this.a;
52946  p.y /= this.a;
52947  var r = { x: p.x, y: p.y };
52948
52949  // Un-Tilt
52950  var bm, bq, yt;
52951  yt = 1 / (this.pn1 - p.y * this.sw);
52952  bm = this.pn1 * p.x * yt;
52953  bq = this.pn1 * p.y * this.cw * yt;
52954  p.x = bm * this.cg + bq * this.sg;
52955  p.y = bq * this.cg - bm * this.sg;
52956
52957  var rh = hypot(p.x, p.y);
52958  if (Math.abs(rh) < EPSLN) {
52959    r.x = 0;
52960    r.y = p.y;
52961  } else {
52962    var cosz, sinz;
52963    sinz = 1 - rh * rh * this.pfact;
52964    sinz = (this.p - Math.sqrt(sinz)) / (this.pn1 / rh + rh / this.pn1);
52965    cosz = Math.sqrt(1 - sinz * sinz);
52966    switch (this.mode) {
52967      case mode.OBLIQ:
52968        r.y = Math.asin(cosz * this.sinph0 + p.y * sinz * this.cosph0 / rh);
52969        p.y = (cosz - this.sinph0 * Math.sin(r.y)) * rh;
52970        p.x *= sinz * this.cosph0;
52971        break;
52972      case mode.EQUIT:
52973        r.y = Math.asin(p.y * sinz / rh);
52974        p.y = cosz * rh;
52975        p.x *= sinz;
52976        break;
52977      case mode.N_POLE:
52978        r.y = Math.asin(cosz);
52979        p.y = -p.y;
52980        break;
52981      case mode.S_POLE:
52982        r.y = -Math.asin(cosz);
52983        break;
52984    }
52985    r.x = Math.atan2(p.x, p.y);
52986  }
52987
52988  p.x = r.x + this.long0;
52989  p.y = r.y;
52990  return p;
52991}
52992
52993var tpers_names = ["Tilted_Perspective", "tpers"];
52994/* harmony default export */ const tpers = ({
52995  init: tpers_init,
52996  forward: tpers_forward,
52997  inverse: tpers_inverse,
52998  names: tpers_names
52999});
53000
53001;// CONCATENATED MODULE: ./node_modules/proj4/projs.js
53002
53003
53004
53005
53006
53007
53008
53009
53010
53011
53012
53013
53014
53015
53016
53017
53018
53019
53020
53021
53022
53023
53024
53025
53026
53027
53028
53029
53030/* harmony default export */ function proj4_projs(proj4){
53031  proj4.Proj.projections.add(tmerc);
53032  proj4.Proj.projections.add(etmerc);
53033  proj4.Proj.projections.add(utm);
53034  proj4.Proj.projections.add(sterea);
53035  proj4.Proj.projections.add(stere);
53036  proj4.Proj.projections.add(somerc);
53037  proj4.Proj.projections.add(omerc);
53038  proj4.Proj.projections.add(lcc);
53039  proj4.Proj.projections.add(krovak);
53040  proj4.Proj.projections.add(cass);
53041  proj4.Proj.projections.add(laea);
53042  proj4.Proj.projections.add(aea);
53043  proj4.Proj.projections.add(gnom);
53044  proj4.Proj.projections.add(cea);
53045  proj4.Proj.projections.add(eqc);
53046  proj4.Proj.projections.add(poly);
53047  proj4.Proj.projections.add(nzmg);
53048  proj4.Proj.projections.add(mill);
53049  proj4.Proj.projections.add(sinu);
53050  proj4.Proj.projections.add(moll);
53051  proj4.Proj.projections.add(eqdc);
53052  proj4.Proj.projections.add(vandg);
53053  proj4.Proj.projections.add(aeqd);
53054  proj4.Proj.projections.add(ortho);
53055  proj4.Proj.projections.add(qsc);
53056  proj4.Proj.projections.add(robin);
53057  proj4.Proj.projections.add(geocent);
53058  proj4.Proj.projections.add(tpers);
53059}
53060;// CONCATENATED MODULE: ./node_modules/proj4/lib/index.js
53061
53062
53063
53064
53065
53066
53067
53068
53069
53070
53071core.defaultDatum = 'WGS84'; //default datum
53072core.Proj = Proj;
53073core.WGS84 = new core.Proj('WGS84');
53074core.Point = lib_Point;
53075core.toPoint = toPoint;
53076core.defs = lib_defs;
53077core.nadgrid = nadgrid;
53078core.transform = transform;
53079core.mgrs = mgrs;
53080core.version = '__VERSION__';
53081proj4_projs(core);
53082/* harmony default export */ const lib = (core);
53083
53084
53085/***/ }),
53086
53087/***/ 41751:
53088/***/ ((module, exports, __webpack_require__) => {
53089
53090var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (factory) {
53091	var L, proj4;
53092	if (true) {
53093		// AMD
53094		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(45243), __webpack_require__(96280)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
53095		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
53096		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
53097		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
53098	} else {}
53099}(function (L, proj4) {
53100	if (proj4.__esModule && proj4.default) {
53101		// If proj4 was bundled as an ES6 module, unwrap it to get
53102		// to the actual main proj4 object.
53103		// See discussion in https://github.com/kartena/Proj4Leaflet/pull/147
53104		proj4 = proj4.default;
53105	}
53106 
53107	L.Proj = {};
53108
53109	L.Proj._isProj4Obj = function(a) {
53110		return (typeof a.inverse !== 'undefined' &&
53111			typeof a.forward !== 'undefined');
53112	};
53113
53114	L.Proj.Projection = L.Class.extend({
53115		initialize: function(code, def, bounds) {
53116			var isP4 = L.Proj._isProj4Obj(code);
53117			this._proj = isP4 ? code : this._projFromCodeDef(code, def);
53118			this.bounds = isP4 ? def : bounds;
53119		},
53120
53121		project: function (latlng) {
53122			var point = this._proj.forward([latlng.lng, latlng.lat]);
53123			return new L.Point(point[0], point[1]);
53124		},
53125
53126		unproject: function (point, unbounded) {
53127			var point2 = this._proj.inverse([point.x, point.y]);
53128			return new L.LatLng(point2[1], point2[0], unbounded);
53129		},
53130
53131		_projFromCodeDef: function(code, def) {
53132			if (def) {
53133				proj4.defs(code, def);
53134			} else if (proj4.defs[code] === undefined) {
53135				var urn = code.split(':');
53136				if (urn.length > 3) {
53137					code = urn[urn.length - 3] + ':' + urn[urn.length - 1];
53138				}
53139				if (proj4.defs[code] === undefined) {
53140					throw 'No projection definition for code ' + code;
53141				}
53142			}
53143
53144			return proj4(code);
53145		}
53146	});
53147
53148	L.Proj.CRS = L.Class.extend({
53149		includes: L.CRS,
53150
53151		options: {
53152			transformation: new L.Transformation(1, 0, -1, 0)
53153		},
53154
53155		initialize: function(a, b, c) {
53156			var code,
53157			    proj,
53158			    def,
53159			    options;
53160
53161			if (L.Proj._isProj4Obj(a)) {
53162				proj = a;
53163				code = proj.srsCode;
53164				options = b || {};
53165
53166				this.projection = new L.Proj.Projection(proj, options.bounds);
53167			} else {
53168				code = a;
53169				def = b;
53170				options = c || {};
53171				this.projection = new L.Proj.Projection(code, def, options.bounds);
53172			}
53173
53174			L.Util.setOptions(this, options);
53175			this.code = code;
53176			this.transformation = this.options.transformation;
53177
53178			if (this.options.origin) {
53179				this.transformation =
53180					new L.Transformation(1, -this.options.origin[0],
53181						-1, this.options.origin[1]);
53182			}
53183
53184			if (this.options.scales) {
53185				this._scales = this.options.scales;
53186			} else if (this.options.resolutions) {
53187				this._scales = [];
53188				for (var i = this.options.resolutions.length - 1; i >= 0; i--) {
53189					if (this.options.resolutions[i]) {
53190						this._scales[i] = 1 / this.options.resolutions[i];
53191					}
53192				}
53193			}
53194
53195			this.infinite = !this.options.bounds;
53196
53197		},
53198
53199		scale: function(zoom) {
53200			var iZoom = Math.floor(zoom),
53201				baseScale,
53202				nextScale,
53203				scaleDiff,
53204				zDiff;
53205			if (zoom === iZoom) {
53206				return this._scales[zoom];
53207			} else {
53208				// Non-integer zoom, interpolate
53209				baseScale = this._scales[iZoom];
53210				nextScale = this._scales[iZoom + 1];
53211				scaleDiff = nextScale - baseScale;
53212				zDiff = (zoom - iZoom);
53213				return baseScale + scaleDiff * zDiff;
53214			}
53215		},
53216
53217		zoom: function(scale) {
53218			// Find closest number in this._scales, down
53219			var downScale = this._closestElement(this._scales, scale),
53220				downZoom = this._scales.indexOf(downScale),
53221				nextScale,
53222				nextZoom,
53223				scaleDiff;
53224			// Check if scale is downScale => return array index
53225			if (scale === downScale) {
53226				return downZoom;
53227			}
53228			if (downScale === undefined) {
53229				return -Infinity;
53230			}
53231			// Interpolate
53232			nextZoom = downZoom + 1;
53233			nextScale = this._scales[nextZoom];
53234			if (nextScale === undefined) {
53235				return Infinity;
53236			}
53237			scaleDiff = nextScale - downScale;
53238			return (scale - downScale) / scaleDiff + downZoom;
53239		},
53240
53241		distance: L.CRS.Earth.distance,
53242
53243		R: L.CRS.Earth.R,
53244
53245		/* Get the closest lowest element in an array */
53246		_closestElement: function(array, element) {
53247			var low;
53248			for (var i = array.length; i--;) {
53249				if (array[i] <= element && (low === undefined || low < array[i])) {
53250					low = array[i];
53251				}
53252			}
53253			return low;
53254		}
53255	});
53256
53257	L.Proj.GeoJSON = L.GeoJSON.extend({
53258		initialize: function(geojson, options) {
53259			this._callLevel = 0;
53260			L.GeoJSON.prototype.initialize.call(this, geojson, options);
53261		},
53262
53263		addData: function(geojson) {
53264			var crs;
53265
53266			if (geojson) {
53267				if (geojson.crs && geojson.crs.type === 'name') {
53268					crs = new L.Proj.CRS(geojson.crs.properties.name);
53269				} else if (geojson.crs && geojson.crs.type) {
53270					crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code);
53271				}
53272
53273				if (crs !== undefined) {
53274					this.options.coordsToLatLng = function(coords) {
53275						var point = L.point(coords[0], coords[1]);
53276						return crs.projection.unproject(point);
53277					};
53278				}
53279			}
53280
53281			// Base class' addData might call us recursively, but
53282			// CRS shouldn't be cleared in that case, since CRS applies
53283			// to the whole GeoJSON, inluding sub-features.
53284			this._callLevel++;
53285			try {
53286				L.GeoJSON.prototype.addData.call(this, geojson);
53287			} finally {
53288				this._callLevel--;
53289				if (this._callLevel === 0) {
53290					delete this.options.coordsToLatLng;
53291				}
53292			}
53293		}
53294	});
53295
53296	L.Proj.geoJson = function(geojson, options) {
53297		return new L.Proj.GeoJSON(geojson, options);
53298	};
53299
53300	L.Proj.ImageOverlay = L.ImageOverlay.extend({
53301		initialize: function (url, bounds, options) {
53302			L.ImageOverlay.prototype.initialize.call(this, url, null, options);
53303			this._projectedBounds = bounds;
53304		},
53305
53306		// Danger ahead: Overriding internal methods in Leaflet.
53307		// Decided to do this rather than making a copy of L.ImageOverlay
53308		// and doing very tiny modifications to it.
53309		// Future will tell if this was wise or not.
53310		_animateZoom: function (event) {
53311			var scale = this._map.getZoomScale(event.zoom);
53312			var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y);
53313			var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center);
53314
53315			L.DomUtil.setTransform(this._image, offset, scale);
53316		},
53317
53318		_reset: function () {
53319			var zoom = this._map.getZoom();
53320			var pixelOrigin = this._map.getPixelOrigin();
53321			var bounds = L.bounds(
53322				this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin),
53323				this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin)
53324			);
53325			var size = bounds.getSize();
53326
53327			L.DomUtil.setPosition(this._image, bounds.min);
53328			this._image.style.width = size.x + 'px';
53329			this._image.style.height = size.y + 'px';
53330		},
53331
53332		_projectedToNewLayerPoint: function (point, zoom, center) {
53333			var viewHalf = this._map.getSize()._divideBy(2);
53334			var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round();
53335			var topLeft = newTopLeft.add(this._map._getMapPanePos());
53336
53337			return this._transform(point, zoom)._subtract(topLeft);
53338		},
53339
53340		_transform: function (point, zoom) {
53341			var crs = this._map.options.crs;
53342			var transformation = crs.transformation;
53343			var scale = crs.scale(zoom);
53344
53345			return transformation.transform(point, scale);
53346		}
53347	});
53348
53349	L.Proj.imageOverlay = function (url, bounds, options) {
53350		return new L.Proj.ImageOverlay(url, bounds, options);
53351	};
53352
53353	return L.Proj;
53354}));
53355
53356
53357/***/ }),
53358
53359/***/ 35666:
53360/***/ ((module) =>
vendor: 17,269 bytes, lines 53360-53859
53360 {
53361
53362/**
53363 * Copyright (c) 2014-present, Facebook, Inc.
53364 *
53365 * This source code is licensed under the MIT license found in the
53366 * LICENSE file in the root directory of this source tree.
53367 */
53368
53369var runtime = (function (exports) {
53370  "use strict";
53371
53372  var Op = Object.prototype;
53373  var hasOwn = Op.hasOwnProperty;
53374  var undefined; // More compressible than void 0.
53375  var $Symbol = typeof Symbol === "function" ? Symbol : {};
53376  var iteratorSymbol = $Symbol.iterator || "@@iterator";
53377  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
53378  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
53379
53380  function define(obj, key, value) {
53381    Object.defineProperty(obj, key, {
53382      value: value,
53383      enumerable: true,
53384      configurable: true,
53385      writable: true
53386    });
53387    return obj[key];
53388  }
53389  try {
53390    // IE 8 has a broken Object.defineProperty that only works on DOM objects.
53391    define({}, "");
53392  } catch (err) {
53393    define = function(obj, key, value) {
53394      return obj[key] = value;
53395    };
53396  }
53397
53398  function wrap(innerFn, outerFn, self, tryLocsList) {
53399    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
53400    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
53401    var generator = Object.create(protoGenerator.prototype);
53402    var context = new Context(tryLocsList || []);
53403
53404    // The ._invoke method unifies the implementations of the .next,
53405    // .throw, and .return methods.
53406    generator._invoke = makeInvokeMethod(innerFn, self, context);
53407
53408    return generator;
53409  }
53410  exports.wrap = wrap;
53411
53412  // Try/catch helper to minimize deoptimizations. Returns a completion
53413  // record like context.tryEntries[i].completion. This interface could
53414  // have been (and was previously) designed to take a closure to be
53415  // invoked without arguments, but in all the cases we care about we
53416  // already have an existing method we want to call, so there's no need
53417  // to create a new function object. We can even get away with assuming
53418  // the method takes exactly one argument, since that happens to be true
53419  // in every case, so we don't have to touch the arguments object. The
53420  // only additional allocation required is the completion record, which
53421  // has a stable shape and so hopefully should be cheap to allocate.
53422  function tryCatch(fn, obj, arg) {
53423    try {
53424      return { type: "normal", arg: fn.call(obj, arg) };
53425    } catch (err) {
53426      return { type: "throw", arg: err };
53427    }
53428  }
53429
53430  var GenStateSuspendedStart = "suspendedStart";
53431  var GenStateSuspendedYield = "suspendedYield";
53432  var GenStateExecuting = "executing";
53433  var GenStateCompleted = "completed";
53434
53435  // Returning this object from the innerFn has the same effect as
53436  // breaking out of the dispatch switch statement.
53437  var ContinueSentinel = {};
53438
53439  // Dummy constructor functions that we use as the .constructor and
53440  // .constructor.prototype properties for functions that return Generator
53441  // objects. For full spec compliance, you may wish to configure your
53442  // minifier not to mangle the names of these two functions.
53443  function Generator() {}
53444  function GeneratorFunction() {}
53445  function GeneratorFunctionPrototype() {}
53446
53447  // This is a polyfill for %IteratorPrototype% for environments that
53448  // don't natively support it.
53449  var IteratorPrototype = {};
53450  define(IteratorPrototype, iteratorSymbol, function () {
53451    return this;
53452  });
53453
53454  var getProto = Object.getPrototypeOf;
53455  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
53456  if (NativeIteratorPrototype &&
53457      NativeIteratorPrototype !== Op &&
53458      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
53459    // This environment has a native %IteratorPrototype%; use it instead
53460    // of the polyfill.
53461    IteratorPrototype = NativeIteratorPrototype;
53462  }
53463
53464  var Gp = GeneratorFunctionPrototype.prototype =
53465    Generator.prototype = Object.create(IteratorPrototype);
53466  GeneratorFunction.prototype = GeneratorFunctionPrototype;
53467  define(Gp, "constructor", GeneratorFunctionPrototype);
53468  define(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
53469  GeneratorFunction.displayName = define(
53470    GeneratorFunctionPrototype,
53471    toStringTagSymbol,
53472    "GeneratorFunction"
53473  );
53474
53475  // Helper for defining the .next, .throw, and .return methods of the
53476  // Iterator interface in terms of a single ._invoke method.
53477  function defineIteratorMethods(prototype) {
53478    ["next", "throw", "return"].forEach(function(method) {
53479      define(prototype, method, function(arg) {
53480        return this._invoke(method, arg);
53481      });
53482    });
53483  }
53484
53485  exports.isGeneratorFunction = function(genFun) {
53486    var ctor = typeof genFun === "function" && genFun.constructor;
53487    return ctor
53488      ? ctor === GeneratorFunction ||
53489        // For the native GeneratorFunction constructor, the best we can
53490        // do is to check its .name property.
53491        (ctor.displayName || ctor.name) === "GeneratorFunction"
53492      : false;
53493  };
53494
53495  exports.mark = function(genFun) {
53496    if (Object.setPrototypeOf) {
53497      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
53498    } else {
53499      genFun.__proto__ = GeneratorFunctionPrototype;
53500      define(genFun, toStringTagSymbol, "GeneratorFunction");
53501    }
53502    genFun.prototype = Object.create(Gp);
53503    return genFun;
53504  };
53505
53506  // Within the body of any async function, `await x` is transformed to
53507  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
53508  // `hasOwn.call(value, "__await")` to determine if the yielded value is
53509  // meant to be awaited.
53510  exports.awrap = function(arg) {
53511    return { __await: arg };
53512  };
53513
53514  function AsyncIterator(generator, PromiseImpl) {
53515    function invoke(method, arg, resolve, reject) {
53516      var record = tryCatch(generator[method], generator, arg);
53517      if (record.type === "throw") {
53518        reject(record.arg);
53519      } else {
53520        var result = record.arg;
53521        var value = result.value;
53522        if (value &&
53523            typeof value === "object" &&
53524            hasOwn.call(value, "__await")) {
53525          return PromiseImpl.resolve(value.__await).then(function(value) {
53526            invoke("next", value, resolve, reject);
53527          }, function(err) {
53528            invoke("throw", err, resolve, reject);
53529          });
53530        }
53531
53532        return PromiseImpl.resolve(value).then(function(unwrapped) {
53533          // When a yielded Promise is resolved, its final value becomes
53534          // the .value of the Promise<{value,done}> result for the
53535          // current iteration.
53536          result.value = unwrapped;
53537          resolve(result);
53538        }, function(error) {
53539          // If a rejected Promise was yielded, throw the rejection back
53540          // into the async generator function so it can be handled there.
53541          return invoke("throw", error, resolve, reject);
53542        });
53543      }
53544    }
53545
53546    var previousPromise;
53547
53548    function enqueue(method, arg) {
53549      function callInvokeWithMethodAndArg() {
53550        return new PromiseImpl(function(resolve, reject) {
53551          invoke(method, arg, resolve, reject);
53552        });
53553      }
53554
53555      return previousPromise =
53556        // If enqueue has been called before, then we want to wait until
53557        // all previous Promises have been resolved before calling invoke,
53558        // so that results are always delivered in the correct order. If
53559        // enqueue has not been called before, then it is important to
53560        // call invoke immediately, without waiting on a callback to fire,
53561        // so that the async generator function has the opportunity to do
53562        // any necessary setup in a predictable way. This predictability
53563        // is why the Promise constructor synchronously invokes its
53564        // executor callback, and why async functions synchronously
53565        // execute code before the first await. Since we implement simple
53566        // async functions in terms of async generators, it is especially
53567        // important to get this right, even though it requires care.
53568        previousPromise ? previousPromise.then(
53569          callInvokeWithMethodAndArg,
53570          // Avoid propagating failures to Promises returned by later
53571          // invocations of the iterator.
53572          callInvokeWithMethodAndArg
53573        ) : callInvokeWithMethodAndArg();
53574    }
53575
53576    // Define the unified helper method that is used to implement .next,
53577    // .throw, and .return (see defineIteratorMethods).
53578    this._invoke = enqueue;
53579  }
53580
53581  defineIteratorMethods(AsyncIterator.prototype);
53582  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
53583    return this;
53584  });
53585  exports.AsyncIterator = AsyncIterator;
53586
53587  // Note that simple async functions are implemented on top of
53588  // AsyncIterator objects; they just return a Promise for the value of
53589  // the final result produced by the iterator.
53590  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
53591    if (PromiseImpl === void 0) PromiseImpl = Promise;
53592
53593    var iter = new AsyncIterator(
53594      wrap(innerFn, outerFn, self, tryLocsList),
53595      PromiseImpl
53596    );
53597
53598    return exports.isGeneratorFunction(outerFn)
53599      ? iter // If outerFn is a generator, return the full iterator.
53600      : iter.next().then(function(result) {
53601          return result.done ? result.value : iter.next();
53602        });
53603  };
53604
53605  function makeInvokeMethod(innerFn, self, context) {
53606    var state = GenStateSuspendedStart;
53607
53608    return function invoke(method, arg) {
53609      if (state === GenStateExecuting) {
53610        throw new Error("Generator is already running");
53611      }
53612
53613      if (state === GenStateCompleted) {
53614        if (method === "throw") {
53615          throw arg;
53616        }
53617
53618        // Be forgiving, per 25.3.3.3.3 of the spec:
53619        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
53620        return doneResult();
53621      }
53622
53623      context.method = method;
53624      context.arg = arg;
53625
53626      while (true) {
53627        var delegate = context.delegate;
53628        if (delegate) {
53629          var delegateResult = maybeInvokeDelegate(delegate, context);
53630          if (delegateResult) {
53631            if (delegateResult === ContinueSentinel) continue;
53632            return delegateResult;
53633          }
53634        }
53635
53636        if (context.method === "next") {
53637          // Setting context._sent for legacy support of Babel's
53638          // function.sent implementation.
53639          context.sent = context._sent = context.arg;
53640
53641        } else if (context.method === "throw") {
53642          if (state === GenStateSuspendedStart) {
53643            state = GenStateCompleted;
53644            throw context.arg;
53645          }
53646
53647          context.dispatchException(context.arg);
53648
53649        } else if (context.method === "return") {
53650          context.abrupt("return", context.arg);
53651        }
53652
53653        state = GenStateExecuting;
53654
53655        var record = tryCatch(innerFn, self, context);
53656        if (record.type === "normal") {
53657          // If an exception is thrown from innerFn, we leave state ===
53658          // GenStateExecuting and loop back for another invocation.
53659          state = context.done
53660            ? GenStateCompleted
53661            : GenStateSuspendedYield;
53662
53663          if (record.arg === ContinueSentinel) {
53664            continue;
53665          }
53666
53667          return {
53668            value: record.arg,
53669            done: context.done
53670          };
53671
53672        } else if (record.type === "throw") {
53673          state = GenStateCompleted;
53674          // Dispatch the exception by looping back around to the
53675          // context.dispatchException(context.arg) call above.
53676          context.method = "throw";
53677          context.arg = record.arg;
53678        }
53679      }
53680    };
53681  }
53682
53683  // Call delegate.iterator[context.method](context.arg) and handle the
53684  // result, either by returning a { value, done } result from the
53685  // delegate iterator, or by modifying context.method and context.arg,
53686  // setting context.delegate to null, and returning the ContinueSentinel.
53687  function maybeInvokeDelegate(delegate, context) {
53688    var method = delegate.iterator[context.method];
53689    if (method === undefined) {
53690      // A .throw or .return when the delegate iterator has no .throw
53691      // method always terminates the yield* loop.
53692      context.delegate = null;
53693
53694      if (context.method === "throw") {
53695        // Note: ["return"] must be used for ES3 parsing compatibility.
53696        if (delegate.iterator["return"]) {
53697          // If the delegate iterator has a return method, give it a
53698          // chance to clean up.
53699          context.method = "return";
53700          context.arg = undefined;
53701          maybeInvokeDelegate(delegate, context);
53702
53703          if (context.method === "throw") {
53704            // If maybeInvokeDelegate(context) changed context.method from
53705            // "return" to "throw", let that override the TypeError below.
53706            return ContinueSentinel;
53707          }
53708        }
53709
53710        context.method = "throw";
53711        context.arg = new TypeError(
53712          "The iterator does not provide a 'throw' method");
53713      }
53714
53715      return ContinueSentinel;
53716    }
53717
53718    var record = tryCatch(method, delegate.iterator, context.arg);
53719
53720    if (record.type === "throw") {
53721      context.method = "throw";
53722      context.arg = record.arg;
53723      context.delegate = null;
53724      return ContinueSentinel;
53725    }
53726
53727    var info = record.arg;
53728
53729    if (! info) {
53730      context.method = "throw";
53731      context.arg = new TypeError("iterator result is not an object");
53732      context.delegate = null;
53733      return ContinueSentinel;
53734    }
53735
53736    if (info.done) {
53737      // Assign the result of the finished delegate to the temporary
53738      // variable specified by delegate.resultName (see delegateYield).
53739      context[delegate.resultName] = info.value;
53740
53741      // Resume execution at the desired location (see delegateYield).
53742      context.next = delegate.nextLoc;
53743
53744      // If context.method was "throw" but the delegate handled the
53745      // exception, let the outer generator proceed normally. If
53746      // context.method was "next", forget context.arg since it has been
53747      // "consumed" by the delegate iterator. If context.method was
53748      // "return", allow the original .return call to continue in the
53749      // outer generator.
53750      if (context.method !== "return") {
53751        context.method = "next";
53752        context.arg = undefined;
53753      }
53754
53755    } else {
53756      // Re-yield the result returned by the delegate method.
53757      return info;
53758    }
53759
53760    // The delegate iterator is finished, so forget it and continue with
53761    // the outer generator.
53762    context.delegate = null;
53763    return ContinueSentinel;
53764  }
53765
53766  // Define Generator.prototype.{next,throw,return} in terms of the
53767  // unified ._invoke helper method.
53768  defineIteratorMethods(Gp);
53769
53770  define(Gp, toStringTagSymbol, "Generator");
53771
53772  // A Generator should always return itself as the iterator object when the
53773  // @@iterator function is called on it. Some browsers' implementations of the
53774  // iterator prototype chain incorrectly implement this, causing the Generator
53775  // object to not be returned from this call. This ensures that doesn't happen.
53776  // See https://github.com/facebook/regenerator/issues/274 for more details.
53777  define(Gp, iteratorSymbol, function() {
53778    return this;
53779  });
53780
53781  define(Gp, "toString", function() {
53782    return "[object Generator]";
53783  });
53784
53785  function pushTryEntry(locs) {
53786    var entry = { tryLoc: locs[0] };
53787
53788    if (1 in locs) {
53789      entry.catchLoc = locs[1];
53790    }
53791
53792    if (2 in locs) {
53793      entry.finallyLoc = locs[2];
53794      entry.afterLoc = locs[3];
53795    }
53796
53797    this.tryEntries.push(entry);
53798  }
53799
53800  function resetTryEntry(entry) {
53801    var record = entry.completion || {};
53802    record.type = "normal";
53803    delete record.arg;
53804    entry.completion = record;
53805  }
53806
53807  function Context(tryLocsList) {
53808    // The root entry object (effectively a try statement without a catch
53809    // or a finally block) gives us a place to store values thrown from
53810    // locations where there is no enclosing try statement.
53811    this.tryEntries = [{ tryLoc: "root" }];
53812    tryLocsList.forEach(pushTryEntry, this);
53813    this.reset(true);
53814  }
53815
53816  exports.keys = function(object) {
53817    var keys = [];
53818    for (var key in object) {
53819      keys.push(key);
53820    }
53821    keys.reverse();
53822
53823    // Rather than returning an object with a next method, we keep
53824    // things simple and return the next function itself.
53825    return function next() {
53826      while (keys.length) {
53827        var key = keys.pop();
53828        if (key in object) {
53829          next.value = key;
53830          next.done = false;
53831          return next;
53832        }
53833      }
53834
53835      // To avoid creating an additional object, we just hang the .value
53836      // and .done properties off the next function object itself. This
53837      // also ensures that the minifier will not anonymize the function.
53838      next.done = true;
53839      return next;
53840    };
53841  };
53842
53843  function values(iterable) {
53844    if (iterable) {
53845      var iteratorMethod = iterable[iteratorSymbol];
53846      if (iteratorMethod) {
53847        return iteratorMethod.call(iterable);
53848      }
53849
53850      if (typeof iterable.next === "function") {
53851        return iterable;
53852      }
53853
53854      if (!isNaN(iterable.length)) {
53855        var i = -1, next = function next() {
53856          while (++i < iterable.length) {
53857            if (hasOwn.call(iterable, i)) {
53858              next.value = iterable[i];
53859              next.done = false;
vendor: 6,560 bytes, lines 53860-54094
53860              return next;
53861            }
53862          }
53863
53864          next.value = undefined;
53865          next.done = true;
53866
53867          return next;
53868        };
53869
53870        return next.next = next;
53871      }
53872    }
53873
53874    // Return an iterator with no values.
53875    return { next: doneResult };
53876  }
53877  exports.values = values;
53878
53879  function doneResult() {
53880    return { value: undefined, done: true };
53881  }
53882
53883  Context.prototype = {
53884    constructor: Context,
53885
53886    reset: function(skipTempReset) {
53887      this.prev = 0;
53888      this.next = 0;
53889      // Resetting context._sent for legacy support of Babel's
53890      // function.sent implementation.
53891      this.sent = this._sent = undefined;
53892      this.done = false;
53893      this.delegate = null;
53894
53895      this.method = "next";
53896      this.arg = undefined;
53897
53898      this.tryEntries.forEach(resetTryEntry);
53899
53900      if (!skipTempReset) {
53901        for (var name in this) {
53902          // Not sure about the optimal order of these conditions:
53903          if (name.charAt(0) === "t" &&
53904              hasOwn.call(this, name) &&
53905              !isNaN(+name.slice(1))) {
53906            this[name] = undefined;
53907          }
53908        }
53909      }
53910    },
53911
53912    stop: function() {
53913      this.done = true;
53914
53915      var rootEntry = this.tryEntries[0];
53916      var rootRecord = rootEntry.completion;
53917      if (rootRecord.type === "throw") {
53918        throw rootRecord.arg;
53919      }
53920
53921      return this.rval;
53922    },
53923
53924    dispatchException: function(exception) {
53925      if (this.done) {
53926        throw exception;
53927      }
53928
53929      var context = this;
53930      function handle(loc, caught) {
53931        record.type = "throw";
53932        record.arg = exception;
53933        context.next = loc;
53934
53935        if (caught) {
53936          // If the dispatched exception was caught by a catch block,
53937          // then let that catch block handle the exception normally.
53938          context.method = "next";
53939          context.arg = undefined;
53940        }
53941
53942        return !! caught;
53943      }
53944
53945      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
53946        var entry = this.tryEntries[i];
53947        var record = entry.completion;
53948
53949        if (entry.tryLoc === "root") {
53950          // Exception thrown outside of any try block that could handle
53951          // it, so set the completion value of the entire function to
53952          // throw the exception.
53953          return handle("end");
53954        }
53955
53956        if (entry.tryLoc <= this.prev) {
53957          var hasCatch = hasOwn.call(entry, "catchLoc");
53958          var hasFinally = hasOwn.call(entry, "finallyLoc");
53959
53960          if (hasCatch && hasFinally) {
53961            if (this.prev < entry.catchLoc) {
53962              return handle(entry.catchLoc, true);
53963            } else if (this.prev < entry.finallyLoc) {
53964              return handle(entry.finallyLoc);
53965            }
53966
53967          } else if (hasCatch) {
53968            if (this.prev < entry.catchLoc) {
53969              return handle(entry.catchLoc, true);
53970            }
53971
53972          } else if (hasFinally) {
53973            if (this.prev < entry.finallyLoc) {
53974              return handle(entry.finallyLoc);
53975            }
53976
53977          } else {
53978            throw new Error("try statement without catch or finally");
53979          }
53980        }
53981      }
53982    },
53983
53984    abrupt: function(type, arg) {
53985      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
53986        var entry = this.tryEntries[i];
53987        if (entry.tryLoc <= this.prev &&
53988            hasOwn.call(entry, "finallyLoc") &&
53989            this.prev < entry.finallyLoc) {
53990          var finallyEntry = entry;
53991          break;
53992        }
53993      }
53994
53995      if (finallyEntry &&
53996          (type === "break" ||
53997           type === "continue") &&
53998          finallyEntry.tryLoc <= arg &&
53999          arg <= finallyEntry.finallyLoc) {
54000        // Ignore the finally entry if control is not jumping to a
54001        // location outside the try/catch block.
54002        finallyEntry = null;
54003      }
54004
54005      var record = finallyEntry ? finallyEntry.completion : {};
54006      record.type = type;
54007      record.arg = arg;
54008
54009      if (finallyEntry) {
54010        this.method = "next";
54011        this.next = finallyEntry.finallyLoc;
54012        return ContinueSentinel;
54013      }
54014
54015      return this.complete(record);
54016    },
54017
54018    complete: function(record, afterLoc) {
54019      if (record.type === "throw") {
54020        throw record.arg;
54021      }
54022
54023      if (record.type === "break" ||
54024          record.type === "continue") {
54025        this.next = record.arg;
54026      } else if (record.type === "return") {
54027        this.rval = this.arg = record.arg;
54028        this.method = "return";
54029        this.next = "end";
54030      } else if (record.type === "normal" && afterLoc) {
54031        this.next = afterLoc;
54032      }
54033
54034      return ContinueSentinel;
54035    },
54036
54037    finish: function(finallyLoc) {
54038      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
54039        var entry = this.tryEntries[i];
54040        if (entry.finallyLoc === finallyLoc) {
54041          this.complete(entry.completion, entry.afterLoc);
54042          resetTryEntry(entry);
54043          return ContinueSentinel;
54044        }
54045      }
54046    },
54047
54048    "catch": function(tryLoc) {
54049      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
54050        var entry = this.tryEntries[i];
54051        if (entry.tryLoc === tryLoc) {
54052          var record = entry.completion;
54053          if (record.type === "throw") {
54054            var thrown = record.arg;
54055            resetTryEntry(entry);
54056          }
54057          return thrown;
54058        }
54059      }
54060
54061      // The context.catch method must only be called with a location
54062      // argument that corresponds to a known catch block.
54063      throw new Error("illegal catch attempt");
54064    },
54065
54066    delegateYield: function(iterable, resultName, nextLoc) {
54067      this.delegate = {
54068        iterator: values(iterable),
54069        resultName: resultName,
54070        nextLoc: nextLoc
54071      };
54072
54073      if (this.method === "next") {
54074        // Deliberately forget the last sent value so that we don't
54075        // accidentally pass it on to the delegate.
54076        this.arg = undefined;
54077      }
54078
54079      return ContinueSentinel;
54080    }
54081  };
54082
54083  // Regardless of whether this script is executing as a CommonJS module
54084  // or not, return the runtime object so that we can declare the variable
54085  // regeneratorRuntime in the outer scope, which allows this module to be
54086  // injected easily by `bin/regenerator --include-runtime script.js`.
54087  return exports;
54088
54089}(
54090  // If this script is executing as a CommonJS module, use module.exports
54091  // as the regeneratorRuntime namespace. Otherwise create a new empty
54092  // object. Either way, the resulting object will be used to initialize
54093  // the regeneratorRuntime variable at the top of this file.
54094  
54094 true ? module.exports : 0
54095));
54096
54097try {
54098  regeneratorRuntime = runtime;
54099} catch (accidentalStrictMode) {
54100  // This module should not be running in strict mode, so the above
54101  // assignment should always work unless something is misconfigured. Just
54102  // in case runtime.js accidentally runs in strict mode, in modern engines
54103  // we can explicitly access globalThis. In older engines we can escape
54104  // strict mode using a global Function call. This could conceivably fail
54105  // if a Content Security Policy forbids using Function, but in that case
54106  // the proper solution is to fix the accidental strict mode problem. If
54107  // you've misconfigured your bundler to force strict mode and applied a
54108  // CSP to forbid Function, and you're not willing to fix either of those
54109  // problems, please detail your unique predicament in a GitHub issue.
54110  if (typeof globalThis === "object") {
54111    globalThis.regeneratorRuntime = runtime;
54112  } else {
54113    Function("r", "regeneratorRuntime = r")(runtime);
54114  }
54115}
54116
54117
54118/***/ })
54119
54120/******/ 	});
54121/************************************************************************/
54122/******/ 	// The module cache
54123/******/ 	var __webpack_module_cache__ = {};
54124/******/ 	
54125/******/ 	// The require function
54126/******/ 	function __webpack_require__(moduleId) {
54127/******/ 		// Check if module is in cache
54128/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
54129/******/ 		if (cachedModule !== undefined) {
54130/******/ 			return cachedModule.exports;
54131/******/ 		}
54132/******/ 		// Create a new module (and put it into the cache)
54133/******/ 		var module = __webpack_module_cache__[moduleId] = {
54134/******/ 			// no module.id needed
54135/******/ 			// no module.loaded needed
54136/******/ 			exports: {}
54137/******/ 		};
54138/******/ 	
54139/******/ 		// Execute the module function
54140/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
54141/******/ 	
54142/******/ 		// Return the exports of the module
54143/******/ 		return module.exports;
54144/******/ 	}
54145/******/ 	
54146/************************************************************************/
54147/******/ 	/* webpack/runtime/compat get default export */
54148/******/ 	(() => {
54149/******/ 		// getDefaultExport function for compatibility with non-harmony modules
54150/******/ 		__webpack_require__.n = (module) => {
vendor: 4,331 bytes, lines 54151-54248
54151/******/ 			var getter = module && module.__esModule ?
54152/******/ 				() => (module['default']) :
54153/******/ 				() => (module);
54154/******/ 			__webpack_require__.d(getter, { a: getter });
54155/******/ 			return getter;
54156/******/ 		};
54157/******/ 	})();
54158/******/ 	
54159/******/ 	/* webpack/runtime/define property getters */
54160/******/ 	(() => {
54161/******/ 		// define getter functions for harmony exports
54162/******/ 		__webpack_require__.d = (exports, definition) => {
54163/******/ 			for(var key in definition) {
54164/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
54165/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
54166/******/ 				}
54167/******/ 			}
54168/******/ 		};
54169/******/ 	})();
54170/******/ 	
54171/******/ 	/* webpack/runtime/global */
54172/******/ 	(() => {
54173/******/ 		__webpack_require__.g = (function() {
54174/******/ 			if (typeof globalThis === 'object') return globalThis;
54175/******/ 			try {
54176/******/ 				return this || new Function('return this')();
54177/******/ 			} catch (e) {
54178/******/ 				if (typeof window === 'object') return window;
54179/******/ 			}
54180/******/ 		})();
54181/******/ 	})();
54182/******/ 	
54183/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
54184/******/ 	(() => {
54185/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
54186/******/ 	})();
54187/******/ 	
54188/******/ 	/* webpack/runtime/make namespace object */
54189/******/ 	(() => {
54190/******/ 		// define __esModule on exports
54191/******/ 		__webpack_require__.r = (exports) => {
54192/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
54193/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
54194/******/ 			}
54195/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
54196/******/ 		};
54197/******/ 	})();
54198/******/ 	
54199/******/ 	/* webpack/runtime/publicPath */
54200/******/ 	(() => {
54201/******/ 		__webpack_require__.p = "/themes/user/reinos_maps/dist";
54202/******/ 	})();
54203/******/ 	
54204/************************************************************************/
54205var __webpack_exports__ = {};
54206// This entry need to be wrapped in an IIFE because it need to be in strict mode.
54207(() => {
54208"use strict";
54209
54210// EXTERNAL MODULE: ./node_modules/core-js/stable/index.js
54211var stable = __webpack_require__(28594);
54212// EXTERNAL MODULE: ./node_modules/regenerator-runtime/runtime.js
54213var runtime = __webpack_require__(35666);
54214// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/core.js
54215var core = __webpack_require__(94713);
54216// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/maps/api/api.js
54217var api = __webpack_require__(99161);
54218;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/api/index.js
54219
54220;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/map/getMap.js
54221
54222
54223core/* ReinosMaps.prototype.getMap */.N.prototype.getMap = function (id) {
54224  var cachedMap = this.maps.get(id);
54225
54226  if (cachedMap !== undefined) {
54227    return cachedMap;
54228  }
54229
54230  return false;
54231};
54232// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/index.js + 12 modules
54233var utils = __webpack_require__(76386);
54234// EXTERNAL MODULE: ./node_modules/leaflet/dist/leaflet-src.js
54235var leaflet_src = __webpack_require__(45243);
54236var leaflet_src_default = /*#__PURE__*/__webpack_require__.n(leaflet_src);
54237// EXTERNAL MODULE: ./node_modules/leaflet-openweathermap/leaflet-openweathermap.js
54238var leaflet_openweathermap = __webpack_require__(63494);
54239// EXTERNAL MODULE: ./node_modules/leaflet-fullscreen/dist/Leaflet.fullscreen.js
54240var Leaflet_fullscreen = __webpack_require__(88292);
54241// EXTERNAL MODULE: ./node_modules/leaflet-pegman/leaflet-pegman.js
54242var leaflet_pegman = __webpack_require__(46660);
54243// EXTERNAL MODULE: ./node_modules/leaflet.markercluster/dist/leaflet.markercluster-src.js
54244var leaflet_markercluster_src = __webpack_require__(95732);
54245;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/map/setMap.js
54246function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
54247
54248function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
54248 i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
54249
54250function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
54251
54252
54253
54254
54255
54256
54257
54258
54259
54260core/* ReinosMaps.prototype.setMap */.N.prototype.setMap = function (options) {
54261  //merge default settings with given settings
54262  options = _objectSpread({
54263    'selector': '',
54264    'tiles': '',
54265    'tile_control_position': '',
54266    'zoom': '',
54267    'max_zoom': null,
54268    'min_zoom': null,
54269    'zoom_control': true,
54270    'zoom_control_position': '',
54271    'center': '',
54272    'width': '',
54273    'height': '',
54274    'scroll_wheel': true,
54275    'scale_control': true,
54276    'scale_control_position': '',
54277    'google_styled_map': '',
54278    'marker_cluster': {},
54279    'fit_map': {},
54280    'focus_current_location': false,
54281    'gesture_handling': true,
54282    'weather': {},
54283    'googleStreetview': false,
54284    'crs': 'default',
54285    'fullscreenControl': false
54286  }, options);
54287  var self = this;
54288
54289  var raw_options = _objectSpread({}, options);
54290
54291  var map = {}; //default vars
54292
54293  var lat = self.def.lat;
54294  var lng = self.def.lng; // remove the # from the selector
54295
54296  options.selector = options.selector.replace('#', ''); //turn back the address, input_address and latlng
54297
54298  options.center = (0,utils/* base64Decode */.tV)(options.center);
54299  options.center = options.center.toString(); //override center by setting the center or zoom level
54300
54301  if (options.center !== undefined && options.center !== '') {
54302    options.center = options.center.split(',');
54303
54304    if (options.center.length === 1) {
54305      options.center = options.center[0].split('|');
54306    }
54307
54308    var center = (0,utils/* arrayToLatLng */.kb)((0,utils/* cleanArray */.Rv)([options.center]));
54309    lat = center[0].lat;
54310    lng = center[0].lng;
54311  } //set the width for the div
54312
54313
54314  var element = document.getElementById(options.selector);
54315  element.style.width = options.width;
54316  element.style.height = options.height; // set the zoom
54317
54318  var zoomOptions = {};
54319
54320  if (options.min_zoom !== null) {
54321    zoomOptions.minZoom = options.min_zoom;
54322  }
54323
54324  if (options.max_zoom !== null) {
54325    zoomOptions.maxZoom = options.max_zoom;
54326  } //fire up the map
54327
54328
54329  map.map = leaflet_src_default().map(options.selector, _objectSpread(_objectSpread({
54330    fullscreenControl: options.fullscreenControl,
54331    crs: self.crs.get(options.crs),
54332    center: [lat, lng]
54333  }, zoomOptions), {}, {
54334    zoom: options.zoom,
54335    zoomControl: options.zoom_control,
54336    scrollWheelZoom: options.scroll_wheel,
54337    gestureHandling: options.gesture_handling
54338  })); // or, add to an existing map:
54339  // map.map.addControl(L.Control.Fullscreen());
54340  //save the raw options
54341
54342  map.raw_options = raw_options; //set the positions of the zoom control
54343
54344  if (options.zoom_control) {
54345    map.map.zoomControl.setPosition(options.zoom_control_position);
54346  }
54347
54348  map.scaleControl = null;
54349
54350  if (options.scale_control) {
54351    map.scaleControl = leaflet_src_default().control.scale({
54352      position: options.scale_control_position
54353    }).addTo(map.map);
54354  }
54355
54356  self.addTiles(map, options.tiles, options.google_styled_map, options.tile_control_position); //init weather layers
54357
54358  map.weatherLayers = {};
54359
54360  if (options.weather.layers.length > 0) {
54361    options.weather.layers.forEach(function (value) {
54362      //create the layer
54363      if (typeof (leaflet_src_default()).OWM[value.name] === 'function') {
54364        map.weatherLayers[value.name] = (leaflet_src_default()).OWM[value.name].call(null, {
54365          showLegend: value.legend,
54366          opacity: value.opacity,
54367          appId: (0,utils/* base64Decode */.tV)(options.weather.api)
54368        });
54369      } //add the layer
54370
54371
54372      map.map.addLayer(map.weatherLayers[value.name]);
54373    });
54374  } //focus on the users current location
54375
54376
54377  if (options.focus_current_location) {
54378    self.geolocate({
54379      success: function success(pos) {
54380        map.map.panTo([pos.coords.latitude, pos.coords.longitude]);
54381      }
54382    });
54383  }
54384
54385  if (options.googleStreetview) {
54386    var pegmanControl = new (leaflet_src_default()).Control.Pegman({
54387      position: 'bottomright',
54388      // position of control inside the map
54389      theme: 'leaflet-pegman-v3-default' // or "leaflet-pegman-v3-small"
54390
54391    });
54392    pegmanControl.addTo(map.map);
54393  } //save the marker cluster data
54394
54395
54396  map.marker_cluster = options.marker_cluster; //init the cluster class if needed
54397
54398  if (options.marker_cluster.enabled) {
54399    map.marker_cluster.markers = leaflet_src_default().markerClusterGroup({
54400      showCoverageOnHover: map.marker_cluster.showCoverageOnHover,
54401      zoomToBoundsOnClick: map.marker_cluster.zoomToBoundsOnClick,
54402      spiderfyOnMaxZoom: map.marker_cluster.spiderfyOnMaxZoom,
54403      removeOutsideVisibleBounds: map.marker_cluster.removeOutsideVisibleBounds
54404    });
54405  } // bound stuff, will handle by the API
54406
54407
54408  map.bounds = {};
54409  map.bounds.routes = [];
54409 //routes are infact polylines
54410
54411  map.bounds.markers = [];
54412  map.bounds.circles = [];
54413  map.bounds.rectangles = [];
54414  map.bounds.polylines = [];
54415  map.bounds.polygons = [];
54416  map.bounds.geojson = []; //set the fit
54417
54418  map.fit = {};
54419  map.fit.routes = options.fit_map.routes; //routes are infact polylines
54420
54421  map.fit.markers = options.fit_map.markers;
54422  map.fit.circles = options.fit_map.circles;
54423  map.fit.rectangles = options.fit_map.rectangles;
54424  map.fit.polylines = options.fit_map.polylines;
54425  map.fit.polygons = options.fit_map.polygons;
54426  map.fit.geojson = options.fit_map.geojson;
54427  map.fit.forceZoomOut = options.fit_map.forceZoomOut;
54428  map.fit.forceZoom = options.fit_map.forceZoom; //Add google like overlay
54429
54430  self.addOverlay(map, options); //save to the global object
54431
54432  self.maps.set(options.selector, map); //callback function when all things is ready
54433
54434  setTimeout(function () {
54435    return self.fire('maps.ready');
54436  }, 500);
54437};
54438;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/map/index.js
54439
54440
54441;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/mapData/prepareMapData.js
54442//----------------------------------------------
54443//save marker data to the prepare array
54444//----------------------------------------------
54445
54446
54447core/* ReinosMaps.prototype.prepareMapData */.N.prototype.prepareMapData = function (type, data) {
54448  var self = this; //prepare holders, we save the data first to this array so we can do a bulk add
54449
54450  if (self._prepareMapData === undefined) {
54451    this._prepareMapData = {};
54452  } //check the type name and make sure we add a S to the end
54453  // if(type.slice(-1) !== 's') {
54454  // 	type = type + 's';
54455  // }
54456  //make sure we have a defined object
54457
54458
54459  if (self._prepareMapData[type] === undefined) {
54460    self._prepareMapData[type] = [];
54461  } //save it
54462
54463
54464  self._prepareMapData[type].push(data);
54465};
54466;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/mapData/runPreparedMapData.js
54467function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
54468
54469function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
54470
54471function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
54472
54473function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
54474
54475function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
54476
54477function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
54478
54479//----------------------------------------------
54480//run through the saved prepared markers to add them to the map
54481//----------------------------------------------
54482
54483
54484core/* ReinosMaps.prototype.runPreparedMapData */.N.prototype.runPreparedMapData = function (typeMapData) {
54485  var self = this;
54486  var prepareMapData = {}; //if we call this function with a type, just run that one
54487
54488  if (typeMapData !== undefined && self._prepareMapData[typeMapData] !== undefined) {
54489    //get the data for the specific type
54490    prepareMapData[typeMapData] = self._prepareMapData[typeMapData]; //no result, run through all of the prepared items
54491  } else {
54492    prepareMapData = self._prepareMapData;
54493  } //loop over the types
54494
54495
54496  Object.entries(prepareMapData).forEach(function (_ref) {
54497    var _ref2 = _slicedToArray(_ref, 2),
54498        type = _ref2[0],
54499        data = _ref2[1];
54500
54501    //run the beforeReady event
54502    if (self._firedEvents[type] === undefined) {
54503      self._firedEvents[type + '.beforeReady'] = true;
54504      self.fire(type + '.beforeReady');
54505    } //any result in the array
54506
54507
54508    if (data.length > 0) {
54509      //the method name should be have a uppercase
54510      var method = 'add' + type.charAt(0).toUpperCase() + type.slice(1); //make sure if we have an ending S, we remove it
54511
54512      if (method.slice(-1) === 's') {
54513        method = method.slice(0, -1);
54514      } //get the first one and delete it from the root array
54515
54516
54517      var mapData = data.shift(); //call the api
54518
54519      self.api(method, mapData, function () {
54520        // in the callback we call again, so we can loop over all the data objects
54521        self.runPreparedMapData(type);
54522      }); //no result, run the callback for the ready.type
54523    } else {
54524      //make sure we call it only once
54525      if (self._firedEvents[type] === undefined) {
54526        self._firedEvents[type + '.ready'] = true;
54527        setTimeout(function () {
54528          return self.fire(type + '.ready');
54529        }, 100);
54530      }
54531    }
54532  });
54533};
54534;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/mapData/index.js
54535
54536
54537;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/feature/removeFeature.js
54538function removeFeature_slicedToArray(arr, i) { return removeFeature_arrayWithHoles(arr) || removeFeature_iterableToArrayLimit(arr, i) || removeFeature_unsupportedIterableToArray(arr, i) || removeFeature_nonIterableRest(); }
54539
54540function removeFeature_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
54541
54542function removeFeature_iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
54543
54544function removeFeature_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
54545
54546function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = removeFeature_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
54547
54548function removeFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return removeFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return removeFeature_arrayLikeToArray(o, minLen); }
54549
54550function removeFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
54551
54552//----------------------------------------------
54553//remove single marker
54554//----------------------------------------------
54555
54556
54557core/* ReinosMaps.prototype.removeMarker */.N.prototype.removeMarker = function (mapID, key) {
54558  return this.removeFeature(mapID, 'marker', key);
54559};
54560
54561core/* ReinosMaps.prototype.removeCircle */.N.prototype.removeCircle = function (mapID, key) {
54562  return this.removeFeature(mapID, 'circle', key);
54563};
54564
54565core/* ReinosMaps.prototype.removeRectangle */.N.prototype.removeRectangle = function (mapID, key) {
54566  return this.removeFeature(mapID, 'rectangle', key);
54567};
54568
54569core/* ReinosMaps.prototype.removePolyline */.N.prototype.removePolyline = function (mapID, key) {
54570  return this.removeFeature(mapID, 'polyline', key);
54571};
54572
54573core/* ReinosMaps.prototype.removePolygon */.N.prototype.removePolygon = function (mapID, key) {
54574  return this.removeFeature(mapID, 'polygon', key);
54575};
54576
54577core/* ReinosMaps.prototype.removeFeature */.N.prototype.removeFeature = function (mapID, typeKey, key) {
54578  var self = this; // Make it singular or plural
54579
54580  var singularTypeKey = typeKey.replace(/s$/, '');
54581  var pluralTypeKey = singularTypeKey.slice() + 's';
54582  var cachedItems = self[pluralTypeKey].get(mapID);
54583
54584  if (cachedItems !== undefined) {
54585    var _iterator = _createForOfIteratorHelper(cachedItems.entries()),
54586        _step;
54587
54588    try {
54589      for (_iterator.s(); !(_step = _iterator.n()).done;) {
54590        var _step$value = removeFeature_slicedToArray(_step.value, 2),
54591            index = _step$value[0],
54592            item = _step$value[1];
54593
54594        if (item.keys.has(key)) {
54595          // Remove the item
54596          cachedItems.splice(index, 1); // update the number
54597
54598          cachedItems = cachedItems.map(function (cachedItem) {
54599            cachedItem[singularTypeKey]["".concat(singularTypeKey, "Number")] = cachedItems.length;
54600            return cachedItem;
54601          }); // update the list of items
54602
54603          self[pluralTypeKey].set(mapID, cachedItems); // remove latlng from the cached Set()
54604
54605          if (singularTypeKey === 'marker') {
54606            var latlng = "".concat(item[singularTypeKey].getLatLng().lat, ",").concat(item[singularTypeKey].getLatLng().lng);
54607            self.latlngs["delete"](latlng);
54608          }
54609        }
54610      }
54611    } catch (err) {
54612      _iterator.e(err);
54613    } finally {
54614      _iterator.f();
54615    }
54616  }
54617};
54618;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/feature/saveFeature.js
54619function saveFeature_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
54620
54621//----------------------------------------------
54622//save single marker
54623//----------------------------------------------
54624
54625
54626
54627core/* ReinosMaps.prototype.saveMarker */.N.prototype.saveMarker = function (mapID, marker, keys) {
54628  return this.saveFeature(mapID, 'marker', marker, keys);
54629};
54630
54631core/* ReinosMaps.prototype.saveCircle */.N.prototype.saveCircle = function (mapID, circle, keys) {
54632  return this.saveFeature(mapID, 'circle', circle, keys);
54633};
54634
54635core/* ReinosMaps.prototype.saveRectangle */.N.prototype.saveRectangle = function (mapID, rectangle, keys) {
54636  return this.saveFeature(mapID, 'rectangle', rectangle, keys);
54637};
54638
54639core/* ReinosMaps.prototype.savePolyline */.N.prototype.savePolyline = function (mapID, polyline, keys) {
54640  return this.saveFeature(mapID, 'polyline', polyline, keys);
54641};
54642
54643core/* ReinosMaps.prototype.savePolygon */.N.prototype.savePolygon = function (mapID, polygon, keys) {
54644  return this.saveFeature(mapID, 'polygon', polygon, keys);
54645};
54646
54647core/* ReinosMaps.prototype.saveFeature */.N.prototype.saveFeature = function (mapID, typeKey, featureItem, keys) {
54648  var self = this; // Make it singular or plural
54649
54650  var singularTypeKey = typeKey.replace(/s$/, '');
54651  var pluralTypeKey = singularTypeKey.slice() + 's';
54652  var cachedItems = self[pluralTypeKey].get(mapID);
54653
54654  if (cachedItems === undefined) {
54655    cachedItems = [];
54656    self[pluralTypeKey].set(mapID, cachedItems);
54657  } //set markerNumber
54658
54659
54660  featureItem["".concat(singularTypeKey, "Number")] = cachedItems.length + 1; //set the uuid
54661
54662  featureItem["".concat(singularTypeKey, "UUID")] = (0,utils/* createUUID */.Lk)(); //set the search keys
54663
54664  var searchKeys = new Set([featureItem["".concat(singularTypeKey, "Number")], featureItem["".concat(singularTypeKey, "UUID")]]); //add the extra keys
54665
54666  if (typeof keys === 'string') {
54667    var _keys = keys.split(':');
54668
54669    _keys.forEach(function (_key) {
54670      _key = _key.trim();
54671      searchKeys.add(_key);
54672      searchKeys.add(_key.toLowerCase());
54673      searchKeys.add((0,utils/* replaceAll */.ko)(_key, ' ', '_'));
54674      searchKeys.add((0,utils/* replaceAll */.ko)(_key, ' ', '_').toLowerCase());
54675      searchKeys.add((0,utils/* replaceAll */.ko)(_key, ' ', '-'));
54676      searchKeys.add((0,utils/* replaceAll */.ko)(_key, ' ', '-').toLowerCase());
54677    });
54678  } //set the arrays
54679
54680
54681  cachedItems.push(saveFeature_defineProperty({
54682    keys: searchKeys
54683  }, singularTypeKey, featureItem)); // save the markers
54684
54685  self[pluralTypeKey].set(mapID, cachedItems); //update latlngs collection
54686
54687  if (singularTypeKey === 'marker') {
54688    var latlng = "".concat(featureItem.getLatLng().lat, ",").concat(featureItem.getLatLng().lng);
54689    self.latlngs.add(latlng);
54690  }
54691
54692  return featureItem;
54693};
54694;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/feature/searchFeature.js
54695function searchFeature_createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = searchFeature_unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
54696
54697function searchFeature_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return searchFeature_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return searchFeature_arrayLikeToArray(o, minLen); }
54698
54699function searchFeature_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
54700
54701//----------------------------------------------
54702//set the markers to the arrays
54703//----------------------------------------------
54704
54705
54706core/* ReinosMaps.prototype.searchMarker */.N.prototype.searchMarker = function (mapID, key, multiple) {
54707  return this.searchFeature(mapID, 'marker', key, multiple);
54708};
54709
54710core/* ReinosMaps.prototype.searchCircle */.N.prototype.searchCircle = function (mapID, key, multiple) {
54711  return this.searchFeature(mapID, 'circle', key, multiple);
54712};
54713
54714core/* ReinosMaps.prototype.searchRectangle */.N.prototype.searchRectangle = function (mapID, key, multiple) {
54715  return this.searchFeature(mapID, 'rectangle', key, multiple);
54716};
54717
54718core/* ReinosMaps.prototype.searchPolyline */.N.prototype.searchPolyline = function (mapID, key, multiple) {
54719  return this.searchFeature(mapID, 'polyline', key, multiple);
54720};
54721
54722core/* ReinosMaps.prototype.searchPolygon */.N.prototype.searchPolygon = function (mapID, key, multiple) {
54723  return this.searchFeature(mapID, 'polygon', key, multiple);
54724};
54725
54726core/* ReinosMaps.prototype.searchFeature */.N.prototype.searchFeature = function (mapID, typeKey, 
54726key, multiple) {
54727  multiple = multiple || false;
54728  var self = this;
54729  var returnItems = []; // Make it singular or plural
54730
54731  var singularTypeKey = typeKey.replace(/s$/, '');
54732  var pluralTypeKey = singularTypeKey.slice() + 's'; //loop over the markers
54733
54734  var cachedItems = self[pluralTypeKey].get(mapID);
54735
54736  if (cachedItems !== undefined) {
54737    var _iterator = searchFeature_createForOfIteratorHelper(cachedItems),
54738        _step;
54739
54740    try {
54741      for (_iterator.s(); !(_step = _iterator.n()).done;) {
54742        var cachedItem = _step.value;
54743
54744        if (cachedItem.keys.has(key)) {
54745          returnItems.push(cachedItem[singularTypeKey]);
54746
54747          if (!multiple) {
54748            break;
54749          }
54750        }
54751      }
54752    } catch (err) {
54753      _iterator.e(err);
54754    } finally {
54755      _iterator.f();
54756    }
54757  }
54758
54759  if (!multiple) {
54760    return returnItems.shift();
54761  }
54762
54763  return returnItems;
54764};
54765;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/feature/index.js
54766
54767
54768
54769// EXTERNAL MODULE: ./themes/user/reinos_maps/src/js/utils/replaceAll.js
54770var replaceAll = __webpack_require__(35197);
54771;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/utils/setInfowindowUrl.js
54772var setInfoWindowUrl = function setInfoWindowUrl(marker_object, type) {
54773  var url = '';
54774
54775  if (marker_object !== undefined) {
54776    switch (type) {
54777      case 'route_to':
54778        url = 'https://maps.google.com/maps?daddr=' + marker_object.lat() + ',' + marker_object.lng(); //http://maps.google.com/maps?saddr=start&daddr=end
54779
54780        break;
54781
54782      case 'route_from':
54783        url = 'https://maps.google.com/maps?saddr=' + marker_object.lat() + ',' + marker_object.lng(); //http://maps.google.com/maps?saddr=start&daddr=end
54784
54785        break;
54786
54787      default:
54788      case 'map':
54789        url = 'https://maps.google.com/maps?q=' + marker_object.lat() + ',' + marker_object.lng(); //https://maps.google.com/maps?q=
54790
54791        break;
54792    }
54793  }
54794
54795  return url;
54796};
54797// EXTERNAL MODULE: ./node_modules/domtastic/src/index.js + 19 modules
54798var src = __webpack_require__(2239);
54799;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/overlay/addOverlay.js
54800
54801
54802
54803
54804 //----------------------------------------------
54805//add a google like overlay like the iframe
54806//----------------------------------------------
54807
54808core/* ReinosMaps.prototype.addOverlay */.N.prototype.addOverlay = function (map, options) {
54809  var latlng;
54810  var marker_object; //default
54811
54812  map.overlay = {};
54813  map.overlay.enabled = false;
54814  map.overlay.position = options.overlay_position !== '' ? options.overlay_position : 'left';
54815  map.overlay.html = options.overlay_html !== '' ? options.overlay_html : ''; //do the checks
54816
54817  if (options.latlng !== undefined && options.latlng[0] !== undefined) {
54818    latlng = options.latlng[0].split(',');
54819    marker_object = leaflet_src_default().latLng(latlng[0], latlng[1]);
54820    map.overlay.html = (0,replaceAll/* replaceAll */.k)(map.overlay.html, '[route_to_url]', setInfoWindowUrl(marker_object, 'route_to'));
54821    map.overlay.html = (0,replaceAll/* replaceAll */.k)(map.overlay.html, '[route_from_url]', setInfoWindowUrl(marker_object, 'route_from'));
54822    map.overlay.html = (0,replaceAll/* replaceAll */.k)(map.overlay.html, '[map_url]', setInfoWindowUrl(marker_object, 'map'));
54823  }
54824
54825  if (map.overlay.html !== '') {
54826    if ((0,src/* default */.Z)(options.selector).find('#custom_maps_overlay').length === 0) {
54827      var style = "margin: 10px;\n      padding: 1px;\n      -webkit-box-shadow: rgba(0, 0, 0, 0.298039) 0px 1px 4px -1px;\n      box-shadow: rgba(0, 0, 0, 0.298039) 0px 1px 4px -1px;\n      border-top-left-radius: 2px;\n      border-top-right-radius: 2px;\n      border-bottom-right-radius: 2px;\n      border-bottom-left-radius: 2px;\n      background-color: white;";
54828      var html = "\n        <div class=\"google-like-overlay-position\" style=\"z-index:999;position: absolute; ".concat(map.overlay.position, ": 0; top: 0;\">\n          <div style=\"").concat(style, "\" id=\"custom_maps_overlay\">\n            <div style=\"padding:5px;\" class=\"place-card google-like-overlay-content place-card-large\">").concat(map.overlay.html, "</div>\n          </div>\n        </div>");
54829      (0,src/* default */.Z)(map.raw_options.selector).prepend(html);
54830    }
54831
54832    map.overlay.enabled = true;
54833  }
54834};
54835;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/overlay/removeOverlay.js
54836//----------------------------------------------
54837//remove a google like overlay like the iframe
54838//----------------------------------------------
54839
54840
54841
54842core/* ReinosMaps.prototype.removeOverlay */.N.prototype.removeOverlay = function (map, options) {
54843  map.overlay.enabled = false;
54844  map.overlay.position = 'left';
54845  map.overlay.html = '';
54846  (0,src/* default */.Z)(options.selector).find('#custom_maps_overlay').remove();
54847};
54848;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/overlay/updateOverlay.js
54849//----------------------------------------------
54850//update a google like overlay like the iframe
54851//----------------------------------------------
54852
54853
54854
54855core/* ReinosMaps.prototype.updateOverlay */.N.prototype.updateOverlay = function (map, options) {
54856  var self = this; //default
54857
54858  map.overlay = map.overlay || {};
54859  map.overlay.enabled = !!map.overlay.enabled;
54860  map.overlay.position = options.overlay_position !== '' ? options.overlay_position : map.overlay.position;
54861  map.overlay.html = options.overlay_html !== '' ? options.overlay_html : map.overlay.html; //no overlay?
54862
54863  if ((0,src/* default */.Z)(map.raw_options.selector).find('.google-like-overlay-position').length === 0) {
54864    self.addOverlay(map, options);
54865  }
54866
54867  if (map.overlay.html !== undefined) {
54868    if (map.overlay.html === '') {
54869      self.removeOverlay(map, options);
54870    } else {
54871      (0,src/* default */.Z)(map.raw_options.selector).find('.google-like-overlay-content').html(map.overlay.html);
54872    }
54873  }
54874
54875  if (map.overlay.position !== undefined) {
54876    (0,src/* default */.Z)(map.raw_options.selector).find('.google-like-overlay-position').css('left', '').css('right', '');
54877    (0,src/* default */.Z)(map.raw_options.selector).find('.google-like-overlay-position').css(map.overlay.position, '0px');
54878  }
54879};
54880;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/overlay/index.js
54881
54882
54883
54884;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tooltip/addTooltip.js
54885function addTooltip_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
54886
54887function addTooltip_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? addTooltip_ownKeys(Object(source), !0).forEach(function (key) { addTooltip_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : addTooltip_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
54888
54889function addTooltip_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
54890
54891//----------------------------------------------
54892//add and update an tooltip
54893//----------------------------------------------
54894
54895
54896core/* ReinosMaps.prototype.addTooltip */.N.prototype.addTooltip = function (options, feature) {
54897  //merge default icon settings with given settings
54898  options = addTooltip_objectSpread({
54899    //defaults
54900    'direction': 'auto',
54901    'permanent': false,
54902    'sticky': false,
54903    'content': ''
54904  }, options); //set the tooltip
54905
54906  if (options.content && options.content !== '') {
54907    var content = options.content;
54908    delete options.content;
54909    feature.bindTooltip(content, options);
54910  } else {
54911    feature.unbindTooltip();
54912  }
54913};
54914;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tooltip/updateTooltip.js
54915// update a tooltip
54916
54917
54918core/* ReinosMaps.prototype.updateTooltip */.N.prototype.updateTooltip = function (options, feature) {
54919  this.addTooltip(options, feature);
54920};
54921;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tooltip/index.js
54922
54923
54924// EXTERNAL MODULE: ./node_modules/leaflet.gridlayer.googlemutant/dist/Leaflet.GoogleMutant.js
54925var Leaflet_GoogleMutant = __webpack_require__(99627);
54926// EXTERNAL MODULE: ./node_modules/leaflet.mapkitmutant/Leaflet.MapkitMutant.js
54927var Leaflet_MapkitMutant = __webpack_require__(78215);
54928;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tiles/appleMaps.js
54929
54930
54931
54932var addAppleMapsTile = function addAppleMapsTile(tile) {
54933  if (tile.api_key === '') {
54934    (0,utils/* throwError */._y)('Missing Api Key. Please enter a correct API Key in your Maps cp.');
54935  }
54936
54937  var tileLayer = new (leaflet_src_default()).MapkitMutant({
54938    type: tile.name.replace('apple_maps_', ''),
54939    authorizationCallback: function authorizationCallback(done) {
54940      done(tile.api_key);
54941    },
54942    language: 'en',
54943    debugRectangle: false
54944  });
54945  tileLayer.name = tile.name;
54946  tileLayer.label = tile.label || tile.name;
54947  return tileLayer;
54948};
54949;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tiles/default.js
54950
54951var addTile = function addTile(tile) {
54952  var options = tile.options || {};
54953  var url = tile.url || '';
54954  var tileLayer = leaflet_src_default().tileLayer(url, options);
54955  tileLayer.name = tile.name;
54956  tileLayer.label = tile.label || tile.name;
54957  return tileLayer;
54958};
54959;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tiles/googleMaps.js
54960
54961
54962var addGoogleTile = function addGoogleTile(tile, googleStyledMap) {
54963  var tileLayer = leaflet_src_default().gridLayer.googleMutant({
54964    type: tile.name.replace('google_maps_', ''),
54965    styles: googleStyledMap
54966  });
54967  tileLayer.name = tile.name;
54968  tileLayer.label = tile.label || tile.name;
54969  return tileLayer;
54970};
54971;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/tiles/index.js
54972
54973
54974
54975;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/ad
54975dTiles.js
54976
54977
54978
54979
54980
54981
54982
54983core/* ReinosMaps.prototype.addTiles */.N.prototype.addTiles = function (map, tilesObject, google_styled_map, tile_control_position) {
54984  // decode back
54985  tilesObject = JSON.parse((0,utils/* base64Decode */.tV)(tilesObject));
54986  google_styled_map = google_styled_map || null;
54987  tile_control_position = tile_control_position || 'topright';
54988  var tiles = {};
54989  tilesObject.forEach(function (tile, index) {
54990    var tileLayer = {};
54991
54992    if (tile.name.match('google')) {
54993      tileLayer = addGoogleTile(tile, google_styled_map);
54994    } else if (tile.name.match('apple')) {
54995      tileLayer = addAppleMapsTile(tile);
54996    } else {
54997      tile.options['apikey'] = tile.api_key;
54998      tileLayer = addTile(tile);
54999    }
55000
55001    if (index === 0) {
55002      var minZoom = map.raw_options.min_zoom ? map.raw_options.min_zoom : tileLayer.options.minZoom;
55003      var maxZoom = map.raw_options.max_zoom ? map.raw_options.max_zoom : tileLayer.options.maxZoom;
55004      map.map.addLayer(tileLayer);
55005      map.map.setMinZoom(minZoom);
55006      map.map.setMaxZoom(maxZoom);
55007    }
55008
55009    tiles[tileLayer.label] = tileLayer;
55010  }); //save the tiles
55011
55012  map.tiles = tiles;
55013  map.tilesPosition = Object.keys(tiles).map(function (tileName) {
55014    return tileName;
55015  }); //add the tiles layers as a group if there are more then 1
55016
55017  map.tileControl = null;
55018
55019  if (tilesObject.length > 1) {
55020    map.tileControl = leaflet_src_default().control.layers(tiles, {}, {
55021      position: tile_control_position
55022    }).addTo(map.map);
55023    map.map.on('baselayerchange', function (e) {
55024      var minZoom = map.raw_options.min_zoom ? map.raw_options.min_zoom : e.layer.options.minZoom;
55025      var maxZoom = map.raw_options.max_zoom ? map.raw_options.max_zoom : e.layer.options.maxZoom;
55026      map.map.setMinZoom(minZoom);
55027      map.map.setMaxZoom(maxZoom);
55028    });
55029  }
55030};
55031;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/fitBounds.js
55032function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || fitBounds_unsupportedIterableToArray(arr) || _nonIterableSpread(); }
55033
55034function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
55035
55036function fitBounds_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return fitBounds_arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return fitBounds_arrayLikeToArray(o, minLen); }
55037
55038function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
55039
55040function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return fitBounds_arrayLikeToArray(arr); }
55041
55042function fitBounds_arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
55043
55044//Fit the Bounds
55045
55046
55047core/* ReinosMaps.prototype.fitBounds */.N.prototype.fitBounds = function (map) {
55048  var allBounds = [];
55049
55050  if (map.fit.markers) {
55051    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.markers));
55052  }
55053
55054  if (map.fit.circles) {
55055    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.circles));
55056  }
55057
55058  if (map.fit.rectangles) {
55059    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.rectangles));
55060  }
55061
55062  if (map.fit.polylines) {
55063    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.polylines));
55064  }
55065
55066  if (map.fit.polygons) {
55067    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.polygons));
55068  }
55069
55070  if (map.fit.geojson) {
55071    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.geojson));
55072  } //routes are polylines, so fit the bounds on that
55073
55074
55075  if (map.fit.routes) {
55076    allBounds = [].concat(_toConsumableArray(allBounds), _toConsumableArray(map.bounds.polylines));
55077  }
55078
55079  if (allBounds.length > 0) {
55080    map.map.fitBounds(allBounds); // input to zoom out per level
55081
55082    if (map.fit.forceZoomOut > 0) {
55083      map.map.zoomOut(map.fit.forceZoomOut);
55084    } // input to forceZoom on a level
55085    else if (map.fit.forceZoom > 0) {
55086      map.map.setZoom(map.fit.forceZoom);
55087    }
55088  }
55089};
55090;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/geolocate.js
55091//----------------------------------------------
55092// GeoLocate function
55093//----------------------------------------------
55094
55095
55096core/* ReinosMaps.prototype.geolocate */.N.prototype.geolocate = function (options) {
55097  var complete_callback = options.always || options.complete;
55098
55099  var error_callback = options.error || function () {};
55100
55101  var success_callback = options.success || function () {};
55102
55103  if (navigator.geolocation) {
55104    navigator.geolocation.getCurrentPosition(function (position) {
55105      success_callback(position);
55106
55107      if (complete_callback) {
55108        complete_callback();
55109      }
55110    }, function (error) {
55111      error_callback(error);
55112
55113      if (complete_callback) {
55114        complete_callback();
55115      }
55116    }, options.options);
55117  } else {
55118    if (complete_callback) {
55119      complete_callback();
55120    }
55121  }
55122};
55123;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/initPopup.js
55124function initPopup_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
55125
55126function initPopup_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
55126 i % 2 ? initPopup_ownKeys(Object(source), !0).forEach(function (key) { initPopup_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : initPopup_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
55127
55128function initPopup_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
55129
55130
55131
55132
55133
55134core/* ReinosMaps.prototype.initPopup */.N.prototype.initPopup = function (feature, popupOptions) {
55135  //merge default settings with given settings
55136  popupOptions = initPopup_objectSpread({
55137    //Popup default
55138    'maxWidth': '300',
55139    'minWidth': '50',
55140    'maxHeight': null,
55141    'autoPan': true,
55142    'autoPanPaddingTopLeft': null,
55143    'autoPanPaddingBottomRight': null,
55144    'autoPanPadding': [5, 5],
55145    'keepInView': false,
55146    'closeButton': true,
55147    'autoClose': true,
55148    'closeOnEscapeKey': true,
55149    'closeOnClick': '*',
55150    'className': '',
55151    'popupContent': ''
55152  }, popupOptions); //convert, if the content is base64 encoded
55153
55154  popupOptions.popupContent = (0,utils/* decodeContent */.vN)(popupOptions.popupContent); //add popup to the feature if there is any content
55155
55156  if (popupOptions.popupContent && popupOptions.popupContent !== '') {
55157    var popup = leaflet_src_default().popup(popupOptions).setContent(popupOptions.popupContent);
55158    feature.bindPopup(popup);
55159  }
55160
55161  return feature;
55162};
55163;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/ready.js
55164//ready function, when this file is totally ready
55165
55166
55167core/* ReinosMaps.prototype.ready */.N.prototype.ready = function (callback) {
55168  this.on('maps.ready', callback);
55169};
55170;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/setGeoJsonStyle.js
55171//set the geoJSON style
55172
55173
55174core/* ReinosMaps.prototype.setGeoJsonStyle */.N.prototype.setGeoJsonStyle = function (style) {
55175  if (typeof style === 'function') {
55176    this._geojson.style = style;
55177  } else {
55178    throw new Error('Given parameter for style is not a function');
55179  }
55180};
55181;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/events.js
55182function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
55183
55184function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
55185
55186function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
55187
55188function events_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
55189
55190
55191
55192var Event = /*#__PURE__*/function () {
55193  function Event() {
55194    _classCallCheck(this, Event);
55195
55196    events_defineProperty(this, "queue", {});
55197
55198    events_defineProperty(this, "fired", []);
55199  }
55200
55201  _createClass(Event, [{
55202    key: "fire",
55203    value: function fire(event) {
55204      var queue = this.queue[event];
55205
55206      if (typeof queue === 'undefined') {
55207        return;
55208      }
55209
55210      while (queue.length) {
55211        queue.shift()();
55212      }
55213
55214      this.fired[event] = true;
55215    }
55216  }, {
55217    key: "on",
55218    value: function on(event, callback) {
55219      if (this.fired[event] === true) {
55220        return callback();
55221      }
55222
55223      if (typeof this.queue[event] === 'undefined') {
55224        this.queue[event] = [];
55225      }
55226
55227      this.queue[event].push(callback);
55228    }
55229  }]);
55230
55231  return Event;
55232}();
55233
55234var _event = new Event(); // Expose the events
55235
55236
55237core/* ReinosMaps.prototype.on */.N.prototype.on = function (event, callback) {
55238  _event.on(event, callback);
55239};
55240
55241core/* ReinosMaps.prototype.fire */.N.prototype.fire = function (event) {
55242  _event.fire(event);
55243};
55244;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/reverseLatLngArray.js
55245//set the geoJSON style
55246
55247
55248
55249core/* ReinosMaps.prototype.reverseLatLngArray */.N.prototype.reverseLatLngArray = function (array) {
55250  return (0,utils/* reverseLatLngArray */.np)(array);
55251};
55252;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/reParseLatLngArray.js
55253
55254
55255
55256core/* ReinosMaps.prototype.reParseLatLngArray */.N.prototype.reParseLatLngArray = function (array) {
55257  return (0,utils/* reParseLatLngArray */.NY)(array);
55258};
55259;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/maps/index.js
55260
55261
55262
55263
55264
55265
55266
55267
55268
55269
55270
55271
55272
55273
55274
55275;// CONCATENATED MODULE: ./themes/user/reinos_maps/src/js/index.js
55276
55277
55278
55279
55280window.REINOS_MAPS = new core/* ReinosMaps */.N();
55281})();
55282
55283// This entry need to be wrapped in an IIFE because it need to be in strict mode.
55284(() => {
55285"use strict";
55286/* unused harmony default export */ var __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__.p + "maps.production.bundle.css");
55287})();
55288
55289/******/ })()
55290;
55291//# sourceMappingURL=maps.production.bundle.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.